Fusion de deux tableaux(Noob Inside)

Fusion de deux tableaux(Noob Inside) - C++ - Programmation

Marsh Posté le 14-01-2007 à 20:39:06    

Bonjour, j'essaye de resoudre un exercice qui me demande de fusioner deux tableaux T1 & T2 contenant des nombres croissants dans T3 de nombre croissant aussi
 
J'ai commencé comme ça  

Code :
  1. #include <iostream>
  2. using namespace std;
  3. int main (int argc, char *argv[])
  4. {
  5.   const int N=4,M=5,O=9;
  6.   int T1[M]={1,3,5,7,9};
  7.   int T2[N]={2,4,6,8};
  8.   int T3[O]={0};
  9.   int i=0,j=0;
  10.   for(int x=0;x<O;x++){
  11.   if(T2[i]<T1[j]){
  12.        T3[x]=T2[i];
  13.        i++;
  14.        }
  15.     else{
  16.      T3[x]=T1[j];
  17.      j++;}
  18.     }
  19.  
  20. for(int x=0;x<O;x++){
  21. cout << T3[x] <<endl;}
  22.   system("PAUSE" );
  23.   return 0;
  24. }


 
L'ennui c'est que je ne vois pas comme faire pour que, lorsque un tableau est vide (Ici T2), il ne se préoccupe plus de les comparer mais va simplement prendre le reste de l'autre(T1) pour le mettre dans le 3ème(T3)... Et je m'acharne depuis tantot avec des IF dans tout les sens mais ça veut pas marcher ;(


Message édité par XamamaX le 15-01-2007 à 07:23:29
Reply

Marsh Posté le 14-01-2007 à 20:39:06   

Reply

Marsh Posté le 14-01-2007 à 20:57:25    

il est où le C++ à part cout ?
les vecteur en C++, c'est std::vector, et std::algorithm doit te permettre de faire ton truc en 2 lignes.
 
Sinon direction forum C.
 
L'algorithme à l'air ok sauf que bon T3 à une taille constant de 1 élément, ce qui n'arrange rien.
Remplace tes T1[N] par des vector :o


Message édité par Joel F le 14-01-2007 à 20:58:26
Reply

Marsh Posté le 14-01-2007 à 21:41:48    

J'ai transferé dans le forum C alors ^^
J'insiste sur le Noob Inside du titre... je connais pas trop les différences C/C++, j'ai juste eu un petit aperçu de programmation dans un cours d'info donc voila , ça se resume à cin cout while if for ...

Reply

Marsh Posté le 14-01-2007 à 22:23:54    

XamamaX a écrit :

J'ai transferé dans le forum C alors ^^
J'insiste sur le Noob Inside du titre... je connais pas trop les différences C/C++, j'ai juste eu un petit aperçu de programmation dans un cours d'info donc voila , ça se resume à cin cout while if for ...


Tu as été mal redirigé, ton programme n'est pas du C.
 
Tu cherches à écrire en C ou en C++ ? Ce sont 2 langages différents, 2 compilateurs différents et il faut faire un choix (de langage, puis de forum).


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 15-01-2007 à 07:21:21    

Bon, je suis en train de faire du ping pong entre les deux forums ...
Home sweet home C++...

Reply

Marsh Posté le 15-01-2007 à 10:53:27    

Commence par verifier si tu n'es pas arrive en fin de tableau *avant* de tester les valeurs des cases.  
 
A chaque iteration :  
si T1 est fini et T2 n'est pas fini
   prendre une case de T2
sinon si T2 est fini et T1 n'est pas fini
   prendre une case de T1
sinon si T1 est fini et T2 est fini
   exit la boucle
sinon  
   prendre une case de T1 et de T2 et puis les comparer  
fin si
 
Voila est-ce que c'est clair ?

Reply

Marsh Posté le 15-01-2007 à 12:28:10    

Ace17 a écrit :

Commence par verifier si tu n'es pas arrive en fin de tableau *avant* de tester les valeurs des cases.  
 
A chaque iteration :  
si T1 est fini et T2 n'est pas fini
   prendre une case de T2
sinon si T2 est fini et T1 n'est pas fini
   prendre une case de T1
sinon si T1 est fini et T2 est fini
   exit la boucle
sinon  
   prendre une case de T1 et de T2 et puis les comparer  
fin si
 
Voila est-ce que c'est clair ?


 
Littéralement ça donne :  
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. int main (int argc, char *argv[])
  4. {
  5.   const int N=4,M=5,O=9;
  6.   int T1[M]={1,3,5,7,9};
  7.   int T2[N]={2,4,6,8};
  8.   int T3[O]={0};
  9.   int i=0,j=0;
  10.   bool boucle=true;
  11.   for(int x=0;boucle==true;x++){ // Pour chaque itération
  12.   if(x>j && x<i){ // Si T1 fini et T2 pas fini
  13.       T3[x]=T2[i]; // On met T2 dans T1
  14.       i++;} 
  15.   else if(x<j && x>i){ // Si T2 fini et T1 pas fini
  16.   T3[x]=T1[j]; // On met T1 dans T3
  17.   j++;}
  18.   else if(x>j && x>i) boucle=false; // Si les deux son fini, stop la boucle
  19.   else if(T2[i]<T1[j]){ //Si aucun n'est fini, on compare
  20.        T3[x]=T2[i];
  21.        i++;
  22.        }
  23.     else{
  24.      T3[x]=T1[j];
  25.      j++;}
  26.     }
  27.  
  28. for(int x=0;x<O;x++){
  29. cout << T3[x] <<endl;} //Mais ça marce paaaaaaaas :(
  30.   system("PAUSE" );
  31.   return 0;
  32. }

Reply

Marsh Posté le 15-01-2007 à 12:36:38    

T'es sur de tes conditions ? "x < i" j'aurais plutot mis "i < N"

Reply

Marsh Posté le 15-01-2007 à 12:51:49    

Ace17 a écrit :

T'es sur de tes conditions ? "x < i" j'aurais plutot mis "i < N"


 
Juste ;)
Merci !

