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 :

Recherche d'extrema d'une fonction


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut Recherche d'extrema d'une fonction
    salut jai ecrit un petit progamme qui recherche les extrema d'une fonction et les stocke, merci de me dire si ce aue j'ai ecrit est correct. merci

    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
     
    #include<stdio.h>
    #include<math.h>
    #include<windows.h>
     
    main()
    {
        int i,j,k;
        double a[30];
        double max[30];
        FILE *fp;
        fp=fopen("fonc.txt","w"); 
        for(i=-15;i<15;i++)
        {
            a[i+15]=sin(i);
            max[i+15]=0;
        }
        k=0;
        for(j=0;j<30;j++)
        {
     
              if ((a[j-1]-a[j-2])>=0 && (a[j]-a[j-1])<=0) k++;         
            if (a[j]>=max[k])
            {
                max[k]=a[j];
            }
            else max[k]=max[k];   
     
        fprintf(fp,"%d      %f    %f    %d\n",j,a[j],max[k],k);
        }
     
        fclose(fp);
    }

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 695
    Points : 30 993
    Points
    30 993
    Billets dans le blog
    1
    Par défaut
    Boaf je ne sais pas trop. Ton code fonctionne-t-il et t'écrit-il bien les maxima ? (je l'ai pas testé) alors que dire de plus ? Que la taille d'un tableau est de type "size_t" donc si t'as un indice qui évolue dans ce tableau il est mieux de le mettre "size_t" que "int". C'est à toi de voir.

    Autre chose: faut quand-même tester le retour de fopen() car s'il n'arrive pas à ouvrir le fichier vaut-mieux pas que tu tentes d'écrire dedans. Et sinon l'instruction max[k]=max[k] est certes très intéressante mais qu'apporte-t-elle de plus au schmilblik ?????

    Dernier détail: je suis inquiet de voir que tu fais varier j de 0 à 30 et que tu vas taper allègrement dans a[j - 1] et a[j - 2]. Mais comme tu ne dis pas ton niveau je présume que tu connais un minimum de C et donc que tu sais manipuler un tableau donc encore une fois c'est toi qui voit...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    en vrac :


    • que vient faire un "include "windows.h" dans un programme avec les instructions que tu mets (contenues dans les entetes standards) ??

    • la fonction main retourne un int

    • la fonction sin ne prend pas un argument entier

    • jamais vu un angle varier de -15 a +15 pour couvrir la plage des sinus

    • pas de test de fopen

    • Les remarques de Sve@r



    Après, on verra...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #4
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    merci de vos reponses,
    mais en fait l'instruction windows.h c parceaue javais utilise la fonction Sleep,
    ce qui est du fopen, et de la fonction sin ca a ete fais juste pour tester avec un exemple quelconque.
    ce que je voudrais savoir c'est en ce qui concerne le parcours du tableau (serait il mieu dutiliser des structures).

  5. #5
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
              if ((a[j-1]-a[j-2])>=0 && (a[j]-a[j-1])<=0) k++;
    - C'est sûr que partant de j<2, cela va planter.
    - Pourquoi ne pas comparer a[j]-a[j-1] >=0 (en commençant à j=1) ?
    - Ce genre de test ne peut pas détecter des minima
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            if (a[j]>=max[k])
            {
                max[k]=a[j];
            }
            else max[k]=max[k];
    - je ne comprends pas à quoi sert ce code. Pourquoi ce if ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 695
    Points : 30 993
    Points
    30 993
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par un passant Voir le message
    ce que je voudrais savoir c'est en ce qui concerne le parcours du tableau (serait il mieu dutiliser des structures).
    Je ne comprends pas ta question. Une structure est un outil qui te permet d'organiser des données différentes dans un même ensemble identifiable et utilisable.

    Exemple => tu veux gérer 2 dates
    - la date naissance
    - la date d'inscription

    Si t'avais pas de structures, tu serais obligé de créer 6 variables
    - jj_nais
    - mm_nais
    - aa_nais
    - jj_inscr
    - mm_inscr
    - aa_inscr
    Et si tu devais faire passer ces 2 dates à une fonction, tu devrais lui passer les 6 variables. Imagine ce que ça deviendrait si tu devais gérer un tableau de personnes avec 5 ou 6 dates par personne (date de naissance, de mariage, d'inscription, etc..)

    Avec les structures, tu peux regrouper dans un même ensemble tes jj/mm/aa et tu nommes cet ensemble "t_date". Il te suffit ensuite de créer autant de t_date que t'as envie. Chaque t_date créé portera en lui un jj, un mm et un aa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct {
       unsigned short jj;
       unsigned short mm;
       unsigned short aa;
    } t_date;
     
    t_date date_naissance;
    t_date date_inscr;
    Donc c'est à toi de voir. Si dans ton esprit t'as des données qui devraient être associées alors tu peux les associer dans une structure. Sinon...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    citation:
    - je ne comprends pas à quoi sert ce code. Pourquoi ce if ?

    c'est une condition je compare les deux valeurs, si ma valeur est superieure a la valeur precedente elle devient le max, sinon le max reste le max. ca marche mais je ne sais pas si c'est correct de l'ecrire comme je l'ai fais.

    Si vous avez d'autres idees de code mieu structure que le mien merci de m'aider.

  8. #8
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    voila ce que je voudrais faire:
    j'ai une fonction qui a un peu la forme d'une sinusoide
    j'ai envie de comparer les valeurs et a chaque fois que je tombe sur un extrema j'ai envi de le stocker pour ensuite les manipuler.
    les valeurs de la fonction sont stockes dans un tableau.
    j'espere aue j'ai ete clair.
    (dsl pour les accents :clavier QWERTY)

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    eh bien ecrit ton algo en français, etape par etape..

    Après on passera à la partie programmartion...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    j'ai un ensemble de valeurs stockees dans un tableau
    je veux trouver les maximums locaux de ces valeurs.
    donc je commence a comparer la 1ere valeur a la 2e et ainsi de suite.
    dans le meme temps, je calcule la derivee de la fonction (valeur suivante-valeur actuelle)/(distance) et si elle change de signe je stocke la valeur du max obtenue en ce point et j'incremente le tableau des max de 1.
    c'est pour savoir combien de maximum locaux j'ai et pouvoir travailler avec.
    j'espere avoir ete clair.
    c'est un probleme de mecanique.

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    c'est ce que tu veux faire..

    Pas l'algorithme...

    Decrit l'algo reellement, en texte, etape par etape...
    (et pas avec "ainsi de suite")

    Du pseudo-code...

    Apres ca coulera de source...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  12. #12
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    merci pour ton temps:

    parcours du tableau;
    si abs(tableau[i])>=abs(max[k]);
    max[k]=tableau[i];
    si tableau[i+2]-tableau[i+1]>=0 et tableau[i+1]-tableau[i]<=0 k++;

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    ca ne marchera pas...

    Si tu as a peu pres une sinusoide, commence par prendre la valeur mediane...

    Ensuite, tout ce qui est en dessous, tu le mets a zero

    Ensuite, tu reparcours ton truc en stockant les changements de signes
    (tu peux t'inspirer de mon post http://www.developpez.net/forums/sho...0&postcount=29 sur le forum Algorithmes...)

    Ca te donnera le nombre, et meme la valeur de chacun des sommets.....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  14. #14
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    j'ai tape un autre code et ca marche
    mais j'ai un nouveau probleme
    ca me trouve bien le maximum et ca determine les extremas
    mais si j'ajoute la fonction abs a mes valeurs pour determiner les maximaux en valeur absolue ca me donne de mauvais resultats.
    Donc comment utiliser la fonction valeur absolue?

  15. #15
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    abs() est pour les entiers.
    Utilise fabs()
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  16. #16
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 695
    Points : 30 993
    Points
    30 993
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par un passant Voir le message
    c'est une condition je compare les deux valeurs, si ma valeur est superieure a la valeur precedente elle devient le max, sinon le max reste le max. ca marche mais je ne sais pas si c'est correct de l'ecrire comme je l'ai fais.
    T'as pas besoin de "sinon le max reste le max". Si tu touches pas au max il reste comme il est...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  17. #17
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    oui je l'ai retire.
    merci ca marche

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

Discussions similaires

  1. Recherche à l'aide d'une fonction récursive
    Par Phoenix89 dans le forum Shell et commandes GNU
    Réponses: 32
    Dernier message: 24/04/2014, 10h58
  2. [Débutant] recherche du zéro d'une fonction par recherche numerique
    Par x2thezi dans le forum C#
    Réponses: 1
    Dernier message: 28/12/2011, 17h30
  3. Réponses: 4
    Dernier message: 04/04/2011, 12h15
  4. Recherche du min dans une fonction parabolique
    Par julien_julio dans le forum Excel
    Réponses: 2
    Dernier message: 26/04/2010, 15h02
  5. Recherche du minimum d'une fonction sur un intervalle
    Par jschutz dans le forum Mathématiques
    Réponses: 6
    Dernier message: 18/03/2008, 14h25

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