IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

Recherche de nombres premiers et super-premiers


Sujet :

Turbo Pascal

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Recherche de nombres premiers et super-premiers
    Salut.

    Je voudrais bien que quelqu'un m'aide, svp. J'ai un bac pratique sur Pascal et après trois jours je n'arrive pas à exécuter un ancien bac. Voici le lien du bac est voici ce que j'ai fait.
    Lien : http://www.kiteb.net/education/infor...-algo-8h30.pdf.

    Voici mon code :
    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
    program bac2009;
    uses wincrt;
    var
    super_p:text;
    N:longint;
    procedure saisie(var n :longint);
    begin
    	repeat
    	writeln('donner votre intervalle svp');
    	readln(n);
    	until  (n>40000) and (n<100000);
    end;
    function premier (x:integer):boolean;
    var test:boolean; i:integer;
    begin
    	test:=true;
    	i:=1;
    	repeat
    	i:=i+1;
    	if (x mod  2 = 0) then
    	test:=false;
    	until (i=x div 2)  or (test=false);
    	premier:=test;
    end;
    function superpremier (k:integer):boolean;
    var i:integer;a:integer;ch:string;e:integer;verif:boolean;
    begin
    i:=0;
    repeat
    STR(k,ch);
    a:=length(ch);
    if (premier(k)=true) then
    begin
    delete(ch,a,1);
    verif:=true;
    val(ch,k,e);
    end
    else
    verif:=false;
    until (verif=false) or (length(ch)=0);
    superpremier:=verif;
    end;
    procedure remplir (var super_p:text;n:longint);
    var p:integer;ch:string;
    begin
    	rewrite(super_p);
    for p:=1 to n do
    begin
    if (superpremier(p)=true) then
    STR(p,ch);
    writeln(super_p,ch);
    end;
    close(super_p);
    end;
    procedure affiche (var super_p:text);
    var h:string;i:integer;
    begin
     
      Reset(super_p);
    	while not eof(super_p) do
    	begin
    	i:=i+1;
    	readln(super_p,h);
    	writeln('le i nombre est',i);
    end;
    close(super_p);
    end;
    begin
    	assign(super_p,'c:/programmation/super_p.txt');
    	saisie(n);
    	remplir (super_p,n);
    	affiche(super_p);
     
    end.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 404
    Points : 5 790
    Points
    5 790
    Par défaut
    Salut,

    Si tu ne veux afficher que les nombres premiers, ce code-là n'est pas correct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure remplir (var super_p:text;n:longint);
    var 
      p:integer;
      ch:string;
    begin
      rewrite(super_p);
      for p:=1 to n do
      begin
        if (superpremier(p)=true) then
          STR(p,ch);
        writeln(super_p,ch);
      end;
      close(super_p);
    end;
    Regarde bien le WriteLn, il n'est pas inclus dans la condition mais fait à chaque boucle.
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Salut. Merci pour votre réponse.

    Ce programme ne veut pas seulement afficher les nombres premiers, il est comme ça.

    Un nombre est dit superpremier si EXEMPLE on prend 59399, ce nombre est superpremier lorsque 5939 est aussi premier, et 593, 59, 5 aussi. Il faut supprimer le dernier chiffre et vérifier qu'il est toujours premier.
    Et pour le writeln, je le fais pour insérer le nombre dans le fichier super_p, c'est un fichier texte.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Et svp je n'arrive pas à comprendre quand je mets begin et end, ça veut dire que je dois mettre begin après le FOR et END avant puiss:=k; pour que Pascal comprenne que je ne veux pas intégrer cette instruction (puiss:=k) dans la boucle ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function puiss(x,y:integer):integer;
    var i:integer;
    begin
    	k:=1;
    	for i:=1 to y do
    	k:=k*x;
    	puiss:=k;
    end;

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 404
    Points : 5 790
    Points
    5 790
    Par défaut
    salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    function puiss(x,y:integer):integer;
    var 
      i:integer;
    begin
      k:=1;
      for i:=1 to y do
         k:=k*x;  // la boucle ne s'occupe que de cette ligne 
      puiss:=k; // ici on affecte le resultat de K
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    Par défaut
    Salut à tous

    J'ai proposé dans la FAQ un code permettant, raisonnablement, d'obtenir les nombres premiers inférieurs ou égal à un entier donné en utilisant le crible d'Eratosthène : https://pascal.developpez.com/faq/?p...entier-donne-N. Le tableau de byte peut être remplacé par un tableau de booléens.

    Cela pourrait être un début, les nombres super premiers ne sont ensuite qu'un raffinement, le tableau étant global et rempli au début, il suffit de vérifier la primalité en consultant le booléen correspondant à l'entier cherché dans ce tableau.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/03/2015, 16h20
  2. Les nombres super-premiers
    Par mo5bzn dans le forum Pascal
    Réponses: 9
    Dernier message: 06/02/2015, 21h58
  3. Recherche de nombres premiers
    Par jca dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 03/02/2013, 18h44
  4. recherche de nombre premier
    Par hazaki dans le forum Débuter
    Réponses: 4
    Dernier message: 27/10/2010, 20h55
  5. Réponses: 15
    Dernier message: 30/07/2008, 19h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo