C++ Bitte eine Erklärung =(

12/11/2010 10:33 spion9613#1
hi evps
die aufgabe war

Entwickeln Sie eine C++-Anwendung, die den Anwender zur Eingabe einer vierstelligen Zahl auffordert. Das Programm soll daraufhin die Quersumme der vierstelligen Zahl errechnen und das Ergebnis auf den Bildschirm ausgeben.

dort bin ich nicht wirklich darauf gekommen dann habe ich in einem forum nachgefragt.
Die sagten das ist richtig (int main):


char x[5];

cout << "Schreibe eine 4stellige Zahl" << endl;
cin.getline(x,sizeof(x));

int y = 0;

for(int i = 0; i < sizeof(x) - 1; i++)
{
y += (x[i] - '0');
}


cout << y << endl;

getch();

was ich nicht verstehe hab ich jetzt mal dick gedruckt.

Hoffe ihr könnt mir helfen =( (Bin noch Anfänger)

mfg
12/11/2010 11:44 ZeraPain#2
naja, das ist eine for schleife in der jedes feld aus dem array x zu y addiert wird, also die quersumme wird gebildet.

damit aus dem char x[i] ein int wird, wird jedes mal noch der char 0 abgezogen.
jedes feld des arrays x hat immer nur einen char, also 1 byte (eine ziffer in deinem fall)

man kann es auch mal so verständlicher für dich schreiben vll:

Code:
#include <iostream>
using namespace std;

int main(void)
{
	char eingabe[5];
	int quersumme = 0;

	cout << "Schreibe eine 4 stellige Zahl: ";
	cin >> eingabe;

	for (int i = 0; i < sizeof(eingabe) -1; i++)
	{
		quersumme += (eingabe[i] - '0');
	}

	cout << "Quersumme: " << quersumme << endl;
	system("pause");

	return 0;
}
12/11/2010 12:04 spion9613#3
was heißt eig. += ??

mfg
12/11/2010 12:12 ZeraPain#4
x += 2 ist das gleiche wie x = x + 2, nur kürzer zu schreiben
12/11/2010 12:50 spion9613#5
habs mir jetzt etwas länger angeguckt aber verstehe die Schleife einfach nicht

for (int i = 0; i < sizeof(x) -1 ; i++)
{
y += (x[i] - '0');
}

könntest du den code bitte mit Kommentaren // belegen?
Könnte mir vllt weiterhelfen:)

mfg
12/11/2010 13:05 ZeraPain#6
for {} ist einfach eine schleife, die solange abläuft bis ein wert erreicht wird.
i wird als int mit dem wert 0 definiert. die bedingung ist, dass i kleiner als die größe des arrays x -1 bleibt ( i < 4 ) und pro durchlauf wird i um 1 erhöht ( i ++ ).
das heißt, dass die schleife insgesamt 4 mal durchläuft (i = 0, 1, 2, 3)

mit i kann man dann in der schleife die einzelnen felder des arrays abrufen, in denen die zahl gespeichert ist.

bsp eingabe: 1000
x[0] = 1
x[1] = 0
x[2] = 0
x[3] = 0

dabei wird der wert jedes mal jetzt zu y addiert
12/11/2010 13:17 spion9613#7
aso glaube habs verstanden
erster durchlauf:
{
y += (x[0] - '0');
}

zweiter Durchlauf:
{
y+=(x[1] - '0')
}

dritter Durchlauf:
{
y+=(x[2] - '0')
}

vierter Durchlauf:
{
y+=(x[3] - '0')
}

Dann steht in der Klammer i. Und i wird in jedem Durchlauf um 1 erhöht,weil in der For Schleife (i++) steht

und noch eine Frage
Wenn man mit arrays diese for Schleife macht muss man dann immer '0' eingeben?

mfg
12/11/2010 13:35 MoepMeep#8
Quote:
Originally Posted by Cøliη_© View Post
Spam nicht sondern schick ihm nächstes mal eine PM oder benutze die SuFu das führt nur vom Thema ab

Lg.
Sein Post passt vollkommen zum Thema, deiner ist spam ;)


@spion9613 Lern bitte erstmal die Grundlagen, da fehlt ja alles ._.
12/11/2010 13:48 ZeraPain#9
Quote:
Originally Posted by spion9613 View Post
aso glaube habs verstanden
erster durchlauf:
{
y += (x[0] - '0');
}

zweiter Durchlauf:
{
y+=(x[1] - '0')
}

dritter Durchlauf:
{
y+=(x[2] - '0')
}

vierter Durchlauf:
{
y+=(x[3] - '0')
}

Dann steht in der Klammer i. Und i wird in jedem Durchlauf um 1 erhöht,weil in der For Schleife (i++) steht

und noch eine Frage
Wenn man mit arrays diese for Schleife macht muss man dann immer '0' eingeben?

mfg
das - '0' dient nur dazu, um aus einem char ein int zu machen
12/11/2010 14:39 spion9613#10
Quote:
Originally Posted by MoepMeep View Post
Sein Post passt vollkommen zum Thema, deiner ist spam ;)


@spion9613 Lern bitte erstmal die Grundlagen, da fehlt ja alles ._.
Konnte das mit der Schleife nur so: (nur eine Variable)

for(int i = 1;i < 10;i++)
{
cout << i << endl;
}

die anderen Grundlagen kann ich eig.
das mit den Schleifen war mein Problem (jetzt verstanden)
Mache dazu noch ein paar Aufgaben damit ich mich sicher fühle und dann fang ich erst mit den nächsten schritten an.
12/16/2010 00:45 MrSm!th#11
dass man '0' abzieht, um daraus "einen int zu machen" ist so nicht richtig.

Das was man in die Konsole eingibt, ist eine Zeichenkette.
Gebe ich 555 ein, ist das die Zeichenkette "555".
Das ist nicht das gleiche wie der numerische Wert 555!
"5" ist wie ein Buchstabe; ein Teil einer Zeichenkette. Du findest alle ASCII Zeichen in der ASCII-Zeichentabelle mit ihren dazugehörigen echten Werten.

Der "Buchstabe" '0' zb. hat den Wert 48 in der Tabelle.
Alle weiteren Ziffern folgen ('1' = 49 usw.).
Wenn du nun also von dem Buchstaben, der eingegeben wird, zb. '5' den Wert von '0' abziehst, erhälst du den tatsächlichen Zahlenwert (das ist keine "Konvertierung", sondern reine Logik).
53 - 48 = 5
Wenn du also jeden Teil der Eingabe durchgehst und immer '0' davon abziehst, erhälst du den numerischen Wert von jeder Ziffer.
Wenn du die alle addierst hast du die Quersumme.


Du musst dir eben nur immer vor Augen halten, dass '0' nicht gleich 0 ist, sondern eigentlich 48 ;)
12/16/2010 16:06 MasterGamer2#12
ASCII-Tabelle
Wenn es dich genau interessiert ;)


Der Code ist übrigends nicht idiotensicher, man kann auch z.B. "abcd" eingeben und er müsste die Quersumme 202 errechnen.