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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
}
merci par avance pour vos réponses.