Tableau :/

Tableau :/ - C - Programmation

Marsh Posté le 09-01-2013 à 01:35:49    

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

Reply

Marsh Posté le 09-01-2013 à 01:35:49   

Reply

Marsh Posté le 09-01-2013 à 09:54:09    

Et c'est à rendre pour demain, ou cet après-midi, j'imagine ?

Reply

Marsh Posté le 09-01-2013 à 11:03:06    

j'ai un examen  demain svp .... :)  

Reply

Marsh Posté le 09-01-2013 à 12:23:09    

Ben explique nous l'algorithme que tu envisages d'utiliser et on t'aidera à écrire le code.
Parce que pour un problème aussi simple, si tu n'es pas capable de trouver par toi même une méthode pour résoudre ce problème, je ne vois pas ce qu'on pourra faire pour toi.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 09-01-2013 à 12:24:31    

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 :)

Reply

Marsh Posté le 09-01-2013 à 12:28:39    

merci gilou t a raison mais j'ai l'idée : que pour chaque case du tableau 1 on va parcours le tableau 2, si on trouve commun , il faut le supprimer pour ne plus être testée dans les itérations suivantes. !!  
 

Reply

Marsh Posté le 09-01-2013 à 13:05:16    

dans la mesure où tu sais que les nombres vont de 0 à 9, tu peux faire un tableau supplémentaire int tester[10], initialiser à 0 et tu mets tester[i]=1 si tu trouves le chiffre i dans un tableau t1 et que tu as testé sa présence dans t2.
De cette façon si tu retrouve i dans t1, tu n'as pas besoin de reparcourir t2 car tu aura déjà testé sa présence.


Message édité par breizhbugs le 09-01-2013 à 13:05:55

---------------
Seul Google le sait...
Reply

Marsh Posté le 09-01-2013 à 13:09:37    

 
i=0 ;  
while(i<n){  
j=0;  
while(j<b&&T1[i]!=T2[j]){  
j++;}  
T2[j]=-1  
i++;
printf("%d est commun au deux tableau",T[i]);
}  
return  0;  
}  
je pense que ça est juste :) merci pour votre réponse ^_^  
 
 
 
                                                         Amina :)  

Reply

Marsh Posté le 09-01-2013 à 13:11:38    

Bon, en remettant ça au propre, je suppose que c'est ce que tu voulais poster:

Code :
  1. #include<stdio.h> 
  2. int main() 
  3. {
  4.     int T1[50], T2[60], i, j, n, b, aux ; 
  5.     do
  6.         printf("saisir n" ); 
  7.         scanf(%d, &n); 
  8.     } while (n < 1 || n > 50);
  9.     do
  10.         printf("saisir n" ); 
  11.         scanf(%d, &b); 
  12.     } while (b < 1 || b > 50); 
  13.    
  14.     for (i = 0, i < n, i++) { 
  15.         do
  16.             printf("saisir T1[%d]", i); 
  17.             printf("%d", T1[i]); 
  18.         } while (T1[i] < 0 || T1[i] > 9); 
  19.     } 
  20.    
  21.     for (j = 0, j < b, j++) { 
  22.         do
  23.             printf("saisir T2[%d]",j); 
  24.             printf("%d",T2[j]); 
  25.         } while (T2[j] < 0 || T2[j] >9 ); 
  26.     } 
  27.     i = 0; 
  28.     while (i < n) { 
  29.         j = 0; 
  30.         while ( j < b && T1[i] != T2[j]) { 
  31.             j++;
  32.         } 
  33.         aux = T2[j] 
  34.         i++;
  35.     } 
  36. }


Ça va pas marcher, puisque tu as confondu les , avec les ; dans les for(...) et aux = T2[j]  n'a pas de ; en fin de ligne.
Aérer le code avec des espaces, ça le rend bien plus lisible.
Utiliser de préférence ++j que j++ quand il n'y a pas de différence, et ne réserver l'emploi de j++ qu'aux cas ou ça a un sens spécial de l'utiliser.
J'ai pas non plus vu les accolades de main(), mais je les ai rajoutées.
 
C'est pas une mauvaise idée, de faire comme tu as fait, mais c'est compliqué, et donc pas efficace: Si le premier tableau est de taille n et le second tableau de taille m, tu vas parcourir n fois le second tableau, au total tu auras été lire n * m cases. Si tes tableaux sont grands, ça peur être long (qques micro-secondes :))
Comme tu sais que tu n'as que 10 chiffre, ce que tu peux faire, c'est créer un tableau 'des chiffres' de 10 cases, et mettre une indication selon que le chiffre est dans le premier ou le second tableau, ou les deux.
- tu met le tableau de chiffres à 0
- tu parcours le premier tableau, pour chaque chiffre que tu trouves, tu met la case du 'tableau de chiffres' correspondante à 1.
Maintenant, le 'tableau de chiffres' a des cases a 1 pour les chiffres qui sont dans le 1er tableau et a 0 pour ceux qui n'y sont pas
- tu parcours le second tableau, pour chaque chiffre que tu trouves, tu ajoutes 2 à la case du 'tableau de chiffres' correspondante si sa valeur est 0 ou 1.
Maintenant, le 'tableau de chiffres' a des cases a:
 - 3 pour les chiffres qui sont dans les deux tableaux
 - 2 pour les chiffres qui ne sont que dans le 2e tableau
 - 1 pour les chiffres qui ne sont que dans le 1e tableaux
 - 0 pour les chiffres qui ne sont dans aucun
Tu parcours le tableau de chiffres, et si la valeur est 3 tu imprimes le chiffre
 
A+,


Message édité par gilou le 09-01-2013 à 14:02:40

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 09-01-2013 à 13:17:08    

on nous demande d'afficher des couples des nombres commun donc de ce cas je  pense que le truc d'un nouveau n'est pas valable !?

Reply

Marsh Posté le 09-01-2013 à 13:17:08   

Reply

Marsh Posté le 09-01-2013 à 13:25:08    

et pour mon résonnement j'ai corrigé le truc "aux" par ce que "aux" va pas supprimer la valeur .. donc il faut le donner une valeur différente des éléments du tableau par exemple -1 ou un nombre >9 :) ...... MERCIIIII BCPPP gilou c'est très gentille de ta part d'avoir consacré un peut de temps pour l'exo merci :) .....  
une question svp est ce que "printf" peut arrêté le programme qu'on il sera dans la boucle ou bien arrête t il  le programme le programme à l'extérieur d'une boucle .... est ce qu'il ne peut pas arrette un programme ... n'a pas la même utilisation que return pour les fonction ????  

Reply

Marsh Posté le 09-01-2013 à 13:57:09    

Bonjour, vue les contrainte je ferait comme ça :(mais obivious).
0) je lis la longueur du tableau Longueur_1
1) j'initialise le tableau Tableau_Initial[Longueur]
3) je lis la longueur du tableau Longueur_2
4) pour I allant de 0 à Longueur - 1,
      Je saisie l'élément I du tableau
       pour J allant de 0 à Longueur 1
           si l'élément = Tableau_Initial[j]
                affichge_du_couple
                /* Efacement de l'élément */
                si j < Longueur
                    pour k allant de j+1 à Longueur_1
                        Tableau_Initial(k-1)  <- Tableau_Initial(k);
                     Longueur_1 <- Longueur_1 - 1;
                 break;


Message édité par Profil supprimé le 09-01-2013 à 19:29:57
Reply

Marsh Posté le 09-01-2013 à 14:06:38    

Citation :

est ce que "printf" peut arrêté le programme

Uniquement s'il plante :D
printf, il fait ce qu'on lui demande: afficher du texte formaté, puis il a fini.
S'il y a plus de code a exécuter ensuite, ton programme s’arrête naturellement.
Comme main a pour prototype int main(), il vaut mieux faire un return 0 pour être plus correct.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 09-01-2013 à 15:08:09    

Nickel ^_^ ..... merci bcp de votre explication :)

Reply

Marsh Posté le 09-01-2013 à 20:30:07    

Je l'ai implémenté.....  :o  
 
 

Code :
  1. #include<stdio.h>  
  2. int main()  {
  3.  
  4.  
  5.  
  6.  /* Saisie du nombre d'éléments */
  7.  
  8.  int Length_1;
  9.  
  10.  do{  
  11.    printf("How many element ? :" );
  12.    scanf("%d", &Length_1);  
  13.  }
  14.  while(Length_1<1||Length_1>50);
  15.  
  16.  
  17.  /* Initilaisation du Tableau_1 */
  18.  
  19.  int Tableau_1[Length_1], Tableau_1_Index;
  20.  
  21.  for (Tableau_1_Index=0;Tableau_1_Index<Length_1;Tableau_1_Index++) {
  22.  
  23.    /* Lire l'élément Tableau_1{Tableau_1_Index] */
  24.    printf("Enter integer number : %d ", Tableau_1_Index);  
  25.    scanf("%d", &Tableau_1[Tableau_1_Index]);
  26.  }
  27.  
  28.  /* Saisie du nombre d'élément */  
  29.  
  30.  int Length_2;
  31.  
  32.  do{  
  33.    printf("How many element ? :" );
  34.    scanf("%d", &Length_2);  
  35.  }
  36.  while(Length_2<1||Length_2>50);
  37.  
  38.  
  39.  int Tableau_2_Index, Element, Tableau_3[Length_1], Tableau_3_Index = 0;
  40.  
  41.  for (Tableau_2_Index=0;Tableau_2_Index<Length_2;Tableau_2_Index++) {
  42.    
  43.    
  44.    /* Lire l'élément Element */
  45.    printf("Enter integer number : %d ", Tableau_2_Index);  
  46.    scanf("%d",&Element);
  47.    
  48.    for (Tableau_1_Index=0;Tableau_1_Index<Length_1;Tableau_1_Index++) {
  49.      if (Tableau_1[Tableau_1_Index] == Element) {
  50.  
  51.        /* Ajouter l'élément au Tableau */
  52.        Tableau_3[Tableau_3_Index] = Element;
  53.        Tableau_3_Index++;
  54.  
  55.        /* Effacer l'élément */
  56.        int I;
  57.        for (I=Tableau_1_Index+1; I<Length_1;I++) {
  58.          Tableau_1[I-1] = Tableau_1[I];
  59.        }
  60.        break;
  61.      }
  62.    }
  63.    
  64.  }
  65.  
  66.  
  67.  /* Affichage des couples. */
  68.  int I;
  69.  for (I=0;I<Tableau_3_Index;I++) {
  70.    printf("(%d, %d) ; ", Tableau_3[I], Tableau_3[I]);
  71.  }
  72.  printf("/n" );
  73. }


Message édité par Profil supprimé le 09-01-2013 à 21:08:28
n°2170527
gilou
Modérateur
Modzilla
Posté le 10-01-2013 à 00:39:06  profilanswer
 

En C++11 c'est plus drôle:
 

Code :
  1. #include <algorithm>
  2. #include <cctype>
  3. #include <functional>
  4. #include <iostream>
  5. #include <iterator>
  6. #include <string>
  7. #include <vector>
  8. #include <array>
  9. #include <iostream>
  10. #include <sstream>
  11. using namespace std;
  12. // lit un a un tous les caractères de la ligne saisie à la console et range dans un vecteur uniquement ceux qui sont des chiffres.
  13. bool lire_valeurs(vector<char>& t, string step)
  14. {
  15.     string line;
  16.     cout << "Veuillez saisir les chiffres du " << step << " tableau" << endl;
  17.     if (getline(cin, line)) {
  18.         istringstream iss(line);
  19.         remove_copy_if(istream_iterator<char>(iss), istream_iterator<char>(), back_inserter(t), not1(ptr_fun<int, int> (isdigit)));
  20.     } else {
  21.         cerr << "Erreur a la lecture des valeurs du " << step << " tableau" << endl;
  22.         return false;
  23.     }
  24.     return true;
  25. }
  26. int main()
  27. {
  28.     vector<char> t1, t2;
  29.     array<int, 10> digits = {0};
  30.     vector<char>::iterator it;
  31.     if (lire_valeurs(t1, "premier" )) {
  32.         if (lire_valeurs(t2, "second" )) {
  33.             for (it = t1.begin(); it != t1.end(); ++it) {
  34.                 digits.at(*it - '0') = min(digits.at(*it - '0')+1, 1);
  35.             }
  36.             for (it = t2.begin(); it != t2.end(); ++it) {
  37.                 if (digits.at(*it - '0') < 2) {
  38.                     digits.at(*it - '0') = min(digits.at(*it - '0')+2, 3);
  39.                 }
  40.             }
  41.             cout << "Chiffres communs aux deux tableaux: ";
  42.             for (int i = 0; i != 10; ++i) {
  43.                 if (digits.at(i) == 3) {
  44.                     cout << i << " ";
  45.                 }
  46.             }
  47.             cout << endl;
  48.         }
  49.         return 0;
  50.     }
  51.     return -1;
  52. }


A+,


Message édité par gilou le 10-01-2013 à 01:19:58

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed

© 2018 Forum. All Rights Reserved.