Partiel de C++

Partiel de C++ - C - Programmation

Marsh Posté le 26-05-2007 à 13:06:30    

Salut à tous !  
 
Je me permets de vous demander vos service car, ayant beaucoup de mal à obtenir la logique de l'informatique, je persiste en travaillant, refaisant même les partiels ratés ! (il est à noter que je suis en école de mécanique, ce qui pourra légèrement justifier mon manque de compétence en info)  
 
Nous avons eu un partiel qui posait un probleme d'assemblage d'elements. il fallait simuler des assemblages d'elements porteurs.  
 
Deux elements etaient possible : avec ou sans pieds.  
 
Chaque element est caracterisé par sa longeur, son epaisseur et s'il ont ou non des pieds.
 
La premiere question est de definir un type permettant de modeliser un element
 
Voici ce que j'ai fait :  
 
tydedef struct elmt
        {  
          double lgeur;
          double ep;
          bool pied;
         }elmt;

 
Pour le coup, je pense que c'est bon, vos avis ?  
 
2eme question, et la je doute déja plus de mon sous programme, trop simple me semble t il. Il fallait ici ecrire un sous programme fournissant l'epaisseur d'un element donné
 
Voici ce que je propose :  
 
double epaisseur (elmt A)
         {
          double E;  
          elemt A;  
          E = A.ep;
          return E;
          }

Reply

Marsh Posté le 26-05-2007 à 13:06:30   

Reply

Marsh Posté le 26-05-2007 à 13:23:18    

Première chose, il faudrait savoir si c'est un partiel de C ou de C++.

Reply

Marsh Posté le 26-05-2007 à 13:38:09    

déjà ouais. en partant sur le C :
 
"tydedef" à la place de "typedef"  
 
"elemt" à la place de "elmt"
 
bool n'existe pas en C (faire un faux bool avec int/char).
 
pour epaisseur() passer un pointeur est plus économique (sinon recopie sur la pile en principe, et const parceque tu modifies pas la structure), donc epaisseur( const elmt *Element );
 
 
juste "return A.ep"; (Element->ep avec la remarque précédente)


Message édité par bjone le 26-05-2007 à 13:46:54
Reply

Marsh Posté le 26-05-2007 à 14:02:10    

Alors, c'est pour un cours de C a la base mais le prof a tendance à mettre quelques commande en C++.  
 
Pour la definition du type, "typedef struct" c'est dans mon cours. Et puis elemt ou elmt ne change rien vu que c'est le nom du type, le nom n'influence rien.  
 
Pour info, je n'avais pas encore vu les pointeurs, les structures sont iteratives.  
 
Merci !

Reply

Marsh Posté le 26-05-2007 à 16:10:06    

bin c'est des mauvaises tendances :D
 
pour le reste c'est juste des fautes de frappe (bon c'est le genre de truc que tu fais facilement sur un bout de papier sans pouvoir compiler, donc c'est pas dramatique)
 
par contre j'ai oublié de te faire la remarque avec:
 
double epaisseur (elmt A)  
{
...
elmt A; (elemt :D)
...
}
 
forcément ça marche poa


Message édité par bjone le 26-05-2007 à 16:15:21
Reply

Marsh Posté le 26-05-2007 à 17:35:14    

je me doute bien mais je me contente de faire comme le prof dit ;) lol  
 
si j'avais mis :  
 
double epaisseur (elmt A) {  
   return A.epaisseur;  
}

 
ca n'aurait pas encore été plus simple ?


Message édité par Mac-H1 le 26-05-2007 à 17:40:44
Reply

Marsh Posté le 26-05-2007 à 19:09:37    

complètement. (par contre le coup du elmt A en paramètre et en variable locale à la fonction ça compile pas)

Reply

Marsh Posté le 26-05-2007 à 22:03:31    

l'element A appartient a une collection d'element defini dans un type element ;)

Reply

Marsh Posté le 27-05-2007 à 02:15:57    

heu ? :D

Reply

Marsh Posté le 27-05-2007 à 13:42:54    

Je me permet de vous embeter pour la suite.  
 
La 3 eme question etait de founir un sous programme permettant de connaitre l'ecart d'epaisseur entre deux elements (valeur positive ou negative)
 
Voici ce que j'ai fait :  
 
double difference_epaisseur (Elemt A, Elemt B)
     {
       double D;
       D = A.epaisseur - B.epaisseur;
       return D
     }

 
J'attend l'avis des pros !

Reply

Marsh Posté le 27-05-2007 à 13:42:54   

Reply

Marsh Posté le 27-05-2007 à 14:25:35    

il manque le ; après le return.
Sinon tu aurais pu faire return A.epaisseur - B.epaisseur directement :)

Reply

Marsh Posté le 27-05-2007 à 15:00:40    

correct, j'adore me compliquer la vie ! lol  
 
pour la 4 eme, je dois cette fois pouvoir changer l'epaisseur
 
Voici mon idée :  
 
void changer_epaisseur (Elemt A)  
       {
         double E;
         cout<<"entrez l'epaisseur :";
         cin>>E;
         A.epaisseur = E;
        }
 

Message cité 1 fois
Message édité par Mac-H1 le 27-05-2007 à 17:25:56
Reply

Marsh Posté le 27-05-2007 à 16:07:57    

tu declares un double E, mais tu utilises D ...  :D

Reply

Marsh Posté le 27-05-2007 à 17:26:25    

tu disais ?  :D  
 
 
c'est juste ?

Reply

Marsh Posté le 27-05-2007 à 17:27:59    

c'est juste, la gestion d'erreurs en moins :)

Reply

Marsh Posté le 27-05-2007 à 17:41:40    

qu'entend tu par la gestion d'erreur ? je suis dsl je dois vous paraitre minable lol cela dit c pas faux, l'info et moi fais vraiment 10 ! mais pas le choix !

Reply

Marsh Posté le 27-05-2007 à 17:45:47    

juste qu'en fonction de ce que l'utilisateur tape, ca peu partir en sucette :) (s'il ne rentre pas un chiffre par exemple)

Reply

Marsh Posté le 27-05-2007 à 18:07:01    

did-54 a écrit :

c'est juste, la gestion d'erreurs en moins :)


non, il modifie une variable locale ...

Reply

Marsh Posté le 27-05-2007 à 18:18:42    

si l'utilisateur entre "rienafoutredeserreurs" ca va pas partir en torche ?

Reply

Marsh Posté le 27-05-2007 à 18:33:54    

si ...

Reply

Marsh Posté le 27-05-2007 à 19:24:36    

Mac-H1 a écrit :

correct, j'adore me compliquer la vie ! lol  
 
pour la 4 eme, je dois cette fois pouvoir changer l'epaisseur
 
Voici mon idée :  
 
void changer_epaisseur (Elemt A)  
       {
         double E;
         cout<<"entrez l'epaisseur :";
         cin>>E;
         A.epaisseur = E;
        }
 


 
 
cout et cin, c'est du C++, on s'éloigne vraiment d'un cours de C.

Reply

Marsh Posté le 27-05-2007 à 19:26:00    

malheureusement c'est pourtant ce que j'ai vu en cours... et je vous assure que ca fait bien partie d'un cours de C.
 
Content gaetan, je passe a la suite ! lol  

Reply

Marsh Posté le 27-05-2007 à 19:39:41    

bon en même temps, on peut supposer que c'est pour éviter de causer pointeur dans un premier temps. question d'approche dans la formation.

Reply

Marsh Posté le 27-05-2007 à 21:02:11    

mais totalement stupide ...

Reply

Marsh Posté le 27-05-2007 à 21:33:33    

faut bien commencer par qqch  :sweat:

Reply

Marsh Posté le 27-05-2007 à 22:17:30    

oui par apprendre les choses proprement. C'est quoi ton école que j'evite d'y envoyer mes gamins pkus tard ?

Reply

Marsh Posté le 28-05-2007 à 10:57:24    

hey du calme, il dit qu'il est en école de méca...

Reply

Marsh Posté le 28-05-2007 à 11:00:45    

did-54 a écrit :

hey du calme, il dit qu'il est en école de méca...


 
moi en ecole d'info, on avait des cours de droit mais ils étaient néanmoins correct.
Même si ce n'est aps sa formation initiale, ca n'empeche que les cours doivent etre correct :o

Reply

Marsh Posté le 28-05-2007 à 11:04:56    

Merci did !
 
du droit j'en fais aussi l'ami ! par contre je doute que tu fasse de la meca...
 
et puis je demande de l'aide, pas des remarque du genre ! merci de ton aide mais elle est inutile si tu viens me pourrir de remarque semblable. Ce n'est pas moi qui fait les cours, s'il y a quelqu'un a critiquer, c'est le prof ! On a 5 mois pour avoir des notions, je pense qu'il doit choisir.  
 
Enfin quoi qu'il en soit je dois m'y faire et l'important est de valider le module !  
 
J'espère que certains seront tout de même d'accord pour m'aider.

Message cité 1 fois
Message édité par Mac-H1 le 28-05-2007 à 11:07:00
Reply

Marsh Posté le 28-05-2007 à 11:36:54    

Mac-H1 a écrit :


du droit j'en fais aussi l'ami ! par contre je doute que tu fasse de la meca...

 

vaut mieux pour toi que tu ne t'aventures pas sur ce genre d'arguments ad hominem ;)

 

Même sous couvert de n'avoir que 6 mois, ca ne le dispense pas de faire un cours correct...
le mélange C/C++ sans réel articulation est un vrai drame, je passe assez de temps à reformer des
stagiaires passés apr ce genre de formations pour savoir que c'est néfaste.

 


Sinon, pour en revenir à ta question - histoire d'etre constructif ;) - tu pourrais poster ttes les questions d'un coup, histoire de voire la ou il veut en venir ?


Message édité par Joel F le 28-05-2007 à 11:37:17
Reply

Marsh Posté le 28-05-2007 à 12:00:35    

t'as fait quoi comme école Joel ?


Message édité par did-54 le 28-05-2007 à 12:00:45
Reply

Marsh Posté le 28-05-2007 à 12:52:13    

Les arguments ad hominem ne sont pas forcement des insultes, ne te met pas sur la defensive, un etudiant en info ne fais pas toujours de la méca ;). J'ai pour habitude de ne pas me laisser repprocher des choses inutilement et puis faire de l'info en ecole de meca est à peu pres aussi souvent benefique que l'inverse, je pense que tu comprendra !
 
 
Cela dit je suis assez d'accord, j'ai essaye de me mettre au C seul et son cours est complètement different. Quoiqu'il en soit, je dois m'y faire !  
 
 
Je vous post le partiel complet sous peu, je vais le scanner.


Message édité par Mac-H1 le 28-05-2007 à 13:23:07
Reply

Marsh Posté le 28-05-2007 à 12:57:45    

les voici
 
 
http://img502.imageshack.us/my.php [...] 135ig2.jpg
 
http://img145.imageshack.us/my.php [...] 915if9.jpg
 
 
a noter que je n'utilise pas les pointeurs ds ce partiel  
 
merci bcp !
 
et comme ça Joel tu pourras dire qu'à l'ensmm les cours d'info sont pas top ;)


Message édité par Mac-H1 le 28-05-2007 à 12:59:05
Reply

Marsh Posté le 28-05-2007 à 13:58:25    

did-54 a écrit :

t'as fait quoi comme école Joel ?


Rien de fulgurant : l'ISIMA de Clermont-FErrand (www.isima.fr).
Mais bon, on y fait de bon cours de génie log et de prog C/C++ ;)

 

@MAC-H1
J'ai regardé vite fait, vla une correction possible du probleme.
Trois versions, histoire d'etre didactique :

 

1/ une version pure C;
2/ une version pure C++;
3/ une version "ENSMM" vu que ton prof n'a pas parlé de pointeurs (ni de references), c'est probablement le code qu'il(elle) attend même si c'est uber-moche.

 

/!\ j'enjoins les lecteurs hors ENSMM de s'en tenir au version 1 et 2 /!\

 

Partie A :
Version 1

Code :
  1. /*
  2.     version C
  3.     Question A.1.
  4. */
  5. typedef struct elt
  6. {
  7.   int epaisseur;
  8.   int longeur;
  9.   int presence_pieds;
  10. } element;
  11. /* Question A.2. */
  12. int element_get_epaisseur( const element* e )
  13. {
  14.   return e->epaisseur;
  15. }
  16. /* Question A.3. */
  17. int element_diff_epaisseur( const element* a, const element* b)
  18. {
  19.   return element_get_epaisseur(a) - element_get_epaisseur(b);
  20. }
  21. /* Question A.4. */
  22. void element_set_epaisseur( element* elt, int e)
  23. {
  24.   elt->epaisseur = e;
  25. }
 

