exercice delphi...besoin d'un coup de main - Delphi/Pascal - Programmation
Marsh Posté le 14-05-2004 à 14:50:31
À 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.
Marsh Posté le 14-05-2004 à 15:08:07
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. |
ok...
j'arrive vraiment pas a faire le b) t'as une idee ?la reponse du c) arrive.
Marsh Posté le 14-05-2004 à 15:15:04
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.
Marsh Posté le 14-05-2004 à 15:26:37
niiico a écrit : ok... |
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?
Marsh Posté le 14-05-2004 à 15:28:45
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)
Marsh Posté le 14-05-2004 à 15:37:55
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?
Marsh Posté le 14-05-2004 à 15:57:25
pour la question d) :
Citation : |
le probleme c'est que c'est une fonction et qu'ils demandent une procedure...selon toi quel est le meilleur tri?
Marsh Posté le 14-05-2004 à 15:59:37
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 ???
Marsh Posté le 14-05-2004 à 17:54:24
bon y a plus personne pour m'aider 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 )
Marsh Posté le 14-05-2004 à 18:35:28
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...
Marsh Posté le 17-05-2004 à 14:59:27
pour la question b) j'ai essayé de continuer un peu...
Citation : |
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 cest pour cela quil 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 quil y a une histoire de clés (un peu comme dans les bases de données) ???
Marsh Posté le 17-05-2004 à 17:16:36
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)
Marsh Posté le 17-05-2004 à 17:38:14
antp a écrit : A priori il n'y a pas de clé et pas de lien entre les fichiers |
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...
Marsh Posté le 17-05-2004 à 17:44:43
un truc dans le genre???
Citation : |
est-ce que sinon j'ai le droit de faire un truc du genre :
Citation : |
et comment peux tu faire alors pour remplacer les n° d'enregistrement par leur valeur??? faire correspondre 4 à france par exemple...
Marsh Posté le 17-05-2004 à 17:44:57
ouais
Marsh Posté le 17-05-2004 à 17:44:58
niiico a écrit : un truc dans le genre???
|
Marsh Posté le 17-05-2004 à 17:45:53
Il faut espérer que les fichiers soient stockés dans le même ordre, sinon c'est chiant
Marsh Posté le 17-05-2004 à 17:46:21
pour ton for, tu t'en fous de la taille, tu dois faire un while not Eof(fichier)
Marsh Posté le 17-05-2004 à 17:47:34
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
Marsh Posté le 17-05-2004 à 17:51:04
antp a écrit : Il faut espérer que les fichiers soient stockés dans le même ordre, sinon c'est chiant |
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.
Marsh Posté le 17-05-2004 à 17:58:02
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.
Marsh Posté le 17-05-2004 à 18:12:31
antp a écrit : Tels quels dans le fichier ? c'est délimité par des espaces ? |
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?
Marsh Posté le 17-05-2004 à 18:52:28
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
Marsh Posté le 17-05-2004 à 18:55:46
antp a écrit : non |
ok merci...bon je vais devoir y aller en tout cas tu m'as bien aidé merci heureusement que tu étais la...a bientot
Marsh Posté le 14-05-2004 à 14:39:28
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 :
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 lapplication que lon vous demande decrire.
-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 denregistrements composes de trois champs entiers :
-le premier entier est le numero denregistrement de le ville dans le deuxieme fichier
-le deuxime fichier est le numero denregistrement du pays dans le premier fichier
-le troisieme est le nombre dhabitants 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 lensemble 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 denregistrement par leurs valeurs quil 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 cest un tableau dynamique quil faut utilisé ?)