summaryrefslogtreecommitdiff
path: root/sem_2/HLIN202/TP/TP9-10/exo6.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sem_2/HLIN202/TP/TP9-10/exo6.cpp')
-rw-r--r--sem_2/HLIN202/TP/TP9-10/exo6.cpp140
1 files changed, 140 insertions, 0 deletions
diff --git a/sem_2/HLIN202/TP/TP9-10/exo6.cpp b/sem_2/HLIN202/TP/TP9-10/exo6.cpp
new file mode 100644
index 0000000..a2c0e6d
--- /dev/null
+++ b/sem_2/HLIN202/TP/TP9-10/exo6.cpp
@@ -0,0 +1,140 @@
+#include<iostream>
+
+int max ( int a, int b) {
+ return a>b? a : b;
+}
+void affichetab ( int *P, int taille) {
+std::cout<<"[";
+for ( int i =0; i <taille ; i++){
+ std::cout<<P[i];
+ if (i != (taille-1)) std::cout<<",";
+}
+std::cout<<"]"<<std::endl;
+}
+
+int* reverse ( int *T, int taille) {
+int *P = new int[taille];
+for ( int i = 0; i < taille; i ++ ) {
+ P[i]= T[taille-i];
+}
+return P;
+}
+
+int* ajoutT ( int *T, int taille, int x) {
+int *P=new int[taille+1];
+bool done=false;
+for (int i =0; i < taille+1; i ++ ) {
+ if ( !done ) {
+ if ( i == taille) {
+ P[taille]= x;
+ done = true;
+ }
+ else if ( x<=T[i]) {
+ P[i]= x;
+ done = true;
+ }
+
+ else {
+ P[i]=T[i];
+ }
+ }
+ else {
+ P[i] = T[i-1];
+ }
+ }
+ return P;
+}
+
+int * fusionT(int * T1, int * T2, int taille1, int taille2) {
+ int *P= new int[taille1+taille2];
+ int j = 0;
+
+ for ( int i = 0; i < taille1; i ++) {
+ P[i]=T1[i];
+ }
+ for (int i = taille1; i <taille1+taille2; i++ ) {
+ P= ajoutT(P, i, T2[j]);
+ j ++;
+ }
+ return P;
+}
+
+void duplicata ( int ** P, int taille) {
+ int *Tmp = new int[taille];
+ int *T = *P;
+ for ( int i = 0; i < taille; i ++) {
+ Tmp[i] = T[i];
+ }
+ delete[] *P;
+ *P= new int[taille*2];
+ T=*P;
+
+ for ( int i = 0; i < taille; i ++) {
+ T[i] = Tmp[i];
+ }
+
+ delete[] Tmp;
+ for (int i = 0; i < taille; i ++) {
+ T[2*taille-i-1]= T[i];
+ }
+}
+int * concat ( int *T1, int *T2, int taille1, int taille2) {
+ int * P = new int[taille1+taille2];
+ for ( int i = 0; i < taille1+taille2; i ++) {
+ if (i < taille1) {
+ P[i]=T1[i];
+ }
+ else {
+ P[i]= T2[i-taille1];
+ }
+ }
+ return P;
+}
+
+int maximum ( int *T, int taille) {
+ if (taille == 1) {
+ return T[0];
+ }
+ int *t1 = new int[taille/2];
+ int *t2 = new int[taille-(taille/2)];
+ for (int i=0; i < taille; i ++) {
+ if ( i < taille/2) {
+ t1[i]= T[i];
+ }
+ else {
+ t2[i-(taille/2)]= T[i];
+ }
+ }
+
+ return max(maximum(t1, taille/2), maximum(t2,(taille-(taille/2))));
+}
+int maximum2 ( int *T, int taille) {
+ if (taille ==1) {
+ return T[0];
+ }
+ else {
+ return max(T[taille-1], maximum2(T, taille-1));
+ }
+}
+int main () {
+// int taille;
+// float somme=0;
+int *tab = new int[4];
+tab[0]= 2;
+tab[1]=3;
+tab[2]=4;
+tab[3]=1;
+/*std::cin>>taille;
+float *P=new float[taille];
+for(int i=0;i<taille;i++){
+ P[i]=(1/(1+(float)i));
+ P[i]*=P[i];
+ somme+=P[i];
+}
+affichetab(P, taille);
+std::cout<<std::endl<<somme<<std::endl;
+*/
+
+std::cout<<maximum2(tab,4);
+return 0;
+}