Bonsoir , quelqu'un peut il m'aider ?
Ecrire un programme C qui lit une séquence d'entiers. La lecture se termine lorsque la somme des deux derniers entiers lus est égale à la moyenne de tous les entiers lus jusqu'à maintenant. Le programme affiche les deux derniers entiers lus. Exemple:
j'ai essaye de faire cela mais apres avoir entrer la serie 6,0,3 rien n'apparait sur l'ecran.
#include<stdio.h>
void main(){
int nb1,nb2,compteur=1;
float moyenne ,somme2=0,somme=0;
do{printf("veiller entrer une serie d'entiers");
scanf("%d",&nb1);
compteur++;
scanf("%d",&nb2);
compteur++;
somme2=nb1+nb2;
somme+=nb1+nb2;
moyenne=(1.0)*somme/compteur;
}while(moyenne!=somme2);
printf("affichage est %d,%d",nb2,nb1);
getchar();
}
merci d'avance
Bonjour,
déja dans ta boucle tu entres les données par paires (les deux scanf)
donc ça ne pourra pas marcher si le nombre de données de la série est un nombre impair.
une fois ce problème de principe réglé (il faut entrer les données une par une)
il faudra gérer le fait que on ne peut pas calculer la somme des deux derniers termes tant que on n'en a pas encore entré au moins deux !
une solution est la saisie de la première valeur en dehors de la boucle.
et un décalage des valeurs (nb1 -> nb2 et nouvelle valeur dans nb2)
bon j'ai essaye ca a marcher comme vous dite . Merci
mais pourquoi dans mon scanf il y a juste les entiers paires??
tu as deux scanf par boucle
tu fais forcément un nombre entier de boucles
donc tu demandes un nombre pair de données
(pas "des entiers pairs" , un nombre pair de valeurs ; 4 valeurs, 6 valeurs, 238 valeurs)
si ta série ne comporte que 3 valeurs le programme que tu avais écrit en attend une 4ème et ne sort effectivement rien puisqu'il attend que tu lui donnes cette 4ème valeur !
l'algorithme correct est
entrer nb2 (un seul scanf)
nb2 dans la somme générale
répéter
| nb2 --> nb1
| entrer nb2 (un seul scanf dans la boucle)
| cumul de ce seul nb2 dans la somme générale et calcul de la moyenne
tant que nb1+nb2 != la moyenne
sortie : nb1 et nb2
Bonsoir, une proposition :
#include<stdio.h>
int main()
{
int nb1 = 0, nb2 = 0, compteur = 0 ;
float somme = 0.0 ;
float moyenne = 0.0 ;
printf("veuillez entrer une serie d'entiers\n") ;
while (1)
{
nb1 = nb2 ;
scanf("%d", &nb2) ;
compteur++ ;
somme += nb2 ;
moyenne = somme / compteur ;
if ((compteur > 1) && (moyenne == nb1 + nb2))
break ;
}
printf("affichage est %d, %d", nb1, nb2);
// getchar();
return(0) ;
}
"j'aime" pas les break dans une boucle while (true)
ni faire un truc différent (if compteur > 1) dans les différentes exécutions d'une boucle
mais c'est un goût personnel et "on peut".
le principal est que :
ça marche
ce soit compréhensible 5 ans après.
l'avantage est ici qu'il n'y a qu'un seul scanf écrit dans le programme
donc si on veut remplacer le scanf par un autre moyen d'entrer les données (récupération de données préexistantes dans un tableau par exemple) il n'y aura qu'une seule ligne à modifier.
Mathafou, bonjour.
Vous seriez peut-être malheureux en Perl.
En C, on trouve des instructions comme break et continue pour contrôler l'exécution d'une boucle.
En Perl, on trouve last (= break), next (= continue) et redo. Cette dernière instruction permet de "revenir" au début d'une boucle (itération courante) donc de revenir en "arrière" dans son code...
En Python, on trouve des boucles while-else où le code du bloc d'instruction qui suit le else est exécuté si aucune instruction break n'a été exécutée dans la boucle while .
Chaque langage a ses particularités, ses avantages et ses inconvénients. Il faut savoir en jouer mais pas en abuser.
Le plus important comme vous l'avez souligné est qu'un programme quelque soit le langage utilisé (de l'assembleur au langage de haut niveau) :
> fonctionne, c'est à dire qu'on l'a testé en large et en travers en allant vérifier tous les cas tordus possibles,
> qu'il soit "lisible" par un autre programmeur (avec surtout les commentaires qui vont bien)
> qu'il soit maintenable.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :