1 pièce(s) jointe(s)
Calculer une somme avec une boucle "tant que"
écrire un algorithme permettant de calculer la somme suivant S=2n+3n+4n+5n+6n+7n+8n+9n+10n avec n entier donne (utiliser seulement la boucle tant que)
j'ai trouvé une solution mais le prof m'as dit que ç'est faux :(
Pièce jointe 273945
1 pièce(s) jointe(s)
Calculer une somme avec une boucle "tant que"
Bonjour, :D
Je crois que le but de l'exercice, c'était tout simplement de remplacer par WHILE les deux boucles imbriquées FOR que devait manifestement comporter le programme, une pour l'exécution de la somme, et une autre pour celle du produit.
Citation:
Envoyé par
HAMZA MVP
Écrire un algorithme permettant de calculer la somme suivante:
S=2n+3n+4n+5n+6n+7n+8n+9n+10n avec n entier donne (utiliser seulement la boucle tant que) ...
Le code s'écrit spontanément:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
VAR i, j, N: Byte; p, q, S: LongInt;
BEGIN
Read(N); S:= 0;
FOR i:= 2 TO 10 DO BEGIN
p:= i;
FOR j:= 1 TO (N-1) DO BEGIN
q:= i * p; p:= q // p:= i * p répété (N-1) fois, d'où p = i^N
END;
Inc(S, p) // S:= S + p répété 9 fois, de p = 2^N à 10^N
END;
END. |
Tu as effectivement proposé une solution, mais sa présentation a braqué quelques intervenants pour les raisons suivantes:
a) tu as donné une capture d'écran qui, ne relevant pas d'un traitement de texte, contraint le lecteur de bonne volonté à recopier manuellement le programme (là, c'est de l'apostolat ! :aie:); et ses dimensions énormes n'arrangent rien ...
b) le texte est illisible en raison d'un indentation défectueuse, les variables trop nombreuses, et leur nom ne facilite pas leur mémorisation: pour une somme, le symbole à prendre est "s" ou "S", "Somme" etc ...
Pièce jointe 278281
L'esprit du programmeur ne saurait rivaliser en performances avec le système d'exploitation qu'il contrôle; il reçoit en permanence des signaux extérieurs, et effectue en parallèle de multiples tâches; il faut donc impérativement ménager sa mémoire, pour lui éviter des erreurs lors de la rédaction du code ... d'où l'économie nécessaire pour le nombre de variables, et la nécessité de choisir les identificateurs appropriés.
Ce qui est en cause, c'est l'équivalence logique de l'énumération simple:
Code:
1 2
|
FOR k:= Kmin TO Kmax DO <Instructions> |
avec celle de l'énumération conditionnelle:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
k:= Kmin - 1;
WHILE (k<Kmax) DO BEGIN
Inc(k); <Instructions>
END;
// ou encore:
k:= Kmin;
WHILE (k<Kmax) DO BEGIN
<Instructions>; Inc(k)
END; |
À toi de reprendre le programme, à partir des éléments fournis.
Calculer une somme avec une boucle "tant que"
Ravi de ta réaction ! Voilà un document sur lequel on peut travailler.
De quel langage s'agit-il ? Ce n'est plus du Pascal, comme dans la version initiale; mon compilateur (Virtual P.) refuse les astérisques suivant des affectations ( ...*; ), aussi les ai-je supprimés pour obtenir une pré-version du programme:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
program Somme_Puissance_N_00;
var puis , cpt , p , s , n :integer;
begin
read(n); cpt := 2; s := 0;
while cpt <= 10 do
begin
p := 1; puis := 1;
while puis = n do
begin
p := p * cpt;
puis := puis + 1;
end;
cpt := cpt + 1;
s := s + p;
end;
writeln (s);
end. |
À ce stade, la compilation s'effectue mais rien ne se voit sur l'écran, en raison de consignes d'affichage inappropriées en début et fin de texte, d'où une nouvelle version:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
program Somme_Puissance_N_01;
var puis , cpt , p , s , n :integer;
begin
readln(n); cpt := 2; s := 0;
while cpt <= 10 do
begin
p := 1; puis := 1;
while puis = n do
begin
p := p * cpt;
puis := puis + 1;
end;
cpt := cpt + 1;
s := s + p;
end;
write(s); readln
end. |
Cette fois le lancement réussit, mais conduit toujours au même résultat (9), quelle que soit la valeur de l'exposant (n). Où est l'erreur ?