Jabber Geschrieben 4. Juni 2002 Geschrieben 4. Juni 2002 Hallo zusammen ! Was muß ich machen wenn ich die Zufallszahlen mit Feldern versehen möchte? Kann mir da einer helfen? #include <stdlib.h> #include<stdio.h> int main (void) { int Zzahl[100] int i randomize(); printf(" Hier stehen 100 Zufallszahlen in ihren Fledern!\n\n"); for(i=0; i<100; i++) printf("%d\n, rand() % 1000); getch(); return 0; } Ich würde die Zahlen gerne mit Feldern versehen damit ich anschließend qsort mit einbinden kann. Danke! Zitieren
nic_power Geschrieben 4. Juni 2002 Geschrieben 4. Juni 2002 Ich bin mir nicht so ganz sicher, ob ich Dich richtig verstanden habe, aber eventuell hilft Dir das folgende Fragment weiter: for(i=0; i<100; i++) { Zzahl[i]=rand()%1000; printf("%d\n, Zzahl[i]); } Zitieren
Jabber Geschrieben 4. Juni 2002 Autor Geschrieben 4. Juni 2002 Das sieht nicht schlecht aus. Ich benutze den Borland Compiler. Wenn ich es so schreibe wie du schreibst, sagt er mir in den beiden Zeilen nach der for-Schleife den Fehler "Invalid indirection" ?! Trotzdem schonmal Danke! Aber du hattest es schon richtig verstanden. Ich möchte den 100 Zzahlen Felder zuordnen. :WD Zitieren
Klotzkopp Geschrieben 4. Juni 2002 Geschrieben 4. Juni 2002 @Jabber: Poste bitte nochmal Deinen ganzen Quelltext, aber mit Copy&Paste, nicht abschreiben. Sonst wissen wir nicht, was ein Tippfehler ist (wie die fehlenden Semikola und Anführungszeichen), und wo wirklich ein Problem bestehen könnten. Zitieren
Jabber Geschrieben 4. Juni 2002 Autor Geschrieben 4. Juni 2002 ....? was soll das? Ich hab doch geschrieben in welcher Zeile die Fehler sind? Die einzigen beiden Semikola die ich hier nicht geschrieben habe ( aber bei mir im Quelltext ) sind die in der Dekleration von i und Zzahl. Sonst ist alles gleich. Wenn du Fehler siehst, dann schreib doch direkt welche. Das wäre nett. Deshalb frag ich ja. :hawk Zitieren
Jabber Geschrieben 4. Juni 2002 Autor Geschrieben 4. Juni 2002 OK: Copy und Paste. #include <stdlib.h> #include<stdio.h> int main (void) { int Zzahl[100] ; int i ; randomize(); printf(" Hier stehen 100 Zufallszahlen in ihren Fledern!\n\n"); for(i=0; i<100; i++) Zzahl=rand()%1000; printf("%d\n", rand() % 1000); getch(); return 0; } So siehts aus. Zitieren
nic_power Geschrieben 4. Juni 2002 Geschrieben 4. Juni 2002 Dir ist aber schon klar, das so ein Compiler ziemlich empfindlich bzgl. der Syntax ist? Es ist recht aufwendig zu "raten", wo das eine oder andere Semikolen fehlt und das Debugging wird dadurch auch nicht erleichtert. Poste den exakten Code, so wie Du ihn durch den Compiler schickst samt Fehlermeldung. Ansonsten kann man da nichts mehr nachvollziehn. Nic Zitieren
nic_power Geschrieben 4. Juni 2002 Geschrieben 4. Juni 2002 Original geschrieben von Jabber OK: Copy und Paste. #include <stdlib.h> #include<stdio.h> int main (void) { int Zzahl[100] ; int i ; randomize(); printf(" Hier stehen 100 Zufallszahlen in ihren Fledern!\n\n"); for(i=0; i<100; i++) Zzahl=rand()%1000; printf("%d\n", rand() % 1000); getch(); return 0; } Probiers mal damit. Die Klammern sind wichtig, da ansonsten nur eine Zahl ausgegeben wird: for(i=0; i<100; i++) { Zzahl=rand()%1000; printf("%d\n", Zzahl); } Zitieren
Jabber Geschrieben 4. Juni 2002 Autor Geschrieben 4. Juni 2002 OK, kam mir nur ein bisserl veräppelt vor. Hab das Prg auf meinem Lappi, (XP) deshalb geht das nicht mit dem copy. Aber das ist der exakte Text: #include <stdlib.h> #include<stdio.h> #include<conio.h> int main (void) { int Zzahl[100] ; int i ; randomize(); printf(" Hier stehen 100 Zufallszahlen in ihren Fledern!\n\n"); for(i=0; i<100; i++) Zzahl=rand()%1000; printf("%d\n", Zzahl); getch(); return 0; } Zitieren
Jabber Geschrieben 4. Juni 2002 Autor Geschrieben 4. Juni 2002 hab´s probiert. Immernoch der selbe Fehler!? Er sagt mir auch das Zzahl zwar deklariert ist, aber nicht genutzt wird. Zitieren
Klotzkopp Geschrieben 4. Juni 2002 Geschrieben 4. Juni 2002 Original geschrieben von Jabber OK, kam mir nur ein bisserl veräppelt vor.Ich wollte Dich keinesfalls veräppeln. Es ist nunmal leider so, dass die meisten Compiler auf Flüchtigkeitsfehler wie fehlende Semikola oder falsch gesetzte Klammern teilweise mit kryptischen Fehlermeldungen reagieren. Und wenn dann der hier gepostete Code nicht mit dem compilierten übereinstimmt, dann können wir wirklich nur raten, wo der Fehler liegt. Zitieren
nic_power Geschrieben 4. Juni 2002 Geschrieben 4. Juni 2002 Das ist kein Fehler, sondern nur eine Warnung des Compilers. Wenn Du die Klammern weg laesst, wird nur die erste Zeile nach der Schleifenanweisung innerhalb der Schleife ausgefuehrt. Der Rest erst nach Ablauf der Schleife (d.h. Du greifst bei der Ausgabe nicht auf den Array zu sondern nur auf ein einzelnes Element). Nic Zitieren
Jabber Geschrieben 4. Juni 2002 Autor Geschrieben 4. Juni 2002 Er zeigt mir keine Warnungen an, sondern 2 Fehler. Ich kan das Prg auch nicht ausführen danach. for(i=0; i<100; i++) { Zzahl=rand()%1000; // hier zeigt er mir an : Invalid indirection printf("%d\n", Zzahl); } Sonst sind keine Fehler vorhanden. Tippfehler oder so! Zitieren
nic_power Geschrieben 4. Juni 2002 Geschrieben 4. Juni 2002 Da müssen dann mal die Windows/Borland-Hacker ran. Bei mir (unter linux) funktionierts, allerdings muss man randomize durch srand() mit dem passenden (==irgendeinem) seed ersetzen. Ich koennte mir vorstellen, dass rand() in der Windows Welt nicht das ist was es in der Unix-Welt ist. Nic Zitieren
Jabber Geschrieben 4. Juni 2002 Autor Geschrieben 4. Juni 2002 OK, ich danke Dir erstmal. Ich werde es mal meinen Lehrer testen lassen! Mal sehen was der davon hält. Ich werd nochmal ein bischen probieren. Vielleicht mal mit Visual C ausprobieren?! Zitieren
Jabber Geschrieben 4. Juni 2002 Autor Geschrieben 4. Juni 2002 :eek: :eek: :eek: Es hat funktioniert!! :OD :OD Ich hab es einfach nochmal probiert, danach hat es geklappt! Hmmm! Naja, dann kann ich ja jetzt weitermachen und mal versuchen die Zahlen mit Hilfe von qsort zu sortieren! Schönen Dank nochmal Nic! Zitieren
nic_power Geschrieben 4. Juni 2002 Geschrieben 4. Juni 2002 Freut mich, dass es klappt. Ich habe da noch einen kleinen Nachtrag bzgl. der beiden folgenden Varianten: int Zzahl[100]; for(i=0; i<100; i++) Zzahl[i]=rand()%1000; printf("%d\n", Zzahl[i]); und for(i=0; i<100; i++) { Zzahl[i]=rand()%1000; printf("%d\n", Zzahl[i]); } Das Array Zzahl wird fuer 100 Elemente reserviert (0-99). Im ersten Fall greifst Du mit der printf-Anweisung auf das Element Zzahl[100] zu, fuer das Du keinen Speicher reserviert hast (da das i wird _nach_ jedem Schleifendurchlauf um 1 erhoeht wird)! Sowas fuehrt entweder zu einem Laufzeitfehler oder zu ausgesprochen schwer auffindbaren Fehlern, wenn die Programme etwas groesser geraten sind und nicht mit Konstanten gearbeitet wird. Nic Zitieren
Jabber Geschrieben 23. Juni 2002 Autor Geschrieben 23. Juni 2002 Da bin ich wieder! Hab mal versucht das ganze zu sortieren, klappt aber leider nicht! Vielleicht könnte mir noch mal jemand helfen, das wäre super! Was mache ich falsch? Warum wird nichts sortiert? #include <stdlib.h> #include <stdio.h> #include <conio.h> void bubble(int array[], int elemente) { int i,j,temp; while(elemente--) for(i = 1; i <= elemente; i++) if(array[i-1]>array) { temp=array; array=array[i-1]; array[i-1]=temp; } } int main(void) { int i; int Zzahl[15]; int N = 15; randomize(); printf("15 Zufallszahlen zwischen 0 und 100\n\n"); bubble(Zzahl,N); for(i=0; i<N; i++) { Zzahl=rand()%100; printf("%d\n", Zzahl); } getch(); return 0; } Zitieren
Klotzkopp Geschrieben 23. Juni 2002 Geschrieben 23. Juni 2002 Original geschrieben von Jabber Was mache ich falsch?Ganz einfach. Du sortierst das uninitialisierte Array und schreibst danach die Zufallszahlen rein Zitieren
Jabber Geschrieben 23. Juni 2002 Autor Geschrieben 23. Juni 2002 OK, das stimmt ! Aber wenn ich die Arrays so initialisiere: .. .... ...... int i; int Zzahl[15]; int N = 15; Zzahl=rand()%100; randomize(); printf("15 Zufallszahlen zwischen 0 und 100\n\n"); bubble(Zzahl,N); for(i=0; i<N; i++) { printf("%d\n", Zzahl); } getch(); return 0; } jetzt sortiert er zwar, aber zum Teil sogar siebenstellige Zahlen!? BOOOOOR! :( Jetzt müsste er doch normal die Felder bis 100 initialiseren und sortieren!? Hm, oder auch nicht! :confused: Zitieren
nic_power Geschrieben 23. Juni 2002 Geschrieben 23. Juni 2002 Warum? Du initialiserst nur "Zzahl=rand()%100;" (und das auch noch mit einem nichtinitialisierten "i"). Nic Zitieren
Klotzkopp Geschrieben 23. Juni 2002 Geschrieben 23. Juni 2002 Du solltest schon die ganze for-Schleife vor den Bubble-Aufruf setzen. Zitieren
Jabber Geschrieben 23. Juni 2002 Autor Geschrieben 23. Juni 2002 OK ! Ich pack das heute noch ! :D In der zwischen Zeit gibt er mir Zahlen bis 100 aus, sortiert diese auch. NUR gibt er mir viele Zahlen doppelt aus! Jetzt hab ich versucht das mit einer if Abfrage zu unterdrücken. geht aber nicht! BOOOOOOOOOOOOOOR ! Ich finde es ja schön das ihr mir helft, aber könnte mir jemand vielleicht einen direkten Tipp in Form von Quellcode geben? Auch wenn das gegen deine Regel spricht, Klotzkopp. Manchmal lernt man(n) nämlich an einem Beispiel am besten. Also, so weit bin ich : #include <stdlib.h> #include <stdio.h> #include <conio.h> void bubble(int array[], int elemente) { int i,j,temp; while(elemente--) for(i = 1; i <= elemente; i++) if(array[i-1]>array) { temp=array; array=array[i-1]; array[i-1]=temp; } } int main(void) { randomize(); int i,j,ok; int Zzahl[15]; int N = 15; printf("15 Zufallszahlen zwischen 0 und 100\n\n"); for(i=0; i<N; i++) { Zzahl=rand()%100; if (i > 0) /* Ueberpruefung auf Dubletten */ { do { ok= 1; /* Annahme, dass alles ok ist */ for (j= 0; j < i; j++) /* bisherigen Werte durchsuchen */ { if (Zzahl == Zzahl [j]) /* es gibt eine Dublette */ { ok= 0; /* also nicht ok */ Zzahl =rand()%100; /* neue Zufallszahl verwenden */ } } } while (!ok); /* solange testen bis ok */ } bubble(Zzahl,N); printf("%d\n", Zzahl); } getch(); return 0; } Ich werd euch dann auch nicht mehr auf die Nerven gehen! Versprochen! Zitieren
Orffi Geschrieben 23. Juni 2002 Geschrieben 23. Juni 2002 Du hast ja nur Klotzkopp um Quelltext gebeten, also brauch ich keinen zu posten . Nein, im Ernst von mir bekommst Du zwar keinen Quelltext aber einen Tip: Wenn Du die Zahlen von 1-100 als Zufallszahlen hast, dann lege Dir einfach ein zweites Array an, in dem Du vermerkst, ob die Zahl schon "gezogen" wurde. Du initilaisierst dieses Hilfsarray mit 0 (for (i = 1; i < 101;i++) help = 0; ) Du verschenkst zwar das Feld 0, aber das ist ja auch egal; heute verschleudere ich mal Speicherplatz . Wenn Du jetzt eine Zahl zufall gezogen hast, dann schaust Du in help[zufall] nach, ob es größer 0 ist. Wenn nicht, ist die Zahl noch nicht gezogen worden und Du kannst sie nehmen. (Nicht vergessen, danach help[zufall] = 1 odersonst irgendeinen Wert größer 0 setzen.) Schwuppdiwupp hast Du Deine Abfrage. Du brauchst zwar mehr Speicherplatz, dabei aber auch einen Geschwindigkeitsvorteil... HTH Jan Zitieren
Klotzkopp Geschrieben 23. Juni 2002 Geschrieben 23. Juni 2002 Vorweg: Es gibt keine "Regel", dass hier kein Quellcode gepostet werden darf. Ich mag nur keine Fragen, die offensichtlich zum Ziel haben, dass fertige Lösungen geliefert werden, weil der Fragesteller gar kein Interesse daran hat, die Sache wirklich zu verstehen. Aber Du gibst Dir ja nun redlich Mühe Zur Sache: Deine Routine, doppelte Zahlen zu finden, ist richtig. Der Fehler liegt darin, dass Du nach jeder neuen Zufallszahl, die Du im Array ablegst, die Sortierfunktion aufrufst, und die (sortierte) Zahl ausgibst. Das kann nicht funktionieren. Du erwartest doch nicht wirklich, dass dir das Programm, nachdem es die erste Zufallszahl erzeugt hat, schon weiß, welche die kleinste wird Du must zuerst das Array füllen, dann EINMAL die Sortierfunktion aufrufen, und dann das sortierte Array ausgeben. Dafür wirst Du wohl oder übel zwei getrennte Schleifen brauchen. 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.