programme en C
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

programme en C



  1. #1
    invitec13d7a26

    programme en C


    ------

    bonsoir,Je vous prie de bien vouloir m'aider.
    J'ai une fonction appelé "calcul" et je voudrais utiliser le résultat du calcul dans une autre fonction appelé "angle". Comment faire pour l'appeler?
    Merci pour votre attention et votre aide.
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    
    
    typedef struct {
    
            double x,y;
            double r,theta;
            } point;
    
    void calcul(point *pv,point const *po)
    {
        pv->r=sqrt((po->x*po->x)+(po->y*po->y));
    }
    
    double angle(point const *pv,point const *po)
    {
      double ang=calcul(&v,&o);
      ang=2*atan2((po->y),((po->x)+ang));
      return ang;
    
    }
    
    
    void saisir(point *pv)
    {
      printf("saisir x: ");
      scanf("%lf",&pv->x);
      printf("saisir y: ");
      scanf("%lf",&pv->y);
    }
    
    int main()
    
    {
      point o,v;
      double ang;
      saisir(&o);
      printf("x=%lf\ny=%lf\n",o.x,o.y);
      calcul(&v,&o);
      printf("r=%lf\n",v.r);
      ang=angle(&o,&v);
      printf("theta=%lf",ang);
    
    }

    -----
    Dernière modification par Jack ; 15/05/2012 à 22h55. Motif: Balises code, comme d'hab'

  2. #2
    Jack
    Modérateur

    Re : programme en C

    Les règles participative de ce forum sont faites pour être lues !!!
    http://forums.futura-sciences.com/pr...eau-forum.html

  3. #3
    Jack
    Modérateur

    Re : programme en C

    J'ai une fonction appelé "calcul" et je voudrais utiliser le résultat du calcul dans une autre fonction appelé "angle". Comment faire pour l'appeler?
    Si la fonction doit renvoyer un double, il suffit de modifier son entête ainsi:
    Code:
    void calcul(point *pv,point const *po)
    et de faire return laValeurAretourner;
    dans la fonction.

    J'avoue avoir du mal à comprendre comment tu peux manipuler des pointeurs et ne pas connaitre la réponse à un problème aussi trivial ...

    A+
    Dernière modification par Jack ; 15/05/2012 à 23h01.

  4. #4
    invitec13d7a26

    Re : programme en C

    comment utiliser le resultat de cette fonction pour faire un calcul avec dans une autre fonction ?


    void calcul(point *pv,point const *po)
    {
    pv->r=sqrt((po->x*po->x)+(po->y*po->y));
    }

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : programme en C

    Désolé, erreur dans mon message précédent. je voulais écrire:
    Code:
    doublecalcul(point *pv,point const *po)
    Quelle valeur veux-tu renvoyer? pv->r ?

    A+
    Dernière modification par Jack ; 15/05/2012 à 23h55.

  7. #6
    Dlzlogic

    Re : programme en C

    Citation Envoyé par Jack Voir le message
    Désolé, erreur dans mon message précédent. je voulais écrire:
    Code:
    doublecalcul(point *pv,point const *po)
    Quelle valeur veux-tu renvoyer? pv->r ?

    A+
    Petite supposition, le code et la question constituent l'exercice.
    Si Iken ne sait pas ce qu'est un pointeur, il ne sait pas ce qui se passe dans la fonction calcul(), ni ce qu'on pourrait renvoyer
    Autre solution possible : un #define mais qu'il ne faudrait surtout pas appeler "calcul".
    La fonction angle() est assez bizarre, comme le reste d'ailleurs.
    J'ai un peu de mal à comprendre comment une structure point peut contenir une variable r et une variable theta (longueur et angle selon toute probabilité).
    [HS] Il semble qu'on ait retiré les attributs "origine" et "extrémité" aux vecteurs, aurait-on rajoutés aux points une direction et et un longueur pour tenter de rétablir un équilibre ? [/HS]

  8. #7
    Jack
    Modérateur

    Re : programme en C

    J'ai un peu de mal à comprendre comment une structure point peut contenir une variable r et une variable theta (longueur et angle selon toute probabilité).
    Qu'y a-t-il de bizarre? Les coordonnées cartésiennes sont plus faciles à manipuler pour des translations. En revanche, pour des rotations, les coordonnées polaires sont plus pratiques.

    A+

  9. #8
    Dlzlogic

    Re : programme en C

    Bonjour Jack,
    Il est certain qu'il y a une évolution des termes que j'ai un peu de mal à comprendre.
    Pour moi, un point c'est une position ponctuelle.
    Si on est dans un repère cartésien, c'est un X,Y, pas de problème. Ce repère a une origine etc.
    Si on est dans un repère non cartésien, repère central avec une référence, il faut le définir.
    Si c'est le même centre et la même référence de direction, pas la peine d'avoir 2 repères.

    Dans le cas d'une rotation. L'objet que l'on va transformer peut être ramené à un triangle. Sauf si le centre de rotation est justement l'origine du repère, ce qui est vraiment improbable, ces deux coordonnées centrales ne présentent pas vraiment d'intérêt.
    En fait, je me place dans le cas d'un programme de géométrie réelle : ces deux coordonnées centrales me paraissent vraiment sans intérêt.

    Code:
    double angle(point const *pv,point const *po)
    {
      double ang=calcul(&v,&o);
      ang=2*atan2((po->y),((po->x)+ang));
      return ang;
    
    }
    La valeur renvoyée par calcul() est probablement une distance. Cette distance est ajoutée à la coordonnée X. J'ai un peu de mal à imaginer que la fonction atan2 retourne la valeur de l'angle espérée.
    La valeur renvoyée par la fonction sera très arrondie.

    Mais dans tous les cas, le problème important (concernant ce message) est l'utilité de mémoriser la direction et la distance à l'origine dans la structure point, que j'ai vraiment du mal à comprendre.

    Pour information, après avoir beaucoup réfléchi, ma classe TPoint{} contient un pointeur sur un matricule, X et Y en long (et non double) et Z en float, et c'est tout, sauf naturellement un grand nombre de constructeurs. Mais il est vrai, je travaille en C++.

  10. #9
    Jack
    Modérateur

    Re : programme en C

    Mais dans tous les cas, le problème important (concernant ce message) est l'utilité de mémoriser la direction et la distance à l'origine dans la structure point, que j'ai vraiment du mal à comprendre.
    Comme je l'ai dit plus haut, il s'agit de la représentation polaire d'un point, qui permet de le localiser par son module et son argument. Certaines équations travaillent en polaire, donc la représentation graphique en sera facilitée.

    La valeur renvoyée par calcul() est probablement une distance.
    Oui, il s'agit visiblement de la distance à l'origine (en supposant que po représente le point d'origine) , permettant de calculer le module. On notera au passage que les paramètres utilisés pour appeler la fonction calcul sont faux (double ang=calcul(&v,&o); ). Il devait s'agir de pv et po sûrement.

    Pour information, après avoir beaucoup réfléchi, ma classe TPoint{} contient un pointeur sur un matricule, X et Y en long (et non double)
    Si tu travailles sur des points d'un écran, les coordonnées sont discrètes et peuvent donc être représentées par des entiers. Si tu travailles sur la trajectoire d'un mobile, des réels seront plus adaptés.

    Il serait très éclairant de savoir quel est le but de cette application en tout cs.

    A+
    Dernière modification par Jack ; 16/05/2012 à 16h01.

  11. #10
    Dlzlogic

    Re : programme en C

    Mon programme traite de conception et calcul dans le domaine de la topographie, VRD, SIG etc.
    Un avantage d'utiliser des long au lieu des flottants, c'est que je gagne 2 chiffres significatifs.
    J'ai une unité de base, généralement le mm et donc, en mémoire à tout moment les coordonnées sont en UB.
    Naturellement tous les calculs sont faits en double, mais le stockage est en long. Pour le Z, ça ne présente pas grand intérêt, donc c'est du float.

    Concernant l'origine du système, c'est une notion très subjective. L'origine des coordonnées est très éloigné des points traités. L'origine de travail est calculée automatiquement suivant une formule inconnue par l'utilisateur, l'origine de l'écran est naturellement en haut à gauche avec les Y croissant vers le bas etc. sans compter les rotations, homothéties et affinités éventuelles.
    Ceci explique que un système de coordonnes centrale n'a pas vraiment de sens en informatique graphique, dans un contexte géographique.
    Mais naturellement, je suis prêt à donner toutes les explications qui pourraient être nécessaires.

  12. #11
    Jack
    Modérateur

    Re : programme en C

    On attend donc avec impatience le fameux contexte de iken93.

    A+

Discussions similaires

  1. programme qui lance un autre programme
    Par invite01c3c114 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 10/02/2011, 13h26
  2. comment utiliser les résultats d'un programme fortran dans un autre programme
    Par invitedb78a3a3 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 30/09/2010, 20h21
  3. programme en c
    Par invite4febd0e0 dans le forum Logiciel - Software - Open Source
    Réponses: 11
    Dernier message: 23/12/2009, 14h23
  4. Programme C
    Par invite5d9066d8 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 07/12/2008, 20h07
  5. programme
    Par invite7e1f35e9 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 26/04/2006, 14h13