Reply

Marsh Posté le 15-01-2007 à 18:53:38    

Reply

Marsh Posté le 15-01-2007 à 18:53:38   

Reply

Marsh Posté le 15-01-2007 à 18:59:51    


 
Ha bon ?
(J'avoue avoir du chercher la definition de imbitable pour comprendre ce que tu voulais dire  :whistle: )

Reply

Marsh Posté le 15-01-2007 à 19:16:11    

Spoiler :

maintenant, laisse Taz s'expliquer sur son commentaire - je suis assez d'accord - et retransfère le topic en cat C

Reply

Marsh Posté le 15-01-2007 à 19:19:02    

La question est : Dans quelle cat range-t-on le tres mauvais C++ ?

Reply

Marsh Posté le 15-01-2007 à 19:34:55    

ben si tu le range en C, tu tombes sur le répondeur :
"Pas du C, le C++ c'est à côté"

Reply

Marsh Posté le 15-01-2007 à 19:48:12    

Ouais ben faut pas esperer que l'auteur du topic le rebouge dans C alors :D

Reply

Marsh Posté le 15-01-2007 à 19:49:47    

Ce truc compile en C++ et pas en C, c'est donc du C++ c'est tout.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 15-01-2007 à 20:17:57    

++fab a écrit :

ben si tu le range en C, tu tombes sur le répondeur :
"Pas du C, le C++ c'est à côté"


 
Mwai, j'ai fait C++>C>C++ alors j'y suis j'y reste !
 

0x90 a écrit :

Ce truc compile en C++ et pas en C, c'est donc du C++ c'est tout.


 
Pour ma gouverne, en quoi c'est du trés mauvais C++ ? Et pourquoi c'est confondable avec du C ?
Dés que je recherche des trucs C++ pour débutant, je tombe sur les mêmes commandes de "base" (cout/cin/T[N]/for/while/if/else/... ) ...

Reply

Marsh Posté le 15-01-2007 à 20:23:01    

Du tres mauvais C++, c'est, entre autres, du C++  qui pourrait "presque" etre compile par un compilateur C.  
 
Ton code, tu lui remplaces "cout" par "printf" et hop le tour est joue, bienvenue dans la cat C :D
 
En C++, la bonne facon de faire commence par utiliser les types de la STL des que c'est possible. Ici std::vector serait plus approprie que de simples tableaux.

Reply

Marsh Posté le 15-01-2007 à 20:36:34    

Ace17 a écrit :

Du tres mauvais C++, c'est, entre autres, du C++  qui pourrait "presque" etre compile par un compilateur C.  
 
Ton code, tu lui remplaces "cout" par "printf" et hop le tour est joue, bienvenue dans la cat C :D
 
En C++, la bonne facon de faire commence par utiliser les types de la STL des que c'est possible. Ici std::vector serait plus approprie que de simples tableaux.


 
Okay dokay, moi je ne fait qu'appliquer ce qu'on m'a appris dans mon cours, qui est juste un cours super général sur l'info, ce qui passe par un introduction à la programmation, je suppose donc qu'on nous a appris la base de la base et que les trucs STL sont moins... pédagogique... pour donner un aperçu...
Enfin bref ;)
 
EDIT: On m'a pas appri les quotes non plus  :whistle:


Message édité par XamamaX le 15-01-2007 à 20:37:17
Reply

Marsh Posté le 15-01-2007 à 20:53:04    

Faut surtout pas le prendre comme une insulte; personnellement j'ai commence en écrivant du code comme le tien. Mais beaucoup de puristes te diront qu'ils pensent que ca file des mauvaises habitudes.
 
Il n'y a rien de mauvais, a mon avis, a ne pas faire les choses "correctement" des le départ. Le tout est de ne pas s'y cantonner.
 
edit: et au fait, un autre truc qui rend ton code "imbitable", c'est l'absence d'indentation. J'ai du editer ton message, copier-coller ton code, puis le reindenter pour pouvoir le lire. Taz n'a manifestement pas été jusque la, et j'aurais tres bien pu ne pas en faire autant. Ca n'est pas un caprice de ma part, tout le monde ici peut te le confirmer.


Message édité par Ace17 le 15-01-2007 à 20:56:21
Reply

Marsh Posté le 15-01-2007 à 22:32:46    

ton bazar est même pas indenté, la mise en forme est pascohérente. Rien qu'en style, c'est pourri.
 
Après t'as des noms de variables à la noix.
 
T'en es au point où on apprend à faire ses lettres avant même de savoir écrire un mot. Sauf que tu crames les étapes et tu nous a vomis


Message édité par Taz le 15-01-2007 à 22:33:37
Reply

Marsh Posté le 15-01-2007 à 22:35:51    

surtout tu ferais bien d'utiliser std::vector<T>::at pour détecter les erreurs de tableau, parce qu'à priori, y en a.

Reply

Marsh Posté le 16-01-2007 à 00:05:57    

Ace17 a écrit :

Du tres mauvais C++, c'est, entre autres, du C++  qui pourrait "presque" etre compile par un compilateur C.

Si j'extrapole un tout petit peu, du très mauvais C++, c'est du C. Mais quelle sorte de C, du très mauvais ou du très bon ?
Mon avis est que la qualité d'un code C++ est orhogonale à sa ressemblance avec un code C -- sauf si l'on perverti la définition de "qualité".


Message édité par ++fab le 16-01-2007 à 00:06:14
Reply

Marsh Posté le 16-01-2007 à 00:12:46    

et du C qu'on peut pas compiler avec un compilateur C++, c'est quoi [:autobot]


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 16-01-2007 à 00:18:29    

un pied de nez à K&R, et/ou à la communauté C++ que beaucoup font semblant d'ignorer.


Message édité par ++fab le 16-01-2007 à 00:24:08
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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