anfänger braucht hilfe bei Formelumwandlung infix/postfix

Dieses Thema im Forum "C/C++" wurde erstellt von raven1276, 31.10.2005.

  1. #1 raven1276, 31.10.2005
    raven1276

    raven1276 Grünschnabel

    Dabei seit:
    31.10.2005
    Beiträge:
    1
    Zustimmungen:
    0
    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
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. oenone

    oenone Freier Programmierer[Mod]

    Dabei seit:
    22.08.2002
    Beiträge:
    599
    Zustimmungen:
    0
    Ort:
    Mannheim
    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
     
Thema:

anfänger braucht hilfe bei Formelumwandlung infix/postfix

Die Seite wird geladen...

anfänger braucht hilfe bei Formelumwandlung infix/postfix - Ähnliche Themen

  1. Anfänger braucht Hilfe bei DVB-S Installation

    Anfänger braucht Hilfe bei DVB-S Installation: Hallo, ich habe ein Problem. Ich habe openSuse 13.2 frisch installiert. Jetzt soll ein usb-TV-Modul TEVII s660 funktionieren. Ich kann bereits...
  2. VPN mit WINS Anfänger braucht Hilfe

    VPN mit WINS Anfänger braucht Hilfe: Wins Konfigurieren für mehrere Subnetze NEULING Hallo, vielleicht kann mir Jemand helfen, ich will drei Netzwerke mit einander so Verbinden,...
  3. Script anfänger...braucht ein paar Tipps

    Script anfänger...braucht ein paar Tipps: Hallo, ich bin Script anfänger und versuche ein script zu schreiben, dass mir in einem Verzeichnis alle desktop.ini sucht und dann...
  4. Bloody anfänger braucht starthilfe :-)

    Bloody anfänger braucht starthilfe :-): Hallo, habe mir einen gebrauchten Laptop zugelegt um mich endlich mal an Linux zu wagen und damit zu experimentieren. Leider fehlt mir der...
  5. openSUSE 10.2 Anfänger braucht Hilfe

    openSUSE 10.2 Anfänger braucht Hilfe: Hallo, möchte mich das erste mal mit Linux auseinandersetzen und habe openSUSE 10.2 (DVD-Version) gezogen und auf eine DVD-RW mit NERO 7...