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
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
A voir également:
- Tableau :/
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
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
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.
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
9 janv. 2013 à 10:21
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
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
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
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 :)
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 :)
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié par [Dal] le 9/01/2013 à 14:27
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 :
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
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
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
9 janv. 2013 à 15:11
merci ^^
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
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".
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
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 ????
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 ????
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié par [Dal] le 9/01/2013 à 16:13
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 :
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
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
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
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 :)
....................
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 :)
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
9 janv. 2013 à 16:17
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
Dal
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
9 janv. 2013 à 16:19
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
Dal
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
9 janv. 2013 à 16:35
Nickel ... ^_^ merciii bcp Dal :)