Zum Inhalt springen

Felder mit "rand" versehen !


Jabber

Empfohlene Beiträge

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!:D

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

....? 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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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);

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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! :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

: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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Wochen später...

Da bin ich wieder! :D

Hab mal versucht das ganze zu sortieren, klappt aber leider nicht! :rolleyes:

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;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

OK, das stimmt ! :P 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:

Link zu diesem Kommentar
Auf anderen Seiten teilen

OK ! Ich pack das heute noch ! :D :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. :D

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! :rolleyes::)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

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...