anfänger braucht hilfe bei Formelumwandlung infix/postfix

R

raven1276

Hallo,

ich sitz nun schon seit einigen Tagen an einer Programmierenaufgabe. Es soll ein Infix-Ausdruck in einen üpostfic-ausdruck umgewandelt werden. Ich dachte, ich hätts verstanden, aber mein Programm macht jede Menge murks. Die Klammern z.B. werden ausgegeben, obwohl sie ja gelöscht werden sollten. Es wäre echt klasse, wenn sich jemand mal den Quellcode ansehen würde und mir sagen könnte, was ich alles flasch gemacht habe. Ich blicke da nicht mehr durch. Achja, wir sollten gets nehmen. Vielen Dank schonmal im vorraus.

Code:
#include <stdio.h>
char input[100];
char output[100];
char help[100];
int input_index=0;
int help_index=0;
int output_index=0;
int input_prio;
int help_prio;


void push(char a){
   help[help_index]=a;
   help_index++;
}


char pop(){
help_index--;   
   return help[help_index];
}


int priority(char a){
   int prio;
   switch(a){
      case '+':prio=1;
      break;
   
      case '-':prio=1;
      break;
   
      case '*':prio=2;
      break;
   
      case '/':prio=2;
      break;
   
      case '(':prio=3;
      break;
   
      case ')':prio=4;
      break;
   
      default:prio=0;
      break;
      }
return prio;
}

   
void umformung(){
//   input_prio=priority(input[input_index]);
//   if(input_prio==0){
//      
//      output[output_index]=input[input_index];
//      output_index++;
//      input_index++;
//      }
//   else{
//      push(input[input_index]);
//      input_index++;
//      }
   while (input[input_index] !='\0')
   {
      if(help[help_index]=='#'){
         input_prio=priority(input[input_index]);
         if(input_prio==0){
            output[output_index]=input[input_index];
            output_index++;
            input_index++;
            }
         else{
            push(input[input_index]);
            input_index++;
            }
      }
         else{
         input_prio=priority(input[input_index]);
         help_prio=priority(help[help_index]);
         if(input_prio==4){
            while(help[help_index] !='#'){
               output[output_index]=pop();
               output_index++;
               }
            }
         else{
            if(input_prio==3){
               push(input[input_index]);
               input_index++;
               }
            else{
               if(input_prio==0){
                  output[output_index]=input[input_index];
                  output_index++;
                  input_index++;
                  }
               else{
                  if(input_prio>help_prio){
                     push(input[input_index]);
                     input_index++;
                     }
                  else{
                     output[output_index]=pop();
                     output_index++;
                     }
                  }
               }
            }
         }
      }
   while(help[help_index] !='#'){
      if(help[help_index] !='#'){   
      output[output_index]=pop();
      output_index++;
      }
      }
   }
   





main(){
      
   printf("\n\nDieses Programm formt Ausdrücke von der Infix in die Postfix-Notation um.\n");
   printf("Es können nur Konstanten,Variablen und Zahlen mit einer Stelle verwendet werden.\n");
   printf("Erlaubte Operatoren sind: '+''-''*''/''('')'\n");
   printf("Bitte geben sie den Ausdruck, der umgeformt werden soll ein:");
   
   gets (input);
   push('#');
   umformung();
   printf("umgeformte Gleichung: %s\n",output);

   }

gruß Robert
 
hast du dir denn vorher überlegt, was das programm machen soll?
also z.b. struktogramm oder pap oder ähnliches...

wenn ja, zeig das mal - eventuell hast du einen logischen denkfehler drin. ansonsten könnte auch bei der implementierung was schief gleaufen sein - auch das können mehr augen besser erkennen ;)

wenn nein, lösch den ganzen code und fang damit neu an. der größte teil der zeit sollte für die planung draufgehen.

auf bald
oenone
 

Ähnliche Themen

C Code Hilfe!!! gesucht bei Dezimalzahl in Binärzahl for loop

Unix Webserver mit HTML Seite erstellen

Port generieren, wenn nicht dann

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Aufgabe in C

Zurück
Oben