Version 2

Code :
  1. // version C++
  2. // Question A.1.
  3. class element
  4. {
  5.   public:
  6.   element( int e, int l, bool p )
  7.   : epaisseur(e), longeur(l), presence_pieds(p) {}
  8.   private:
  9.   int epaisseur;
  10.   int longeur;
  11.   bool presence_pieds;
  12. };
  13. // Question A.2.
  14. int element::getEpaisseur() const
  15. {
  16.   return epaisseur;
  17. }
  18. // Question A.3.
  19. int diff_epaisseur( const element& a, const element& b)
  20. {
  21.   return a.getEpaisseur() - b.getEpaisseur();
  22. }
  23. // Question A.4.
  24. void element::setEpaisseur(int e)
  25. {
  26.   epaisseur = e;
  27. }
 

Version 3

Code :
  1. /*
  2.     version C
  3.     Question A.1.
  4. */
  5. typedef struct elt
  6. {
  7.   int epaisseur;
  8.   int longeur;
  9.   int presence_pieds;
  10. } element;
  11. /* Question A.2. */
  12. int element_get_epaisseur( const element e )
  13. {
  14.   return e.epaisseur;
  15. }
  16. /* Question A.3. */
  17. int element_diff_epaisseur( element a, element b)
  18. {
  19.   return element_get_epaisseur(a) - element_get_epaisseur(b);
  20. }
  21. /* Question A.4. */
  22. /* cette question, sans pointeur, n'a pas de raison d'exister, à part
  23. pour faire 1000000 de copies ... mais bon ... */
  24. element element_set_epaisseur( element a, int e)
  25. {
  26.   element elt;
  27.   elt.longeur= a.longeur;
  28.   elt.epaisseur = e;
  29.   elt.presence_pieds= a.presence_pieds;
  30.   return elt;
  31. }
 

Pour la Partie B, qu'as tu vu en cours comme type 'collection' ?
les tableaux styles tab[N], les tabelaux dynamiques avec malloc/free ou new/delete ? les std::vector ?
Ensuite, je te donne une correction pour la partie B.


Message édité par Joel F le 28-05-2007 à 21:44:41
Reply

Marsh Posté le 28-05-2007 à 15:33:31    

y'a glissade sur le type de retour element_set_epaisseur() je suppose ?

Reply

Marsh Posté le 28-05-2007 à 15:37:07    

mauvais C+P, je corrige ;)

Reply

Marsh Posté le 28-05-2007 à 19:36:45    

Pour la question A3, on ne peut pas juste appeler l'epaisseur de l'element A et B par quelquechose comme A.epaisseur - B.epaisseur au lieu d'appeler une autre fonction ?

Reply

Marsh Posté le 28-05-2007 à 21:43:42    

oui, j'ai juste copier/coller la soluce C++.  
Toujours mieux de s'appuyer sur des accesseurs qu'acceder aux membres directement.

Reply

Marsh Posté le 28-05-2007 à 22:57:10    

Ca roule, j'essaye de faire la suite et si tu veux bien, tu me dira ce qu'il en est.  
 
J'ai vu tout ce que tu m'a demandé sauf les std::vector mais après ce partiel. Je comprend d'ailleurs pas comment j'ai pu le rater... j'ai vraiment bien fais de faire de la mécanique ;) !

Reply

Marsh Posté le 03-06-2007 à 14:38:33    

Salut à tous,  
 
desole pour l'absence, j'ai eu vraiment plein de choses a faire ces jrs ci. Concernant le partiel, merci beaucoup à tous pour votre aide. J'ai fait la fin et ai reussi à croiser le prof pour qu'il me corrige tout ça. Visiblement, rien de bien complique. Je dois revenir sur quelques details mais rien d'affolant, je devrai m'en sortir.  
 
Par contre maintenant, je me retrouve avec un projet d'info. Et cette fois, ce sont les listes chainée qui sont a l'honneur.  
 
en effet, je dois representer une matrice creuse. En clair je dois creer une matrice en fonction de ce que l'utilisateur rentrera comme données puis faire des operations.  
 
si l'un d'entre vous a des idées, qu'il n'hesite pas, elles seront les bienvenues.  
 
merci d'avance :)
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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