IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Pointeur sur un tableau de réels


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Stagaire en dev
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Stagaire en dev
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Par défaut Pointeur sur un tableau de réels
    Bonjour ,
    J'essaye de mettre dans un tableau de 6 valeurs les 6 premières valeurs d'un tableau de 402 valeurs, déterminer les maximums parmi les 6 premières valeurs puis effacer les 5 premières, mettre la sixième à la place de la première , et dans les 5 cases restantes la suite des valeurs du tableau de 402 valeurs , et ainsi de suite je travaille sur le petit tableau de 6 valeurs jusqu’à avoir parcouru le grand tableau de 402 valeurs réelles.


    Exemple pour un tableau de 26 valeurs entières on a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int tab1[26]={1,3,2,5,4,7,6,9,8,10,12,11,16,14,18,13,17,15,18,21,21,21,21,21,21,21};
    Pour le tableau de 6 valeurs il va varier comme cela:

    Nom : Capture1.JPG
Affichages : 114
Taille : 73,9 Ko

    et pour la détection des maximums elle se passe au court du temps dans le tableau et le résultat est :

    Nom : Capture2.JPG
Affichages : 110
Taille : 44,3 Ko

    Ce qui marche très bien avec un tableau d'entier.

    Maintenant on passe au tableau de 402 valeurs réelles :

    je dois passer maintenant mes définitions int en float

    Voici la fonction :
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    #define BUFFER_SIZE   6
     
    float tab1[402] = {25.11794,25.11794,25.11794,25.11794,25.11794,25.11794,25.138475,25.138475,25.138475,25.11794,25.138475,25.15901,25.138475,25.15901,25.15901,25.15901,25.15901,25.15901,25.138475,25.138475,25.097406,25.056338,25.015273,24.994741,24.974209,24.933147,24.912617,24.892087,24.892087,24.871557,24.953678,25.11794,25.220618,25.467092,25.836923,26.145226,26.412503,26.679856,26.988433,27.35886,27.750023,28.120747,28.491617,28.821401,29.213169,29.501944,29.646365,29.687632,29.708266,29.7289,29.7289,29.687632,29.646365,29.625732,29.605099,29.625732,29.605099,29.563836,29.543205,29.543205,29.522574,29.501944,29.501944,29.501944,29.501944,29.522574,29.522574,29.522574,29.522574,29.543205,29.563836,29.563836,29.605099,29.625732,29.625732,29.646365,29.666998,29.687632,29.708266,29.7289,29.770171,29.790807,29.811443,29.852718,29.873355,42.086786,66.499923,82.741841,89.988032,87.332831,83.025413,78.954317,75.419661,72.113602,69.248899,66.58571,64.079611,61.708062,59.491377,57.386017,55.306472,53.316045,51.371971,49.579326,47.895199,46.382023,44.976082,43.781615,42.609559,41.50162,40.457576,39.539764,38.914491,56.833861,75.4846,88.012396,96.359354,97.709523,94.657715,90.845392,87.047994,83.54915,80.410974,77.456471,74.640744,71.941048,69.334931,66.778758,64.357744,62.049545,59.938564,58.08729,56.430563,54.840256,53.337198,51.942105,50.675603,49.537186,48.526398,47.537705,46.634052,45.647318,44.640642,43.676908,42.797828,46.613047,65.985364,81.477683,91.87963,99.01721,104.265595,108.422037,111.854358,114.870373,117.51138,119.819619,121.928936,123.701542,125.317855,126.731461,127.964324,129.130116,129.198735,126.32085,122.973932,120.204855,118.121856,116.223846,114.284449,112.281436,110.21521,108.175732,106.073482,103.998044,102.305262,106.229877,111.831885,116.33672,119.796963,122.519449,124.611814,126.298043,127.71306,128.924288,129.610549,127.439027,124.88506,122.746664,120.81701,119.004326,117.127202,115.253667,113.293683,111.292696,109.206145,107.079314,104.979421,102.950845,104.510914,110.170341,115.253667,119.140161,122.110594,124.452456,126.229626,127.690221,128.947155,129.541902,127.210724,124.79397,122.769389,120.953097,119.162802,117.330572,115.456648,113.518769,111.517322,109.452709,107.302972,105.180279,103.195834,104.176403,109.878739,115.140918,119.208086,122.36043,124.79397,126.731461,128.284208,129.656317,128.329914,125.79643,123.656051,121.747311,119.932908,118.144473,116.268994,114.329507,112.326403,110.260082,108.108569,106.006464,103.975752,103.507726,108.690803,114.216865,118.574305,121.951641,124.543515,126.548946,128.215653,129.633433,128.352768,126.092807,124.452456,123.223987,122.178725,121.157262,120.04621,118.823242,117.533984,116.223846,114.757668,112.956151,110.933402,108.870021,106.788634,104.800916,103.418604,107.750444,113.248672,117.805265,121.293396,124.042795,126.184018,127.918635,129.404621,130.686656,131.832743,132.77353,133.46248,133.692237,133.738195,133.761175,133.761175,133.784155,133.784155,133.830117,133.830117,133.876081,133.899064,133.876081,133.899064,133.899064,133.876081,133.899064,133.899064,133.922048,133.922048,133.945032,133.968016,133.945032,133.968016,133.968016,133.968016,133.968016,133.968016,133.945032,134.013987,134.036973,133.991001,134.036973,134.05996,133.991001,134.082947,134.036973,134.036973,134.036973,134.013987,133.991001,134.05996,134.036973,134.082947,134.05996,134.05996,134.036973,134.05996,134.036973,134.082947,134.082947,134.128923,134.105935,134.128923,134.128923,134.105935,134.151912,134.105935,134.128923,134.128923,134.151912,134.128923,134.151912,134.128923,134.151912,134.151912,134.151912,134.151912,134.128923,134.151912,134.220882,134.220882,134.151912,134.197891,134.128923,134.197891,134.197891,134.220882,134.174901,134.197891,134.197891,134.220882,134.220882,134.220882,134.197891,134.243873,134.220882,134.220882,134.220882,134.220882,134.312849,134.266864,134.312849,134.243873,134.243873,134.243873,134.335842,134.289856,134.289856,134.289856,134.312849,134.335842,134.312849,134.312849,134.312849,134.312849,133.46248,131.374148,129.313111,126.959653,124.270363,121.792714,119.638384,117.601797,115.614552,113.653845,111.71953,109.789033,107.884726,106.028803,104.1987,102.171747,99.815985}; 	
    float *p ;
    *p = tab1;
    float tab[BUFFER_SIZE]={0};
    int x;
    int v; 
    int t; 
    //float Delta = 0.5;
    int somme;
     
     
     
    /******************************************************************
    // a chaque fois il stocke 6 valeurs efface les 5 premieres valeurs 
    // met la 6eme a la place de la premiere et stcoke dans les 5 place 
    // libres les 5 valeurs suivantes prelevees.
    ******************************************************************/
    unsigned char Clear_Buffer (void)
    {
    	int l ;
    	int n=0;
    	int k ;
     
    	for (n=0; n<81 ;n++)// la valeur de n depend de la taille du tableau.
    	{				    // elle doit etre proportionnelle.
    		l=n*(5);
    		for(k=0; k<6;k++)
    		{
    			tab[k]=p[k+l];
    			printf ("%f valeur numero %d du tableau \n" , tab[k] , k);
     
    			// Pour detecter le nombres de maximum inferieur à 114 à partir de 50
    			if ((tab[k]>(tab[k-1]/*+Delta*/))&&(tab[k]>(tab[k+1]/*+Delta*/))&&(k>0)&&(tab[k]>50)&&(tab[k]<114))
    			{
    				x=x+1;
    				somme = somme + tab[k];
    				//printf ("%f est un maximum \n" ,tab[k]);
    			}
     
    			// Pour detecter le nombres de maximum totals à partir de 50
    			if ((tab[k]>(tab[k-1]/*+Delta*/))&&(tab[k]>(tab[k+1]/*+Delta*/))&&(k>0)&&(tab[k]>50)&&(tab[k]<134))
    			{
    				t=t+1;
    				//printf ("%f est un maximum \n" ,tab[k]);
    			}
    		}
    		printf("\n\n");
    	}
    	//printf("%d: nombre de pics bas \n",x);
    	//printf("%d = Somme des pics bas  \n", somme);
    	//printf("%d: nombres de pics haut\n",t);
     
    }
     
     
    int main (void)
    {
    	Clear_Buffer ();
    	return 0;
    }
    Le résultat est un problème sur le pointeur que j'arrive pas a déterminer :

    Nom : Capture3.JPG
Affichages : 112
Taille : 33,0 Ko

    Par contre lorsque je change les float par des int j'obtiens bien le tableau de 6 valeurs qui change en permanence correctement.
    Bien sur l'affichage nous avons que la partie entière, mais nous reconnaissons bien ici la fin du tableau de 402 valeurs:

    Nom : Capture.JPG
Affichages : 122
Taille : 55,9 Ko

    cependant la détection de maximum est affreuse et erronée du au faite que se sont des floats que j'ai défini comme des ints je pense.
    ce n'est pas un problème de %d ou %f j'ai fais attention quand même lors de l'affichage.

    Pourriez-vous m'aider à résoudre ce problème de pointeur sur un tableau de réelles car je ne comprend pas pourquoi cette fonction marcherai pour des entiers et non pour des réelles . Le problème viendrait-il de ma déclaration du pointeur? Si Oui comment faudrait-il le déclarer s.v.p.? Pour infos je travail sur Visual C++ mais je compile avec mon invite de commande.

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Le problème qui doit se poser tout autant quelque soit le type :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // NON
    *p = tab1;
    void function()
    {
     
    }
     
    // OUI
    void function()
    {
       *p = tab1;
    }

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Pourquoi en faire des variables globales?

  4. #4
    Membre averti
    Homme Profil pro
    Stagaire en dev
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Stagaire en dev
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Par défaut
    Merci beaucoup transgohan et leternel ,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    unsigned char Clear_Buffer (void)
    {
    	p = &tab1;
    }

    a donné:

    Nom : Capture4.JPG
Affichages : 101
Taille : 70,3 Ko

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Content que ca marche.

    Sinon, juste parce que ça m'a fait sourire deux minutes, quand j'ai mal lu le sujet:

    Citation Envoyé par le sujet
    Pointeur sur un tableau réel
    Citation Envoyé par réponse
    tu as essayé &Joconde

  6. #6
    Membre averti
    Homme Profil pro
    Stagaire en dev
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Stagaire en dev
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Par défaut
    L.O.L

    La je bosse sur la détection de maximums les comptabiliser en faire la moyenne etc ...

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Paramètre : pointeur sur un tableau
    Par _Michel dans le forum Débuter
    Réponses: 2
    Dernier message: 15/02/2009, 16h08
  2. Réponses: 5
    Dernier message: 21/09/2008, 09h45
  3. Réponses: 8
    Dernier message: 17/09/2008, 12h11
  4. Réponses: 1
    Dernier message: 09/07/2006, 23h39
  5. Références et pointeurs sur un tableau
    Par smag dans le forum C++
    Réponses: 2
    Dernier message: 01/03/2005, 20h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo