Tableau :/

Fermé
AMI - 9 janv. 2013 à 01:30
AMI93 Messages postés 6 Date d'inscription mercredi 9 janvier 2013 Statut Membre Dernière intervention 9 janvier 2013 - 9 janv. 2013 à 16:35
Bonjour,

svp j'ai besoin d'aide ... je suis vraiment bloqué ; je n'arrive pas à trouver la solution de cette exo :/
Ecrire un programme qui permet d'afficher des couples des nombres commun entre deux tableau d'entier de valeur allant de 0 à 9.
Par exemple: *Tableau 1 :0/2/9/7/2/7
*Tableau 2 : 9/2/3/0/1/2
Affichage: 0,9,2,2 sont commun au deux tableau .
merci d'avance

4 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
9 janv. 2013 à 08:28
Tu as la solution "brutasse" : pour chaque case du tableau 1 tu parcours le tableau 2, si tu as le même nombre tu l'imprimes/le stockes.
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
9 janv. 2013 à 10:21
Tu dois avoir un moyen de ne pas dupliquer les tests.

Puisque les valeurs de tes deux tableaux sont, a priori, restreintes de 0 à 9, tu peux, dès lors que tu as trouvé une paire, la neutraliser en stockant à la place une valeur en dehors de ces limites (par exemple -1), qui indiquera une position ayant déjà donné un résultat et ne devant plus être testée dans les itérations suivantes.


Dal
0
AMI93 Messages postés 6 Date d'inscription mercredi 9 janvier 2013 Statut Membre Dernière intervention 9 janvier 2013
Modifié par AMI93 le 9/01/2013 à 11:50
mercii bcp
j'ai fait ça :
#include<stdio.h>
int main()
int T1[50],T2[60],i,j,n,b,aux ;
do{
printf(saisir n);
scanf(%d,&n);
}while(n<1||n>50);
do{
printf(saisir b);
scanf(%d,&b);
}while(b<1||b>50);
for(i=0,i<n,i++){
do{
printf(saisir T1[%d],i);
printf(%d,T1[i]);
}while(T1[i]<0||T1[i]>9);
}
for(j=0,j<b,j++){
do{
printf(saisir T2[%d],j);
printf(%d,T2[j]);
}while(T2[j]<0||T2[j]>9);
}

i=0 ;
while(i<n){
j=0;
while(j<b&&T1[i]!=T2[j]){
j++;}
aux=T2[j]
i++;}
.....
svp si c'est juste comment afficher à la fin que par exemple 0 est un nombre commun au deux tableaux..... Merci d'avoir pris la peine de lire et de répondre :)
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 9/01/2013 à 14:27
Si tu passes ton code à un compilateur, il va tout de suite se plaindre d'erreurs de syntaxe.

Tu as oublié les accolades de main (qui devrait être "int main(void)" et se terminer par "return 0;"). Tu as oublié un ";" à la fin de "aux=T2[j]" dans ta boucle while finale.

Tu as oublié les guillemets dans le premier argument de printf et de scanf. Revois leur syntaxe.

Du fais des do / while pour saisir les valeurs, mais tu ne les affectes pas aux tableaux T1 et T2, et à leurs différents indices. Tu ne vérifies pas que la saisie est un chiffre compris entre 0 et 9, etc.

Cela dit, tu te compliques la vie : l'exercice ne t'impose pas de demander la saisie au clavier lors de l'exécution, d'afficher les tableaux, et encore moins de saisir 110 chiffres avant de pouvoir tester ton programme (sauf bien sûr si c'est dans ton énoncé et que tu ne l'as pas dit).

Alors, pour faire simple, déclare les tableaux et leur contenu en ligne, et tant qu'à faire, avec les valeurs d'exemple :

 int T1[] = { 0, 2, 9, 7, 2, 7 }; 
 int T2[] = { 9, 2, 3, 0, 1, 2 };

Concentre toi sur ce qu'il y a à partir de "i=0 ;" dans ton code.

Rappelle toi aussi que la boucle "while (j < Nb_Elem_T2 && T1[i] != T2[j])" peut s'arrêter pour deux raisons, et que l'un des cas n'est pas un cas où "T2[j]" et "T1[i]" sont égaux. A la sortie de cette boucle, tu dois savoir dans quel cas tu est sortit avant de faire quoi que ce soit.


Dal
0
AMI93 Messages postés 6 Date d'inscription mercredi 9 janvier 2013 Statut Membre Dernière intervention 9 janvier 2013
9 janv. 2013 à 15:11
merci ^^
0
AMI93 Messages postés 6 Date d'inscription mercredi 9 janvier 2013 Statut Membre Dernière intervention 9 janvier 2013
9 janv. 2013 à 15:24
Dans l'énoncé il n' y a pas un exemple c' est en général:" Ecrire un programme qui permet d'afficher des couples des nombres commun entre deux tableau d'entier de valeur allant de 0 à 9".
0
AMI93 Messages postés 6 Date d'inscription mercredi 9 janvier 2013 Statut Membre Dernière intervention 9 janvier 2013
Modifié par AMI93 le 9/01/2013 à 16:06
#include<stdio.h>
int main()
{
int T1[50], T2[60], i, j, n, b;
do {
printf("saisir n" );
scanf("%d", &n);
} while (n < 1 || n > 50);
do {
printf("saisir n" );
scanf("%d", &b);
} while (b < 1 || b > 50);

for (i = 0, i < n, i++) {
do {
printf("saisir T1[%d]", i);
scanf("%d", T1[i]);
} while (T1[i] < 0 || T1[i] > 9);
}

for (j = 0, j < b, j++) {
do {
printf("saisir T2[%d]",j);
scanf("%d",T2[j]);
} while (T2[j] < 0 || T2[j] >9 );
}
i = 0;
while (i < n) {
j = 0;
while ( j < b && T1[i] != T2[j]) {
j++;
}
if (T1[i]==T2[j]) { T2[j ]=-1;
printf("%d est commun au deux tableau",T1[i]);
}
i++;

}
return 0;
}
''Rappelle toi aussi que la boucle "while (j < Nb_Elem_T2 && T1[i] != T2[j])" peut s'arrêter pour deux raisons, et que l'un des cas n'est pas un cas où "T2[j]" et "T1[i]" sont égaux. A la sortie de cette boucle, tu dois savoir dans quel cas tu est sortit avant de faire quoi que ce soit. "
==> oui c'est vrai donc il faut que j ajoute if ????
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 9/01/2013 à 16:13
Oui, mais dans ton if tu dois aussi tester que tu n'excèdes pas l'index du tableau, car le C ne le fait pas pour toi.

Les séparateurs de for sont des ";" pas des ",". Compile ton programme avant de poster (et exécute le aussi pour voir s'il fait ce que tu attends de lui).

Pareil pour l'erreur de syntaxe "printf("%d est commun au deux tableau")" : il manque le ";" à la fin de la ligne. Par ailleurs tu n'indiques pas en 2ème argument ce que tu veux afficher (par exemple.. T1[i] ?).

Enfin, ton code n'affecte toujours rien à T1 et T2. Tu te contentes de demander la saisie de "n" et "b" (en plus avec des messages trompeurs), qui selon ma compréhension, sont le nombre d'éléments de chaque tableau (si c'est bien cela, tes messages sont loin d'être clairs). Tes boucles "for", ne font qu'afficher des choses (printf), sans rien demander (scanf).

Au lieu de tout ce micmac, tu peux faire quelque chose comme cela :

 int T1[] = { 0, 2, 9, 7, 2, 7 };       
 int T2[] = { 9, 2, 3, 0, 1, 2 };       

 int n = sizeof(T1) / sizeof(int);       
 int b = sizeof(T2) / sizeof(int);

Et tu as deux tableaux tous prêts, avec leurs dimensions, à tester sur le code qu'on te demande de faire (et tu peux tester et retester sans avoir à tout retaper, créer des jeux de tests pour tester différents cas, etc.).


Dal

P.S. : Quand tu postes, utilise les balises "code" de l'éditeur du site sur ton code (bouton à droite du bouton de soulignement), cela facilite la lecture de ton code
0
AMI93 Messages postés 6 Date d'inscription mercredi 9 janvier 2013 Statut Membre Dernière intervention 9 janvier 2013
9 janv. 2013 à 16:12
donc
....................
i = 0;
while (i < n) {
j = 0;
while ( j < b && T1[i] != T2[j]) {
j++;
}
if (T1[i]==T2[j]&&j<b) { T2[j ]=-1;
printf("%d est commun au deux tableau",T1[i]);
}
i++;
}
return 0;
}
merciii bcp d'avoir lire et répondre ^_^ c'est vraiment gentil :)
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
9 janv. 2013 à 16:17
Oui, tu peux ajouter aussi un "\n" à la fin de ton printf, sinon cela va s'afficher sur une seule ligne et cela ne sera pas joli.


Dal
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
9 janv. 2013 à 16:19
Tu pourrais aussi prendre en compte le cas où aucun élément n'est commun, en comptant s'il y a au moins une concordance, et en affichant un message approprié s'il n'y en a aucune.


Dal
0
AMI93 Messages postés 6 Date d'inscription mercredi 9 janvier 2013 Statut Membre Dernière intervention 9 janvier 2013
9 janv. 2013 à 16:35
Nickel ... ^_^ merciii bcp Dal :)
0