Zum Inhalt springen

Zahlen aufsummieren (war: Eine Aufgabe. Bitte um Hilfe)


muca89

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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)

:P

PS: den Rest schaffst du hoffentlich allein. :floet:

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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)

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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)

	}


}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...