| La programmation | |
|
+36pouale meteskis Choco-sama Dragongaze13 Wraithslayer/HD Kotomine Naqqah kilam1110 wolftag valentinos garywiss6 AristA Sogeking Chroniker Falco Empty AlexRE Awakeing Grade Mod Godboy coco Arvester Blizzard Krok Shakuras Raspberyl Slump Antheor guigui kun Quelqu'un krosk Toshibashin Relm Ccd-ToF NeoKakashi 40 participants |
|
Auteur | Message |
---|
AlexRE Admin trop trizo Lv 65
Nombre de messages : 29934
| Sujet: Re: La programmation Mer 29 Avr 2009, 18:55 | |
| - valentinos a écrit:
- J'ai trouvé il faut remplacé les lignes suivantes :
- Code:
-
char nombreMystere=0; char nombreChoisisParLeJoueur=0; par : - Code:
-
int nombreMystere=0; int nombreChoisisParLeJoueur=0; mais je n'ai pas compris pourquoi, alors si quelqu'un a une explication je suis preneur Ah, en effet, "char" signifie une variable qui prend pour valeur du texte (une lettre ou plusieurs), pas des chiffres. D'où le problème. | |
|
| |
Empty Mangeur de manettes Lv 65
Nombre de messages : 16363 Age : 38
| Sujet: Re: La programmation Mer 29 Avr 2009, 18:58 | |
| Ouais "Char" c'est bien souvent "un seul caractère" ... D'ailleurs dans les langages de bas niveau qui possèdent des chaines de type "String" je n'ai jamais compris à quoi ça sert d'y laisser des "char" :/
Peut-être par soucis de dynamisme, genre un Char occupe moins de place en mémoire qu'un String (lol c'est vrai dans tous les domaines, pas seulement en programmation^^) donc mieux quand on veut demander à l'utilisateur d'entrer "O/N" pour "Oui/Non" ? | |
|
| |
valentinos Maker No Life Lv 31
Nombre de messages : 1493 Age : 30
| Sujet: Re: La programmation Mer 29 Avr 2009, 19:07 | |
| Merci beaucoup ( moi je croyais que char contenait une valeur allant jusqu'a 128 sauf si on utilise unsigned char ce qui permet d'entrer une valeur jusqu'a 255 Oo ).
Valentinos ____________ - Citation :
- [00:49:30] falco a été kické par choco-sama
[00:49:30] Falco : ok | |
|
| |
valentinos Maker No Life Lv 31
Nombre de messages : 1493 Age : 30
| Sujet: Re: La programmation Jeu 30 Avr 2009, 11:26 | |
| Je double post à cause d'un nouveau problème dans ce code : - Code:
-
// c'est un jeu de plus ou moins ou le but est de trouver le nombre tiré au sort par l'ordinateur. Il a été réalisé par valentinos à l'aide du site du zéro
#include <stdio.h> #include <stdlib.h> #include <time.h>
int generNombre (const char MIN, const long MAX, int nombreMystere) { nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; return nombreMystere;}
void compareNombres (int nombreMystere, int nombreChoisisParLeJoueur, long nombreDeCoupJoue) { if (nombreChoisisParLeJoueur>nombreMystere) { printf("\n\nC'est moins !\n\n"); } else if (nombreChoisisParLeJoueur<nombreMystere) { printf("\n\nC'est plus ! \n\n"); } else if (nombreChoisisParLeJoueur==nombreMystere) { printf(" \nBravo vous avez trouve le nombre mystere en %ld coups !", nombreDeCoupJoue); }}
int main() { const long MIN=0, MAX=100; int nombreMystere=0, nombreChoisisParLeJoueur=0; long nombreDeCoupJoue=0;
srand(time(NULL));
generNombre (MIN, MAX, nombreMystere);
do {printf("Quel est le nombre ? "); nombreDeCoupJoue++; scanf("%ld", &nombreChoisisParLeJoueur); compareNombres(nombreChoisisParLeJoueur, nombreMystere, nombreDeCoupJoue); } while (nombreChoisisParLeJoueur!=nombreMystere);
return 0; }
C'est le même programme qu'auparavant mais j'utilise des fonctions, le problème c'est qu'il affiche toujours que le nombre généré est supèrieur à celui qu'on a entré Oo... Valentinos ____________ - Citation :
- [00:49:30] falco a été kické par choco-sama
[00:49:30] Falco : ok | |
|
| |
Empty Mangeur de manettes Lv 65
Nombre de messages : 16363 Age : 38
| Sujet: Re: La programmation Jeu 30 Avr 2009, 11:37 | |
| Elle est où ta fonction? Y en a pas Et tu as mis toutes tes conditions hors de la boucle While normal que ça ne fonctionne pas ^^ En gros avec le code que tu as là ça va juste incrémenter "nombreDeCoupJoue" à chaque fois qu'on entrera quelque chose dans "nombreChoisisParLeJoueur" . EDIT: Ah non, j'ai rien dit, je viens de voir ta fonction (pour une VOID elle a bien beaucoup d'arguments ^^). RE-EDIT: Finalement oublie ce que j'ai écrit, je suis pas encore bien réveillé je regarderai après ^^ | |
|
| |
valentinos Maker No Life Lv 31
Nombre de messages : 1493 Age : 30
| Sujet: Re: La programmation Jeu 30 Avr 2009, 11:50 | |
| Elle n'a que 3 arguments mais ils ont des noms longs , il y a une deuxième fonction juste en dessous des include , c'est elle gui génère le nombre aléatoire... Si tu cherche le srand il est dans main parce qu'il faut l'exécuter une seule fois normalement ou je me trompe Valentinos ____________ - Citation :
- [00:49:30] falco a été kické par choco-sama
[00:49:30] Falco : ok | |
|
| |
Empty Mangeur de manettes Lv 65
Nombre de messages : 16363 Age : 38
| Sujet: Re: La programmation Jeu 30 Avr 2009, 12:18 | |
| Dans tes conditions, essaye un peu sans utiliser de ELSE IF. Juste des If: - Code:
-
if (nombreChoisisParLeJoueur>nombreMystere) { printf("\n\nC'est moins !\n\n"); } if (nombreChoisisParLeJoueur<nombreMystere) { printf("\n\nC'est plus ! \n\n"); } if (nombreChoisisParLeJoueur==nombreMystere) { printf(" \nBravo vous avez trouve le nombre mystere en %ld coups !", nombreDeCoupJoue); }
Juste pour voir ce qu'il va te donner. | |
|
| |
valentinos Maker No Life Lv 31
Nombre de messages : 1493 Age : 30
| Sujet: Re: La programmation Jeu 30 Avr 2009, 12:22 | |
| Ca ne change rien Valentinos ____________ - Citation :
- [00:49:30] falco a été kické par choco-sama
[00:49:30] Falco : ok | |
|
| |
AlexRE Admin trop trizo Lv 65
Nombre de messages : 29934 Age : 37
| Sujet: Re: La programmation Jeu 30 Avr 2009, 13:17 | |
| Pour vérifier où ça bugue, affiche le contenu de tes variables à la fin de ton programme, car ca vient forcément de l'une d'entre elle. C'est rapide à faire et très efficace. ____________ - Relm a écrit:
- Merci pour la confirmation Gary et fuck my life.
| |
|
| |
Empty Mangeur de manettes Lv 65
Nombre de messages : 16363 Age : 38
| Sujet: Re: La programmation Jeu 30 Avr 2009, 14:20 | |
| Et j'y ai même pas pensé... Je me sens nul tout à coup ^^ | |
|
| |
valentinos Maker No Life Lv 31
Nombre de messages : 1493 Age : 30
| Sujet: Re: La programmation Jeu 30 Avr 2009, 14:51 | |
| La variable nombreMystere est toujours égale à zéro, alors que normalement elle est choisies aléatoirement entre 0 et 100...
Valentinos ____________ - Citation :
- [00:49:30] falco a été kické par choco-sama
[00:49:30] Falco : ok | |
|
| |
AlexRE Admin trop trizo Lv 65
Nombre de messages : 29934 Age : 37
| Sujet: Re: La programmation Jeu 30 Avr 2009, 15:06 | |
| - Alex RoiEsper a écrit:
- Sauf erreur, tu dois mettre des paramètres dans la fonction rand : rand(0,3) pour avoir un nombre aléatoire entre 0 et 3 par exemple. (je crois)
T'as essayé/vérifié ça ? ____________ - Relm a écrit:
- Merci pour la confirmation Gary et fuck my life.
| |
|
| |
valentinos Maker No Life Lv 31
Nombre de messages : 1493 Age : 30
| Sujet: Re: La programmation Jeu 30 Avr 2009, 15:25 | |
| Ca provoque une erreur ( too many argument to function 'rand' -> trop d'argument pour la fonction rand ).
Valentinos ____________ - Citation :
- [00:49:30] falco a été kické par choco-sama
[00:49:30] Falco : ok | |
|
| |
AristA Maker qui quitte vraiment E-m Lv 60
Nombre de messages : 11008 Age : 27
| Sujet: Re: La programmation Jeu 30 Avr 2009, 15:55 | |
| peut être rand (3), comme en ruby : ça donne un chiffre aléatoire en 0 et 3 (1 ou 2 dans ce cas) | |
|
| |
valentinos Maker No Life Lv 31
Nombre de messages : 1493 Age : 30
| Sujet: Re: La programmation Jeu 30 Avr 2009, 16:10 | |
| Ca m'affiche le même message d'erreur que précédemment Valentinos ____________ - Citation :
- [00:49:30] falco a été kické par choco-sama
[00:49:30] Falco : ok | |
|
| |
AlexRE Admin trop trizo Lv 65
Nombre de messages : 29934 Age : 37
| Sujet: Re: La programmation Jeu 30 Avr 2009, 18:18 | |
| Ah non j'ai trouvé quelle était ton erreur. C'est un point très important dans la programmation, à faire attention. Il se situe à cette ligne : - Code:
-
generNombre (MIN, MAX, nombreMystere); Tu fais ici appel à une fonction qui retourne une valeur (c'est donc pas une fonction de type void). Le problème est que cette valeur qu'elle retourne doit être récupérée par une variable. Ici ce n'est pas le cas, la valeur du return est "perdue". Ton instruction ne sert à rien. La bonne instruction est donc : - Code:
-
nombreMystere= generNombre (MIN, MAX, nombreMystere); Ici la variable nombreMystere prend la valeur du return de la fonction generNombre(). Il ne faut jamais oublier ça. Par contre le paramètre nombreMystere de la fonction ne sert à rien au final. Je vais te montrer comment mieux faire. --- En outre, il y a une autre erreur grave dans ton programme ! Encore un truc important à faire gaffe ! C'est à cette ligne : - Code:
-
compareNombres(nombreChoisisParLeJoueur, nombreMystere, nombreDeCoupJoue); Le problème ici c'est l' ordre de tes variables d'entrée ! Lorsque tu définis ta fonction compareNombres() tu as ces deux variables inversées : - Code:
-
void compareNombres (int nombreMystere, int nombreChoisisParLeJoueur, long nombreDeCoupJoue) ...Or il faut vraiment bien respecter cet ordre ! Voici une façon de faire mieux, en corrigeant ces deux problèmes : - Code:
-
#include <stdio.h> #include <stdlib.h> #include <time.h>
int generNombre (const long MIN, const long MAX) { int nbMystere; nbMystere = (rand() % (MAX - MIN + 1)) + MIN; return nbMystere; }
void compareNombres (int nombreMystere, int nombreChoisisParLeJoueur, long nombreDeCoupJoue) { if (nombreChoisisParLeJoueur>nombreMystere) { printf("\n\nC'est moins !\n\n"); } else if (nombreChoisisParLeJoueur<nombreMystere) { printf("\n\nC'est plus ! \n\n"); } else if (nombreChoisisParLeJoueur==nombreMystere) { printf(" \nBravo vous avez trouve le nombre mystere en %ld coups !", nombreDeCoupJoue); } }
int main() { const long MIN=0, MAX=100; int nombreMystere=0, nombreChoisisParLeJoueur=0; long nombreDeCoupJoue=0;
srand(time(NULL));
nombreMystere = generNombre (MIN, MAX);
do { printf("Quel est le nombre ? "); nombreDeCoupJoue++; scanf("%ld", &nombreChoisisParLeJoueur); compareNombres(nombreMystere, nombreChoisisParLeJoueur, nombreDeCoupJoue); } while (nombreChoisisParLeJoueur!=nombreMystere);
return 0; } Tu remarqueras que dans la fonction generNombre() j'ai défini et utilisé une variable nbMystere qui est spécifique à cette fonction. Elle ne marche que pour cette fonction. J'aurais pu l'appeler nombreMystere comme tu avais fait, mais ça peut te tromper et te fait faire oublier de récupérer la valeur du return dans le programme principal comme tu as fait. Voila, si tu as des questions... ____________ - Relm a écrit:
- Merci pour la confirmation Gary et fuck my life.
| |
|
| |
valentinos Maker No Life Lv 31
Nombre de messages : 1493 Age : 30
| Sujet: Re: La programmation Jeu 30 Avr 2009, 18:34 | |
| J'ai tout compris, pour l'ordre des variables dans une fonction c'est le même que celui dans Main Valentinos ____________ - Citation :
- [00:49:30] falco a été kické par choco-sama
[00:49:30] Falco : ok | |
|
| |
AlexRE Admin trop trizo Lv 65
Nombre de messages : 29934 Age : 37
| Sujet: Re: La programmation Jeu 30 Avr 2009, 18:43 | |
| Oui, tu dois respecter l'ordre quand tu fais appel à une fonction. ____________ - Relm a écrit:
- Merci pour la confirmation Gary et fuck my life.
| |
|
| |
valentinos Maker No Life Lv 31
Nombre de messages : 1493 Age : 30
| Sujet: Re: La programmation Jeu 30 Avr 2009, 18:52 | |
| Avec le code que tu as corrigé j'ai essayé la programmation modulaire, pour cela j'ai créer un fichier main.h et j'ai rajouté ce code : - Code:
-
#include "main.h" au dessus de la fonction generNombre. Le code de main.h - Code:
-
int generNombre (const long, const long);
void compareNombre (int, int, long) Le débuggueur me dit qu'il y a des erreurs ligne 9, 31, 32, 34. Valentinos ____________ - Citation :
- [00:49:30] falco a été kické par choco-sama
[00:49:30] Falco : ok | |
|
| |
AlexRE Admin trop trizo Lv 65
Nombre de messages : 29934 Age : 37
| Sujet: Re: La programmation Jeu 30 Avr 2009, 19:47 | |
| Les lignes des erreurs ne m'avancent pas si tu me donnes pas le programme entier. Je connais pas encore la programmation modulaire (je m'en suis arrêté à là), mais j'imagine que c'est pas ce qu'il y a de plus complexe. A quoi correspondent tes deux lignes de main.h ? J'ai pas bien compris. ____________ - Relm a écrit:
- Merci pour la confirmation Gary et fuck my life.
| |
|
| |
valentinos Maker No Life Lv 31
Nombre de messages : 1493 Age : 30
| Sujet: Re: La programmation Jeu 30 Avr 2009, 20:47 | |
| Si tu veux je me suis basés sur le code que tu m'as donné qui marche bien mais j'ai rajouté une ligne de code qui me permet d'utiliser un header. Cela me permet de bouger mes fonctions sans me soucier de la place de main. Et les deux lignes de main.h servent à énoncer les fonctions mais main étant une fonction spécial il n'y figure pas.
Valentinos ____________ - Citation :
- [00:49:30] falco a été kické par choco-sama
[00:49:30] Falco : ok | |
|
| |
AlexRE Admin trop trizo Lv 65
Nombre de messages : 29934 Age : 37
| Sujet: Re: La programmation Jeu 30 Avr 2009, 20:49 | |
| Tu peux me montrer tes programmes entiers ? ____________ - Relm a écrit:
- Merci pour la confirmation Gary et fuck my life.
| |
|
| |
valentinos Maker No Life Lv 31
Nombre de messages : 1493 Age : 30
| Sujet: Re: La programmation Jeu 30 Avr 2009, 20:52 | |
| Main.h est en entier ( j'ai juste un commentaire en plus mais il est inutile, il annonce juste que c'est moi qui a créer le programme) et voici celui de main.c : - Code:
-
// c'est un jeu de plus ou moins ou le but est de trouver le nombre tiré au sort par l'ordinateur. Il a été réalisé par valentinos à l'aide du site du zéro
#include <stdio.h> #include <stdlib.h> #include <time.h> #include "main.h"
int generNombre (const long MIN, const long MAX) { int nbMystere; nbMystere = (rand() % (MAX - MIN + 1)) + MIN; return nbMystere; }
void compareNombres (long nombreMystere, int nombreChoisisParLeJoueur, long nombreDeCoupJoue) { if (nombreChoisisParLeJoueur<nombreMystere) { printf("\n\nC'est moins !\n\n"); } else if (nombreChoisisParLeJoueur>nombreMystere) { printf("\n\nC'est plus ! \n\n"); } else if (nombreChoisisParLeJoueur==nombreMystere) { printf(" \nBravo vous avez trouve le nombre mystere en %ld coups !", nombreDeCoupJoue); } }
int main() { const long MIN=0, MAX=100; long nombreMystere=0, nombreDeCoupJoue=0; int nombreChoisisParLeJoueur=0;
srand(time(NULL));
nombreMystere = generNombre (MIN, MAX);
do {printf("Quel est le nombre ? "); nombreDeCoupJoue++; scanf("%ld", &nombreChoisisParLeJoueur); compareNombres(nombreChoisisParLeJoueur, nombreMystere, nombreDeCoupJoue); } while (nombreChoisisParLeJoueur!=nombreMystere);
return 0; }
Valentinos PS : j'ai changé certain type de variables alors voici le code main.h qui correspond, je n'avais pas fait attention : - Code:
-
int generNombre (const long, const long);
void compareNombre (long, int, long)
____________ - Citation :
- [00:49:30] falco a été kické par choco-sama
[00:49:30] Falco : ok | |
|
| |
Awakeing Maker Ultime Lv 34
Nombre de messages : 1779 Age : 36
| Sujet: Re: La programmation Jeu 30 Avr 2009, 22:14 | |
| Zetes vraiment balèze, avec des noms de variables aussi longue j'arriverais même pas à déchiffrer un Hello World... ____________ - Citation :
- [22:55:39] Falco : de toute façon Mex c'est un triso
- Citation :
- [12:23:52] Falco : Le pire dans l'histoire c'est que je suis vraiment gay
| |
|
| |
AlexRE Admin trop trizo Lv 65
Nombre de messages : 29934 Age : 37
| Sujet: Re: La programmation Ven 01 Mai 2009, 00:13 | |
| J'en mets jamais des aussi longs (cylon haha ) moi non plus. Donc sauf erreur main.h ne contient que 2 lignes ? Quel intérêt ? Pourquoi ne pas les mettre directement dans main.c ? (d'ailleurs t'as oublié un point virgule à la fin d'une des lignes de main.h) ____________ - Relm a écrit:
- Merci pour la confirmation Gary et fuck my life.
| |
|
| |
Awakeing Maker Ultime Lv 34
Nombre de messages : 1779 Age : 36
| Sujet: Re: La programmation Ven 01 Mai 2009, 13:16 | |
| - Alex RoiEsper a écrit:
- J'en mets jamais des aussi longs (cylon haha ) moi non plus.
Donc sauf erreur main.h ne contient que 2 lignes ?
Quel intérêt ? Pourquoi ne pas les mettre directement dans main.c ? (d'ailleurs t'as oublié un point virgule à la fin d'une des lignes de main.h) Moi perso je n'ai même jamais fait de main.h de ma vie. Le truc c'est que en général je mets mes fonctions dans des .c et leurs décla dans des .h Mais si mon code est assez petit pour que les .C tiennent dans main, ben je les mets direct au dessus de la fonction main. ____________ - Citation :
- [22:55:39] Falco : de toute façon Mex c'est un triso
- Citation :
- [12:23:52] Falco : Le pire dans l'histoire c'est que je suis vraiment gay
| |
|
| |
Contenu sponsorisé
| Sujet: Re: La programmation | |
| |
|
| |
| La programmation | |
|