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

Flash Pascal Discussion :

Apprendre le Pascal avec FlashPascal


Sujet :

Flash Pascal

  1. #1
    Rédacteur/Modérateur

    Apprendre le Pascal avec FlashPascal
    Bonjour !

    Voici une suite de petits exemples dans lesquels j'ai essayé de faire le tour des types de données et des fonctions de FlashPascal (sans l'unité Flash8).

    Array1.fpr
    Binaire1.fpr
    Booleen1.fpr
    Char1.fpr
    Class1.fpr
    Class2.fpr
    Nombres1.fpr
    Record1.fpr
    Set1.fpr
    Set2.fpr
    Set3.fpr
    Set4.fpr
    Set5.fpr
    SortieTexte.fpr
    String1.fpr
    TableauChaines1.fpr
    Soit dit en passant, ce serait bien d'avoir un manuel, même qui tienne sur une page comme celui de Flash 0.8, avec la liste des types, des opérateurs, des fonctions...

  2. #2
    Membre expérimenté
    Merci pour ton travail, je n'ai pas encore regardé mais c'est toujours utile

    anthony

  3. #3
    Expert éminent sénior
    oui c'est bien sympathique tout ça et ça permet de tester rapidement le code.

    je remarque aussi qu'il manque la possibilité de déclarer un array[TJour] of string...va falloir que je prévoie ça
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Rédacteur/Modérateur

    Merci pour vos encouragements.

    Citation Envoyé par Paul TOTH Voir le message
    je remarque aussi qu'il manque la possibilité de déclarer un array[TJour] of string...va falloir que je prévoie ça
    C'est vrai que ce serait joli. Une autre chose à laquelle j'ai pensé, c'est la possibilité de déclarer des constantes dans des procédures.

    En attendant, voici un nouvel exercice sur le type chaîne (mais avec Flash8 cette fois).

    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
    57
    58
     
    program Accents;
     
    uses Flash8;
     
    {$FRAME_WIDTH 320}
    {$FRAME_HEIGHT 200}
    {$BACKGROUND 0}
     
    ////////////////////////////////////////////////////////////////////////////////
    const
      LARGEUR = 320;
      HAUTEUR = 200;
      VER = 'Compilateur FlashPascal 2 v13.04.29'#13;
     
    var
      t: TextField;
      f: TextFormat;
      s: String;
    ////////////////////////////////////////////////////////////////////////////////
     
    const
      AvecAccents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
      SansAccents = 'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn';
     
    function EnleveAccents(aChaine: string): string;
    var
      i, j: Integer;
    begin
      Result := '';
      for i := 1 to Length(aChaine) do
      begin
        j := Pos(aChaine[i], AvecAccents);
        if j > 0 then
          Result := Result + SansAccents[j]
        else
          Result := Result + aChaine[i];
      end;
    end;
     
    begin
    ////////////////////////////////////////////////////////////////////////////////
      f := TextFormat.Create('Tahoma', 16);
      f.color := clWhite;
      f.leftMargin := 5;
      t := TextField.Create(_root, 't', 0, 0, 0, LARGEUR, HAUTEUR);
      t.SetNewTextFormat(f);
    ////////////////////////////////////////////////////////////////////////////////
     
      s := EnleveAccents("aàeéè");
     
    ////////////////////////////////////////////////////////////////////////////////
      t.text := VER + s;
      f.size := 12;
      f.color := clLime;
      t.SetTextFormat(0, Length(VER)-1, f);
    ////////////////////////////////////////////////////////////////////////////////
    end.


    De ne pas pouvoir écrire

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    chaine[i] = 'a';


    ça manque un peu (même si ça n'empêche pas de faire ce qu'on veut d'une autre façon).

  5. #5
    Expert éminent sénior
    c'est pas faux, par contre ça va être une méchante rustine car les chaines de ActionScript ne sont pas modifiables...donc s[i] := 'a' sera compilé comme s := copy(s, 1, i - 1) + 'a' + copy(s, i + 1 , Length(s) - i) tout un programme
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Rédacteur/Modérateur

    Citation Envoyé par Paul TOTH Voir le message
    ça va être une méchante rustine car les chaines de ActionScript ne sont pas modifiables...
    D'accord, je vois maintenant.

    On peut toujours utiliser des tableaux de caractères, non ?

    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
    57
    58
    59
    program ArrayOfChar1;
     
    uses Flash8;
     
    {$FRAME_WIDTH 320}
    {$FRAME_HEIGHT 200}
    {$BACKGROUND 0}
     
    ////////////////////////////////////////////////////////////////////////////////
    const
      LARGEUR = 320;
      HAUTEUR = 200;
      VER = 'Compilateur FlashPascal 2 v13.04.29'#13;
     
    var
      t: TextField;
      f: TextFormat;
      s: string;
    ////////////////////////////////////////////////////////////////////////////////
     
    type
      shortString = array[0..255]of char;
     
    function StrToShort(aString: string): shortString;
    var
      i, l: integer;
    begin
      l := Length(aString) mod 256;
      Result[0] := Chr(l);
      for i := 1 to l do
        Result[i] := aString[i];
    end;
     
    function ShortToStr(aShort: shortString): string;
    var i: integer;
    begin
      Result := '';
      for i := 1 to Ord(aShort[0]) do
        Result := result + aShort[i];
    end;
     
    begin
    ////////////////////////////////////////////////////////////////////////////////
      f := TextFormat.Create('Tahoma', 16);
      f.color := clWhite;
      f.leftMargin := 5;
      t := TextField.Create(_root, 't', 0, 0, 0, LARGEUR, HAUTEUR);
      t.SetNewTextFormat(f);
    ////////////////////////////////////////////////////////////////////////////////
     
      s := ShortToStr( StrToShort( 'ABCD' ) );
     
    ////////////////////////////////////////////////////////////////////////////////
      t.text := VER + s;
      f.size := 12;
      f.color := clLime;
      t.SetTextFormat(0, Length(VER)-1, f);
    ////////////////////////////////////////////////////////////////////////////////
    end.

  7. #7
    Expert éminent sénior
    je viens de publier la version 13.05.04 qui permet de modifier un caractère dans une chaîne
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Rédacteur/Modérateur

    Parfait !

    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
    program Accents2;
     
    uses Flash8;
     
    {$FRAME_WIDTH 320}
    {$FRAME_HEIGHT 200}
    {$BACKGROUND 0}
     
    ////////////////////////////////////////////////////////////////////////////////
    const
      LARGEUR = 320;
      HAUTEUR = 200;
      VER = 'Compilateur FlashPascal 2 v13.05.04'#13;
     
    var
      t: TextField;
      f: TextFormat;
      s: string;
    ////////////////////////////////////////////////////////////////////////////////
     
    const
      AvecAccents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
      SansAccents = 'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn';
     
    function EnleveAccents(aChaine: string): string;
    var
      i, j: Integer;
    begin
      Result := aChaine;
      for i := 1 to Length(aChaine) do
      begin
        j := Pos(aChaine[i], AvecAccents);
        if j > 0 then
          Result[i] := SansAccents[j];
      end;
    end;
     
    begin
    ////////////////////////////////////////////////////////////////////////////////
      f := TextFormat.Create('Tahoma', 16);
      f.color := clWhite;
      f.leftMargin := 5;
      t := TextField.Create(_root, 't', 0, 0, 0, LARGEUR, HAUTEUR);
      t.SetNewTextFormat(f);
    ////////////////////////////////////////////////////////////////////////////////
     
      s := EnleveAccents("aàeéè");
     
    ////////////////////////////////////////////////////////////////////////////////
      t.text := VER + s;
      f.size := 12;
      f.color := clLime;
      t.SetTextFormat(0, Length(VER)-1, f);
    ////////////////////////////////////////////////////////////////////////////////
    end.

  9. #9
    Rédacteur/Modérateur

    Pour prolonger ma série d'exemples, je me suis amusé avec un problème apparu ces jours-ci dans le forum.

    Vous remarquerez qu'on peut faire défiler les résultats avec la molette ou la roulette (je ne sais comment il faut dire) de la souris.

    La première version utilise un tableau de booléens.

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    (* Problème de Flavius Josèphe *)
    (* http://irem.u-strasbg.fr/php/articles/109_Lefort.pdf *)
     
    program Flavius1;
     
    uses Flash8;
     
    {$FRAME_WIDTH 320}
    {$FRAME_HEIGHT 200}
    {$BACKGROUND 0}
     
    ////////////////////////////////////////////////////////////////////////////////
    const
      LARGEUR = 320;
      HAUTEUR = 200;
      VER = 'Compilateur FlashPascal 2 v13.05.04'#13;
     
    var
      t: TextField;
      f: TextFormat;
      s: string;
    ////////////////////////////////////////////////////////////////////////////////
     
    const
      n = 41;     // nombre de personnes
      k = 3;      // nombre fatal
     
    var
      i: integer; // ordre d'élimination de 1 à n
      j: integer; // rang  de 1 à n
      c: integer; // compteur de 1 à k
      v: array[1..n]of boolean; // vivants
     
    begin
    ////////////////////////////////////////////////////////////////////////////////
      f := TextFormat.Create('Tahoma', 16);
      f.color := clWhite;
      f.leftMargin := 5;
      t := TextField.Create(_root, 't', 0, 0, 0, LARGEUR, HAUTEUR);
      t.SetNewTextFormat(f);
    ////////////////////////////////////////////////////////////////////////////////
     
      for j := 1 to n do v[j] := True;
     
      i := 0;
      j := 0;
      c := 0;
     
      s := '';
     
      while i < n do
      begin
        Inc(j);
        if j > n then j := 1;
     
        if v[j] then
        begin
          Inc(c);
          if c > k then c := 1;
     
          if c = k then
          begin
            v[j] := False;
            Inc(i);
            s := s + 'Elimination ' + IntToStr(i) + ' rang ' + IntToStr(j) + Chr(13);
          end;
        end;
      end;
     
    ////////////////////////////////////////////////////////////////////////////////
      t.text := VER + s;
      f.size := 12;
      f.color := clLime;
      t.SetTextFormat(0, Length(VER)-1, f);
    ////////////////////////////////////////////////////////////////////////////////
    end.


    La seconde utilise une espèce de liste chaînée.

    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
    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
    (* Problème de Flavius Josèphe *)
    (* http://irem.u-strasbg.fr/php/articles/109_Lefort.pdf *)
     
    program Flavius2;
     
    uses Flash8;
     
    {$FRAME_WIDTH 320}
    {$FRAME_HEIGHT 200}
    {$BACKGROUND 0}
     
    ////////////////////////////////////////////////////////////////////////////////
    const
      LARGEUR = 320;
      HAUTEUR = 200;
      VER = 'Compilateur FlashPascal 2 v13.05.04'#13;
     
    var
      t: TextField;
      f: TextFormat;
      s: string;
    ////////////////////////////////////////////////////////////////////////////////
     
    const
      n = 41;     // nombre de personnes
      k = 3;      // nombre fatal
     
    var
      i: integer; // ordre d'élimination de 1 à n
      j: integer; // rang  de 1 à n
      c: integer; // compteur de 1 à k
     
    const
      prec = 0;
      suiv = 1;
     
    var
      a: array[1..n, prec..suiv]of integer; // liste chaînée <img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" />
     
    begin
    ////////////////////////////////////////////////////////////////////////////////
      f := TextFormat.Create('Tahoma', 16);
      f.color := clWhite;
      f.leftMargin := 5;
      t := TextField.Create(_root, 't', 0, 0, 0, LARGEUR, HAUTEUR);
      t.SetNewTextFormat(f);
    ////////////////////////////////////////////////////////////////////////////////
     
      a[1, prec] := n;
      a[1, suiv] := 2;
      a[n, prec] := n-1;
      a[n, suiv] := 1;
     
      for j := 2 to n-1 do
      begin
        a[j, prec] := j-1;
        a[j, suiv] := j+1;
      end;
     
      i := 0;
      j := 1;
      c := 0;
     
      s := '';
     
      while i < n do
      begin
     
        Inc(c);
        if c > k then c := 1;
     
        if c = k then
        begin
          a[a[j, prec], suiv] := a[j, suiv];
          a[a[j, suiv], prec] := a[j, prec];
          Inc(i);
          s := s + 'Elimination ' + IntToStr(i) + ' rang ' + IntToStr(j) + Chr(13);
        end;
     
        j := a[j, suiv];
      end;
     
    ////////////////////////////////////////////////////////////////////////////////
      t.text := VER + s;
      f.size := 12;
      f.color := clLime;
      t.SetTextFormat(0, Length(VER)-1, f);
    ////////////////////////////////////////////////////////////////////////////////
    end.


    J'ai fait une autre "liste chaînée", avec un tableau d'enregistrements. Cette version-là compile mais ne fonctionne pas correctement. Je la mets en pièce jointe pour le cas où cela vous intéresse.

  10. #10
    Expert éminent sénior
    ah c'est vicieux, quand on fait un array of Integer, on affecte a[i] donc ça fonctionne, mais avec un array of record on accède directement aux membres du record, or celui-ci n'est pas initialisé. Il faut que j'ajoute cela dans le compilateur.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store