Vous pouvez tester mon programme C

Fermé
Melanie - 14 mars 2008 à 22:59
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 15 mars 2008 à 20:52
Bonjour,

je sais que le programme n'a pas d'erreur d'écriture mais je veux voir s'il marche

#include<stdio.h>

int main(void) {

int n;
int i;
int somme;

i=0;
somme =0;

printf ( "entrez une valeur: " );
scanf ( "%d" , &n );

while (n>9) {

somme = somme + n%10 ;
n=n/10 ;
}


printf ( "somme=%d " , somme + n);

return(0);

}



il faut entrer une valeur , genre entrez la valeur : 23 la réponse doit être 5 ( 2 + 3 )

ou encore 210 la réponse doit être 3 ( 2+1+0 )


merci d'avance
A voir également:

4 réponses

cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
14 mars 2008 à 23:41
Bonsoir,

Il tourne convenablement jusqu'à 10 chiffres au maximum, au delà il renvoie des résultats incohérents.

Exemple :
entrez une valeur: 11111111111
somme=-1773790777
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
15 mars 2008 à 10:12
Salut,

Il tourne convenablement jusqu'à 10 chiffres au maximum,

Depuis quand on exprime la capacité d'une variable entière en nombre de chiffres?

Voici une exemple, tester sur
Linux debian 2.6.18-4-686 #1 SMP Wed May 9 23:03:12 UTC 2007 i686 GNU/Linux
gcc (GCC) 3.3.6 (Debian 1:3.3.6-15)
La variable int
lami20j@deb:~$ cat taille_var.c
#include<stdio.h>

int main()
{
  printf("signed int min = %d\n", -(int) ((unsigned int) ~0 >> 1));
  printf("signed int max = %d\n", (int) ((unsigned int) ~0 >> 1));
  printf("unsigned int max = %u\n", (unsigned int) ~0);

  return 0;
}
lami20j@deb:~$ gcc taille_var.c
lami20j@deb:~$ ./a.out
signed int min = -2147483647
signed int max = 2147483647
unsigned int max = 4294967295
lami20j@deb:~$


On peu tester ta théorie avec les 10 chiffres
2147483647 - donc j'ai 10 chiffres
allons tester 3147483647 , 4147483648 , 5147483648 (toujours 10 chiffres)
et aussi ton test
lami20j@deb:~$ cat melanie.c
#include<stdio.h>

int main (void)
{

  int n;
  int i;
  int somme;

  i = 0;
  somme = 0;

  printf ("entrez une valeur: ");
  scanf ("%d", &n);

  while (n > 9) {
    somme = somme + n % 10;
    n = n / 10;
  }
  printf ("somme=%d\n", somme + n);
  return (0);
}
lami20j@deb:~$ gcc melanie.c
lami20j@deb:~$ ./a.out
entrez une valeur: 2147483647
somme=46
lami20j@deb:~$ ./a.out
entrez une valeur: 3147483647
somme=46
lami20j@deb:~$ ./a.out
entrez une valeur: 4147483648
somme=46
lami20j@deb:~$ ./a.out
entrez une valeur: 5147483648
somme=46
lami20j@deb:~$ ./a.out
entrez une valeur: 4294967295
somme=46
lami20j@deb:~$ ./a.out
entrez une valeur: 4294967296
somme=46
lami20j@deb:~$ ./a.out
entrez une valeur: 42949672950
somme=46
lami20j@deb:~$ ./a.out
entrez une valeur: 11111111111
somme=46
lami20j@deb:~$


L'explication tu la trouves plutôt dans les valeurs que le variables peuvent contenir et pas dans le nombre de chiffres.
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
15 mars 2008 à 20:06
Depuis quand on exprime la capacité d'une variable entière en nombre de chiffres?

Vous ne pensez pas évoluer dans le registre toujours un peu facile, celui de la confusion. Je vais quand même (essayer) de vous répondre, au moins pour informer la personne qui est à l'origine de cette discussion :

Depuis, ou plutôt lorsque :

- L'enoncé du problème (la demande formulée) ne mentionne pas qu'il s'agit d'apporter, comme vous avez cru devoir le faire, une correction mais de TESTER le fonctionnement d'un programme :

je sais que le programme n'a pas d'erreur d'écriture mais je veux voir s'il marche

en ce sens une correction et les commentaires qui l'accompagnent s'appuient sur le code existant et sont par le fait nécessairement orientés. Le propre d’un test, lorsqu’il peut être ralisé par un tiers, est de communiquer à cette personne le moins de considérations possibles d’ordre techniques ou algorithmiques afin de ne pas orienter son action. C’est la première raison pour laquelle j’ai délibérément ignoré le code, la seconde, pour éviter d’orienter mon appréciation comme je l’ai écrit plus haut.

- Il n'y a rien dans cet énoncé qui stipule de tenir compte d'une borne de valeurs, minimale et en l'occurrence maximale et par extension de devoir la préciser et la tester en précision.

il faut entrer une valeur , genre entrez la valeur : 23 la réponse doit être 5 ( 2 + 3 )

Il y a certainement d'autres manières de rendre compte du problème sans la contrainte d'une valeur maximale étroitement liée au TYPE de variable utilisé.

- et SURTOUT lorsqu'il s'agit, toujours suivant le post, (c’est moi qui re-formule) de faire la somme de chacun des rangs (dont on n'a pas à présumer le nombre) d’une valeur saisie au clavier.
D'où ma réponse, PONCTUEE d'un cas concret, qu'il convenait de ne pas isoler de ce contexte :

Il tourne convenablement JUSQU'A 10 chiffres au maximum, au delà il renvoie des résultats incohérentes.

qui n'a jamais prétendu :

exprime(R) la capacité d'une variable entière

c'est-à-dire sous entendre que l'INTEGRALITE des valeurs prises par un nombre constitué de 10 chiffres était convenablement traitée par la logique d'exécution du programme. Ce qui, dans le cadre d'un premier test, n'aurait eu que peu d'intérêt. Il convenait, sur le plan fonctionnel de déterminer et d'illustrer l'anomalie et non pas d'en apporter une correction comme je l'ai écrit plus haut, laquelle de toute façon n'était pas sollicitée.


En résumé :
Il me semble que ma formulation, tout en étant nécessairement générale dans le cadre d’un premier test est suffisamment précise pour rendre compte d’un dysfonctionnement, sans qu’il soit nécessaire de l’associer à des considérations techniques spécifiques relatives au type de variable utilisé. C’est ensuite, lors de la phase d’investigation, c’est-à-dire à la correction, que revient la tâche de rechercher des causes d’un dysfonctionnement.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
15 mars 2008 à 20:52
Salut,

Il tourne convenablement jusqu'à 10 chiffres au maximum,

si tu crois qu'avec 9999999999 (il s'agit de 10 chiffres) le programme tourne convenablement, alors je me suis trompé d'avoir poser la question.

Bonne continuation.



0