L'utilité du compteur.

Résolu
Gretyzde Messages postés 97 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonsoir,

après avoir fini cet exercice. Je me suis rendu compte que je n'avais fait que suivre le schéma des exercices précédents sans trop réfléchir et que l'exercice avec bien abouti mais que je n'avais pas compris l'utilité du cpt dans ce code.

L'énoncé de l'exercice était celui-ci:
Déterminer le nombre de fois qu'un élément est présent dans le tableau( de 20 cellules).

Ma question est la suivante: Pour tester, j'ai utilisé le nb8 qui s'avérait, avec le 7, être le seul réapparaissant une deuxième fois. J'ai pourtant la sensation de ne pas avoir compris le but du "if" et du "cpt". Comment se fait-il que j'obtienne la réponse 2 (qui est correcte)? L compteur est il associé au nombre?

int i=0;
	int cpt=0;
	int nb;
	int tabnbr[20];
	tabnbr[0]=1;
	tabnbr[1]=2;
	tabnbr[2]=3;
	tabnbr[3]=4;
	tabnbr[4]=5;
	tabnbr[5]=6;
	tabnbr[6]=7;
	tabnbr[7]=8;
	tabnbr[8]=9;
	tabnbr[9]=10;
	tabnbr[10]=11;
	tabnbr[11]=12;
	tabnbr[12]=13;
	tabnbr[13]=14;
	tabnbr[14]=15;
	tabnbr[15]=16;
	tabnbr[16]=7;
	tabnbr[17]=8;
	tabnbr[18]=19;
	tabnbr[19]=20;

	printf("Veuillez entrer un nombre : ");
	scanf("%d",&nb);
	

	do
	{
		if(tabnbr[i] == nb)
		{
			cpt++;
		}
		i++;
	}
	while(i<20);

	printf("%d\n", cpt);


Merci d'avance.
A voir également:

3 réponses

Utilisateur anonyme
 
Bonsoir,

tachons de t'aider sans pour autant résoudre ce mystère à ta place.
Il faut chercher un peu pour progresser.

Pourrais tu essayer de formuler en "français" ce que fait cette partie du code
	do
	{
		if(tabnbr[i] == nb)
		{
			cpt++;
		}
		i++;
	}
	while(i<20);

0
Gretyzde Messages postés 97 Date d'inscription   Statut Membre Dernière intervention   2
 
Bonjour,

TANT QUE i est inférieur à 20 (tout en incrémentant i de 1 à chaque fois) SI une cellule quelconque du tableau nbr = a un certain nombre (8 dans cet exemple) alors il faut incrémenter la variable cpt de 1.... comme quoi quand on réfléchis un peu. Le tableau comporte deux fois la valeur 8 donc le compteur a été incrémenté de 2.

Je ne sais pas si ce que j'ai dit a été correctement formulé mais l'idée est comprise en tout cas., merci beaucoup.
0
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
Bonjour
il y a une petite erreur dans la réponse de @Gretyzde
C'est plutôt, on exécute les instructions au moins une fois avant que l'expression ne soit évalué pour savoir si on continue ou pas en clair, instructions exécuté puis l'expression évalué
Exemple
#include <stdio.h>
#include <stdlib.h>

int main( void ){

	unsigned int i = 0;
	unsigned int icpt = 0;
	unsigned int iTab[] = { 0,4,8,7,6,8,4,1,8 };

	do{
		printf("\t->BLOC INSTRUCTION EXECUTER I = %d\n", i );
		if( *(iTab+i) == 8 ){
			icpt+=1;
			printf("VALEUR TROUVER DANS TABLEAUX COMPTEUR = %d\n", icpt );
		}
	}while(++i < 8 && printf("\t->EXPRESSION EVALUER I = %d\n", i));

	printf("RESULTAT\t:%d",icpt );

	return( EXIT_SUCCESS );
}

à bientôt
0
Gretyzde Messages postés 97 Date d'inscription   Statut Membre Dernière intervention   2
 
Oui, c'est vrai que j'ai oublié de mentionner la particularité du "do while" qui est de lancer le bloc d'instruction au moins une fois même si la condition n'est pas réalisée.
0
Utilisateur anonyme > Gretyzde Messages postés 97 Date d'inscription   Statut Membre Dernière intervention  
 
Il est exact qu'au réveil j'ai laissé passer cette coquille.
0
Utilisateur anonyme
 
C'est ça.

--
-1