002
15.11.2005, 11:30 Uhr
~freezedSoul
Gast
|
hmm...bedeuten die [ ] klammern nciht arrays??wir haben in der shcule mal so ein programm geschieben bei dem man zahlen eingibt u er die sofort wieder geordnet ausgibt....u da haben wir auch eines mit arrays u eines mit pointer...u der unterschied bei den beiden war das eben beim array programm nur eine bestimmte anzahl von werten geordnet werden konnte u beim pointer unendlich viele....u das is das was mich so irritiert...weil wir sollten eben ein programm schreiben das ungefähr au dem niveau von eben diesem misch-programm is u halt pointer....
hier mal die beiden programme:
mit array:
| C++: |
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <iostream.h> #include <time.h> #include <math.h>
void main() {
int i,Feld[2][35]; float m,s; s=0; cout<<"Dieses Programm gibt die Noten der Schueler aus,berechnet den Notendurchschnitt und gibt eine Notenstatistik aus!\n"; for(i=0;i<=32;i++) {Feld[0][i]=rand()%5+1; Feld[1][i]=i+1;
cout<<"\nKat.Nr:"<<Feld[1][i]<<"="<<Feld[0][i]; cout<<'\n'; s=s+Feld[0][i]; } m=s/32; cout<<"\nDer Notendurchschnitt betraegt:"; cout<<m; cout<<"\n"; cout<<"\nNotenstatistik:"; cout<<""<<endl<<"Sehr Gut:\n"; for(i=0;i<=34;i++) {if(Feld[0][i]==1) {cout<<" *"; } }
cout<<""<<endl<<"Gut:\n"; for(i=0;i<=32;i++) {if(Feld[0][i]==2) {cout<<" *"; } }
cout<<""<<endl<<"Befriedigend:\n"; for(i=0;i<=32;i++) {if(Feld[0][i]==3) {cout<<" *"; } }
cout<<""<<endl<<"Genuegend:\n"; for(i=0;i<=32;i++) {if(Feld[0][i]==4) {cout<<" *"; } }
cout<<""<<endl<<"Nicht Genuegend:\n"; for(i=0;i<=32;i++) {if(Feld[0][i]==5) {cout<<" *"; } } cout<<"\n\nBeenden mit beliebiger Taste";
getch(); }
|
mit pointer:
| C++: |
#include <stdio.h> #include <stdlib.h> #define ENDE_WERT 999
struct FELD{ int wert; struct FELD* p_naechste; } feld;
// Ausgabe der aktuellen Liste // mit aufsteigenden Werten void ausgabe(struct FELD *start);
// Einfügen des neuen Wertes // in die vorhandene Liste struct FELD *mischen(struct FELD *start, struct FELD *neu);
int main(int argc, char *argv[]) { int i,zahl; char warten; struct FELD *p_erste_zahl=NULL,*p=NULL;
printf("\n Willkommen zu Sortieren während der Eingabe!"); printf("\n Abbruch mit %d!",ENDE_WERT);
i=0; do {i++; printf("\n Bitte den %d. Wert eingeben: ",i); scanf("%d",&zahl); if (zahl!=ENDE_WERT){ // Speicher anfordern und mit dem neuen Wert befüllen p= (struct FELD *) malloc(sizeof(struct FELD)); p->wert=zahl; p->p_naechste=NULL; // Falls erste Wert speichern // ansonsten in die Liste einfügen if (i==1) p_erste_zahl=p; else p_erste_zahl=mischen(p_erste_zahl,p); // Aktuelle Liste ausgeben ausgabe(p_erste_zahl); }
} while (zahl!=ENDE_WERT); // alle Werte wurden eingegeben system("pause"); return 0; }
struct FELD *mischen(struct FELD *start, struct FELD *neu) { FELD *p, *voriger;
for (voriger=p=start;p!=NULL;p=p->p_naechste) { if(p->wert > neu->wert) {
// entweder an erster stelle // oder nach dem vorigen wert einfügen if (p==start) start=neu; else voriger->p_naechste=neu; // verweisen auf den aktuellen neu->p_naechste=p; // die restliche Schleife wird übersprungen return start; } else // Der aktuelle Wert war nicht größer // also weitersuchen und den vorigen Listeneintrag // speichern voriger=p; } // Höchster Wert wird am Ende angefügt! voriger->p_naechste=neu; return start; }
void ausgabe(struct FELD *start) { struct FELD *p; int i=1; printf("\n Folgende Werte sind vorhanden:");
for (p=start;p!=NULL;p=p->p_naechste) { printf("\n An der Stelle %d %d",i++,p->wert); } printf("\n-------------------------------"); }
|
|