petit programme

petit programme - C - Programmation

Marsh Posté le 31-03-2008 à 19:59:40    

Bonjours sa fait quelques jours déjà que je suis sur ce programme mais je n'arrive pas à m'en sortir si quelqu'un pouvait m'aider ou me donné la solution merci d'avance.

Voici le programme qu'il faut faire :
écrire une fonction qui à partir de deux tableaux préalablement triés,permet de former un tableau résultat trié contenant les éléments des deux tableaux.
Les trois tableaux (2remplis,un vide)sont passés en paramétre à la fonction.
Cette fonction devra retourner le nombre d'éléments du tableau résulatat.

 
 
 
 
 
voici mon programme
 
 
 
#include<stdio.h>
#include <stdlib.h>
 
 
int main(void)
{
 
 long tableau1[4]={1,12,45,0};
 long tableau2[5]={4,5,16,24,0};
 long tableau_resultat[100];
    int i=0,j=0,k=0,z=0,nb=0;
 
 while (z<6)
 {
 
while (tableau2[i]>tableau1[k] || tableau2[i]=='0')
{
tableau_resultat[j]=tableau1[k];  
 j++;
 k++;
}
while (tableau2[i]<tableau1[k] && tableau2[i] !='0')
{
tableau_resultat[j]=tableau2[i];
j++;
i++;
}
z++;
 }
 
 
 
 for (nb=0; nb != 8;nb++)
 {
 printf("les tableaux valent %ld\n",tableau_resultat[nb]);
 }
 
 
 system("PAUSE" );
 return 0;
}

Reply

Marsh Posté le 31-03-2008 à 19:59:40   

Reply

Marsh Posté le 31-03-2008 à 20:09:28    

et la question est ?

Reply

Marsh Posté le 31-03-2008 à 20:42:14    

Bien j'ai dit le programme qu'il fallait faire car le mien ne fonctionne pas correctement mais je ne voit pas quoi modifier merci d'avance pour vos réponses.

Reply

Marsh Posté le 31-03-2008 à 20:48:14    

Tout d'abord, il t'est demande de creer une fonction qui accepte trois parametres et un code retour, ce qui ne figure pas dans ton bout de code.
 
Ensuite, avant de trier un tableau, il faut penser a le definir et a le remplir.
 
Et, enfin, dernier point : regarde du cote de la fonction qsort() pour trier tes tableaux.

Reply

Marsh Posté le 31-03-2008 à 20:55:28    

non mais ma fonction ne doit renvoyer que 1 paramètre c'est le nombre d'élément du tableau et la je fait un programme pour pas trop me compliqué dans un premier temps de plus mais tableaux sont initialement trié donc il n'y a pas besoin de les retiré encore.
Si quelque pouvait m'aider merci d'avance.

Reply

Marsh Posté le 31-03-2008 à 21:02:45    

Ah. Et donc, qu'est-ce qui ne marche pas dans ton, euh, programme ? [:petrus dei]

Reply

Marsh Posté le 31-03-2008 à 21:09:21    

moi je dis, abandonne l'informatique et aprends plutot le français.  
 
- de un je ne vois aucune fonction dans ton programme
- de deux, je pense vraiment que tu t'es pas foulé pour arriver à faire cela.
 
En gros, tu n'as envie de le faire, et t'aimerais qu'on le fasse à ta place.


Message édité par moi23372 le 31-03-2008 à 21:11:32
Reply

Marsh Posté le 31-03-2008 à 21:25:10    

Sachant que je vient d'attaquer le programme c à des fins personnelle désoler mais pour moi c'est assez dur de faire un programme déjà comme celui-ci désoler pour l'orthographe je ne suis pas français je fait mon maximum veuillez m'excuser.
Je vais essayer de faire ce programme vu que personne ne veut m'aider à trouver la voix , de toutes façon si je n'y arrive pas je vais passer à un autres exercices d'entrainement merci quant même.

Reply

Marsh Posté le 31-03-2008 à 21:29:01    

