Comment saisir et controler des valeurs ds une fonction, et ... - C - Programmation
Marsh Posté le 02-04-2005 à 19:29:57
ares9907 a écrit : Voila, j'aimerai savoir, comment puis-je faire pour : |
http://mapage.noos.fr/emdel/notes.htm#saisie
Citation : 2/ Fonction2 : elle affiche les vlaeurs saisie ds "Fonction1", voir les utiliser! |
paramètres...
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é...
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... |
|
Quelle est la partie que tu ne comprends pas ?
Marsh Posté le 03-04-2005 à 09:15:59
Emmanuel Delahaye a écrit :
|
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??
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.
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:
|
le pointeur est initialisé avec l'adresse de 'a' (&a).
Citation : |
Oui.
Citation : |
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 : |
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 : |
rien de tout ça dans mon exemple basique...
Citation : |
Oui.
Citation : |
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 : |
Elle ne renvoie rien ! Elle modifie la valeur de la variable originale
Citation : |
Comme je l'ai déjà dit,
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 : |
inc() modifie la valeur de 'a' qui est dans la fonction appelante...
Citation : |
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
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 !!
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... |
Oui, tout à fait (évidemment, il serait peu judicieux de l'appeler inc()...)
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 !! 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 !!
Marsh Posté le 03-04-2005 à 11:02:47
Code :
|
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?
Marsh Posté le 03-04-2005 à 11:14:43
ares9907 a écrit :
|
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 :
|
Citation : |
J'aurais plutôt dit :
*p = valeur_saisie; |
Citation : |
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
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
Surement pour ça que je zap pas mal de chose !
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 ?
Marsh Posté le 03-04-2005 à 11:58:24
ares9907 a écrit : Je n'arrive pas trop a saisir sur quoi pointe p ? |
Ok. Je reprends et je détaille :
|
Rappel, en C, tous les passages de paramètres se font par valeur (copie de la valeur).
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....
Marsh Posté le 03-04-2005 à 12:08:21
ares9907 a écrit : Heu, je vais etre lourd, mais avec ton truc je peux : |
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
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)
Marsh Posté le 03-04-2005 à 12:39:16
Voici ma fonction principale:
Code :
|
Ici, c'est ma fonction "parametrage (lancée en appuyant sur 1 dans le switch):
Code :
|
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
Marsh Posté le 03-04-2005 à 14:14:44
EUREKA !!!
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 ! (hm, j'espère ne pas evenir de si tôt! )
Merci encore...
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à
Marsh Posté le 03-04-2005 à 21:48:24
ares9907 a écrit : J'ai trouvé la solution à mon problème !!! |
Je sors...
Marsh Posté le 04-04-2005 à 00:16:53
Emmanuel Delahaye a écrit : Je sors... |
pense a cramer l'auteur du bouquin avant
Marsh Posté le 04-04-2005 à 00:22:03
ares9907 a écrit : EUREKA !!! |
ouasi c'est bien , tu peut te pendre direct
Marsh Posté le 04-04-2005 à 08:31:40
roooooooooooh !
J'ai tout lu pour arriver à ça
Citation : UTILISER DES VARIABLES GLOBALES !!! |
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
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 :
A ne pas faire :
Marsh Posté le 04-04-2005 à 21:13:03
python a écrit :
(& ) |
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 !
Mais, que je ne connais surement pas suffisament mes cours !Enfin, avec tout le reste que j'ai a coté ce n'est pas évident !
MERCI de vos réponses !!!!
PS: Merci beaucoup Emmanuel
Marsh Posté le 04-04-2005 à 21:16:14
vi, essaye couture peut-être ?
Marsh Posté le 04-04-2005 à 21:20:22
python 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...)
Marsh Posté le 04-04-2005 à 21:29:44
cricri_ a écrit : vi, essaye couture peut-être ? |
Non, moi c'est plutot mécanique des fluide, electromagnétisme (hard!) mécanique des sytemes! Et maths !!
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 !!!
En plus, mes programmes, c'est du C, et je les mets en *.cpp ! Mais ça, aucune importance ??
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
Marsh Posté le 04-04-2005 à 21:38:00
ares9907 a écrit :
|
Probablement, oui. Le C et le C++ sont deux langages différents. Il ne faut pas les mélanger.
Citation : |
Peu importe le nombre de différences, ce sont des langages différents, c'est tout.
http://david.tribble.com/text/cdiffs.htm
Citation : |
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
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...
Marsh Posté le 04-04-2005 à 21:52:56
Hm, je ne suis pas en école d'informatique non plus !
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 !
Marsh Posté le 04-04-2005 à 22:01:10
ReplyMarsh 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..." |
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...
Marsh Posté le 04-04-2005 à 22:30:53
Arf, je connais quand meme une partie de mes cours !
Enfin, mais, c'est quoi le probelemes au juste avec les variables globales ?
Marsh Posté le 04-04-2005 à 22:40:10
ares9907 a écrit : Arf, je connais quand meme une partie de mes cours ! |
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 :
|
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" !!!
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