+ Répondre à la discussion
Affichage des résultats 1 à 20 sur 20
  1. #1
    Invité de passage
    Inscrit en
    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

  2. #2
    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

    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.

  3. #3
    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

    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;
    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.

  4. #4
    Membre chevronné

    Inscrit en
    avril 2002
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 436
    Points : 614
    Points
    614

    Par défaut

    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;

  5. #5
    Invité de passage
    Inscrit en
    novembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 9
    Points : 1
    Points
    1

    Par défaut

    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

  6. #6
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : septembre 2009
    Messages : 980
    Points : 1 299
    Points
    1 299

    Par défaut

    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 Fichiers attachés
    [ 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!

  7. #7
    Responsable Pascal, Delphi et Assembleur

    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    mars 2003
    Messages
    6 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : mars 2003
    Messages : 6 275
    Points : 41 413
    Points
    41 413
    Billets dans le blog
    1

    Par défaut

    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]

  8. #8
    Membre chevronné

    Inscrit en
    avril 2002
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 436
    Points : 614
    Points
    614

    Par défaut

    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 ...

  9. #9
    Membre chevronné

    Inscrit en
    avril 2002
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 436
    Points : 614
    Points
    614

    Par défaut

    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.

  10. #10
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : septembre 2009
    Messages : 980
    Points : 1 299
    Points
    1 299

    Par défaut

    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!

  11. #11
    Membre chevronné

    Inscrit en
    avril 2002
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 436
    Points : 614
    Points
    614

    Par défaut

    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.

  12. #12
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : septembre 2009
    Messages : 980
    Points : 1 299
    Points
    1 299

    Par défaut

    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!

  13. #13
    Membre chevronné

    Inscrit en
    avril 2002
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 436
    Points : 614
    Points
    614

    Par défaut

    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.

  14. #14
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : septembre 2009
    Messages : 980
    Points : 1 299
    Points
    1 299

    Par défaut

    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!

  15. #15
    Membre chevronné

    Inscrit en
    avril 2002
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 436
    Points : 614
    Points
    614

    Par défaut

    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).

  16. #16
    Invité de passage
    Femme Profil pro
    Inscrit en
    décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23

    Informations forums :
    Inscription : décembre 2012
    Messages : 2
    Points : 0
    Points
    0

    Par défaut

    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

  17. #17
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : septembre 2009
    Messages : 980
    Points : 1 299
    Points
    1 299

    Par défaut

    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!

  18. #18
    Rédacteur/Modérateur

    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 542
    Points : 4 242
    Points
    4 242

    Par défaut

    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 Fichiers attachés
    L'Art est long et le Temps est court.

  19. #19
    Expert Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    5 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 5 640
    Points : 16 171
    Points
    16 171

    Par défaut

    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%

  20. #20
    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

    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.

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
  •