Sedat DURMUŞ ve Programlama Sanatı
sedatdurmuscomputereng  
 
  Infix to Postfix Kodları 15.03.2025 03:33
   
 

#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <fstream.h>
#include <string>
using namespace std;

void isaretlerkoy(char);
int oncelik(char);
void tasi();
int hata(int );

char infix[50],postfix[50],isaretler[50];
int isaretust=-1;
int j=0;

int main(int argc, char *argv[])
{int oncelik1,oncelik2,eror;
char ch;
ifstream oku_dosya;
string dosyaadresi;
    cout<<"Infix ifadeyi dosyadan alacaksaniz d'ye basin..."<<endl<<endl;
    cout<<"Infix ifadeyi siz girecekseniz i'ye basin."<<endl<<"ardindan yanina denklemi yaziniz:"<<endl<<endl;
    cin>>ch;
   

  for(int i=0;i<50;i++){                       //---------------diziler NULL yapıldı.
             postfix[i]=0;
             isaretler[i]=0;
             } 
    x:
         if(ch=='d'){               //-----dosyadan okunacaksa bu bölümde okuma yapılır.
              cout<<"dosya ismi girin:"<<endl;
                 cin>>dosyaadresi; 
                   oku_dosya.open(dosyaadresi.c_str());
                   while((oku_dosya>>infix));
      oku_dosya.close();
                     }            //---------------------------------------------- 
         else {       //----denklem elle girilecekse burda girilir.
              cout<<endl;
              gets(infix);
              cout<<endl;
                }    //----------------------------------------
      
                        


        for(int i=0;infix[i]!=0;i++){
                                
                                 eror=hata(i);             //--denklemdeki hataları tespit eder.
                                 if(eror==1)
                                 goto x;
                     
              if(infix[i]!='('&&infix[i]!=')'&&infix[i]!='/'&&infix[i]!='*'&&infix[i]!='+'&&infix[i]!='-'&&infix[i]!='^')
                        postfix[j++]=infix[i];
               else if(infix[i]=='(')                       //aç parantez yerleştirmesi
                        isaretlerkoy(infix[i]);
               else if(infix[i]==')'){                     //kapa parantez yerleştirmesi
                          while(isaretler[isaretust]!='('){
                            isaretust=isaretust-1;                              
                          postfix[j++]=isaretler[isaretust+1];
                                                           }
                          isaretust--;
                                        }                   //---------kapa parantez yerleşti---------------                      
                                          
                else{                                 //aritmetik işlem elemanı yerleştirmesi                        
                          oncelik1=oncelik(infix[i]);
                         
                          if(isaretust!=-1){
                          oncelik2=oncelik(isaretler[isaretust]);}  
                          else
                          oncelik2=0;           
                                       if(oncelik1>oncelik2)
                                           isaretlerkoy(infix[i]);
                         
                                       else{
                                           
                                            while(oncelik1<=oncelik2){
                                                                     
                                                                      if(isaretust==-1)
                                                                      break;
                                                                      else{
                                                                       tasi();
                                                                        oncelik2=0; 
                                                                        }
                                                                          
                                                                        }   
                                                       isaretlerkoy(infix[i]);   
                                            }
                           }                                 //----------------işlem yerleştirmesi biter.
                       }
      
       for(int i=0;i<=isaretust;i++){       //denklem bitince isaretler dizisindeki elemanları postfix'e aktarır
                           postfix[j++]=isaretler[i];
                           
                            }
                           
                            cout<<endl<<"postfix:";    //--postfix'i ekrana yazdırır.
                    for(int i=0;i<50;i++){
                            if(postfix[i]!='(')
                    cout<<postfix[i];    
                    }
                    cout<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
//----------------------------------------------------------------------------------------------------------------------
void isaretlerkoy(char krk){
        if(isaretust!=49){
                          isaretust++;
                          isaretler[isaretust]=krk;
                          }
                        }
//-----------------------------------------------------------------------------------------------------------------------
int oncelik(char krk){
               if(krk=='^') return 4;   
          else if(krk=='*'||krk=='/') return 3;    
          else if(krk=='+'||krk=='-') return 2;        
else if(krk==')'||krk=='(') return 1;
                      }
//------------------------------------------------------------------------------------------------------------------------
void tasi(){
     while(isaretust!=-1){
     postfix[j++]=isaretler[isaretust--];
                         }
            }
//-------------------------------------------------------------------------------------------------------------------------
 int hata(int i){
     if(infix[i]=='('&&infix[i+1]==')'){
                                         cout<<"parantez hatasi yaptiniz."<<i+2<<". denklem elemanini kontrol ediniz."<<endl;
                                         return 1;
                                         }
      if(infix[i]=='('&&infix[i+1]!=')'){
                                      if(infix[i+1]=='/'||infix[i+1]=='*'||infix[i+1]=='-'||infix[i+1]=='+'||infix[i+1]=='^'){
                                         cout<<"isaret hatasi yaptiniz."<<i+2<<". denklem elemanini kontrol ediniz."<<endl;
                                         return 1;
                                                                                                                              }  
                                         }
      if(infix[i]=='('){
           if(infix[i]!='('&&infix[i]!=')'&&infix[i]!='/'&&infix[i]!='*'&&infix[i]!='+'&&infix[i]!='-'&&infix[i]!='^'){
                cout<<"parantez hatasi yaptiniz."<<i<<". denklem elamanini kontrol ediniz."<<endl;
                          return 1;
                                                                                                                     }
                                       }
     
      if(infix[i]=='/'||infix[i]=='*'||infix[i]=='+'||infix[i]=='-'){
                                                                     if(infix[i+1]==')'){
         cout<<"parantez hatasi yaptiniz."<<i+2<<". denklem elemanini  kontrol ediniz."<<endl;
                                         return 1;
                                         }
                                                                     }
           if(infix[i]=='/'||infix[i]=='*'||infix[i]=='+'||infix[i]=='-'){
               if(infix[i+1]=='/'||infix[i+1]=='*'||infix[i+1]=='+'||infix[i+1]=='-'){
                 cout<<"isaret hatasi yaptiniz.Ard arda iki isaret gelemez."<<i+2<<". denklem elemanini kontrol ediniz."<<endl;
                                                                                return 1;
                                                                                      }
                                                                          }                                                         
      return 0;                                  
     }  
     
     
         
                   
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
INFOMELDUNG_LOGINBOX
Bugün 1 ziyaretçi (2 klik) kişi burdaydı!
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol