Problem Zahl nur einmalig vergeben.

  • geschlossen
  • C

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem Zahl nur einmalig vergeben.

    Also ich wollte in C ein Programm programmieren welches die Werte von 0-15 zufaellig in einem Array speichert. Jedoch soll jeder Wert nur einmal vorkommen. Ich hab versucht ueber "for-Schleifen" die Werte zu vergleichen, und zu ersetzen, aber trotzdem kamen doppelte Zahlen heraus. Und dann hab ich die "for-Schleifen" wieder gelöscht.

    Bei diesem Quellcode wird erstmals ein Zufallswert gespeichert.

    Quellcode

    1. const int x=15;
    2. int zahl[x];
    3. int i=0;
    4. for(i=0;i<x;i++)
    5. {
    6. zahl[i]=(rand()%15);
    7. printf("%i \n",zahl[i]);
    8. }

    Kann mir einer helfen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Broken Sword () aus folgendem Grund: Code-Tag eingefügt =&gt; Regeln lesen!

  • C-Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int has_int(int* arr, int size, int x) {
    4. int i;
    5. for (i=0;i<size;i++) {
    6. if (arr[i] == x) return 1;
    7. }
    8. return 0;
    9. }
    10. int main() {
    11. srand((unsigned)time(NULL));
    12. const x = 15;
    13. int zahl[x];
    14. int i,rnd;
    15. for (i=0;i<x;i++) {
    16. while (has_int(zahl,x,rnd=rand()%15));
    17. zahl[i] = rnd;
    18. printf("%i\n",zahl[i]);
    19. }
    20. return 0;
    21. }
    Alles anzeigen
    Wo ist der Discord Server
  • Im worst case rennt das Programm ja endlos :D

    Mein Vorschlag: Einfach ein Array mit geordneten Zahlen nehmen und dann einfach das Array durchgehen und den Wert mit einem Zufälligen aus dem Array tauschen.

    Gruß
    Broken Sword
    Auf dem Abstellgleis sah man ihn liegen,
    Auf dem Abstellgleis zwischen Schwelle und Gestein,
    Auf dem Abstellgleis im strömenden Regen,
    Auf dem Abstellgleis allein.
  • Broken Sword schrieb:

    Im worst case rennt das Programm ja endlos :D

    Theoretisch schon, aber bei ner halbwegs funktionierenden Zufallsfunktion wuerd ich mal sagen brauch man im praktischen worst case nicht mehr als sagen wir mal 50 (geraten) Versuche um ne Zahl zu treffen.

    Aber hast Recht, elegant ist anders. :D
    Deine Loesung gefaellt mir.

    Hier mal eine Implementierung:

    C-Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. void swap(int* arr, int x, int y) {
    4. int tmp = arr[x];
    5. arr[x] = arr[y];
    6. arr[y] = tmp;
    7. }
    8. int main() {
    9. srand((unsigned)time(NULL));
    10. const x = 15;
    11. int zahl[x];
    12. int i;
    13. for (i=0;i<x;i++) {
    14. zahl[i] = i;
    15. }
    16. for (i=0;i<x;i++) {
    17. swap(zahl,i,rand()%15);
    18. }
    19. //Ausgabe
    20. for (i=0;i<x;i++) {
    21. printf("%i\n",zahl[i]);
    22. }
    23. return 0;
    24. }
    Alles anzeigen
    Wo ist der Discord Server

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Skyte ()