Bonsoir, j'ai un problème dans la compréhension de mon code, je débute en c. Mon exercice est que je dois créer trois tableau de taille 50 maximum et gérer le 2ème et 3ème tableau afin qu'il n'y ai pas de doublons et de compter l'effectif dans le dernier.
J'ai un problème au niveau du tableau pour gérer l'effectif, l'incrémentation et aussi la variable j pour que le 3ème tableau n'affiche pas toutes les valeurs du 1er tableau qui sont inutiles. C'est assez flou malgré que j'ai tester sur papier avec un tableau je ne trouve pas comment faire pour que si t[i] différent de t[i+1] alors on crée une case dans effectif qu'on initialise à 1.
Merci
int
main ()
{
int nb, i, t[TAILLE];
int t1[TAILLE];
int effectif[TAILLE];
int j = 0;
effectif[0] = j;
printf ("Rentrez le nombre d'C)lC)ments (nb <= 50): ");
scanf ("%d", &nb);
while (nb > 50 || nb < 0)
{
printf ("erreur nb C)lement");
}
printf ("Rentrez le chiffre n 1 : ");
scanf ("%d", &t[0]);
for (i = 1; i < nb; i++)
{
do
{
printf ("Rentrez le chiffre n %d : ", i + 1);
scanf ("%d", &t[i]);
}
while (t[i] < t[i - 1]);
}
t1[0] = t[0];
printf (" %d ", t1[0]);
for (i = 1; i < nb; i++)
{
if (t[i] != t[i - 1])
{
t1[i] = t[i];
effectif[++j] = 1 ;
printf (" %d ", t1[i]);
j++;
}
else
{
effectif[j]++;
}
}
printf ("\n");
for (i = 0; i < j; i++)
{
printf (" %d", effectif[i]);
}
printf ("\n");
return 0;
}
C'est mon binôme de TP c'est pour ça étant donné qu'il est parti en vacances je dois rendre cette exercice pour nous 2 vu qu'on a pas trouvé la solution !
Ok je dois gérer cette erreur comme ça, c'est mieux non ?
if (nb > 50 || nb < 0) printf ("erreur nb element");break;
Ok je dois gérer cette erreur comme ça, c'est mieux non ?
if (nb > 50 || nb < 0) printf ("erreur nb element");break;
Tu veux mettre ça dans la boucle while ? Si oui, c'est pas génial !
Tu peux garder ta boucle while, mais il faut redemander la saisie du nombre à l’intérieur s'il n'est pas dans la plage .
Je te pose la même question qu'a ton collègue : avez vous droit aux fonctions, ça éclaircirait beaucoup le code !
Edit : La suite :
Tu es déjà au troisième tableau alors que le deuxième n'est pas rempli correctement : Au lieu d'afficher les valeurs en même temps que le remplissage du tableau, affiches les une fois le tableau rempli (tu peux faire une fonction pour cela) et tu aura des surprises sur son contenu !
Nous n'avons pas vu les fonctions pour l'instant hélas :/
Vous verrez plûtot ça du coup ?
while (nb >= 50 || nb < 0) {
printf ("Rentrez le nombre d'éléments (nb <= 50):");
scanf ("%d", &nb);
}
En cours, notre professeur voulait qu'on gère les deux tableaux dans une seule boucle c'est pour cela que tout ce retrouve dans la dernière boucle.
Et oui j'ai un problème avec le tableau effectif car il y a des valeurs au hasard qui sont affichés car j'ai mal fait ma boucle j'essaye de comprendre comment mais je vois pas
while (nb >= 50 || nb < 0) {
printf ("Rentrez le nombre d'éléments (nb <= 50):");
scanf ("%d", &nb);
}
Oui !
AbdelZakar a écrit:
En cours, notre professeur voulait qu'on gère les deux tableaux dans une seule boucle c'est pour cela que tout ce retrouve dans la dernière boucle.
Ça rend le code moins lisible, mais c'est faisable !
Donc pour le tableau effectif, si j'ai bien compris la question et que je suis l’énoncé de ton collègue (qui est plus précis que le tien).
j'initialiserais le tableau à 0, puis j'incrémenterais la case d'indice n-1, n étant le nombre traité. (par exemple si le nombre est 7, j'incrémente la case d'indice 6.
Pour ton deuxième tableau, tu devrais quand même essayer de l'afficher une fois le traitement terminé !
"j'initialiserais le tableau à 0, puis j'incrémenterais la case d'indice n-1, n étant le nombre traité. (par exemple si le nombre est 7, j'incrémente la case d'indice 6."
Cela peut marcher à la condition que les nombres entrés soient entre 1 et 50.
Cela peut marcher à la condition que les nombres entrés soient entre 1 et 50.
C'est que je suis l’énoncé de l'exercice un peu plus précis sur le sujet de son collègue, voir plus haut.
rouloude a écrit:
Donc pour le tableau effectif, si j'ai bien compris la question et que je suis l’énoncé de ton collègue (qui est plus précis que le tien).
raygambino1 a écrit:
Bonjour, je dois écrire un programme qui permette de saisir nb valeurs choisi par l'utilisateur avec 0<N<=50dans un
ordre croissant, autorisant les répétitions puis les stocker dans un 1er tableau, créer un 2ème tableau en éliminant les doublons puis un dernier qui compte l'effectif de chaque valeur dans le 1er tableau.
Oui, mon observation était plus pour nos deux amis qui mettent au point leur code.
Il faudrait qu'ils s'assurent que la saisie ne prend en compte que des nombres entre 1 et 50 (incluant ces nombres), et pas de nombres en dehors de ces bornes, sinon on va se retrouver avec de jolis débordements de mémoire ou des comportements inattendus lorsqu'on voudra les utiliser comme indices.
Actuellement le code ne vérifie pas cela (et ne demande pas non plus à l'utilisateur de respecter cette contrainte). Il ne vérifie que le nombre d'éléments.
- Edité par Dlks 19 octobre 2020 à 19:40:04
Gérer un tableau sans connaître la taille
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent