Hallo zusammen,
lerne gerade C und bin bei der Übergabe von Argumenten bei Vektoren hängen geblieben. ("Programmieren lernen mit C" von Karlheinz Zehner, 4. Aufl., Aufgabe 1-31) Auch seine Lösung auf seiner Internett-Seite hat mir keine Erleuchtung gebracht...
Aufgabe des Programms:
Zahlen einlesen,
Z. ausgeben,
Z. sortieren,
Z. ausgeben (dieses mal sind sie sortiert).
Das ganze in 3 Funktionen zerlegt. Die Return-Anweisung hat der Aufgabensteller noch nicht ermöglicht / erklärt für diese Aufgabenstellung.
Mein Ergebnis:
Die Zahlen werden eingelesen und im Vektor korrekt abgespeichert. Ich verwende hier mal nur 5 Zahlen von möglichen 9. (Beides willkürlich, beides in main festgelegt.)
Die erste Ausgabe der nicht sortierten Zahlen funzt auch prima. Nach Aufruf der Funktion zahlen_sortieren stelle ich fest, daß der Vektor nur noch aus einem Element (,das auch mit dem eingegebenen übereinstimmt,) besteht.
Hier meine Version:
---------
#include <stdio.h>
void zahlen_einlesen (int v[], int *n)
{
int i;
printf("Bitte 5 Zahlen eingeben. Eingabe jeweils mit <return> abschliessen.\n");
printf("n = %i\n", *n); // Nur um zu sehen, ob das Argument hier angekommen ist.
i = 0;
while (i < *n) {
scanf("%i", &v);
i++;
}
printf("Eingabe beendet. \n");
}
void zahlen_ausgeben (int v[], int n)
{
int i;
printf("n = %i\n", n);
printf("Folgende Zahlen wurden eingegeben: \n");
for (i = 0; i < n; i++) {
printf("%i ", v);
}
}
void zahlen_sortieren (int v[], int n)
{
int i, speicher, sortiert;
// sortiert = 0 (unsortiert), sortiert = 1 (sortiert)
do {
sortiert = 1;
for (i = 1; i <= n; i++) {
if (v[i-1] > v) { // Bedingung fuers Tauschen
speicher = v;
v[i-1] = v;
v = speicher;
sortiert = 0;
}
}
}
while (sortiert == 0);
}
int main (void)
{
int v[9]; // Liste von max. 9 Zahlen
int n; // Anzahl der Zahlen
n = 5; // Anzahl der Zahlen wird hier willkürlich festgelegt.
zahlen_einlesen (v, &n);
zahlen_ausgeben (v, n);
zahlen_sortieren (v, n);
zahlen_ausgeben (v, n);
return 0;
}
-----------
Der Autor des Buchs hat die Sortier-Funktion wie folgt gelöst:
-----
void zahlen_sortieren (int x[], int n)
{
int sortiert;
int h;
int i;
do {
sortiert = TRUE;
for (i = 0; i < n-1; i++)
if ( x[i+1] < x ) {
h = x; x = x[i+1]; x[i+1] = h; /* tauschen */
sortiert = FALSE;
}
} while (sortiert == FALSE);
}
------
Was ist dort so wesentlich anders? Ich habe mit 0 und 1 statt TRUE und FALSE gearbeitet ...
Ich danke Euch für ein paar Hinweise ... :confused:
Ciao, Andreas