PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnis Problem! if, else und Schleifen.



sl33py
21.01.2010, 04:34
Hallo libébe Forumuser.

Ich hab das Programmieren in C++ begonnen und habe damit jetzt leichte schwierigkeiten.

Bei der Verwendung von (if und else), sind wahrheits werte entscheidend, z.B.

if(i=0;i<10;i++)
{
cout<<i+1<<endl;
}
else if (i=0;i<9;i++)
{
cout<<i+1<<endl;
}

So weit ist das jetzt auch noch verständlich für mich, sollte die Werte wahr sein, wird weiterer Code ausgeführt.
Sollten diese nicht wahr sein, wird dieser Block übersprungen und weiterer Code ausgeführt.

Nun aber in verwendung mit einer Schleife:

cout<<"short:\n";
short i=2;
while(1) {
short t=i*i;
if(t<=i) break;
i=t;
cout<<i<<"\n";

Hier wird while mit (1) deklariert, warum wird hier aber if
verwendet, könnte mann nicht auch for benutzen.

Ich weis nicht ob ganz klar ist was ich meine, bitte aber trotz-
dem, um Hilfe. Sollte es nicht vrständlich genung sein were ich
ein weiteren Post(hoffentlich dann für euch verständlicher)verfassen.

Mfg sleepy

Terces
21.01.2010, 06:40
If wird benutzt um zu prüfen ob t kleiner gleich i ist, und wenn ja die while-Schleife zu brechen. Allerdings ist der Code doch sehr fehlerhaft, so kommts mir jedenfalls vor (geschweifte Klammern fehlen).

Ich hoffe du hast das gemeint.

Hu5eL
21.01.2010, 06:48
ka wie die syntax genau in c++ ist aber:
dein if und else if im ersten beispiel sind eher murks. Das ist eine for schleife was du dort gemachgt hast.
If-abfragen überprüfen einmalig.
While bzw for schleifen laufen solange durch ihren rumpf bis die bedingung false wird.

Syntax if: if(zahl >10) { mache was}
elseif(zahl<5) {mach was}
else{printf("zahl ist zwischen 10 und 5")}

zu deinem 2. Beispiel
eine if ist hier schon sinnvoll: es soll geprüft werden ob t<=i ist, falls geht er aus der while raus. Das mir meiner meinung nach aber nie passieren.

Sind das aufgaben aus deer schule oder hast du das nach tutorials gemacht?

sl33py
21.01.2010, 08:18
Erstmal, Danke für eure Antworten.

Ja das sind Aufgaben aus einem Tutorial.

Der Code in der while Schleife, soll für short ein overflow sein, dieser ist aber nicht komplett stimmt, ich wollte damit euch nur zeigen was ich meine, um weiter zu kommen.

du meinst mit while brechen, aus der Schleife aussteigen oder? Quasi das diese übersprungen wird?

Ich hoffe das ich das jetzt habe, denn ohne if und else if und den Schleifen(diese richtig zu verstehen), lohnt es nicht, sich das TuT weiter anzuschauen. Weil das ja die Grundgerüste sind und in jedem Code fast vorkommen.

sl33py

Hu5eL
21.01.2010, 08:25
ok klar irgendwann wird die variable short "überlaufen"

versuch doch der einfachkeit halber sowas wie: prüfe ob eine zahl eine primzahl ist.
Wenn das funktioniert hast du das verstanden.

Wenn ich mich nicht irre verlässt man mit break die whil bzw for schleife in der man sich befindet

kingChrisyLive
21.01.2010, 08:31
Da empfehle ich dir lieber dir ein gutes Buch anzuschaffen. Da bekommst du alles von Anfang an genau erklärt und dann wäre diese Frage vermutlich nicht zu Stande gekommen. Wenn du vernünftig C++ lernen möchtest,wirst du über kurz oder lang eh nicht an einem Buch vorbei kommen.

H4x0r007
21.01.2010, 09:06
Ich habe u.A. das Buch C++ von A bis Z (http://www.amazon.de/von-bis-Mit-CD-ROM-umfassende/dp/3836214296/ref=sr_1_1?ie=UTF8&s=books&qid=1264064564&sr=8-1) (Auflage 2006). Das Buch ist mit 40 Euro nicht ganz billig, aber man lernt von den Büchern von Jürgen Wolf auch richtig was.

sl33py
21.01.2010, 09:17
Ein Buch hab ich ja.

Einstieg in C++, nur bis mann zur eigentlichen Programmierung kommt, hat mann den Teil der vorher auf über 20 Seiten durchgenommen wurde, wieder vergessen.

Ok vielen dank, ich versuch mal allein weiter zu kommen.

sl33py

kingChrisyLive
21.01.2010, 09:18
Das Buch ist mit 40 Euro nicht ganz billigDie 40€ in Relation zu dem was man lernt,sind die 40€ auf jeden Fall sehr gut angelegt.

@sl33py
Man muss eben viele Sachen manchmal auch einfach wiederholen. Irgendwann wirst du es dir dann einprägen. So lernst du. Wiederholen,wiederholen,wiederholen. Und soviel ich weiss,bestehen die ersten Seiten immer aus sehr viel Theorie,also wie die Sprach Syntax aufgebaut ist,was es mit Compilern auf sich hat usw. Diese Dinge würdest du auch später verstehen wenn du zum praktischen Teil kommst.

Swola4
21.01.2010, 11:10
@sl33py (http://free-hack.com/member.php?u=62748)
Hast du denn nun die Unterschiede und Besonderheiten, der einzelnen Schleifen verstanden ?
Falls nicht, kann ich dir mal eine Zusammenfassung tippen.

mfg
:)

cOr
21.01.2010, 11:50
Ich besitze ebenfalls das Buch C++ von A bis Z (2009er Auflage) und ich bin auch der Meinung dass es das Geld wert ist.. naja noch ein Tipp wenn du Code hier postest nimm das hier:
weil dann ist der Code lesbarer und verständlicher ;)

blackberry
21.01.2010, 12:54
if(i=0;i<10;i++)
[...]

So weit ist das jetzt auch noch verständlich für mich, sollte die Werte wahr sein, wird weiterer Code ausgeführt.

Also wie dir da was verständlich sein kann leuchtet mir nicht ein.

In if kommen keine Klammern vor, da diese eine Sequenz abschließen; was bei if nicht der Fall ist und somit syntaktisch falsch ist.

Zum Thema Wahrheitswerte: allein schon bei i=0 kann das ja wohl nicht stimmen. Der IstGleich-Operator gibt den Wert des Ausdrucks zu seiner Rechten zurück. Bei i=0 ist das 0. C kennt keine echten Booleans (C++ schon - bool - aber die Interpretation von Integern als Wahrheitswerte ist äquivalent). C betrachtet alles als falsch, was gleich null ist und alles als wahr was ungleich null ist.
Lange Rede kurzer Sinn: i=0 als Wahrheitswert ist immer falsch (oder "false" um im C++ Terminus zu sprechen).

@Hu5eL
Weder C, noch C++ kennen ein "elseif", wie beispielsweise PHP es tut. Sie kennen jedoch beide ein "else" und ein "if".
Da if und ein dazugehöriges else eine Sequenz darstellen und Klammern Sequenzen zusammenfassen und darum in der Regel (z.B. auch bei Schleifen, nicht jedoch bei Funktionen oÄ.) weggelassen werden können, kann man ein "elseif" durch ein "else" und ein "if" nachbauen.

Somit lässt sich

if (a)
{
// mach was #1
}
else
{
if (b)
{
// mach was #2
}
else
{
// mach was #3
}
}zu

if (a)
{
// mach was #1
}
else if (b)
{
// mach was #2
}
else
{
// mach was #3
}machen, indem man den Block ( { } ) vom ersten else weglässt und gleich ein if anfügt, welches zusammen mit dem zugehörigen Block des if- und des else-Teils als eine Sequenz betrachtet wird.
Das Ganze habe ich nochmal farbig hervorgehoben um eindeutig zu machen, was zu was gehört.
______________________

Da der Rest des Gespräches wohl nur noch als Buchempfehlung zu laufen scheint verweise ich hiermit auf den Sticky in dieser Section.

/closed
/auf Anfrage wieder geöffnet @ 18:05; 21.01.2010

painfull
31.01.2010, 05:50
edit:
immer diese faulen leser :o :S