Add files via upload

bulk data dump
This commit is contained in:
Jason Bou-Samra
2024-04-21 19:19:06 +10:00
committed by GitHub
commit 41de940ef9
10 changed files with 20382 additions and 0 deletions
+119
View File
@@ -0,0 +1,119 @@
---------------------------------------------------
---------------------------------------------------
-- histogram.adb - Display data file as Histogram
-- 13/04/24 - 19/04/24
-- jason bou-samra [ParagonSoft]
---------------------------------------------------
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Command_Line; use Ada.Command_Line;
with Ada.Numerics.Elementary_Functions; use Ada.Numerics.Elementary_Functions;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
with Ada.Float_Text_IO; use Ada.Float_Text_IO;
procedure histogram is
-- hidden message
S : String := "histogram (ada verson) jason bou-samra 19/04/2024";
-- declare the necessary variables
N : Integer := 10000; -- number of samples (data points)
nbin : Integer := Integer(sqrt(Float(N))); -- number of bins ~ sqrt(N) (or nearest integer value if not perfect square)
hist : array (1 .. nbin) of float; -- histogram array -- put(xmin);
x : array (1 .. N) of float; -- array of data points
xmax, xmin : Float; -- minimum & maximum x data point values
summ : Float; -- used to normalise data
dx : Float; -- dx = (xmax - xmin) / nbin (delta value)
i, j : Integer; -- index variables
fR, fW : File_Type;
FNr : constant String := "gauss.dat"; -- in-file (read)
FNw : constant String := "gauss.out"; -- out-file (write)
begin
-- file operations (read)
Open (fR, In_File, FNr); -- open read file
i := 1;
while not End_Of_File (fR) loop -- read data file into memory
x(i) := float'Value(Get_line(fR));
i := i + 1;
end loop;
Close (fR); -- close read file
-- search for xmin
i := 1;
xmin := x(1);
for i in 1 .. N loop
if x(i) < xmin then
xmin := x(i);
end if;
end loop;
-- search for xmax
i := 1;
xmax := x(1);
for i in 1 .. N loop
if x(i) > xmax then
xmax := x(i);
end if;
end loop;
-- calculate dx
dx := (xmax - xmin) / Float(nbin);
-- Compute Histogram
j := 1;
for j in 1 .. nbin loop
hist(j) := 0.0;
i := 1;
for i in 1 .. N loop
if ((x(i) >= (xmin + Float(j - 1) * dx) and x(i) < xmin + Float(j) * dx)) then
hist(j) := hist(j) + 1.0;
end if;
end loop;
end loop;
-- Normalise
i := 0;
summ := 0.0;
for i in 1 .. nbin loop
summ := summ + hist(i);
end loop;
i := 0;
for i in 1 .. nbin loop
hist(i) := hist(i) / summ;
end loop;
-- file operations (write)
Create (fW, Out_File, FNw);
i := 1; -- write memory into data file
for i in 1 .. nbin loop
Put (fW, " ");
Put (fW, Float'Rounding(xmin + Float(i) * dx),3,4,0);
Put (fW, " ");
Put (fW, hist(i),3,4,0);
New_Line(fW, 1);
end loop;
Close (fW); -- close write file
Put_Line ("...histogram written to file " & FNw);
end histogram;