Kamfix Geschrieben 21. August 2012 Geschrieben 21. August 2012 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 Zitieren
flashpixx Geschrieben 21. August 2012 Geschrieben 21. August 2012 Verwende bite die Code-Tags Dein Algorithmus ist nicht korrekt Bubblesort Außerdem noch als Hinweis in C gibt es keine Vektoren (C++ Vector - Boost 1.50.0 / vector - C++ Reference ), Du verwendest ein Array Zitieren
Kamfix Geschrieben 23. August 2012 Autor Geschrieben 23. August 2012 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 Zitieren
Klotzkopp Geschrieben 23. August 2012 Geschrieben 23. August 2012 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. Zitieren
flashpixx Geschrieben 24. August 2012 Geschrieben 24. August 2012 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 Zitieren
gasssst Geschrieben 25. August 2012 Geschrieben 25. August 2012 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 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. Zitieren
.vash Geschrieben 29. August 2012 Geschrieben 29. August 2012 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 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. Zitieren
SynonymOfGod Geschrieben 30. August 2012 Geschrieben 30. August 2012 (bearbeitet) 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 30. August 2012 von SynonymOfGod Zitieren
flashpixx Geschrieben 30. August 2012 Geschrieben 30. August 2012 Das hat auch mit der Programmiersprache nichts zu tun, Vektor ist ein mathematischer Begriff :upps Also bleib doch lieber im Java Forum flashpixxxx Dann erkläre uns doch mal, da Du ja hier neu bist, was ein Vektor in Bezug auf Topologie bzw. Vektorraum präzise mathematisch ist. Zitieren
Klotzkopp Geschrieben 30. August 2012 Geschrieben 30. August 2012 Da inzwischen klar ist, was gemeint ist, ist die Vektor-Diskussion an dieser Stelle beendet. Wer noch etwas zum eigentlichen Thema beitragen möchte, kann das gern tun. Zitieren
Empfohlene Beiträge
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.