muca89 Geschrieben 3. Dezember 2006 Geschrieben 3. Dezember 2006 Hallo habe ein problem Ich habe eine Aufgabe bekommen Mittels einer fußgesteurten schleife soll folgende funktionalität erreicht werden. Einlesen eines startwertes und endwertes. Summieren aller ganzen Zahlen zwischen Start- und Endwert. Ausgabe der Summe und abfrage auf wiederholunmg Habe bis jetzt das hier geschafft #include <iostream.h> #include <stdio.h> #include <conio.h> void main() { int anfang,ende,summe; cout << "\n\n\tGeben sie bitte den Anfangswert ein!"; cin >> anfang; cout << "\n\n\t Geben Sie bitte den Endwert ein!"; cin >> ende; for(anfang;anfang<=ende;anfang=anfang+1) { summe=anfang+anfang; cin >> summe; } getch(); } Leider ist es ncith richtig. Könnt ihr mir dringend helfen? Zitieren
Dragon8 Geschrieben 3. Dezember 2006 Geschrieben 3. Dezember 2006 Also ich weiß jetzt nicht welchen compiler du benutzt, aber theoretisch, dürfte es schonmal nicht gehen, wenn du bei dir einfach "cin" und "cout" benutzt. da müsstest du entweder vor jedes aufkommen diese beiden "std::" schreiben, oder einmal oben, beim einfügen der Header "using namespace std;" hinzuschreiben. dann kannst du das "anfang" bei der deklaration in der for-schleife, rausnehmen, das hat dort nichts mehr zu suchen, da es ja schon deklariert und initalisiert wurde. was aber fehlt, ist die initalisierung von "summe" das solltest du vor der verwendung in der schleife mindestens auf 0 setzen, das zum beispiel könntest du dort reinsetzten, oder einfach vor der schleife. dann zum schleifenblock, du summierst dort in jedem durchlauf den wert den anfang gerade hat, mit sich selbst. sodass du am ende des schleifen durchlaufes, den wert den ende hatte, und damit jetzt anfang hat, micht selbst summierst und dann in summe speicherst. aber nach deiner aufgabenstellung, sollst du ja eigentlich alle zahlen zwischen dem start- und dem endwert summieren. also musst du in jedem schleifendurchlauf den wert den gerade anfang hat, zu dem wert der gerade in summe steht dazu addieren. dann danach das "cin >> ende;" hat in der schleife nichts zu suchen..das würde ja bedeuten, das du von benutzer noch einen wert haben möchtest, der dann in summe gespeichert wird.... so, und dann fehlt nach dem durchlauf der schleife eigentlich nur noch eine ausgabe der variablen "summe". dann hättest du schonmal die summierung aller zahlen zwischen start- und endwert Zitieren
Klotzkopp Geschrieben 4. Dezember 2006 Geschrieben 4. Dezember 2006 Hallo muca89, bitte benutze aussagekräftige Threadtitel und Code-Tags. Leider ist es ncith richtig.Das ist keine ausreichende Fehlerbeschreibung. Ich habe dir ein paar Kommentare in den Code geschrieben: #include <iostream.h> // ohne .h #include <stdio.h> // unnötig #include <conio.h> // unnötig void main() // int main { int anfang,ende,summe; cout << "\n\n\tGeben sie bitte den Anfangswert ein!"; cin >> anfang; cout << "\n\n\t Geben Sie bitte den Endwert ein!"; cin >> ende; for(anfang;anfang<=ende;anfang=anfang+1) // for-Schleifen sind nicht fußgesteuert { summe=anfang+anfang; // damit überschreibst du, was vorher in summe stand. // damit ist die ganze Schleife sinnlos. summe muss auch auf der rechten // Seite der Zuweisung auftauchen. cin >> summe; // Summe sollst du ausrechnen, nicht eingeben lassen } getch(); // unnötig }[/code] Zitieren
TDM Geschrieben 4. Dezember 2006 Geschrieben 4. Dezember 2006 Frühmorgensübungen sind was Tolles int calc(int start, int end) { int tmp = end-1; //die größte zu zählende Zahl int sum = 0; //Summer erstmal auf 0 setzen if ((start == end) || (start < end)) return sum; // vorher prüfen ob der Start // vor dem Ende liegt bzw. // ob start gleich ende // (deswegen hasse ich fussgesteuerte Schleifen) do { // do-while = fussgesteuert sum += tmp; // summe = summe + tmp (beim ersten Mal entspricht das // summe = 0 + (end - 1)) } while ((--tmp)>(start)); // die nächstgrößte zu zählende Zahl setzen; // prüfen auf > start return sum; // Freude, weil return (Summe wird zurückgegeben) PS: den Rest schaffst du hoffentlich allein. :floet: Zitieren
TDM Geschrieben 4. Dezember 2006 Geschrieben 4. Dezember 2006 hier mal die main: void main() { int start, end, sum; int restart; do { cout << "\n\n\tGeben sie bitte den Anfangswert ein!"; cin >> start; cout << "\n\n\t Geben Sie bitte den Endwert ein!"; cin >> end; sum = calc(start, end); //Funktion von heut früh aufrufen cout << "Summe:\t" << sum << endl; //Summe ausgeben cout << "Nochmal ? (j/n):" // Abfrage ob nochmal cin >> restart; // Einlesen // könnte man alternativ getch() oder getchar() machen } while(restart == 'j'); // prüfen ob j eingegeben wurde // bei mehr zeichen dann halt einen Array oder string nehmen } Zitieren
muca89 Geschrieben 4. Dezember 2006 Autor Geschrieben 4. Dezember 2006 Hi hier die ganzen fehler die aufgetaucht sind 'cout' : nichtdeklarierter Bezeichner '<<' : Ungültig, da der rechte Operand vom Typ 'char [40]' ist 'cin' : nichtdeklarierter Bezeichner '>>' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet '<<' : Ungültig, da der rechte Operand vom Typ 'char [37]' ist '>>' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet 'calc' : nichtdeklarierter Bezeichner '<<' : Ungültig, da der rechte Operand vom Typ 'char [8]' ist 'endl' : nichtdeklarierter Bezeichner '<<' : Ungültig, da der rechte Operand vom Typ 'char [17]' ist Syntaxfehler : Fehlendes ';' vor Bezeichner 'cin' '>>' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet Fehler beim Ausführen von cl.exe. Zitieren
muca89 Geschrieben 4. Dezember 2006 Autor Geschrieben 4. Dezember 2006 Hi hier die ganzen fehler die aufgetaucht sind 'cout' : nichtdeklarierter Bezeichner '<<' : Ungültig, da der rechte Operand vom Typ 'char [40]' ist 'cin' : nichtdeklarierter Bezeichner '>>' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet '<<' : Ungültig, da der rechte Operand vom Typ 'char [37]' ist '>>' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet 'calc' : nichtdeklarierter Bezeichner '<<' : Ungültig, da der rechte Operand vom Typ 'char [8]' ist 'endl' : nichtdeklarierter Bezeichner '<<' : Ungültig, da der rechte Operand vom Typ 'char [17]' ist Syntaxfehler : Fehlendes ';' vor Bezeichner 'cin' '>>' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet Fehler beim Ausführen von cl.exe. jetzt nur noch 2 weil ich #include <iostream.h> eingefügt habe C:\Programme\Microsoft Visual Studio\MyProjects\Test SYA\Test SYA.cpp(19) : error C2065: 'calc' : nichtdeklarierter Bezeichner C:\Programme\Microsoft Visual Studio\MyProjects\Test SYA\Test SYA.cpp(24) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'cin' So nur noch 1 Fehler 'calc' : nichtdeklarierter Bezeichner wa sist da falsch? Zitieren
TDM Geschrieben 4. Dezember 2006 Geschrieben 4. Dezember 2006 über die main folgendes schreiben (wenn noch nicht da) #include <iostream> using namespace std; Die Funktion calc musst du natürlich auch mit in die cpp-Datei schreiben. Zitieren
muca89 Geschrieben 4. Dezember 2006 Autor Geschrieben 4. Dezember 2006 immernoch da sproblem mit "calc" Zitieren
TDM Geschrieben 4. Dezember 2006 Geschrieben 4. Dezember 2006 und nochmal alles: #include <iostream> using namespace std; int calc(int, int); // Prototyp (Bekanntmachen der Funktion vor main) void main() { int start, end, sum; int restart; do { cout << "\n\n\tGeben sie bitte den Anfangswert ein!"; cin >> start; cout << "\n\n\t Geben Sie bitte den Endwert ein!"; cin >> end; sum = calc(start, end); //Funktion von heut früh aufrufen cout << "Summe:\t" << sum << endl; //Summe ausgeben cout << "Nochmal ? (j/n):" // Abfrage ob nochmal cin >> restart; // Einlesen // könnte man alternativ getch() oder getchar() machen } while(restart == 'j'); // prüfen ob j eingegeben wurde // bei mehr zeichen dann halt einen Array oder string nehmen } int calc(int start, int end) { int tmp = end-1; //die größte zu zählende Zahl int sum = 0; //Summer erstmal auf 0 setzen if ((start == end) || (start < end)) return sum; // vorher prüfen ob der Start // vor dem Ende liegt bzw. // ob start gleich ende // (deswegen hasse ich fussgesteuerte Schleifen) do { // do-while = fussgesteuert sum += tmp; // summe = summe + tmp (beim ersten Mal entspricht das // summe = 0 + (end - 1)) } while ((--tmp)>(start)); // die nächstgrößte zu zählende Zahl setzen; // prüfen auf > start return sum; // Freude, weil return (Summe wird zurückgegeben) } Zitieren
muca89 Geschrieben 4. Dezember 2006 Autor Geschrieben 4. Dezember 2006 ich danke euch allen aber wenn ich am ende j eingebe zum wiederhoeln tut sich nciths Zitieren
TDM Geschrieben 4. Dezember 2006 Geschrieben 4. Dezember 2006 int restart; austauschen mit char restart; Damit man später auch im Fehlerfall sieht, dass man was falsches gemacht hat: #include <iostream> using namespace std; #define START_E_END -1 #define START_L_END -2 int calc(int, int); // Prototyp (Bekanntmachen der Funktion vor main) void main() { int start, end, sum; char restart; do { cout << "\n\n\tGeben sie bitte den Anfangswert ein!"; cin >> start; cout << "\n\n\t Geben Sie bitte den Endwert ein!"; cin >> end; sum = calc(start, end); //Funktion von heut früh aufrufen if (sum == START_E_END) { cout << "Summe gleich Ende" << endl; } else if (sum == START_L_END ) { cout << "Summe groesser Ende" << endl; } else { cout << "Summe:\t" << sum << endl; //Summe ausgeben } cout << "Nochmal ? (j/n):"; // Abfrage ob nochmal cin >> restart; // Einlesen // könnte man alternativ getch() oder getchar() machen } while(restart == 'j'); // prüfen ob j eingegeben wurde // bei mehr zeichen dann halt einen Array oder string nehmen } int calc(int start, int end) { int tmp = end-1; //die größte zu zählende Zahl int sum = 0; //Summer erstmal auf 0 setzen if (start == end) { return START_E_END; } else if (start > end) { return START_L_END; } else { do { // do-while = fussgesteuert sum += tmp; // summe = summe + tmp (beim ersten Mal entspricht das // summe = 0 + (end - 1)) } while ((--tmp)>(start)); // die nächstgrößte zu zählende Zahl setzen; // prüfen auf > start return sum; // Freude, weil return (Summe wird zurückgegeben) } } Zitieren
muca89 Geschrieben 4. Dezember 2006 Autor Geschrieben 4. Dezember 2006 Hi Leute so geht es auch #include <iostream> using namespace std; int main() { int i, start, end, sum; char ctnue; do { i = 0; sum = 0; cout << endl; cout << "\tGeben Sie bitte den Startwert ein!: "; cin >> start; cout << "\tGeben Sie bitte den Endwert: "; cin >> end; cout << endl; do { sum = sum + (start+i); (i > 0) ? (cout << " + ") : (cout << "\t"); cout << start + i; i++; } while(i <= (end-start)); cout << " = " << sum << endl << endl; cout << "\tWiederholen j/n ? "; cin >> ctnue; } while(ctnue == 'j' || ctnue == 'J'); return 0; } Zitieren
TDM Geschrieben 4. Dezember 2006 Geschrieben 4. Dezember 2006 Denkfehler... sum = sum + (start+i); Wenn i mit 0 initialisiert wird, dann heißt das am Anfang 0 = 0 + (start+0) somit würde sum = start sein. In der Aufgabe hieß es zwischen Sowas auch hier: while(i <= (end-start)); Zitieren
Klotzkopp Geschrieben 4. Dezember 2006 Geschrieben 4. Dezember 2006 so geht es auchDas sieht schon ganz nett aus. Aber das hast du vermutlich nicht selbst geschrieben. Verstehst du es denn? Zitieren
muca89 Geschrieben 4. Dezember 2006 Autor Geschrieben 4. Dezember 2006 Das sieht schon ganz nett aus. Aber das hast du vermutlich nicht selbst geschrieben. Verstehst du es denn? also verstehen tu ich das zu 90% Hast recht war ich nciht selber Zitieren
steinadler Geschrieben 5. Dezember 2006 Geschrieben 5. Dezember 2006 Was verstehst du daran denn nicht? 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.