Internet Fanclub roteteufel.de

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Kennt sich jemand mit "c++" aus ?

Viktor

Active Member
Ich habe folgenden Quellcode und muss rausfinden,was dabei rauskommt.

Wenn ich das so ins programm eingebe,bekomme ich meine Lösung,kann aber nicht nachvollziehen,wie diese entsteht.



Weiß jemand Rat?





c++ Quellcode:



#include <iostream.h>

int c;

int k(int a, int b, int c)

{

b = 2 * a + b - c;

if ( b )

return a % b;

else return b % a;

}



void main()

{

int a = -6; int b = 4; c = a / 4; int n = 9;int v[10];

do {v[n] = n % 3;}

while (--n);

c = v[n] = k(b,a,c);

for (n = 0; n < 10; n++) cout << v[n] << endl;

}







Die Lösung lautet:



1

1

2

0

1

2

0

1

2

0
 
Puh also ich versuchs mal
default_wink.png




int a = -6; int b = 4; c = a / 4; int n = 9;int v[10];



Danach siehts so aus:

a = -6

b = 4

c = -1 (division mit Integer)

n = 9





jetzt kommen die Schleifendurchläufe. Also bei jedem Schleifendurchlauf n%3 und n verringern. Beim ersten Durchlauf also v[9] = 9 % 3 = 0. Beim zweiten Durchlauf v[8] = 8 % 3 = 2....und immer so weiter bis Schleifenende. Jetzt sind v[1] bis v[9] belegt, v[0] noch nicht (die schleife wird für n=0 nicht mehr durchlaufen, wegen der Art der While-Schleife und dem --n)



Jetzt in der Main-Methode der nächste Schritt, also c = v[n] = k(b,a,c);

Der Schritt ruft die Methode k(b,a,c) auf. In der Methode gibt es jetzt auch die lokalen Variablen a,b,c , wobei a und b hier vertauschte Werte haben. Also a = 4, b = -6, c = -1.

b wird dann in der Folgezeile geändert und hat nun den Wert 3. If(
default_cool.png
ist true, somit liefert die Methode a % b zurück, was bei 4 % 3 = 1 ist. Diese 1 wird nun in v[n] geschrieben, da n inzwischen den Wert 0 hat also in v[0]. Ebenfalls wird c auf 1 gesetzt. Die letzte Schleife gibt dann nur noch das Array aus, welches dann folgerichtig die Belegung



1

1

2

0

1

2

0

1

2

0



hat.
 
Danke dir für die Mühe,da werde ich mich gleich mal durchkämpfen.



Ich hab hier noch eine vereinfachte Aufgabe,wenn du diese noch kurz erklären könntest:







#include <iostream.h>



int k(int a, int
default_cool.png


{

int c;

c=a+3%b-6;

return c;



}

main ()

{

int a=8 ; int b=5;

cout <<k(a,5) << endl;

b*=3+2;

cout <<b<< endl;

b=a++;

cout <<a++<< " " <<b<< endl;

cout <<a<<endl;

cin >>a ;



Ich kommvorallem mit " b*=3+2;" nicht klar.

Ich hätte zunächst ganz normal c berechnet. c= 8+3%5-6 = 8+3-6= 5.

Aber wenn ich probeweise andere Zahlen ins program eingebe,kommt nicht die Lösung raus,welche ich erwarten würde.



Raus kommt:



5

25

9 8

10
 
b *= 3+2 bedeutet das gleiche wie b = b * (3+2)



Also Schritt für Schritt:



int a=8 ; int b=5; ist ja klar. Dann kommt der Aufruf k(a,5), also ist in der Methode k die lokale Variable a = 8 und b = 5. Aus c = a+3%b-6 ergibt sich c=5, da c = 8 + (3%5) -6 = 8 + 3 - 6 = 5.



b*=3+2 ist wie gesagt b = b * (3+2), also b = 5*5 = 25.



b = a++ bedeutet b = a und nach dieser Zeile wird a um 1 erhöht. b ist somit 8 und a nun 9.



cout <<a++<< " " <<b<< endl



Hier wird a erst nach der Zeile erhöht, also erst noch einmal der alte Wert von a ausgegeben, dann ein Leerzeichen und der Wert von b der noch 8 ist. Dann erst wird a erhöht. Dieser Wert, nun 10, wird dann in der nächsten Zeile ausgegeben.
 
Achso,danke.

Das erste Beispiel hab ich jetzt kapiert - super !



Einzig bei dem Schritt, wo ich auf b= 2*4+(-6)-(-1) = 3 komme,kapier ich jetzt nicht,wass " if (
default_cool.png
" bedeutet.



Sprich,in welchem Fall müsste ich in die "else" Variante gehen ?
 
Schade,dass ich dir gerade kein Karma geben kann,dafür das du dich freiwillig mit den Zeug beschäftigt hast
default_smile.png


Bissl was davon hab ich auch mal gewusst,und jetzt bekomm ich die Strafe dafür,dass ich die Infoprüfung statt im 1. im 5 Semester schreib
default_wink.png




Wird aber nachgeholt,das Karma mein ich.Mercy.
 
Oh Gott, was sind denn das für schreckliche Sachen?? Kann mich gar nicht erinnern, mal sowas gelernt zu haben!
default_icon_eek.gif
 
Oh Gott, was sind denn das für schreckliche Sachen?? Kann mich gar nicht erinnern, mal sowas gelernt zu haben!


Jep, das ist C++, eine objektorientierte Programmiersprache - und bei obigen Script könnte es sich um die hellseherische Voraussage der Totozahlen vom kommenden Spieltag handeln
default_biggrin.png
 
Zurück
Oben