WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 24.11.2003, 21:02   #1
Groovy
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.107


Standard Schon wieder ein Problem...mehrdim. Arrays, Zeiger

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.
Groovy ist offline   Mit Zitat antworten
Alt 24.11.2003, 21:20   #2
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

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) */
g steht übrigens für global
l für lokal
das d für daten
das p für pointer

mfg Kikakater
kikakater ist offline   Mit Zitat antworten
Alt 24.11.2003, 21:22   #3
sagi
Elite
 
Registriert seit: 08.11.2001
Alter: 42
Beiträge: 1.285


Standard

Der Knackpunkt liegt in dem Fall bei
Zitat:
sollen in mehrdimensionalen Arrays eingetragen werden
Student1:
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.
sagi ist offline   Mit Zitat antworten
Alt 24.11.2003, 21:26   #4
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

Zitat:
Original geschrieben von sagi
Der Knackpunkt liegt in dem Fall bei

Student1:
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.
Wo gibt es eine Erwähnung von Doppel [] ?

Er hat matnr [][] auskommentiert, Array[][] kommt gar nirgends vor *super*
kikakater ist offline   Mit Zitat antworten
Alt 25.11.2003, 11:19   #5
sagi
Elite
 
Registriert seit: 08.11.2001
Alter: 42
Beiträge: 1.285


Standard

Zitat:
Wo gibt es eine Erwähnung von Doppel [] ?
im Wort _mehrdimensional_

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.
sagi ist offline   Mit Zitat antworten
Alt 25.11.2003, 11:44   #6
Groovy
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.107


Standard

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;
      }
	 
    }   

  }
}
Groovy ist offline   Mit Zitat antworten
Alt 25.11.2003, 12:27   #7
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

Verbesserungsvorschlag:

Es reicht matnr[][1] zu sortieren (den Index).
kikakater ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:18 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag