Voilà une bonne réponse.
Il ne te reste plus qu'à répondre à la première remarque (c'est le plus facile):
# Question:Il manque un terme, parce que (K) varie de (N-1) à (1), ce qui fait en comptant bien (N-1) valeurs entières successives ... Que faut-il prendre pour la valeur initiale de (K) ?
Tu as donc écrit un programme en Turbo Pascal ? Pourquoi ne l'as-tu pas donné plus tôt ?
Cela aurait été plus simple ... Quel est ce programme source ?
var K,N,M : entiers
debut //1
écrire ( "N")
lire (N)
K=N //2
tantque K>0 faire //2
M= 2*K -1
afficher le nombre ("M")
K=K-1
finde tanque
fin debut
je pense que c ça oufffffffffffffffffffff
L'être humain ne sait pas faire.
Par contre, si tu limites N à une valeur petite, par exemple 100, alors tu peux tester toutes les valeurs.
N est divisible par P si le reste de la division euclidienne (celle apprise à l'école primaire) est nul ( reste = 0).
N=a*P + 0
Tu testeras alors le reste de la division de N par tous les candidats de 1 à N.
Ça, c'est un autre sujet qu'il convient aborder sur un nouveau forum.
Et vas-tu nous livrer ainsi l'ensemble de tes exercices ?
Bonjour,
Je propose un pseudo code conceptuel.
D'abord préparer un tableau d'entiers de la taille de N et l'initialiser avec les N premier entier ;
Preparer un itérateur pour ce déplacer dans le tableau et l'initialiser à N ;
Début du programme :
faire si tableau(itérateur) mod 2 = 1; alors afficher iterateur; /** if l'itérateur est impair alors afficher l'itérateur;
itérateur := itérateur - 1;
jusqu'à itérateur = 1;
Fin de programme.
Le truc c'est de décrementer la valeur observer et de voir si il est impair ou pas.
Là, j'ai fait un tableau mais on peut probablement le faire sans. Et j'ai utilisé la fonction "modulo" pour voir si la valeur courante est impair ou pas.
Si je ne me suis pas trompé.
Avec Ada ;
Mais il faut avoir "reverse".
Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for i in reverse 1..N then if i mod 2 = 1 then put_line(i); end if; end loop;
L'idée conduit à un résultat, à condition de commencer par l'énumération d'une liste d'entiers allant de 0 à (2*N).
Il suffit de parcourir ensuite la liste en sens inverse en repérant les termes impairs, dont le nombre est égal à (N).
Peut-on considérer que l'on a fait le tour de la question ? J'ai l'impression qu'à vouloir trop convaincre, on va s'enliser dans des répétitions déprimantes
Imagine que l'opération "Repérer un terme impair" coûte 1 million d'euros.
Imagine que l'opération "Passer à l'impair suivant" coûte 1 euro.
Alors ton algorithme nous coûtera bien cher. (des millions contre 1 million)
Une fois que tu as repéré le premier, il n'est pas utile de repérer les autres.
L'opération simple consiste à faire "-2".
(si simple que personne ne l'avait proposé)
var i,N,M : entiers
début
donner ( "N")
lire (N)
M=N/2
pour i=2 à M faire
si ( le reste de N/i = 0 ) alors afficher ( "i")
sinon ( afficher " pas de diviseurs ")
fin pour
fin début
"1" n'est-il pas un diviseur de "N" ?pour i=2 à M faire
Pourquoi diviser par 2 ? "N" n'a-t-il pas le droit d'être diviseur de "N" ?M=N/2
pour i=2 à M faire
Ce n'est pas qu'il n'y a pas de diviseur. C'est que "i" n'est pas diviseur.sinon ( afficher " pas de diviseurs ")
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager