Bonjour, je veux encore vérifier mon programme en C avec vous. Les deux questions sont indépendantes:
1°/ Ecrire un programme en langage C appelé Somme qui utilise une boucle pour calculer la somme des entiers positifs données par l'utilisateur. La boucle se termine quand l'utilisateur donne un entier négatif. La somme calculée est affichée par la suite.
2°/ Ecrire un programme en langage C appelé Minimum qui utilise une boucle pour calculer le minimum des entiers positifs données par l'utilisateur. La boucle se termine quand l'utilisateur donne un entier négatif. Le minimum calculé est affiché par la suite.
Pour 1°/ voici mon résultat:
#include <stdio.h>
#include <conio.h>
int main()
{
int val, som=0;
printf("donnez un entier positif pour continuer ou négatif pour s'arreter");
scanf("%d",&val);
while(val>0)
{som=som+val;
printf("donnez un entier positif pour continuer ou négatif pour s'arreter");
scanf("%d",&val);
}
printf(" la somme des nombres entiers positifs est %d", som);
getch ();
return 0;
}
salut
0 est positif et négatif ....
tu répètes deux fois les mêmes instructions ... on peut faire mieux en réordonnant les choses ...
je ne connais pas c donc je te fais un algorithme
Begin
s = 0
a = 1
while not(a < 0) do
Read (a)
s = s + a
Write s
End
...
L'algo de carpediem ne convient pas, me semble-t-il.
Par exemple :
Si on entre un nombre négatif ... il est comptabilisé dans la somme
De plus, on a du mal à comprendre de qui est inclus dans la boucle Write.
hé ben c'est bien triste si tu ne le comprends pas ...
mais en fait il ne va pas ....
Begin
s = 0
Read a
while a >= 0
s = s + a
Read a
Print s
End
....
J'ai ceci:Mais je voudrais savoir est ce qu'on peut réécrire le programme sans utiliser les conditions if et else
# include < stdio.h >
int main( )
{
int som , v ;
som = 0 ;
printf( " Donnez un entier positif pour continuer ou négatif pour quitter : " ) ; scanf( "%d" , &v ) ;
if ( v < 0 )
{
printf( " Fin ! Vous n'avez pas donné de nombre positif " ) ;
}
else
{
do
{
som = som + v ;
printf( " Donnez un entier positif pour continuer ou négatif pour quitter : " ) ; scanf( "%d" , &v ) ;
}
while ( v >= 0 ) ;
printf( " La somme des entiers positifs donnés est %d " , som ) ;
}
fflush( stdin ) ; getchar( ) ;
return 0 ;
}
Que pensez aussi de la partie 2 (le minimum); j'ai du mal à commencer
C'est un tout autre algo...
Identique, cette-fois (dans l'esprit), à celui donné par Smir ... à un détail près.
Soit on comprend le mot "négatif" comme n'importe quel "Monsieur tout le monde" ou comme n'importe quel mathémacien non européen occidental ou Anglo-Saxon et ... c'est l'algo de smir qui convient.
Soit on comprend le mot "négatif" comme un mathémacien européen occidental non Anglo-Saxon et ... c'est l'algo de carpediem qui convient.
Je n'entre pas dans la polémique pour voir si 0 est à la fois positif et négatif (comme pour uniquement les matheux européens occidentaux non anglo-saxon) ou bien si 0 est tout simplement 0, ni positif, ni négatif (comme pour tout le monde sauf les matheux européens occidentaux non anglo-saxons)
Dans le message ci-dessus, l'algo de Smir dont je parlais était celui de son message initial.
... dont le seul problème potentiel est issus du scanf, qui laisse trainer un "retour chariot" parasite qu'il faut supprimer.
Bonsoir, voici mon programme pour le minimum. Mais le problème est que si je prends par exemple 8 et 6
on m'affiche que le minimum est 8. Pouvez-vous m'aider:
#include<stdio.h>
#include<stdio.h>
int main()
{
int val,min=0;
printf("donner un entier positif pour continuer ou negatif pour finir\n");
scanf("%d",&val);
while(val>=0)
{
min=val;
printf("donner un entier positif pour continuer ou negatif pour finir\n");
scanf("%d",&val);
}
printf("la minimum des nbres entiers positifs est %d",min);
getch ();
return 0;
}
Je rappel la question
2°/ Ecrire un programme en langage C appelé Minimum qui utilise une boucle pour calculer le minimum des entiers positifs données par l'utilisateur. La boucle se termine quand l'utilisateur donne un entier négatif. Le minimum calculé est affiché par la suite.
Bonsoir Smir, Bonsoir tout le monde,
Si je peux me permettre de te donne ces conseils:
- Donne à tes paramètres des noms compréhensible afin de faciliter la lecture par autrui et toi aussi, (et les documenter avec des commentaires) car il y a des gens qui n'arrivent pas à relire leur propres programmes. Tout cela ne change en rien les performance de ton programme.
- Utilise l'indentation afin que les niveaux et structures de ton programme soient visibles, cela te permettra de le comparer rapidement avec ton algorithme.
- Il faudrait que tu fasse de l'algorithmique, sinon tu risque de perdre du temps, l'avantage est que tu pourrais communiquer dessus avec quiconque car c'est en langage parlé. C'est vrai que pour des petit bouts de programmes comme ces deux là ça peut sembler pas nécessaire mais détrompe toi car, je constate que tu ne sais pas lire les algo, celui de carpediem est bon mais in English, dont ci-après la transcription en français:
DEBUT
VARIABLES
s = 0
AFFICHER("Donnez un entier positif pour continuer ou négatif pour s'arrêter")
LIRE(a)
TANT-QUE a >= 0 FAIRE
s = s + a
AFFICHER("Donnez un entier positif pour continuer ou négatif pour s'arrêter")
LIRE(a)
FIN DE TANT-QUE
AFFICHER(s)
FIN
Je reviens à ton programme, il est bon, seulement il y avait un oubli d'initialisation du paramètre Valeur dont l'interprétation dans le test de l'instruction while peut te faire des surprises.
J'ai corrigé et cela donne:
#include <stdio.h>
#include <conio.h>
int main() {
int Valeur = 0, Somme = 0; /* initialisation à zéro des deux paramètres */
printf("Donnez un entier positif pour continuer ou négatif pour s'arrêter\n");
scanf("%d", &Valeur);
while (Valeur >=0) { /*J'ai mis >=0 afin de permettre au programme de démarrer*/
Somme += Valeur; /* plus esthétique que Somme = Somme + Valeur; */
printf("Donnez un entier positif pour continuer ou négatif pour s'arrêter\n");
scanf("%d",&Valeur);
} /* FIN DE WHILE */
printf("La somme des nombres entiers positifs est %d\n", Somme);
getch ();
return 0;
}
Et comme je te l'avais expliqué dans un précédent post, tu peux utiliser la boucle REPETER ...TANT-QUE qui va nous économiser deux lignes, dont voici le programme.
#include <stdio.h>
#include <conio.h>
int main() {
int Valeur = 0, Somme = 0; /* initialisation à zéro des deux paramètres */
do {
Somme += Valeur; /* plus esthétique que Somme = Somme + Valeur; */
printf("Donnez un entier positif pour continuer ou négatif pour s'arrêter");
scanf("%d",&Valeur);
} while (Valeur >=0) ;
printf("La somme des nombres entiers positifs est %d", Somme);
getch ();
return 0;
}
Regarde la structure du programme et celle de l'algorithme.
Pour la deuxième variante, tu peux rajouter \n à la fin des lignes printf
Pour le deuxième programme, il y a des erreurs:
#include<stdio.h> écrite deux fois
Manque l'initialisation d'un paramètre
Comment trouve tu le minimum? car je ne vois aucune instruction qui fait cela
Razes,
L'initiation de la variable "Valeur" à 0 est inutile ...
Une telle initiation n'est pas obligatoire en C et la variable Valeur est entrée par le scanf de la 3eme ligne de la procédure main() écrasant de toute manière celle qui aurait été initialisée en 1ere ligne.
Merci Razes, surtout pour les conseils
Voici mon programme rectifié pour le minimum
#include<stdio.h>
#include <conio.h>
int main()
{
int val,min;
printf("donner un entier positif pour continuer ou negatif pour finir\n");
scanf("%d",&val);
if(val<0)
{
printf("vous devez donner un nombre positif pour continuer\n");
scanf("%d",&val);
}
while(val>=0)
{
if(val<min)
{
min=val;
}
printf("donner un entier positif pour continuer ou negatif pour finir\n");
scanf("%d",&val);
}
printf("le minimum des nbres entiers positifs est %d",min);
getch ();
return 0;
}
@J-P
Effectivement, comme je l'avais écris le programme de smir, ne nécessitait pas de modification, j'ai glissé cette phrase par erreur en pensant à la variante FAIRE...TANT-QUE.
@smir
Ton 2ème programme est bon, seul un point me chiffonne, si on saisit 2 fois un nombre négatif, le programme sortira du if et du while et va procéder à l'affichage du min qui n'est même pas initialisé.
@smir
Lors de la comparaison if(val<min) tu n'a pas d'initialisation de min donc la comparaison donnera des résultats inattendus.
#include<stdio.h>
#include <conio.h>
int main() {
int val, min;
printf("Donner un entier positif pour continuer ou négatif pour finir\n");
scanf("%d",&val);
if(val<0) {
printf("vous avez saisi un nombre négatif, arrêt du programme.\n");
} else {
min=val /* initialisation de min */
while(val>=0) {
if(val<min) {
min=val;
}
printf("donner un entier positif pour continuer ou negatif pour finir\n");
scanf("%d",&val);
} /* FIN DE WHILE */
printf("le minimum des nbres entiers positifs est %d",min);
getch ();
} /* FIN IF ELSE */
return 0;
}
De plus le langage C te permet certaines écritures qui condensent les lignes, on peut écrire:
min = val>min ? min : val;
au lieu de
if(val<min) {
min=val;
}
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :