Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1754 connectés 

  FORUM HardWare.fr
  Programmation
  C

  petit programme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

petit programme

n°1710616
damien7258
Posté le 31-03-2008 à 19:59:40  profilanswer
 

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

mood
Publicité
Posté le 31-03-2008 à 19:59:40  profilanswer
 

n°1710619
Joel F
Real men use unique_ptr
Posté le 31-03-2008 à 20:09:28  profilanswer
 

et la question est ?

n°1710631
damien7258
Posté le 31-03-2008 à 20:42:14  profilanswer
 

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.

n°1710634
Elmoricq
Modérateur
Posté le 31-03-2008 à 20:48:14  profilanswer
 

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.

n°1710639
damien7258
Posté le 31-03-2008 à 20:55:28  profilanswer
 

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.

n°1710644
Elmoricq
Modérateur
Posté le 31-03-2008 à 21:02:45  profilanswer
 

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

n°1710648
moi23372
Posté le 31-03-2008 à 21:09:21  profilanswer
 

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
n°1710654
damien7258
Posté le 31-03-2008 à 21:25:10  profilanswer
 

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.

n°1710655
Elmoricq
Modérateur
Posté le 31-03-2008 à 21:29:01  profilanswer
 

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

n°1710662
damien7258
Posté le 31-03-2008 à 21:34:05  profilanswer
 

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.

mood
Publicité
Posté le 31-03-2008 à 21:34:05  profilanswer
 

n°1710673
Elmoricq
Modérateur
Posté le 31-03-2008 à 21:47:07  profilanswer
 

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
n°1710688
damien7258
Posté le 31-03-2008 à 21:59:37  profilanswer
 

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 ?

n°1710695
damien7258
Posté le 31-03-2008 à 22:09:37  profilanswer
 

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

n°1710720
damien7258
Posté le 31-03-2008 à 22:37:57  profilanswer
 

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

n°1710743
damien7258
Posté le 31-03-2008 à 22:57:24  profilanswer
 

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

n°1710751
damien7258
Posté le 31-03-2008 à 23:19:01  profilanswer
 


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

n°1710774
ptitchep
Posté le 01-04-2008 à 03:36:19  profilanswer
 

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
n°1711639
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-04-2008 à 14:57:48  profilanswer
 

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/
n°1711723
Trap D
Posté le 02-04-2008 à 17:34:38  profilanswer
 

Fatigué Emmanuel ?

n°1711727
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-04-2008 à 17:38:06  profilanswer
 

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/
n°1711729
Trap D
Posté le 02-04-2008 à 17:42:12  profilanswer
 

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.

n°1711736
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-04-2008 à 17:49:30  profilanswer
 

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/
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  petit programme

 

Sujets relatifs
Petit programmePetit programme simple pour débutant VBA
petit programme en java = gros souci de programmationPetit programme en VBA... besoin d´aide
Besoin d'aide pour un petit programme de rien... :)[C] petit programme qui fonctionne pas.....
petit programme pour TPECompiler ce petit programme
Créer un petit programme pr archivage msnpetit programme de classement automatique suivant donnée
Plus de sujets relatifs à : petit programme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR