Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1358 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  exercice delphi...besoin d'un coup de main

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

exercice delphi...besoin d'un coup de main

n°726104
niiico
Niiiiiiiiiiiiiico !!!
Posté le 14-05-2004 à 14:39:28  profilanswer
 

salut, pour mes revisions d'exam j'ai l'examen de l'année derniere mais j'ai du mal a le resoudre...je suis en train de bosser dessus et je posterai les reponses que je trouve au fur et a mesure, mais j'avance vraiment pas vite, alors si vous puviez me filez un coup de main, me donner des pistes...j'ai commencé delphi ce semestre donc pas de trucs hyper compliqués, ce qui me pose surtout probleme c'est les commandes pour manipuler les fichiers, les tableaux ca va...voila le sujet :
 
 
 

Citation :


on considere le type Tmot equivalent à une chaine de caracteres de longueur 20.on considere egalement trois fichiers non vides supposes places dans le repertoire courant de l’application que l’on vous demande d’ecrire.
-le premier fichier pays.dat contient environ 250 donnees de type Tmot correspondant a des noms de pays.
-le deuxieme ville.dat contient environ 3000 donnees de type Tmot correspondant a des noms de ville
-le troisieme fichier pop.dat est constitue d’enregistrements composes de trois champs entiers :
  -le premier entier est le numero d’enregistrement de le ville dans le deuxieme fichier
  -le deuxime fichier est le numero d’enregistrement du pays dans le premier fichier
  -le troisieme est le nombre d’habitants dans cette ville.
 
 
QUESTIONS
a)definir un type Tville pour pouvoir stocker une ville, son pays et sa population(2 TMot et un entier), et un type Ttab pour stocker dans un tableau l’ensemble des donnees sur les villes.
 
b)ecrire une procedure qui remplit la variable data de type Ttab avec les donnees du fichier pop.dat en remplacant les numeros d’enregistrement par leurs valeurs qu’il faut recuperer dans les fichiers ville.dat et pays.dat  
 
c)ecrire une fonction qui renvoie la ville ayant la plus grande population a partir de données de type Ttab.
 
d)ecrire une procedure qui trie une variable data de type Ttab en fonction du nom du pays.
 
e) en supposant que la procedure d) a ete execute, ecrire une fnction qui renvoie le pays ayant la plus grande population calculee a partir des villes reprensentées.
 
f)ecrire une procedure ppour sauvegarder dans un fichier texte une variable data de type Ttab ou les données pour chaque lignes sont separes par « ; ».


 
REPONSES
 
a) type Tville = record
              ville, pays : Tmot ;
         pop :integer ;
 end ;
  Ttab = array of Tville ;
(Est-ce que c’est un tableau dynamique qu’il faut utilisé ?)
 
 

mood
Publicité
Posté le 14-05-2004 à 14:39:28  profilanswer
 

n°726130
antp
Super Administrateur
Champion des excuses bidons
Posté le 14-05-2004 à 14:50:31  profilanswer
 

À part la mise en forme du code qui n'est pas très belle (il ne faut pas d'espace devant les ":" et ";" ) c'est bon je suppose.
Quand à savoir si c'est un tableau dynamique qu'il faut utiliser, vu le peu de détails donnés dans la question "a" je suppose que c'est ça.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°726180
niiico
Niiiiiiiiiiiiiico !!!
Posté le 14-05-2004 à 15:08:07  profilanswer
 

antp a écrit :

À part la mise en forme du code qui n'est pas très belle (il ne faut pas d'espace devant les ":" et ";" ) c'est bon je suppose.
Quand à savoir si c'est un tableau dynamique qu'il faut utiliser, vu le peu de détails donnés dans la question "a" je suppose que c'est ça.


 
ok...
j'arrive vraiment pas a faire le b) t'as une idee ?la reponse du c) arrive.

n°726192
antp
Super Administrateur
Champion des excuses bidons
Posté le 14-05-2004 à 15:15:04  profilanswer
 

Tu déclares une variable comme file of Integer pour lire pop.dat, et des variables file of TMot pour les deux autres.
Puis avec les fonctions de manipulation de fichier (AssignFile, Reset, Read, CloseFile) tu lis tes infos. Pour agrandir le tableau avant de lire tu fais chaque fois un SetLength.


Message édité par antp le 14-05-2004 à 15:16:44

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°726224
niiico
Niiiiiiiiiiiiiico !!!
Posté le 14-05-2004 à 15:26:37  profilanswer
 

niiico a écrit :

ok...
j'arrive vraiment pas a faire le b) t'as une idee ?la reponse du c) arrive.


 
 
voila le c)
 
function max(data:ttab):string;
 var i,j :integer;
begin
j:=0;
        for i:=j+1 to taille-1 do
          if t[i].pop>t[j].pop then j:=i;
 result:=data[j].ville;
 
end;
 
j c'est l'indice du tableau.
alors c ca?

n°726229
antp
Super Administrateur
Champion des excuses bidons
Posté le 14-05-2004 à 15:28:45  profilanswer
 

Par exemple, oui
 
Sinon pour la façon de taper le code :
 
http://community.borland.com/artic [...] 80,00.html
 
(quand t'as le temps de le lire, ça vaut le coup pour faire du code lisible et dans le même style que le code qu'on recontre ailleurs)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°726264
niiico
Niiiiiiiiiiiiiico !!!
Posté le 14-05-2004 à 15:37:55  profilanswer
 

procedure remplirdata (data :Ttab)
     var fic1:file of integer;
           fic2,fic3: file of Tmot;
begin
assignfile(fic1,pop.dat);
assignfile(fic2,pays.dat);
assignfile(fic3,ville.dat);
 
c ca pour le debut?
bon apres en fait c quoi le principe? est-ce qu'il suffit simplement de lire ces fichiers pour les mettre dans les var fic1,fic2,fic3 et ensuite travailler sur les var? et pour separer les 3 données de chq enregistrements de pop.dat est-ce que ca le fait tout seul ou je dois faire qqchoz?

n°726335
niiico
Niiiiiiiiiiiiiico !!!
Posté le 14-05-2004 à 15:57:25  profilanswer
 

pour la question d) :

Citation :


procedure echange(out e1,e2:Tville);
var aux:Tville;
begin
  aux:=e1;
   e1:=e2;
   e2:=aux;
 end;
 
function min(data:ttab):integer;
 var i :integer;
begin
result:=0;
        for i:=1 to taille-1 do
          if t[i].pays<t[j].pays then result:=i;
 
end;
 
 
 function trier(data:Ttab):Ttab;
var i:integer;
begin
for i:=0 to taille-2 do
echange(t[i],t[min(t)]);
result:=data;
end;


 
le probleme c'est que c'est une fonction et qu'ils demandent une procedure...selon toi quel est le meilleur tri?

n°726343
niiico
Niiiiiiiiiiiiiico !!!
Posté le 14-05-2004 à 15:59:37  profilanswer
 

bon ben t'as plus l'air d'etre la antp alors si tu reviens n'hésite pas hein ;) en tout cas merci pour ton aide...
sinon les autres vous avez des idées ??? :D

n°726510
niiico
Niiiiiiiiiiiiiico !!!
Posté le 14-05-2004 à 17:54:24  profilanswer
 

bon y a plus personne pour m'aider  :cry:  je n'aurai pas acces a internet ce week end mais si vous voulez m'aidez qd meme ce serait gentil (y a bien qq1 pour qui c'est tres facile tout ca hein antp ;) )

mood
Publicité
Posté le 14-05-2004 à 17:54:24  profilanswer
 

n°726540
antp
Super Administrateur
Champion des excuses bidons
Posté le 14-05-2004 à 18:35:28  profilanswer
 

Ta procédure, déclare-la comme ceci :
 
procedure trier(var data: Ttab);
 
de cette manière les modifs que tu fais sur data seront répercutées sur la variable de la fonction qui a appelé trier;
 
De la même manière, ta fonction echange devrait recevoir un var et non un out. Le mot-clé out indique que l'on se fout de la valeur qu'il pourrait y avoir dans la variable, ce qui n'est pas le cas ici (dans certains cas la valeur pourrait ne pas être transmise, ce qui poserait problème ici).
 
Pour les fichiers, le plus simple est de consulter l'aide de Delphi, il doit y avoir des exemples de lecture de fichiers typés (càd des file of qqchose) et des infos utiles dans l'aide des différentes fonctions dont j'ai parlé précédemment...


Message édité par antp le 14-05-2004 à 18:37:33

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°729041
niiico
Niiiiiiiiiiiiiico !!!
Posté le 17-05-2004 à 14:59:27  profilanswer
 

pour la question b) j'ai essayé de continuer un peu...
 

Citation :


procedure remplirdata (data :Ttab)
     var fic1:file of integer;
           fic2,fic3: file of Tmot;
begin
assignfile(fic1,pop.dat);
assignfile(fic2,pays.dat);
assignfile(fic3,ville.dat);
reset(fic1,1) //le deuxieme parametre pour metre la taille des blocks à 1
blockread(fic1,data[0],taille du fichier pop.dat) ;
//le deuxieme parametre pour copier fic1 dans data (je suis pas sur de devoir mettre le [0]
//le dernier parametre pour dire combien de blocks copier


 
Questions :  
- est-ce que chaque enregistrement sera mis automatiquement dans le tableau sans faire un truc du genre : « data[0].ville :=… »
exemple : si le premier enregistrement de pop.dat est    4     1     285000
est ce que il va faire tout seul de rentrer le 4 dans la premiere colonne du tableau, le 1 dans la deuxieme et le 285000dans la troisieme ?
 
      - la il manque la suite je sais que comme ca, ca ne marchera pas puisque le tableau a 2 champs Tmot et que dans pop.dat y a que des integer et c’est pour cela qu’il faut faire correspondre les chiffres au nom des pays et villes des autres fichiers…mais je ne sais pas du tout comment faire. Est-ce qu’il y a une histoire de clés (un peu comme dans les bases de données) ???

n°729320
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-05-2004 à 17:16:36  profilanswer
 

A priori il n'y a pas de clé et pas de lien entre les fichiers
 
Quel format ont ces fichiers ? Ce sont des fichiers texte lisibles avec le bloc-notes ? Ou bien des fichiers binaire ? Puis tu parles de blocks de taille 1, tu es sûr de ça ? (j'ai jamais utilisé ces trucs de block, juste les read/write classiques)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°729340
niiico
Niiiiiiiiiiiiiico !!!
Posté le 17-05-2004 à 17:38:14  profilanswer
 

antp a écrit :

A priori il n'y a pas de clé et pas de lien entre les fichiers
 
Quel format ont ces fichiers ? Ce sont des fichiers texte lisibles avec le bloc-notes ? Ou bien des fichiers binaire ? Puis tu parles de blocks de taille 1, tu es sûr de ça ? (j'ai jamais utilisé ces trucs de block, juste les read/write classiques)


 
content que tu sois la! ben on sait seulement que ce sont des fichiers .dat, apres il n'est pas précisé si on peut les lire avec le bloc note...pour les blocks je suis pas du tout sur...donc si j'utilise simplement read et write il faudra que je fasse une boucle non?
tu pourrais pas me donner une reponse pour b) parce que je rame trop...j'essaye de chercher en meme temps...

n°729351
niiico
Niiiiiiiiiiiiiico !!!
Posté le 17-05-2004 à 17:44:43  profilanswer
 

un truc dans le genre???

Citation :


begin
assignfile(fic1,pop.dat);
assignfile(fic2,pays.dat);
assignfile(fic3,ville.dat);
reset(fic1) ;
for i :=0 to taille do
read(fic1,data[i]) ;
closefile(fic1);


est-ce que sinon j'ai le droit de faire un truc du genre :

Citation :


for...
read(pop.ville,t[i].ville);
read(pop.pays,t[i].pays);
read(pop.pop,t[i].pop);


 
et comment peux tu faire alors pour remplacer les n° d'enregistrement par leur valeur??? faire correspondre 4 à france par exemple...


Message édité par niiico le 17-05-2004 à 17:48:42
n°729353
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-05-2004 à 17:44:57  profilanswer
 

ouais


Message édité par antp le 17-05-2004 à 17:45:26

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°729354
niiico
Niiiiiiiiiiiiiico !!!
Posté le 17-05-2004 à 17:44:58  profilanswer
 

niiico a écrit :

un truc dans le genre???

Citation :


begin
assignfile(fic1,pop.dat);
assignfile(fic2,pays.dat);
assignfile(fic3,ville.dat);
reset(fic1) ;
for i :=0 to taille do
read(fic1,data[i]) ;
closefile(fic1);


est-ce que sinon j'ai le droit de faire un truc du genre :

Citation :


for...
read(pop.ville,t[i].ville);
read(pop.pays,t[i].pays);
read(pop.pop,t[i].pop);


 
et comment peux tu faire alors pour remplacer les n° d'enregistrement par leur valeur??? faire correspondre 4 à france par exemple...

n°729356
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-05-2004 à 17:45:53  profilanswer
 

Il faut espérer que les fichiers soient stockés dans le même ordre, sinon c'est chiant :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°729359
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-05-2004 à 17:46:21  profilanswer
 

pour ton for, tu t'en fous de la taille, tu dois faire un while not Eof(fichier)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°729361
niiico
Niiiiiiiiiiiiiico !!!
Posté le 17-05-2004 à 17:47:34  profilanswer
 

antp a écrit :

pour ton for, tu t'en fous de la taille, tu dois faire un while not Eof(fichier)

oui je viens de me rendre compte que c'etait bcp mieux

n°729364
niiico
Niiiiiiiiiiiiiico !!!
Posté le 17-05-2004 à 17:51:04  profilanswer
 

antp a écrit :

Il faut espérer que les fichiers soient stockés dans le même ordre, sinon c'est chiant :D


 
non justement...dans l'exemple qu'ils donnent :
 
pays.dat : 0 FRANCE 1 BELGIQUE etc.
ville .dat : 0 GLASGOW 1 VIENNE etc.
pop.dat : 0 (4  1  285000) 1 (3  0  323000) etc.

n°729376
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-05-2004 à 17:58:02  profilanswer
 

Tels quels dans le fichier ? c'est délimité par des espaces ?  
Ça va être plus chiant à lire, mais toutes ces fonctions du Pascal (c'est pas du Delphi là) je ne les connais pas bien, il y a peut-être moyen de lire ça de manière assez automatique.
À mon avis tu vas devoir faire une liste (array) de pays et une liste de villes à partir des deux fichiers, puis ensuite quand tu lis pop.dat pour chaque info de population tu dois aller chercher le nom de la ville et le nom du pays dans tes listes.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°729391
niiico
Niiiiiiiiiiiiiico !!!
Posté le 17-05-2004 à 18:12:31  profilanswer
 

antp a écrit :

Tels quels dans le fichier ? c'est délimité par des espaces ?  
Ça va être plus chiant à lire, mais toutes ces fonctions du Pascal (c'est pas du Delphi là) je ne les connais pas bien, il y a peut-être moyen de lire ça de manière assez automatique.
À mon avis tu vas devoir faire une liste (array) de pays et une liste de villes à partir des deux fichiers, puis ensuite quand tu lis pop.dat pour chaque info de population tu dois aller chercher le nom de la ville et le nom du pays dans tes listes.


non c'est de la forme
0 FRANCE
1 ..
2..
tu veux dire que les fichiers pays et ville je les mets aussi dans des tableaux (array of...)???
si je mets les trois fichiers dans 3 tableaux tels qu'ils sont et que dans le tableau data je fasse data[0].ville:=tville[tpop[0].ville] ca marche?

n°729429
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-05-2004 à 18:52:28  profilanswer
 

non
 
tu mets tes villes dans un array of string
idem pour les pays
puis quand tu lis tes populations, t'as le n° du pays et de la ville : ça te dira de quelle case des arrays de ville & pays tu dois prendre les chaînes

n°729433
niiico
Niiiiiiiiiiiiiico !!!
Posté le 17-05-2004 à 18:55:46  profilanswer
 

antp a écrit :

non
 
tu mets tes villes dans un array of string
idem pour les pays
puis quand tu lis tes populations, t'as le n° du pays et de la ville : ça te dira de quelle case des arrays de ville & pays tu dois prendre les chaînes


 
ok merci...bon je vais devoir y aller en tout cas tu m'as bien aidé merci heureusement que tu étais la...a bientot

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  exercice delphi...besoin d'un coup de main

 

Sujets relatifs
arreter une requete SQL dans DelphiMigrer de Delphi 5 à Delphi 7
LabView, Delphi et DLL[Delphi / Flash] Comment établir une communication entre les 2 ?
[Delphi] cryter / décryter des données avec mot de passe[Delphi] TBitMap.Create pas possible?
[PHP] Besoin d'un coup de main: générer un script anti-leech[Perl] Besoin d'un ti coup de pouce pour une regexp
Plus de sujets relatifs à : exercice delphi...besoin d'un coup de main


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR