From 94adbc8d7696252d1e98d907b58c6c3581ae26c9 Mon Sep 17 00:00:00 2001
From: jonas <jonas.stirnemann@etu.hesge.ch>
Date: Wed, 3 Nov 2021 11:59:47 +0100
Subject: [PATCH] Added new jmaths and added tableauxUni

---
 jmaths/bin/main                         | Bin 16288 -> 16464 bytes
 jmaths/include/jmath.h                  |   1 +
 jmaths/src/jmath.c                      |  11 +
 jmaths/src/main.c                       |   8 +
 tableaux_uni/Makefile                   |  25 ++
 tableaux_uni/bin/main                   | Bin 0 -> 17072 bytes
 tableaux_uni/include/jrandom.h          |  16 ++
 tableaux_uni/include/jtableaux.h        |  32 +++
 tableaux_uni/kreate.py                  | 185 ++++++++++++++
 tableaux_uni/src/jrandom.c              |  24 ++
 tableaux_uni/src/jtableaux.c            | 309 ++++++++++++++++++++++++
 tableaux_uni/src/main.c                 |  73 ++++++
 tableaux_uni/stirnemann_tableauxUni.zip | Bin 0 -> 11654 bytes
 13 files changed, 684 insertions(+)
 create mode 100644 tableaux_uni/Makefile
 create mode 100755 tableaux_uni/bin/main
 create mode 100644 tableaux_uni/include/jrandom.h
 create mode 100644 tableaux_uni/include/jtableaux.h
 create mode 100644 tableaux_uni/kreate.py
 create mode 100644 tableaux_uni/src/jrandom.c
 create mode 100644 tableaux_uni/src/jtableaux.c
 create mode 100644 tableaux_uni/src/main.c
 create mode 100644 tableaux_uni/stirnemann_tableauxUni.zip

diff --git a/jmaths/bin/main b/jmaths/bin/main
index ce25a65a07bc049e448f13361d774287129c15f0..b985017ec3177668cc94ef1ecbe6dfa516c6d705 100755
GIT binary patch
delta 2713
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
RhR(^3_U255=98=J)d0Kz3>*Le

