tableau et structure

tableau et structure - C - Programmation

Marsh Posté le 02-02-2007 à 22:54:24    

Bonjour et merci d'avance pour votre aide précieuse.
je debute a peine le semestre 2 de L1..
essayer de faire un truc pas trop compliqué
Ne vous inquietez pas si c'est si long c'est juste quelques points qui me pose probleme dans ces exos.
 
Dans le premier exo, je sais comment faire pour determiner le plus petit et le plus grand salaire.
 
L’objectif de cet exercice est de vous faire manipuler un tableau de structure. Pour cela on
utilisera un tableau personnel de 30 personnes, pour décrire le personnel d’une entreprise.
Constante N = 30
Type salarie = Structure
nom : Chaîne
salaire : Réel
FinStructure
variable personnel : Tableau[1..N] de salarie
Le programme que vous devez réaliser en langage C devra, à partir du tableau personnel,
afficher :
a) les noms de tous les salariés qui ont un salaire strictement supérieur au SMIC (qui est de
12541,31 €)
b) le salaire moyen
c) le nom du salariés ou des salariés ayant le salaire minimal et les noms de celui ou ceux
ayant le salaire maximal.
Réaliser un programme qui réponde à ce cahier des charges en adoptant une approche modulaire :
décomposer le problème en sous problèmes (procédure ou fonction), test unitaire, test
d’intégration, séparation en plusieurs fichiers, etc.

Message cité 1 fois
Message édité par nuleninfo20 le 03-02-2007 à 13:02:51
Reply

Marsh Posté le 02-02-2007 à 22:54:24   

Reply

Marsh Posté le 02-02-2007 à 23:28:49    

nuleninfo20 a écrit :

Il est evident que si une ame charitable se devoue pour me faire les deux exos je ne peux que plussoyer.


 
 http://www.wildpixels.com/bunchies/Images/bunchies_clear1.gif

Reply

Marsh Posté le 02-02-2007 à 23:33:23    

je sais que j'en demande beaucoup mais la je sature çà fait trois jours que je galere sanns avancer d'un poil donc bon çà va vous prendre quoi une demi-heure à tout casser si vous etes bons et grace a vous j'aurais une bonne note et vous aurez toute ma sympathie
 
#include <stdio.h>
#include <stdlib.h>
 
 
void SaisirHisto (int t[5]) ;
 
int main()
{
 
int tableau[5];
SaisirHisto(tableau);
 
system("pause" );
return 0;
}
 
 
 
/* procédure */
void SaisirHisto (int t[5])
{
float n ;
 
do {
printf("veuiller entrer des mesures reellles positives comprises entre 0,0 et 10,0 et pour terminer la saisie entrer un nombre negatif\n",n);
scanf("%g", &n);
}while (10.0>n>0.0);
 
if (n<0) {
 
int i;
 
for (i=0;i<5;i++) {
printf("]%d,%d]:",2*i,2*(i+1));
}
 
 
}}
 
 
 
donc la je comprend pas pourquoi quand je met un nbre negatif çà s'arete pas
et quand je teste avec while ben çà bug si je met un nbre a virgule

Message cité 1 fois
Message édité par nuleninfo20 le 02-02-2007 à 23:39:10
Reply

Marsh Posté le 02-02-2007 à 23:55:24    

Avec du code, c'est mieux; 10.0>n>0.0 ne marchera jamais en C. (edit: dans le sens où tu l'as mis)
Le résultat de x>n (ou x<n) est un booléen, donc lorsque tu compares un booléen avec l'autre valeur, tu as en général des surprises.

 

Rappelles toi tes cours sur les if ;)


Message édité par IrmatDen le 02-02-2007 à 23:55:58
Reply

Marsh Posté le 03-02-2007 à 13:03:24    

c'est bon j'ai fini l'exo 1 me reste plus que le 3

Reply

Marsh Posté le 03-02-2007 à 13:19:13    

nuleninfo20 a écrit :

c'est bon j'ai fini l'exo 1 me reste plus que le 3


Salaires minimums et maximums ?
Tu balayes tes 30 employés. Dès que t'as un salaire inférieur au plus petit déjà mémorisé

  • tu remplaces le plus petit déjà mémorisé par ce nouvel inférieur
  • tu mémorises ta position dans le tableau

Idem pour le salaire supérieur
 
En fin de boucle, tu affiches le nom correspondant à la position mémorisée pour le plus petit. Idem pour le plus grand. Ou bien, en imaginant qu'il pourrait y avoir plusieurs noms correspondants, tu oublies l'histoire de mémoriser la position mais tu refais une boucle de traitement et dès que tu trouves un salaire correspondant au plus petit tu affiches le nom correspondant. Idem pour le plus grand.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 03-02-2007 à 13:46:36    

Sinon faut que j'utilise quoi pour avoir les 30 personnes  au debut

Reply

Marsh Posté le 03-02-2007 à 14:28:39    

nuleninfo20 a écrit :

Sinon faut que j'utilise quoi pour avoir les 30 personnes  au debut


L’objectif de cet exercice est de vous faire manipuler un tableau de structure. Pour cela on utilisera un tableau personnel de 30 personnes, pour décrire le personnel d’une entreprise.  
Constante N = 30  
Type salarie = Structure  
nom : Chaîne  
salaire : Réel  
FinStructure
 

nuleninfo20 a écrit :

...bon çà va vous prendre quoi une demi-heure à tout casser si vous etes bons...


En fait, c'est faisable en un peu plus de 15 minutes parce qu'il faut aussi penser à mettre des commentaires mais le but de cet exo n'est pas qu'on te prouve qu'on est bon, le but de cet exo est que toi tu apprennes à devenir bon comme nous...


Message édité par Sve@r le 03-02-2007 à 15:43:34

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 03-02-2007 à 14:49:08    

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define TAILLE 30
  4. struct MaStructure {
  5. int salaire[TAILLE];
  6. char noms[TAILLE];
  7. };
  8. void salaireSupSmic (int tab[TAILLE]) ;
  9. void moyenneSalaire (int tab[TAILLE]) ;
  10. int main ()
  11. {
  12. int tab[TAILLE];
  13. salaireSupSmic (tab);
  14. moyenneSalaire (tab);
  15. system("pause" ) ;
  16.     return 0 ;
  17. }
  18. void salaireSupSmic (int tab[TAILLE])
  19. {
  20.      int i;
  21.      float salaire;
  22.     float moyenne;
  23.      char noms;
  24.      
  25. for(i=0;i<TAILLE;i++)
  26.      {
  27.    
  28. if(salaire>12541,31)
  29. {
  30. scanf("%s",&noms);
  31. printf("les personnes dont le salaire est superieur au smic sont :\n",noms);
  32. }}}
  33. void moyenneSalaire (int tab[TAILLE])
  34. {
  35. int i;
  36. float salaire;
  37. float moyenne;
  38. float somme;
  39.      
  40.   somme=0 ;   
  41. for(i=0;i<TAILLE;i++)
  42.      {
  43. somme=somme+salaire;
  44. }
  45. moyenne=somme/TAILLE;
  46. scanf("%f",&moyenne);
  47. printf("le salaire moyen est de :\n",moyenne);
  48. }


 
 
çà m'affiche rien pourquoi ? Y a pas d'ereur à la compilation pourtant

Message cité 1 fois
Message édité par nuleninfo20 le 03-02-2007 à 15:36:25
Reply

Marsh Posté le 03-02-2007 à 15:15:49    

je comprends vraiment pas ce que tu veux faire avec tes scanf ; si tu demandes à l'utilisateur de rentrer "moyenne" et que tu l'affiches juste après, les calculs précédents servent à rien...

Reply

Marsh Posté le 03-02-2007 à 15:15:49   

Reply

Marsh Posté le 03-02-2007 à 15:35:28    

effectivement vous avez raison je l'ai modifié mais çà marche toujours pas

Reply

Marsh Posté le 03-02-2007 à 15:42:55    

nuleninfo20 a écrit :

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define TAILLE 30
  4. struct MaStructure {
  5. int salaire[TAILLE];
  6. char noms[TAILLE];
  7. }




 
Un peu de réflexion ne nuit absolument pas à la réussite de l'exercice. Pourquoi définir une structure contenant "N" salaires et "N" noms ?
 
Le but d'une structure est de regrouper ensembles sous un nom global des items qui vont ensembles. Effectivement un nom est associé à un salaire. Ensuite, puisque tu as "N" employés il te faut "N" éléments de type "MaStructure". Ce sera plus facile que d'avoir un élément contenant "N" salaires et "N" noms. Surtout que l'énoncé parle d'un tableau de structures et non d'une structure contenant des tableaux !!!!
 
PS: Essaye de donner à ta structure un nom en harmonie avec son rôle. Puisqu'elle est sensée gérer un employé, tu pourrais l'appeler par exemple "struct s_employe"...


Message édité par Sve@r le 03-02-2007 à 15:45:18

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 03-02-2007 à 16:01:06    

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define TAILLE 30
  4. void personneSalaire (int tab[TAILLE]);
  5. void salaireSupSmic (int tab[TAILLE]) ;
  6. void moyenneSalaire (int tab[TAILLE]) ;
  7. int main ()
  8. {
  9. int tab[TAILLE];
  10. personneSalaire (tab);
  11. salaireSupSmic (tab);
  12. moyenneSalaire (tab);
  13. system("pause" ) ;
  14.     return 0 ;
  15. }
  16. void personneSalaire (int tab[TAILLE])
  17. {
  18.   int i; 
  19.      for(i=0;i<TAILLE;i++)
  20.      {
  21.          struct s_employe {
  22.        float salaire;
  23.          char noms;
  24.         };}}
  25. void salaireSupSmic (int tab[TAILLE])
  26. {
  27.      int i;
  28.      float salaire;
  29.     float moyenne;
  30.      char noms;
  31.       int n;
  32. for(i=0;i<TAILLE;i++)
  33.      {
  34.    
  35. if(salaire  >12541,31)
  36. {
  37. scanf("%s",&noms);
  38. printf("les personnes dont le salaire est superieur au smic sont :\n",noms);
  39. }}}
  40. void moyenneSalaire (int tab[TAILLE])
  41. {
  42. int i;
  43. float salaire;
  44. float moyenne;
  45. float somme;
  46.      
  47.   somme=0 ;   
  48. for(i=0;i<TAILLE;i++)
  49.      {
  50. somme=somme+salaire;
  51.   }
  52. moyenne=somme/TAILLE; 
  53. scanf("%2f",&moyenne);
  54. printf("le salaire moyen est de :\n",moyenne);
  55. }


 
mouais mais non çà n'affiche topujours rien

Message cité 2 fois
Message édité par nuleninfo20 le 03-02-2007 à 16:10:43
Reply

Marsh Posté le 03-02-2007 à 16:11:25    

nuleninfo20 a écrit :

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define TAILLE 30
  4. void personneSalaire (int tab[TAILLE]);
  5. void salaireSupSmic (int tab[TAILLE]) ;
  6. void moyenneSalaire (int tab[TAILLE]) ;
  7. int main ()
  8. {
  9. int tab[TAILLE];
  10. personneSalaire (tab);
  11. salaireSupSmic (tab);
  12. moyenneSalaire (tab);
  13. system("pause" ) ;
  14.     return 0 ;
  15. }
  16. void personneSalaire (int tab[TAILLE])
  17. {
  18.   int i; 
  19.      for(i=0;i<TAILLE;i++)
  20.      {
  21.          struct s_employe {
  22.        int salaire;
  23.          char noms;
  24.         };}}
  25. void salaireSupSmic (int tab[TAILLE])
  26. {
  27.      int i;
  28.      float salaire;
  29.     float moyenne;
  30.      char noms;
  31.       int n;
  32. for(i=0;i<TAILLE;i++)
  33.      {
  34.    
  35. if(salaire  >12541,31)
  36. {
  37. scanf("%s",&noms);
  38. printf("les personnes dont le salaire est superieur au smic sont :\n",noms);
  39. }}}
  40. void moyenneSalaire (int tab[TAILLE])
  41. {
  42. int i;
  43. float salaire;
  44. float moyenne;
  45. float somme;
  46.      
  47.   somme=0 ;   
  48. for(i=0;i<TAILLE;i++)
  49.      {
  50. somme=somme+salaire;
  51.   }
  52. moyenne=somme/TAILLE; 
  53. scanf("%2f",&moyenne);
  54. printf("le salaire moyen est de :\n",moyenne);
  55. }


 
mouais mais non çà n'affiche topujours rien


 
C'est quoi ce "int tab[TAILLE]" dans ton main ??? Il te faut quoi exactement ? Un tableau d'entiers ou un tableau d'employés ???
 
1) commence par définir ta structure en dehors de toute fonction => toute fonction connaîtra sa composition
2) écrits ton main, définis-y ton tableau d'employés déjà remplis de noms et salaires (tu dois connaître la syntaxe pour préremplir une structure ainsi que la syntaxe pour préremplir un tableau donc préremplir un tableau de structures c'est regrouper les 2 syntaxes)
3) entraine-toi à les manipuler (affiche-les par exemple).
 
Puis, ensuite, écrits tes fonctions particulières une après l'autre et teste-les de façon individuelle...


Message édité par Sve@r le 03-02-2007 à 16:22:16

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 03-02-2007 à 16:41:39    

pff je comprend rien là...
comment je fais pour preremplir un tableau ?

Reply

Marsh Posté le 03-02-2007 à 18:16:12    

nuleninfo20 a écrit :

pff je comprend rien là...
comment je fais pour preremplir un tableau ?


 
Préremplir un tableau de "int": int tab[5]={1, 2, 3, 4, 5};
Préremplir une structure contenant un nom (chaîne de caractères) et un salaire (double): struct s_truc elem={"Nom", 123.45};
 
Préremplir un tableau de structures du type ci-dessus:

struct s_truc tab_elem[3]={
    {"Nom1", 12.25},
    {"Nom2", 12.25},
    {"Nom3", 12.25}
};


 
Mais peut-être que je me trompe et que le tableau des employés doit être saisi au clavier et non prérempli (voir énoncé). De toute façon ce n'est pas la façon dont a été rempli la structure qui compte, c'est la façon de la traiter. Si elle est remplie ça peut faire un jeu d'essai sinon tant pis...
 

nuleninfo20 a écrit :

Code :
  1. void moyenneSalaire (int tab[TAILLE])
  2. {
  3. <...>
  4. moyenne=somme/TAILLE; 
  5. scanf("%2f",&moyenne);
  6. printf("le salaire moyen est de :\n",moyenne);
  7. }



 
Je ne comprends pas pourquoi tu calcules une moyenne que tu écrases juste en dessous par une saisie :??:  :??:  :??:  

Message cité 1 fois
Message édité par Sve@r le 03-02-2007 à 19:48:20

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 04-02-2007 à 20:59:05    

j'ai corrigé quelques trucs maintenant le pb c'est que je sais pas comment faire pour definir les 30 personnes et 30 salaires
 
 
 
 

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define TAILLE 30
  4. #define BUFFER_SIZE 100
  5. typedef struct
  6. {
  7.      char nom[BUFFER_SIZE];
  8.      float salaire;
  9. }
  10. MaStructure;
  11. MaStructure tab[TAILLE];
  12. void personneSalaire(MaStructure tab[TAILLE]);
  13. void salaireSupSmic (MaStructure tab[TAILLE]);
  14. void moyenneSalaire (MaStructure tab[TAILLE]);
  15. int main ()
  16. {
  17. void personneSalaire(MaStructure tab[TAILLE]);
  18. void salaireSupSmic (MaStructure tab[TAILLE]);
  19. void  moyenneSalaire (MaStructure tab[TAILLE]);
  20. system("pause" ) ;
  21.     return 0 ;
  22. }
  23. void personneSalaire(MaStructure tab[TAILLE])
  24. {}
  25. void salaireSupSmic (MaStructure tab[TAILLE])
  26. {
  27.      int i;
  28.      float salaire;
  29.     float moyenne;
  30.      char noms;
  31.       int n;
  32. for(i=0;i<TAILLE;i++)
  33.      {
  34. if(salaire  >12541,31)
  35. {
  36. scanf("%s",&noms);
  37. printf("les personnes dont le salaire est superieur au smic sont :%s\n",noms);
  38. }}}
  39. void moyenneSalaire (MaStructure tab[TAILLE])
  40. {
  41. int i;
  42. float salaire;
  43. float moyenne;
  44. float somme;
  45.      
  46.   somme=0 ;   
  47. for(i=0;i<TAILLE;i++)
  48.      {
  49. somme=somme+salaire;
  50.   }
  51. moyenne=somme/TAILLE; 
  52. scanf("%2f",&moyenne);
  53. printf("le salaire moyen est de :%2f\n",moyenne);
  54. }


 

Reply

Marsh Posté le 04-02-2007 à 21:47:17    

Sve@r a écrit :

Je ne comprends pas pourquoi tu calcules une moyenne que tu écrases juste en dessous par une saisie :??:  :??:  :??:


 
+1, je l'ai deja signalé plus haut...
 

Reply

Sujets relatifs:

Leave a Replay

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