Programme somme

Programme somme - C - Programmation

Marsh Posté le 01-05-2010 à 11:38:49    

Bonjour,
 
Bon ça peut paraître vraiment bête comme questions, mais j'suis pas informaticienne de formation...
 
On a un programme :
 
int somme(int n, int m){
int s ..., ... ;
for (...) ... ;
return ... ;
}
 
qui retourne la somme des entiers compris entre n et m.
 
- quel est le nombre d'instructions ? Je dirais 3, mais je ne suis pas sûre :(
- si on suppose que n<m, compléter.
Alors j'ai beaucoup de mal quant à la disposition des points des "trous" : j'aurais mis  
  int s, i ;
  for (i=n; i<=m; i++) s+=i ;
  return s ;
dans le corps de la fonction
 
mais justement dans la première ligne, ça ne correspond pas au "trou". Suis-je partie sur la mauvaise piste ?
 
- quelles sont les variables locales ? s et i, non ?
- est-ce que l'indicateur de classe de mémorisation par défaut pour une variable locale est bien "auto" ?
- est-ce que c'est possible de le remplacer par static pour la variable s ? A mon avis oui, mais je ne sais pas quoi dire quand on demande ce que ça change pour la suite...
- quelle instruction rajouter pour que la fonction soit commutative ? En d'autres termes, quelle ligne rajouter pour que le programme soit valable, que n soit inférieur ou supérieur à m ?
 
Ca fait beaucoup de questions, mais si vous pouvez m'aider sur seulement quelques-unes d'entre elles, ça m'aidera déjà pas mal...
 
 
Merci !
 
 
P.S. : j'espère que c'est ici qu'il faut poster, et pas en section aide aux devoirs... (et je précise, c'est une annale, pas un truc que je dois rendre ^^)


---------------
今日事,明日毕
Reply

Marsh Posté le 01-05-2010 à 11:38:49   

Reply

Marsh Posté le 01-05-2010 à 16:50:06    

Deja tu devrais initialiser S à 0 sinon t'auras pas ce que tu veux (enfin t'auras la somme + la valeur initiale à cet endroit de la mémoire ...)
 
Le nombre d'instructions est 2 (somme + retour), mais la somme est execute m-n fois .  
 
Après tu peux eviter de te servir de i, puisque il te suffit d'incrementer n jusqu'à <= m .
 
Pour la question sur la "classe de mémorisation", je comprend pas ce que tu veux dire, (enfin plus exactement j'ai peur que tu fasses une confusion avec de la poo)
 
Pour pouvoir inverser, il te suffit de faire une recherche du max des deux avant.

Reply

Marsh Posté le 01-05-2010 à 18:04:04    

Merci pour ta réponse :)
Oui effectivement j'ai oublié d'initialiser s à 0.
Le programme était à trou, donc je pense que j'étais obligée d'introduire i. Mais c'est vrai que c'est pas mal d'incrémenter n !
Je ne sais pas ce que c'est que la poo :( à part la signification en anglais XD
Ensuite pour pouvoir inverser, on me parle de rajouter une instruction, sans variable supplémentaire et sans modifier les autres instructions :s Apparemment c'est spécifique au langage C, mais je vois vraiment pas.
 
Est-ce que la boucle est comptée comme une instruction ? Ou même ce qu'il y a dans la boucle ? Puisque ça finit par un ;
 
Merki encore :)


Message édité par belettete le 01-05-2010 à 18:04:21

---------------
今日事,明日毕
Reply

Marsh Posté le 01-05-2010 à 18:06:08    

Ah vi, est-ce que en C, un booléen vaut 0 ou 1, ou bien est-ce que ce sont des TRUE ou FALSE ?


---------------
今日事,明日毕
Reply

Marsh Posté le 02-05-2010 à 18:40:50    

Les booléens n'existent que en C99. Donc c'est toi qui choisis comment les représenter.
 
Dans une boucle for, le dernier "argument" (ici i++) est une instruction oui (réécris le avec un while pour compter plus facilement le nombre d'instructions)
 
Est ce que tu peux réexpliquer plus clairement cette phrase : "- est-ce que l'indicateur de classe de mémorisation par défaut pour une variable locale est bien "auto" ? " ????

Reply

Marsh Posté le 02-05-2010 à 19:00:50    

La question exacte c'est "quel est l'indicateur de classe de mémorisation (ici par défaut) de s ?" s, qui est une variable locale

Message cité 1 fois
Message édité par belettete le 02-05-2010 à 19:01:24

---------------
今日事,明日毕
Reply

Marsh Posté le 02-05-2010 à 19:26:25    

belettete a écrit :

La question exacte c'est "quel est l'indicateur de classe de mémorisation (ici par défaut) de s ?" s, qui est une variable locale


Oui. Sa portée est le bloc au sein duquel elle est déclarée.

Reply

Marsh Posté le 02-05-2010 à 20:05:58    

Yep, mais dans ce cas, l'indicateur c'est quoi (indicateur = static, ou d'autres choses)


---------------
今日事,明日毕
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed