8eb3244392
git-svn-id: http://cregut.svn.enseeiht.fr/2020/1sn/pim/projets/GH-05@211900 e13453a9-b01f-0410-a051-f404c4f0c485
100 lines
3.3 KiB
Ada
100 lines
3.3 KiB
Ada
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;
|