je suis embarrassé par la gestion des kractère en pascal - Delphi/Pascal - Programmation
Marsh Posté le 13-02-2007 à 16:01:23
edit : tien! J'ai mal lu le premier post et j'ai dit que des aneries.
Marsh Posté le 19-02-2007 à 10:32:38
  Salut à tous je voulais vous demander comment faire pour concerver les données entrée par un utilisateur. 
  Mon programme est censé permettre la création d'un arbre généalogique dynamique. Je suis en core au début. Voici le programme. 
 
 
program projet; 
uses crt; 
type 
ensemble= set of char; 
Const CValide : Ensemble= ['+',' ','*','-','/','0','1','2','3','4','5','6','7','8','9','A','a','z','e','r','t','y','u','i', 
'o','p','q','s','d','f','g','h','j','k','l','m','','w','x','c','b','n','B','C','D','E','F']; 
 
type    element= string; 
        ptr = ^sommet; 
        sommet = record 
            Pr:ptr; 
            Pf:ptr; 
            Fr:ptr; 
            Gen:integer; 
            num:integer; 
            Val:element; 
            end; 
        fil= record 
             deb:ptr; 
             fin:ptr; 
             end; 
 
 function noms(e:integer):string; 
 var tab:array[1..10] of char; 
 c:char; 
 i:integer; 
 
 begin 
 for i:=1 to 10 do tab[i]:=' '; 
 
 i:=1; 
 writeln('cbon'); 
 c:=' '; 
 while (c in cvalide) do 
       begin 
       write(''); 
       c:= readkey; 
 
       if (c in cvalide) then 
        begin 
        write(c); 
        tab[i]:=c; 
        end; 
       i:=i+1; 
       end; 
 noms:=tab; 
 end; 
 
procedure defiler( F:fil); 
var F1,Aux:ptr; 
      begin 
           F1:=@F.deb; 
           F.deb^:= F.deb^.fr^; 
          F1^.fr:= nil; 
      end; 
procedure enfiler (A:element;F:fil); 
        var nouv:sommet; 
            un_pointeur:ptr; 
 
        begin 
        nouv.Pr:=nil; 
        nouv.Fr:=nil; 
        nouv.Pf:=nil; 
        nouv.val:=''; 
        nouv.num:=0; 
 
        nouv.val:=A; 
        F.deb^.Fr:=@nouv; 
        F.fin^.Fr:=nil; 
        F.fin:=@nouv; 
        end; 
 
      function file_vide(F:fil):boolean; 
 
      begin 
       If F.deb =nil then 
         file_vide:=true 
         else file_vide:=false; 
       end; 
      function existe_fils(f:sommet;A:sommet):boolean; 
 
         begin 
          if f.Pf=nil then 
            existe_fils:=false 
            else existe_fils:=true; 
         end; 
     function lire(a:string):string; 
 
     begin 
          read(a); 
 
     end; 
 
     function existe_frere(f:sommet;A:sommet):boolean; 
 
         begin 
          if f.Fr=nil then 
            existe_frere:=false 
            else existe_frere:=true; 
         end; 
var nouv:sommet; 
function creersommet(a:integer):ptr; 
  var u:sommet; 
  p:ptr; 
  begin 
    u.val:=' '; 
    u.pr:=nil; 
    u.fr:=nil; 
    u.pf:=nil; 
    u.num:=0; 
    p:=@u; 
    creersommet:=p; 
  end; 
 
  {creer_sommet: 
  nouv.Pr:=nil; 
        nouv.Fr:=nil; 
        nouv.Pf:=nil; 
        nouv.val:=''; 
        nouv.num:=0;} 
 
    var car,car1:char; 
     k:string; 
     W,Z,X:sommet; 
     nb,j:integer; 
     procedure enfants(nom_pere:string;n:integer); 
        var  nouv:sommet; 
        begin 
 
         end; 
 
      begin 
        clrscr; 
        writeln('entrer le nom de l anctre'); 
 
        X.Pr:=nil; 
        X.Fr:=nil; 
        X.Pf:=nil; 
        X.val:=noms(2); 
        X.num:=0; 
        k:=X.val; 
        writeln(k); 
        writeln('est ce que ',k ,'a eu des enfants:Y / N'); 
         car :=readkey; 
         if  car='y' then 
              begin 
                   writeln('entrer le nom de son 1er Fils'); 
 
                    W.val:=noms(2); 
                    W.Pr:=nil; 
                    W.Fr:=nil; 
                    W.Pf:=nil; 
                    W.num:=0; 
 
                   X.Pf:= @W ; 
                   k:=W.val; 
                   writeln('',k,' a t il des freres?:Y / N'); 
                   car1 :=readkey ; 
                    if car1='y' then 
                           begin 
                           writeln('entrez le nombre'); 
                           read (nb); 
                           j:=1; 
                           while (j<=nb) do 
                                 begin 
                                 writeln('entrez le nom du ',j,'me frre de ',k,''); 
                                 Z.val:=noms(2); 
                                 Z.Pr:=nil; 
                                 Z.Fr:=nil; 
                                 Z.Pf:=nil; 
                                 Z.num:=0; 
                                 W:=W.fr^; 
                                 j:=j+1; 
                                end; 
                        end; 
                    end; 
         
 
   
 
      end. 
 
 
 
 en fait ce n'est qu'une partie test j'aimerait pouvoir stocker en mémoire les contenues des variables X, W et Z afin de pouvoir les réutilisées, sinon à un individu dans l'arbre crée va correspondre une variable ce qui n'est pas bon du tout.  
 
Aussi j'aimerai savoir si mes syntaxe son bonne.
Marsh Posté le 19-02-2007 à 19:33:09
| molion1 a écrit : jsais pas comment les enlever. | 
 
en placant ton code entre les balise appropriées: 
| Code : 
 | 
 
C'est l'icone C/C++ quand tu édite ton texte 
 
A part ça, si tu ne fait pas l'effort d'isoler un peu le code qui merdoi, n'espère pas que nous ayons le courage de lire tout ça   
 
Marsh Posté le 19-02-2007 à 19:59:19
bon.. Comme je suis raleur mais bonne poire, j'ai un peu lu...et rien comprit. Quelques explications serait bienvenue. 
Des comentaires et des saur de ligne aussi, d'ailleur... 
et la supression de ce qui n'a rien a voir avec la choucroute encore plus. 
 
Enfin... Pour en revenir au explication, c'est qui X? Le pere? W c'est le 1er fils? Mais c'est qui Z   
   
  
On va avoir du mal a te dire comment faire si on ne sait mème pas ce que tu essaie de faire (ben ouai : c'est ça en fait le plus dur en programmation)
Marsh Posté le 19-02-2007 à 20:17:50
bon... Me revoila, de plus en plus bonne raleur et de plus en plus bonne poire. 
 
Alors pour commencer, tu va me faire le plaisir d'aller acheter un clavier et de t'en servir pour ecrire des mots. Parce que pour communiquer avec d'autre entités vagument humaine, 
| Frere.Père | 
, c'est nettement plus parlant que
| Z.pr | 
. En plus, avec un clavier, on peu mème ecrire des commentaire entre les lignes. 
 
A par ça, je pense que ce que tu essaie de faire, c'est ça: 
 
| while (j<=nb) do  | 
 
 
La seule variable que tu doit garder en memoir est le tout debut de l'arbre. Par la suite, le feuille de l'arbre s'apellent 
| Ancetre.PremierFils.PetitFrere.PetitFrere.PremierFils.petitFrere | 
 
Tu aura evidement de droit d'utiliser des variable dans tes traitement, mais à priori ces variable auront bien vocation à varier. 
 
Si tu veut quand mème garder un accée direct à chaque feuille de ton arbre, tu peut faire un tableau de pointeurs.
Marsh Posté le 12-02-2007 à 17:24:49
Dans ce programme le remplissage des noms se fait génération par génération ( c'est à dire en faisant un parcour en largeur de l'arbre).
Lorsque je met l'instruction read( A) où A est de type string mon programme l'éffactue, mais ignore toutes les autres instructions read de la suite quitte à bug totaltement et à se fermer tout seul.
---------------
la plus grande bêtise n'est pas d'ignorer mais d'ignorer qu'on ne sait pas