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 :

Erreur "system error divide by zero or overflow error"


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2018
    Messages : 2
    Par défaut Erreur "system error divide by zero or overflow error"
    Bonjour,
    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
    PROGRAM BAC2014 ;
    USES WINCRT ;
    VAR i,n,m:integer;
     
     procedure saisir(var n,m:integer);
     begin
       repeat
       writeln('ecrire l''entier n et m');
       readln(n,m);
       until ((n>=100)and(m>n));
     end;
     
     function chercher(m,n:integer):boolean; 
     var i,s,a,x,b,nb,e:integer;
         ch:string;
         test:boolean;
     begin
      for i:=n to m do
      begin
       s:=0;
       str(i,ch);
       for a:=1 to length(ch) do
        begin
        val(ch[i],x,e);
        s:=x+s;
        end;
       nb:=0;
       for b:=1 to i-1 do
        begin
         if (((i-1) mod b)=0) then
         nb:=nb+1;
        end;
     
        if((i mod s=0) and(nb=2)) then
        test:=true
        else test:=false
      end;
      chercher:=test;
     end;
     
    begin
     
    saisir(n,m);
    for i:=n to m do
     begin     
      if chercher(m,n)=true then
      writeln(i,'car',i,' est hashard et son predecesseur ',i-1,'est un nombre premier') ;
     end;
     
    end.
    Je n'ai pas compris où se trouve l'erreur (system error divide by zero or overflow error)

  2. #2
    Membre Expert

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Billets dans le blog
    9
    Par défaut Erreur "system error divide by zero or overflow error"
    Bonjour,

    Citation Envoyé par anis978 Voir le message
    ... Je n'ai pas compris où se trouve l'erreur (system error divide by zero or overflow error)
    ... Et un lecteur a beaucoup de mal à comprendre la finalité du programme, faute de toute explication .
    Que voulais-tu faire ?

    Je remarquerai simplement que:
    a) la variable (e) doit être du type LongInt et contient le code d'erreur relatif à l'échec éventuel de l'instruction Val(Ch[ i], x, e);
    b) la division interdite par zéro intervient lors de l'appel de (i MOD s), ce qui implique que (s) reste nul, que son incrémentation
    ne s'est jamais réellement produite, et donc que l'incrément (x) est lui aussi toujours nul.

    Tu devrais par curiosité afficher le code d'erreur, et introduire une condition de poursuite du calcul, évitant ainsi le plantage du programme:
    Bien que la finalité du programme reste pour moi un sombre mystère , j'ai la vague impression que (i) devrait être borné inclusivement par 48 et 57 ...

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2018
    Messages : 2
    Par défaut
    Bonjour wiwaxia Merci pour votre attention, t'as raison j'ai oublié d'expliquer le fonctionnement du programme ; voilà de quoi il s'agit :
    Un nombre Harshad est un entier qui est divisible par la somme de ses chiffres.
    Exemple : 198 est un nombre Harshad.
    En effet 198 est divisible par la somme de ses chiffres qui est 18 (1+9+8=18).

    Travail demandé :
    Écrire un programme Pascal qui permet de chercher et d’afficher tous les nombres Harshad de l’intervalle [n, m] (avec 100 <= n < m) et dont Ie prédécesseur de chacun est premier.

    N.B : On rappelle qu’un nombre est dit premier s’il est dlVisible uniquement par 1 et par lui-même. Par définition, 1 n’est pas considéré comme étant un nombre premier.
    J'ai essayé de changer le type de e de integer à longint mais Pascal ne l'a pas accepté, il m'a obligé à la déclarer comme type integer.
    J'ai essayé de changer un peu la structure du programme, l'erreur a disparu mais il y a encore un problème : le programme n'accomplit pas la tâche demandée par l'exercice ; il reste inactif.
    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
    PROGRAM BAC2014 ;
    USES WINCRT ;
    VAR i,n,m:integer;
     
     procedure saisir(var n,m:integer);
     begin
       repeat
       writeln('ecrire l''entier n et m');
       readln(n,m);
       until ((n>=100)and(m>n));
     end;
     
     function harshad(m,n:integer):boolean; 
     var i,s,a,x,e:integer;
         ch:string;
         test1:boolean;
     begin
      for i:=n to m do
      begin
       s:=0;
       str(i,ch);
       for a:=1 to length(ch) do
        begin
        val(ch[i],x,e);
        s:=x+s;
        end;
    end;
    if i mod s=0 then 
    	test1:=true;
    harshad:=test1;
    end;
     
    function premier(m,n:integer):boolean; 
    var i,nb,b:integer;
    test3:boolean;
    begin
      for i:=n to m do
    begin 	
    b:=0;
       repeat 
         b:=b+1;
         test3:=(((i-1) mod b)=0); 
    until ((test3=false)or(b=i-1));
    end;
      premier:=test3;
     end;
     
     
    begin
    saisir(n,m);
    for i:=n to m do
      begin     
      if ((premier(m,n)=true) and (harshad(m,n)=true)) then
      writeln(i,'car',i,' est hashard et son predecesseur ',(i-1),'est un nombre premier') ;
     end;
    end.

  4. #4
    Membre Expert

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Billets dans le blog
    9
    Par défaut Erreur "system error divide by zero or overflow error"
    Voilà désormais un énoncé parfaitement clair, auquel ton programme principal répond dans sa structure; il n'y manque que l'indentation indispensable à la compréhension rapide du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BEGIN
      Saisir(n,m);
      FOR i:=n TO m DO
        BEGIN
          IF ((Premier(m,n)=true) AND (Harshad(m,n)=true)) THEN
            WriteLn(i,'car',i,' est hashard et son prédécesseur ',(i-1),'est un nombre premier') ;
        END
    END.
    L'usage des majuscules est souhaitable (malgré l'insensibilité du Pascal à la casse) en ce qu'il facilite la lecture du texte source; je m'en suis toujours tenu au style recommandé dans les premières bibles du Turbo Pascal éditées par Borland dans les années 80.

    Il ne reste donc qu'à examiner séparément les fonctions booléennes Premier(...) et Harshad(...).

    Questions générales:
    1°) Les entiers négatifs apparaissent-ils dans les calculs ? Non, probablement, ce qui autorise l'intervention de variables au format Word et double l'étendue du domaine des entiers naturels (MaxWord = 216 - 1 = 65535).

    2°) Il s'agit de détecter au cours d'une énumération tous les couples d'entiers successifs (i - 1 , i) tels que le plus petit soit premier, et son suivant hashard: le coeur de ton programme ne devrait-il pas présenter une structure apparentée à ce qui suit ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      FOR i:=n TO m DO
        BEGIN
          IF ((Premier(i - 1)=true) AND (Harshad(i)=true)) THEN
            WriteLn(i,'car',i,' est hashard et son prédécesseur ',(i-1),'est un nombre premier') ;
        END
    Chacune des fonctions booléennes ne devrait dépendre que de l'indice courant (i).

    3°) L'expression booléenne (Test = True) n'est-elle pas identiquement équivalente à (Test) ? L'instruction conditionnelle précédente peut donc être abrégée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF (Premier(i - 1) AND Harshad(i)) THEN ...
    ou si l'on veut se conformer aux exigences des plus maniaques (dont je fais partie):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      VAR TestP, TestH: Boolean;
     ... / ...
        TestP:= Premier(i - 1); TestH:= Harshad(i);
        IF (TestP AND TestH) THEN ...
    On pourra ensuite passer au contenu de ces fonctions.

  5. #5
    Membre Expert

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Billets dans le blog
    9
    Par défaut Erreur "system error divide by zero or overflow error"
    La mise au point militante qui vient d'être faite me fait songer songer au pugilat survenu entre deux manifestants, dont d'un était contre la guerre, et l'autre pour la paix

    La définition donnée a l'incontestable mérite de la concision, mais n'empêche pas la subsistance de sa version traditionnelle, même sur des sites qui n'ont pas la réputation d'être tenus par des demeurés :
    1_ A prime number (or prime integer, often simply called a "prime" for short) is a positive integer p>1 that has no positive integer divisors other than 1 and p itself.
    More concisely, a prime number p is a positive integer having exactly one positive divisor other than 1, meaning it is a number that cannot be factored.

    2_ A number n is prime if it is greater than 1 and has no positive divisors except 1 and n.
    A natural number is prime if and only if it has exactly two (positive) divisors.

    anis978 a suffisamment de pain sur la planche pour qu'on ne lui conteste pas une définition reçue de l'un de ses professeurs, et dépourvue de toute incidence sur l'algorithme en chantier .

  6. #6
    Membre Expert

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Billets dans le blog
    9
    Par défaut Erreur "system error divide by zero or overflow error"
    @ anis978, justement: un détail qui m'avait échappé m'inquiète un peu:

    Citation Envoyé par anis978 Voir le message
    ... J'ai essayé de changer le type de (e) de Integer à LongInt mais Pascal ne l'as pas accepté, il m'a obligé de la déclarer comme type Integer ...
    Quelle version du Turbo Pascal utilises-tu ? Je crois me rappeler que la version 5.5 n'acceptait pas les entiers longs ...
    De plus, faut-il vraiment que tu utilises WinCrt ?

    Si ce n'est fait il serait bon, à brève échéance, que tu installes TP7 (téléchargeable sur Developpez.com, un excellent site pour Développeurs-Programmeurs Pro(1)).
    Soit dit pour te rassurer, le présent programme est réalisable sur une version ancienne.

    (1)Publicité entièrement objective et désintéressée.

    # PS: Il faut vraiment indenter le code source (à défaut d'user de majuscules) afin de ne pas braquer les intervenants, dont l'irritation est légitime

    @ Jipété Pas de panique, on examinera les fonctions séparément.

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Bonjour,
    Citation Envoyé par wiwaxia Voir le message
    La mise au point militante qui vient d'être faite me fait songer songer au pugilat survenu entre deux manifestants, dont d'un était contre la guerre, et l'autre pour la paix

    La définition donnée a l'incontestable mérite de la concision, mais n'empêche pas la subsistance de sa version traditionnelle, même sur des sites qui n'ont pas la réputation d'être tenus par des demeurés :
    1_ A prime number (or prime integer, often simply called a "prime" for short) is a positive integer p>1 that has no positive integer divisors other than 1 and p itself.
    More concisely, a prime number p is a positive integer having exactly one positive divisor other than 1, meaning it is a number that cannot be factored.

    2_ A number n is prime if it is greater than 1 and has no positive divisors except 1 and n.
    A natural number is prime if and only if it has exactly two (positive) divisors.

    anis978 a suffisamment de pain sur la planche pour qu'on ne lui conteste pas une définition reçue de l'un de ses professeurs, et dépourvue de toute incidence sur l'algorithme en chantier .
    Désolé pour toi, mais la définition que je donne est pour le moins plus "traditionnelle" que tes sites, c'est tout simplement celle d'EUCLIDE !!

    Il faut arrêter de prendre internet comme si c'était une référence absolue.

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Bonjour,
    Citation Envoyé par anis978 Voir le message
    N.B : On rappelle qu’un nombre est dit prcmier s’il est dlVisible uniquement par 1 et par
    lui-meme. Par définition, 1 n’est pas considéré comme étant un nombre premier.
    Non !!

    La définition est : Un nombre premier a 2 diviseurs. Ce que tu donnes comme définition n'est en fait qu'une conséquence.

    Et comme 1 n'a qu'un diviseur, il n'est pas premier, et on n'a donc pas de raison de préciser Par définition, 1 n’est pas considéré comme étant un nombre premier..

    Ça finit par me fatiguer d'avoir à préciser ce genre de truc élémentaire

Discussions similaires

  1. [2012] Divide by zero error encountered.
    Par soannilan dans le forum Développement
    Réponses: 2
    Dernier message: 08/06/2017, 13h05
  2. erreur system error: 111
    Par nicolasSENAME dans le forum MySQL
    Réponses: 2
    Dernier message: 21/12/2009, 08h58
  3. Erreur système . Code : 1410 ?
    Par Interruption13h dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/05/2006, 08h59
  4. Erreur systeme
    Par toxyko dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/03/2006, 15h51
  5. [VB.NET] Erreur System.InvalidCastException
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/09/2004, 11h47

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