Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Récursivité ??? [ Divers / Aide et documentation ] (Also know as)

dimanche 27 mai 2007 à 12:27:00 | Récursivité ???

Also know as

Membre Club
Bonjour,

Voilà je cherche à faire de la récursivité sous Delphi mais là j'avoue que je trouve ca un peu mal malheureusement...

Voci ma procedure :

procedure TForm1.ResoudreClick(Sender: TObject);
var
  i: Integer;
  x: Integer;
  y: Integer;
begin
  for y := 0 to 9 do
    for x := 0 to 9 do
      if (map.Cells[y,x] = '0') then
      begin
        for i := 0 to 9 do
        begin
          Test_lin_col(x, y, i);
          Test_square(x, y, i);
          if ((lin_col = True) and (square = True)) then
          begin
            map.Cells[x,y] := IntToStr(i);
            ResoudreClick(Sender);
            map.Cells[x,y] := '0';
          end;
        end;
        //return ;
      end;
end;

Là ou vous voyez le mot "return" c'est en C que la recursivité va se faire, il me manque l'équivalent en Delphi.
En effet s'il n'y a pas de possibilité alors il doit faire marche arrière GRACE à là recursivité !

Quelqu'un peut m'aider

@+

P.S.: Pour le moment je fais bien evidemment en StackOverflox (débordement de pile) à cause de ma fonction rappelée elle même : ResoudreClick(Sender); mais vu que je n'ai pas de récursivité c'ets normal

@+

dimanche 27 mai 2007 à 12:28:53 | Re : Récursivité ???

Also know as

Membre Club
Oups une petite erreur c'est gilssée :

  for x := 0 to 9 do
    for y := 0 to 9 do
      if (map.Cells[x,y] = '0') then

Voilà d'ou venait mon problème de pile

Mais bon cela ne change rien à mon problème bien evidemment.

@+

dimanche 27 mai 2007 à 12:40:08 | Re : Récursivité ???

Nicolas___

j'ai pas regarder ton algo ms pour utiliser un equivalent en delphi faut pas utiliser procedure(une procedure ne renvoie rien) mais function et tu utilise result qui est equivalent du return

Ciao

dimanche 27 mai 2007 à 12:57:58 | Re : Récursivité ???

Also know as

Membre Club
Merci !

J'ai donc un doute sur la récursivité sous Delphi.
Le but de la recursivité est de pouvoir s'appeler lui même, et de faire un conséqunce de ce qui c'est passé avant.

Exemple pour ce que je fais, la résolution d'un sudoku.
En C cela me donne cela :

int     resolve(char **map)
{
  int   x;
  int   y;
  int   i;

  for (y = 0; y < 9; y++)
    for (x = 0; x < 9; x++)
      if (map[y][x] == '0')
        {
          for (i = '1'; i <= '9'; i++)
            if (test_col_lin(map, x, y, (i - '0')))
              if (test_square(map, x, y, (i - '0')))
                {
                  map[y][x] = i;
                  if (x == 8 && y == 8)
                    return (aff(map));
                  else
                    if (resolve(map))
                      return (1);
                  map[y][x] = '0';
                }
          return (0);
        }
      else if (x == 8 && y == 8)
        aff(map);
  return (1);
}

En fonction si ela retourne 0 ou pas, alors il va changer son comportement...

@+

dimanche 27 mai 2007 à 13:02:42 | Re : Récursivité ???

Nicolas___

aucune raisons que la recursivite sous delphi ne marche pas !

Ciao

dimanche 27 mai 2007 à 13:04:23 | Re : Récursivité ???

Also know as

Membre Club
En effet mais alors il va falloir me l'expliquer, parceque là sous Delphi je ne vois pas comment faire

@+

dimanche 27 mai 2007 à 16:53:17 | Re : Récursivité ???

f0xi

Membre Club Administrateur CodeS-SourceS



type
  pMap = ^TMap;
  TMap = array[0..8,0..8] of integer;
 
function TestColLin(const Map : pMap; const X,Y,I : integer) : boolean;
begin
//
end;

function TestSquare(const Map : pMap; const X,Y,I : integer) : boolean;
begin
//
end;
 
function Aff(const Map : pMap) : boolean;
begin
//
end;
 
function Resolve(const Map : pMap) : boolean;
var X,Y,I : integer;
begin
  for y := 0 to 8 do
    for x := 0 to 8 do
      if Map^[y,x] = '0' then
      begin
        for i := 1 to 9 do
          if TestColLin(Map, x, y, i) and TestSquare(Map, x, y, i) then
          begin
            Map^[y,x] = i;
            if (x = 8) and (y = 8) then
            begin
              result := Aff(Map);
              exit;
            end
            else
            if Resolve(Map) then
            begin
              result := true;
              exit;
            end;   
            Map^[Y,X] = 0;
          end;  
        result := false;
        exit;
      end
      else
      if (x = 8) and (y = 8) then
         Aff(Map);
  result := true;
end;



Croc (click me)



Cette discussion est classé dans : end, sender, begin, récursivité, resoudreclick


Répondre à ce message

Sujets en rapport avec ce message

Utilisation de composant créée dynamiquement [ par taye78 ] Bonjour,voici le code que j'ai écris pour créer 2 ClientSocket dynamiquement, ensuite je leur attribu quelques propriétés etc. Mais lorsque l'evenemen Erreur de type asynchrone [ par Francky23012301 ] Salut à tous,j'ai voulu faire un petit test de transfert de fichiers transfert client->serveur :La connection du client au serveur s'effectue correcte sudoku [ par steph sudoku ] Bonsoir a tous!j'ai un probleme sévère, je suis bloqué depuis trois semaines sur un tp en fac.je dois le rendre mardi et je n'est toujours pas trouvé Redimensionner un timage/tshape avec des poignées [ par edge76000 ] Bonjour, Je sais que sur le site Phidels, ce programme le traite et doit pouvoir répondre à ma question car c'est exactement ce que je veux faire au n Problème exécution du .EXE [ par revsys ] Bonjour,Quand j'exécute mon programme à partir de Delphi, toutes mes commandes fonctionnent.Mais si je lance seulement l'EXE, là une option me permett Problèmes boucle NotifyProc [ par revsys ] Bonjour,J'ai deux Edit qui permettent de choisir le nombre de fois où un son doit être joué pour deux sons différents.1er problème :La première fois q Erreur de compatibilité [ par stevebru ] Bonjour,Je suis nouveau en Delphi, et même sur ce site.J'ai un problème à la compilation de mon programme.Il conciste à créer des éléments de type TAn pilotage ouverture/fermeture d'une barrière de sécurité pour boitier TC/USB16IO [ par Wiska ] Bonjour, Avant tout, voici la description de ce fameux boitier: "Le module TC/USB-16IO est un module d'interface pc, comportant 8 entrées logiques iso Besoin de précision pour un code [ par emirej ] Bonjour j'aimerais avoir un peu d'aide pour mon code merci.Voici mon code :unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, G affichage dans une statutbar [ par watrem ] Bonjour j'ai telecharger sur le site un code tres court permettant d'afficher l'heure dans une StatutBar. Je n'ai aucune erreur au niveau du code mais


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 4,555 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.