+ Répondre à la discussion
Affichage des résultats 1 à 13 sur 13
  1. #1
    Invité régulier
    Inscrit en
    novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 23

    Informations forums :
    Inscription : novembre 2008
    Messages : 13
    Points : 7
    Points
    7

    Par défaut Somme de deux entiers de 200 chiffres

    Voilà, j'ai créé un logiciel en Pascal qui permet de calculer la somme de deux entiers. En Pascal il ne faut pas dépasser 32767 mais avec ce programme on peut dépasser 32767.
    Vos avis sur mon projet svp
    dsl pour mon pauvre français
    Code :
    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
    program mfchedly;
    uses wincrt;
    var
      ch1,ch2,ch,ch3:string;
      divx,test1,test2,n1,n2,i,x1,x2,x,e:integer;
    begin
      repeat
        test1:=0;
        writeln('Saisir un entier');
        readln(ch1);
        for i := 1 to length(ch1) do
          if ch1[i] in ['0','1','2','3','4','5','6','7','8','9' ]then
            test1:= test1+1 ;
      until test1=length(Ch1);
      repeat
        test2:=0;
        writeln('Saisir un autre entier');
        readln(ch2);
        for i:= 1 to length (ch2) do
          if ch2[i] in ['0','1','2','3','4','5','6','7','8','9' ]
            then test2:=test2+1  ;
      until test2=length(ch2);
      if length(ch1) > length(ch2)  then
        begin
          for i:= 1 to (length(ch1)-length(ch2))do
            insert('0',ch2,1)
        end
      else
        if length(ch2) > length(ch1) then
          for i:= 1 to (length(ch2)-length(ch1)) do
            insert('0',ch1,1);
      insert('0',ch1,1);
      insert('0',ch2,1);
      x1:=0 ;
      ch3:='';
      for i:= length(ch1) downto 1 do
        begin
          val(ch1[i],n1,e);
          val(ch2[i],n2,e);
          if x1+n2+n1 in [10..19] then
            begin
              divx:=x1+n1+n2;
              divx:= divx mod 10;
              str(divx,ch);
              ch3:=ch+ch3 ;
              x1:=1;
            end
          else
            begin
              x2:=x1+n1+n2;
              str(x2,ch);
              ch3:=ch+ch3;
              x1:=0;
            end;
        end;
      if ch3[1]='0' then delete(ch3,1,1);
      writeln(ch3);
    end.

  2. #2
    Candidat au titre de Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2008
    Messages : 14
    Points : 13
    Points
    13

    Par défaut

    sinon,

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    program addition;
     
    var
       x : longint;
       y : longint;
     
    begin
     
       writeln('x1 ? ');
       readln(x);
       writeln('x2 ? ');
       readln(y);
     
       writeln('L''addition des deux nombres vaut : ', x+y, '.');
     
    end.
    mais il est limité également

  3. #3
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    avril 2002
    Messages
    2 349
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations forums :
    Inscription : avril 2002
    Messages : 2 349
    Points : 3 868
    Points
    3 868

    Par défaut

    C'est un concours ?

    Code :
    1
    2
    3
    4
    5
    6
    program addition;
     
    begin
      writeln('1 + 1 = 2');
      readln;
    end.
    Plus sérieusement, tu devrais revoir ton code et le rendre lisible et compréhensible mf.chedly. Parce que là, c'est illisible, je n'ai même pas pris la peine de regarder vu la tête du code...
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  4. #4
    Expert Confirmé Sénior

    Inscrit en
    août 2006
    Messages
    3 584
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 584
    Points : 4 630
    Points
    4 630

    Par défaut

    Foe,

    Il faut correctement présenter le code (indentation, aération par des lignes vides pour séparer les différents blocs, commentaires...)

    ET éclater tout ça en fonctions/procédures pour rendre le code plus facile à suivre.

    Comme il est écrit, je n'ai pas envie de plonger dans ton code.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  5. #5
    Rédacteur
    Avatar de darrylsite
    Inscrit en
    juillet 2007
    Messages
    1 300
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 1 300
    Points : 2 210
    Points
    2 210

    Par défaut

    j' ai eu à faire une unité traitant toutes les operations basiques sur des grands entiers (300 chiffres) pour le besion de la cryptographie RSA. Le probleme qui se pose alors est le cout du calcul.
    Je te donne en piece jointe cette unité.
    Fichiers attachés Fichiers attachés

  6. #6
    Invité régulier
    Inscrit en
    novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 23

    Informations forums :
    Inscription : novembre 2008
    Messages : 13
    Points : 7
    Points
    7

    Par défaut

    ouiii mais c'est ma premier pas vers la programmation.
    Merci a vous amis
    La prochaine fois ça sera améliorer

  7. #7
    Expert Confirmé Sénior

    Inscrit en
    août 2006
    Messages
    3 584
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 584
    Points : 4 630
    Points
    4 630

    Par défaut

    Heo,

    Pour implémenter une bibliothèque de calcul multi-précision, il faut oublier les char comme tu l'as fait, ce n'est absolument pas efficace (on peut éventuellement s'en servir pour tester les algorithmes, sans plus).

    Pour être efficace, il faut faire de l'assembleur (je ne connais aucun langage, et donc aucun compilateur capable d'optimiser ce genre de calcul), en faisant :

    - Le mot à traiter en une fois (au lieu de char) doit être le type natif du processeur (32 bits sur une machine 32, 64 sur 64... [pour le 64, sous réserve que le système d'exploitation soit lui-même en 64 bits, sinon ça posera des problèmes, et il faut alors se limiter à la taille maxi des mots pour l'OS]).

    - Ce mot doit être traité en non signé, pour profiter au maximum de la capacité du processeur.

    - Pour distinguer nombres positifs/négatifs, on ajoute un mot dans lequel on stocke le signe.

    - Pour connaître la longueur actuelle du nombre, encore un mot pour la stocker.

    Le tout stocké dans un tableau, qui peut être dynamique pour la souplesse, mais il faut alors être attentif pour les allocations (ne jamais diminuer l'allocation faite pour un tableau, sauf besoin impératif de mémoire, et lors de l'augmentation, ajouter une quantité suffisante pour ne pas avoir à recommencer à chaque tour de boucle [en général, on double la longueur réservée chaque fois qu'on a besoin de l'augmenter])

    Bien entendu, cela implique d'écrire ce qu'il faut pour traduire une chaîne contenant le nombre au format de ces données, et inversement, mais c'est facile à faire, une fois qu'on a la division et la multiplication.

    Enfin, une fois les algorithmes "naïfs" implémentés, il faut implémenter des algorithmes plus performants, car il en existe qui permettent de gagner beaucoup en temps de calcul quand la taille des nombres augmente).

    Donc, bon courage si tu veux aller plus loin.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  8. #8
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    mars 2004
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 622
    Points : 970
    Points
    970

    Par défaut

    On peut aussi utiliser les bonnes vieilles instructions BCD (ou DCB en français) de l'assembleur x86. Je sais ce que tu vas me dire, droggo, c'est moins performant pour les calculs (encore que pour les additions/soustractions je n'en sois pas certain sur un processeur moderne), mais on gagne pour les conversions vers/depuis l'écriture décimale. N'ayant jamais tenté de programmer une multiplication/division en BCD, je ne sais pas pour ces opérations (je m'étais posé la question, mais n'ai jamais eu le temps de le faire).

  9. #9
    Invité régulier
    Inscrit en
    novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 23

    Informations forums :
    Inscription : novembre 2008
    Messages : 13
    Points : 7
    Points
    7

    Par défaut

    Oui vous avez raisons.
    Mais je suis débutant dans le monde de programmation .
    pas à pas j'augmente mes connaissances.
    Merci pour vous

  10. #10
    Expert Confirmé Sénior

    Inscrit en
    août 2006
    Messages
    3 584
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 584
    Points : 4 630
    Points
    4 630

    Par défaut

    Gai,
    Citation Envoyé par CapJack Voir le message
    On peut aussi utiliser les bonnes vieilles instructions BCD (ou DCB en français) de l'assembleur x86. Je sais ce que tu vas me dire, droggo, c'est moins performant pour les calculs (encore que pour les additions/soustractions je n'en sois pas certain sur un processeur moderne), mais on gagne pour les conversions vers/depuis l'écriture décimale. N'ayant jamais tenté de programmer une multiplication/division en BCD, je ne sais pas pour ces opérations (je m'étais posé la question, mais n'ai jamais eu le temps de le faire).
    C'est bien ce je te dis, et effectivement, c'est moins efficace (ne pas oublier, entre autres, qu'a chaque calcul il faut demander la correction au processeur, et ces opérations n'ont pas vraiment été optimisées [d'ailleurs, je n'en ai jamais réellement compris l'intérêt]), et en plus tu perds de la place, puisque tu n'utilises pas toute la capacité de représentation des valeurs de ton processeur.

    Les conversions ne sont pas le problème de ce genre de bibliothèque, car dès qu'on s'en sert pour des calculs effectifs, donc enchaînés, etc., les conversions ne représentent qu'une toute petite partie de l'exécution (j'ai des programmes qui calculent plusieurs heures ou jours entre 2 conversions ).

    Citation Envoyé par mf.chedly Voir le message
    Mais je suis débutant dans le monde de programmation
    Ma remarque était destinée à t'orienter, pas à te reprocher ce que tu as fait concernant la possibilité de calculer sans limite de taille.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  11. #11
    Invité régulier
    Inscrit en
    novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 23

    Informations forums :
    Inscription : novembre 2008
    Messages : 13
    Points : 7
    Points
    7

    Par défaut

    je crois qu'il faut avoir des chose avant de programmer en pascal par exemple des cours d'algorithme.....
    svp que ce qu'il faut faire....

    c'est mieux d'étudier assembleur avant le pascal ou directement vers le c ou avoir une formation en algo !!!!!!!!!!!.
    Aidez moi donnez moi un schéma à suivre pour être un excellent programmeur

  12. #12
    Expert Confirmé Sénior
    Avatar de krachik
    Inscrit en
    décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 1 964
    Points : 4 168
    Points
    4 168

    Par défaut

    Bonjour
    Citation Envoyé par mf.chedly Voir le message
    je crois qu'il faut avoir des chose avant de programmer en pascal par exemple des cours d'algorithme.....
    svp que ce qu'il faut faire....
    +1 voila http://algo.developpez.com/cours/
    Citation Envoyé par mf.chedly Voir le message
    c'est mieux d'étudier assembleur avant le pascal ou directement vers le c ou avoir une formation en algo !!!!!!!!!!!.
    Aidez moi donnez moi un schéma à suivre pour être un excellent programmeur
    Quelque soit le langage choisi il faut un cours d'algorithme à coté le code Pascal ne fait que traduire l'algorithme en langage pour le compilateur.
    Apres étudier un langage avant un autre comme Assembleur avant Pascal, le choc peut être brutal pour certains mais ça peut justement varier suivant les personnes et donc c'est possible à faire. Pascal déjà te montrera les bonnes bases de la programmation à avoir pour débuter encore l'Assembleur ou C sont encore plus stricte (l'assembleur ça pardonne pas ). Après faut savoir les objectifs qu'on s'est fixé pour choisir ....

    Cordialement
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  13. #13
    Invité régulier
    Inscrit en
    novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 23

    Informations forums :
    Inscription : novembre 2008
    Messages : 13
    Points : 7
    Points
    7

    Par défaut

    Merci Krachik

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •