Jetzt ist es so weit. Der Code sieht Schlimmer aus als ich gedacht habe.
Er ist noch nicht lauffähig und Hinten und Vorne noch nicht Fertig. Da ich aber in den nächsten wochen/Monaten keine Zeit dafür finden werde habe ich gedacht ich poste mal das was ich habe.
Was noch verbessert werden müsste:
-Alle Funktionen Fertig schreiben
-Kommentare müssen aussagekräftiger sein, und viel mehr$
-die Speichzeranforderung: malloc und weitere
-Überarbeiten von Returnwerten/Übergabewerten was wo ist
-Namen überarbeiten
und noch ein paar Kleinigkeiten
Bitte nicht erschrecken:
Code: Alles auswählen
#include <stdio.h>
#include <string.h>
/*chararray:
char num_ersatz[9]={'0','1','2','3','4','5','6','7','8','9'}*/
/*
Es fehlt noch Die Funktion die nach /vor der mathe funktion den string zerkleinert.
00*(01-02)+03
wird dann zu:
00*01+03
*/
struct matfunc
{
bool aktiv;
char *sig[3];
short (*function)(short); /*warscheinlich mit void * pointer...Zeiger auf Matfunktion*/
}matfunc[2][3];/*erste '2' für die abstufung, priorität. zweite '3' für die einzelnen matfunktionen*/
#error Wertzuweisen für struct matfunc
double *numbrlist; /*zeiger auf double array mit allen zahlen drin*/
int main (int anzahl, char arg)
{
/*
struct *s_daten;
char *rechnung;
wertet Argumente aus
prase_string(arg, 0);
mittels malloc speicher anfordern und als zeiger numbrlist von den globalen variablen benutzen
s_daten=prase_string(arg, 1);
while(Fertig)
{
rechnung search_klmr(s_daten.opt_strng);
pcal(rechnung);
}
*/
}
struct *prase_string(char *arg, bool rorw)
{
/*mit malloc Speicher für struct data anfordern:
struct data
{
short anz_num;
char *opt_strng;
}*/
for(k=0;arg[k]!='\n';k++)
{
if(/*Zahl Anfang*/)
{
if(rorw)
{anz++;}
else
{
numbrlist[anz]=strtod(); //strtod() konvertiert string zu double
/*überträgt anz in neuen string*/
anz++;
}
}
if else(/*wenn operator oder klammer->übertragen.*/)
{
/*übertragen*/
}
}
return data;
}
#error mehr komentare
char* search_klmr(char *opt_strng)
{
short k, j, i;
char rechnung[255];
while(opt_strng[k]!=')'&&'\0'!=opt_strng)
{
k++;
j++;
if(opt_strng[k]=='(')
{
j=0;
}
}
for(i=0;i>j;i++)
{
rechnung[i]=opt_strng[k-j+i];
}
/*string muss noch aufgespalten werden und dann wieder zusammengefügen*/
//return rechnung;
}
char* pcal (char *calc)
{
short k=0, j=0, i=0;
short index[1];/*zur speicherung von denn IndexWerten der Zahlen*/
for(k=0;k<=2;k++)
{
for(j=0;matfunc.aktiv;j++)
{
while(calc[j]!='\0')
{
i++;
if(calc[i]==matfunc[k][j].sig[0])/*funktionsaufruf matest, überprüft ob übereinstimmt, ignoriert leerzeichen und \0*/
{
index=search_index(calc, i);
(matfunc[k][j].*function)(index);
/*ändert den string*/
}
}
}
}
return 0;
}
short ma_test()
short search_index (char *rechnung, short pos)
{
short index[1];
/*sucht im string die vorhergehende und nachfolgende indexzahl.*/
return index;
}
short output (char* arg, double resultat)
{
}
out_bin (char* arg, double resultat)
out_dec (char* arg, double resultat)
out_oct (char* arg, double resultat)
#error überprüfen wegen variablen gültigkeit ob alle variablen verfügbar sind
short r_wuzel (short *index)/*Resultat wird in array gespeichert.*/
{
}
short r_potenz (short *index)/*Resultat wird in array gespeichert.*/
{
#error prüfen ob k übereinstimmt
int k;
int num_urs = numbrlist[index[0]];
for(k=0;k<numbrlist[index[1]];k++)
{
numbrlist[index[0]]*=num_urs;
}
return 0;
}
short r_multi (short *index)
{
numbrlist[index[0]]=numbrlist[index[0]]*numbrlist[index[1]]; /*Resultat wird in array gespeichert.*/
return 0;
}
short r_divi (short *index)
{
numbrlist[index[0]]=numbrlist[index[0]]/numbrlist[index[1]];/*Resultat wird in array gespeichert.*/
return 0;
}
short r_sup (short *index)
{
numbrlist[index[0]]=numbrlist[index[0]]-numbrlist[index[1]];/*Resultat wird in array gespeichert.*/
return 0;
}
short r_add (short *index)
{
numbrlist[index[0]]=numbrlist[index[0]]+numbrlist[index[1]];/*Resultat wird in array gespeichert.*/
return 0;
}