Bonjour à tous,
Je dois faire un petit algorithme de lissage de signal:
pour une séquence de nombres décimaux (mesure)on remplace chaque valeurs (sauf la première et la dernière) par la moyenne des deux valeurs qui l'entourent.
Le but du programme est de calculer le nombre minimum de lissages successifs pour que la valeur absolue de la différence entre deux valeurs successives de la séquence finale obtenue ne dépasse jamais une valeur donnée, diffMax.
Mon programme me semble correcte mais pourtant je ne trouve pas la bonne valeur :(
en entrée on a donc:
le nombre de mesures
la valeur diffMax
et les valeurs de la séquence.
pour les entrée suivantes je devrais avoir 13 en sorte or j'ai 3:
7
1.120
1.292
1.343
3.322
4.789
-0.782
7.313
4.212
Voici mon code:
merci par avance pour vos réponses.Code:
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 #include<iostream> #include<string> #include <cmath> using namespace std; double valabs(double); double valabs(double a) { if (a<0) return (-1*a); else return a; } int main() { int nbMesures; double diffMax; int nb=0; double *tab; bool b=true; cin>>nbMesures; cin>>diffMax; tab=new double[nbMesures]; for(int i=0;i<nbMesures;i++) { cin>>tab[i]; } while(b) { b=false; nb=nb+1; for(int i=1;i<nbMesures-1;i++) { tab[i]= (tab[i-1]+tab[i+1])/2.0; } for(int j=0;j<nbMesures-1 && !b;j++) { b=(valabs(tab[j]-tab[j+1])>diffMax); } } cout<<nb; system("pause"); return 0; }