Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1440 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Tableau :/

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tableau :/

n°2170328
aminasmile
Posté le 09-01-2013 à 01:35:49  profilanswer
 

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

mood
Publicité
Posté le 09-01-2013 à 01:35:49  profilanswer
 

n°2170350
Farian
Posté le 09-01-2013 à 09:54:09  profilanswer
 

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

n°2170390
aminasmile
Posté le 09-01-2013 à 11:03:06  profilanswer
 

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

n°2170406
gilou
Modérateur
Modzilla
Posté le 09-01-2013 à 12:23:09  profilanswer
 

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é!  --
n°2170407
aminasmile
Posté le 09-01-2013 à 12:24:31  profilanswer
 

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

n°2170409
aminasmile
Posté le 09-01-2013 à 12:28:39  profilanswer
 

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. !!  
 

n°2170416
breizhbugs
Posté le 09-01-2013 à 13:05:16  profilanswer
 

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...
n°2170417
aminasmile
Posté le 09-01-2013 à 13:09:37  profilanswer
 

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

n°2170418
gilou
Modérateur
Modzilla
Posté le 09-01-2013 à 13:11:38  profilanswer
 

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é!  --
n°2170421
aminasmile
Posté le 09-01-2013 à 13:17:08  profilanswer
 

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 !?

mood
Publicité
Posté le 09-01-2013 à 13:17:08  profilanswer
 

n°2170426
aminasmile
Posté le 09-01-2013 à 13:25:08  profilanswer
 

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 ????  

n°2170433
Profil sup​primé
Posté le 09-01-2013 à 13:57:09  answer
 

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
n°2170438
gilou
Modérateur
Modzilla
Posté le 09-01-2013 à 14:06:38  profilanswer
 

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é!  --
n°2170456
aminasmile
Posté le 09-01-2013 à 15:08:09  profilanswer
 

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

n°2170511
Profil sup​primé
Posté le 09-01-2013 à 20:30:07  answer
 

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é!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Tableau :/

 

Sujets relatifs
Comment initialiser un tableau 2 dimensions de manière dynamique ?Opérations sur les valeurs d'un tableau
un algo qui supp le min et le max d'1 tableau à la fois SVP[c][Transfer de donnees d´un tableau bidimensionel vers unidimensione]
[c][Lire et ecrire dans un tableau de caracteres en dimension 2]Un tableau est-il un objet ?
Tri tableau 2 dimensionsArchitecture Client - Serveur : Tableau Collaboratif
Retourner facilement la cle d'un tableau 
Plus de sujets relatifs à : Tableau :/


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR