Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Turbo Pascal
Turbo Pascal Le compilateur de Borland et ses dérivés (Borland Pascal, ...). Avant de poster -> Tout sur Turbo Pascal
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 28/11/2009, 19h53   #1
lediamant
Invité de passage
 
Inscription : novembre 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 9
Points : 1
Points : 1
Par défaut Conversion en chiffres romains

Bonjour

Je ne trouve pas l'erreur de mon programme. Quand je compile c'est ok mais quand je le teste, ça ne fonctionne pas.
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
program rom;
uses crt;
var
  nombre : integer;
 
procedure romain(var n :integer;limite :integer;txt:string);
 
         Begin
 
              while n >=limite do
 
              write ('txt');
              n:=n-limite;
         end;
 
Begin
   clrscr;
   repeat
         gotoxy(1,1);
         write ('Entrez un nombre (de 1 à 10000) : ');
         clreol;
         readln(nombre);
   until (nombre>0)and(nombre<=10000);
 
   gotoxy(1,3);
   write('Le nombre ',nombre,' correspond en romain : ');
 
   romain (nombre,1000,'M');
   romain (nombre,999,'IM');
   romain (nombre,900,'CM');
   romain (nombre,500, 'D');
   romain (nombre,400,'CD');
   romain (nombre,100, 'C');
   romain (nombre,99, 'IC');
   romain (nombre,90, 'XC');
   romain (nombre,50,  'L');
   romain (nombre,49, 'IL');
   romain (nombre,40, 'XL');
   romain (nombre,10,  'X');
   romain (nombre,9,  'IX');
   romain (nombre,5,   'V');
   romain (nombre,4,  'IV');
   romain (nombre,1,   'I');
 
 readln;
 
end.
Pouvez-vous m'aider ?
Merci
lediamant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2009, 20h06   #2
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 413
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 413
Points : 3 768
Points : 3 768
Noe,

Retour à la base, c'est à dire papier + crayon, et tu suis ton programme ligne à ligne, en notant toutes les valeurs des variables.
__________________
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 28/11/2009, 22h25   #3
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
Citation:
Code :
1
2
3
4
5
6
7
 
procedure romain(var n :integer;limite :integer;txt:string);
Begin
 while n >=limite do
  write ('txt');
 n:=n-limite;
end;
ce bout de code peu conduire à une boucle infinie. Je crois que u devrais ecrire
Code :
1
2
3
4
5
6
7
8
9
 
procedure romain(var n :integer;limite :integer;txt:string);
Begin
 while n >=limite do
  begin
   write ('txt');
   n:=n-limite;
  end;
end;
Citation:
Quand je compile c'est ok mais quand je le teste, ça ne fonctionne pas
Qu'enend tu par "ne fonctionne pas?"?
Pense à mettre des balise code (#), et bien identer on code.
darrylsite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2009, 10h50   #4
richard
Membre expérimenté
 
Inscription : avril 2002
Messages : 427
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 427
Points : 550
Points : 550
Bonjour,

Ton programme compile sans problème avec FreePascal (je n'utilise plus Turbo et conseille de ne plus le faire, Free est totalement compatible).
Mais il y a une (autre) erreur qui l'empêche de fonctionner correctement :

Code :
1
2
3
4
5
6
7
8
procedure romain(var n :integer;limite :integer;txt:string);
Begin
 while n >=limite do
  begin
   write ('txt'); { Faux ! Ceci écrit la chaîne 'txt' à la place du du chiffre romain à cause des apostrophes}
   n:=n-limite;
  end;
end;
Il faut donc que ta procédure ressemble à ceci :

Code :
1
2
3
4
5
6
7
8
procedure romain(var n :integer;limite :integer;txt:string);
Begin
 while n >=limite do
  begin
   write (txt);
   n:=n-limite;
  end;
end;
richard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2009, 18h19   #5
lediamant
Invité de passage
 
Inscription : novembre 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 9
Points : 1
Points : 1
Citation:
Envoyé par darrylsite Voir le message
ce bout de code peu conduire à une boucle infinie. Je crois que u devrais ecrire
Code :
1
2
3
4
5
6
7
8
9
 
procedure romain(var n :integer;limite :integer;txt:string);
Begin
 while n >=limite do
  begin
   write ('txt');
   n:=n-limite;
  end;
end;
Qu'enend tu par "ne fonctionne pas?"?
Pense à mettre des balise code (#), et bien identer on code.
Merci Darrylsite grâce à toi ça fonctionne (ca ne boucle+ à l'infinie).
Mais pq faut-il mettre 2 begin et 2 end;
Désolé de cette question mais j'essaie de comprendre pour ne + commettre des erreurs
lediamant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2009, 19h01   #6
Dr.Who
Membre Expert
 
Avatar de Dr.Who
 
Inscription : septembre 2009
Messages : 980
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2009
Messages : 980
Points : 1 175
Points : 1 175
cadeaux ... (voir pj)

à savoir que la norme des chiffres romain c'est 1 à 3999 et non 1 à 10000!

en gros, les romains ne savaient pas et n'avaient pas besoin de compter au delà de 4000 et n'avaient pas la notion des nombres négatif.
Fichiers attachés
Type de fichier : zip RomanUtils.zip (12,7 Ko, 14 affichages)
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
Ma messagerie n'est pas la succursale du forum... merci!
Dr.Who est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2009, 21h12   #7
Alcatîz
Responsable Pascal

 
Avatar de Alcatîz
 
Homme Jean-Luc Gofflot
Ressources humaines
Inscription : mars 2003
Messages : 5 506
Détails du profil
Informations personnelles :
Nom : Homme Jean-Luc Gofflot
Âge : 46
Localisation : Belgique

Informations professionnelles :
Activité : Ressources humaines
Secteur : Service public

Informations forums :
Inscription : mars 2003
Messages : 5 506
Points : 39 194
Points : 39 194
Envoyer un message via ICQ à Alcatîz Envoyer un message via MSN à Alcatîz Envoyer un message via Yahoo à Alcatîz Envoyer un message via Skype™ à Alcatîz
Bonjour,
Citation:
Envoyé par lediamant Voir le message
Merci Darrylsite grâce à toi ça fonctionne (ca ne boucle+ à l'infinie).
Mais pq faut-il mettre 2 begin et 2 end;
Désolé de cette question mais j'essaie de comprendre pour ne + commettre des erreurs
La différence entre les deux extraits de code suivants :
Code :
1
2
3
4
5
while n >=limite do
  begin
   write ('txt');
   n:=n-limite;
  end;
Code :
1
2
3
while n >=limite do
  write ('txt');
 n:=n-limite;
est que, dans le premier, c'est tout le bloc délimité par begin et end
Code :
1
2
   write ('txt');
   n:=n-limite;
qui est exécuté à chaque itération de la boucle alors que, dans le second, seule l'instruction
est exécutée et donc n n'est jamais modifié, d'où la boucle infinie.
__________________
Règles du forum
Tutoriels, exercices, FAQ, sources, compilateurs, outils, livres Pascal
Mes tutoriels et sources Pascal
FAQ Assembleur

Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
Alcatîz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2009, 09h58   #8
richard
Membre expérimenté
 
Inscription : avril 2002
Messages : 427
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 427
Points : 550
Points : 550
Citation:
Envoyé par lediamant Voir le message
Merci Darrylsite grâce à toi ça fonctionne (ca ne boucle+ à l'infinie).
Je persiste à dire que ton programme ne fonctionne pas et ne peut pas fonctionner correctement (voir mon post précédent). Compile et teste ton programme, tu verras ...
richard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2009, 10h45   #9
richard
Membre expérimenté
 
Inscription : avril 2002
Messages : 427
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 427
Points : 550
Points : 550
Citation:
Envoyé par Dr.Who Voir le message
cadeaux ... (voir pj)

à savoir que la norme des chiffres romain c'est 1 à 3999 et non 1 à 10000!

en gros, les romains ne savaient pas et n'avaient pas besoin de compter au delà de 4000
Ceci est faux. Les Romains avaient bien entendu besoin de compter au-delà de 3999 (il suffit pour cela de lire les documents comptables du port d'Avignon par exemple et on comprend l'énorme machine économique et la rigueur de la comptabilité que cela suposait ...). Simplement le système changeait à 3999 : pour exprimer un nombre supérieur ils utilisaient le système du surlignement :

_
V = cinq mille
__
VICCCLI = 6351 etc.

Référence : Vicipaedia (attention c'est en latin mais facile à comprendre)

Citation:
Envoyé par Vicipaedia
Linea super numerum indicat miliens

____
CLXI = miliens CLXI = 161 x 1000 = 161 000

Et même les centaines de milliers !

Citation:
Envoyé par Vicipaedia
Linea super numerum et lineae verticales indicant centiens milia
_____
|LVI| = centiens milia LVI = 56 x 100 x 1000 = 5 600 000 (lege: quinquagiens sexiens centena milia)
De plus tout n'était pas standardisé, il y a avait donc des variantes. Par exemple : IV pouvait aussi s'écrire IIII (regardez vos montres à aiguilles ou vos pendules), 9 pouvait aussi s'écrire VIIII et pour 49 on avait 3 possibilités : XLIX / XXXXIX / IL
Toutes ces variantes sont attestées dans différents documents. Nous avons retenu la forme principale le plus souvent, i.e celle qui était la plus utilisée dans l'empire mais cela dépendait des régions en fait.

Un programme correct de conversion doit tenir compte évidemment de ces variantes.
richard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2009, 11h10   #10
Dr.Who
Membre Expert
 
Avatar de Dr.Who
 
Inscription : septembre 2009
Messages : 980
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2009
Messages : 980
Points : 1 175
Points : 1 175
ce que je disais c'etait plus pour plaisanter qu'autre chose.

j'ai écris cette unité sur un autre site. on y parle justement de la notation "moderne" des chiffres romains et j'y explique pourquoi j'ai volontairement limité l'unité aux chiffres romains de 1 à 3999.
par contre, il me semble que ma fonction est tout à fait compatible avec les chiffres romain exotique, c'est uniquement les validations d'intervalles qui limite les nombres possible en entrée.
mais qu'on entre IV ou IIII, elle renverra 4, IX ou VIIII elle renverra 9... aucun problème.
par contre, c'est dommage, il semblerai que tout les commentaires de florenth, qui m'avais aider a l'époque ont disparus...

par ailleurs il y a eu un portage Java fait par DJE_JAY, il fournis le liens dans le liens que j'ai mis.
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
Ma messagerie n'est pas la succursale du forum... merci!
Dr.Who est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2009, 11h17   #11
richard
Membre expérimenté
 
Inscription : avril 2002
Messages : 427
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 427
Points : 550
Points : 550
Désolé, je n'avais pas compris.

=> J'ai téléchargé ton unité et je vais regarder ça dès que j'ai un moment. j'avais fait un programme similaire en TurboPascal objet (c'était un de mes premiers objets ...) V.6 le tien est probablement plus développé, je n'avais pas traité le surlignement par exemple.

NB : après avoir relu ton post et le fil en lien, il y a une erreur : la notation "moderne" dont parle un des contributeurs n'a pas de sens. Les éléments que je donne (et les exemples qu'il donne) étaient en usage dès les haut Empire, il n'y a aucune "modernité" là-dedans. Depuis les Etrusques on savait compter bien au-delà de 3999, ceci est une grave erreur historique.
richard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2009, 03h56   #12
Dr.Who
Membre Expert
 
Avatar de Dr.Who
 
Inscription : septembre 2009
Messages : 980
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2009
Messages : 980
Points : 1 175
Points : 1 175
je vois que tu maitrise parfaitement l'histoire des chiffres romains !

tu es prof ?

en tout cas, tu peux tout à fait utiliser la base de mon unité pour l'améliorer.
ça peux te faire gagner du temps, au cas ou.
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
Ma messagerie n'est pas la succursale du forum... merci!
Dr.Who est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2009, 09h13   #13
richard
Membre expérimenté
 
Inscription : avril 2002
Messages : 427
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 427
Points : 550
Points : 550
C'est ça

Très exactement je suis prof de lettres ... ce qui est étrange pour quelqu'un qui programme mais j'ai fait aussi des études de linguistique et dans ce cadre j'ai eu un module (en maîtrise) de programmation et langages en ... BASIC que j'ai lâché très tôt pour le Pascal (auquel je suis revenu après un détour par Python qui est très bon aussi je trouve mais je préfère la compilation pour des raisons d'environnemnt professionnel).

Je vais regarder de près ton unité dans quelque temps et piquer tes idées () pour améliorer mes objets.

Merci pour ce code.
richard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2009, 14h07   #14
Dr.Who
Membre Expert
 
Avatar de Dr.Who
 
Inscription : septembre 2009
Messages : 980
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2009
Messages : 980
Points : 1 175
Points : 1 175
he ben ... je me sens tout petit avec mes deux BTS d'un coups

prof de lettres ... j'ai intérêt à corriger mes fautes...
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
Ma messagerie n'est pas la succursale du forum... merci!
Dr.Who est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2009, 20h09   #15
richard
Membre expérimenté
 
Inscription : avril 2002
Messages : 427
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 427
Points : 550
Points : 550
Ben, franchement, c'est plutôt moi qui ait à apprendre ici ...

Ce ne sont pas les diplômes qui sont importants mais ce qu'on est capable de faire (avec ou sans). Et je suis bien placé pour savoir que l'université fabrique un nombre non négligeable de crétins diplômés (heureusement cela reste une minorité quand même).
richard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 14h16   #16
sarsoura23
Invité de passage
 
Femme
Inscription : décembre 2012
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 21

Informations forums :
Inscription : décembre 2012
Messages : 2
Points : 0
Points : 0
Citation:
Envoyé par droggo Voir le message
Noe,

Retour à la base, c'est à dire papier + crayon, et tu suis ton programme ligne à ligne, en notant toutes les valeurs des variables.
comment ecrire les chiffre romain sur turbo pascal svp édit moi
sarsoura23 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 21/12/2012, 23h34   #17
Dr.Who
Membre Expert
 
Avatar de Dr.Who
 
Inscription : septembre 2009
Messages : 980
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2009
Messages : 980
Points : 1 175
Points : 1 175
Voila la réponse :

Unité RomanUtils.pas / Delphi, adaptable TurboPascal

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
 
{
RomanUtils unit v0.0.1.3 - 03/11/2006
Main code :
Deefaze [f0xi/Dr.Who - delphifr/www.developpez.com] 5/11/2005
Additionnal code :
Florenth - delphifr
Special thanks :
Delphiprog - delphifr
Florenth - delphifr
RomanUtils link, news and support :
delphifr
}
UNIT RomanUtils;
////////////////////////////////////////////////////////////////////////////////////////////////////
INTERFACE
////////////////////////////////////////////////////////////////////////////////////////////////////
// INTERFACE_USES ----------------------------------------------------------------------------------
USES SysUtils, Dialogs, math;
// INTERFACE_FUNCTIONS -----------------------------------------------------------------------------
Function IsRomanNumber(const RN : string) : boolean; overload;
Function IsRomanNumber(const I : integer) : boolean; overload;
Function RomanCharToValue(const RV : char) : integer;
Function RomanToInt(const RN : string) : integer;
Function IntToRoman(const I : integer) : String;
// INTERFACE_VARS ----------------------------------------------------------------------------------
VAR
RomanValidWarnMessage : string;
RomanRangeWarnMessage : string;
RomanDisableWarnMessage: boolean = false;
// INTERFACE_CONSTS --------------------------------------------------------------------------------
CONST
RomanNumber = ['I','V','X','L','C','D','M'];
////////////////////////////////////////////////////////////////////////////////////////////////////
IMPLEMENTATION
////////////////////////////////////////////////////////////////////////////////////////////////////
// MESSAGE_ROMANNOTVALID (private) ----------------------------------------------------------------
procedure Message_RomanNotValid(const value : string);
begin
if length(RomanValidWarnMessage) = 0 then
RomanValidWarnMessage := 'not a valid Roman number.';
MessageDlg(format('<%s> %s',[value,RomanValidWarnMessage]),mtWarning,[mbOk],0);
end;
// MESSAGE_OUTOFROMANRANGE (private) ----------------------------------------------------------------
procedure Message_OutOfRomanRange(const value : integer);
begin
if length(RomanRangeWarnMessage) = 0 then
RomanRangeWarnMessage := 'not in interval';
MessageDlg(format('<%d> %s 1 > 3999.',[value,RomanRangeWarnMessage]),mtWarning,[mbOk],0);
end;
// ROMANCHARTOVALUE --------------------------------------------------------------------------------
function RomanCharToValue(const RV : char) : integer;
begin
result := 0;
case RV of
'I','i' : result := 1;
'V','v' : result := 5;
'X','x' : result := 10;
'L','l' : result := 50;
'C','c' : result := 100;
'D','d' : result := 500;
'M','m' : result := 1000;
end;
end;
// ISROMANNUMBER -----------------------------------------------------------------------------------
function IsRomanNumber(const RN : string) : boolean;
var oc : integer;
begin
result := true;
for oc := 1 to length(RN) do
if not (Rn[oc] in RomanNumber) then begin
result := false;
exit;
end;
end;
function IsRomanNumber(const I : integer) : boolean;
begin
result := (I >= 1) and (I <= 3999);
end;
// ROMANTOINT --------------------------------------------------------------------------------------
function RomanToInt(const RN : string) : integer;
var oc, OldRV, NewRV : integer;
begin
Result := 0;
OldRV := 0;
if IsRomanNumber(RN) then begin
for oc := 1 to length(RN) do begin
NewRV := RomanCharToValue(RN[oc]);
if NewRV > OldRV then
inc(Result, NewRV-(OldRV shl 1))
else
inc(Result, NewRV);
OldRv := NewRV;
end;
end else begin
if RomanDisableWarnMessage = false then
Message_RomanNotValid(RN);
end;
end;
// INTTOROMAN --------------------------------------------------------------------------------------
const
_RRUTR : array [0..9] of string = ('','I','II','III','IV','V','VI','VII','VIII','IX');
_RRDTR : array [0..9] of string = ('','X','XX','XXX','XL','L','LX','LXX','LXXX','XC');
_RRCTR : array [0..9] of string = ('','C','CC','CCC','CD','D','DC','DCC','DCCC','CM');
_RRMTR : array [0..9] of string = ('','M','MM','MMM','','','','','','');
function IntToRoman(const I : integer) : string;
begin
result := '';
if IsRomanNumber(i) then begin
case I of
0..9 : Result := _RRUTR[i];
10..99 : Result := _RRDTR[i div 10]+
_RRUTR[i mod 10];
100..999 : Result := _RRCTR[i div 100]+
_RRDTR[i div 10 mod 10]+
_RRUTR[i mod 10];
1000..3999 : Result := _RRMTR[i div 1000]+
_RRCTR[i div 100 mod 10]+
_RRDTR[i div 10 mod 10]+
_RRUTR[i mod 10];
end;
end else begin
if RomanDisableWarnMessage = false then
Message_OutOfRomanRange(I);
end;
end;
 
end.
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
Ma messagerie n'est pas la succursale du forum... merci!
Dr.Who est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/12/2012, 13h21   #18
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 684
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 684
Points : 1 001
Points : 1 001
Elle est jolie ton unité, Dr.Who. J'en ai fait une adaptation pour FlashPascal.

Il y a toutefois un passage que je ne comprends pas trop :

Code :
1
2
3
4
      if NewRV > OldRV then
        inc(Result, NewRV-(OldRV shl 1))
      else
        inc(Result, NewRV);
Pourrais-tu l'expliquer ?
Fichiers attachés
Type de fichier : swf Test.swf (1,5 Ko, 2 affichages)
Type de fichier : zip RomanUtils_FlashPascal.zip (2,2 Ko, 1 affichages)
__________________
L'Art est long et le Temps est court.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/12/2012, 18h38   #19
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 392
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

Informations professionnelles :
Activité : Freelance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2002
Messages : 4 392
Points : 10 728
Points : 10 728
Citation:
Envoyé par Roland Chastain Voir le message
Elle est jolie ton unité, Dr.Who. J'en ai fait une adaptation pour FlashPascal.
Excellent
Citation:
Envoyé par Roland Chastain Voir le message
Il y a toutefois un passage que je ne comprends pas trop :

Code :
1
2
3
4
      if NewRV > OldRV then
        inc(Result, NewRV-(OldRV shl 1))
      else
        inc(Result, NewRV);
Pourrais-tu l'expliquer ?
ça m'a surpris aussi au début mais en fait c'est logique, à chaque boucle le nombre est ajouté, si le nombre suivant est plus grand que le précédent il faut ajouter la différence des deux mais comme il a déjà été ajouté une fois il faut le retirer 2 fois (shl 1 = * 2)

IV
+1
+(5-(2*1))
= 4
__________________
Developpez.com: Mes articles, forum FlashPascal
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice, FlashPascal
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 24/12/2012, 14h29   #20
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
Citation:
Envoyé par Paul TOTH Voir le message
Excellent

ça m'a surpris aussi au début mais en fait c'est logique, à chaque boucle le nombre est ajouté, si le nombre suivant est plus grand que le précédent il faut ajouter la différence des deux mais comme il a déjà été ajouté une fois il faut le retirer 2 fois (shl 1 = * 2)
J'adore les sources du dixième Doctor. Je vois de plus en plus très peu de développeur utilisant des opérations bit à bit ou des optimisation bas niveau dans leur code.
darrylsite 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 23h47.


 
 
 
 
Partenaires

Hébergement Web