title image


Smiley Re: Listen,Zeiger: ausführliche Kommentare erwünscht
Hi



Eigentlich solltest du das mit deinen Kommilitionen abklären - du wirst in Zukunft nicht alle Fragen hier im Forum klären können. Aber Hier ein paar Hinweise ohne Gewähr:



#include



struct Listenelement { //Was genau passiert in diesem Block?

int Nutzinfo;

Listenelement* weiter;

};

Hier wird die Struktur Listenelement definiert: Ein Daten-Block, der aus einer Zahl und einem Zeiger auf das Nächste Listenelenemt besteht.



Listenelement* neueListe(int info) { // wozu gehört *?

// Wie liest man die letzte Zeile?

Das * gehört hier zu "Listenelement": Die Funkion liefert einen Zeiger auf ein Listenelement



Listenelement* el = new Listenelement; // Was bewirkt diese Zeile?

Ein Neues, leeres Listenelement wird erstellt, das man dann mit informationen füllen kann:

el->Nutzinfo = info;

el->weiter = NULL;

return el;

}



bool istLeer(Listenelement* L) {

return (L==NULL);

}



Listenelement* anDenAnfang(Listenelement* L, int info){

//Parameter der Funktion: ist L ein Zeiger oder eine Liste?

//Wie ist der Zusammenhang mit Listenelement?

*L ist ein Zeiger auf ein Listenelement. Jedes Listenelement ist sozusagen auch eine Liste - eben eine, die nur aus einem Element besteht



if (istLeer(L))

return neueListe(info);



Listenelement* el = new Listenelement;

el->Nutzinfo = info;

el->weiter = L;

L = el;

// Wie ist der Zusammenhang zwischen L und el? Am besten bildlich

//erklären.

return L;

Die Letzten beiden Zeilen sind sinnfrei - es gibt keinen Zusammenhang, man hätte stattdessen auch gleich schreiben können

return el;



}



void gibAus(Listenelement* L) {

Listenelement* el = L;

if(istLeer(L))

cout << "keine Werte";

else {

while (el != NULL) {

cout Nutzinfo << ' ';

el = el->weiter;

}

}

cout << endl;

}



int main(int argc, char* argv[]) // bei diesem main-//Block verstehe

//ich die einzelnen Schritte und das Ziel nicht. Wenns

//geht, bitte das ganze Ding erklären. Vor allem die

//übergebenen Parameter argc...

Die Haben hier keine Beeutung - wenn du deine (später erstellte) EXE-Datei mit der eingabe:

meinProgramm Parameter

startest, enthält argc die Anzahl der Parameter+1, und argv[] die Parameter selbst.

{



Listenelement* l = NULL;

Listenelement* leereListe = NULL;

cout << "l: ";

gibAus(l);

cout << "leereListe: ";

gibAus(leereListe);

Zwei Zeiger, die aus "NULL" Zeigen, werden angelegt und ausgegeben





l = neueListe (4);

l = anDenAnfang (l, 3);

l = anDenAnfang (l, 2);

l = anDenAnfang (l, 1);

cout << "l: ";

gibAus(l);

Es werden nacheinander Listenelemente mit den Inhalten 3,2,1 vorne an die Liste l gehängt





if (istLeer(l))

cout << "l ist leer." << endl;

else

cout << "l ist nicht leer." << endl;



if (istLeer(leereListe))

cout << "leereListe ist leer." << endl;

else

cout << "leereListe ist nicht leer." << endl;



cout << "l: ";

gibAus (l);



Es wird ausgegeben, ob die listen leer sind - laß das ding doch einfach mal laufen! :-(



return 0;

}



// Jetzt Fragmente eines anderen Programms

int zaehlerekursiv(Listenelement* L){

if (istLeer(L))

return 0;

else return (1+zaehlerekursiv(L->weiter)); //hier wird

//ja gar nix

//gezählt, oder? Bitte diese

//Zeile genau erklären.





Du solltest das vielleicht mal selbst nachvollziehen...

Erster Fall: Du übergibst an diese Funktion die (leere) Liste [] - dann wird 0 zurückgegeben.

Zweiter Fall: Du übergibst eine Liste wie z.B. [1 2 3].

Rückgabe: 1+ zählerekursiv([2 3])

Rückgabe: 1+ zählerekursiv([3])

Rückgabe: 1+ zählerekursiv([])

Rückgabe: 0

Gesamt: 1+1+1+0 = 3 - schön







}

int nterEintrag(Listenelement* L,int n){

Listenelement* el=L; // wozu dient diese Zeile?

Die könntest du glaubich weglassen, wenn du im übrigen Code überall "el" duch "L" ersetzt...

if (zaehle(L)
return -1;

else{

int a=1;

while (a!=n){

el=el->weiter;

a++;}

return el->Nutzinfo;

}}







1 // neues Programm

2 int main (){

3 int A=1,B=-99;

4 int *ZeigerA = &A, *ZeigerB //zeigt ZeigerA jetzt auf A?Was macht

//ZeigerB? Er zeigt irgendwo hin, un niemand weiß, wo! (Schlecht!)

5 *ZeigerA=B;

6 B=B*B;

7 ZeigerB=&B;// warum hier kein * wie in Zeile 4?! Bitte genau

//erklären.

In Zeile 4 wurde der zeiger deklariert:

int *ZeigerA ...

das mußte mit dem "*" gesagt werden, daß es ein Zeiger ist. Bei allen weiteren Verwendungen "weiß" man das ja schon.



8 *ZeigerA=*ZeigerB;

return 0;

}





bye



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: