"We are back" « oc.at

C++ Stunde 2

moidaschl 20.02.2003 - 11:36 4966 10
Posts

moidaschl

Vollzeit-Hackler
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
C++ Stunde 2:
geschrieben für Borland Builder

nach längerem warten folgt jetz die 2te Stunde unseres C++ Kurses!

Hier geht es um Auswahlen!

Vorerst einmal die zwei Auswahlstrukturen

Zweifachauswahl: Es wird ein logischer Wert berechnet ( true oder false ). Aufgrund des Ergebnisses wird
dann ein bestimmter Zweig ausgeführt (näheres bei der if-Anweisung).

Mehrfachauswahl: Ein Wert wird bestimmt und es werden beliebig viele Anweisungen durchlaufen (switch-Anweisung)

2.1 if-Anweisung
Gleich am Anfang wieder das selbe Beispiel wie in der 1.Stunde, nur erweitert!


#include <iostream.h>
#include <conio.h>

int main()
{
int Zahl1, Zahl2, Ergebnis;
cout<<"Bitte eine Zahl eingeben!: ";
cin>>Zahl1;
cout<<"Bitte noch eine Zahl eingeben!: ";
cin>>Zahl2;
Ergebnis=Zahl1+Zahl2;
if(Ergebnis > 100)
cout<<"Das Ergebnis ist groesser als 100 und lautet: "<<Ergebnis;
else
cout<<"Das Ergebnis ist kleiner als 100 und lautet: "<<Ergebnis;
getch();
return 0;
}

Die if-Anweisung wird so geschrieben:

if (Anweisung)
{

}
else
{

}

Wenn nur ein Code in der if Anweisung steht kann man die Klammern weglassen ( ad. Bsp. ).
Es wäre auch möglich nur den if-Teil zu schreiben, dann darf aber kein else stehen!
Wenn der if-Teil nicht erfüllt ist, wird der else-Teil ausgeführt.

2.2 switch-Anweisung

Bei der switch-Anweisung haben wir die Möglichkeit mehrere if-Bedingungen in eine andere
Bedingung zu verschmelzen!

Beispiel ( ich lasse jetz den rest weg, der wird dann so wie oben geschrieben! ):

if(x==1)
cout<<"1";
if(x==2)
cout<<"2";
if(x==3)
cout<<"3";
...

das geht auch einfacher!

switch(x)
case 0: cout<<"0";break;
case 1: cout<<"1";break;
case 2: cout<<"3";break;
default: cout<<"garnichts!";

mit der break; Anweisung wird zum Ende der switch Anweisung gesprungen!
die default Anweisung wird ausgeführt, wenn kein case zutrifft!

Das waren die Auswahlen kurz und prägnant zusammengefasst! Gar nicht viel zu lernen :D!
Wenns fragen gibt ( wahrscheinlich ) einfach posten ich oder andre können sicher helfen!
in diesem Sinne
moidaschl

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
praktisches beispiel: (weil case 0: cout<<"0"; nicht wahnsinnig anschaulich ist)
lcoaltime liefert eine struktur, in dem unter anderem der wochentag enthalten ist. man kann switch/case verwenden, deutsche namen dazu auszugeben:

Code:
switch (tm->tm_wday) {
  case 0: 
    cout << "Sonntag";
    break;
  case 1: 
    cout << "Montag"
    break;
  case 2: 
    cout << "Dienstag";
    break;
  case 3: 
    cout << "Mittwoch";
    break;
  case 4: 
    cout << "Donnerstag";
    break;
  case 5: 
    cout << "Freitag";
    break;
  case 6: 
    cout << "Samstag";
    break;
}

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
hmm ...
also ich find das von moidaschl netter ...
am Anfang kann niemand etwas mit dem "->" Operator bzw. mit Strukturen anfangen ...
Ausserdem wird das Beispiel ja auch mit :
Code:
if(x==1)
cout<<"1";
if(x==2)
cout<<"2";
if(x==3)
cout<<"3";
verglichen und dadurch näher erläutert ...

wodie

Big d00d
Avatar
Registered: Oct 2002
Location: Wien
Posts: 264
erstmal ein großes danke an moidaschl für die fortsetzung :)

2.

Code:
if(x==1)
cout<<"1";
if(x==2)
cout<<"2";
if(x==3)
cout<<"3";

steht in diesem bsp "x" für das ergebnis?
falls ja...dann geh ich davon aus dass die sinnhaftigkeit hierbei eher zweitrangig ist und es hauptsächlich um das verständniss geht; denn wenn "x" für das ergebnis steht, ist es unlustig jede reele zahl einzugeben ;)
(ich hoff ich steh da nicht völlig auf der leitung...falls doch stellts das bitte richtig :))

bei mir schaut das dann so aus (wie gesagt: auf 3 ergebniss beschränkt hehe):
Code:
#include <iostream.h>
#include <conio.h>

int main()
{

	int zahl1, zahl2, ergebnis,x;

cout<<"bitte eine zahl eingeben: ";
cin>>zahl1;

cout<<"bitte eine weitere zahl eingeben: ";
cin>>zahl2;
ergebnis=x=zahl1+zahl2;

if(x==1)
cout<<"1";
if(x==2)
cout<<"2";
if(x==3)
cout<<"3";

getch();
return 0;
}


3.
zudem (ist zwar nur form/layout...):
sagts ma bitte, wie krieg ich da
"cout<<"Das Ergebnis ist kleiner als 100 und lautet: "<<Ergebnis;"
das endl; rein? sprich dass nach der ausgabe des ergebnis das "press any key 2 continue" eine zeile drunter steht?

Oculus

void
Avatar
Registered: Jun 2001
Location: schlafzimmer
Posts: 856
<senf>
es gibt auch ein sehr kurzes "if"

Code:
...
richtig = myValue != 5 ? 5 : -1;
...

{ <vergleichsklausel> ? <zuzuweisender wert bei true> : <zuzuweisender wert bei false> }

kann auch mit anderen anweisungen geschachtelt werden, zb:
Code:
...
printf("ich bin eine %s zahl: %d", ((zahl%2) == 1 ? "ungerade" : "gerade"), zahl);
...
</senf>

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Zitat von atrox
Code:
switch (tm->tm_wday) {
  case 0: 
    cout << "Sonntag";
    break;
  case 1: 
    cout << "Montag"
    break;
...
}

Das ist zwar richtig, aber trotzdem kein gutes Beispiel für "switch", weil sowas macht man natürlich mit einem Array (siehe C++ Stunde 3, 4 oder noch später.... ;) )

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
eh klar, das es bessere möglichkeiten gibt... deshalb hab ich ja geschrieben "...man kann switch/case verwenden...". ich wollte nur ein anderes beispiel als ich geb 1 rein und es kommt 1 raus, ich geb 2 rein, und es kommt 2 raus... vivo hat natürlich wieder recht, wenn er meint, im kurs würde keiner structs oder pointer verstehen, und dann bleibt wieder zu sagen, daß das zwar ein schönheitsfehler war, aber es sollte auch was anderes gezeigt werden. postet bessere beispiele, wenn ihr welche habt.
die array-geschichte finge ihr übrigens hier: http://www.overclockers.at/showthre...ght=lookuptable

man sollte halt nur drauf schaun, daß wir nicht zu sehr abheben und anfänger nicht mehr folgen können...

moidaschl

Vollzeit-Hackler
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
Zitat von wodie
erstmal ein großes danke an moidaschl für die fortsetzung :)

2.

Code:
if(x==1)
cout<<"1";
if(x==2)
cout<<"2";
if(x==3)
cout<<"3";

steht in diesem bsp "x" für das ergebnis?
falls ja...dann geh ich davon aus dass die sinnhaftigkeit hierbei eher zweitrangig ist und es hauptsächlich um das verständniss geht; denn wenn "x" für das ergebnis steht, ist es unlustig jede reele zahl einzugeben ;)
(ich hoff ich steh da nicht völlig auf der leitung...falls doch stellts das bitte richtig :))

bei mir schaut das dann so aus (wie gesagt: auf 3 ergebniss beschränkt hehe):
Code:
#include <iostream.h>
#include <conio.h>

int main()
{

	int zahl1, zahl2, ergebnis,x;

cout<<"bitte eine zahl eingeben: ";
cin>>zahl1;

cout<<"bitte eine weitere zahl eingeben: ";
cin>>zahl2;
ergebnis=x=zahl1+zahl2;

if(x==1)
cout<<"1";
if(x==2)
cout<<"2";
if(x==3)
cout<<"3";

getch();
return 0;
}


3.
zudem (ist zwar nur form/layout...):
sagts ma bitte, wie krieg ich da
"cout<<"Das Ergebnis ist kleiner als 100 und lautet: "<<Ergebnis;"
das endl; rein? sprich dass nach der ausgabe des ergebnis das "press any key 2 continue" eine zeile drunter steht?
aaachtung! du kannst kein ergebnis=x=irgendwas+irgendwas schreiben!

X war nur ein anschauliches BSP !

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
Zitat von moidaschl
aaachtung! du kannst kein ergebnis=x=irgendwas+irgendwas schreiben!
achja ? warum nicht ?

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
= ist ein operator wie jeder andere, und wird von rechts nach links aufgelöst.

x=y=z=0; // ist völlig legal
und entspricht:
x=(y=(z=0)));

oder

if ( (i=a+b) > 0 ) {
cout << "das positive ergebnis ist: ";
cout << i;
} else {
cout << "ungültig da kleiner <= 0";
}
Bearbeitet von atrox am 23.02.2003, 16:25

moidaschl

Vollzeit-Hackler
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
ja des geht atrox aber ned so
cout<<Ergebnis=x=a+b;
!
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz