Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?

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

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]

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:

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

}

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.

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?

ü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.

immernoch da sproblem mit "calc"

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)

}

ich danke euch allen aber wenn ich am ende j eingebe zum wiederhoeln tut sich nciths

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)

	}


}

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;

}

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 :rolleyes:

Sowas auch hier:

while(i <= (end-start));

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.