Concatener 2 tableuax triés

Strick9 Messages postés 40 Date d'inscription mardi 8 novembre 2005 Statut Membre Dernière intervention 9 mai 2007 - 7 juin 2006 à 15:01
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011 - 17 mars 2011 à 19:32
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 un autre tableau d'entier T1. T1 et T2 contiennent respectivement N1 et N2 éléments.
les deux tableaux sont deja triés par ordre croissant.
Exemple:

T1:       1   4   5   8   9
T2:       2   3   6
donc T1 devient:
T1:       1   2   3   4   5   6   8   9

j ai essayé mais j ai une faute que je n'ai pas pu corrigé (je ne l ai trouvé)
voila mon code:

#include <stdio.h>


void affiche(int t[], int n)
{
 int i;
 printf("\n");


 for(i=0;i<n;i++)
  printf(" - %d ", t[i]);
}




int concat(int t1[], int n, int t2[])


{
int i=0,j=0,k=0;
int t3[20];


  while(i<n&&j<n) 
 {
   
  if((t1[i])<(t2[j]))
  
  {t3[k]=t1[i];
  i++;k++;}
  
  
  else
   
  if((t1[i])==(t2[j]))
  {t3[k]=t1[i];
   i++;k++;
   t3[k]=t2[j];
  j++;}
  
    else
    {t3[k]=t2[j];
    k++;
    j++;}


 }
  
  if(i==n&&j<n)
   for(k=;i
   
  return t3[n+n];
}




void main()
{


int i;
int t1[10], t2[10], t3[20];
int k;




for(i=0;i<5;i++)
{printf("\ndonner element tab 1");
scanf("%d", &t1[i]);}


for(i=0;i<5;i++)
{printf("\ndonner element tab 2:");
scanf("%d", &t2[i]);}


affiche(t1,5);
affiche(t2,5);


t3[20]=concat(t1,5,t2);
affiche(t3,10);
scanf("%d", &k);


}

merci d'avoir lu et bonne journée à tous.

8 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
7 juin 2006 à 17:02
D'abord, dans ta boucle while(), ta condition est : tant que i < n et j < n, mais des que tu atteindras la fin d'un tableau, i (par exemple) sera egal a n, donc tu sortiras, alors qu'il reste des elements dans dans l'autre tableau (je pense que t'as voulu le gerer apres mais le code est pas passé apparemment). Ensuite, pourquoi gerer differemment le cas ou les deux sont egaux ? Normalement, tu n'en as pas besoin, et a mon avis c'est que la que sa plante parce dans ton cas ou les 2 sont egaux, tu n'incrementes pas k la 2eme fois. Enfin, si ton tableau A et B ont une taille de 20 elements, ton tableau C qui contiendra les 2, doit avoir une taille deux fois plus grande (donc 40 dans ton cas).
Ah et c'est quoi ce return tab3[n + n] ?! C'est du C apparemment, ca n'existe donc pas ! Tu ne peux pas renvoyer un tableau declaré en local dans une fonction (car alloué sur la pile..).
Je crois que c'est a peu pres tout ;)

+2(p - n)
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
7 juin 2006 à 21:37
"Ah et c'est quoi ce return tab3[n + n] ?! C'est du C apparemment, ca n'existe donc pas !Tu ne peux pas renvoyer un tableau declaré en local dans une fonction (car alloué sur la pile..)"

je ne suis pas sûr d'avoir suivi là....
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
7 juin 2006 à 21:43
Pour être plus précis,
l'objectif et la méthode de l'OP ne sont pas bonne
mais ta phrase est bizarre.
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
7 juin 2006 à 22:12
Oui effectivement, j'avais pas compris ce qu'il voulait faire, je pensais qu'il voulait renvoyer le tableau, alors que ce n'est qu'un seul element..Autant pour moi ! Et puis c'est encore pire alors, si n = 20, n+n = 40 (whaa, trop fort), et ton tableau a une taille de 20 elements, donc tu vois ce qui va se passer...
Desolé pour la fin de mon 1er message, j'ai merdé.

+2(p - n)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
7 juin 2006 à 22:48
Pour concatener,
comme ton code ne compile même pas... pas facile de t'aider.

Pour faire le ... (y'a pas d'affichage pour faire court)

void concat( int t1[], int t2[], int* t3 )
{
    while( *t1 && *t2 ) {
        *t3++ = *( *t1 > *t2 ? t2 : t1 )++;
    }

    while( *t1 ) *t3++ = *t1++;
    while( *t2 ) *t3++ = *t2++;
}

int main() {
    int t1[] = { 1,4,5,8,9, 0 };
    int t2[] = { 2,3,6, 0 };
    int t3[40] = { 0 };

    concat( t1, t2, t3 );
}
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
7 juin 2006 à 22:54
Et que se passe t'il si au milieu du tableau t1 ou t2 il y a un zero ?

+2(p - n)
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
7 juin 2006 à 23:13
Ca fait parti des conditions à connaitre  (faut lire le man ) pas de zéro dans le tableau.

C'est trivial de passer la taille du tableau et de l'utiliser mais je ne veux pas faire tout le travail.
0
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011
17 mars 2011 à 19:32
Salut à tous,
Je bloque sur le code suivant:
#include
#include <math.h>
int main()
{
int t3[50];
int t1[5];
int t2[5];
t1[0]=2;
t1[1]=3;
t1[2]=5;
t1[3]=7;
t1[4]=4;
t2[0]=5;
t2[1]=8;
t2[2]=6;
t2[3]=7;
t2[4]=8;
for (int i=0;i<5;i++){
std::cout << t1[i] << std::endl;}
for (int j=0;j<5;j++){
std::cout << t2[j] << std::endl;}
int k=0;
int l
do
for (int i=0;i<5;i++)
for (int j=0;j<5;j++)
t3[l]=sprt((sqr(t1[i]-t1[k]))+(sqr(t2[j]-t2[k]));
while (k<5);
return 0;
}
Merci d'avance
0
Rejoignez-nous