Zum Inhalt springen

C: Funktionen / Vektoren: Argumente-Übergabe


Kamfix

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was soll ich code tagen? Erscheint bei Dir nicht die grüne Schrift?

Danke für den Hinweis der Algorithmus sei fehlerhaft. Deshalb habe ich ja hier etwas geschrieben. Die Lösung aus dem Lehrbuch habe ich auch schon zitiert ...

In C gibt es durchaus Vektoren. Wie sie heißen hängt sicher vom Lehrbuch ab. Bei mir steht sie werden in der englischsprachigen Literatur "array" genannt. Ich habe aber ein deutsches Buch gekauft. Scusa. In einem englischsprachigen Forum hätte ich sicher "array" geschrieben. ;)

Worauf wolltest Du mit den angeführten Links hinaus? Ich habe hier in C programmiert, nicht C++ oder so. Was soll ich da jetzt alles lesen?

Also, dann noch ein schönes Wochenende.

Ciao, Andreas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was soll ich code tagen? Erscheint bei Dir nicht die grüne Schrift?
Grün ist ja schön, aber noch schöner wäre die Einrückung. Die bleibt erhalten, wenn du deinen Code zwischen
 und [[color=black]/[/color]CODE] setzt.

Die Lösung aus dem Lehrbuch habe ich auch schon zitiert ...
Und da gibt es einen entscheidenden Unterschied. Dein Code greif auf v[n] zu, und das ist nicht erlaubt. Der Lehrbuch-Code tut das nicht.
Link zu diesem Kommentar
Auf anderen Seiten teilen

In C gibt es durchaus Vektoren.

Wenn es Vektoren gibt, dann sollte Dir ja sicherlich bekannt sein, dass es einen C Standard gibt

http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf

http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

Zeige bitte, wo im Standard die Vektoren sind?

Wie sie heißen hängt sicher vom Lehrbuch ab. Bei mir steht sie werden in der englischsprachigen Literatur "array" genannt. [...] Worauf wolltest Du mit den angeführten Links hinaus? Ich habe hier in C programmiert, nicht C++ oder so.

Es gibt keine Vektoren in C, Vektoren gibt es aber in C++.

Ich habe aber ein deutsches Buch gekauft. Scusa. In einem englischsprachigen Forum hätte ich sicher "array" geschrieben. ;)

Es gibt eine gewisse Notation und Namensgebung und an die solltest Du Dich halten

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn es Vektoren gibt, dann sollte Dir ja sicherlich bekannt sein, dass es einen C Standard gibt

http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf

http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

Zeige bitte, wo im Standard die Vektoren sind?

Es gibt keine Vektoren in C, Vektoren gibt es aber in C++.

Natürlich ist ein (1dimensionales) array ein Vektor, denn genau das ist Definition eines Vektors. Das hat auch mit der Programmiersprache nichts zu tun, Vektor ist ein mathematischer Begriff :upps Also bleib doch lieber im Java Forum flashpixxxx :rolleyes:

Da alle anderen sich wohl zu gut waren auf die eigentliche Frage zu antworten: Dein Dreieckstausch ist falsch. Wenn du den mal Zeile für Zeile durchgingest, wird dir der Fehler auch selber auffallen, da die Implementierung so keinen Sinn macht. Außerdem geht deine Schleife einen Index zu weit.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Natürlich ist ein (1dimensionales) array ein Vektor, denn genau das ist Definition eines Vektors. Das hat auch mit der Programmiersprache nichts zu tun, Vektor ist ein mathematischer Begriff :upps Also bleib doch lieber im Java Forum flashpixxxx :rolleyes:

Wenn man in einem Programmierforum um Hilfe sucht dann wendet man in der Regel die allgemein übliche Fachsprache an. Auch wenn in der Theorie Vektor eine genauere Bezeichnung für ein eindimensionales Feld sein mag, so kenne ich wenige die in der Praxis von einem Vektor anstelle eines Arrays reden.

Da in C++ "vector" in der STL existiert ist die Verwechslungsgefahr durchaus gegeben. Ich bin beim ersten Lesen auch darauf reingefallen. So gesehen haben alle Recht, außer mit Ihrer Polemik, die ist hier Fehl am Platz.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Heult doch nicht rum... in C++ ist ein Vector doch im grunde eine Containerklasse eines Arrays.... mehr ist nicht dahinter... also finde ich nicht das es so schlimm ist wenn er von vectoren spricht wenn es sich um arrays handelt....

Würde er von listen sprechen und uns einen Code von einem Array geben dann würde ich dies beanstanden aber hier auf hochstandartkonform zutun find ich schade.. der Threadersteller wird dann sicherlich nie wieder euch um hilfe bitten... -.-

achja wenn man dann mal beim korrigieren ist...

scanf("%i", &v);

warum regt euch das nicht auf? den referenzoperator '&' gab es zu C zeiten noch nicht.. es ist ne neuerung in C++ um die pointer arithmetik zu entlasten ! also ich liebe ja solche leuts

Bearbeitet von SynonymOfGod
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...