Tp2 II B2.c : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m (Bjacquot a déplacé la page Tp2.c vers Tp2 II B2.c sans laisser de redirection)
 
(Une révision intermédiaire par le même utilisateur non affichée)
Ligne 1 : Ligne 1 :
[[Tp_II|retour à la page précédente]]
+
{{RetourVers/TpII}}
  
#include <stdio.h>
+
<source lang="c">
#include <stdlib.h>
+
#include <stdio.h>
#include <math.h>
+
#include <stdlib.h>
#include "SVGlib.h"<br>
+
#include <math.h>
#define N 512                  // nombre de points de la courbe
+
#include "SVGlib.h"
#define largeur 640            // taille de l'image
 
#define hauteur 480
 
#define cCadre 0x000000        // les différentes couleurs utilisées.
 
#define cTour 0x303030
 
#define cFond 0xFFFFFF
 
#define cCourbe 0xFF0000<br>
 
typedef struct
 
{
 
  float min;
 
  float max;
 
} bornes;<br>
 
typedef struct
 
{
 
  float Y[N];                            // pas besoin d'axe des abscisses
 
  bornes Ybornes;
 
} fct;<br>
 
bornes extremes(fct f);
 
fct echantillonne(char t);                // en paramètre le type de fonction
 
void tracerFenetre(int espace,fct f);    // espace : bordure autour de la courbe
 
fct filtremoyenne(fct f);
 
fct filtrederivateur(fct f);
 
fct bruitage(fct f);<br>
 
int main()
 
{
 
  fct f;
 
  char rep;
 
  for(;;)
 
  {
 
    printf("                  Filtrage Numérique                                \n");
 
    printf("            ==========================                            \n");
 
    printf("                                                                    \n");
 
    printf("E...Echantillonnage                    B...Bruitage                \n");
 
    printf("M...filtre Moyenneur                  D...filtre Dérivée          \n");
 
    printf("T...Tracé de la courbe                Q...Quitter                  \n");
 
    printf("                                                                    \n");
 
    scanf("%c",&rep);            // la fonction scanf possède certaines limitations
 
    if (rep!=10) getchar();      // comme ne pas supprimer la touche entrée ('\n' ou 10)
 
    switch (rep)
 
    {
 
      case 'e':
 
      case 'E':
 
          do
 
          {
 
            printf("Choix de la courbe : 's' pour sin, 'r' pour rectangulaire.\n");
 
            scanf("%c",&rep);            // la fonction scanf possède certaines limitations
 
            if (rep!=10) getchar();      // comme ne pas supprimer la touche entrée ('\n' ou 0x10)
 
            if (rep=='S') rep='s';
 
            if (rep=='R') rep='r';
 
          } while ((rep!='s')&&(rep!='r'));
 
          f=echantillonne(rep);
 
          break;
 
      case 't':
 
      case 'T':
 
          tracerFenetre(20,f);
 
          break;
 
      case 'q':
 
      case 'Q':
 
          return 0;
 
      case 'm':
 
      case 'M':
 
          f=filtremoyenne(f);
 
          break;
 
      case 'd':
 
      case 'D':
 
          f=filtrederivateur(f);
 
          break;
 
      case 'b':
 
      case 'B':
 
          f=bruitage(f);
 
          break;
 
    }
 
  }
 
}<br>
 
fct filtremoyenne(fct f)
 
{
 
  int i;
 
  for (i=1;i<N-1;i++) f.Y[i]=(f.Y[i-1]+f.Y[i+1])/2;
 
  f.Ybornes=extremes(f);
 
  return f;
 
}<br>
 
fct filtrederivateur(fct f)
 
{
 
  int i;
 
  for (i=1;i<N-1;i++) f.Y[i]=f.Y[i+1]-f.Y[i-1];
 
  f.Ybornes=extremes(f);
 
  return f;
 
}<br>
 
fct bruitage(fct f)
 
{
 
  int i;
 
  for (i=1;i<N-1;i++) f.Y[i]+=1.0*rand()/RAND_MAX+0.5;
 
  f.Ybornes=extremes(f);
 
  return f;
 
}<br>
 
bornes extremes(fct f)  //recherche des valeurs extrêmes
 
{
 
  int i;
 
  bornes M;
 
  M.min=f.Y[0];   M.max=f.Y[0];          // initialisation
 
  for (i=1;i<N;i++)                      // parcours du tableau
 
  {
 
    if (M.min>f.Y[i]) M.min=f.Y[i];
 
    if (M.max<f.Y[i]) M.max=f.Y[i];
 
  }
 
  return M;
 
}<br>
 
fct echantillonne(char t)
 
{
 
  int i;
 
  fct f;
 
  if (t=='s') for (i=0;i<N;i++) f.Y[i]=sin(2*M_PI*i/256);  // fonction sinus
 
          else for (i=0;i<N;i++) f.Y[i]=((i/128)%2)*2-1;    // fonction rectangulaire
 
  f.Ybornes=extremes(f);
 
  return f;
 
}<br>
 
void tracerFenetre(int espace,fct f)
 
{
 
  SVGopen(largeur,hauteur);                                        //Préparation de l'image
 
  SVGrectanglePlein(0, 0, largeur, hauteur,cTour,cTour);
 
  SVGrectanglePlein(espace, espace, largeur-2*espace, hauteur-2*espace,cCadre,cFond);
 
  int cX[N],cY[N],i;
 
  for (i=0;i<N;i++)                                                // Coordonnees dans l'image
 
  {
 
    cX[i] = (largeur-2.0*espace) / N * i + espace;
 
    cY[i] = (hauteur-2.0*espace)*(1.0 - (f.Y[i]-f.Ybornes.min)/(f.Ybornes.max-f.Ybornes.min)) + espace;
 
  }
 
  for (i=1;i<N;i++)  SVGline(cX[i-1],cY[i-1],cX[i],cY[i],cCourbe);  //tracé de la fonction
 
  SVGClose();
 
}
 
  
[[Tp_II|retour à la page précédente]]
+
#define N 512                  // nombre de points de la courbe
 +
#define largeur 640            // taille de l'image
 +
#define hauteur 480
 +
#define cCadre 0x000000        // les différentes couleurs utilisées.
 +
#define cTour 0x303030
 +
#define cFond 0xFFFFFF
 +
#define cCourbe 0xFF0000
 +
 
 +
typedef struct
 +
{
 +
  float min;
 +
  float max;
 +
} bornes;
 +
 
 +
typedef struct
 +
{
 +
  float Y[N];                            // pas besoin d'axe des abscisses
 +
  bornes Ybornes;
 +
} fct;
 +
 
 +
bornes extremes(fct f);
 +
fct echantillonne(char t);                // en paramètre le type de fonction
 +
void tracerFenetre(int espace,fct f);    // espace : bordure autour de la courbe
 +
fct filtremoyenne(fct f);
 +
fct filtrederivateur(fct f);
 +
fct bruitage(fct f);
 +
 
 +
int main()
 +
{
 +
  fct f;
 +
  char rep;
 +
  for(;;)
 +
  {
 +
    printf("                  Filtrage Numérique                                \n");
 +
    printf("            ==========================                            \n");
 +
    printf("                                                                    \n");
 +
    printf("E...Echantillonnage                    B...Bruitage                \n");
 +
    printf("M...filtre Moyenneur                  D...filtre Dérivée          \n");
 +
    printf("T...Tracé de la courbe                Q...Quitter                  \n");
 +
    printf("                                                                    \n");
 +
    scanf("%c",&rep);            // la fonction scanf possède certaines limitations
 +
    if (rep!=10) getchar();      // comme ne pas supprimer la touche entrée ('\n' ou 10)
 +
    switch (rep)
 +
    {
 +
      case 'e':
 +
      case 'E':
 +
          do
 +
          {
 +
            printf("Choix de la courbe : 's' pour sin, 'r' pour rectangulaire.\n");
 +
            scanf("%c",&rep);            // la fonction scanf possède certaines limitations
 +
            if (rep!=10) getchar();      // comme ne pas supprimer la touche entrée ('\n' ou 0x10)
 +
            if (rep=='S') rep='s';
 +
            if (rep=='R') rep='r';
 +
          } while ((rep!='s')&&(rep!='r'));
 +
          f=echantillonne(rep);
 +
          break;
 +
      case 't':
 +
      case 'T':
 +
          tracerFenetre(20,f);
 +
          break;
 +
      case 'q':
 +
      case 'Q':
 +
          return 0;
 +
      case 'm':
 +
      case 'M':
 +
          f=filtremoyenne(f);
 +
          break;
 +
      case 'd':
 +
      case 'D':
 +
          f=filtrederivateur(f);
 +
          break;
 +
      case 'b':
 +
      case 'B':
 +
          f=bruitage(f);
 +
          break;
 +
    }
 +
  }
 +
}
 +
 
 +
fct filtremoyenne(fct f)
 +
{
 +
  int i;
 +
  for (i=1;i<N-1;i++) f.Y[i]=(f.Y[i-1]+f.Y[i+1])/2;
 +
  f.Ybornes=extremes(f);
 +
  return f;
 +
}
 +
 
 +
fct filtrederivateur(fct f)
 +
{
 +
  int i;
 +
  for (i=1;i<N-1;i++) f.Y[i]=f.Y[i+1]-f.Y[i-1];
 +
  f.Ybornes=extremes(f);
 +
  return f;
 +
}
 +
 
 +
fct bruitage(fct f)
 +
{
 +
  int i;
 +
  for (i=1;i<N-1;i++) f.Y[i]+=1.0*rand()/RAND_MAX+0.5;
 +
  f.Ybornes=extremes(f);
 +
  return f;
 +
}
 +
 
 +
bornes extremes(fct f)  //recherche des valeurs extrêmes
 +
{
 +
  int i;
 +
  bornes M;
 +
  M.min=f.Y[0];   M.max=f.Y[0];          // initialisation
 +
  for (i=1;i<N;i++)                      // parcours du tableau
 +
  {
 +
    if (M.min>f.Y[i]) M.min=f.Y[i];
 +
    if (M.max<f.Y[i]) M.max=f.Y[i];
 +
  }
 +
  return M;
 +
}
 +
 
 +
fct echantillonne(char t)
 +
{
 +
  int i;
 +
  fct f;
 +
  if (t=='s') for (i=0;i<N;i++) f.Y[i]=sin(2*M_PI*i/256);  // fonction sinus
 +
        else for (i=0;i<N;i++) f.Y[i]=((i/128)%2)*2-1;    // fonction rectangulaire
 +
  f.Ybornes=extremes(f);
 +
  return f;
 +
}
 +
 
 +
void tracerFenetre(int espace,fct f)
 +
{
 +
  SVGopen(largeur,hauteur);                                        //Préparation de l'image
 +
  SVGrectanglePlein(0, 0, largeur, hauteur,cTour,cTour);
 +
  SVGrectanglePlein(espace, espace, largeur-2*espace, hauteur-2*espace,cCadre,cFond);
 +
  int cX[N],cY[N],i;
 +
  for (i=0;i<N;i++)                                                // Coordonnees dans l'image
 +
  {
 +
    cX[i] = (largeur-2.0*espace) / N * i + espace;
 +
    cY[i] = (hauteur-2.0*espace)*(1.0 - (f.Y[i]-f.Ybornes.min)/(f.Ybornes.max-f.Ybornes.min)) + espace;
 +
  }
 +
  for (i=1;i<N;i++)  SVGline(cX[i-1],cY[i-1],cX[i],cY[i],cCourbe);  //tracé de la fonction
 +
  SVGClose();
 +
}
 +
</source>
 +
 
 +
{{RetourVers/TpII}}

Version actuelle datée du 15 décembre 2012 à 22:48

retour vers la page des Tps II

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "SVGlib.h"

#define N 512                   // nombre de points de la courbe
#define largeur 640             // taille de l'image
#define hauteur 480
#define cCadre 0x000000         // les différentes couleurs utilisées.
#define cTour 0x303030
#define cFond 0xFFFFFF
#define cCourbe 0xFF0000

typedef struct
{
  float min;
  float max;
} bornes;

typedef struct
{
  float Y[N];                             // pas besoin d'axe des abscisses
  bornes Ybornes;
} fct;

bornes extremes(fct f);
fct echantillonne(char t);                // en paramètre le type de fonction 
void tracerFenetre(int espace,fct f);     // espace : bordure autour de la courbe
fct filtremoyenne(fct f);
fct filtrederivateur(fct f);
fct bruitage(fct f);

int main()
{
  fct f;
  char rep;
  for(;;)
  {
    printf("                  Filtrage Numérique                                \n");
    printf("             ==========================                             \n");
    printf("                                                                    \n");
    printf("E...Echantillonnage                    B...Bruitage                 \n");
    printf("M...filtre Moyenneur                   D...filtre Dérivée           \n");
    printf("T...Tracé de la courbe                 Q...Quitter                  \n");
    printf("                                                                    \n");
    scanf("%c",&rep);            // la fonction scanf possède certaines limitations
    if (rep!=10) getchar();      // comme ne pas supprimer la touche entrée ('\n' ou 10)
    switch (rep)
    {
      case 'e':
      case 'E':
          do
          {
            printf("Choix de la courbe : 's' pour sin, 'r' pour rectangulaire.\n");
            scanf("%c",&rep);            // la fonction scanf possède certaines limitations
            if (rep!=10) getchar();      // comme ne pas supprimer la touche entrée ('\n' ou 0x10)
            if (rep=='S') rep='s';
            if (rep=='R') rep='r';
          } while ((rep!='s')&&(rep!='r'));
          f=echantillonne(rep);
          break;
      case 't':
      case 'T':
          tracerFenetre(20,f);
          break;
      case 'q': 
      case 'Q':
          return 0;
      case 'm':
      case 'M':
          f=filtremoyenne(f);
          break;
      case 'd':
      case 'D':
          f=filtrederivateur(f);
          break;
      case 'b':
      case 'B':
          f=bruitage(f);
          break;
    }
  }
}

fct filtremoyenne(fct f)
{
  int i;
  for (i=1;i<N-1;i++) f.Y[i]=(f.Y[i-1]+f.Y[i+1])/2;
  f.Ybornes=extremes(f);
  return f;
}

fct filtrederivateur(fct f)
{
  int i;
  for (i=1;i<N-1;i++) f.Y[i]=f.Y[i+1]-f.Y[i-1];
  f.Ybornes=extremes(f);
  return f;
}

fct bruitage(fct f)
{
  int i;
  for (i=1;i<N-1;i++) f.Y[i]+=1.0*rand()/RAND_MAX+0.5;
  f.Ybornes=extremes(f);
  return f;
}

bornes extremes(fct f)  //recherche des valeurs extrêmes
{
  int i;
  bornes M;
  M.min=f.Y[0];	  M.max=f.Y[0];          // initialisation
  for (i=1;i<N;i++)                      // parcours du tableau
  {
    if (M.min>f.Y[i]) M.min=f.Y[i];
    if (M.max<f.Y[i]) M.max=f.Y[i];
  }
  return M;
}

fct echantillonne(char t)
{
  int i;
  fct f;
  if (t=='s') for (i=0;i<N;i++) f.Y[i]=sin(2*M_PI*i/256);  // fonction sinus
         else for (i=0;i<N;i++) f.Y[i]=((i/128)%2)*2-1;    // fonction rectangulaire
  f.Ybornes=extremes(f);
  return f;
}

void tracerFenetre(int espace,fct f)
{
  SVGopen(largeur,hauteur);                                         //Préparation de l'image
  SVGrectanglePlein(0, 0, largeur, hauteur,cTour,cTour);
  SVGrectanglePlein(espace, espace, largeur-2*espace, hauteur-2*espace,cCadre,cFond);
  int cX[N],cY[N],i;
  for (i=0;i<N;i++)                                                 // Coordonnees dans l'image
  {
    cX[i] = (largeur-2.0*espace) / N * i + espace;
    cY[i] = (hauteur-2.0*espace)*(1.0 - (f.Y[i]-f.Ybornes.min)/(f.Ybornes.max-f.Ybornes.min)) + espace;
  }
  for (i=1;i<N;i++)  SVGline(cX[i-1],cY[i-1],cX[i],cY[i],cCourbe);  //tracé de la fonction
  SVGClose();
}

retour vers la page des Tps II