C programlama dili yığın konusu yardım

OzlemSamet

Üye
Katılım
12 Nis 2010
Mesajlar
2
Puanları
1
c dilinde yığın konusu içinde parantez kontrolü yapan programı bulmaya çalışıorm yardım edermisiniz..!

matematik işlemine göre {a-f} işlemine doğru
(a-f( işlemine yanlış diyecek.. acillllll:(
 
Sorunu tam anlayamadım. Daha açık sorarsan yardımcı olabilirim.
 
arkadasın sormak istediği soru açık olarak şöyle kodu yazamadım bende çok ugraştım Verilen bir matematiksel ifadede parantezlerin doğru kullanılıp kullanılmadığı kontrol edilmek isteniyor. Çözüm yöntemi olarak yığın yapısı kullanılacaktır. Matematiksel ifade üzerinde ilerlenirken bir açma parantezine ( ‘(‘, ‘[‘, ‘{‘ ) gelindiğinde bu eleman yığına eklenecek, bir kapama parantezine ( ‘)‘, ‘]‘, ‘}‘ ) gelindiğinde yığından eleman çıkartılacak ve tersi olduğu kontrol edilecektir, yanlışsa formül hatalıdır. Matematiksel ifade bitimine rağmen yığında eleman(lar) kalmışsa, ya da yığında eleman yokken çıkartma işlemi yapılmaya çalışılıyorsa da formülde hata vardır. Bu kontrolü gerçekleştiren C programını yazınız.
Örnek:
{ A * B } – [ A / B ] ifade doğru
[ A * ( B + C ) + D ] / E İfade doğru
[ A * ( B + C ] + D ) / E İfade yanlış
[ A – B ] * ( C – D ifade yanlış
A / B ) + C ( ifade yanlış
 
#include <stdio.h>
#include <conio.h>
#include <string.h>

int top, ml;
//--------------------------------------------------------------------
int FULL(void) {

if (top>=ml) return 1;
else return 0;

}
//--------------------------------------------------------------------
int EMPTY(void) {

if (top<=0) return 1;
else return 0;

}
//--------------------------------------------------------------------
void POP(char &x, char S[]) {

if (EMPTY()) printf("\n!!! Girilen islem HATALI !!!\n");
else {
x = S[top];
top = top - 1;
}

}
//--------------------------------------------------------------------
void PUSH(char x, char S[]) {

if (FULL()) printf("\n!!! Girilen islem HATALI !!!\n");
else {
top = top + 1;
S[top] = x;
}

}
//--------------------------------------------------------------------
int i, hata;
char metin[50], k;
char Stack[50];
//--------------------------------------------------------------------
void Karsilastir(char sembol, char cikan);
void YiginKontrol();
void HataVar();
void HataYok();
//--------------------------------------------------------------------
void Kontrol(char sembol, int i)
{
switch(sembol)
{
case '(':
case '{':
case '[':
PUSH(metin, Stack);
default :
switch(sembol)
{
case ')':
case '}':
case ']':
if (EMPTY() == 0)
{
POP(k, Stack);
Karsilastir(sembol, k);
}
else
hata+=1;
}
}
}
//--------------------------------------------------------------------
void Karsilastir(char sembol, char cikan)
{
switch(sembol)
{
case ')':
if (cikan=='(')
{

break;
}
else
{
HataVar(); break;
}
case '}':
if (cikan=='{')
{
break;
}
else
{
HataVar(); break;
}
case ']':
if (cikan=='[')
{
break;
}
else
{
HataVar(); break;
}
}
}
//--------------------------------------------------------------------
void HataVar()
{
hata+=1;
}
void HataKontrol()
{
if (EMPTY()==0 || hata>0)
printf("\n!!! Girilen islem HATALI !!!\n");
else
printf("\n!!! Girilen islem DOGRU tanimlanmistir !!!\n");
}
//--------------------------------------------------------------------
void main()
{
clrscr;
top = 0;
ml = sizeof(Stack);
printf("Infix Notasyonunda Parantez Kontrolu\n");
printf("------------------------------------\n");
printf("\nInfix: ");
scanf("%s", metin);
for (i=0; i<strlen(metin); i++)
{
Kontrol(metin, i);
}
HataKontrol();
getch();
}





kodu yazan arkadasım Mstfcck :)
 

Forum istatistikleri

Konular
128,133
Mesajlar
915,308
Kullanıcılar
449,850
Son üye
umutbaysal9

Yeni konular

Çevrimiçi üyeler

Geri
Üst