94 lines
2.7 KiB
Ada
94 lines
2.7 KiB
Ada
|
-- Ce module définit un type Vecteur_Creux et les opérations associés. Un
|
||
|
-- vecteur creux est un vecteur qui contient essentiellement des 0. Aussi pour
|
||
|
-- économiser l'espace de stockage et les temps de calculs, on ne conserve que
|
||
|
-- les valeurs non nulles.
|
||
|
|
||
|
package Vecteurs_Creux is
|
||
|
|
||
|
type T_Vecteur_Creux is limited private;
|
||
|
|
||
|
|
||
|
-- Initialiser un vecteur creux. Il est nul.
|
||
|
procedure Initialiser (V : out T_Vecteur_Creux) with
|
||
|
Post => Est_Nul (V);
|
||
|
|
||
|
|
||
|
-- Détruire le vecteur V.
|
||
|
procedure Detruire (V: in out T_Vecteur_Creux);
|
||
|
|
||
|
|
||
|
-- Est-ce que le vecteur V est nul ?
|
||
|
function Est_Nul (V : in T_Vecteur_Creux) return Boolean;
|
||
|
|
||
|
|
||
|
-- Récupérer la composante (valeur) du vecteur V à l'indice Indice.
|
||
|
function Composante_Recursif (V : in T_Vecteur_Creux ; Indice : in Integer) return Float
|
||
|
with Pre => Indice >= 1;
|
||
|
|
||
|
|
||
|
-- Récupérer la composante (valeur) du vecteur V à l'indice Indice.
|
||
|
function Composante_Iteratif (V : in T_Vecteur_Creux ; Indice : in Integer) return Float
|
||
|
with Pre => Indice >= 1;
|
||
|
|
||
|
|
||
|
-- Modifier une composante (Indice, Valeur) d'un vecteur creux.
|
||
|
procedure Modifier (V : in out T_Vecteur_Creux ;
|
||
|
Indice : in Integer ;
|
||
|
Valeur : in Float ) with
|
||
|
pre => Indice >= 1,
|
||
|
post => Composante_Recursif (V, Indice) = Valeur;
|
||
|
|
||
|
|
||
|
-- Est-ce que deux vecteurs creux sont égaux ?
|
||
|
function Sont_Egaux_Recursif (V1, V2 : in T_Vecteur_Creux) return Boolean;
|
||
|
|
||
|
|
||
|
-- Est-ce que deux vecteurs creux sont égaux ?
|
||
|
function Sont_Egaux_Iteratif (V1, V2 : in T_Vecteur_Creux) return Boolean;
|
||
|
|
||
|
|
||
|
-- Additionner V1 avec V2. Ce sous-programme réalise l'opération suivante :
|
||
|
-- V1 := V1 + V2
|
||
|
procedure Additionner (V1 : in out T_Vecteur_Creux; V2 : in T_Vecteur_Creux);
|
||
|
|
||
|
|
||
|
-- Norme au carré du vecteur V.
|
||
|
function Norme2 (V : in T_Vecteur_Creux) return Float;
|
||
|
|
||
|
|
||
|
-- Le produit scalaire de deux vecteurs.
|
||
|
function Produit_Scalaire (V1, V2: in T_Vecteur_Creux) return Float;
|
||
|
|
||
|
|
||
|
-- Afficher le vecteur creux à des fins de mise au point.
|
||
|
procedure Afficher (V : T_Vecteur_Creux);
|
||
|
|
||
|
|
||
|
-- Nombre de composantes non nulles du vecteur V.
|
||
|
--
|
||
|
-- Ce sous-programme ne fait normalement pas partie de la spécification
|
||
|
-- du module. Il a été ajouté pour faciliter l'écriture des programmes
|
||
|
-- de test.
|
||
|
function Nombre_Composantes_Non_Nulles (V: in T_Vecteur_Creux) return Integer with
|
||
|
Post => Nombre_Composantes_Non_Nulles'Result >= 0;
|
||
|
|
||
|
|
||
|
private
|
||
|
|
||
|
type T_Cellule;
|
||
|
|
||
|
type T_Vecteur_Creux is access T_Cellule;
|
||
|
|
||
|
type T_Cellule is
|
||
|
record
|
||
|
Indice : Integer;
|
||
|
Valeur : Float;
|
||
|
Suivant : T_Vecteur_Creux;
|
||
|
-- Invariant :
|
||
|
-- Indice >= 1;
|
||
|
-- Suivant = Null or else Suivant.all.Indice > Indice;
|
||
|
-- -- les cellules sont stockés dans l'ordre croissant des indices.
|
||
|
end record;
|
||
|
|
||
|
end Vecteurs_Creux;
|