Pour que l'on puisse t'aider,  il faudrait que tu nous dises, soit ce que tu ne comprends pas, soit ce qui ne fonctionne pas dans ce que tu essaies de faire, pour qu'au moins nous puissions savoir quoi te repondre !
 
Parce qu'effectivement, resoudre ton exercice c'est trivial pour la plupart des intervenants ici, mais ca ne t'aidera pas de te faire le travail a ta place (en plus d'etre interdit par les regles du forum).

Reply

Marsh Posté le 31-03-2008 à 21:34:05    

Bien lorsque j'exécute mon programme il fonctionne mais le souci c'est que le 45 n'est jamais écrire dans mon tableau final ce qui parait logique car le tableau 2 est toujours inférieur au tableau1 mais je ne vois pas comment faire pour remédier à cela.

Reply

Marsh Posté le 31-03-2008 à 21:34:05   

Reply

Marsh Posté le 31-03-2008 à 21:47:07    

Il y a deux choses qui ne vont pas dans ta boucle de recopie :

  • la variable 'z' et le test associe ( "z<6" ) n'a aucune logique propre, en tout cas je ne lui en trouve aucune
  • tu testes si tu arrives a la fin du second tableau, mais jamais pour le premier !


L'algorithme que tu dois utiliser est le suivant :

 


SOIENT les variables i, j et k, INDICES DES TABLEAUX tableau, tableau2 et tableau_resultat
TANT QUE le parcours de tableau et tableau2 n'est pas termine
   SI tableau[i] < tableau2[j] OU fin du tableau2 atteinte
      tableau_resultat[k] = tableau[i]
      i = i + 1
   SINON SI tableau2[j] < tableau[i] OU fin de tableau atteinte
      tableau_resultat[k] = tableau2[j]      
      j = j + 1
   FIN SI

 

  k = k + 1
FIN TANT QUE


Message édité par Elmoricq le 31-03-2008 à 21:47:47
Reply

Marsh Posté le 31-03-2008 à 21:59:37    

Oui bien c'est se que j'ai essayer de faire en disant SI tableau[i] < tableau2[j] OU  tableau2 =0 car je ne voit pas comment traduire fin de tableau en faite.
j'ai fait la fonction comme vous m'avez dit mais il me dise que il faut que j'utilise les tableau ou les pointeurs  
voici mon programme:
#include<stdio.h>
#include <stdlib.h>
 
