amélioration de la robustesse des arguments
git-svn-id: http://cregut.svn.enseeiht.fr/2020/1sn/pim/projets/GH-05@210347 e13453a9-b01f-0410-a051-f404c4f0c485
This commit is contained in:
parent
695673f9b5
commit
07984f97df
|
@ -13,7 +13,8 @@ procedure pageRank is
|
||||||
ERROR_args: Exception;
|
ERROR_args: Exception;
|
||||||
ERROR_alpha: Exception;
|
ERROR_alpha: Exception;
|
||||||
ERROR_ite: Exception;
|
ERROR_ite: Exception;
|
||||||
ERROR_unexpected: Exception;
|
ERROR_filename: Exception;
|
||||||
|
INFO_tips: Exception;
|
||||||
INFO_help: Exception;
|
INFO_help: Exception;
|
||||||
|
|
||||||
-- définition du type T_Double
|
-- définition du type T_Double
|
||||||
|
@ -76,22 +77,28 @@ procedure pageRank is
|
||||||
i := i + 2;
|
i := i + 2;
|
||||||
put_line("parsed ite_max");
|
put_line("parsed ite_max");
|
||||||
|
|
||||||
elsif Argument(i)(Argument(i)'Last-3 .. Argument(i)'Last) = ".net" then
|
elsif Argument(i)'Length > 3 and then Argument(i)(Argument(i)'Last-3 .. Argument(i)'Last) = ".net" then
|
||||||
filename := To_Unbounded_String(Argument(i)(Argument(i)'First .. Argument(i)'Last-4));
|
filename := To_Unbounded_String(Argument(i)(Argument(i)'First .. Argument(i)'Last-4));
|
||||||
i := i + 1;
|
i := i + 1;
|
||||||
put_line("parsed filename");
|
put_line("parsed filename");
|
||||||
|
|
||||||
else
|
else
|
||||||
new_line;
|
new_line;
|
||||||
put("Option: '");
|
put("Argument: '");
|
||||||
put(Argument(i));
|
put(Argument(i));
|
||||||
put("' non reconnu");
|
put("' non reconnu");
|
||||||
new_line;
|
new_line;
|
||||||
raise ERROR_unexpected;
|
raise INFO_tips;
|
||||||
|
|
||||||
end if;
|
end if;
|
||||||
exit when i > Argument_Count;
|
exit when i > Argument_Count;
|
||||||
|
|
||||||
end loop;
|
end loop;
|
||||||
|
|
||||||
|
if Length(filename) = 0 then
|
||||||
|
raise ERROR_filename;
|
||||||
|
end if;
|
||||||
|
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
new_line;
|
new_line;
|
||||||
|
@ -108,6 +115,9 @@ procedure pageRank is
|
||||||
raise ERROR_alpha;
|
raise ERROR_alpha;
|
||||||
elsif Argument(i) = "-i" or Argument(i) = "--ite-max" then
|
elsif Argument(i) = "-i" or Argument(i) = "--ite-max" then
|
||||||
raise ERROR_ite;
|
raise ERROR_ite;
|
||||||
|
else
|
||||||
|
put_line("Unexpected contrain_error");
|
||||||
|
raise ERROR_args;
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
end get_args;
|
end get_args;
|
||||||
|
@ -268,7 +278,7 @@ procedure pageRank is
|
||||||
|
|
||||||
-- on trie les poids par ordre décroissant, on tri en même temps les indices des pages
|
-- on trie les poids par ordre décroissant, on tri en même temps les indices des pages
|
||||||
initialize(pi_index);
|
initialize(pi_index);
|
||||||
sort_with_index_desc(pi, pi_index);
|
sort_insert_desc(pi, pi_index);
|
||||||
|
|
||||||
-- new_line;
|
-- new_line;
|
||||||
-- put_line("sorted pi:");
|
-- put_line("sorted pi:");
|
||||||
|
@ -301,6 +311,7 @@ begin
|
||||||
put_line("args OK");
|
put_line("args OK");
|
||||||
|
|
||||||
-- on ouvre le fichier .net
|
-- on ouvre le fichier .net
|
||||||
|
put("ouverture de: "); put(To_String(filename & ".net")); new_line;
|
||||||
open(file, In_File, To_String(filename & ".net"));
|
open(file, In_File, To_String(filename & ".net"));
|
||||||
put_line("file OK");
|
put_line("file OK");
|
||||||
|
|
||||||
|
@ -327,9 +338,6 @@ exception
|
||||||
put_line("Erreur lors de la saisi de la commande.");
|
put_line("Erreur lors de la saisi de la commande.");
|
||||||
put_line("Usage: pagerank [-P] [-i max_iterations] [-a alpha] [-h] fichier_reseau.net");
|
put_line("Usage: pagerank [-P] [-i max_iterations] [-a alpha] [-h] fichier_reseau.net");
|
||||||
|
|
||||||
when ERROR_unexpected =>
|
|
||||||
put_line("Essayez 'pagerank --help' pour plus d'informations.");
|
|
||||||
|
|
||||||
when ERROR_alpha =>
|
when ERROR_alpha =>
|
||||||
new_line;
|
new_line;
|
||||||
put_line("Erreur lors de la saisi de alpha.");
|
put_line("Erreur lors de la saisi de alpha.");
|
||||||
|
@ -340,6 +348,14 @@ exception
|
||||||
put_line("Erreur lors de la saisi de ite_max.");
|
put_line("Erreur lors de la saisi de ite_max.");
|
||||||
put_line("ite_max ∈ ⟦0, 150⟧");
|
put_line("ite_max ∈ ⟦0, 150⟧");
|
||||||
|
|
||||||
|
when ERROR_filename =>
|
||||||
|
new_line;
|
||||||
|
put_line("Erreur lors de la saisi du fichier réseau.");
|
||||||
|
put_line("Veuillez rentrer un nom valide.");
|
||||||
|
|
||||||
|
when INFO_tips =>
|
||||||
|
put_line("Essayez 'pagerank --help' pour plus d'informations.");
|
||||||
|
|
||||||
when INFO_help =>
|
when INFO_help =>
|
||||||
new_line;
|
new_line;
|
||||||
put_line("Usage: pagerank [OPTIONS] network.net");
|
put_line("Usage: pagerank [OPTIONS] network.net");
|
||||||
|
|
|
@ -32,7 +32,7 @@ begin
|
||||||
put_line("avant:");
|
put_line("avant:");
|
||||||
put(vec);
|
put(vec);
|
||||||
new_line;
|
new_line;
|
||||||
Quick_Sort(vec);
|
quicksort(vec, vec_index, 0, N-1);
|
||||||
put_line("après:");
|
put_line("après:");
|
||||||
put(vec);
|
put(vec);
|
||||||
|
|
||||||
|
|
154
src/vector.adb
154
src/vector.adb
|
@ -50,7 +50,7 @@ package body vector is
|
||||||
end loop;
|
end loop;
|
||||||
end put;
|
end put;
|
||||||
|
|
||||||
procedure sort_with_index_desc(vec: in out T_Vecteur_Element; vec_index: in out T_Vecteur_Natural) is
|
procedure sort_insert_desc(vec: in out T_Vecteur_Element; vec_index: in out T_Vecteur_Natural) is
|
||||||
tmp_Element: T_Element;
|
tmp_Element: T_Element;
|
||||||
tmp_Natural: Natural;
|
tmp_Natural: Natural;
|
||||||
max: Natural;
|
max: Natural;
|
||||||
|
@ -72,48 +72,8 @@ package body vector is
|
||||||
vec_index(max) := tmp_Natural;
|
vec_index(max) := tmp_Natural;
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
end sort_with_index_desc;
|
end sort_insert_desc;
|
||||||
|
|
||||||
<<<<<<< .mine
|
|
||||||
||||||| .r210321
|
|
||||||
procedure quicksort(vec: in out T_Vecteur_Element; vec_index: in out T_Vecteur_Natural; a, b: in Natural) is
|
|
||||||
pivot: Natural := a;
|
|
||||||
i: Natural := a;
|
|
||||||
tmp: T_Element;
|
|
||||||
begin
|
|
||||||
if b - a > 1 then
|
|
||||||
for j in a..b loop
|
|
||||||
if vec(j) <= vec(pivot) then
|
|
||||||
i := i + 1;
|
|
||||||
tmp := vec(i);
|
|
||||||
vec(i) := vec(j);
|
|
||||||
vec(j) := tmp;
|
|
||||||
else
|
|
||||||
null;
|
|
||||||
end if;
|
|
||||||
end loop;
|
|
||||||
|
|
||||||
tmp := vec(i);
|
|
||||||
vec(i) := vec(pivot);
|
|
||||||
vec(pivot) := tmp;
|
|
||||||
|
|
||||||
pivot := i;
|
|
||||||
|
|
||||||
put(vec); new_line;
|
|
||||||
|
|
||||||
if pivot - 1 > 0 then
|
|
||||||
quicksort(vec, vec_index, a, pivot-1);
|
|
||||||
elsif b - pivot - 1 > 0 then
|
|
||||||
quicksort(vec, vec_index, pivot+1, b);
|
|
||||||
else
|
|
||||||
null;
|
|
||||||
end if;
|
|
||||||
else
|
|
||||||
null;
|
|
||||||
end if;
|
|
||||||
end quicksort;
|
|
||||||
|
|
||||||
=======
|
|
||||||
procedure quicksort(vec: in out T_Vecteur_Element; vec_index: in out T_Vecteur_Natural; a, b: in Natural) is
|
procedure quicksort(vec: in out T_Vecteur_Element; vec_index: in out T_Vecteur_Natural; a, b: in Natural) is
|
||||||
pivot: Natural := a;
|
pivot: Natural := a;
|
||||||
i: Natural := a;
|
i: Natural := a;
|
||||||
|
@ -151,114 +111,4 @@ package body vector is
|
||||||
end if;
|
end if;
|
||||||
end quicksort;
|
end quicksort;
|
||||||
|
|
||||||
>>>>>>> .r210345
|
|
||||||
end vector;
|
end vector;
|
||||||
<<<<<<< .mine
|
|
||||||
||||||| .r210321
|
|
||||||
|
|
||||||
-- def triRapide(L): # Quicksort
|
|
||||||
-- if len(L) <= 1:
|
|
||||||
-- return L
|
|
||||||
-- pvt = L[0]
|
|
||||||
-- L1, L2 = [], []
|
|
||||||
-- for i in range(1, len(L)):
|
|
||||||
-- if L[i] < pvt:
|
|
||||||
-- L1.append(L[i])
|
|
||||||
-- else:
|
|
||||||
-- L2.append(L[i])
|
|
||||||
-- return triRapide(L1) + [pvt] + triRapide(L2)
|
|
||||||
|
|
||||||
-- procedure Quick_Sort (A : in out Element_Array) is
|
|
||||||
|
|
||||||
-- procedure Swap(Left, Right : Index) is
|
|
||||||
-- Temp : Element := A (Left);
|
|
||||||
-- begin
|
|
||||||
-- A (Left) := A (Right);
|
|
||||||
-- A (Right) := Temp;
|
|
||||||
-- end Swap;
|
|
||||||
|
|
||||||
-- begin
|
|
||||||
-- if A'Length > 1 then
|
|
||||||
-- declare
|
|
||||||
-- Pivot_Value : Element := A (A'First);
|
|
||||||
-- Right : Index := A'Last;
|
|
||||||
-- Left : Index := A'First;
|
|
||||||
-- begin
|
|
||||||
-- loop
|
|
||||||
-- while Left < Right and not (Pivot_Value < A (Left)) loop
|
|
||||||
-- Left := Index'Succ (Left);
|
|
||||||
-- end loop;
|
|
||||||
-- while Pivot_Value < A (Right) loop
|
|
||||||
-- Right := Index'Pred (Right);
|
|
||||||
-- end loop;
|
|
||||||
-- exit when Right <= Left;
|
|
||||||
-- Swap (Left, Right);
|
|
||||||
-- Left := Index'Succ (Left);
|
|
||||||
-- Right := Index'Pred (Right);
|
|
||||||
-- end loop;
|
|
||||||
-- if Right = A'Last then
|
|
||||||
-- Right := Index'Pred (Right);
|
|
||||||
-- Swap (A'First, A'Last);
|
|
||||||
-- end if;
|
|
||||||
-- if Left = A'First then
|
|
||||||
-- Left := Index'Succ (Left);
|
|
||||||
-- end if;
|
|
||||||
-- Quick_Sort (A (A'First .. Right));
|
|
||||||
-- Quick_Sort (A (Left .. A'Last));
|
|
||||||
-- end;
|
|
||||||
-- end if;
|
|
||||||
-- end Quick_Sort;=======
|
|
||||||
|
|
||||||
-- def triRapide(L): # Quicksort
|
|
||||||
-- if len(L) <= 1:
|
|
||||||
-- return L
|
|
||||||
-- pvt = L[0]
|
|
||||||
-- L1, L2 = [], []
|
|
||||||
-- for i in range(1, len(L)):
|
|
||||||
-- if L[i] < pvt:
|
|
||||||
-- L1.append(L[i])
|
|
||||||
-- else:
|
|
||||||
-- L2.append(L[i])
|
|
||||||
-- return triRapide(L1) + [pvt] + triRapide(L2)
|
|
||||||
|
|
||||||
-- procedure Quick_Sort (A : in out Element_Array) is
|
|
||||||
|
|
||||||
-- procedure Swap(Left, Right : Index) is
|
|
||||||
-- Temp : Element := A (Left);
|
|
||||||
-- begin
|
|
||||||
-- A (Left) := A (Right);
|
|
||||||
-- A (Right) := Temp;
|
|
||||||
-- end Swap;
|
|
||||||
|
|
||||||
-- begin
|
|
||||||
-- if A'Length > 1 then
|
|
||||||
-- declare
|
|
||||||
-- Pivot_Value : Element := A (A'First);
|
|
||||||
-- Right : Index := A'Last;
|
|
||||||
-- Left : Index := A'First;
|
|
||||||
-- begin
|
|
||||||
-- loop
|
|
||||||
-- while Left < Right and not (Pivot_Value < A (Left)) loop
|
|
||||||
-- Left := Index'Succ (Left);
|
|
||||||
-- end loop;
|
|
||||||
-- while Pivot_Value < A (Right) loop
|
|
||||||
-- Right := Index'Pred (Right);
|
|
||||||
-- end loop;
|
|
||||||
-- exit when Right <= Left;
|
|
||||||
-- Swap (Left, Right);
|
|
||||||
-- Left := Index'Succ (Left);
|
|
||||||
-- Right := Index'Pred (Right);
|
|
||||||
-- end loop;
|
|
||||||
-- if Right = A'Last then
|
|
||||||
-- Right := Index'Pred (Right);
|
|
||||||
-- Swap (A'First, A'Last);
|
|
||||||
-- end if;
|
|
||||||
-- if Left = A'First then
|
|
||||||
-- Left := Index'Succ (Left);
|
|
||||||
-- end if;
|
|
||||||
-- Quick_Sort (A (A'First .. Right));
|
|
||||||
-- Quick_Sort (A (Left .. A'Last));
|
|
||||||
-- end;
|
|
||||||
-- end if;
|
|
||||||
-- end Quick_Sort;
|
|
||||||
>>>>>>> .r210345
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ package Vector is
|
||||||
procedure put(file: in out Ada.Text_IO.File_Type; vec: in T_Vecteur_Element);
|
procedure put(file: in out Ada.Text_IO.File_Type; vec: in T_Vecteur_Element);
|
||||||
procedure put(file: in out Ada.Text_IO.File_Type; vec: in T_Vecteur_Natural);
|
procedure put(file: in out Ada.Text_IO.File_Type; vec: in T_Vecteur_Natural);
|
||||||
|
|
||||||
procedure sort_with_index_desc(vec: in out T_Vecteur_Element; vec_index: in out T_Vecteur_Natural);
|
procedure sort_insert_desc(vec: in out T_Vecteur_Element; vec_index: in out T_Vecteur_Natural);
|
||||||
|
procedure quicksort(vec: in out T_Vecteur_Element; vec_index: in out T_Vecteur_Natural; a, b: in Natural);
|
||||||
|
|
||||||
end Vector;
|
end Vector;
|
||||||
|
|
Loading…
Reference in a new issue