begin process at 2010 02 10 07:38:33
  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 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 Parsage tableau [ par JAYDEN ] Bonjour,Désolé de vous déranger mais dans le cadre d'un projet j'ai besoin a un moment donner de parser une suite de binaire et de les stocker dans un map [ par vecchio56 ] Bonjour, J'ai une map m. J'ajoute une clé de la manière suivante: m[t1] = T2(...); et tout de suite après j'ai besoin de récupérer l'objet que je vi transfer de valeur de tableaux à tableaux [ par cabarrus ] soient 2 tbleaux t1 et t2 déclaré ainsi:float t1[10],t2[10];mon prog doit écrire les instructions permettant de recopier ds t1 tous les éléments posit Diffence de date [ par keerigan ] Bonjour ,Je dois calculer une difference de date. A savoir j'ai une date t1 et une date t2 et je dois dire qu'entre ces 2 date il s'est ecoule x secon Demande d'explication a propos d'un code. [ par Strick9 ] Salut à tous, j'ai obtenu grâce à se merveilleux site ce code sources pour cet énoncés:un programme permettant de donner toute les combinaison suite a Taille TAB CONTROL [ par goutbouyo ] Salut,J'ai crée un TAB CONTROL et j'ai crée une dialog box pour chaque onglet du tab control.Maintenant j'aimerais ajuster la taille du dialog box pou


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

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 : 0,374 sec (3)

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