Jeu d'échec [Résolu]

Signaler
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
-
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
-
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 !

5 réponses

Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
109
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
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
1
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 :)
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
1
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 ?
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
109
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
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
1
Ohhh d'accord, j'avais omis cela merci beaucoup