summaryrefslogtreecommitdiff
path: root/sem_2/HLIN202/TP/TP11-12/exo10.cpp
blob: f53abed27de07cbc4762dcba9ca4c16ece00e73e (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
#include<iostream>
#include<cmath>
struct vecteur {
  int dimension;
  char nom;
  double *coords;
};

vecteur* init ( int taille, char nom) {
  vecteur * ret = new vecteur;
  ret->dimension= taille;
  ret->coords = new double[taille];
  ret->nom=nom;
  for ( int i =0; i < taille; i ++) {
    ret->coords[i]=0;
  }
  return ret;
}

vecteur * oppose ( vecteur * vect) {
  vecteur * ret = init(vect->dimension, vect->nom);
  for ( int i =0; i < vect->dimension; i ++) {
    ret->coords[i]= -vect->coords[i];
  }
  return ret;
}

vecteur * somme ( vecteur * vect1, vecteur * vect2) {
  if ( vect1->dimension == vect2->dimension) {
    char nom = 's';
    vecteur * ret=init ( vect1->dimension, nom);
    for ( int i =0; i < ret->dimension; i ++) {
      ret->coords[i]= vect1->coords[i]+ vect2->coords[i];
}
return ret;
}
return 0;
}

double scalaire ( vecteur * u, vecteur * v ) {
  if ( u->dimension != v->dimension) {
    std::cout<< " erreur " << std::endl;
    return 0; }
  double ret=0;
  for ( int i = 0; i < u->dimension; i ++) {
    ret += u->coords[i]*v->coords[i];
  }
  return ret;
}

double norme ( vecteur * u ) {
  return sqrt(scalaire ( u,u));
}

int main () {
  vecteur * u = init(2, *"u");
  vecteur * v = init(2, *"v");
  v->coords[0]= 0;
  v->coords[1]= 1;
  u->coords[0]= 45;
  u->coords[1]= 1;
  std::cout<< scalaire(u,v)<<std::endl;
  std::cout<< " Norme de u : " << norme(u)<<std::endl;

  return 0;
}