delta 1964
zcmcc6z__4(f(FwA^NCu^I4js0z@TEXAfxcaH!@tRY+ycvD%)fsMm?@6Oc3rArp;cA
zdW?z!iV!|J9Rd+%2$?*S>AuKCKjV=5#drGWE_pEPRnqTM+e|-io7}^k!k92wkwtv+
z2WE-M4J;CjjUXQ5q{)FS`iw=B8(G|00~r_?lqPRv5}7PyCNudjiymuoPJVLs<ZxD{
z$=a+6Yz0M`c_nF+D_BkI-F-Zroa2r3j7=CA7?>Cs8JHPZ7?>Ft8CV$@8Q2(@85kHC
z85kL6GB7X*FfcGEFfcHbN@a2~Ft9PKg*ujzfrVi)R30QGo|(zZz`)9|6DlSG=Cd#y
zhVmi$nZf#bL56ObIE@Wt`Ps>eY{iUBlc%!9Pv&9g;oV^mGLC@(6u2ytdD+DoSvRY)
zALf`O@LAT?@POe-k6zm%CI*K8qL=j;7`~+G@yoY>bxalz6l2`BSzYi0Bjel262gg-
zuM3OTv)1x3FnDwx-vLtdLg4TJ{~o=eH#~Y>FL-nw^XO$QLY8Ly`~UxoGk^a7_vmze
zaNP9_NY87>Zr3v&GdwzvzsUIa|9{JY5>Ag^Ru>)yhS%&Ky{wKr3=G}AXFNI&b)NI+
zWwk*zZqc9reE*wW&oDOEp5d(9`J(vG<cFdX@h5p07(VgG9sI;E==$Olzkn}@VBHNC
zjXaU&!Cwa=@(y_PvOeR6IG&M#f#HSYpa1_~$Ut4^(H(ljqZ{OlYaplDfjrjf`r*Z&
z-yl1ff_Nr3h>G#Eu17ZD&SV8q5mVO1P%)72UhMq+|No0Azad^mGxQt8t`9Ftz=krO
znp`g`&d(YO)em-52*^xbR!^uH*i1u^nLKbaL5@8BVlK>upC>;Mm1Oh;ndQUE1l0#N
z>+-Mv|G|Fh4*dX$o&Q`A|AUR)^6US9a5Q>!hyF<M&=yhEU|?V<VSUm4>;M0ghc~;6
z@8sBAz;3`eNr7XsfWnW-3W_3rpv=VyN`vqJ|L<U6U?_P1|NjOC28M?B|Noz0U|_iL
z{{R011_p+mAO8P;z`(%p^TYrD42%p6W*`6mS72mdQ2g}&zXKx!L*l3Z{}UJ|&r(#A
zjClY5zZ%FzF6^L$%%H-+zyQif4U=ywsx$7G%%~(Tx#8Xa{{bL1P%Oj1z|h0Mz;JQ0
zp^`k~$H{?8@``*P{{Mdsl6U13Xk&8bWn+58!_L9L08;ygfq~)X<cUh+@*o}$BgA3L
zKqU%HHS=619(In+fy(AwlMC1nP43Y3V3H7<d`Y*C@y6spy?8-z7Gi+pB#<=@lMm|o
zGhUc1s4vgBW3r+CTQNgDBRvCM^U|c!ypmEQO$9@+z~qfgGMfVo92l7<C{3PZs5SYD
zp@`vGkO>UJ46wor%w=F;0EHPNg9O72Xtsrke*>3K!jlt?#3h>;L1l;}1A_xh7DDS!
zo@gX4Y0L;JWh5B{&}6M9A2bq|^kHOR5MmN!kPw6DfssKVS;kxtDcJxu0p0xG$$`e=
zj8j2wU|ce}(OBGYBO?QYAcGLdIbefWz$6310k8>D3=(K=I6C>Ev3Oz|$PEkv3=hE3
z&A<STd<F)FQ&3&#F24p<UnmSQ9vp293=FrS;wJ?m;xNnZgMIM><TfVEaA29d&_sN4
zfr$j8{^W}$;#^)#pb+6<U=Wym%j7b<OQfHpuc!0m8>WV$#U+VFCGok5nRyO~B7U-<
znKesVW?trGFEhi*GtKNJQ}a?7(h`$P7~<oTii_jHx)?yZCNr8Bu*PTRWtMC%Fi&9I
zeBNRqBjb(9g;x5UJ6IuZ-Z6QlmAT*rC=W&#O#W!4&*=cI{~RW3TAOphk{<*6<}7PB
zMkaIC$(wBSxL^?}AvXDyjT@uDWJ6nhL0GDS(IJxyZS@5+pcN*J*4ez#_CF)91vJ)V
h85kIZC-1e_<}3hZKL!SdfXN^2&6y6EP1bTy0{|WC4J`lw

diff --git a/jmaths/include/jmath.h b/jmaths/include/jmath.h
index 6304b53..c1a6e5c 100644
--- a/jmaths/include/jmath.h
+++ b/jmaths/include/jmath.h
@@ -25,5 +25,6 @@ uint64_t GCD(uint64_t a, uint64_t b);
 uint64_t LCM(uint64_t a, uint64_t b);
 bool isPrime(uint64_t n);
 uint64_t fact(uint64_t n);
+uint64_t fibo(uint64_t n);
 
 #endif
\ No newline at end of file
diff --git a/jmaths/src/jmath.c b/jmaths/src/jmath.c
index dd83243..45560d8 100644
--- a/jmaths/src/jmath.c
+++ b/jmaths/src/jmath.c
@@ -81,5 +81,16 @@ uint64_t fact(uint64_t n)
 	return r;
 }
 
+uint64_t fibo(uint64_t n)
+{
+	if(n > 1)
+	{
+		printf("%ld", (fibo(n -1) + fibo(n -2)));
+	}
+	else
+	{
+		return n;
+	}
+}
 
 
diff --git a/jmaths/src/main.c b/jmaths/src/main.c
index e41f9e6..90a0ef6 100644
--- a/jmaths/src/main.c
+++ b/jmaths/src/main.c
@@ -56,6 +56,14 @@ int main()
 	timeT = ((double)t) / CLOCKS_PER_SEC;
 	printf("COMPUTED FACTORIAL IN %lfs\n", timeT);
 	printf("FACT(%ld) = %ld \n", a, r);
+	
+	t = clock();
+	r = fibo(b);
+	t = clock() - t;
+	timeT = ((double)t) / CLOCKS_PER_SEC;
+	printf("COMPUTED FIBO IN %lfs\n",  timeT);
+	printf("FACT(%ld) = %ld \n", a, r);
+
 
 	return 0;
 }
\ No newline at end of file
diff --git a/tableaux_uni/Makefile b/tableaux_uni/Makefile
new file mode 100644
index 0000000..2a3a263
--- /dev/null
+++ b/tableaux_uni/Makefile
@@ -0,0 +1,25 @@
+CC       := gcc
+CC_FLAGS := -Wall -Wextra
+
+BIN     	:= bin
+SRC     	:= src
+INCLUDE 	:= include
+LIB     	:= lib
+LIBRARIES   := -lm		#Library flags like -lm -lncurses
+EXECUTABLE  := main
+
+all: $(BIN)/$(EXECUTABLE)
+
+run: clean all
+	clear
+	@echo "🚀 Executing..."
+	./$(BIN)/$(EXECUTABLE)
+
+$(BIN)/$(EXECUTABLE): $(SRC)/*.c
+	@echo "🚧 Building..."
+	$(CC) $(CC_FLAGS) -I $(INCLUDE) -L $(LIB) $^ -o $@ $(LIBRARIES)
+
+clean:
+	@echo "🧹 Clearing..."
+	-rm $(BIN)/*
+
diff --git a/tableaux_uni/bin/main b/tableaux_uni/bin/main
new file mode 100755
index 0000000000000000000000000000000000000000..b6e316f2850932719f1506b91f64e01cc8826d35
GIT binary patch
literal 17072
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

literal 0
HcmV?d00001

diff --git a/tableaux_uni/include/jrandom.h b/tableaux_uni/include/jrandom.h
new file mode 100644
index 0000000..8b64fa0
--- /dev/null
+++ b/tableaux_uni/include/jrandom.h
@@ -0,0 +1,16 @@
+/*
+	* HEADER JRANDOM
+	* Author : Jonas S.
+	* Date   : 12/10/2021
+	! DESCRIPTION
+*/
+
+#ifndef _JRANDOM_H_
+#define _JRANDOM_H_
+
+// DEFINES
+
+// PROTOTYPE FUNCTIONS
+uint64_t getRandomNumber(uint64_t highLimit, uint64_t lowLimit);
+
+#endif
\ No newline at end of file
diff --git a/tableaux_uni/include/jtableaux.h b/tableaux_uni/include/jtableaux.h
new file mode 100644
index 0000000..974ab81
--- /dev/null
+++ b/tableaux_uni/include/jtableaux.h
@@ -0,0 +1,32 @@
+/*
+	* HEADER TABLEAUX_UNI
+	* Author : Jonas S.
+	* Date   : 12/10/2021
+	! DESCRIPTION
+*/
+
+#ifndef _JTABLEAUX_H_
+#define _JTABLEAUX_H_
+
+// DEFINES
+
+// PROTOTYPE FUNCTIONS
+void showTab(uint64_t *tab, uint64_t tabSize);
+void fillTabRandom(uint64_t *tab, uint64_t tabSize, uint64_t min, uint64_t max);
+void fillTabWithZeroes(uint64_t *tab, uint64_t tabSize);
+
+uint64_t getTabSmallestValue(uint64_t *tab, uint64_t tabSize);
+uint64_t getTabBiggestValue(uint64_t *tab, uint64_t tabSize);
+uint64_t getIndexOfTabElement(uint64_t *tab, uint64_t tabSize, uint64_t element);
+
+void sortTabLTH(uint64_t *tab, uint64_t tabSize);
+void countOccurence(uint64_t *tab, uint64_t tabSize, uint64_t *occurences, uint64_t sizeOfTabOcc);
+
+double getMeanOfTab(uint64_t *tab, uint64_t tabSize);
+double getVarianceOfTab(uint64_t *tab, uint64_t tabSize, double mean);
+uint64_t getMedianOfTab(uint64_t *tab, uint64_t tabSize);
+
+void showVerticalHistoOfTab(uint64_t *tab, uint64_t tabSize);
+void showHorizonalHistoOfTab(uint64_t *occurences, uint64_t tabSize);
+
+#endif
\ No newline at end of file
diff --git a/tableaux_uni/kreate.py b/tableaux_uni/kreate.py
new file mode 100644
index 0000000..4b4fc4b
--- /dev/null
+++ b/tableaux_uni/kreate.py
@@ -0,0 +1,185 @@
+# * PROJ
+# * Author: Jonas S.
+# * Date: 11/07/21
+# ! OBJECTIVE
+# ? CREATE A BASIC RUNNING PROJECT 
+# ? CREATE SIMPLE C OR HEADER FILE WITH HEADERS
+# ? CREATE MAKEFILE
+# ! NEED COLORAMA AND OS
+
+
+
+
+import colorama
+from colorama import Fore, Back
+
+
+#HARD CODED STUFF
+NAME = "Jonas S."
+colorama.init()
+
+# ! FILE CREATION
+def createFile(fileName, content):
+	with open(f"{fileName}", 'w', encoding = 'utf-8') as f:
+		f.write(content)
+
+def createHeaderFile(fileName):
+	from datetime import datetime
+	import os
+	from os import mkdir
+
+	now = datetime.now() # current date and time
+
+	content =   (
+					"/*\n"
+					f"\t* HEADER {fileName.upper()}\n"
+					f"\t* Author : {NAME}\n"
+					f"\t* Date   : {now.strftime('%d/%m/%Y')}\n"
+					"\t! DESCRIPTION\n"
+					"*/\n\n"
+					f"#ifndef _{fileName.upper()}_H_\n"
+					f"#define _{fileName.upper()}_H_\n\n"
+					"// DEFINES\n\n"
+					"// PROTOTYPE FUNCTIONS\n\n"
+					"#endif"
+				)
+
+	if not os.path.exists('include'):
+		mkdir('include')
+	createFile(f"include/{fileName}.h", content)
+
+def createCodeFile(fileName):
+	from datetime import datetime
+	from datetime import datetime
+	import os
+	from os import mkdir
+	
+	now = datetime.now() # current date and time
+
+	content =   (
+					"/*\n"
+					f"\t* CODE {fileName.upper()}\n"
+					f"\t* Author : {NAME}\n"
+					f"\t* Date   : {now.strftime('%d/%m/%Y')}\n"
+					"\t! DESCRIPTION\n"
+					"*/\n\n"
+				)
+
+	# add basic printf if main
+	if fileName == "main":
+		content += "#include <stdio.h>\n\nint main()\n{\n\tprintf(\"ISSOU\\n\");\n\treturn 0;\n}"
+	
+	if not os.path.exists('src'):
+		mkdir('src')
+	createFile(f"src/{fileName}.c", content)
+
+def createMakefile():
+	content =   (
+					"CC       := gcc\n"
+					"CC_FLAGS := -Wall -Wextra\n\n"
+
+					"BIN     	:= bin\n"
+					"SRC     	:= src\n"
+					"INCLUDE 	:= include\n"
+					"LIB     	:= lib\n"
+					"LIBRARIES   := 		#Library flags like -lm -lncurses\n"
+					"EXECUTABLE  := main\n\n"
+					
+					"all: $(BIN)/$(EXECUTABLE)\n\n"
+
+					"run: clean all\n"
+					"	clear\n"
+					"	@echo \"🚀 Executing...\"\n"
+					"	./$(BIN)/$(EXECUTABLE)\n\n"
+
+					"$(BIN)/$(EXECUTABLE): $(SRC)/*.c\n"
+					"	@echo \"🚧 Building...\"\n"
+					"	$(CC) $(CC_FLAGS) -I $(INCLUDE) -L $(LIB) $^ -o $@ $(LIBRARIES)\n\n"
+
+					"clean:\n"
+					"	@echo \"🧹 Clearing...\"\n"
+					"	-rm $(BIN)/*\n\n"
+
+				)
+	createFile("Makefile", content)
+
+def createDirStructure():
+	import os
+	from os import mkdir
+
+	if not os.path.exists('bin'):
+		mkdir('bin')
+	if not os.path.exists('build'):
+		mkdir('build')
+	if not os.path.exists('include'):
+		mkdir('include')
+	if not os.path.exists('src'):
+		mkdir('src')
+
+# ! MENU CREATION
+def createCompleteProject():
+	# Base structure (SRC, BUILD, INCLUDE, BIN)
+	createDirStructure()
+	print(f"{Fore.GREEN}+ BASIC STRUCTURE CREATED{Fore.RESET}")
+	# Makefile
+	createMakefile()
+	print(f"{Fore.GREEN}+ MAKEFILE CREATED{Fore.RESET}")
+	# Main 
+	createCodeFile("main")
+	print(f"{Fore.GREEN}+ MAIN.C FILE CREATE{Fore.RESET}")
+
+def createCodeHeader(name):
+	# Code
+	createCodeFile(name)
+	print(f"{Fore.GREEN}+ CODE FILE CREATED{Fore.RESET}")
+	# Header
+	createHeaderFile(name)
+	print(f"{Fore.GREEN}+ HEADER FILE CREATED{Fore.RESET}")
+
+
+
+# ! MENU
+def menu():
+	choice = input(
+	"1 - COMPLETE PROJECT                 \n"
+	"2 - CODE + HEADER                    \n"
+	"3 - CODE ONLY                        \n"
+	"4 - HEADER ONLY                      \n"
+	"5 - MAKEFILE ONLY                    \n"
+	"\n"
+
+	)
+
+	# PROJECT
+	if choice == '1': 
+		print(f"{Fore.BLUE}FULL PROJECT IS BEING CREATED.{Fore.RESET}")
+		createCompleteProject()
+
+	# CODE + HEADER
+	elif choice == '2':
+		print(f"{Fore.BLUE}A CODE AND HEADER FILE ARE BEING CREATED.{Fore.RESET}")
+		createCodeHeader(input("WHAT FILE NAME DO YOU WANT : "))		
+	
+	# CODE 
+	elif choice == '3':
+		print(f"{Fore.BLUE}A CODE FILE IS BEING CREATED.{Fore.RESET}")
+		createCodeFile(input("WHAT FILE NAME DO YOU WANT : "))
+		print(f"{Fore.GREEN}+ CODE FILE CREATED{Fore.RESET}")
+
+	# HEADER
+	elif choice == '4':
+		print(f"{Fore.BLUE}A HEADER FILE IS BEING CREATED.{Fore.RESET}")
+		createHeaderFile(input("WHAT FILE NAME DO YOU WANT : "))	
+		print(f"{Fore.GREEN}+ CODE FILE CREATED{Fore.RESET}")
+
+	# MAKEFILE
+	elif choice == '5':
+		print(f"{Fore.BLUE}A HEADER FILE IS BEING CREATED.")
+		createMakefile()		
+		print(f"{Fore.GREEN}+  MAKEFILE CREATED{Fore.RESET}")
+
+if __name__ == "__main__":
+	menu()
+
+
+
diff --git a/tableaux_uni/src/jrandom.c b/tableaux_uni/src/jrandom.c
new file mode 100644
index 0000000..49ec99c
--- /dev/null
+++ b/tableaux_uni/src/jrandom.c
@@ -0,0 +1,24 @@
+/*
+	* CODE JRANDOM
+	* Author : Jonas S.
+	* Date   : 12/10/2021
+	! RANDOM LIB
+*/
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <time.h>
+
+#include "../include/jrandom.h"
+
+/**
+ * @brief Returns a random number
+ * 
+ * @param highLimit 
+ * @param lowLimit 
+ * @return uint64_t 
+ */
+uint64_t getRandomNumber(uint64_t highLimit, uint64_t lowLimit)
+{
+	return (rand() % (highLimit - lowLimit + 1) + lowLimit);
+}
\ No newline at end of file
diff --git a/tableaux_uni/src/jtableaux.c b/tableaux_uni/src/jtableaux.c
new file mode 100644
index 0000000..5ddf3d3
--- /dev/null
+++ b/tableaux_uni/src/jtableaux.c
@@ -0,0 +1,309 @@
+/*
+	* CODE TABLEAUX_UNI
+	* Author : Jonas S.
+	* Date   : 12/10/2021
+	! Gestion de base de tableaux
+	! https://malaspinas.academy/prog_seq_c_tp/tableaux_unidimensionnels/index.html
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <math.h>
+#include "../include/jtableaux.h"
+#include "../include/jrandom.h"
+
+/**
+ * @brief Print an array in the terminal
+ * 
+ * @param tab
+ * @param tabSize
+ */
+void showTab(uint64_t *tab, uint64_t tabSize)
+{
+	for(uint64_t i = 0; i < tabSize; i++)
+	{	
+		printf(" %ld,", tab[i]);
+	}
+	printf("\n");
+}
+
+/**
+ * @brief Fill a tab with random values
+ * 		  from a min to a max value
+ * @param tab
+ * @param tabSize
+ * @param min 
+ * @param max
+ */
+void fillTabRandom(uint64_t *tab, uint64_t tabSize, uint64_t min, uint64_t max)
+{
+	for(uint64_t i = 0; i < tabSize; i++)
+	{
+		tab[i] = getRandomNumber(max, min);
+	}
+}
+
+/**
+ * @brief Get smallest value's index of an array
+ * 
+ * @param tab
+ * @param tabSize
+ * @return uint64_t
+ */
+uint64_t getTabSmallestValue(uint64_t *tab, uint64_t tabSize)
+{
+	uint64_t value = tab[0];
+	uint64_t index = 0;
+
+	for (uint64_t i = 1; i < tabSize; i++)
+	{
+		if (value > tab[i])
+		{
+			value = tab[i];
+			index = i;
+		}
+	}
+	return index;
+}
+
+/**
+ * @brief returns biggest value's index of an array
+ * 
+ * @param tab
+ * @param tabSize
+ * @return uint64_t
+ */
+uint64_t getTabBiggestValue(uint64_t *tab, uint64_t tabSize)
+{
+	uint64_t value = 0;
+	uint64_t index = 0;
+
+	for (uint64_t i = 1; i < tabSize; i++)
+	{
+		if (value < tab[i])
+		{
+			value = tab[i];
+			index = i;
+		}
+	}
+	return index;
+}
+
+/**
+ * @brief Sort an array Low to High Selection
+ * 
+ * @param tab
+ * @param tabSize
+ */
+void sortTabLTH(uint64_t *tab, uint64_t tabSize)
+{
+	uint64_t min_i;
+	uint64_t tmp_v;
+
+	for (uint64_t i = 0; i < tabSize; i++)
+	{
+		tmp_v = tab[i];
+		min_i = getTabSmallestValue(tab+i, tabSize-i) ;
+		tab[i] = tab[min_i + i];
+		tab[min_i + i] = tmp_v;
+	}
+}
+
+/**
+ * @brief Returns index of specified element in an array
+ * 
+ * @param tab
+ * @param tabSize
+ * @param element
+ * @return uint64_t
+ */
+uint64_t getIndexOfTabElement(uint64_t *tab, uint64_t tabSize, uint64_t element)
+{
+	for(uint64_t i = 0; i < tabSize; i++)
+	{
+		if(tab[i] == element){return i;}
+	}
+	return -1;
+}
+
+/**
+ * @brief Returns average value of an array
+ * 
+ * @param tab
+ * @param tabSize
+ * @return double
+ */
+double getMeanOfTab(uint64_t *tab, uint64_t tabSize)
+{
+	uint64_t sum = 0;
+	for(uint64_t i = 0; i < tabSize; i++)
+	{
+		sum += tab[i];
+	}
+	return (double)sum / tabSize;
+}
+
+/**
+ * @brief Returns variance of an array 
+ * 
+ * @param tab
+ * @param tabSize
+ * @param mean
+ * @return double
+ */
+double getVarianceOfTab(uint64_t *tab, uint64_t tabSize, double mean)
+{
+	double var = 0;
+	for (uint64_t i = 0; i < tabSize; i++)
+	{
+		var += pow( (tab[i] - mean), 2);
+	}
+	return ( var / tabSize );
+}
+
+/**
+ * @brief Returns median of an array
+ * 
+ * @param tab
+ * @param tabSize
+ * @return uint64_t
+ */
+uint64_t getMedianOfTab(uint64_t *tab, uint64_t tabSize)
+{
+	if( tabSize % 2 == 0 ) // pair
+	{
+		return tab[(tabSize - 1) / 2];
+	}
+	return tab[(tabSize - 1) / 2] + tab[tabSize / 2] / 2;
+}
+
+/**
+ * @brief Fill an array with occurences of numbers in inital array
+ * 
+ * @param tab
+ * @param tabSize
+ * @param occurences
+ * @param sizeOfTabOcc
+ */
+void countOccurence(uint64_t *tab, uint64_t tabSize, uint64_t *occurences, uint64_t sizeOfTabOcc)
+{
+	fillTabWithZeroes(occurences, sizeOfTabOcc);
+	for(uint64_t i = 0; i < tabSize; i++)
+	{
+		occurences[tab[i]]++;
+	}
+}
+
+
+/**
+ * @brief Print a vertical histogram in terminal
+ * 
+ * @param occurences
+ * @param tabSize
+ */
+void showVerticalHistoOfTab(uint64_t *occurences, uint64_t tabSize)
+{
+	uint64_t topValue = occurences[getTabBiggestValue(occurences, tabSize)];
+	// PRINT ACTUAL BARS
+	for(uint64_t i = 0; i < tabSize; i++)
+	{
+		printf("%02ld | ", i);
+		for(uint64_t j = 0; j < occurences[i]; j++)
+		{
+			printf("*  ");
+		}
+		printf("\n");
+	}
+
+	// PRINT X AXIS
+	printf("   └");
+	for(uint64_t i = 1; i < topValue + 1; i++)
+	{
+		printf("---");
+	}
+
+	printf("\n    ");
+	for(uint64_t i = 1; i < topValue + 1; i++)
+	{
+		printf(" %02ld", i);
+	}
+	printf("\n");
+}
+
+/**
+ * @brief Print an horizontal histogram in terminal
+ * 
+ * @param occurences
+ * @param tabSize
+ */
+void showHorizonalHistoOfTab(uint64_t *occurences, uint64_t tabSize)
+{
+	uint64_t topValue = occurences[getTabBiggestValue(occurences, tabSize)];
+
+	// PRINT ACTUAL BARS
+	for(uint64_t i = topValue; i > 0; i--) // From topValue to 1
+	{
+		printf("%02ld | ", i);
+		for(uint64_t j = 0; j < tabSize; j++) // go through whole tab
+		{
+			if( occurences[j] >= i) // High enough to be printed
+			{
+				printf("** ");
+			}
+			else{printf("   ");}
+		}
+		printf("\n");
+	}
+
+	// PRINT X AXIS
+	printf("   └");
+	for(uint64_t i = 1; i < tabSize + 1; i++)
+	{
+		printf("---");
+	}
+	printf("\n    ");
+	for(uint64_t i = 1; i < tabSize + 1; i++)
+	{
+		printf(" %02ld", i);
+	}
+	printf("\n");
+}
+
+/**
+ * @brief Fill an array with zeroes
+ * 
+ * @param tab
+ * @param tabSize
+ */
+void fillTabWithZeroes(uint64_t *tab, uint64_t tabSize)
+{
+	for(uint64_t i = 0; i < tabSize; i++)
+	{
+		tab[i] = 0;
+	}
+}
+
+
+/**
+ * @brief Get the pos where to place the element
+ * 
+ * @param tab
+ * @param tabSize
+ * @return uint64_t
+ */
+uint64_t position(uint64_t *tab, uint64_t tabSize, uint64_t val)
+{
+	uint64_t currentPos = 0;
+	while( (currentPos < tabSize) && (val < tab[currentPos]))
+	{
+		currentPos++;
+	}
+	return c ←urrentPos;
+}
+
+void shift(uint64_t *tab, uint64_t tabSize, uint64_t pos)
+{
+
+}	
diff --git a/tableaux_uni/src/main.c b/tableaux_uni/src/main.c
new file mode 100644
index 0000000..5db9899
--- /dev/null
+++ b/tableaux_uni/src/main.c
@@ -0,0 +1,73 @@
+/*
+	* CODE MAIN
+	* Author : Jonas S.
+	* Date   : 12/10/2021
+	! DESCRIPTION
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <math.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+#include "../include/jtableaux.h"
+
+int main()
+{
+	uint64_t sizeOfTab;
+	uint64_t frac_sizeOfTab;
+
+	srand(time(NULL)); // Create seed
+
+	printf("--------------------------------------------------\n");
+	printf("    _ _____ _   ___ _    ___   _  _   ___  __\n");
+	printf(" _ | |_   _/_\\ | _ ) |  | __| /_\\| | | \\ \\/ /\n");
+	printf("| || | | |/ _ \\| _ \\ |__| _| / _ \\ |_| |>  <\n");
+	printf(" \\__/  |_/_/ \\_\\___/____|___/_/ \\_\\___//_/\\_\\\n\n");
+	printf("Jonas Stirnemann\n");
+	printf("--------------------------------------------------\n");
+	
+	// USER INPUT
+	printf("SIZE OF TAB : ");
+	scanf(" %ld", &sizeOfTab); 
+	frac_sizeOfTab = sizeOfTab / 10 - 1;
+	
+	// FIND ELEMENT 
+	uint64_t element;
+	printf("ELEMENT  : ");
+	scanf(" %ld", &element); 
+
+	// RANDOM TAB
+	uint64_t tab[sizeOfTab];
+	printf("\nFILLING TAB WITH RANDOM VALUES ... \n");
+	fillTabRandom(tab, sizeOfTab, 0, frac_sizeOfTab);
+
+	// SORT 
+	printf("SORTING TAB ... \n\n");
+	sortTabLTH(tab, sizeOfTab);
+
+	printf("INDEX OF CHOSEN ELEMENT : %ld\n", getIndexOfTabElement(tab, sizeOfTab, element));
+
+	// GET MEAN
+	printf("MOYENNE  : %.2lf\n", getMeanOfTab(tab, sizeOfTab));
+
+	// GET VARIANCE
+	printf("VARIANCE : %.2lf\n", getVarianceOfTab(tab, sizeOfTab, getMeanOfTab(tab, sizeOfTab)));
+
+	// GET MEDIAN
+	printf("MEDIAN   : %ld\n\n", getMedianOfTab(tab, sizeOfTab));
+
+	// SHOW HISTOS	
+	uint64_t occurences[frac_sizeOfTab];
+	countOccurence(tab, sizeOfTab, occurences, frac_sizeOfTab);
+
+	printf("HISTO VERTICAL\n");
+	showVerticalHistoOfTab(occurences, frac_sizeOfTab);
+	printf("\n\n");
+	printf("HISTO VERTICAL\n");
+	showHorizonalHistoOfTab(occurences, frac_sizeOfTab);
+
+	return 0;
+}
diff --git a/tableaux_uni/stirnemann_tableauxUni.zip b/tableaux_uni/stirnemann_tableauxUni.zip
new file mode 100644
index 0000000000000000000000000000000000000000..324966ea1f1164d0a2cffcf3cc6b51ac317d2f45
GIT binary patch
literal 11654
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
C8>3<X

literal 0
HcmV?d00001

-- 
GitLab