- Probleme de programme en C
- Programme demarrage windows 10 - Guide
- Programme démarrage windows 10 - Guide
- Fichier ouvert dans un autre programme - Guide
- Le programme à télécharger ci-dessous contient des erreurs et n'est pas complet. corrigez-le et exécutez-le. quel mot de dix lettres est obtenu ? ✓ - Forum Python
- Desinstaller un programme - Guide
2 réponses
3 janv. 2023 à 21:43
Bonjour,
Il y a plusieurs problèmes dans ton code et c'est pour ça que tu n'arrives pas à générer 5 nombres sans doublons.
Premièrement tu initialise ton tableau "t" avec les valeurs de 0 à 9 à chaque itération de la boucle "for". En gros à chaque fois que tu lances une nouvelle partie tu remplies à nouveau le tableau "t" avec les valeurs initiales et donc rend impossible l'obtention de nombre différents à chaque itération.
Deuxièmement, tu utilises la même boucle "for" pour initialiser le tableau "t" et mélanger ses éléments. Ce qui veut dire que la boucle "for" qui mélange les éléments du tableau "t" est éxécutée 10 fois, ce qui fait que chaque élément du tableau sera mélangé 10 fois à 100% et donc impossible d'avoir des nombres différents à chaque itération.
Pour te donner des pistes, tu peux déclarer ton tableau "t" en dehors de la boucle principale pour éviter qu'il soit réinitialisé à chaque itération, utiliser une boucle "for" différente pour mélanger les éléments de ton tableau et qui devrait être exécutée 5 fois pour les 5 nombres sans doublons et pour finir d'afficher uniquement les 5 premiers éléments de ton tableau qui sont les nombres sans doublons.
Tiens moi au courant
Ce problème a été posté ailleurs. :)
C'est correct d'initialiser le tableau à chaque tour de boucle, mais il faut mélanger dans une autre boucle.
Et on affiche dans une troisième boucle ...
Pourquoi rand() % 10 + i; ?
Le + i est non seulement inutile, mais nuisible.
L'utilisation du switch est ici une très mauvaise idée.
Une fois qu'on a mélangé les chiffres, si on fait deviner à l'utilisateur (sujet de l'autre site), il faut avoir une boucle à l'intérieur de l'autre pour que le joueur essaie de deviner les chiffres.
Voici comment je le vois (vois est un grand mot ... je suis aveugle et j'utilise une synthèse vocale)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N_NUMBERS 5
int main(void) {
int tab[10];
srand(time(NULL));
int quitter = 0;
do {
printf("Menu ...\n");
for(int i = 0; i < 10; i++) tab[i] = i;
for(int i = 0; i < N_NUMBERS; i++) {
int j = rand() % 10;
int temp = tab[i];
tab[i] = tab[j];
tab[j] = temp;
}
for(int i = 0; i < N_NUMBERS; i++) printf("%d ", tab[i]);
printf("\n");
int fini = 0;
do {
// Jusqu'à ce que ça soit fini ...
fini = 1; // Je décide que c'est fini ...
} while(!fini);
printf("Voulez-vous quitter? (0 = non, 1 = oui) ");
scanf("%d", &quitter);
} while(!quitter);
return 0;
}
3 janv. 2023 à 21:52
peux-tu me montrer le rendu en code s'il te plaît ? Je vois un peu ce que tu veux dire mais pour moi, le tableau a été initialisé dans la boucle for pour chaque i de 0 à 9. Donc j'avoue que je ne comprends pas trop quelle modification je dois apporter... Je te remercie pour ton aide, j'essaie de répondre au plus vite.
3 janv. 2023 à 22:06
Ca ressemblerait à ça pour moi
3 janv. 2023 à 22:47
ola tout ne s'est pas mis je crois, on ne voit pas tout
3 janv. 2023 à 23:14