ftbass
|
Publié le 05/04/2004 à 22:10 |
RE : version 14 ter remanie.
quote: j'ai pas tout compris éau fonctionnement des post, mais c'est pas grave !!!! |
Non c'est pas grave, l'essentiel étant de faire avancer le truc
J'ai quand même remis un peu d'ordre ^_^ |
ftbass
|
Publié le 04/04/2004 à 23:48 |
RE : exo 14 bis avec procedure qui remplace le get_line sur les chaines de caracteres
Bien vue la fonction GetNom.
Ca évite de passer par une procedure d'initialisation... |
yba
Junior Member 
Messages: 4
Inscrit(e) le: 27/03/2004 Lieu de résidence : domont
Déconnecté(e)
|
Publié le 04/04/2004 à 19:35 |
Exo 14: Enregistrements
-- programme qui permet la saisie du
-- personnel d'une entreprise
with text_io;use text_io;
with ada.text_io;use ada.text_io;
with ada.integer_text_io; use ada.integer_text_io;
procedure personnel_societe is
type date_naissance is record
quantieme : integer range 1..31;
mois : integer range 1..12;
annee : integer range 1940..1986;
end record;
type salarie is record
nom : string (1..10);
prenom : string (1..10);
date_naiss : date_naissance;
service : string (1..10);
coefficient : integer;
fonction : string (1..10);
end record;
type Personnel is array(1..1) of Salarie;
tab_p : personnel;
procedure Get_ch (T : out String ) is
-- saisie un nom. Met des blancs a la fin de
-- facon a avoir une chaine de longueur fixe
L : Integer;
begin
Get_Line(T,L); -- on lit la chaine de l'utilisateur
if L = T'Last then
Skip_Line;
end if;
for I in L+1.. T 'Last loop -- on remplit avec des blancs
T(I):=' ';
end loop;
end Get_ch;
procedure saisie_personnel(t : in out personnel) is
begin
put("Saisie du personnel.");new_line;
for i in t'range loop
put("Donner le nom : ");
get_ch(T(i).nom);
put("Donner le prenom : ");
get_ch(T(i).prenom);
put("Date de naissance.");new_line;
put("Donner le jour : ");
get(T(i).date_naiss.quantieme);
put("Donner le mois : ");
get(T(i).date_naiss.mois);
put("Donner l'annee : ");
get(T(i).date_naiss.annee);
put("Donner le service : ");skip_line;
get_ch(T(i).service);
put("Donner le coefficient : ");
get(T(i).coefficient);
put("Donner la fonction : ");skip_line;
get_ch(T(i).fonction);
new_line;
end loop;
end saisie_personnel;
procedure afficher_entete is
begin
put("Affichage du personnel.");new_line;
put("nom");put(" ");put("Prenom");
put(" ");put("Date");
put(" ");put("Service");
put(" ");put("Coeff.");
put(" ");put("Fonction");--skip_line;
new_line;
end afficher_entete;
procedure afficher_personnel(t : in personnel) is
long_car : integer := 4;
begin
afficher_entete;skip_line;
for i in t'range loop
put(t(i).nom(1..long_car));put (" ");
put(t(i).prenom(1..long_car));put(" ");
put(t(i).date_naiss.quantieme,1);put ("/");
put(t(i).date_naiss.mois,1);put ("/");
put(t(i).date_naiss.annee,1);put(" ");
put(t(i).service(1..long_car));put (" ");
put(t(i).coefficient,1);put (" ");
put(t(i).fonction(1..long_car));
new_line;
end loop;
new_line;
end afficher_personnel;
procedure modifier_salarie(t : in out personnel) is
Long_Car : Integer;
num_salarie : integer;
begin
new_line;
loop
put("Numero du salarie a modifer");
put("(");put(tab_p'first,1);put("-");put(tab_p'last,1);
put(" ou 0 pour sortir) : ");
get(num_salarie);
exit when num_salarie = 0;
new_line;skip_line;
put("Modification du salarie Numero ");put(num_salarie,1);new_line;
put("Modifier le service : ");
get_line(T(num_salarie).service,long_car);
put("Modifier le coefficient : ");
get(T(num_salarie).coefficient);
put("Modifier la fonction : ");skip_line;
get_ch(T(num_salarie).fonction);
New_Line;
Afficher_Personnel(T);
end loop;
end modifier_salarie;
procedure sauvegarde_salaries(sal : in personnel) is
Nom_Fichier : String(1..30);
F : File_Type;
Long_Chaine : Natural;
choix : character;
begin
put("Tapez S pour Sauvegarder dans un fichier : ");
get(choix);
if choix = 'S' or choix = 's' then
--demander nom du fichier
skip_line;
Put ("Donner le nom du fichier : " );
Get_Line(Nom_Fichier,long_Chaine);
Create(F,out_File,Nom_Fichier(1..long_Chaine),"");
long_chaine := 4;
--faire sauvegarde
for I in sal'range loop
Put(F,sal(i).nom(1..long_chaine));
New_Line(F);
Put(F,sal(i).preNom(1..long_chaine));
New_Line(F);
Put(F,sal(i).date_naiss.quantieme,1);
New_Line(F);
Put(F,sal(i).date_naiss.mois,1);
New_Line(F);
Put(F,sal(i).date_naiss.annee,1);
New_Line(F);
Put(F,sal(i).service(1..long_chaine));
New_Line(F);
Put(F,sal(i).coefficient,1);
New_Line(F);
Put(F,sal(i).fonction(1..long_chaine));
New_Line(F);
end loop;
close(f);
Put("Sauvegarde effectue");New_Line(2);
end if;
end sauvegarde_salaries;
procedure Lire_fichier_salaries is
Nom_Fichier : String(1..30);
Fi : File_Type;
long_Chaine : Natural;
n,p,s,f : string(1..10);
q,m,a,c : integer;
begin
--demander nom du fichier
Put("Lecture et affichage du fichier sauvegarde.");
new_line;
Put ("Donner le nom du fichier : " );
Get_Line(Nom_Fichier,long_Chaine);
open(Fi,in_File,Nom_Fichier(1..long_Chaine),"");
long_chaine := 4;
afficher_entete;
--lire le fichier
while not(End_Of_File(Fi)) loop
get(fi,n(1..long_chaine));skip_line(fi);--nom
get(fi,p(1..long_chaine));skip_line(fi);--prenom
get(fi,q);skip_line(fi);--quantieme
get(fi,m);skip_line(fi);--mois
get(fi,a);skip_line(fi);--annee
get(fi,s(1..long_chaine));--service
get(fi,c);put(c);skip_line(fi);--coefficient
get(fi,f(1..long_chaine));skip_line(fi);--fonction
put(n(1..long_chaine));put(" ");--nom
put(p(1..long_chaine));put(" ");--prenom
put(q);put(" ");--quantieme
put(m);put(" ");--mois
put(a);put(" ");--annee
put(s(1..long_chaine));put(" ");--service
put(c);put(" ");--coefficient
put(f(1..long_chaine));--fonction
New_Line;
end loop;
close(fi);
end lire_fichier_salaries;
begin
saisie_personnel(tab_p);
Afficher_Personnel(Tab_P);
modifier_salarie(tab_p);
sauvegarde_salaries(tab_p);
lire_fichier_salaries;
end personnel_societe;
quote: j'ai pas tout compris éau fonctionnement des post, mais c'est pas grave !!!! |
|
yba
Junior Member 
Messages: 4
Inscrit(e) le: 27/03/2004 Lieu de résidence : domont
Déconnecté(e)
|
Publié le 04/04/2004 à 19:15 |
exo 14 ter avec sauvegarde et lecture dans un fichier texte
-- programme qui permet la saisie du
-- personnel d'une entreprise
with text_io;use text_io;
with ada.text_io;use ada.text_io;
with ada.integer_text_io; use ada.integer_text_io;
procedure personnel_societe is
type date_naissance is record
quantieme : integer range 1..31;
mois : integer range 1..12;
annee : integer range 1940..1986;
end record;
type salarie is record
nom : string (1..10);
prenom : string (1..10);
date_naiss : date_naissance;
service : string (1..10);
coefficient : integer;
fonction : string (1..10);
end record;
type Personnel is array(1..1) of Salarie;
tab_p : personnel;
procedure saisie_personnel(t : in out personnel) is
long_car : integer;
begin
put("Saisie du personnel.");new_line;
for i in t'range loop
put("Donner le nom : ");
get_line(T(i).nom,long_car);
put("Donner le prenom : ");
get_line(T(i).prenom,long_car);
put("Date de naissance.");new_line;
put("Donner le jour : ");
get(T(i).date_naiss.quantieme);
put("Donner le mois : ");
get(T(i).date_naiss.mois);
put("Donner l'annee : ");
get(T(i).date_naiss.annee);
put("Donner le service : ");skip_line;
get_line(T(i).service,long_car);
put("Donner le coefficient : ");
get(T(i).coefficient);
put("Donner la fonction : ");skip_line;
get_line(T(i).fonction,long_car);
new_line;
end loop;
end saisie_personnel;
procedure afficher_entete is
begin
put("Affichage du personnel.");new_line;
put("nom");put(" ");put("Prenom");
put(" ");put("Date");
put(" ");put("Service");
put(" ");put("Coeff.");
put(" ");put("Fonction");--skip_line;
new_line;
end afficher_entete;
procedure afficher_personnel(t : in personnel) is
long_car : integer := 4;
begin
afficher_entete;skip_line;
for i in t'range loop
put(t(i).nom(1..long_car));put (" ");
put(t(i).prenom(1..long_car));put(" ");
put(t(i).date_naiss.quantieme,1);put ("/");
put(t(i).date_naiss.mois,1);put ("/");
put(t(i).date_naiss.annee,1);put(" ");
put(t(i).service(1..long_car));put (" ");
put(t(i).coefficient,1);put (" ");
put(t(i).fonction(1..long_car));
new_line;
end loop;
new_line;
end afficher_personnel;
procedure modifier_salarie(t : in out personnel) is
Long_Car : Integer;
num_salarie : integer;
begin
new_line;
loop
put("Numero du salarie a modifer");
put("(");put(tab_p'first,1);put("-");put(tab_p'last,1);
put(" ou 0 pour sortir) : ");
get(num_salarie);
exit when num_salarie = 0;
new_line;skip_line;
put("Modification du salarie Numero ");put(num_salarie,1);new_line;
put("Modifier le service : ");
get_line(T(num_salarie).service,long_car);
put("Modifier le coefficient : ");
get(T(num_salarie).coefficient);
put("Modifier la fonction : ");skip_line;
get_line(T(num_salarie).fonction,long_car);
New_Line;
Afficher_Personnel(T);
end loop;
end modifier_salarie;
procedure sauvegarde_salaries(sal : in personnel) is
Nom_Fichier : String(1..30);
F : File_Type;
Long_Chaine : Natural;
choix : character;
begin
put("Tapez S pour Sauvegarder dans un fichier : ");
get(choix);
if choix = 'S' or choix = 's' then
--demander nom du fichier
skip_line;
Put ("Donner le nom du fichier : " );
Get_Line(Nom_Fichier,long_Chaine);
Create(F,out_File,Nom_Fichier(1..long_Chaine),"");
long_chaine := 4;
--faire sauvegarde
for I in sal'range loop
Put(F,sal(i).nom(1..long_chaine));
New_Line(F);
Put(F,sal(i).preNom(1..long_chaine));
New_Line(F);
Put(F,sal(i).date_naiss.quantieme,1);
New_Line(F);
Put(F,sal(i).date_naiss.mois,1);
New_Line(F);
Put(F,sal(i).date_naiss.annee,1);
New_Line(F);
Put(F,sal(i).service(1..long_chaine));
New_Line(F);
Put(F,sal(i).coefficient,1);
New_Line(F);
Put(F,sal(i).fonction(1..long_chaine));
New_Line(F);
end loop;
close(f);
Put("Sauvegarde effectue");New_Line(2);
end if;
end sauvegarde_salaries;
procedure Lire_fichier_salaries is
Nom_Fichier : String(1..30);
Fi : File_Type;
long_Chaine : Natural;
n,p,s,f : string(1..10);
q,m,a,c : integer;
begin
--demander nom du fichier
Put("Lecture et affichage du fichier sauvegarde.");
new_line;
Put ("Donner le nom du fichier : " );
Get_Line(Nom_Fichier,long_Chaine);
open(Fi,in_File,Nom_Fichier(1..long_Chaine),"");
long_chaine := 4;
afficher_entete;
--lire le fichier
while not(End_Of_File(Fi)) loop
get(fi,n(1..long_chaine));skip_line(fi);--nom
get(fi,p(1..long_chaine));skip_line(fi);--prenom
get(fi,q);skip_line(fi);--quantieme
get(fi,m);skip_line(fi);--mois
get(fi,a);skip_line(fi);--annee
get(fi,s(1..long_chaine));--service
get(fi,c);put(c);skip_line(fi);--coefficient
get(fi,f(1..long_chaine));skip_line(fi);--fonction
put(n(1..long_chaine));put(" ");--nom
put(p(1..long_chaine));put(" ");--prenom
put(q);put(" ");--quantieme
put(m);put(" ");--mois
put(a);put(" ");--annee
put(s(1..long_chaine));put(" ");--service
put(c);put(" ");--coefficient
put(f(1..long_chaine));--fonction
New_Line;
end loop;
close(fi);
end lire_fichier_salaries;
begin
saisie_personnel(tab_p);
Afficher_Personnel(Tab_P);
modifier_salarie(tab_p);
sauvegarde_salaries(tab_p);
lire_fichier_salaries;
end personnel_societe; |
yba
Junior Member 
Messages: 4
Inscrit(e) le: 27/03/2004 Lieu de résidence : domont
Déconnecté(e)
|
Publié le 04/04/2004 à 19:11 |
exo 14 bis avec procedure qui remplace le get_line sur les chaines de caracteres
with Text_Io;use Text_Io;
with Ada.Text_Io;use Ada.Text_Io;
with Ada.Integer_Text_Io;use Ada.Integer_Text_Io;
procedure Personnel_Societe is
type Date_Naissance is
record
Jour : Integer range 1 .. 31;
Mois : Integer range 1 .. 12;
Annee : Integer range 1940 .. 1986;
end record;
type Salarie is
record
Nom : String (1 .. 10);
Prenom : String (1 .. 10);
Date_Naiss : Date_Naissance;
Service : String (1 .. 10);
Coefficient : Integer;
Fonction : String (1 .. 10);
end record;
type Personnel is array (1 .. 1) of Salarie;
procedure Getnom (T : out String ) is
-- saisie un nom. Met des blancs a la fin de
-- facon a avoir une chaine de longueur fixe
L : Integer;
begin
Put("entrer un nom : ");
Get_Line(T,L); -- on lit la chaine de l'utilisateur
if L = T'Last then
Skip_Line;
end if;
for I in L+1.. T 'Last loop -- on remplit avec des blancs
T(I):=' ';
end loop;
end Getnom;
procedure Saisir_Personnel (
T : in out Personnel ) is
Long_Car : Integer;
begin
Put("Saisie des informations concernant le personnel.");
New_Line;
for I in T'range loop
Put("Donner le nom : ");
Get_Line(T(I).Nom,Long_Car);
Put("Donner le prenom : ");
Skip_Line;
Get_Line(T(I).Prenom,Long_Car);
New_Line;
Put("Donner la date de naissance.");
New_Line;
Put("Donner le jour : ");
Get(T(I).Date_Naiss.Jour);
Put("Donner le mois : ");
Get(T(I).Date_Naiss.Mois);
Put("Donner l'annee : ");
Get(T(I).Date_Naiss.Annee);
Skip_Line;
Put("Donner le service : ");
Get_Line(T(I).Service,Long_Car);
Skip_Line;
Put("Donner le coefficient : ");
Get(T(I).Coefficient);
Skip_Line;
Put("Donner la fonction : ");
Get_Line(T(I).Fonction,Long_Car);
end loop;
end Saisir_Personnel;
procedure Afficher_Personnel (
T : in Personnel ) is
begin
New_Line;
Put("Affichage des infos des salaries.");
New_Line;
for I in T'range loop
Put(T(I).Nom);
Put(" ");
Put(T(I).Prenom);
New_Line;
Put(T(I).Date_Naiss.Jour,1);
Put("/");
Put(T(I).Date_Naiss.Mois,1);
Put("/");
Put(T(I).Date_Naiss.Annee);
New_Line;
Put(T(I).Service);
New_Line;
Put(T(I).Coefficient,3);
New_Line;
Put(T(I).Fonction);
New_Line;
end loop;
end Afficher_Personnel;
procedure Afficher_Salarie (
S : in Salarie ) is
begin
New_Line;
Put("Affichage des infos concernant le salarie.");
New_Line;
Put(S.Nom);
Put(" ");
Put(S.Prenom);
Put(" ");
New_Line;
Put(S.Date_Naiss.Jour);
Put("/");
Put(S.Date_Naiss.Mois);
Put("/");
Put(S.Date_Naiss.Annee);
New_Line;
Put(S.Service);
New_Line;
Put(S.Coefficient);
New_Line;
Put(S.Fonction);
New_Line;
end Afficher_Salarie;
procedure Modifier_Salarie (
T : in out Personnel;
I : in Integer ) is
C : Character;
Chaine : String (1 .. 10);
Coeff : Integer;
begin
Afficher_Salarie(T(I));
Put("Voulez vous modifier le champ service o/n : ");
Get(C);
case C is
when 'o' | 'O' =>
Put("Donner le nouveau service");
Get(Chaine);
T(I).Service := Chaine;
when 'n' | 'N' =>
null;
when others =>
New_Line;
Put("Il faut saisir O ou N.");
New_Line;
end case;
Put("Voulez vous modifier le champ coefficient o/n : ");
Get(C);
case C is
when 'o' | 'O' =>
Put("Donner le nouveau coefficient");
Get(Coeff);
T(I).Coefficient := Coeff;
when 'n' | 'N' =>
null;
when others =>
New_Line;
Put("Il faut saisir O ou N.");
end case;
Put("Voulez vous modifier le champ fonction o/n : ");
Get(C);
case C is
when 'o' | 'O' =>
Put("Donner la nouvelle fonction");
Get(Chaine);
T(I).Fonction := Chaine;
when 'n' | 'N' =>
null;
when others =>
New_Line;
Put("Il faut saisir O ou N.");
end case;
end Modifier_Salarie;
P1 : Personnel;
Nb : Integer;
begin
Saisir_Personnel(P1);
Afficher_Personnel(P1);
Put("Quel numero de salarie voulez vous modifier ? ");
Get(Nb);
Modifier_Salarie(P1,Nb);
Afficher_Salarie(P1(Nb));
end Personnel_Societe; |
ftbass
|
Publié le 03/04/2004 à 14:49 |
Exo 14: Enregistrements
Un petit peu de code :
code: with text_io; use text_io;
with ada.integer_text_io; use ada.integer_text_io;
procedure PersonnelSociete is
type TypeDate is record
Quantieme : integer range 1 .. 31;
Mois : integer range 1 .. 12;
Annee : integer range 1940 .. 1996;
end record;
type TypeSalarie is record
Nom : string(1..15);
Prenom : string(1..15);
DateNaissance : TypeDate;
Service : string(1..10);
Coeff : integer;
Fonction : string(1..10);
end record;
type TypePersonnel is array(1..5) of TypeSalarie;
TabPersonnel : TypePersonnel;
Procedure CreerPersonnel(T : in out TypePersonnel) is
begin
for i in T'range loop
T(i).Nom := " ";
T(i).Prenom := " ";
T(i).Service := " ";
T(i).Fonction := " ";
end loop;
end CreerPersonnel;
Procedure SaisirPersonnel(T : in out TypePersonnel) is
Compt : integer;
begin
for i in T'range loop
put("Salarie "); put(i, 2);
new_line;
put("Donnez son nom : ");
get_line(T(i).Nom, compt);
put("Donnez son prenom : ");
get_line(T(i).Prenom, compt);
put("Donnez le quantieme de sa date de naissance : ");
get(T(i).DateNaissance.Quantieme);
put("Donnez le mois de sa date de naissance : ");
get(T(i).DateNaissance.Mois);
put("Donnez l'annee de sa date de naissance : ");
get(T(i).DateNaissance.Annee);
skip_line;
put("Donnez son service : ");
get_line(T(i).Service, compt);
put("Donnez sa fonction : ");
get_line(T(i).Fonction, compt);
put("Donnez son coefficient : ");
get(T(i).Coeff);
skip_line;
new_line;
end loop;
end SaisirPersonnel;
Procedure AfficherPersonnel(T : in TypePersonnel) is
begin
new_line;
for i in T'range loop
put("Salarie "); put(i, 2);
new_line;
put(T(i).Nom); put(" "); put(T(i).Prenom); new_line;
put("Ne le "); put(T(i).DateNaissance.Quantieme, 2); put("/"); put(T(i).DateNaissance.Mois, 2); put("/"); put(T(i).DateNaissance.Annee, 4);
new_line;
put("Service : "); put(T(i).Service); put("Fonction : "); put(T(i).Fonction);
new_line;
put("Coefficient : "); put(T(i).Coeff, 4);
new_line;
end loop;
end AfficherPersonnel;
Procedure ModifierPersonnel(T : in out TypePersonnel) is
compt : integer;
i, iMin, iMax : integer;
begin
iMin := T'first;
iMax := T'last;
new_line;
put("Quel personne voulez-vous modifier ? (saisir un nombre de "); put(iMin, 2); put(" a "); put(iMax, 2); put(")");
get(i);
skip_line;
new_line;
put("Modification du salarie "); put(i, 2);
new_line;
put("Donnez son nom : ");
get_line(T(i).Nom, compt);
put("Donnez son prenom : ");
get_line(T(i).Prenom, compt);
put("Donnez le quantieme de sa date de naissance : ");
get(T(i).DateNaissance.Quantieme);
put("Donnez le mois de sa date de naissance : ");
get(T(i).DateNaissance.Mois);
put("Donnez l'annee de sa date de naissance : ");
get(T(i).DateNaissance.Annee);
skip_line;
put("Donnez son service : ");
get_line(T(i).Service, compt);
put("Donnez sa fonction : ");
get_line(T(i).Fonction, compt);
put("Donnez son coefficient : ");
get(T(i).Coeff);
skip_line;
new_line;
end ModifierPersonnel;
begin
CreerPersonnel(TabPersonnel);
SaisirPersonnel(TabPersonnel);
AfficherPersonnel(TabPersonnel);
new_line(2);
ModifierPersonnel(TabPersonnel);
AfficherPersonnel(TabPersonnel);
end PersonnelSociete; |
Je suis preneur pour les améliorations (choix utilisateur pour la modif, ecriture dans un fichier...) :P |
|