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 :

demande de renseignement faute de résultats sur le net


Sujet :

C

  1. #1
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut demande de renseignement faute de résultats sur le net
    Bonjour à tous!

    Je vais éssayer d'être concis :

    je voudré faire une fonction ayant pour paramètre une fonction : est-ce possible et si oui comment?

    d'autre part j'aimerais savoir si on peut augmenter la taille des réels en C : les double ne me suffisent pas (un foutue fonction factorielle).
    J'ai entendu parlé des long double mais il ne marche pas bien (ils me décalent la virgule du nombre et c'est tout et donc j'ai un résultat juste...à 10^10 près!)

    Merci d'avance de vos réponse.

  2. #2
    Membre éclairé Avatar de telliam
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut
    Citation Envoyé par Rniamo
    Bonjour à tous!

    je voudré faire une fonction ayant pour paramètre une fonction : est-ce possible et si oui comment?

    Merci d'avance de vos réponse.
    Oui c'est possible, recherche sur le net des infos sur les pointeurs de fonction, sinon donne nous un exemple du code que tu voudrais faire.

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    je voudrais faire une fonction ayant pour paramètre une fonction : est-ce possible et si oui comment?
    C'est possible. Il faut utiliser un pointeur de fonction. Voir le principe des fonctions callback.

    d'autre part j'aimerais savoir si on peut augmenter la taille des réels en C : les double ne me suffisent pas (un foutue fonction factorielle).
    La fonction factorielle est une fonction entiere, tu peux essayer avec des long long. C'est aussi une fonction qui diverge rapidement, donc l'utilisation de bibliotheque de calcul a grande precision (style bignum) peut etre utile.

  4. #4
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Citation Envoyé par Rniamo
    je voudré faire une fonction ayant pour paramètre une fonction : est-ce possible et si oui comment?
    Voici un petit cours sur les pointeurs de fonction:
    pointeurs de fonctions

  5. #5
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    ben je voudré faire une fonction dérivée niémé en a du style :

    double dervi(?? f;int n;double a).
    Pour les factoriels, je suis déjà en double parce que long int est trop petit...

    Les pointeurs je ne maîtrise pas bien et je ne vois pas trop comment ça peut m'aider, pouvez-vous détaillez svp?

  6. #6
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    tant que j'y suis, j'aimerais savoir si rentrer une fonction en dos est possible?

  7. #7
    Membre éclairé Avatar de telliam
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut
    Citation Envoyé par Rniamo
    ben je voudré faire une fonction dérivée niémé en a du style :

    double dervi(?? f;int n;double a).
    Pour les factoriels, je suis déjà en double parce que long int est trop petit...

    Les pointeurs je ne maîtrise pas bien et je ne vois pas trop comment ça peut m'aider, pouvez-vous détaillez svp?
    regarde le cours fourni par homeostasie, il me parait tres bien, repose nous ensuite des questions sur ce cours, ça nous permettra de partir sur une base comune

  8. #8
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    Merci homeostasie, dazumba et telliam pr les pointeurs de fonction, ça m'aide déjà pas mal.

  9. #9
    Membre éclairé Avatar de telliam
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut
    Citation Envoyé par Rniamo
    tant que j'y suis, j'aimerais savoir si rentrer une fonction en dos est possible?
    en dos? en DOS???

  10. #10
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par Rniamo
    tant que j'y suis, j'aimerais savoir si rentrer une fonction en dos est possible?
    Je suis pas sûr d'avoir compris ce que tu veux exactement.

    Pour exécuter une commande shell (ou DOS) en C, tu peux utiliser la commande :

    system("macommand");

  11. #11
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    ce que je voulais dire (dsl de ne pas avoir été clair ) c'est que mon programme n'a pas d'interface graphique (à part la fenêtre classique comme celle de dos) et je voudrais quand même saisir une fonction via celle-ci...

  12. #12
    Membre éclairé Avatar de telliam
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut
    Citation Envoyé par Rniamo
    ce que je voulais dire (dsl de ne pas avoir été clair ) c'est que mon programme n'a pas d'interface graphique (à part la fenêtre classique comme celle de dos) et je voudrais quand même saisir une fonction via celle-ci...
    euh là c'est de pire en pire coté comprehension

  13. #13
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Je crains d'avoir compris...

    Son programme est en mode console, et il veut saisir une fonction mathématique quelconque, la passer à sa fonction C "dervi", et obtenir la fonction mathématique dérivée.

    C'est ça ?

  14. #14
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Citation Envoyé par telliam
    Citation:
    Rniamo a écrit :
    ce que je voulais dire (dsl de ne pas avoir été clair ) c'est que mon programme n'a pas d'interface graphique (à part la fenêtre classique comme celle de dos) et je voudrais quand même saisir une fonction via celle-ci...
    euh là c'est de pire en pire coté comprehension
    A mon avis, il est en mode console!
    Je pense qu'il souhaiterait appeller ces fonctions via un shell.

  15. #15
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    quand je lane mon programme c une fenêtre sur fond noir (c'est ça que j'appelle style Dos) et dedans je veux savoir si je peux enregistrer (avec scanf ou autre) une fonction (en x par exemple)

  16. #16
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par Rniamo
    quand je lane mon programme c une fenêtre sur fond noir (c'est ça que j'appelle style Dos) et dedans je veux savoir si je peux enregistrer (avec scanf ou autre) une fonction (en x par exemple)
    Oui, tu peux, mais ce sera une chaîne de caractères. Si tu veux l'interprêter pour en calculer la dérivée, ça risque d'être un peu compliqué. C'est du calcul formel que tu veux faire, non ?

  17. #17
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    j'ai un problème avec les pointeurs de fonction ; j'ai écrit :

    double integ(double a,double b,double (&f)(double x))
    {
    double resultat,test;int bin;resultat=0;test=0;bin=0;
    for (int n=0;bin!=1;n=n+1)
    {
    test=resultat;
    resultat=resultat+(1/2)*(((b-a)/2)**f(a+n*((b-a)/n));
    if (test==resultat)
    {
    bin=1;
    }

    }
    return resultat;
    }

    int main()
    {
    double (*f)(double x);f=exp(x)
    double val;
    printf("Taper le point de calcul\nx=");
    scanf("%lf",&val);
    printf("%lf\n",integ(0,1,&f);
    system("PAUSE" );
    return 0;
    }

    mais ça ne marche pas (le problème est sur la fonction f mais là je vois pas)..

  18. #18
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double integ(double a,double b,double (&f)(double x))
    Ce n'est pas un pointeur de fonction.
    Ce serait limite une référence C++ de fonction, mais je ne sais même pas si en C++ ça existe...


    Code un tant soit peu corrigé (et encore, il reste des changements à faire) et commenté:
    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
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    /* Les pointeurs de fonctions sont plus simples a utiliser avec des typedefs */
    typedef double (*PTR_DBL_FUNC_DBL)(double x);
     
    double integ(double a, double b, PTR_DBL_FUNC_DBL f)
    {
    double resultat = 0;
    int bFin = 0; /* A traiter comme un booleen */
     
    for(int n=0 ; !bFin ; n++)
    	{
    	double test = resultat;
    	/* Il manque une parenthese quelque part par ici... */
    	resultat += (1.0/2.0) * ( ((b-a)/2) * f(a+n*((b-a)/n) );
     
    	/* Une comparaison de flottants: tres mauvais. 
    	   Mais je ne sais plus par quoi on est suppose la remplacer. */
    	if(test==resultat)
    		{
    		bFin=1;
    		}
     
    	}
    return resultat;
    }
     
    int main(void)
    {
    PTR_DBL_FUNC_DBL f = exp;
    double val;
    /* Sans \n, il faut un fflush(stdout) pour etre sur que "x=" soit affiche. */
    printf("Taper le point de calcul\nx=");
    fflush(stdout);
     
    scanf("%lf", &val);
    printf("%lf\n", integ(0,1,f));
     
    system("PAUSE");
    return 0;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #19
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Médinoc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double integ(double a,double b,double (&f)(double x))
    Ce n'est pas un pointeur de fonction.
    Ce serait limite une référence C++ de fonction, mais je ne sais même pas si en C++ ça existe...
    Non.

  20. #20
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    oui, c'est ça, je suis en mode shell...mais vos réponse signifie apparemment que je ne peux pas saisir de fonction comme ça... et pour avoir des nombres plus grand que double (pour représenter des réels), quelqu'un a une solution?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Demande de renseignements sur Interface
    Par MoscoBlade dans le forum C#
    Réponses: 7
    Dernier message: 21/02/2007, 15h38
  2. Réponses: 2
    Dernier message: 04/06/2006, 21h35
  3. Réponses: 6
    Dernier message: 10/05/2006, 15h34
  4. demande de renseignements sur les classes
    Par altadeos dans le forum Langage
    Réponses: 4
    Dernier message: 08/04/2006, 15h59
  5. demande de renseignement sur delfi 7
    Par cybob dans le forum Débuter
    Réponses: 11
    Dernier message: 19/02/2006, 18h32

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