Comment saisir et controler des valeurs ds une fonction, et ...

Comment saisir et controler des valeurs ds une fonction, et ... - C - Programmation

Marsh Posté le 02-04-2005 à 19:16:46    

Voila, j'aimerai savoir, comment puis-je faire pour :
 
1/ Fonction1 : elle demande a lutilisateur de saisir des valeurs, et ma fonction les controles en mm tps...
2/ Fonction2 : elle affiche les vlaeurs saisie ds "Fonction1", voir les utiliser!
 
Et j'aimerai utiliser les valeurs de "Fonction1" dans n'importe qu'elle autre fonctions...
 
 
MERCI  :bounce:

Reply

Marsh Posté le 02-04-2005 à 19:16:46   

Reply

Marsh Posté le 02-04-2005 à 19:29:57    

ares9907 a écrit :

Voila, j'aimerai savoir, comment puis-je faire pour :
 
1/ Fonction1 : elle demande a lutilisateur de saisir des valeurs, et ma fonction les controles en mm tps...


http://mapage.noos.fr/emdel/notes.htm#saisie

Citation :

2/ Fonction2 : elle affiche les vlaeurs saisie ds "Fonction1", voir les utiliser!
Et j'aimerai utiliser les valeurs de "Fonction1" dans n'importe qu'elle autre fonctions...


paramètres...
 


---------------
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-2005 à 19:37:30    

Heu, je sais créeer une fonction, mon probleme, c'est de réutiliser les variables...
 
Heu, 8h non stop ke je suis sur mon prog, dsl, mais j'ai le cervo en compote, j'arrive plus a lire tout ça, je ne suis pas un as de la prog! Et j'ai 3t de taf encore a faire...
dsl de chercher un peu la simplicité...

Reply

Marsh Posté le 03-04-2005 à 00:35:40    

ares9907 a écrit :

Heu, je sais créeer une fonction, mon probleme, c'est de réutiliser les variables...
 
Heu, 8h non stop ke je suis sur mon prog, dsl, mais j'ai le cervo en compote, j'arrive plus a lire tout ça, je ne suis pas un as de la prog! Et j'ai 3t de taf encore a faire...
dsl de chercher un peu la simplicité...



#include <stdio.h>
 
void inc (int *p)
{
   /* incrementer la valeur pointee */
   (*p)++;
}
 
void print (int i)
{
   printf ("i = %d\n", i);
}
 
int main (void)
{
   int a = 0;
 
   inc (&a);
 
   print (a);
 
   return 0;
}


Quelle est la partie que tu ne comprends pas ?


---------------
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 03-04-2005 à 09:15:59    

Emmanuel Delahaye a écrit :


#include <stdio.h>
 
void inc (int *p)
{
   /* incrementer la valeur pointee */
   (*p)++;
}
 
void print (int i)
{
   printf ("i = %d\n", i);
}
 
int main (void)
{
   int a = 0;
 
   inc (&a);
 
   print (a);
 
   return 0;
}


Quelle est la partie que tu ne comprends pas ?


 
Alors,la fonction "inc" va incrementer la variable pointé par mon pointeur p (qui n'est pas initialiser d'ailleur, non?)!
Dans ma fonction main, j'ai une variable initialiser à 0, je vias demander a l'utilisateur d'entrer une valeur pour a, ça va le "renvoyer" dans la fonction inc, celle-ci va prendre la valeur saisie par l'utilisateur, va eventuellement lui faire certain control, puis la fonction print va m'afficher cette valeur qui a été saisie....
J'ai tout compris?
Ouais, ce qui me bloquais, c'est le cout de la variable i! mais en fait , c'est l'histoire des arguments et je ne sais plus!(oui, je n'ai pas trop compris l cout des fonctions, ce qui est TRES embetant !)
 
ICI, je ne vois pas comment la fonction renvoie la valeur saisie dans "inc" ! ??? et si j'ai plusieurs variables...Haaa vu que c'est "main" qui l'appel, ça retourne dans la fonction appelante non? et vu que c'est un pointeur, ça a juste servie a donner une valeur a mon pointeur, qui ensuite va pointer sur une varibale (ici "a" ) et c'est cette variable qui va me permettre d'afficher le contenue de mon pointeur en gros??


Message édité par ares9907 le 03-04-2005 à 09:18:07
Reply

Marsh Posté le 03-04-2005 à 09:39:59    

Ce qu'il te faut c'est un petit cours sur les pointeurs  
 
http://www.linux-kheops.com/doc/co [...] index.html
 
Si tu passes un peu de temps à méditer ceci, ce sera du temps gagné pour programmer efficacement, en sachant ce que tu fais.


Message édité par fafounet le 03-04-2005 à 09:41:21
Reply

Marsh Posté le 03-04-2005 à 09:50:43    

ares9907 a écrit :

Alors,la fonction "inc" va incrementer la variable pointé par mon pointeur p (qui n'est pas initialiser d'ailleur, non?)!


Ben si. La fonction est appelée comme ceci:


   int a = 0;
 
   inc (&a);


le pointeur est initialisé avec l'adresse de 'a' (&a).

Citation :


Dans ma fonction main, j'ai une variable initialisée à 0,  


Oui.

Citation :


je vais demander a l'utilisateur d'entrer une valeur pour a,  


Meuh ? J'ai écrit ça moi ? J'ai au contraire choisi un exemple simple qui ne mélange pas trop de concepts en même temps... La 'saisie', on verra plus tard. Il y a plus urgent pour le moment.

Citation :


ça va le "renvoyer" dans la fonction inc,  


Pour le moment, c'est beaucoup plus simple que ça... La fonction inc() reçoit l'adresse d'une variable, incrémente cette variable en utilisant les propriétés des pointeurs et de l'opérateur de déréférencement (*), et c'est tout. La valeur de 'a' après inc() est donc de 1 au lieu de 0.

Citation :


celle-ci va prendre la valeur saisie par l'utilisateur, va eventuellement lui faire certain control,  


rien de tout ça dans mon exemple basique...

Citation :


puis la fonction print va m'afficher cette valeur qui a été saisie....


Oui.

Citation :


Ouais, ce qui me bloquais, c'est le coup de la variable i! mais en fait , c'est l'histoire des arguments et je ne sais plus!(oui, je n'ai pas trop compris le coup des fonctions, ce qui est TRES embetant !)


Visiblement, tu as un sérieux problème avec les bases du C... Il faut que tu repartes du début avec un bon livre.

Citation :


ICI, je ne vois pas comment la fonction renvoie la valeur saisie dans "inc" !


Elle ne renvoie rien ! Elle modifie la valeur de la variable originale  

Citation :


 ??? et si j'ai plusieurs variables...


Comme je l'ai déjà dit,  

  • soit plusieurs pointeurs,  
  • soit une structure (dont on passe l'adresse)

Mais tant que tu n'as pas compris et maîtrisé ce qui ce passe avec un pointeur, pas la peine d'essayer de faire plus compliqué. L'apprentissage est une suite de consolidation de connaissances, sinon, un jour, tout s'effondre...

Citation :


Haaa vu que c'est "main" qui l'appel, ça retourne dans la fonction appelante non?  


inc() modifie la valeur de 'a' qui est dans la fonction appelante...

Citation :


et vu que c'est un pointeur, ça a juste servie a donner une valeur a mon pointeur, qui ensuite va pointer sur une varibale (ici "a" ) et c'est cette variable qui va me permettre d'afficher le contenue de mon pointeur en gros??


Comment ça 'afficher' ? Le pointeur (qui est une variable contenant une adresse) permet d'accéder à la variable pointée.
 
http://mapage.noos.fr/emdel/notes.htm#pointeurs


Message édité par Emmanuel Delahaye le 03-04-2005 à 09:52:11

---------------
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 03-04-2005 à 10:21:51    

Ouais le problemes, c'est que j'ai un programme a rendre pour le 19 avril ! :s !
 
Je sais que ton programme ne demande rien a l'utilisateur et qu'il ne fait aucun control...
Je voulais simplement dire, que dans la fonction inc, MOI je pouvais dans cette fonction, demandé a l'utilisateur de saisir une variable, la controler...
 
Enfin, je vias mediter la dessus...
 
Vous avez raison, je vais bien reprendre les cours...et bien m'integrer dans le crane comment utiliser exactement une fonction, je serai plus productif après...
 
Mais bon, je suis dans un groupe de 3, je suis tout seul a bosser! Et j'ai aussi pas mal de boulot derriere, alors c'est pas toujours evident !
 
MERCI !! :bounce:


Message édité par ares9907 le 03-04-2005 à 10:27:47
Reply

Marsh Posté le 03-04-2005 à 10:42:16    

ares9907 a écrit :

Ouais le problemes, c'est que j'ai un programme a rendre pour le 19 avril ! :s !


On est pas responsable de ton manque d'organisation...

Citation :

Je sais que ton programme ne demande rien a l'utilisateur et qu'il ne fait aucun control...
Je voulais simplement dire, que dans la fonction inc, MOI je pouvais dans cette fonction, demandé a l'utilisateur de saisir une variable, la controler...


Oui, tout à fait (évidemment, il serait peu judicieux de l'appeler inc()...)


Message édité par Emmanuel Delahaye le 03-04-2005 à 10:42:53

---------------
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 03-04-2005 à 10:47:14    

lol, non, pas du tout !!!
 
Bref, je commence a comprendre, qu'une fonction a des parametre formel, qui sont propres à elle meme!
et que je n'ai pas besoin, de réutuliser ces parametres !! :non: Enfin, de donner le meme nom !!
 
MERCI en tout cas !!
 
Vaudrait mieux, que je vienne poser des questions en comprenant ce que je fais en fait !!

Reply

Marsh Posté le 03-04-2005 à 10:47:14   

Reply

Marsh Posté le 03-04-2005 à 11:02:47    

Code :
  1. #include <stdio.h>
  2. void inc (int *p)
  3. {
  4. //Ici, a est un pointeur, et j'incremente mon pointeur de 1
  5.    /* incrementer la valeur pointee */
  6.    (*p)++;
  7. }
  8. void print (int i)
  9. {
  10. // j'affiche la valeur de a
  11.    printf ("i = %d\n", i);
  12. }
  13. int main (void)
  14. {
  15.    int a = 0;
  16. // je vais dans la fonction inc pour modifier la valeur de a
  17.    inc (&a);
  18. // je vais dans la fonction print pour afficher la valeur de a  
  19.    print (a);
  20.    return 0;
  21. }


 
 
Admettons que la fonction inc me permet a l'utilisateur de saisir une valeur, dans ce cas, j'aurai *a=valeur saisie !
et en appelant print dans n'importe qu'elle autre fonction, je pourrai afficher ou utiliser cette valeur...C'est ça?


Message édité par ares9907 le 03-04-2005 à 11:03:50
Reply

Marsh Posté le 03-04-2005 à 11:14:43    

ares9907 a écrit :


void inc (int *p)  
{  
//Ici, a est un pointeur, et j'incremente mon pointeur de 1
   /* incrementer la valeur pointee */  
   (*p)++;  
}  



Tu fais fort. Je met un commentaire qui explique exactement ce qui se passe, et toi tu en mets un autre qui est faux. Tu n'as pas cherché à comprendre ce que j'avais écrit ? Tu ne l'a pas compris ? C'est quoi ton problème au juste. Tu te couches trop tard, tu te reveilles la tête dans le c*l ?
 
Il faut que tu arrives à comprendre la différence entre :


   /* incremeter le pointeur */
   p++;  
 
   /* incrementer la valeur pointee */  
   (*p)++;  


Citation :

 
Admettons que la fonction inc me permet a l'utilisateur de saisir une valeur, dans ce cas, j'aurai *a=valeur saisie !


J'aurais plutôt dit :  

  *p = valeur_saisie;


Citation :


et en appelant print dans n'importe qu'elle autre fonction, je pourrai afficher ou utiliser cette valeur...C'est ça?


Voui...
Essaye d'implémenter une saisie (simple pour le moment. Une variable) ... Pour la saisie, je te rappelle ceci :
 
http://mapage.noos.fr/emdel/notes.htm#saisie


---------------
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 03-04-2005 à 11:24:01    


 

Citation :

Tu fais fort. Je met un commentaire qui explique exactement ce qui se passe, et toi tu en mets un autre qui est faux. Tu n'as pas cherché à comprendre ce que j'avais écrit ? Tu ne l'a pas compris ? C'est quoi ton problème au juste. Tu te couches trop tard, tu te reveilles la tête dans le c*l ?


 
 
 
Je me leve toute la semaine à 6h, j'ai 2h30 de transport par jour, je finis a 17h ou 19h, j'essai de faire un projet d'informatique seul, où on est censé etre 3, j'ai un projet de maths a faire, un projet de méca, j'essai en meme temps d'apprendre tous mes autres cours, en plus j'ai du retard, et je me pose quasiment pas  :kaola:  
 
Surement pour ça que je zap pas mal de chose ! :ouch:  :pt1cable:


Message édité par ares9907 le 03-04-2005 à 11:27:52
Reply

Marsh Posté le 03-04-2005 à 11:31:30    

Je n'arrive pas trop a saisir sur quoi pointe p ?
En gros kan j'arrive dans inc j'ai le pointeur *a qui pointe sur l'adresse de a ?

Reply

Marsh Posté le 03-04-2005 à 11:58:24    

ares9907 a écrit :

Je n'arrive pas trop a saisir sur quoi pointe p ?
En gros kan j'arrive dans inc j'ai le pointeur *a qui pointe sur l'adresse de a ?


Ok. Je reprends et je détaille :  


#include <stdio.h>
 
void inc (int *p)
{
/* 'p' contient donc l'adresse de 'a'  
 * '*p' est donc la valeur pointee.  
 * (la valeur de 'a' qui vaut 0, soit 0.)
 */
 
   /* incrementer la valeur pointee */
   (*p)++;
}
 
void print (int i)
{
   printf ("i = %d\n", i);
}
 
int main (void)
{
   /* 'a' est une variable locale de type 'int'. Son adresse est &a. */
   int a = 0;
 
   /* on passe l'adresse de 'a' a la fonction inc().  
    * Le parametre de inc() est de type int *.  
    * Il est donc bien fait pour recevoit l'adresse d'un int.  
    * (Ca tombe bien !)  
    */
   inc (&a);
 
   print (a);
 
   return 0;
}  


Rappel, en C, tous les passages de paramètres se font par valeur (copie de la valeur).


---------------
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 03-04-2005 à 12:00:16    

Heu, je vais etre lourd, mais avec ton truc je peux :
 
* Je suis dans le menu principal, l'utilisateur choisit de saisir des valeurs en appuyant sur 1!
=> Il arrive donc ds la fonction "saisie"! Il entre ses differentes valeurs, et une fois qu'il a valider, il revien au menu principal!
 
*Cette l'utilisateur, souhaite verifier les valeurs qu'il a saisie, il est donc ds le menu principal, et il appui sur 2, ce qui l'envoie dans la fonction "afficher_valeur_saisie"!
Mais, là, ça m'affiche 0!
Et je voudrais, qu'en plus, lorsqu'il va appuyer sur 3, ça l'envoie ds une fonction "simulation", et cette fonction doit réutiliser les valeurs que l'utilisateur a saisie dans la fonction "saisie"...
 
Et avec ce que tu m'a di précédament, je peux faire ça?
 
PS: mes fonction sont dans different fichier *.cpp à chaque fois....


Message édité par ares9907 le 03-04-2005 à 12:04:10
Reply

Marsh Posté le 03-04-2005 à 12:08:21    

ares9907 a écrit :

Heu, je vais etre lourd, mais avec ton truc je peux :
 
* Je suis dans le menu principal, l'utilisateur choisit de saisir des valeurs en appuyant sur 1!
=> Il arrive donc ds la fonction "saisie"! Il entre ses differentes valeurs, et une fois qu'il a valider, il revien au menu principal!
 
*Cette l'utilisateur, souhaite verifier les valeurs qu'il a saisie, il est donc ds le menu principal, et il appui sur 2, ce qui l'envoie dans la fonction "afficher_valeur_saisie"!
Mais, là, ça m'affiche 0!
 
Et avec ce que tu m'a di précédament, je peux faire ça?


On peux faire beaucoup de choses... Poste ton code. Mais surtout, n'avance pas vers une nouvelle étape dans que l'étape courante n'est pas maitrisée. Tu me parles de saisie, de menu... alors je ne suis pas sûr que tu sois à l'aise avec les pointeurs...
 
Le Sage[1] a dit : "Quand tu es pressé, va lentement"
 
Et aussi, relit toi. Entre les fautes d'othographes, les fautes de frappes et la rédaction approximative, on frise l'incompréhension. Chaque message peut être édité...
 
----------------------------------------
[1]Mon grand-père, en l'occurence


---------------
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 03-04-2005 à 12:09:52    

ares9907 a écrit :

PS: mes fonction sont dans different fichier *.cpp à chaque fois....


Meuh ? Ici, on fait du C. L'extension doit être .c (ni .C, ni .cpp)


---------------
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 03-04-2005 à 12:39:16    

Voici ma fonction principale:

Code :
  1. #include <stdio.h>
  2. #include<process.h>
  3. void parametrage();
  4. void quitter();
  5. void simulation_manuelle();
  6. void reinitialisation();
  7. void recap_valeur(int v_min,int v_rapp1,int v_rapp2,int v_rapp3,int v_max);
  8. int v_min,v_rapp1,v_rapp2,v_rapp3,v_max;
  9. void main()
  10. {
  11. int choix, a=0;
  12. system("cls" );
  13. //Affichage du menu, et des differentes possibilitées...  
  14. printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",201,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,187);
  15. printf("%c     ***Menu principal***      %c\n%c         %c\n%c 1 => Parametrer de l\'eolienne      %c\n%c 2 => Reinitialisation de l\'eolienne%c\n%c 3 => Simulation manuelle      %c\n%c 4 => Simulation automatique        %c\n%c 5 => Quitter le programme          %c\n%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n\nVotre choix ? : ",186,186,186,186,186,186,186,186,186,186,186,186,186,186,200,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,188);
  16. scanf("%d",&choix);
  17. while ((choix!=1)&&(choix!=2)&&(choix!=3)&&(choix!=4)&&(choix!=5))
  18. {
  19.  printf("\n\aSaisie incorrecte !\n\nRecommencer: " );
  20.  scanf("%d",&choix);
  21. }
  22. switch(choix)
  23. {
  24. case 1 : parametrage() /*Saisie les parametres qu'entre l'utilisateur  */                          ; break;
  25. // case 2 : reinitialisation()/*Cette fonction devrat mettre a 0 tt ce qui a été saisie dans "parametrage() "*/ ; break;
  26. // case 3 : simulation_manuelle()/*Cette fonction devrat utiliser ce qui a été saisie dans "parametrage()"  */  ; break;
  27. case 4 : recap_valeur(v_min,v_rapp1,v_rapp2,v_rapp3,v_max);/*Ici, ça doit afficher ce qui a été saisie dans "parametrage()"*/            ; break;
  28. case 5 : quitter()/*ferme le programme       */                                                             ; break ;
  29. }
  30. fflush(stdin);
  31. }


 
 
Ici, c'est ma fonction "parametrage (lancée en appuyant sur 1 dans le switch):

Code :
  1. #include<stdio.h>
  2. #include<process.h>
  3. #include<stdlib.h>
  4. #include<conio.h>
  5. void main();
  6. /*! ATTENTION ! : v_rapp1 est la vitesse pour le passage du 2nd RAPPORT, et non du 1er,
  7. puisque le 1er rapport est enclenché lors du demarrage!*/
  8. void tableau_parametre();
  9. //FONCTION Saisie de la vitesse d'enclenchement  
  10. int v_demarrage()
  11.  {
  12. int v_min;
  13.  printf("1-Entrer la vitesse d'enclenchement de l\'eolienne : " );
  14.  scanf("%d",&v_min);
  15.  while ((v_min<=0)||(v_min>450))
  16.  {
  17.   printf("\n\aLa vitesse doit etre comprise entre 1 et 450 km/h\n\n1-Nouvelle saisie : " );
  18.   scanf("%d",&v_min);
  19.  }
  20.  return (v_min);
  21.  }
  22. //FONCTION Saisie de la vitesse pour le passage de la 2nd vitesse
  23. int v_rapport1()
  24. {
  25. int v_rapp1;
  26. printf("\n2-Entrer la vitesse pour le passage du 2nd rapport de vitesse : " );
  27.  scanf("%d",&v_rapp1);
  28.   while((v_rapp1<=0)||(v_rapp1>450))
  29.  {
  30.   printf("\n\aSaisie incorrecte, la vitesse ne peut etre superieur a 450km/h ou inferieur ou  egal a la vitesse d'enclenchement\n\n2-Nouvelle saisie : " );
  31.   scanf("%d",&v_rapp1);
  32.  }
  33.  return (v_rapp1);
  34. }
  35. //FONCTION Saisie de la vitesse pour le passage de la 3eme vitesse
  36. int v_rapport2()
  37. {
  38. int v_rapp2;
  39. printf("\n3-Entrer la vitesse pour le passage du 3eme rapport de vitesse : " );
  40.  scanf("%d",&v_rapp2);
  41.   while((v_rapp2<=0)||(v_rapp2>450))
  42.  {
  43.   printf("\n\aSaisie incorrecte, la vitesse ne peut etre superieur a 450km/h ou inferieur ou  egal a la vitesse d'enclenchement\n\n3-Nouvelle saisie : " );
  44.   scanf("%d",&v_rapp2);
  45.  }
  46.  return (v_rapp2);
  47. }
  48. //FONCTION Saisie de la vitesse pour le passage de la 4eme vitesse
  49. int v_rapport3()
  50. {
  51. int v_rapp3;
  52. printf("\n4-Entrer la vitesse pour le passage du 4eme rapport de vitesse : " );
  53.  scanf("%d",&v_rapp3);
  54.   while((v_rapp3<=0)||(v_rapp3>450))
  55.  {
  56.   printf("\n\aSaisie incorrecte, la vitesse ne peut etre superieur a 450km/h ou inferieur ou egal a la vitesse d'enclenchement\n\n4-Nouvelle saisie : " );
  57.   scanf("%d",&v_rapp3);
  58.  }
  59.  return (v_rapp3);
  60. }
  61. //FONCTION Saisie de la vitesse maximal (vitesse frein)
  62. int v_maximale_frein()
  63. {
  64.  int v_max;
  65.  printf("\n5-Entrer la vitesse a laquelle le frein doit se declencher : " );
  66.  scanf("%d",&v_max);
  67.  while((v_max<=0)||(v_max>450))
  68.  {
  69.   printf("\n\aSaisie incorrecte, la vitesse du frein ne peut etre egale a la vitesse du 4eme rapport, ou superieur a 450km/h\n\n5-Nouvelle saisie : " );
  70.   scanf("%d",&v_max);
  71.  }
  72.  return (v_max);
  73. }
  74. //FONCTION Recapitulatif
  75. void recap_valeur(int v_min,int v_rapp1,int v_rapp2,int v_rapp3,int v_max)
  76. {
  77. system("cls" );
  78. int n=0,i;
  79. if ((v_min>0)&&(v_min<v_rapp1)&&(v_rapp1<v_rapp2)&&(v_rapp2<v_rapp3)&&(v_rapp3<v_max)&&(v_max<=450))
  80. {
  81.  printf("L\'eolienne est parametre comme suit :\n\n1-Pour un vent de %dkm/h l\'eolienne demarre.\n2-Pour un vent de %dkm/h le 2nd rapport est enclenche.\n3-Pour un vent de %dkm/h le 3eme rapport est enclenche.\n4-Pour un vent de %dkm/h le 4eme rapport est enclenche.\n5-Pour un vent de %dkm/h le frein s\'enclenche.\n\n",v_min,v_rapp1,v_rapp2,v_rapp3,v_max);
  82.  printf("Retour au menu principal dans :\n" );
  83.   for (i=11;i>=0;i--)
  84.  {           
  85.   printf("%d\r",i);
  86.   _sleep(1000);
  87.   if(kbhit())
  88.  {
  89.   n=27;
  90.   main();
  91.  }
  92. }
  93.  main();
  94. }
  95. //Controle des valeurs saisies !
  96. else
  97. {
  98.  //repete jusqu'a qu'il n'y est plus d'erreur :
  99.  while ((v_rapp3<=v_min)||(v_rapp3<=v_rapp1)||(v_rapp3<=v_rapp2)||(v_rapp2<=v_min)||(v_rapp2<=v_rapp1)||(v_rapp1<=v_min))
  100.  {
  101.    //Controle frein
  102.  if((v_max<v_min)||(v_max<=v_rapp1)||(v_max<=v_rapp2)||(v_max<=v_rapp3))
  103.  {
  104.   system("cls" );
  105.   printf("\a*Erreure vitesse frein !\n\nLa vitesse de declenchement du frein doit etre superieur a toutes les autres    vitesses !\n\nVous aviez saisie : \n\nVitesse demmarage:%dkm/h\nVitesse 2d rapport:%dkm/h\nVitesse 3eme rapport:%dkm/h\nVitesse 4eme rapport:%dkm/h\n\nNouvelle vitesse frein : ",v_min,v_rapp1,v_rapp2,v_rapp3);
  106.   scanf("%d",&v_max);
  107.   while ((v_max<=0)||(v_max>450))
  108.   {
  109.    system("cls" );
  110.   printf("\n\aSaisie incorrecte, la vitesse du frein ne peut etre egale a la vitesse du 4eme rapport, ou superieur a 450km/h\n\nVous aviez saisie : \n\nVitesse demmarage:%dkm/h\nVitesse 2d rapport:%dkm/h\nVitesse 3eme rapport:%dkm/h\nVitesse 4eme rapport:%dkm/h\n\nNouvelle vitesse frein : ",v_min,v_rapp1,v_rapp2,v_rapp3);
  111.   scanf("%d",&v_max);
  112.   }
  113.  }
  114.  else
  115.  {
  116.  //Controle vitesse pour passage du 4eme rapport
  117.   if((v_rapp3<=v_min)||(v_rapp3<=v_rapp1)||(v_rapp3<=v_rapp2))
  118.    {
  119.   system("cls" );
  120.   printf("\a*Erreure vitesse 4eme rapport !\n\nLa vitesse du vent pour le passage de la 4eme vitesse doit etre superieur a la vitesse de demarrage et la vitesse du passage du 3eme et 2nd rapports!\n\nVous aviez saisie :\n\nVitesse demarrage:%dkm/h\nVitesse 2nd rapport:%dkm/h\n->Vitesse 3eme rapport:%dkm/h\n->Vitesse frein %dkm/h\n\nNouvelle saisie vitesse 4eme rapport : ",v_min,v_rapp1,v_rapp2,v_max);
  121.   scanf("%d&",&v_rapp3);
  122.    while((v_rapp3<=0)||(v_rapp3>450))
  123.     {
  124.     system("cls" );
  125.   printf("\n\aSaisie incorrecte, la vitesse ne peut etre superieur a 450km/h ou inferieur ou  egal a la vitesse d'enclenchement\n\nVous aviez saisie :\n\nVitesse demarrage:%dkm/h\nVitesse 2nd rapport:%dkm/h\n->Vitesse 3eme rapport:%dkm/h\n->Nouvelle saisie vitesse 4eme rapport : ",v_min,v_rapp1,v_rapp2);
  126.   scanf("%d",&v_rapp3);
  127.     }
  128.    }
  129.   else
  130.   {
  131.    //Controle vitesse pour passage 3eme rapport
  132.    if((v_rapp2<=v_min)||(v_rapp2<=v_rapp1))
  133.    {
  134.     system("cls" );
  135.     printf("\a*Erreure vitesse 3eme rapport !\n\nLa vitesse du vent pour le passage du 3eme rapport doit etre superieur a la vitesse de demarrage et a la vitesse du passage du 2nd rapport\n\nVous aviez saisie:\n\nVitesse demarrage:%dkm/h\n->Vitesse 2d rapport:%dkm/h\n->Vitesse 4eme rapport:%dkm/h.\nVitesse frein:%dkm/h.\n\nNouvelle saisie vitesse 3eme rapport : ",v_min,v_rapp1,v_rapp3,v_max);
  136.     scanf("%d",&v_rapp2);
  137.   while((v_rapp2<=0)||(v_rapp2>450))
  138.     {
  139.    system("cls" );
  140.   printf("\n\aSaisie incorrecte, la vitesse ne peut etre superieur a 450km/h ou inferieur ou  egal a la vitesse d'enclenchement\n\nVous aviez saisie:\n\nVitesse demarrage:%dkm/h\n->Vitesse 2d rapport:%dkm/h\n->Vitesse 4eme rapport:%dkm/h.\nVitesse frein:%dkm/h.\n\nNouvelle saisie vitesse 3eme rapport : ",v_min,v_rapp1,v_rapp3,v_max);
  141.   scanf("%d",&v_rapp2);
  142.     }
  143.    }
  144.    else
  145.    {
  146.     //Controle vitesse pour passage 2nd rapport
  147.     if(v_rapp1<=v_min)
  148.     {
  149.      system("cls" );
  150.      printf("\a*Erreure vitesse 2nd rapport !\n\nLa vitesse de passage du 2nd rapport doit etre superieur a la vitesse de demarrage\n\nVous aviez saisie :\n\n->Vitesse demarrage:%dkm/h.\n->Vitesse 3eme rapport:%dkm/h.\nVitesse 4eme rapport:%dkm/h.\nVitesse frein:%dkm/h.\n\nNouvelle saisie 2n rapport : ",v_min,v_rapp2,v_rapp3,v_max);
  151.      scanf("%d",&v_rapp1);
  152.      while((v_rapp1<=0)||(v_rapp1>450))
  153.     {
  154.       system("cls" );
  155.      printf("\n\aSaisie incorrecte, la vitesse ne peut etre superieur a 450km/h ou inferieur ou  egal a la vitesse d'enclenchement\n\nVous aviez saisie :\n\n->Vitesse demarrage:%dkm/h.\n->Vitesse 3eme rapport:%dkm/h.\nVitesse 4eme rapport:%dkm/h.\nVitesse frein:%dkm/h.\n\nNouvelle saisie 2n rapport : ",v_min,v_rapp2,v_rapp3,v_max);
  156.      scanf("%d",&v_rapp1);
  157.      }
  158.     }
  159.    }
  160.   }
  161.  }
  162. }
  163. }
  164. //Me réaffiche les valeurs saisie
  165.  recap_valeur(v_min,v_rapp1,v_rapp2,v_rapp3,v_max);
  166. }
  167. //FONCTION Permet la saisie des différentes vitesses
  168. void parametrage()
  169. {
  170. int v_min,v_rapp1,v_rapp2,v_rapp3,v_max,retour=0;
  171.  system("cls" );
  172.  printf("    %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",201,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,187);
  173.  printf("    %c*** Parametrage de l\'eolienne ***%c\n",186,186);
  174.  printf("    %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n\n\n",200,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,188);
  175. //Ici ça me permet de saisir la valeur des differentes variables  
  176.  v_min=v_demarrage();
  177.  v_rapp1=v_rapport1();
  178.  v_rapp2=v_rapport2();
  179.  v_rapp3=v_rapport3();
  180.  v_max=v_maximale_frein();
  181.  recap_valeur(v_min,v_rapp1,v_rapp2,v_rapp3,v_max);
  182. }


 
Le programme tourne
Mon probeleme, c'est quand dans le choix 4 (dans la fonction principale) ben, ça me relane la fonction recap_valeur comme si rien n'avait été saisie...
 
Bref, a mon avis, j'ai vraiment interet a relir mes cours...
 
Enfin....voila j'ai plus qu'a tout refaire proprement  :ange:


Message édité par ares9907 le 03-04-2005 à 12:44:26
Reply

Marsh Posté le 03-04-2005 à 14:14:44    

EUREKA !!!  :bounce:  
 
J'ai trouvé la solution à mon problème !!!
 
UTILISER DES VARIABLES GLOBALES !!!
 
J'ai relus mes cours sur les fonctions, et sur les pointeurs, je pense avoir saisi la chose!
J'ai un petit bouquin de C!
Et il parle d'utiliser des variables globales, que je pourrai utiliser dans toutes mes fonctions, et que je pourrai changer à tout momment !!!
 
Bref, maintenant, place aux maths !  
 
Je reviens sur mon prog ce soir !
 
Je déclare ma variable globale => int var_globale;
*Dans une 1ère fonction, je lui donne une valeure => var_globale=3;
*Dans une 2nd fonction, je peux l'afficher => printf("%d",var_globale);
*Dans une 3ème fonction, je peux réinitialise à 0 => var_globale=0;
 
Un truc dans le genre quoi....j'ai plus qu'è bien faire attention de ne pas changer sa valeur n'importe quand..
 
J'espère que je réucirai cette fois-ci ! :hello: (hm, j'espère ne pas evenir de si tôt!  :non: )
 
 
Merci encore...


Message édité par ares9907 le 03-04-2005 à 14:29:44
Reply

Marsh Posté le 03-04-2005 à 20:16:48    

ares9907 a écrit :

UTILISER DES VARIABLES GLOBALES !!!


Emmanuel va apprécier, tout ça pour en arriver là [:rofl]

Reply

Marsh Posté le 03-04-2005 à 21:48:24    

ares9907 a écrit :

J'ai trouvé la solution à mon problème !!!
 
UTILISER DES VARIABLES GLOBALES !!!


Je sors...  


---------------
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 04-04-2005 à 00:16:53    


pense a cramer l'auteur du bouquin avant :D


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
Reply

Marsh Posté le 04-04-2005 à 00:22:03    

ares9907 a écrit :

EUREKA !!!  :bounce:  
 
J'ai trouvé la solution à mon problème !!!
 
UTILISER DES VARIABLES GLOBALES !!!


 
ouasi c'est bien , tu peut te pendre direct  :sweat:

Reply

Marsh Posté le 04-04-2005 à 08:31:40    

roooooooooooh !
J'ai tout lu pour arriver à ça :sweat:  

Citation :

UTILISER DES VARIABLES GLOBALES !!!

Reply

Marsh Posté le 04-04-2005 à 08:43:52    

Affreux ...   :pfff:     :lol:

Reply

Marsh Posté le 04-04-2005 à 10:23:26    

Mais putain !! Ce n'est pas possible de donner des cours de C à des étudiants non-informaticiens :pfff:
 
Qu'on nous laisse faire notre métier, ces enfoirés ne jouent pas dans la bonne cour!
 
Je n'hésiterais pas à incendier l'auteur du livre qui ne fait aucune recommendations, affligeant
 
A faire :

  • Passer des paramètres par référence le plus souvent possible
  • Récupérer des valeurs par référence le plus souvent possible
  • Initialiser toutes les références
  • Remplacer les variables globales par des données membres depuis des objets locaux (en POO)


A ne pas faire :

  • Renvoyer une référence à un objet local
  • Utiliser des variables globales sans nécessité
  • Utiliser des pointeurs lorsqu'il est possible de se servir des références
  • Confondre les deux opérations de déclarations de pointeurs et de l'opération de déférencement (*)
  • Confondre l'opérateur de référencement et l'opérateur d'adresse (& )  

Reply

Marsh Posté le 04-04-2005 à 21:13:03    

python a écrit :


 
A faire :

  • Passer des paramètres par référence le plus souvent possible
  • Récupérer des valeurs par référence le plus souvent possible

(& )


 
Ouais, heu, je sais, j'ai un cours la dessus, mais, je ne pige pas tellement le truc  :??:  
Mais à parament, j'ai discuté avec un gas qui gère bien la programmation en C, et je lui ai parlé des variables globales, il ma dit "C'es sur, ça serait plus simple, que d'utiliser des pointeurs et tout le tralala..."
Enfin, à parament, il faut bien faire gaffe en utilisant les varaibles globales....
 
Enfin, désolé, d'écrire des horreures, ce n'est pas que je n'aime pas la programmation ! :ouch:  
Mais, que je ne connais surement pas suffisament mes cours  :whistle: !Enfin, avec tout le reste que j'ai a coté ce n'est pas évident ! :pt1cable:  
 
MERCI de vos réponses !!!!
 
PS: Merci beaucoup Emmanuel  :(


Message édité par ares9907 le 04-04-2005 à 21:15:33
Reply

Marsh Posté le 04-04-2005 à 21:16:14    

vi, essaye couture peut-être ?   :whistle:


Message édité par cricri_ le 04-04-2005 à 21:16:31
Reply

Marsh Posté le 04-04-2005 à 21:20:22    

python a écrit :


A faire :

  • Passer des paramètres par référence le plus souvent possible
  • Récupérer des valeurs par référence le plus souvent possible



Le terme 'par référence' n'existe pas en C. Les passages de paramètres sont exclusivement par valeur en C. Si on doit passer une adresse, on utilise un paramètre pointeur explicite dont la valeur est cette adresse. Ensuite, on utilise explicitement l'opérateur de déréférencement. Comme ça on sait ce qu'on fait (contrairement à d'autres langages que je ne citerais pas...)


---------------
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 04-04-2005 à 21:29:44    

cricri_ a écrit :

vi, essaye couture peut-être ?   :whistle:


 
Non, moi c'est plutot mécanique des fluide, electromagnétisme (hard!) mécanique des sytemes! Et maths !! :p
 

Citation :

Le terme 'par référence' n'existe pas en C.


 
Hm, dans mon cours d'informatique j'ai : * Passage par réfécenre ou par adresse
                                         * Passage par valeur  
 
A moins que ce soit en C++ ??
Pourtant, ne prof nous a dis qu'il n'y avait pas "beaucoup" de changement entre C et C++, enfin, quelques-uns quand meme!Et si j'ai bien compris c'est bien du C qu'il nous apprends !!! :pt1cable:  
En plus, mes programmes, c'est du C, et je les mets en *.cpp ! Mais ça, aucune importance ??
 


Message édité par ares9907 le 04-04-2005 à 21:30:45
Reply

Marsh Posté le 04-04-2005 à 21:30:07    

Emmanuel Delahaye a écrit :

Le terme 'par référence' n'existe pas en C. Les passages de paramètres sont exclusivement par valeur en C. Si on doit passer une adresse, on utilise un paramètre pointeur explicite dont la valeur est cette adresse. Ensuite, on utilise explicitement l'opérateur de déréférencement. Comme ça on sait ce qu'on fait (contrairement à d'autres langages que je ne citerais pas...)


 
merde je parlais du C++
 
Je croyais que le & servait à ça en C comme en Pascal. Alors là c'est une nuance qui est souvent source confusion dans les livres de C et de C++
 
Je dois réviser mes notions :jap:

Reply

Marsh Posté le 04-04-2005 à 21:38:00    

ares9907 a écrit :

Citation :

Le terme 'par référence' n'existe pas en C.


 
Hm, dans mon cours d'informatique j'ai : * Passage par référence ou par adresse
                                         * Passage par valeur  
 
A moins que ce soit en C++ ??


Probablement, oui. Le C et le C++ sont deux langages différents. Il ne faut pas les mélanger.

Citation :


Pourtant, le prof nous a dit qu'il n'y avait pas "beaucoup" de changements entre C et C++,


Peu importe le nombre de différences, ce sont des langages différents, c'est tout.
 
http://david.tribble.com/text/cdiffs.htm

Citation :


 enfin, quelques-uns quand meme!Et si j'ai bien compris c'est bien du C qu'il nous apprends !!!
En plus, mes programmes, c'est du C, et je les mets en *.cpp ! Mais ça, aucune importance ??


Il me semble t'avoir déjà dit que les sources C devaient avoir l'extension .c (Ni .C, ni .cpp), sinon, tu risques de ne pas invoquer le bon compilateur. (Beaucoup d'IDE couvrent C et C++)
 
http://forum.hardware.fr/forum2.ph [...] 8#t1033512


Message édité par Emmanuel Delahaye le 04-04-2005 à 21:40:25

---------------
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 04-04-2005 à 21:42:09    

Hm, mais alors mes cours sont mélange de C et de C++ !?!

Reply

Marsh Posté le 04-04-2005 à 21:48:49    

ares9907 a écrit :

Hm, mais alors mes cours sont mélange de C et de C++ !?!


Au cas où tu ne l'aurais pas encore compris, change d'école et fait toi rembourser...


---------------
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 04-04-2005 à 21:52:56    

Hm, je ne suis pas en école d'informatique non plus !:p
 
Et puis peut-être est-ce moi qui fait confusion ...et qui ai considéré que " C ~ C++ " en je ne sais quel point !? :??:
Enfin, je crois que j'ai plutôt interêt  bien relir mes cours !
 


Message édité par ares9907 le 04-04-2005 à 22:01:47
Reply

Marsh Posté le 04-04-2005 à 22:01:10    

ares9907 a écrit :

Hm, mais alors mes cours sont mélange de C et de C++ !?!


Ben change d'école :o

Reply

Marsh Posté le 04-04-2005 à 22:28:15    

ares9907 a écrit :

Hm, je ne suis pas en école d'informatique non plus !:p

Oui oui, on avait bien remarqué...
 

ares9907 a écrit :

Et puis peut-être est-ce moi qui fait confusion ...et qui ai considéré que " C ~ C++ " en je ne sais quel point !? :??:

Le C++ est une évolution majeure du C qui intègre, entre autres, la notion d'objet. De plus, le C est devenu un sous-ensemble du C++. Ca veut dire qu'un programme écrit en C est parfaitement compris par un compilateur C++.
 

ares9907 a écrit :

Mais à parament, j'ai discuté avec un gas qui gère bien la programmation en C, et je lui ai parlé des variables globales, il ma dit "C'es sur, ça serait plus simple, que d'utiliser des pointeurs et tout le tralala..."  
Enfin, à parament, il faut bien faire gaffe en utilisant les varaibles globales....

Apparemment, tu devrais aussi bien faire gaffe avec qui tu parles...
 

ares9907 a écrit :

Enfin, je crois que j'ai plutôt interêt à bien relir mes cours !

Voire même à les apprendre...


Message édité par Sve@r le 04-04-2005 à 22:29:29
Reply

Marsh Posté le 04-04-2005 à 22:30:53    

Arf, je connais quand meme une partie de mes cours ! :p
 
Enfin, mais, c'est quoi le probelemes au juste avec les variables globales ?

Reply

Marsh Posté le 04-04-2005 à 22:40:10    

ares9907 a écrit :

Arf, je connais quand meme une partie de mes cours ! :p
 
Enfin, mais, c'est quoi le probelemes au juste avec les variables globales ?


 
Au-moins tu es ouvert d'esprit... c'est bien
 
Il y a 2 problèmes inhérents à l'utilisation d'une variable globale qui arrivent lorsqu'on travaille sur de gros programmes surtout en environnement multiprogrammeurs  
1) tu n'es pas forcément au courant de toutes les variables globales créées/définies par les autres programmeurs. Tu peux, dans ton coin, développer ta propre fonction et créer dans cette dernière une variable de même nom que la globale. Dans ce cas, la globale est masquée par ta variable locale. C'est un peu ennuyeux car, dans ta fonction, la globale ne sert pas. Donc pourquoi avoir une globale si, à un endroit, on ne s'en sert pas ?  
 
2) si jamais un des programmeurs fait une grosse bourde et que la globale perd accidentellement sa valeur pendant le déroulement du programme, tu auras énormément de mal à retracer la cause de l'erreur et l'endroit où la globale a été malencontreusement modifiée. Alors qu'avec des variables locales la recherche est plus réduite.  
 
Pour résumer, ce n'est pas mauvais d'utiliser des globales, c'est mauvais de mettre des globales sans en avoir réellement besoin. Si c'est juste pour éviter de passer un paramètre à une fonction, on entre alors dans les notions "programmation porc"...  
 
Petite astuce de programmeur moins crado que les autres: Si tu utilises une variable globale dans une fonction, redéclare ta variable en "extern" dans ta fonction. Ainsi, si tu fais une recherche de "qui est-ce qui a touché à la globale" tu pourras la trouver plus facilement...  
 
Exemple :

Code :
  1. int maVariableGlobale;
  2. void fonction()
  3. {
  4.     extern int maVariableGlobale;
  5.     maVariableGlobale=...;
  6. ...
  7. }

 
 
Cette déclaration "extern" indique au compilateur que la variable a été définie ailleurs (en l'ocurrence 4 lignes dessus) et indique aux autres programmeurs que si tu touches à la variable globale ce ne sera pas par accident. Ce n'est pas obligatoire mais c'est plus "propre" !!!

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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