Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide en pascal ( fonction premier )

17 mai 2012 à 12:03:44

Bonjour
Je voudrais savoir c'est quoi l'erreur dans cette fonction


Function Premier(n:integer):integer;
var i:integer;
test:boolean;
begin
i:=1;test:=true;
repeat
repeat
i:=i+1;
if n mod i = 0 then
begin
test:=false;
end;
until (i>= n div 2) or (test=false);
if test=false then
n:=n+1;
until test=true;
Premier:=n;
end;



Elle a comme rôle :
Vérifier si N est premier ou non
-Si OUI elle retourne N
-Sinon , elle retourne le successeur premier de N


Par Exemple :
Si N = 5 , Premier = 5
Si N = 9 , Premier = 11
  • Partager sur Facebook
  • Partager sur Twitter
18 mai 2012 à 12:00:53

Un petit "truc" pour rendre plus lisible ton code, pense à l'indentation ....
ça peut aider celles ou ceux qui voudraient t'aider ...
ensuite, quel est le problème de ta fonction, qu'est-ce que ça fait ou ne fait ?
  • Partager sur Facebook
  • Partager sur Twitter
19 mai 2012 à 14:00:06

i:=1; doit être entre les 2 mot clé "repeat" pour que le 'i' s'initialise pour chaque n.
  • Partager sur Facebook
  • Partager sur Twitter
20 mai 2012 à 14:25:11

Je rejoins Loguiss : un code indenté serait la moindre des choses + un minimum d'explications (en Français svp) ne serait pas de trop. Dans tes conditions d'arrêts déjà :

until (i>= n div 2) or (test=false);


Tu peux limiter davantage les recherches, car il est inutile de chercher les diviseurs au delà de <math>\(\sqrt{n}\)</math> ! Ensuite, comme te l'as cha_oui_cha_oui, tu dois écrire :

Function Premier(n:integer):integer;
   var i:integer;
   test:boolean;
begin
   repeat
   i:=1;test:=true;
      repeat
         i:=i+1;
         if n mod i = 0 then
         begin
            test:=false;
         end;
      until (i>= n div 2) or (test=false);
      if test=false then
         n:=n+1;
   until test=true;
Premier:=n ;
end;


Quand tu as un soucis, déroule un exemple à la main ou fais des affichages un peu partout. Exemple : n vaut 9. Dès la deuxième itération, test vaudra false car 9 est multiple de 3 (i vaut 3). Donc tu augmentes n (à 10) et tu testes si n est multiple de 4, de 5 ... sans avoir testé s'il était multiple de 2 ou de 3 !
  • Partager sur Facebook
  • Partager sur Twitter
Tutoriel : Apprendre à programmer avec Ada : Version 1 achevée et publiée
7 décembre 2019 à 7:32:49

                                                                        function premier(x:integer):boolean;
Var
i:integer;
Begin
i:=2;
while (i<x div 2) and (x mod i<>0) Do
i:=i+1;
         premier:=(i>=x div 2) and (x>1);
end;
  • Partager sur Facebook
  • Partager sur Twitter
7 décembre 2019 à 8:07:31

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter