begin process at 2012 02 11 12:43:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

je m'arrache les cheveu avec mes tableau


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

je m'arrache les cheveu avec mes tableau

mardi 23 novembre 2004 à 20:33:47 | je m'arrache les cheveu avec mes tableau

slyiut

bonjour
je dois faire un exo qui est la fusion de 2 tableau triés dans un troisieme tableau.
Je sais qu'il y a sur le net plein de solution mais ce que j'aimerai c'est savoir pourquoi mon code ne marche pas alors qu'il semble bien tourner "a la main". J'ai une boucle inifini lors de l'execution machine a l'action fusion
merci de m'aider

voici le code

#include <iostream.h>


const int TAILLEMAX = 1000;
typedef struct STtab{
int taille;
int tab[TAILLEMAX];
};

void init(STtab &t1,STtab &t2)
{


t1.tab[0]=4;
t1.tab[1]=5;
t1.tab[2]=6;
t1.tab[3]=9;
t1.tab[4]=12;
t1.tab[5]=14;
t1.tab[6]=15;

t2.tab[0]=0;
t2.tab[1]=1;
t2.tab[2]=2;
t2.tab[3]=3;
t2.tab[4]=7;
t2.tab[5]=8;
t2.tab[6]=10;
t2.tab[7]=11;
t2.tab[8]=13;
}

void affichage(STtab t)
{
int i;
for(i=0;i<t.taille;i++)
cout<<"case "<<i<<" : "<<t.tab[i]<<endl;

cout<<endl;

}
void fusion(STtab t1,STtab t2,STtab &t3)
{
int i=1,k=0,j=0;
int tab,temp;




if(t1.tab[0]<t2.tab[0])
{
tab = 1;
k = 1;
t3.tab[0] = t1.tab[0];
temp = t2.tab[0];
}
else {
tab = 2;
j = 1;
t3.tab[0] = t2.tab[0];
temp = t1.tab[0];
}

while(i<t3.taille-1)
{
switch(tab){
case 1 :
while((k<t1.taille)&&(t1.tab[k]<temp))
{
t3.tab[i] = t1.tab[k];
i++;
k++;
}

tab = 2;
temp = t1.tab[k];



break;
case 2 :
while((j<t2.taille)&&(t2.tab[j]<temp))
{
t3.tab[i] = t2.tab[j];
j++;
i++;
}
tab = 1;
temp = t2.tab[j];


break;
default : cout<<"pas possible"<<endl;
}
}
}
int main()
{
STtab t1,t2,t3;

t1.taille = 7;
t2.taille = 9;
t3.taille = t1.taille + t2.taille;


init(t1,t2);
affichage(t1);
affichage(t2);

cout<<t3.taille<<endl;
fusion(t1,t2,t3);
affichage(t3);
}
mardi 23 novembre 2004 à 22:48:55 | Re : je m'arrache les cheveu avec mes tableau

6co

à première vue, il semblerait que tu n'incrémentes pas i aussi souvent qu'il le faut...

à ajouter dans ton code :

...while(i<t3.taille)
{

if (t1.tab[k]>temp || t2.tab[j]>temp)
i++;

switch(tab){
case 1 :...



ça devrait fonctionner (à peu près)

6co
mercredi 24 novembre 2004 à 17:40:07 | Re : je m'arrache les cheveu avec mes tableau

Bebert37

regarde un peu du coté de la declaration de fusion et de ton appel ..
void fusion(STtab t1,STtab t2,STtab &t3)
et tu fait
fusion(t1,t2,t3)
alors que ton t3 n'est pas le même
enfin j'ai juste vite vu
essai plutot avec :
fusion(t1,t2,&t3)



Ce sont les tonneaux vides et les hommes pleins qui font le plus de bruit

jeudi 25 novembre 2004 à 12:27:23 | Re : je m'arrache les cheveu avec mes tableau

djl

non, fusion(t1,t2,t3) est correcte

STtab &t3, t3 est une reference sur un objet STtab
jeudi 25 novembre 2004 à 18:39:40 | Re : je m'arrache les cheveu avec mes tableau

minet03

Réponse acceptée !
je n'ai compris toutes les phases du code, seulement je crois comprendre que tu insères les nombres dans le troisième tableau en les comparant. Ce ne serai pas plus simple de fusionner directement tes tableaux avec un truc du genre :

void Fusion(STtab t1, STtab t2, STtab t3)
{
    for(i=0;i<t1;i++)
        t3.tab[i] = t1.tab[i];
    for(i=t1.taille+1;i<t2;i++)
        t3.tab[i] = t1.tab[i];
}

Et ensuite faire un petit algorythme de trie qui va trier le tableau 3 :

void Tri(STtab t3)
{
    int Tmp = 0;
    for(int i=0;i<t3.taille;i++)
    {
        for(int j=0;j<(t3.taille-1);j++)
        {
        if(t3.tab[j]>=t3.tab[j+1])
        {
            Tmp = t3.tab[j];
            t3.tab[j] = t3.tab[j+1];
            t3.tab[j+1] = Tmp;
        }
    }
}

pour moi c'est beaucoup plus clair et comprehensible.
jeudi 25 novembre 2004 à 19:19:43 | Re : je m'arrache les cheveu avec mes tableau

djl

oui c 'est plus claire, mais ca ne tire pas profit du langage, c'est vraiment l'algo détaillé (c'est peut etre le but de l'exercice)


par exemple Fusion se resume à 2 memcpy, en c++ avec la stl le tout se fait en quelquel lignes...
jeudi 25 novembre 2004 à 19:20:01 | Re : je m'arrache les cheveu avec mes tableau

slyiut

ouai bien sur c'est plus simple
mais c'est plus couteu en operation ...
jeudi 25 novembre 2004 à 19:28:55 | Re : je m'arrache les cheveu avec mes tableau

minet03

je ne vois pas pourquoi ce serai plus couteu en opération, il est très court, bien qu'il y ait des boucles.
jeudi 25 novembre 2004 à 19:37:25 | Re : je m'arrache les cheveu avec mes tableau

djl

le code de minet03 est largement plus claire, c'est le plus important (sinon tu seras chauve avant d'avoir fais un prog de + de 500 lignes)

l'optimisation ca vient apres, en tirant profits du langage

en c++

void Fusion ==> std::copy
void Tri ==> std::sort

en c

void Fusion ==> memcpy
void Tri ==> qsort


et surtout en c++ pensez à déclaré vaut variable uniquement quand vous en avez besoin, de maniere à pouvoir l'initialiser de suite
jeudi 25 novembre 2004 à 19:54:50 | Re : je m'arrache les cheveu avec mes tableau

minet03

Je suis content que mon morceau de code soit aprécié. Ce n'est pas souvent dans le quotidien d'un débutant comme moi. Mais comme on dit, y a un début à tout ! Merci

1 2

Cette discussion est classée dans : taille, t1, t2, tab, t3


Répondre à ce message

Sujets en rapport avec ce message

strncat [ par Darkvlador ] lu !j'ai un problème concernant strncat voilà mon codechar *t1 = "hello";char *t2 = "12mo";char *t3;strncpy(t3, t1, 2);aprèsstrncat(t3, t2, 2);et la q Concatener 2 tableuax triés [ par Strick9 ] Salut à tous, je bloque sur l'énoncé suivant.De l'aide serait plus que bienvenue.Ecrire une fonction qui permet d'insérer un tableau d'entier T2 dans creation automatique d'une matrice [ par nissan1 ] Bonjour a tous, Je travail sur mon sujet de stage et je suis bloquer depuis quelques jours car j'ai fait un programme qui contient une fonction qui p c++ [ par noussa44 ] Bonjour, j'ai un code avec c++ mais il a des erreurs svp si quel qu'un peut m'aider et corriger ce code qui permet de calculer la distance entre des p c++ [ par noussa44 ] Salut tout le monde, j'ai besoin svp de vore aide sur un exercice que j'ai fait mais j'ai des erreurs, pour cela je me suis fait recours sur votre a convertir du cpp en VB.net ou VB [ par Taur33 ] bonsoir à tous, j'aurais besoin de convertir le code suivant en vb je précise que j'ai déjà essayé des logiciels qui soit disant le faisait mais cela aide c++ [ par jekburn ] #include #include typedef struct{   int heure;   int minute;   int seconde;}TEMPS; TEMPS diff(TEMPS t1,TEMPS t2){   TEMPS t3; &n IOSTREAM [ par hell ] Bonjour à vous tous je vous remercie de m'aiderIl arrive souvent avec iostream que je ne suis pa capable de voir mon programme il y a toujour cette e Besoin d'aide-Interface Graphique [ par nissan1 ] Bonjour, s'il vous plait je suis debutant en programmation et j'ai fait un programme en C sous l'IDE codeblocks, qui utilise les elements d'une matri Problème de définition de fonction dans une classe [ par labuche75 ] Bonjour à tous, je rencontre un problème à priori de définition de fonction dans la classe tableau permettant de manipuler de grands entiers nécessair


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,576 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales