je suis embarrassé par la gestion des kractère en pascal

je suis embarrassé par la gestion des kractère en pascal - Delphi/Pascal - Programmation

Marsh Posté le 12-02-2007 à 17:24:49    

:hello: Bonjour ou Bonsoir à tous,  :hello:  
   :wahoo:  Je suis entrain de monter un programme capable de générer arbre généaologique logique.  
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).   :sweat:  
  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.     :sweat:  
 
   :ange:  :jap:  J4AI VRAIMENT BESOINS DE VOTRE AIDE pour pouvoir continuer monprogramme merci.   :hello:  :hello:        


---------------
la plus grande bêtise n'est pas d'ignorer mais d'ignorer qu'on ne sait pas
Reply

Marsh Posté le 12-02-2007 à 17:24:49   

Reply

Marsh Posté le 13-02-2007 à 09:48:24    

poste le code qui bugge stp

Reply

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.


Message édité par el zozo le 19-02-2007 à 19:41:57
Reply

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 ancˆtre');
 
        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 frŠre 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.

Reply

Marsh Posté le 19-02-2007 à 10:36:33    

SVP remplacez les tête de linnottes là par :p

Reply

Marsh Posté le 19-02-2007 à 10:39:47    

enfait je voulais dire de les remplacer par ":p"

Reply

Marsh Posté le 19-02-2007 à 10:51:04    

jsais pas comment les enlever.

Reply

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 :
  1. :) :p  ;)


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  :kaola:


Message édité par el zozo le 19-02-2007 à 19:36:47
Reply

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)


Message édité par el zozo le 19-02-2007 à 20:22:44
Reply

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
begin
    writeln('entrez le nom du '+IntToStr(j)+'ème frère de '+k);
     New(Frere);               //Reserve les zones memoires du nouveau frère
     Frere.Nom:=noms(2);  
     Frere.Pere:=X;  //ben quoi... Pourquoi il n'aurait pas de père????
     Frere.PetitFrere:=nil; //j'ai bon? le pointeur fr represente bien le petit frere dans ton esprit?
     Frere.PremierFils:=nil;
     Frere.num:=0;
     GrandFrere.PetitFrere := Frere;
     GrandFrere := Frere; //Le frere sur lequel on travaille devient le grand frere du prochain
     j:=j+1;
end;


 
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.


Message édité par el zozo le 19-02-2007 à 20:39:01
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed