summaryrefslogtreecommitdiff
path: root/sem_2/HLIN202/TP/TP7-8/ex10/exo10.cpp
blob: 167ce84bab90a87c7c02c8259edb46cd67bb2848 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>

void affichetab( int taille, int tab[]);
void inittab ( int taille, int tab[]);
void inittabsuite ( int taille, int tab[]);
int min (int a, int b);
bool prefixe ( int taille1, int taille2, int tab1[],int tab2[]);
bool tabidentique ( int taille1, int taille2, int tab1[], int tab2[]);
void bornes ( int taille, int tab[], int* max, int* min);
bool palindrome ( int taille, int tab[]);

//determine si un tableau de caractere est un palindrome
bool palindrome ( int taille, char tab[]){
  char tabinv[taille];
  for ( int i=0; i< taille; i++){
    tabinv[i]=tab[taille-i];
  }
  for ( int i =0; i<taille; i ++ ){
   if (tab[i]!=tabinv[i]) {
     return false;
   }
  }
  return true;
}

//affiche un tableau de caractere sous la forme d'un mot
void affichechartab ( int taille, char tab[]) {
  for ( int i = 0; i< taille; i ++) {
    std::cout<<tab[i];
  }
  std::cout<<std::endl;
}

//affiche le tableau sous la forme [ x1, x2, x3, x4 ... ]
void affichetab( int taille, int tab[]) {
  for ( int i = 0; i < taille; i++) {
    if (i==0) std::cout<<"[ ";
    std::cout<<tab[i];
    if (i!=taille-1) std::cout<<" , ";
  }
  std::cout<<" ] " <<std::endl;
}
//initialise un tableau de taille n avec toutes ses cases a t[i]=i*i
void inittab ( int taille, int tab[]){
  for ( int i =0; i < taille; i++) {
    tab[i]=i*i;
  }
}
//initialise un tableau avec les valeurs de la suite u0=0 Un+1=Un + 2n + 1
void inittabsuite ( int taille, int tab[]){
  tab[0]=0;
  for (int i =1; i < taille ; i ++) {
    tab[i]= tab[i-1]+2*(i-1)+1;
  }
}
//determine le minimum de a et b
int min (int a, int b) {
  return a<=b? a : b;
}
//determine si tab1 est prefixe de tab2 ou si tab2 est prefixe de tab1
bool prefixe ( int taille1, int taille2, char tab1[],char tab2[]) {
  if (taille1 != taille2) {
    return false;
  }
  else {
    int i = 0;
    while ( i < taille1 && tab1[i]==tab2[i]){
      i++;
    }
    return (i == taille1);
  }
  }
//determine si deux tableau sont identiques
bool tabidentique ( int taille1, int taille2, int tab1[], int tab2[]){
  if (taille1==taille2) {
    int i =0;
    while ( i < taille1 && tab1[i]==tab2[i]){
      i++;
    }
    return i==taille1;
  }
  else {
    return false;
  }
}
//determine la plus grande et la plus petite valeur du tableau
void bornes ( int taille, int tab[], int* max, int* min) {
  *max=tab[0],*min=tab[0];
  int bctab[taille],bctab2[taille];
  for (int i=0; i< taille; i ++) {
    bctab[i]=tab[i];
    bctab2[i]=tab[i];
  }
  for (int i = 0; i < taille-1; i ++ ) {
    *max = bctab[i] >= bctab[i+1] ? bctab[i]>= *max ? bctab[i] : *max : bctab[i+1]> *max ? bctab[i+1] : *max;
    *min = bctab2[i] <= bctab2[i+1] ? bctab2[i]<= *min ? bctab2[i] : *min : bctab2[i+1]< *min ? bctab2[i+1] : *min;
    }
}

int main () {
  // int table1[100];
  // int table2[10];
  // inittab(100, table1);
  // inittabsuite(10,table2);
  // affichetab(100,table1);
  // affichetab(10,table2);
  //int *pmin, *pmax;
  //int max,min;
  //pmax=&max;
  //pmin=&min;
  //bornes ( 100, table,pmax, pmin );
  if ( prefixe(100,10,table1,table2)) {
    std::cout<<"les tableaux sont egaux"<<std::endl;
  }
  else std::cout<<"Les tableaux sont differents"<<std::endl;
  //std::cout << "Le max du tableau est " << max << " le min est " << min << std::endl;
  return 0;
}