Parser Programm



  • Ich hab ein kleines (naja..großes) Problem. Schreibe Morgen ne Klausur und verstehe ein Programm nicht. Wenn jem. evtl mir helfen könnte wäre das großatig!
    Bräuchte krze Definition für jede Zeile..naja..also für die komplizierteren. Die Deklarationen sind ja klar. Auch was das programm bewirkt ist klar,aber die einzelenen zeilen und wie die Verknüpfungen zueinander sind ist mir ein Rätsel : )

    Programm:
    //---------------------------------------------------------------------------
    #include<conio.h>
    #include<iostream.h>
    #include<math.h>
    #pragma hdrstop

    //---------------------------------------------------------------------------

    #pragma argsused
    char term [80];
    int pos = 0;
    double arg, wert, koef=0, d=0.1;

    int isnumber()
    {
    if(term[pos] < '0') return 0;
    if(term[pos] > '9') return 0;
    return 1;
    }

    double koeffizient()
    {
    while (term[pos] != 'x')
    {
    switch(term[pos])
    {
    case '': pos++;break;
    case '0': case '1': case '2': case '3': case '4': case '5':
    case '6': case '7': case '8': case '9':
    koef = koef
    10 + (term[pos]-'0');pos++;break;
    case '.': pos++;
    while(isnumber())
    {
    koef += (term[pos] - '0')*d;
    d *= 0.1;
    pos++;
    } break;

    }
    }
    return koef;
    }
    int main(int argc, char* argv[])
    {
    double exp=0;
    cout<<"\nTerm eingeben: "; cin>>term;
    cout<<"\nx eingeben: "; cin>>arg;
    koeffizient();
    if ( koef == 0) koef = 1;
    d=0.1;
    while (term[pos] != '\0')
    {
    switch(term[pos])
    {
    case 'x': wert = arg; break;
    case '^': pos++;
    while(isnumber())
    {
    exp = exp*10 + (term[pos]-'0');
    pos++;
    }
    case '.': pos++;
    while(isnumber())
    {
    exp += (term[pos] - '0')*d;
    d = 0.1;
    pos++;
    } break;
    }
    pos++;
    }
    wert = koef
    pow(arg,exp);
    cout<<"\n\tWert: "<<wert;
    getch();
    return 0;

    Wenn jem. die Zeit hat wäre das echt großartig!!!!!!!
    DANKE!



  • ich will ja keine panik machen, aber wenn dir das programm
    unklar ist, wirst du die klausur wohl kaum ueberstehen.

    da sind eigentlich keine ausgefallenen sachen drin.
    vielleicht das term[pos]-'0'
    da wird der "abstand" zweier ascii-zeichen gebildet.
    ist term[pos] z.b. das zeichen '4'
    erhaelts du als ergebnis den int-wert 4.
    der ausdruck wird hier also zum umwandeln eines zeichens
    in eine zahl verwendet.



  • if(term[pos] < '0') return 0; 
    if(term[pos] > '9') return 0; 
    return 1;
    

    Heißt soviel wie:

    return isdigit(term[pos]);
    

Anmelden zum Antworten