int tableau(long tableau1[],long tableau2[],long tableau_resultat);
int main(void)
{
 
 long tableau_1[4]={1,12,45,0};
 long tableau_2[5]={4,5,16,24,0};
 long tableau_result[100];
 int nb=0;
     
 
 nb = tableau(tableau_1,tableau_2,tableau_result);
 printf("le nombre d'élément dans le tableau est %d",nb)
 
 
 
 
 system("PAUSE" );
 return 0;
}
int tableau(long tableau1[],long tableau2[],long tableau_resultat)
{
 int i=0,j=0,k=0,z=0,nb=0;
 
  while (z<6)
 {
 
while (tableau2[i]>tableau1[k] || tableau2[i]=='0')
{
tableau_resultat[j]=tableau1[k];  
 j++;
 k++;
}
while (tableau2[i]<tableau1[k] && tableau2[i] !='0')
{
tableau_resultat[j]=tableau2[i];
j++;
i++;
}
z++;
 }
 
 
 for (nb=0; nb != 8;nb++)
 {
 printf("les tableaux valent %ld\n",tableau_resultat[nb]);
 return nb;
 }
 system("PAUSE";
}
Pour faire TANT QUE le parcours de tableau et tableau2 n'est pas termine il faut utiliser les pointeurs non ?

Reply

Marsh Posté le 31-03-2008 à 22:09:37    

excusez moi pour l'appelle de fonction j'ai trouver mon erreur j'ai juste oublié les []

Reply

Marsh Posté le 31-03-2008 à 22:37:57    

Pourquoi ce genre d'égalité ne fonctionne pas  
for (nb=0; tableau_resultat[j] == '0' ;nb++)

Reply

Marsh Posté le 31-03-2008 à 22:57:24    

comment on dit en language c fin de tableau atteinte??

Reply

Marsh Posté le 31-03-2008 à 23:19:01    


#include<stdio.h>
#include <stdlib.h>
 
int tableau(long tableau1[],long tableau2[],long tableau_resultat);
int main(void)
{
 
 long tableau_1[4]={1,12,45,0};
 long tableau_2[5]={4,5,16,24,0};
 long tableau_result[30];
 int nb=0;
     
 
 nb = tableau(tableau_1,tableau_2,tableau_result);
 printf("le nombre d'element dans le tableau est %d\n",nb);
 
 
 
 
 system("PAUSE" );
 return 0;
}
int tableau(long tableau1[],long tableau2[],long tableau_resultat[])
{
 int i=0,j=0,k=0,nb=0;
 
 
 do
 {
 
if (tableau2[i]>tableau1[k] || tableau1[i]==tableau1[4])
{
tableau_resultat[j]=tableau1[k];  
j++;
k++;
}
else if (tableau2[i]<tableau1[k])
{
tableau_resultat[j]=tableau2[i];
j++;
i++;
}
 
 
 }while (tableau_resultat[j] == tableau2[5]);
 
 
 for (nb=0;nb<8 ;nb++)
 {
 printf("les tableaux valent %ld\n",tableau_resultat[nb]);
 
 }
 return nb;
 system("PAUSE" );
}
 
c'est bon à par le nb que j'ai mit un nombre je vois pas comment faire autrement merci a vous tous.

Reply

Marsh Posté le 01-04-2008 à 03:36:19    

Utilise les balises de code stp.

 
damien7258 a écrit :

Pourquoi ce genre d'égalité ne fonctionne pas
for (nb=0; tableau_resultat[j] == '0' ;nb++)


Parceque l'indice c'est nb et que tu utilises j, remplace tableau_resultat[j]  par tableau_resultat[nb].
En plus tu compares tableau_resultat[j]  qui est de type long avec '0' qui est un caractère.
Et puis ta boucle ne parcourera le tableau que si les éléments sont égaux au code ASCII de '0' qui doit être 48...

 
damien7258 a écrit :

comment on dit en language c fin de tableau atteinte??


           C'est quand l'indice devient >= à la taille du tableau. C'est pour ça que définir un tableau comme ça:
           
                    long tableau_1[4]={1,12,45,0};
   
            n'est pas une très bonne solution. le jour ou tu changes la taille du tableau, tu dois changer tous les accès au tableau:

 

   

Code :
  1. long tableau_1[4];
  2. int i;
  3. for ( i=0; i <4 ;i++)
  4.      tableau_1[i]=1;


            si tu changes la taille cela devient:
   

Code :
  1. long tableau_1[3];
  2. int i;
  3. for ( i=0; i <3 ;i++)  //Si tu ne changes pas la boucle, tu risques la segfault
  4.     tableau_1[i]=1;
 

par contre avec
 

Code :
  1. #define TAILLE 4
  2.                 ...
  3. long tableau_1[TAILLE];
  4. int i;
  5. for ( i=0; i <TAILLE ;i++)
  6.     tableau_1[i]=1;


Si tu changes, tu ne modifies que la définition de TAILLE:
 

Code :
  1. #define TAILLE 3
  2.                 ...
  3. long tableau_1[TAILLE];
  4. int i;
  5. for ( i=0; i <TAILLE ;i++) 
  6.     tableau_1[i]=1;
 

mettre 0 dans le dernier élément ne sert que pour les chaines de caractères, c'est un standard mais pour le reste, tu te débrouilles avec la taille que tu dois donc "noter" quelque part.

 

Donc la phrase:
SOIT les variables i, j et k, INDICES DES TABLEAUX tableau, tableau2 et tableau_resultat
TANT QUE le parcours de tableau et tableau2 n'est pas termine
de l'algo d'elmoricq se traduit:
 

Code :
  1. while ( i < TAILLE1 || j < TAILLE2) ) //tant que les deux tailles ne sont pas dépassées
  2. {
  3.     ...
  4.     i++;
  5.     j++;
  6. }
 

