Bonjour/Bonsoir,
Je suis nouveau sur ce forum et j'ai grandement besoin de votre aide sur Turbo Pascal.
En effet, j'ai écrit un programme récemment qui s'arrête tout seul à mi chemin...
Alors pour expliquer :
J'ai écrit un programme qui me permet de trouver des paires de nombres amicaux et parfaits. Je ne sais pas si vous voyez ce que c'est.
En fait, quand on fait la somme des diviseurs stricts d'un nombre A, on tombe sur un nombre B, et quand on fait la somme des diviseurs stricts du nombre B, on retombe sur le nombre A.
(Les diviseurs stricts d'un nombres sont tous les diviseurs hormis ce nombre lui-même.
Ex : diviseurs stricts de 6 : 1,2,3
On constate que 6 est un nombre parfait car on retombe sur lui)
Le principe est de tester tous les entiers à partir de 4 (le premier entier qui n'est pas un "nombre premier") jusqu'à tomber sur soit un nombre parfait, soit une paire de nombres amicaux.
Enfin voilà, le problème c'est qu'à partir de 960, le programme s'arrête...
J'ai bien essayé de mettre des "longint" à la place des "integer" pour les variables, mais ça ne change rien...
Enfin, voilà mon programme :
(apparemment le spoiler ne fonctionne pas ici ?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 program nombres_amis(output); uses crt; type tableau = array [1..20] of longint; type tableau2 = array [1..20] of longint; var x,y,test,nombre,nombre2,indice,somme_div,somme_div2,boucle:longint; var a : tableau; var b : tableau2; begin clrscr; textcolor(white); {Nettoyage de la mmoire} x:=0; y:=0; test:=0; nombre:=0; nombre2:=0; indice:=0; somme_div:=0; somme_div2:=0; boucle:=0; {====CHOIX DU NOMBRE====} nombre:=497; repeat clrscr; {///////////////////////////PARTIE 1////////////////////////} writeln('nombre : ',nombre); {J'initialise les variable et le tableau} x:=2; for indice:=1 to 20 do a[indice]:=0; indice:=1; y:=nombre div 2; {Je test pour trouver les diviseurs} for x:= 2 to y do begin test:= nombre mod x; if test=0 then begin a[indice]:=x; indice:= indice+1; end end; {je fais la somme des diviseurs} somme_div:=0; for indice:= 1 to 20 do somme_div:= somme_div+a[indice]; somme_div:=somme_div+1; writeln('somme des diviseurs ',somme_div); {///////////////////////////PARTIE 2////////////////////////} nombre2:=somme_div; {J'initialise les variable et le tableau} x:=2; for indice:=1 to 20 do b[indice]:=0; indice:=1; y:=nombre2 div 2; {Je test pour trouver les diviseurs} for x:= 2 to y do begin test:= nombre2 mod x; if test=0 then begin b[indice]:=x; indice:= indice+1; end end; {je fais la somme des diviseurs} somme_div2:=0; for indice:= 1 to 20 do somme_div2:= somme_div2+b[indice]; somme_div2:=somme_div2+1; writeln('somme des diviseurs ',somme_div2); {Je test l'galit pour sortir de la boucle} boucle:=0; if nombre=somme_div2 then boucle:=boucle+1; {J'incrmente le nombre principale d'1} nombre:=nombre+1; until boucle=1; readln; nombre:=nombre-1; writeln(nombre); readln; end.
Enfin, si vous avez une idée d'où ça peut bloquer, dites-moi svp.
Merci d'avance
EDIT : merci pour les balises CODE
Partager