Jeu d'échec [Résolu]

Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
- - Dernière réponse : TheRogerFederer
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
- 24 sept. 2015 à 12:15
Bonjour, aujourd'hui je m'attaque au jeu d'échec voici l'énoncé :

programme echecs
nbgrains, total, k : numérique
debut
nbgrains <- 1
total <- 1
pour k de 2 à 64
nbgrains <- nbgrains * 2
total <- total + nbgrains
finpour
afficher total
fin


et moi j'ai codé cela :
// Programme principal
int main () {
	
	// Variables
	double nbgrains = 1 ;
	double total = 1 ;
	
	// boucle sur le jeu d'échecs
	for (int k = 2; k <= 64; ++k) 
		nbgrains = (nbgrains * 2) ;
		total += total + nbgrains ;
		

	// affichage du résultat
	printf(" Total : %lf\n ", total) ;
	
	getch () ;
	return 0 ;
	
}

Alors je sais que le getch n'est pas obligatoire ! Je pense aussi qu'il faut directement commencer avec le for car on ne peut pas lui dire d'entrez une valeur cette fois ?? Pcq il faut mettre 1 grains dans la 1ere case, ce qui est fait a l'initialisation, puis 2 grains a la 2ieme case, puis 4 grains a la 3ieme etc........................! Je ne pense pas que le printf de la fin soit juste non plus au passage !
Afficher la suite 

5 réponses

Messages postés
3797
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 novembre 2019
90
0
Merci
Bonjour.

Ça me parait correct, à part deux choses:
  • Il te manque des accolades pour ton for (si tu n'en met pas, alors ça équivaut à n'en mettre que pour la première instruction en dessous du for (l'autre sera considérée en dehors).
  • Soit tu fais "total += nbgrains", soit tu fais "total = total + nbgrains". Mais pas les deux, sinon ça fait le double.


Le code (j'ai utilisé un long long unsigned int, soit uint64_t, puisqu'il fallait un grand entier, et qu'un décimal ne servait pas ici):
#include <stdio.h>
#include <stdint.h>

int main ()
{
  uint64_t nbgrains = 1;
  uint64_t total = 1;

  printf("k: %i, total = %lu\n ", 1, total);

  for (int k = 2; k <= 64; ++k)
  {
    nbgrains = nbgrains * 2;
    total = total + nbgrains;

    printf("k: %i, total = %lu\n ", k, total);
  }

  printf(" Total : %lu\n ", total);

  return 0;
}


PS: Si tu utilises des "double", ça fonctionne aussi.


Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
1
0
Merci
Ohhh lala oui désolé pour le total += total + nbgrains................ c'est une erreur d'inattention.........................! D'ailleurs pour le for je commençais a m'en douter aussi, j'étais entrain de tâtonner dessus pour regarder ce que ca faisait comme résultat

Merci beaucoup pour ta réponse rapide comme toujours :)
Commenter la réponse de TheRogerFederer
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
1
0
Merci
Par contre quand j'exécute le programme, il m'affiche : k = 1, total = 1, ensuite k = 2, total = 3, k = 3, total = 7, etc......................., on ne dot pas avoir des puissances de 2 ?
Commenter la réponse de TheRogerFederer
Messages postés
3797
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 novembre 2019
90
0
Merci
Dans chacune des cases, tu as effectivement des puissances de 2. De telle manière à ce que tu aies:
  • 2^0 = 1
  • 2^1 = 2
  • 2^2 = 4
  • etc..


Cependant, tu oublies un petit détail: on additionne les cases au fur et à mesure. Donc:
  • 2^0 = 1
  • 2^0 + 2^1 = 1 + 2 = 3
  • 2^0 + 2^1 + 2^2 = 1 + 2 + 4 = 7
  • etc...



Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
1
0
Merci
Ohhh d'accord, j'avais omis cela merci beaucoup
Commenter la réponse de TheRogerFederer