Partage
  • Partager sur Facebook
  • Partager sur Twitter

fusion de deux tableau en C

2 septembre 2010 à 0:41:47

salut
je veux faire la fusion de deux tableau trié dans un autre tableau trie
j'ai fais un programme en c mais il m'affiche rien je vois pas ou est mon erreur
merci de vouloir m'aider
#include <stdio.h>
#include <stdlib.h>
#define tail 5
#define t 4
#define m tail+t
int main(int argc, char *argv[])
{
  int tab[tail]={0,1,3,5,9};
  int tabl[t]={2,4,6,7};
int c[m];
  int i=0,j=0,k=0;
      
                                           while((i<tail) && (j<t))
                                           {
      
                                         if(tab[i]<tabl[j])
                                         {
                                                           k++;  
                                                           c[k]=tab[i];
                                                           i++;
                                                        
                                                           }
                                                           else
                                                           {
                                                               k++;
                                                               c[k]=tabl[j];
                                                               j++;
                                                               }
                                                               }
                                                               while(i<tail)
                                                               {
                                                                         k++;
                                                                         c[k]=tab[i];
                                                                         }
                                                                         while(j<t)
                                                                         {
                                                                                k++;
                                                                                c[k]=tabl[j];
                                                                                }
                                                                                
                                                               
                                                               
                                                            for(k=0;c<m;k++)
                                                      {
                                                                                 printf("%d\n",c[k]);
                                                                                 }                               
  system("PAUSE");	
  return 0;
}
  • Partager sur Facebook
  • Partager sur Twitter
2 septembre 2010 à 0:53:03

Ton indentation pique les yeux o_O
  • Partager sur Facebook
  • Partager sur Twitter
2 septembre 2010 à 1:21:15

Citation : Arthurus

Ton indentation pique les yeux o_O


+1, je n'arrive pas à lire le code.
  • Partager sur Facebook
  • Partager sur Twitter
2 septembre 2010 à 4:18:28

ta un peut abusé de la tabulation :-°

sinon pour quoi tu fait pas deux bouche FOR ??
  • Partager sur Facebook
  • Partager sur Twitter
2 septembre 2010 à 6:38:15

Ton algorithme est bon, il y a juste quelques petites choses à revoir dans le code.

Si ton programme n'affiche rien c'est parce que tu as une boucle infinie.
Dans les deux dernières boucles, tu oublies d'incrémenter le i et le j, donc tu restes toujours dans l'un des while.

Autre chose, tu donnes à k comme valeur initiale 0, et tu l'incrémentes avant de l'utiliser à chaque fois. La première fois k aura donc la valeur 1, et tu auras une case inutilisée dans ton tableau (la case 0), et un dépassement d'index aussi.

Sinon effectivement ton indentation est foireuse, et les noms de variables que tu choisis n'aident vraiment pas à la compréhension.
  • Partager sur Facebook
  • Partager sur Twitter
2 septembre 2010 à 9:33:32

Par convention, les define sont definis en majuscule de facon a ce qu'on puisse les reperer rapidement dans ton code.
Tu devrais mettre tes ligne de codes un peu plus loin histoire qu'on arrive plus a les retrouver :p Faut pas s'enerver sur la touche espace quand tu indente, reste zen :D .
Non sans rire, je comprends rien a cause de l'indentation, voila un code pas trop mal indente :
#include <stdio.h>
#include <stdlib.h>

#define TAIL 5
#define T 4
#define M (TAIL + T)

int main(int argc, char *argv[])
{
  int tab[TAIL]={0,1,3,5,9};
  int tabl[T]={2,4,6,7};
  int c[M];
  int i=0,j=0;
      
  for (k = 0; (i < TAIL) && (j < T); k++)
    {
      if(tab[i] < tabl[j])
        {   
          c[k]=tab[i];
          i++;
        }
      else
        {
          c[k]=tabl[j];
          j++; 
        }
      }
    for (k = 0; i < TAIL; k++, i++)
      c[k]=tab[i];
    for (k = 0; j < T; k++, j++)
      c[k]=tabl[j]; 
    for (k=0; c < M; k++)
      printf("%d\n",c[k]);                              
  system("PAUSE");	
  return 0;
}


Voila alors comme l'a dit @mob, tu avais une boucle infini que j'ai corrige. Tu increment ton k trop tot aussi.
Du coup j'ai fais des for () pour que ce soit plus court.
  • Partager sur Facebook
  • Partager sur Twitter
3 septembre 2010 à 19:28:44

merci a vous deux et dsl pour ce désordre je vous ai déjà dis que je débute en C
  • Partager sur Facebook
  • Partager sur Twitter
11 juillet 2018 à 23:42:22

Bsr, j'ai vu un code sur ce blog et voulais le modifier pour fusionner deux matrices   d'ordre 4 j'ai tout essayer mais n'affice pas le resultat correctement est ce que quelqu'un peu m'aider s'il vous plait 
voici le code
#include <stdio.h>
main()
{
 /* Déclarations */
 /* Les tableaux et leurs dimensions */
 int A[50][50], B[50][50], FUS[100][100];
 int N, M;
 int IA,JA, IB,JB, IFUS,JFUS; /* indices courants */
 /* Saisie des données */
 printf("Dimension du tableau A (max.50) : ");
 scanf("%d", &N );
 printf("Entrer les éléments de A dans l'ordre croissant :\n");
 for (IA=0; IA<N; IA++)
 for (JA=0; JA<N; JA++)
    {
     printf("Elément A[%d][%d] : ", IA,JA);
     scanf("%d", &A[IA][JA]);
    }
 printf("Dimension du tableau B (max.50) : ");
 scanf("%d", &M );
 printf("Entrer les éléments de B dans l'ordre croissant :\n");
 for (IB=0; IB<M; IB++)
    for (JB=0; JB<M; JB++)
    {
     printf("Elément B[%d]B[%d] : ",IB,JB);
     scanf("%d", &B[IB][JB]);
    }
 /* Affichage des tableaux A et B */
 printf("Tableau A :\n");
 for (IA=0; IA<N; IA++){
 for (JA=0; JA<M; JA++)
     printf("%7d ", A[IA][JA]);
 printf("\n");
  }
 printf("Tableau B :\n");
 for (IB=0; IB<M; IB++){
 for (JB=0; JB<M; JB++)
     printf("%7d ", B[IB][JB]);
 printf("\n");
  }
/* Fusion des éléments de A et B dans FUS */
 /* de façon à ce que FUS soit aussi trié. */
 IA=0; IB=0; IFUS=0;
 JA=0; JB=0; JFUS=0;
 while ((IA<N) && (IB<M))
 if(A[IA][JA]<B[IB][JB])
 {
 FUS[IFUS][JFUS]=A[IA][JA];
 IFUS++;
 IA++;
  JFUS++;
 JA++;
 }
 else
 {
 FUS[IFUS][JFUS]=B[IB][JB];
 IFUS++;
 IB++;
 JFUS++;
 JB++;
 }
 /* Si IA ou IB sont arrivés à la fin de leur tableau, */
 /* alors copier le reste de l'autre tableau. */
 while (IA<N && JA<N)
 {
 FUS[IFUS][JFUS]=A[IA][JA];
 IFUS++;
 IA++;
  JFUS++;
 JA++;
 }
 while (IB<M && JB<M)
 {
 FUS[IFUS][JFUS]=B[IB][JB];
 IFUS++;
 IB++;
 JFUS++;
 JB++;
 }
 /* Edition du résultat */
 printf("Tableau FUS :\n");
 for (IFUS=0; IFUS<N+M; IFUS++) {
    for (JFUS=0; JFUS<N+M; JFUS++)
     printf("%4d ", FUS[IFUS][JFUS]);
 printf("\n"); }
 return 0;
}
voila le resultat:
 Dimension du tableau A (max.50) : 2
Entrer les ΘlΘments de A dans l'ordre croissant :
ElΘment A[0][0] : 3
ElΘment A[0][1] : 4
ElΘment A[1][0] : 5
ElΘment A[1][1] : 8
Dimension du tableau B (max.50) : 2
Entrer les ΘlΘments de B dans l'ordre croissant :
ElΘment B[0]B[0] : 9
ElΘment B[0]B[1] : 8
ElΘment B[1]B[0] : 6
ElΘment B[1]B[1] : 1
Tableau A :
      3       4
      5       8
Tableau B :
      9       8
      6       1
Tableau FUS :
   3    0    0    0
   0    8    0    0
   0    0    9    0
   0    0    0    1
  • Partager sur Facebook
  • Partager sur Twitter
12 juillet 2018 à 2:10:55

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet.

  • Partager sur Facebook
  • Partager sur Twitter