MikeX Geschrieben 2. Juni 2009 Geschrieben 2. Juni 2009 Hallo, habe folgendes Problem.. Wollte einen einfachen Rechner machen, wo man auswählen kann ob + - * oder / ... eine bestimmte Anzahl an zahlen, die man eingeben kann. Die eingabe und ausgabe wollte ich nicht in jeder Auswahl wieder schreiben und somit mit Unterprogramme arbeiten... Bloß wie übergebe ich und geschweige wie gebe ich das Array(e[]) wieder zurück???? #include <iomanip.h> #include <iostream.h> #include <stdio.h> #include <conio.h> double addiere(void); double subtrahiere(void); double multipliziere(void); double dividiere(void); double eingabe(void); double x,y,erg=0; char k; int laenge,z,i; double e[25]; int main () { cout<<"\tRechner mit Up´s\n"; cout<<"Wieviele ZAhlen wollen Sie eingeben =?\n"; cin>>laenge; cout<<"\n\n\n\nWollen die die Zahlen\n\t"; cout<<"addieren(a)\n\tsubtrahieren(s)\n\tmultiplizieren(m)\n\tdividieren(d)"; cout<<"\t\t???\n"; k=getch(); switch(k) { case 'a':{ cout<<" Geben sie bitte ihre "<<laenge<<" Zahlen ein:\n"; eingabe(); for(i = 1;i<=laenge;i++) { cout<<i<<". Zahl:\t"; cin>>e; } clrscr(); ausgabe(); for(z=1;z<=laenge;z++) { cout<<z<<". Zahl:\t"<<e[z]<<endl; erg=erg + e[z]; } cout<<"\nErgebnis bei der Addition der Zahlen: "<<erg<<endl; } } getch(); return 0; } /* //-------------------------------------------------------- double eingabe(double e[]) // der wert wird in e als double empfangen =? { double e[25]; cout<<" Geben sie bitte ihre "<<laenge<<" Zahlen ein:\n"; for(i = 1;i<=laenge;i++){cout<<i<<". Zahl:\t"; cin>>e;} return e; } //-------------------------------------------------------- //-------------------------------------------------------- double ausgabe(double e[]) //Stimmt die Deklaration =? { cout<<z<<". Zahl:\t"<<e<<endl; return e; } //-------------------------------------------------------- //-------------------------------------------------------- double addiere(void) { double e; for(z=1;z<=laenge;z++) { erg=erg+e[z]; } return erg; } //-------------------------------------------------------- */ Zitieren
TDM Geschrieben 2. Juni 2009 Geschrieben 2. Juni 2009 eingabe(e); //... ausgabe(e); Arrays sind Zeiger. :floet: [Edierle] Warum hat ausgabe(double[]) einen Rückgabewert? Zitieren
MikeX Geschrieben 2. Juni 2009 Autor Geschrieben 2. Juni 2009 das ist ja mein Problem das es nicht so funktioniert..... meinst so: #include <iomanip.h> #include <iostream.h> #include <stdio.h> #include <conio.h> double addiere(void); double subtrahiere(void); double multipliziere(void); double dividiere(void); double eingabe(void); double x,y,erg=0; char k; int laenge,z,i; double e[25]; int main () { cout<<"\tRechner mit Up´s\n"; cout<<"Wieviele ZAhlen wollen Sie eingeben =?\n"; cin>>laenge; cout<<"\n\n\n\nWollen die die Zahlen\n\t"; cout<<"addieren(a)\n\tsubtrahieren(s)\n\tmultiplizieren(m)\n\tdividieren(d)"; cout<<"\t\t???\n"; k=getch(); switch(k) { case 'a':{ cout<<" Geben sie bitte ihre "<<laenge<<" Zahlen ein:\n"; eingabe(e); for(i = 1;i<=laenge;i++) { cout<<i<<". Zahl:\t"; cin>>e; } clrscr(); ausgabe(e); for(z=1;z<=laenge;z++) { cout<<z<<". Zahl:\t"<<e[z]<<endl; erg=erg + e[z]; } cout<<"\nErgebnis bei der Addition der Zahlen: "<<erg<<endl; } } getch(); return 0; } //-------------------------------------------------------- double eingabe(double e[]) { double e[25]; cout<<" Geben sie bitte ihre "<<laenge<<" Zahlen ein:\n"; for(i = 1;i<=laenge;i++){cout<<i<<". Zahl:\t"; cin>>e;} return e; } //-------------------------------------------------------- //-------------------------------------------------------- double ausgabe(double e[]) { cout<<z<<". Zahl:\t"<<e<<endl; return e; } //-------------------------------------------------------- /* //-------------------------------------------------------- double addiere(void) { double e; for(z=1;z<=laenge;z++) { erg=erg+e[z]; } return erg; } //-------------------------------------------------------- */ das FETT-gedruckte sind ja nur die Problemstellen...... Zitieren
Micha82 Geschrieben 2. Juni 2009 Geschrieben 2. Juni 2009 double eingabe(double *e) { //double e[25]; -> brauchst du nicht cout<<" Geben sie bitte ihre "<<laenge<<" Zahlen ein:\n"; for(i = 1;i<=laenge;i++){cout<<i<<". Zahl:\t"; cin>>e;} //return e; //das return brauchst du nicht weils n zeiger is } //-------------------------------------------------------- //-------------------------------------------------------- double ausgabe(double *e) { cout<<z<<". Zahl:\t"<<e<<endl; //return e; //das return brauchst du nicht weils n zeiger is und außerdem du hier mit dem e nix machst außer ausgeben... } versuchs mal so... Zitieren
MikeX Geschrieben 2. Juni 2009 Autor Geschrieben 2. Juni 2009 //-------------------------------------------------------- double eingabe(double *e) { double e[25]; cout<<" Geben sie bitte ihre "<<laenge<<" Zahlen ein:\n"; for(i = 1;i<=laenge;i++) { cout<<i<<". Zahl:\t"; cin>>e; } return e; // wieso nicht ich will doch das array zurückgeben!!!? } //-------------------------------------------------------- //-------------------------------------------------------- double ausgabe(double *e) { cout<<z<<". Zahl:\t"<<e<<endl; } er sagt wie vorher : Multiple declaration for 'e'/ Connot convert 'double *' to 'double' Zitieren
Micha82 Geschrieben 2. Juni 2009 Geschrieben 2. Juni 2009 (bearbeitet) //-------------------------------------------------------- double eingabe(double *e) { double e[25]; Das musst du noch weg machen oder auskommentieren oder löschen oder sonst was cout<<" Geben sie bitte ihre "<<laenge<<" Zahlen ein:\n"; for(i = 1;i<=laenge;i++) { cout<<i<<". Zahl:\t"; cin>>e; } return e; // wieso nicht ich will doch das array zurückgeben!!!? } //-------------------------------------------------------- //-------------------------------------------------------- double ausgabe(double *e) { cout<<z<<". Zahl:\t"<<e<<endl; } Du hast das e[25] nämlich schon global deklariert... deswegen kannst du e nicht noch in einer funktion deklarieren... e müsstest du somit noch nicht mal an die funktionen übergeben da es ja global ist... du musst e nicht zurück geben weil du es als pointer übergibst (wenn du e nicht global deklariert hättest) d.h. du arbeitest schon auf der variable die du in der hauptfunktion deklariert hast... ist schwer zu erklären find ich... ich versuchs ma richtig zu erklären: du übergibst in der funktion MAIN das array e an die funktion EINGABE. dieses array wird als pointer übergeben dh er übergibt die adresse des speichers an die funktion eingabe. dadurch arbeitest du weiterhin auf de array in der funktion main. dadurch brauchst du es nicht zurück zu geben... verstanden? Bearbeitet 2. Juni 2009 von Micha82 Zitieren
Micha82 Geschrieben 2. Juni 2009 Geschrieben 2. Juni 2009 hmm ich seh grad das du e vordefiniert hast... also global: double e[25]; und es ich auf ner win maschine programmiert... hmmm... ok... wenn ich zu hause bin werd ich mir das noch mal anschauen... Zitieren
MikeX Geschrieben 2. Juni 2009 Autor Geschrieben 2. Juni 2009 ok danke.... das jetzt mein kompletter code..... #include <iomanip.h> #include <iostream.h> #include <stdio.h> #include <conio.h> double addiere(void); double subtrahiere(void); double multipliziere(void); double dividiere(void); double eingabe(void); double ausgabe(void); double x,y,erg=0; char k; int laenge,z,i; double e[25]; int main () { cout<<"\tRechner mit Up´s\n"; cout<<"Wieviele ZAhlen wollen Sie eingeben =?\n"; cin>>laenge; cout<<"\n\n\n\nWollen die die Zahlen\n\t"; cout<<"addieren(a)\n\tsubtrahieren(s)\n\tmultiplizieren(m)\n\tdividieren(d)"; cout<<"\t\t???\n"; k=getch(); switch(k) { case 'a':{ cout<<" Geben sie bitte ihre "<<laenge<<" Zahlen ein:\n"; eingabe(); /*for(i = 1;i<=laenge;i++) { cout<<i<<". Zahl:\t"; cin>>e; } */ clrscr(); ausgabe(); /*for(z=1;z<=laenge;z++) { cout<<z<<". Zahl:\t"<<e[z]<<endl; erg=erg + e[z]; } */ cout<<"\nErgebnis bei der Addition der Zahlen: "<<erg<<endl; } } getch(); return 0; } //-------------------------------------------------------- double eingabe(double *e) { cout<<" Geben sie bitte ihre "<<laenge<<" Zahlen ein:\n"; for(i = 1;i<=laenge;i++) { cout<<i<<". Zahl:\t"; cin>>e; } } //-------------------------------------------------------- //-------------------------------------------------------- double ausgabe(double *e) { for(z=1;z<=laenge;z++) { cout<<z<<". Zahl:\t"<<e[z]<<endl; erg=erg + e[z]; } } zwei Fehler kommen noch: (Aktualiesierung(Make) fehlgeschlagen ------- Unresolved externel 'eingabe()' referenced from D:\*Pfad*\xx.OBJ Unresolved externel 'ausgabe()' referenced from D:\*Pfad*\xx.OBJ komisch oder =? (arbeite mit Borland, weil wir in der Schule auch mit Borland arbeiten.! Zitieren
Micha82 Geschrieben 2. Juni 2009 Geschrieben 2. Juni 2009 Sooo... #include <iomanip> #include <iostream> #include <windows.h> #include <conio.h> using namespace std; double addiere(void); double subtrahiere(void); double multipliziere(void); double dividiere(void); double eingabe(void); double ausgabe(void); double x,y,erg=0; char k; int laenge,z,i; double e[25]; int main () { cout<<"\tRechner mit Up´s\n"; cout<<"Wieviele Zahlen wollen Sie eingeben =?\n"; cin>>laenge; cout<<"\n\n\n\nWollen die die Zahlen\n\t"; cout<<"addieren(a)\n\tsubtrahieren(s)\n\tmultipliz ieren(m)\n\tdividieren(d)"; cout<<"\t\t???\n"; cin>>k; switch(k) { case 'a': { eingabe(); /*for(i = 1;i<=laenge;i++) { cout<<i<<". Zahl:\t"; cin>>e; } */ //clrscr(); ausgabe(); /*for(z=1;z<=laenge;z++) { cout<<z<<". Zahl:\t"<<e[z]<<endl; erg=erg + e[z]; } */ cout<<"\nErgebnis bei der Addition der Zahlen: "<<erg<<endl; } } //getch(); return 0; } //-------------------------------------------------------- double eingabe() { cout<<" Geben sie bitte ihre "<<laenge<<" Zahlen ein:\n"; for(i = 1;i<=laenge;i++) { cout<<i<<". Zahl:\t"; cin>>e; } } //-------------------------------------------------------- //-------------------------------------------------------- double ausgabe() { for(z=1;z<=laenge;z++) { cout<<z<<". Zahl:\t"<<e[z]<<endl; erg=erg + e[z]; } cout<<erg<<endl; getch(); } so funzt es... ABER: 1. jetzt hast du keine Übergabeparameter... keine ahnung od du die dringend haben wolltest oder nicht 2. der fehler war das du oben die funktionen als void vordefiniert hast beim übergabewert und dann unten die funktion mit nem übergabewert gefüllt hast... dat funzt nicht 3. sollte es c++ oder c sein? ist auch immer eine gute info 4. probier weiter aus... so funzt es erstmal und 5. vermeide es variablen global zu deklarieren... Zitieren
MikeX Geschrieben 2. Juni 2009 Autor Geschrieben 2. Juni 2009 mit welchem compiler compiliert ihr =? bei mir zeigt er immer och eine Fehlermeldung an..... kann doch nicht sein Zitieren
Micha82 Geschrieben 2. Juni 2009 Geschrieben 2. Juni 2009 hab das schnell mit dev-c++ gemacht... mach mal bei borland alles neu compilieren... ab und zu spinnt borland mal... irgendwo kann man das projekt komplet neu kompilieren... Zitieren
TDM Geschrieben 3. Juni 2009 Geschrieben 3. Juni 2009 Du hast das e[25] nämlich schon global deklariert... deswegen kannst du e nicht noch in einer funktion deklarieren... e müsstest du somit noch nicht mal an die funktionen übergeben da es ja global ist... Können schon, der Funktionsscope verdeckt die globale Deklaration. Ich würde die Variablen so und so nicht global machen, da C++ entweder in einer Klasse kapseln oder nur in Main. bei mir zeigt er immer och eine Fehlermeldung an..... Verrätst du die auch? hab das schnell mit dev-c++ gemacht... mach mal bei borland alles neu compilieren... ab und zu spinnt borland mal... irgendwo kann man das projekt komplet neu kompilieren... Auch mal was neues, dev-C++ soll besser laufen als Borland... :confused: Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.