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 = koef10 + (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 = koefpow(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]);