edit: c'est dingue le nombre de conneries qu'on écrit à 4h du mat, il doit en rester désolé.


Message édité par ptitchep le 01-04-2008 à 03:55:59

---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 02-04-2008 à 14:57:48    

damien7258 a écrit :


Voici le programme qu'il faut faire :
écrire une fonction qui à partir de deux tableaux préalablement triés,permet de former un tableau résultat trié contenant les éléments des deux tableaux.
Les trois tableaux (2remplis,un vide)sont passés en paramétre à la fonction.
Cette fonction devra retourner le nombre d'éléments du tableau résulatat.


Si j'ai bien compris, tu veux faire ceci :

Code :
  1. #include<stdio.h>
  2. void aff (int *a)
  3. {
  4.    while (*a != 0)
  5.    {
  6.       printf ("%3d", *a);
  7.       a++;
  8.    }
  9.    printf ("\n" );
  10. }
  11. size_t fusion (int *r, int *a, int *b)
  12. {
  13.    size_t n = 0;
  14.  
  15.    /* a faire */
  16.  
  17.    return n;
  18. }
  19. int main (void)
  20. {
  21.    int a[] = { 1, 12, 45, 0 };
  22.    int b[] = { 4, 5, 16, 24, 0 };
  23.    int r[128];
  24.    size_t n;
  25.    aff (a);
  26.    aff (b);
  27.    n = fusion (r, a, b);
  28.    printf ("n = %d\n", n);
  29.    aff (r);
  30.    return 0;
  31. }


C'est un bête problème algorithmique

 

on lit les 2 tableaux et on recopie à chaque fois la plus petite des 2 valeurs lues dans le tableau final... C'est trivial, non ?

Code :
  1. size_t fusion (int *r, int *a, int *b)
  2. {
  3.    size_t n = 0;
  4.    while (*a != 0 && *b != 0)
  5.    {
  6.       if (*a < *b)
  7.       {
  8.          *r = *a;
  9.          a++;
  10.       }
  11.       else
  12.       {
  13.          *r = *b;
  14.          b++;
  15.       }
  16.       r++;
  17.       n++;
  18.    }
  19.    while (*a != 0)
  20.    {
  21.       *r = *a;
  22.       a++;
  23.       r++;
  24.       n++;
  25.    }
  26.    while (*b != 0)
  27.    {
  28.       *r = *b;
  29.       b++;
  30.       r++;
  31.       n++;
  32.    }
  33.    *r = 0;
  34.    return n;
  35. }



  1 12 45
  4  5 16 24
n = 7
  1  4  5 12 16 24 45

 

Press ENTER to continue.


Message édité par Emmanuel Delahaye le 02-04-2008 à 17:56:39

---------------
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 02-04-2008 à 17:34:38    

Fatigué Emmanuel ?

Reply

Marsh Posté le 02-04-2008 à 17:38:06    

Trap D a écrit :

Fatigué Emmanuel ?


Ca marche pas mon truc ?


---------------
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 02-04-2008 à 17:42:12    

Ben non, regarde l'affichage, il manque 45 !
Tu sors de ta boucle tant que dès que tu arrives à la fin d'un des tableau, tu oublies l'autre.

Reply

Marsh Posté le 02-04-2008 à 17:49:30    

Trap D a écrit :

Ben non, regarde l'affichage, il manque 45 !
Tu sors de ta boucle tant que dès que tu arrives à la fin d'un des tableau, tu oublies l'autre.


Okay, ça me paraissait un peu simpliste...

 


Corrigaid, mercy.

 


Message édité par Emmanuel Delahaye le 02-04-2008 à 17:57:05

---------------
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    

Reply

Sujets relatifs:

Leave a Replay

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