![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.107
|
![]() Tjo wie ihr seht hab ich wieder ein Problem mit dem programmieren....
![]() Name, Matrikelnr von mehreren Studenten sollen in mehrdimensionalen Arrays eingetragen werden. Dabei werden die Matnr + Namen (in der Reihenfolge der Matnr) mit Hilfe des Bubble Sort Algorithmus sortiert und ausgegeben. Die Namen werden irgendwie mit dem Pointer an die Matrikelnr. zugeordnet und da bin ich am scheitern... ![]() Ich weiss nicht einmal wie man Pointer verwendet. In der Vorlesung wurde nicht einmal ein einziges Wort über Pointer erwähnt. ![]() Die Halbe Sache hab ich schon erledigt also das Sortieren nach Matnr. Code:
#include<iostream.h> void bubble(int iArray[], int ); int main() { const int x=5; int matnr[x]; /* ??? const int s=2; int matnr[x][s]; cout<<"Geben sie den Namen des Studenten ein:"; cin>>name[i]; ??? */ for(int j=0; j<x; j++){ cout<<"Geben Sie die Matnr ein"<<endl; cin>>matnr[j]; } bubble(matnr,x); } void bubble(int iArray[], int x) { for(int i = 0; i < x; i++) { for(int j = 0; j < (x - 1); j++) { if(iArray[j] > iArray[j + 1]) { int iTemp = iArray[j]; iArray[j] = iArray[j + 1]; iArray[j + 1] = iTemp;} } } for(int z=0; z<x; z++) cout<<iArray[z]<<endl; } Also das einzige was mir fehlt ist die Eingabe und die Ausgabe der Namen die zu der Matnr gehört. |
![]() |
![]() |
![]() |
#2 |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
![]() Du sollst ein Zeigerfeld (Pointerarray) sortieren und nicht die Daten !
Es geht schneller ein Feld über 4 Bytes Zeigeradressen (eine 32 Bit Adresse) zu sortieren, als die Datensatz Blöcke a 100 Bytes. Code:
struct S_student { char nachname[30],vorname[20],adresse[40],plz[8],ort[35]; long gebdat /* JJJJMMTT */ ,matnr; }; struct S_student gd_student[100],*gp_student[100]; for(i=0;i<100;i++) { gp_student[i]= &gd_student[i]; } /* und jetzt über gp_student[i]->matnr auf die Matrikelnummer zugreifen sowie mittels lokaler Zeigervariable lp_student einen Austausch der Adressen vornehmen, die Daten bleiben am ursprünglichen Ort. */ lp_student= gp_student[i]; gp_student[i]= gp_student[j]; gp_student[j]= lp_student; /* es wurden nur Adressen vertauscht, Danke für's Gehirn einschalten :) */ Die Ausgabe erfolgt nicht etwa über: gd_student[i].<member> sondern über gp_student[i]-><member> /* für alle i von 0 bis zur Anzahl der Studenten - 1 (die Anzahl der Studenten ist jedenfalls / muss jedenfalls sein <= 100) */ l für lokal das d für daten das p für pointer mfg Kikakater |
![]() |
![]() |
![]() |
#3 | |
Elite
![]() Registriert seit: 08.11.2001
Alter: 42
Beiträge: 1.285
|
![]() Der Knackpunkt liegt in dem Fall bei
Zitat:
Name: array[0][0] Matnr: array[0][1] Student2: Name: array[1][0] Matnr: array[1][1] ... Das Array dient in diesem Fall als einfachere Form einer Datenstruktur. Beim Verlgeichen der Matrikelnummer verwendest du array[x][1] aber beim Sortieren sortierst du array[x] (Den kompletten Datansatz) mfg c.
____________________________________
www.sagmueller.net Freedom - use it or lose it (Lawrence Lessig) Im übrigen bin ich der Meinung, dass Microsoft zerschlagen werden muss. |
|
![]() |
![]() |
![]() |
#4 | |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
![]() Zitat:
Er hat matnr [][] auskommentiert, Array[][] kommt gar nirgends vor *super* ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#5 | |
Elite
![]() Registriert seit: 08.11.2001
Alter: 42
Beiträge: 1.285
|
![]() Zitat:
und ob ich das array nun "matnr" oder "array" nenne ist eignetlich egal, oder?
____________________________________
www.sagmueller.net Freedom - use it or lose it (Lawrence Lessig) Im übrigen bin ich der Meinung, dass Microsoft zerschlagen werden muss. |
|
![]() |
![]() |
![]() |
#6 |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.107
|
![]() Ja, genau so hab ich's gemeint...
Ich habs nur auskommentiert weil ich nicht wusste wie ich das anwenden sollte, naja trotzdem hab ich's hingekriegt. ![]() Naja aber ohne Zeiger halt... Code:
#include<iostream.h> void bubble(int iArray[][2], int); int main() { int x; cout<<"Anzahl der Studenten:"<<" "; cin>>x; //xAnzahl der Studenten int mat[x][2], temp; //2 Spalten char name[x][100]; //name bis 100 Zeichen lang for(int j=0; j<x; j++){ cout<<"Geben Sie die Matnr ein:"<<" "; cin>>mat[j][0]; //Eingabe der matnr und name in den Feldern mat[j][1]=j; cout<<"Geben Sie den Namen ein:"<<" "; cin>>name[j]; } bubble(mat,x); //bubble Aufruf for (int j=0; j<x; j++) { cout << mat[j][0] <<" "; temp=mat[j][1]; cout << name[temp] << endl; } } void bubble(int iArray[][2], int x) { //bubble sort Funktion for(int i = 0; i < x; i++) { for(int j = 0; j < (x - 1); j++) { if(iArray[j][0] > iArray[j + 1][0]) { int iTemp = iArray[j][0]; iArray[j][0] = iArray[j + 1][0]; iArray[j + 1][0] = iTemp; iTemp = iArray[j][1]; iArray[j][1] = iArray[j + 1][1]; iArray[j + 1][1] = iTemp; } } } } |
![]() |
![]() |
![]() |
#7 |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
![]() Verbesserungsvorschlag:
Es reicht matnr[][1] zu sortieren (den Index). |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|