Aller au menu - Aller au contenu

Exercices pour débutants en C

Au menu : zSommeChiffres (nombres, algo)

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2  3  ...  12  13  14  15  16  17  18  ...  50  51  52  53  Suivante
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page Précédente  1  2  3  ...  12  13  14  15  16  17  18  ...  50  51  52  53  Suivante
Hors ligne May_Hop # Posté le 13/01/2009 à 21:06:32
Avatar

Reprise du dernier message de la page précédente :
Citation : crys'
D'accord, mais alors dans le default, il faut rempiler ce que tu as dépilé au début. Moi, je préfère dépiler uniquement quand c'est nécessaire.


Ah oui. Mais bon en même temps il suffit de rajouter une seule condition. La lisibilité du code serait largement mieux !


Quand tu fais un copier/coller dans un code, car c'est l'origine de cette répétition (sauf si erreur ;) ), il faut se poser des questions et voir si on ne peut pas éviter ces répétitions.
Hors ligne shareman # Posté le 13/01/2009 à 21:56:45
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

Citation : May_Hop
Quand tu fais un copier/coller dans un code, car c'est l'origine de cette répétition (sauf si erreur ;) ), il faut se poser des questions et voir si on ne peut pas éviter ces répétitions.

C'était tout réfléchi, ne t'inquiète surtout pas. ;)

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne May_Hop # Posté le 14/01/2009 à 10:26:48
Avatar

Je m'inquiète plutôt pour les débutants qui vont lire ton code et le prendre comme exemple. Car je trouve que tu donnes une mauvaise habitude. Mieux vaut découper son code en de multiples fonctions ... La relecture, ou une possible amélioration du code est d'autant plus facile.
Hors ligne shareman # Posté le 14/01/2009 à 19:13:18
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

Titre : zGame
mois : Janvier
Sujet : Révisions du cours de M@teo21

L'exercice !



L'exercice de ce mois-ci sera : un jeu : zGame !
Ce jeu sera d'un niveau simple afin qu'un maximum de débutants en C puissent le coder. Il est dans le même style que le jeu du pendu proposé par M@teo21 ici (lien). Il va vous permettre de pratiquer, mais pas contre, il n'y a pas de thème bien particulier, vous allez devoir réutiliser quasiment tout ce que vous savez (variables, conditions, boucles, nombres pseudo-aléatoires, calculs, etc.).

En plus, vous ne perdez rien, en vous entraînant, vous réalisez un jeu amusant et utile ! :) Let's go.

Le but du jeu



zGame est un grand classique parmi les jeux que l'on réalise pour s'entraîner.

Le programme vous tire une série de dix calculs mathématiques sur les tables de multiplication (oui, ceux qu'on bosse en primaire ^^ ). Le but du jeu est de trouver la bonne réponse à ces calculs le plus rapidement possible et en faisant le moins d'erreurs possibles.

À quoi doit ressembler votre programme ?



Le programme .. c'est à vous de le faire. :p
Vous allez donc commencer par afficher le nom du jeu (j'ai pris zGame, mais vous le nommez comme vous voulez) ainsi qu'une rapide présentation des règles. Ensuite, vous soumettez le joueur (l'utilisateur de votre programme) à une série de dix calculs comportant obligatoirement que 2 facteurs (un facteur, c'est l'un des termes d'une multiplication). Ces facteurs doivent obligatoirement être des nombres entiers compris entre 0 et 10, les deux inclus, et tirés pseudo-aléatoirement !

À la fin de cette série de calculs, vous affichez le temps total qu'a mis le joueur pour trouver les réponses (c'est parfois amusant ^^ ) ainsi que le nombre d'erreurs qu'il a pu faire.

On peut par exemple imaginer ceci :
Code : Console
-zGame- : Entraînez votre cerveau au calcul mental !

 Le programme va vous soumettre dix calculs sur les tables de multiplication,
 calculs que vous allez devoir résoudre le plus rapidement possible et ... de tête !

Près ? Appuyez sur entrer pour commencer...

 5*9 = 45
 3*4 =
 [...]

Vous avez mis 15.234 seconde(s) et vous avez 1 erreur(s) !
Appuyez sur entrer pour quitter...


Pour le calcul du temps qu'a mis le joueur à résoudre la série des dix calculs, jetez un oeil à la correction de zTri (lien). Pour le tirage des valeurs pseudo-aléatoires, j'utilise rand()%11 ce qui tire une valeur entre 0 et 10, les deux inclues. Je vous conseille aussi de lire le tutoriel de Natim sur les nombres aléatoires (lien).

Je crois que vous avez suffisamment d'informations, maintenant, c'est à vous de coder ! Au boulot ! :p

Je posterai la correction dans trois semaines. Je donnerai plus de détails sur cette date dés que possible.

Have a lot of fun !

crys
Édité le 14/01/2009 à 19:33:15 par shareman

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne candide # Posté le 15/01/2009 à 00:14:20
"In C ode we trust"
Avatar

Citation : crys'

Ce jeu sera d'un niveau simple afin qu'un maximum de débutants en C puissent le coder.

Je le trouve trop complexe.

Citation : crys'


En plus, vous ne perdez rien, en vous entraînant, vous réalisez un jeu amusant et utile ! :)
(...)
zGame est un grand classique parmi les jeux que l'on réalise pour s'entraîner.


Pour une complexité identique, j'aurais trouvé plus excitant de coder mots/minute.


 
Hors ligne Eusebus # Posté le 15/01/2009 à 01:45:08
Geek mangeur de cookies
Avatar

Je viens de terminer l'exercice, mais...

Petite question : les fonctions fgets et scanf sont blocantes, ainsi l'utilisation de clock() n'est pas possible par non représentative du temps qu'il est réellement écoulé (vu que clock() regarde uniquement le temps à partir de l'utilisation cpu). J'ai utilisé les fonctions time() et difftime() pour calculer le temps de l'exercice, néanmoins la précision n'est que de la seconde.

Alors, certes, dans un tel exercice, les millièmes n'ont pas vraiment d'importance et ma solution marche parfaitement. Mais existerait-il une alternative pour obtenir une telle précision ?
Édité le 15/01/2009 à 01:45:33 par Eusebus

"Ce qui est affirmé sans preuve peut être nié sans preuve" Euclide
"Tout ensemble inductif admet au moins un élément maximal." Lemme de Zorn
 
Hors ligne candide # Posté le 15/01/2009 à 01:49:42
"In C ode we trust"
Avatar

Citation : Eusebus

Mais existerait-il une alternative pour obtenir une telle précision ?


De façon portable, je ne pense pas.


 
Hors ligne shareman # Posté le 15/01/2009 à 18:49:28
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

Citation : candide
Je le trouve trop complexe.

Il n'est en aucun cas plus complexe que le pendu.
Citation : candide
Pour une complexité identique, j'aurais trouvé plus excitant de coder mots/minute.

Je ne suis pas du tout d'accord.

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne L'Ombre Blanche # Posté le 16/01/2009 à 19:08:41
Hommage à Ewilan.
Avatar

Ville : Lyon
Pays : France métropolitaine

Yeah, je m'y met tout de suite :) , dommage que ça ne parle pas de pointeurs...
(Ou alors je suis vraiment nul et je les ai pas vu passé... :lol: )

Avec du temps, rien n'est impossible.

Sans rancune hein? ;) : Lien
 
Hors ligne shareman # Posté le 16/01/2009 à 21:42:22
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

Non, il n'y a pas encore eu d'exercice ayant uniquement pour but de vous entraîner aux pointeurs. Ca ne va pas tarder. ^^

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne Jaloyan1 # Posté le 16/01/2009 à 22:17:35
Sms = portable,forum = clavier
Avatar

tiens belle initiative de proposer un tel jeu, mais j'aurai fait un niveau 2 qui consistait à utiliser les + - * /
niveau 2 : faire des équations du 1er degré(assez simple pour du cacul mental) et
niveau 3 : des identités remarquables(tel que (x+5)² ou 31²) à développer(ça c'est plus dur).
Édité le 16/01/2009 à 22:18:24 par Jaloyan1

Si quelqu'un vous dit : "Je me tue à vous le répéter", laissez-le mourir.
:D int x = 0; x >?= (a < b)?((a < c)?((a < d)?a:d):((c < d)?c:d)):((b < c)?((b < d)?b:d):((c < d)?c:d));
Quelqu'un a compris ce que ce code fait? :-°
 
Hors ligne zx-spectrum # Posté le 16/01/2009 à 22:22:03
http://www.worldofspectrum.org
Avatar

Citation : Jaloyan1
tiens belle initiative de proposer un tel jeu, mais j'aurai fait un niveau 2 qui consistait à utiliser les + - * /
niveau 2 : faire des équations du 1er degré(assez simple pour du cacul mental) et
niveau 3 : des identités remarquables(tel que (x+5)² ou 31²) à développer(ça c'est plus dur).


je crois pas que c'est nécessaire de compliquer à outrance, c'est fait pour les débutants, pour qu'un maximum de participants puisse réaliser "quelque chose" car pour l'instant a priori on est que 6 ou 7 a avoir fait tous les exo jusqu'a present !
@+
Hors ligne birdroun # Posté le 16/01/2009 à 22:36:09

Avec le rand j'ai vachement de mal a obtenir des bon nombres aleatoires
Souvent le meme nombre se repete sur la ligne suivant si on est rapide vu que sa se base sur le temps :/
Et j'arrive pas a utliser la fontion hasard donnée
Enfin je vais revoir sa
Hors ligne Eusebus # Posté le 16/01/2009 à 22:55:44
Geek mangeur de cookies
Avatar

Petite astuce pour srand(). Au lieu de faire

Code : C
1
srand(time(NULL));


on peut aussi faire un

Code : C
1
srand(getpid() * time(NULL));


getpid() est définie dans unistd.h

"Ce qui est affirmé sans preuve peut être nié sans preuve" Euclide
"Tout ensemble inductif admet au moins un élément maximal." Lemme de Zorn
 
Hors ligne freecircus # Posté le 16/01/2009 à 23:06:17
"Se coucher tard nuit"
Avatar

Citation : birdroun
Avec le rand j'ai vachement de mal a obtenir des bon nombres aleatoires
Souvent le meme nombre se repete sur la ligne suivant si on est rapide vu que sa se base sur le temps :/

Si le même nombre se répète dans la même seconde, c'est que tu appelles srand(time(NULL)) à chaque fois que tu veux générer un nombre aléatoire, alors que srand() ne sert qu'à initialiser le générateur. Appel srand() une fois au début de main() et seulement rand() quand tu as besoin d'un nouveau nombre aléatoire ;)
Édité le 16/01/2009 à 23:07:21 par freecircus

...clap clap! Image utilisateur Image utilisateur
 
Hors ligne Floooder # Posté le 16/01/2009 à 23:07:44

Citation
Petite astuce pour srand(). Au lieu de faire
Code : C
1
srand(time(NULL));

on peut aussi faire un

Code : C
1
srand(getpid() * time(NULL));

getpid() est définie dans unistd.h


Oui, ou alors utiliser le dow jones la temperature a vladivostock, et rajouter l'age du capitaine...

Ce qui ne changera pas grand chose au resultat

Citation
Avec le rand j'ai vachement de mal a obtenir des bon nombres aleatoires
Souvent le meme nombre se repete sur la ligne suivant si on est rapide vu que sa se base sur le temps :/
Et j'arrive pas a utliser la fontion hasard donnée
Enfin je vais revoir sa


Il faut que tu n'utilise srand qu'une seule fois dans tout ton programme. Met le au debut du main, avant toutes les boucles. Ca devrait resoudre ton problème

/grilled
Édité le 16/01/2009 à 23:09:06 par Floooder
Hors ligne Eusebus # Posté le 16/01/2009 à 23:49:39
Geek mangeur de cookies
Avatar

Citation : Flooder
Oui, ou alors utiliser le dow jones la temperature a vladivostock, et rajouter l'age du capitaine...


Super constructif, merci.

D'autant plus que personnellement j'ai observé un changement entre les deux. Mais bon, c'est surement du à l'âge du capitaine...

"Ce qui est affirmé sans preuve peut être nié sans preuve" Euclide
"Tout ensemble inductif admet au moins un élément maximal." Lemme de Zorn
 
Hors ligne python-guy # Posté le 16/01/2009 à 23:54:29
Vive archLinux.
Avatar

Un changement dans de l'aléatoire, mouais.

Image utilisateur
 
Hors ligne birdroun # Posté le 17/01/2009 à 00:23:46

Maintenant j'aimerais bien savoir comment faire pour aligner les multiplications je m'explique
Code : Console
9 * 8 =
2 * 3 =   //tout va bien
10 * 4 =  //sa se decale
10 * 10 = //et encore

ce resultat serait mieu
Code : Console
9  * 8  =
2  * 3  =  
10 * 4  = 
10 * 10 =

car j'aimerais ajouter juste apres la bonne reponse colorée en vert si juste et en rouge si faux


9 * 8 = 72
2 * 3 = 6
10 * 4 = 30 ==> 40
10 * 10 = 100


Édité le 17/01/2009 à 00:24:31 par birdroun
Hors ligne Eusebus # Posté le 17/01/2009 à 00:29:19
Geek mangeur de cookies
Avatar

Citation : python-guy
Un changement dans de l'aléatoire, mouais.


C'est du pseudo-aléatoire, pas de l'aléatoire pur... Bref, le topic n'est pas là pour débattre de cela.

"Ce qui est affirmé sans preuve peut être nié sans preuve" Euclide
"Tout ensemble inductif admet au moins un élément maximal." Lemme de Zorn
 
Hors ligne mota # Posté le 17/01/2009 à 18:32:05
Berserkr qui mord
Avatar

études : Epitech

Citation : birdroun
Maintenant j'aimerais bien savoir comment faire pour aligner les multiplications


man printf(3)

It's me !
 
Hors ligne python-guy # Posté le 17/01/2009 à 19:13:39
Vive archLinux.
Avatar

Citation : mota
Citation : birdroun
Maintenant j'aimerais bien savoir comment faire pour aligner les multiplications


man printf(3)

man 3 printf

Image utilisateur
 
Hors ligne mota # Posté le 17/01/2009 à 19:26:02
Berserkr qui mord
Avatar

études : Epitech

Citation : python-guy
Citation : mota
Citation : birdroun
Maintenant j'aimerais bien savoir comment faire pour aligner les multiplications


man printf(3)

man 3 printf


bon bah si tu veux jouer au plus cretin: printf(3)

Voila, c'est correct pour de bon.

It's me !
 
Hors ligne candide # Posté le 17/01/2009 à 19:51:23
"In C ode we trust"
Avatar

Citation : mota

man printf(3)


Dans le genre aide-pour-enfoncer c'est réussi.

Un petit exemple vaut mieux qu'une long page man :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <stdio.h>

int main(void)
{
    int x=9;
    printf("calcul : %2d x %2d = %3d\n", x,x,x*x);
    printf("calcul : 10 x 10 = 100\n");

    return 0;
}


Code : Console
calcul :  9 x  9 =  81
calcul : 10 x 10 = 100

Process returned 0 (0x0)   execution time : 0.015 s
Press any key to continue.


EDIT : Sans compter qu'il existe d'autres façons de résoudre le problème.


Édité le 17/01/2009 à 19:52:48 par candide


 
Hors ligne mota # Posté le 17/01/2009 à 20:19:37
Berserkr qui mord
Avatar

études : Epitech

Citation : candide

Un petit exemple vaut mieux qu'une long page man :


Non.

Donner une solution n'est jamais un bon conseil.

D'ailleurs, tu donnes ton exemple sans expliquer le pourquoi de la syntaxe, ce a quoi elle correspond, quel est son nom, j'en passe et des meilleurs. Dans le genre aide-pour-encourager-l'ignorance, c'est reussi.

man est un bon conseil, on y trouve toujours ce que l'on cherche, sauf si on est faineant.
Édité le 17/01/2009 à 20:25:42 par mota

It's me !
 
Hors ligne zx-spectrum # Posté le 17/01/2009 à 21:20:02
http://www.worldofspectrum.org
Avatar

bonjour:
pour motta et phyton guy = -1
Je vous rapelle qu'il y a des novices, c'est pas la peine de les décourager, surtout que la demande de birdroun est "propre". Si vous n'avez pas envie de lui repondre, abstenez vous !

Candide lui donne une solution correcte, qu'il peut tester, la moindre des choses c'est de respecter son choix !

Faites un "feed back " du temps ou vous avez débuté. Vous avez oublié ?
@+
Hors ligne Camp0us # Posté le 17/01/2009 à 21:24:11
Fichtre !!
Avatar

Petite solution pour zBinary (compréhensible pour des gens ayant mon niveau...)

    Code : C
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	long nombreDecimal;
    	long reste[1000] = {0};
    	int a = 0;
    
    	printf("Veuillez entrer un nombre entier positif s'il vous plait: ");
    	scanf("%ld", &nombreDecimal);
    
    	while(nombreDecimal != 0)
    	{
    		reste[a] = nombreDecimal % 2;
    		nombreDecimal = nombreDecimal / 2;
    		a++;
    	}
    	printf("\nLe meme nombre en binaire est: ");
    
    	while(a != 0)
    	{
    		a--;
    		printf("%ld", reste[a]);
    	}
    	printf("\n");
    
    	return EXIT_SUCCESS;
    }
    



:magicien: Rien ne vaut la musique et le cinéma :magicien:

 
Hors ligne shareman # Posté le 17/01/2009 à 21:42:23
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

L'algorithme que tu utilises est le même que celui utilisé dans la première solution donnée ici (lien). :)

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne zx-spectrum # Posté le 17/01/2009 à 21:43:31
http://www.worldofspectrum.org
Avatar

Citation : Camp0us
Petite solution pour zBinary (compréhensible pour des gens ayant mon niveau...)

    Code : C
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	long nombreDecimal;
    	long reste[1000] = {0};
    	int a = 0;
    
    	printf("Veuillez entrer un nombre entier positif s'il vous plait: ");
    	scanf("%ld", &nombreDecimal);
    
    	while(nombreDecimal != 0)
    	{
    		reste[a] = nombreDecimal % 2;
    		nombreDecimal = nombreDecimal / 2;
    		a++;
    	}
    	printf("\nLe meme nombre en binaire est: ");
    
    	while(a != 0)
    	{
    		a--;
    		printf("%ld", reste[a]);
    	}
    	printf("\n");
    
    	return EXIT_SUCCESS;
    }
    



effectivement c'est une solution (par division successive, dans la correction il en existe d'autre. Si tu l'as fait tout seul c'est bien, c'est un bon début.

--> avec cette méthode si tu fait des divisions succesives par un nombre a, et non par deux, tu obtients ta conversion en base a
@+
Hors ligne candide # Posté le 17/01/2009 à 23:35:00
"In C ode we trust"
Avatar

Citation : mota

man est un bon conseil, on y trouve toujours ce que l'on cherche, sauf si on est faineant.


Ben on n'a plus qu'à fermer le forum C du sdz qui est parcouru par un ramassis de fainéants et donner un lien vers les pages man ou, plutôt, vu qu'il est préférable de s'adresser à Dieu qu'à ses saints, un lien vers la Norme du langage C.

Et quand je parcours les messages que tu as postés sur le forum C du sdz, je vois que t'es bon pour donner des conseils mais jamais pour produire du code, du vrai code C. T'en fais pas je ne suis pas dupe. "In code we trust".


 
Hors ligne mota # Posté le 18/01/2009 à 01:53:25
Berserkr qui mord
Avatar

études : Epitech

J'ai pondu un code pour une correction d'un exercice ici parce que j'estimais que le sujet n'employait pas un vocabulaire exact. A toi de le retrouver, et si tu ne trouves pas beau, tant pis pour toi.

Avant d'etre dans une ecole j'ai toujours ete voir les man et maintenant que j'y suis, mes habitudes ne changent pas, a l'exception pres qu'avec un peu plus de niveau je vais aussi voir le code des outils dont je dispose, par simple curiosite.

Cette meme curiosite est un reel atout, en particulier en informatique, et boire les paroles d'un tiers ne mene jamais rellement a quelque chose de productif, que le demandeur de solution soit novice, ou non.

Donc oui, "man" est un excellent conseil.
Quant a la fermeture du forum C, je ne vois pas l'interet de sortir une telle extrapolation autre que pour aggraver tes propos et discrediter les miens : )

It's me !
 

Retour au forum "Langage C" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx