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
129,800
Mesajlar
930,210
Kullanıcılar
452,598
Son üye
Pavantanwar

Yeni konular

Geri
Üst