Problem mit Array befüllen
-
ahh super danke,
hätte noch eine frage, zur ausgabe des arrays
jetzt gibt er nur eine ganz komische zahl aus, wie muss ich es denn richtig schreiben? wenn ich das [z] hinter array weglasse gibt er nur den letzten wert aus.if(r == 6) { for(z=0;z<size;z++) { printf("%d",z); printf(".Feld:"); printf("%i", array[z]); printf("\n"); goto begin; }
-
zunächst mal ist jedes printf eine Anweisung. Drum solltest du die geschweiften Klammern bei der for-Schleife nicht vergessen. Aber es geht auch kürzer:
for(z=0;z<size;z++) printf("%d. Feld: %d\n", z, array[z]);
-
hab mich verschrieben, mit dem [z] hint array gibt er nur den letzten wert aus, und ohne halt irgendeine unlogische zahl, wie löse ich das problem den hier am besten?
-
danke, für die hilfe, aber so gibt er leider weiterhin nur den letzten im programm eingetragenen wert des arrays aus
ich weiß nicht wo ich was verändern muss, damit sich das ändert
-
Kann es sein, dass das Programm schon beim Array befüllen einen Fehler macht?
Habs jetzt zwar hingekriegt dass er alle werte des arrays ausgibt, aber der wert der bei [0] eingegeben wurde landet im letzten und der rest ist dann einfach mit zufälligen zahlen gefüllt?
Hat jemand noch ne idee??
-
Ich hab mal deinen Code etwas eingerückt und optisch verbessert. Ich komm nämlich nicht damit zurecht
#include <stdio.h> #include <stdlib.h> int main() { int r, z; int size=0; int *array = NULL; do { printf("Suchen sie sich einen der folgenden Befehle aus:\n"); printf(" 1) Feldgroesse festlegen\n"); printf(" 2) Zahlen von Tastur einlesen\n"); printf(" 3) Zufallszahlen generieren\n"); printf(" 4) Feld sortieren\n"); printf(" 5) Zahl ausgeben\n"); printf(" 6) Feld ausgeben\n"); printf(" 7) Programm beenden\n"); scanf("%d", &r); switch(r) { case 1: { printf(" Geben sie bitte die Laenge des Feldes an! \n"); scanf("%d", &size); array = (int *) malloc(size *sizeof(int)); if(array != NULL) { printf("\n Die Feldgroesse wurde nun gesetzt! \n"); for(z=0; z<size; ++z) array[z] = 0; } } break; case 2: { printf(" Geben sie nun die gewuenschten Zahlen ein:\n"); for(z=0; z<size; ++z) { printf("%d. Zahl: ", z+1); scanf("%d", &array[z]); } printf("Das Feld ist nun voll!\n"); } break; case 6: { for(z=0;z<size;z++) printf("%d. Feld: %d\n", z+1, array[z]); } break; } } while(r < 7); if(array != NULL) free(array); getchar(); return 0; }
-
ja ich weiß sah nich so sehr sauber aus
erstmal danke für deine mühe
aber wieso spuckt der code bei mir nen fehler aus?
"NULL" undelcared (first use in this function) in zeile 5
-
Ich war so freundlich, dir noch die Headerdateien oben einzubinden :p
-
mhm, darauf hät ich auch mal selber kommen können -.-
danke
-
Hallo, ich hätte noch eine weitere frage, in das programm soll eine bubblesort funktion eingebaut werden.
An letzter Stelle des Arrays soll die größte Zahl stehen und an erster die kleinste. Dies soll durch 2 in einander geschachtelte for-schleifen gelöst werden.
Hatte das Programm soweit, dass er nur die kleinste Zahl an erste stelle geschoben hat mittlerweile tut er das aber leider auch nicht mehr, sondern gibt entweder nur die gleiche zahl aus, oder irgendeine komische zahl die funktion sieht im moment so aus:int bubble(int array[z]){ int a,b,temp; for (a = 0 ; a < size; a++) { for (b = 1; b < size; b++) { if (array[a] > array[b]) { temp = array[a]; array[b] = array[a]; array[a] = temp; } } } for(z=0;z<size;z++) printf("%i",array[z] ); }
und wird folgendermaßen aufgerufen:
case 4: { printf("Welche der 3 Sortier Methoden möchten sie Benutzen?\n"); printf(" 1) Bubblesort\n"); printf(" 2) Shakersort\n"); printf(" 3) Insertionssort\n"); scanf("%d", &z); switch(z) { case 1: { printf("Bubblesort:\n"); bubble(array); }break;
ich hoffe ihr habt eine idee und könntet mir helfen
-
Ich helf dir etwas auf die Sprünge:
// im Kommentar ein Beispiel für die Zahlen 7 (array[a]) und 5 (array[b]) temp = array[a]; // temp = 7 array[b] = array[a]; // array[b] = 7 array[a] = temp; // array[a] = 7 // Die 5 verschwand hinter der Wand und wurde mit der 7 überschrieben :D
-
nein bitte nicht, das kann doch nicht ernsthaft der fehler sein-.-
vielen dank, werde mich gleich wieder dran setzen und sonst nochmal melden ^^
danke für diene hilfe!!
-
hab das jetzt geändert, aber wieso zum teufeln schiebt er denn nur die kleinste zahl nach ganz links und lässt den rest einfach so bestehen?
er müsste doch eigentlich immer weiter nach vorne wandern und die zaheln vertauschen??
-
#include <stdio.h> void bubblesort(int *array, int length) { int i, j; for (i = 0; i < length; ++i) { for (j = 0; j < length - i - 1; ++j) { if (array[j] > array[j + 1]) { int tmp = array[j]; array[j] = array[j + 1]; array[j + 1] = tmp; } } } } int main() { int arr[] = {5,3,6,7,8,2,3}; bubblesort(arr, sizeof(arr)/sizeof(int)); for(int i=0; i < sizeof(arr)/sizeof(int); ++i){ printf("%i",arr[i]); } return 0; }
-
Danke, genau den Code habe ich auch gefunden,
hab ihn auf meine variablen umgeschrieben und naja...
er setzt halt nur die höchste zahl ein letzte stelle, mehr aber auch nicht, der rest verschiebt sich einfach auf links
das kann doch eigentlich garnicht sein?int r, z; int s; int size=0; int *array = NULL; void bubble(int array[z], int size) { int a, b,temp; for (a = 0; a < size; a++) { for (b = 0; b < size; b++) { if (array[a] > array[a + 1]) { int temp = array[a]; array[a] = array[a + 1]; array[a + 1] = temp; } } } }
so hab ich die funktion geschrieben und dann ruf ich sie später folgendermaßen auf:
switch(z) { case 1: { printf("Bubblesort:\n"); bubble(array,size); }break;
-
Stichpunkt Arraygrenzen
for (a = 0; a < size; a++) { for (b = 0; b < size; b++) { if (array[a] > array[a + 1]) { |____| | | Was ergibt das wohl, wenn a im letzten Schleifendurchlauf ist
-
Naja, wenn ich den Array größe 8 gesetzt hätte, würde da 9 stehen und da es keinen Wert 9 gibt kann er auch schlecht mit einem Wert vergleichen
meine idee wäre, das ganze so zu schreiben:bubble(int array[z], int size) { int a, b,temp; for (a = 0; a < size; a++) { for (b = 1; b < size; b++) { if (array[a] > array[b]) { int temp = array[b]; array[b] = array[a]; array[a] = temp; } } } for(z=0;z<size;z++){ printf("%i ",array[z] ); } }
Doch auch das führt mich aufs selbe problem zurück
-
PlaZm0 schrieb:
er setzt halt nur die höchste zahl ein letzte stelle, mehr aber auch nicht, der rest verschiebt sich einfach auf links
das kann doch eigentlich garnicht sein?void bubble(int array[z], int size) { int a, b,temp; for (a = 0; a < size; a++) { for (b = 0; b < size; b++) { if (array[a] > array[a + 1]) { int temp = array[a]; array[a] = array[a + 1]; array[a + 1] = temp; } } } }
Weil du "size -i -1" schreiben musst, damit er das letzte Element nicht mehr mitsortiert... außerdem deklarierst du temp 2 mal. Du solltest dir die vorherigen Posts genauer anschauen, weil dort siehst du was du falsch machst.
-
oh man, das ist mir jetzt glatt ien bisschen peinlich, hab den code bei mir im programm echt total falsch zusammengebastelt, was sehen sich j und i auch so verdammt ähnlich :S
Gut dass du es mir nochmal so gesagt hast, hab dann nochmal genauer hingeguckt
Vielen Vielden Dank!!!
Ihr habt mir echt RIESIG geholfen :D!!!
glaub jetzt hab ich auch fast alles zusammen ^^