projet-programmation-impera.../src/vector.ads

100 lines
3.3 KiB
Ada
Raw Normal View History

with Ada.Text_IO; use Ada.Text_IO;
package Vector is
-- explication:
-- Nous avons choisit de créer des sous-modules simplement pour pouvoir tout regroupe dans un seul fichier
-- Nous avons aussi séparé les vecteurs d'entiers des vecteurs de flottant, car créer un seul et unique module permettant
-- la gestion d'entier ou de flottant était trop compliqué. Le code aurait été plus compliqué à lire.
-- nous avons alors choiss de séparer comme ceci le code, bien que cela produise du code un peu redondant.
generic
Capacite: Positive;
package Entier is
type T_Vecteur is array (0..Capacite-1) of Natural;
-- permet d'initialiser le vecteur avec pour tout i, vec[i] = value
procedure initialize(vec: in out T_Vecteur; value: in Natural);
-- permet d'initialiser le vecteur avec pour tout i, vec[i] = i
procedure identity(vec: in out T_Vecteur);
-- permet de renverser le vecteur, équivalent vec[::-1] en python
procedure flip(vec: in out T_Vecteur);
-- procédure permettant d'afficher les vecteurs et d'écrire dans des fichiers
procedure put(vec: in T_Vecteur);
procedure put(file: in out Ada.Text_IO.File_Type; vec: in T_Vecteur);
-- procédure permettant de trier le vecteur selon l'algorithme de quicksort
procedure quicksort(vec: in out T_Vecteur; low: Natural := 0; high: Natural := Capacite-1);
end Entier;
generic
type T_Digit is digits <>;
Capacite: Positive;
with package Vector_Entier is new Vector.Entier(Capacite => Capacite);
package Digit is
-- on permet l'affichage direct des T_Digit
package Text_T_Element is
new Ada.Text_IO.Float_IO(Num => T_Digit);
use Text_T_Element;
type T_Vecteur is array (0..Capacite-1) of T_Digit;
procedure initialize(vec: in out T_Vecteur; value: in T_Digit);
--
function sum(vec: in T_Vecteur) return T_Digit;
procedure flip(vec: in out T_Vecteur);
procedure put(vec: in T_Vecteur);
procedure put(file: in out Ada.Text_IO.File_Type; vec: in T_Vecteur);
procedure quicksort(vec: in out T_Vecteur; low: Natural := 0; high: Natural := Capacite-1);
-- procédure permettant de trier le vecteur selon l'algorithme quicksort et aussi de récupérer les indices triés.
procedure quicksort(vec: in out T_Vecteur; vec_index: in out Vector_Entier.T_Vecteur;
low: Natural := 0; high: Natural := Capacite-1);
end Digit;
-- nous avons choisis de modéliser le réseau via cette structure d'un vecteur d'enregistrement plutot que d'un matrice
-- avec deux colonnes car de cette manière le trie du réseau est plus simple.
generic
Capacite: Positive;
package Link is
type T_Link is record
from: Natural;
to: Natural;
end record;
type T_Vecteur is array (0..Capacite-1) of T_Link;
procedure put(vec: in T_Vecteur);
procedure is_sorted_and_uniq(vec: in T_Vecteur; dupe: out Natural; sorted: out Boolean);
function "<"(left, right: in T_Link) return Boolean;
procedure quicksort(vec: in out T_Vecteur; low: Natural := 0; high: Natural := Capacite-1);
end Link;
end Vector;