IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Turbo Pascal Discussion :

[TP] Programme carré magique


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 162
    Par défaut [TP] Programme carré magique
    Bonjour,
    pour un tp ( en licence math info) je devais faire un carré magique. Mais le problème c'est que je n'arrive pas à faire marcher la fonction qui permet de vérifier si c'est bien un carré magique.

    Voici mon code que pour la création du carré magique de taille n*n(avec n=5):
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    program carremagique;
     
    uses crt;
     
    const n=5;
     
     
     
    var cell:array[1..n,1..n] of integer;
     
        i,j,sum:integer;
     
     
     
     
     
    procedure car;
     
    var i,j,count,ancj,anci:integer;
     
     
    begin 
     begin   
     
      begin
     
       for i:=1 to n do
     
        begin
     
        for j:=1 to n do
     
        cell[i,j]:=0;
     
        end;
     
      end;
     
     
     j:=(n div 2) +1;
     
     i:=1;
     
     count:=0;
     
     repeat
     
     inc(count);
     
     cell[i,j]:=count;
     
     ancj:=j;
     
     dec (j);
     
    if (j<1) then j:=n;
     
     anci:=i;
     
     dec (i);
     
    if (i<1) then i:=n;
     
     
     
    if cell[i,j]<>0 then
     
      begin
     
       i:=anci+1;
     
       if i>n then i:=1;
     
       j:=ancj;
     
      end;
     
     until count=n*n;
     
     end;
     
    end;
     
     
     
     
     
     
    begin
     
     car;
     
     for i:=1 to n do
     
      begin
     
      for j:=1 to n do
     
      write(cell[i,j]:5);
     
      writeln;
     
      end;
     
      readln;
     
    end.
    Par contre je n'arrive pas à faire fonctionner la fonction suivante qui permet de vérifier si c'est bien un carré magique.:
    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
     
    function verif ( var flag:boolean):boolean;
     
    var flag,i,j,sum,sum1,n:integer;
     
     
     
    begin
     n:=5;
     
     flag:=true;
     
     sum1:= (n*(n*n + 1)) div 2;
     
     for i:=1 to n do
     
     sum:=0;
     
     for j:=1 to n do
     
      begin
     
       sum:=sum+cell[i,j];
     
       if (sum<> sum1) then flag:=false 
     
      end;
     
     for j:=1 to n do
     
     sum:=0;
     
     for i:=1 to n do
     
      begin
     
       sum:=sum+cell[i,j];
     
       if (sum<> sum1) then flag:=false 
     
      end;
     
    if flag=false then writeln('Ce n''est pas un carré magique.')
    else writeln('C''est un carré magique');
    readln;
    end;
    Pouvez vous me dire ce qui marche pas dans cette fonction.
    Merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Par défaut
    Bonjour.

    Il y a une erreur manifeste dans cette fonction :
    le paramètre porte le même nom ( flag ) qu' une variable locale ...

    .

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 977
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 977
    Par défaut
    Ha,
    Citation Envoyé par Prof
    Bonjour.

    Il y a une erreur manifeste dans cette fonction :
    le paramètre porte le même nom ( flag ) qu' une variable locale ...

    .
    +1.

    Et supplément : la fonction ne renvoie rien, et si elle le faisait, ça ferait double emploi avec le paramètre en question.

    Leitmotiv : faire une indentation propre, c'est à dire régulière et cohérente, et éviter toutes ces lignes vides qui ne servent à rien, sauf à allonger le listing

  4. #4
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    bonjour ,
    ça fait pas mal de remarque et si tu indentes bien ton code plusieurs choses devraient te frapper à l'oeil comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
              for i:=1 to n do
                  sum:=0;
              for j:=1 to n do
              begin
                 ..........
                 ..............
    ça te sert quoi les deux premieres lignes ce code?
    j'avais deja fait ce genre d'exercice et je crois je devais encore l'avoir.
    @+

Discussions similaires

  1. Problème de vitesse lors de recherche de carré magique
    Par niniwizard dans le forum Prolog
    Réponses: 22
    Dernier message: 16/01/2009, 14h11
  2. Construction Carré magique
    Par nianko dans le forum Débuter
    Réponses: 2
    Dernier message: 29/05/2008, 10h34
  3. Carré magique mauvais affichage
    Par bdptaki dans le forum Delphi
    Réponses: 8
    Dernier message: 14/05/2007, 17h43
  4. probléme carré magique
    Par pipip dans le forum C
    Réponses: 4
    Dernier message: 29/11/2006, 19h23
  5. le carré magique
    Par mahis_ dans le forum C
    Réponses: 29
    Dernier message: 15/11/2006, 18h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo