Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, quizz et autres ressources
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/11/2008, 14h45   #1
mf.chedly
Invité régulier
 
Inscription : novembre 2008
Messages : 13
Détails du profil
Informations personnelles :
Âge : 21

Informations forums :
Inscription : novembre 2008
Messages : 13
Points : 7
Points : 7
Envoyer un message via MSN à mf.chedly Envoyer un message via Skype™ à mf.chedly
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.
mf.chedly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2008, 18h53   #2
kaikait
Candidat au titre de Membre du Club
 
Étudiant
Inscription : 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
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
kaikait est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2008, 19h59   #3
M.Dlb
Rédacteur/Modérateur
 
Avatar de M.Dlb
 
Inscription : avril 2002
Messages : 2 274
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2002
Messages : 2 274
Points : 3 381
Points : 3 381
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
M.Dlb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2008, 20h43   #4
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
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.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2008, 21h05   #5
darrylsite
Rédacteur
 
Avatar de darrylsite
 
Inscription : juillet 2007
Messages : 1 296
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 1 296
Points : 1 922
Points : 1 922
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
Type de fichier : pas PBIGINT.PAS (15,9 Ko, 9 affichages)
darrylsite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2008, 21h50   #6
mf.chedly
Invité régulier
 
Inscription : novembre 2008
Messages : 13
Détails du profil
Informations personnelles :
Âge : 21

Informations forums :
Inscription : novembre 2008
Messages : 13
Points : 7
Points : 7
Envoyer un message via MSN à mf.chedly Envoyer un message via Skype™ à mf.chedly
ouiii mais c'est ma premier pas vers la programmation.
Merci a vous amis
La prochaine fois ça sera améliorer
mf.chedly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2008, 01h41   #7
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
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.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2008, 10h32   #8
CapJack
Membre émérite
 
Avatar de CapJack
 
Homme
Prof, développeur amateur vaguement éclairé...
Inscription : mars 2004
Messages : 623
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 : 623
Points : 947
Points : 947
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).
CapJack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2008, 15h52   #9
mf.chedly
Invité régulier
 
Inscription : novembre 2008
Messages : 13
Détails du profil
Informations personnelles :
Âge : 21

Informations forums :
Inscription : novembre 2008
Messages : 13
Points : 7
Points : 7
Envoyer un message via MSN à mf.chedly Envoyer un message via Skype™ à mf.chedly
Oui vous avez raisons.
Mais je suis débutant dans le monde de programmation .
pas à pas j'augmente mes connaissances.
Merci pour vous
mf.chedly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2008, 16h03   #10
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
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.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2008, 16h48   #11
mf.chedly
Invité régulier
 
Inscription : novembre 2008
Messages : 13
Détails du profil
Informations personnelles :
Âge : 21

Informations forums :
Inscription : novembre 2008
Messages : 13
Points : 7
Points : 7
Envoyer un message via MSN à mf.chedly Envoyer un message via Skype™ à mf.chedly
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
mf.chedly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2008, 17h32   #12
krachik
Expert Confirmé
 
Avatar de krachik
 
Inscription : décembre 2004
Messages : 1 964
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 1 964
Points : 3 965
Points : 3 965
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
krachik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2008, 18h39   #13
mf.chedly
Invité régulier
 
Inscription : novembre 2008
Messages : 13
Détails du profil
Informations personnelles :
Âge : 21

Informations forums :
Inscription : novembre 2008
Messages : 13
Points : 7
Points : 7
Envoyer un message via MSN à mf.chedly Envoyer un message via Skype™ à mf.chedly
Merci Krachik
mf.chedly est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h13.


 
 
 
 
Partenaires

Hébergement Web