From 60005a1eb6baa12dc589f14ec7098cd4f2ca5592 Mon Sep 17 00:00:00 2001 From: lfainsin Date: Mon, 7 Dec 2020 22:03:27 +0000 Subject: [PATCH] c'est plus pratique d'utiliser un type tableau directement... + fix: prefix for "Length" attribute may not be private type git-svn-id: http://cregut.svn.enseeiht.fr/2020/1sn/pim/projets/GH-05@207551 e13453a9-b01f-0410-a051-f404c4f0c485 --- src/googleNaive.adb | 91 -------------------------------------------- src/googleNaive.ads | 39 ------------------- src/google_naive.adb | 81 +++++++++++++++++++++++++++++++++++++++ src/google_naive.ads | 36 ++++++++++++++++++ src/pageRank.adb | 8 +--- 5 files changed, 119 insertions(+), 136 deletions(-) delete mode 100644 src/googleNaive.adb delete mode 100644 src/googleNaive.ads create mode 100644 src/google_naive.adb create mode 100644 src/google_naive.ads diff --git a/src/googleNaive.adb b/src/googleNaive.adb deleted file mode 100644 index 1aa6bed..0000000 --- a/src/googleNaive.adb +++ /dev/null @@ -1,91 +0,0 @@ -package body googleNaive is - - function "*"(left, right: T_Google) return T_Google is - mat: T_Google; - n: Positive := left.dim(0); - m: Positive := right.dim(1); - l: Positive := left.dim(1); - Compteur: T_Element := 0; - begin - initialize(mat); - for i in 0..n loop - for j in 0..m loop - for k in 0..l loop - Compteur := Compteur + left.matrix(i)(k)*right.matrix(k)(j); - end loop; - mat.matrix(i)(j) := Compteur; - end loop; - end loop; - return mat; - end "*"; - - function "+"(left, right: T_Google) return T_Google is - n: Positive := left.dim(0); - m: Positive := left.dim(1); - mat: T_Google; - begin - initialize(mat); - for i in 0..n loop - for j in 0..m loop - mat(i)(j) := left.matrix(i)(j) + right.matrix(i)(j); - end loop; - end loop; - return mat; - end "+"; - - function "*"(left: T_Google; right: Integer) return T_Google is - n: Positive := left.dim(0); - m: Positive := left.dim(1); - mat: T_Google; - begin - initialize(mat); - for i in 0..n loop - for j in 0..m loop - mat(i)(j) := right*left.matrix(i)(j); - end loop; - end loop; - return mat; - end "*"; - - function "/"(left: T_Google; right: Integer) return T_Google is - n: Positive := left.dim(0); - m: Positive := left.dim(1); - mat: T_Google; - begin - initialize(mat); - for i in 0..n loop - for j in 0..m loop - mat(i)(j) := left.matrix(i)(j)/right; - end loop; - end loop; - return mat; - end "/"; - - procedure initialize(mat: out T_Google) is - begin - mat.dim(0) := nb_rows; - mat.dim(1) := nb_cols; - for i in 1..rows loop - for j in 1..cols loop - mat.matrix(i)(j) := 0; - end loop; - end loop; - end initialize; - - function ones(rows, cols: Positive) return T_Google is - mat: T_Google; - begin - initialize(mat); - for i in 1..rows loop - for j in 1..cols loop - mat(i)(j) := 1; - end loop; - end loop; - end ones; - - procedure insert(mat: in out T_Google; i, j: Natural; elm: T_Element) is - begin - mat.matrix(i)(j) := elm; - end insert; - -end googleNaive; diff --git a/src/googleNaive.ads b/src/googleNaive.ads deleted file mode 100644 index 32b4df2..0000000 --- a/src/googleNaive.ads +++ /dev/null @@ -1,39 +0,0 @@ -generic - - type T_Element is private; - nb_rows, nb_cols: Positive; - -package googleNaive is - - type T_Row is limited private; - type T_Google is limited private; - - function "*"(left, right: T_Google) return T_Google with - Pre => left.dim(1) = right.dim(0), - Post => "*"'Result.dim(0) = left.dim(0)* - and "*"'Result.dim(1) = right.dim(1); - - function "+"(left, right: T_Google) return T_Google with - Pre => left.dim = right.dim; - - function "*"(left: T_Google; right: T_Element) return T_Google; - function "/"(left: T_Google; right: T_Element) return T_Google with - Pre => right /= 0; - - procedure initialize(mat: out T_Google; rows, cols : Positive) with - Post => isEmpty(mat); - - function ones(rows, cols: Positive) return T_Google; - - procedure insert(mat: in out T_Google; i, j: Natural; elm: T_Element); - - function transpose(mat: in T_Google) return T_Google; - -private - - type T_Row is array (0..nb_cols-1) of T_Element; - type T_Google is record - dim: array (0..1) of Positive; - matrix: array (0..nb_rows-1) of T_Row; -- à voir si on obtient pas l'erreur: anonymous arrays not allowed as components - -end googleNaive; diff --git a/src/google_naive.adb b/src/google_naive.adb new file mode 100644 index 0000000..6663884 --- /dev/null +++ b/src/google_naive.adb @@ -0,0 +1,81 @@ +package body Google_Naive is + + function "*"(left, right: T_Google) return T_Google is + mat: T_Google; + Compteur: T_Element := 0.0; + begin + initialize(mat); + for i in 0..left'Length(1) loop + for j in 0..right'Length(2) loop + for k in 0..left'Length(2) loop + Compteur := Compteur + left(i,k) * right(k,j); + end loop; + mat(i,j) := Compteur; + end loop; + end loop; + return mat; + end "*"; + + function "+"(left, right: T_Google) return T_Google is + mat: T_Google; + begin + initialize(mat); + for i in 0..left'Length(1) loop + for j in 0..left'Length(2) loop + mat(i,j) := left(i,j) + right(i,j); + end loop; + end loop; + return mat; + end "+"; + + function "*"(left: T_Google; right: T_Element) return T_Google is + mat: T_Google; + begin + initialize(mat); + for i in 0..left'Length(1) loop + for j in 0..left'Length(2) loop + mat(i,j) := right*left(i,j); + end loop; + end loop; + return mat; + end "*"; + + function "/"(left: T_Google; right: T_Element) return T_Google is + mat: T_Google; + begin + initialize(mat); + for i in 0..left'Length(1) loop + for j in 0..left'Length(2) loop + mat(i,j) := left(i,j)/right; + end loop; + end loop; + return mat; + end "/"; + + procedure initialize(mat: in out T_Google) is + begin + for i in 1..mat'Length(1) loop + for j in 1..mat'Length(2) loop + mat(i,j) := 0.0; + end loop; + end loop; + end initialize; + + function ones(rows, cols: Positive) return T_Google is + mat: T_Google; + begin + initialize(mat); + for i in 1..mat'Length(1) loop + for j in 1..mat'Length(2) loop + mat(i,j) := 1.0; + end loop; + end loop; + return mat; + end ones; + + procedure insert(mat: in out T_Google; i, j: Natural; elm: T_Element) is + begin + mat(i,j) := elm; + end insert; + +end Google_Naive; diff --git a/src/google_naive.ads b/src/google_naive.ads new file mode 100644 index 0000000..0dcbb31 --- /dev/null +++ b/src/google_naive.ads @@ -0,0 +1,36 @@ +generic + + type T_Element is digits <>; + nb_rows: Positive; + nb_cols: Positive; + +package Google_Naive is + + type T_Google is limited private; + + function "*"(left, right: T_Google) return T_Google with + Pre => left'Length(2) = right'Length(1), + Post => "*"'Result'Length(1) = left'Length(1) + and "*"'Result'Length(2) = right'Length(2); + + function "+"(left, right: T_Google) return T_Google with + Pre => left'Length(1) = right'Length(1) + and left'Length(2) = right'Length(2); + + function "*"(left: in T_Google; right: T_Element) return T_Google; + function "/"(left: in T_Google; right: T_Element) return T_Google with + Pre => right /= 0.0; + + procedure initialize(mat: in out T_Google); + + function ones(rows, cols: Positive) return T_Google; + + procedure insert(mat: in out T_Google; i, j: Natural; elm: T_Element); + + --function transpose(mat: in T_Google) return T_Google; + +private + + type T_Google is array (0..nb_rows-1, 0..nb_cols-1) of T_Element; + +end Google_Naive; diff --git a/src/pageRank.adb b/src/pageRank.adb index a0a6ec9..2eadc65 100644 --- a/src/pageRank.adb +++ b/src/pageRank.adb @@ -1,8 +1,7 @@ -with SDA_Exceptions; use SDA_Exceptions; with Ada.Text_IO; use Ada.Text_IO; with Ada.Command_Line; use Ada.Command_Line; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; -with googleNaive; +with Google_Naive; procedure pageRank is @@ -117,11 +116,8 @@ begin G := G*alpha + ones(N, N)*(1-alpha)/N; -- on applique l'algorithme itératif - loop - pi_last := pi; + for i in 1..ite_max loop pi := pi * G; - ite := ite + 1; - exit when (ite >= ite_max) or (pi(1)(1) - pi_last(1)(1) < epsilon); -- changer (1)(1) ? end loop; -- write_to_files(filename, ...); -- TODO