lire et écrire à partir d'un fichier - Ada - Programmation
Marsh Posté le 05-12-2005 à 15:47:31
Salut!
A tout hasard tu ne serais pas en licence maths-info 2ème année à Perpignan toi?!
A part ça ouais j'y arrive pas non plus, enfin j'ai un peu de mal avec les lectures à partir de fichier, j'ai demandé une explication à ma prof mais elle m'a pas encore répondu... Surtout qu'on l'a pas vu en cours ça!
Marsh Posté le 05-12-2005 à 17:35:44
Plusieurs manières:
1) Ds un fichier texte (Ada.Text_Io)
Tu doit écrire un algo pour ECRIRE les valeurs de ta matrice ds le fichier, et un algo pour LIRE... => fichier texte donc formatage des valeurs en charactère (très facile en Ada). Avantage : consulter facilement le fichier avec un éditeur de fichier texte.
2) Dans un fichier séquenciel (Ada.Sequential_io). Te permet d' y écrire des valeurs de types indéfinis (non contraints)
3) Fichier direct .... no comment
4) Les flots : On écrit comme on veut ...
Marsh Posté le 05-12-2005 à 19:17:48
Le truc que moi je ne comprends pas (pourtant j'essaye), c'est comment créer un fichier dans l'extension qu'on nous demande, c'est à dire un .dat . Il suffit de créer un fichier texte normal ( .txt ou .doc par exemple) et de remplacer son extension par .dat? Et comment ça marche exactement? Dans un exo qu'on a fait on s'est servi de cette méthode mais je n'avais pas compris, d'ailleurs voici le passage du programme :
Ada.Text_Io.Open(File => Fich_Texte, Mode => Ada.Text_Io.In_File, Name => "exo4_3.dat" ) ;
S := 0 ; -- somme des nombres qu'on rentre
N := 0 ; -- nombre de nombres qu'on rentre
loop
Ada.Integer_Text_Io.Get(Fich_Texte, Nombre_Lu) ;
Ada.Text_Io.Skip_Line(Fich_Texte) ;
exit when Nombre_Lu = Marque_Findesuite ;
if (Nombre_Lu rem 2)=0 then
S := S + Nombre_Lu ;
N := N + 1 ;
end if ;
end loop ;
En fait ce que je ne comprends pas c'est les fonctions open et skip_line, dans l'aide d'ada il n'explique pas...
Marsh Posté le 06-12-2005 à 15:43:26
https://libre2.adacore.com/french_courses/main.html
Cour 11 "les fichiers"
Marsh Posté le 09-12-2005 à 11:59:28
En fait je voudrais rentrer deux matrices dans un fichier puis les lire dans une procedure, mais je ne vois pas comment.
Voici ce que j'ai essayer de faire mais ça ne me donne pas exactement les matrice tapé dans mon fichier :
for L in M'range loop |
Marsh Posté le 09-12-2005 à 15:39:51
De quel types sont M1 et M2 ?
Comment veut - tu qu'on t'aide si tu ne donne pas plus de code ?
Apparemment tu lit dans un fichier séquentiel de float c'est ça ?
J'immagine que tu as du écrire:
Code :
|
As-tu lu le cours sur les fichiers dont j'ai donné le lien plus haut ?
On dirait que tu as enregistré 2 matrices dans ton fichier et que tu veut les lire en même temps..... tu rêve ou tu ne maitrise pas du tout l'usage des fichiers en accès séquentiel il me semble.....
Marsh Posté le 11-12-2005 à 12:41:25
Le type des matices c'est tableau non contraint, et en fait on doit bien enregistrer 2 matrices puis les utiliser après, c'est bizare je n'en doute pas...
Merci pour le lien avec le cours, mais je dois avouer que ça ma pa trop aidé, enfin il me faudrait un exemple excplicite, en TD on en a vu mais j'ai franchement pas compris, et les exos ne marchent même pas en fait, enfin moi ils me mettent une erreur dans l'éxecution, mais aucune dans la compilation!
Regarde le sujet exact de l'exercice pour mieux comprendre mon (notre...) problème :
Citation : Ecrire des sous-programmes réalisant la lecture à partir dun fichier, lécriture, la somme et la différence et le produit de matrices carrées du type tableau non contraint T_matrice suivant |
Donc en fait on doit créer un fichier qui créera une matrice carrée a la lecture. Le pb de Zuzulia, affecter les nombres du fichiers a une matrice je pense, le mien, créer un fichier et l'utiliser...
Je sais que je devrai essayer de me demerder avant de vous demander ça mais j'ai essayé et j'y arrive pas, c'est en fait le seul truc que je ne comprends pas en ada, sur les 3 DM qu'on a eu j'ai réussi a faire les 2 premiers tou seuls, tranquil, ils étaient pas dur mais là j'ai épuisé toutes mes ressources...
Bref si vous pouvez m'aider serieux merci! @+
Marsh Posté le 11-12-2005 à 14:54:46
ca peut commencer comme ça :
Code :
|
Après, c'est à toi de faire un paquetage avezc tes méthodes, l'interface graphique, la représentation 3-D des matrices ...
Marsh Posté le 11-12-2005 à 16:21:52
Ok merci! Et miracle, ce matin pas très longtemps après avoir poster mon message j'ai compris l'histoire des fichiers (en fait un pote venait de comprendre, il m'a envoyé un exemple simple et du coup j'ai compris)!!
Donc c'est bon avec ça je devrai pouvoir me débrouiller.
Encore merci du coup de main!
Marsh Posté le 11-12-2005 à 21:50:14
Voila où j'en suis! (je sais apprentitux, je dois commencer a t'enerver legerement) Donc comme je le disais juste avant j'ai enfin compris les fichiers, et maintenant j'en suis au même point que Zuzulia, affecter à chaque aggregat d'une matrice un nombre lu dans un fichier. Mon problème c'est que la première ligne est bien affecté par les nombres du fichier, mais les autres lignes sont affectés par des réels qui sortent de je ne sais où... Voilà tout ce que j'ai fait :
Citation : with Ada.Text_Io, Ada.Float_Text_Io; |
A la compilation, aucun problème, à l'execution, ce problème là, bon là il n'y a pas le fichier que j'ai créé. Le fichier c'est un simple fichier ada où on met un nombre sur chaque ligne et puis on l'enregistre en mettant .dat à la fin (c'est comme ça qu'on est censé faire avec notre prof). Et donc moi j'ai fait des matrices 4x4, et la première ligne prend bien les valeurs du fichier mais les 3 autres lignes non...
Marsh Posté le 12-12-2005 à 13:50:24
Zuzulia si tu galère encore là dessus j'ai la solution!
En fait, au lieu de s'embeter à affecter les nombres du fichiers à chaque case (où aggrégat) de la matrice, il faut créer un autre vecteur de n² cases:
Citation : type t_vect is array(integer range <> ) of float; |
Comme ça tu obtient un vecteur d'une ligne et de n² colonne. Après il suffit d'affecter chaque valeur de ce nouveau vecteur à la matrice que tu veux remplir :
Citation : |
Et voila, une matrice remplie avec les nb contenus dans le fichier (dans le même ordre que dans le fichier évidement). J'ai pas trouvé manière plus simple...
Marsh Posté le 12-12-2005 à 18:16:29
Pourquoi tu veux absolument t'embêter à utiliser des fichiers texte ?
Suit plutôt l'exemple que j'ai donné au dessus et crée un fichier séquentiel de matrices.
Marsh Posté le 12-12-2005 à 22:07:39
Ben ouais moi je prefererai utiliser ce que tu as fait mais le fait est qu'on a pas le choix, en cours (et donc pour nos devoirs) on doit utiliser ce type de fichier avec un nombre a chaque ligne, c'est une consigne du devoir en quelque sorte.
Mais je doute pas une seconde qu'avec ta méthode c'est plus simple.
Et j'allais oublier, je pense que pour la correction elle utilsera nos programmes avec ses propres fichiers pour pouvoir comparer les exo des differents etudiants entre eux, donc si dans le prog on utilise un autre type de fichier ça buguera...
Marsh Posté le 05-12-2005 à 13:52:16
Bonjour à tous
j'ai un petit souci de programmation et je viens voir si qq'un pourais me donner un coup de pouce.
Voilà alors en fait je voudrais lire à partir d'un fichier une matrice puis l'écrire. Mais mon petit problème c'est que je ne vous pas du tout comment faire pour mon programme sache que c'est une matrice qu'il doit lire dans le fichier...