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 :

Pente d'une droite


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut Pente d'une droite
    Bonjour, comment récupérer les valeurs XetY de la boucle précédente pour connaitre la pente de ma droite m=(Xb-Xa)/(Yb-Ya)?

    Voici une pseudo boucle mais je ne sais pas où déclarer mes variables XY pour bien faire !
    ...
    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
    int nbrDePoints;
    int compteur;
    int Xb;
    int Xa;
    int Yb = 0;
    int Ya = 0; 
    float m;
     
    printf("nbr de points ?");
    scanf("%d",&nbrDePoints);
     
    while(compteur<=nbrDePoints){
    printf("Donnez Xb et Xa : ");
    scanf("%d %d",&Xb,&Xa);
    if(Yb!=0&&Ya!=0){
    m=(Xb-Xa)/(Yb-Ya);
    }
    Yb=Xb;
    Ya=Yb;
    compteur++;
    }
    ..

  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 631
    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 631
    Points : 30 865
    Points
    30 865
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Magnum8760 Voir le message
    comment récupérer les valeurs XetY de la boucle précédente pour connaitre la pente de ma droite m=(Xb-Xa)/(Yb-Ya)?
    Pourquoi faire ??? Te suffit de faire remplir Xa et Ya d'une part, puis Xb et Yb de l'autre sans boucle. Et accessoirement, offrir à l'utilisateur la possibilité de faire saisir 50 points pour une droite est un peu idiot. Ca fait 2300 ans que Euclide a dit que 2 points suffisaient. Certes cette affirmation n'a jamais été démontrée mais elle n'a non plus jamais été infirmée.
    Maintenant, si vraiment tu veux faire saisir "n" points dans une boucle et les mémoriser alors le mieux est d'utiliser un tableau et à chaque tour de boucle, de faire saisir le point P[i] (i étant l'indice de variation de la boucle).

    Sinon, pour répondre à ta question, la réponse est assez simple: dès que le point Pa est saisi, si tu en es au tour 0 tu le stockes vite vite dans Pb et si tu en es au tour 1 tu ne le stockes pas.
    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
    Membre du Club
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Pour compter le nombre de changements de direction dans ma mélodie lorsqu'un utilisateur entre une fréquence (Xb et la fréquence de la boucle précédente Xa) et une durée (Yb et la durée de la boucle précédente Ya). C'est pour avoir les coordonnées de mes deux points

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    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 631
    Points : 30 865
    Points
    30 865
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Magnum8760 Voir le message
    Pour compter le nombre de changements de direction dans ma mélodie lorsqu'un utilisateur entre une fréquence (Xb et la fréquence de la boucle précédente Xa) et une durée (Yb et la durée de la boucle précédente Ya).
    Dans ce cas, c'est tout simple: à chaque itération du fais saisir Pb et tu fais alors le calcul entre Pa et Pb. Puis tu copies Pb dans Pa et tu passses à l'itération suivante. Avec une petite exception pour la toute première itération où tu n'as pas encore de Pa valide donc dans ce cas spécial tu ne fais pas le calcul.
    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]

  5. #5
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 610
    Points : 1 534
    Points
    1 534
    Par défaut
    Hello,

    Le test ligne 15 n'est pas correct: ce qu'il faut tester c'est si Yb-Ya !=0
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  6. #6
    Membre du Club
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    J'ai isolé cette partie du code mais voilà ma pente vaut zéro à chaque itération !!

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
    	int Xb;
    	int Xa;
    	int Yb;
    	int Ya;
    	int m;
    	int compteur = 1;
    	int nbr;
     
    	printf("Nombre de points\t:  ");
    	scanf("%d",&nbr);
     
    	while(compteur<=nbr){
     
    		printf("Saississez PB (Xb,Yb) :");
    		scanf("%d%d",&Xb,&Yb);
     
    		if(compteur>1&&(Yb-Ya)!=0){
    		printf("Pente = %d\n",m=(Xb-Xa)/(Yb-Ya));	
    		}
     
    	Xa=Xb;
    	Ya=Yb;
    	compteur++;
     
    	}
     
     
    	return 0;
    }

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    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 631
    Points : 30 865
    Points
    30 865
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Magnum8760 Voir le message
    J'ai isolé cette partie du code mais voilà ma pente vaut zéro à chaque itération !!
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("Pente = %d\n",m=(Xb-Xa)/(Yb-Ya));
    Ben sais pas trop. Division euclidienne de deux entiers par exemple. Et résultat affiché en format entier...
    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]

  8. #8
    Membre du Club
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Honnetement je ne sais pas plus, le compilateur va m'afficher un +INF ou -INF à condition que (Ya-Yb) soit un float (une quantité qui tend vers 0 mais différent de zéro); c'est pour ça que je ne met plus la condition "..!=0". Mon but était d'attribuer les coordonnées de mon Point B à mon Point A (Xa=Xb et Ya=Yb) et ainsi de suite pour étudié la pente entre des points successif donné par l'utilisateur. J'aurais finalement incrémenté une variable à chaque changement de sens mais heureusement j'ai changé d'idée ^^. Je crois que j'ai mis aussi la condition pour que le compteur soit "..>1" (initialisé à 1) pour éviter d'aller chercher deux coordonnées précédentes qui n'existe pas.

  9. #9
    Membre chevronné
    Avatar de emixam16
    Homme Profil pro
    Chercheur en sécurité
    Inscrit en
    Juin 2013
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chercheur en sécurité

    Informations forums :
    Inscription : Juin 2013
    Messages : 333
    Points : 1 827
    Points
    1 827
    Par défaut
    Je crois que tu n'as pas compris le message de Sve@r.

    Ce qu'il t'expliquait, c'est que le "%d" tronque les nombres à la valeur entière la plus proche. Par exemple affiche 1.

    Ce que tu veux c'est un un résultat à virgule flottante. Tu dois donc utiliser "%f" ou "%lf". Ainsi, affiche 1.20000000... Et c'est ce que tu souhaites!

    Plus d'informations sur printf ici http://manpagesfr.free.fr/man/man3/printf.3.html

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    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 631
    Points : 30 865
    Points
    30 865
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Magnum8760 Voir le message
    Citation Envoyé par emixam16 Voir le message
    Je crois que tu n'as pas compris le message de Sve@r.
    Hé oui. C'était de l'ironie. Si tu avais un peu plus décortiqué les bouquins de C tu aurais eu ta réponse.

    Citation Envoyé par emixam16 Voir le message
    Ce qu'il t'expliquait, c'est que le "%d" tronque les nombres à la valeur entière la plus proche. Par exemple affiche 1.

    Ce que tu veux c'est un un résultat à virgule flottante. Tu dois donc utiliser "%f" ou "%lf". Ainsi, affiche 1.20000000... Et c'est ce que tu souhaites!
    Attention, il y a en plus le souci de la division en int à gérer. Parce que même avec "%f", afficher 1 / 3 donnera 0 (0.0000 plus exactement).

    Citation Envoyé par Magnum8760 Voir le message
    Honnetement je ne sais pas plus, le compilateur va m'afficher un +INF ou -INF à condition que (Ya-Yb) soit un float (une quantité qui tend vers 0 mais différent de zéro); c'est pour ça que je ne met plus la condition "..!=0".
    C'est vrai que les conditions avec les float c'est un peu de la logique floue (due surtout au codage interne du float dans le bouzin). C'est pour ça que si on doit comparer un float "f" avec une valeur "v", on n'écrit pas f == v mais (f - v) < EPSILON (après avoir défini EPSILON à 1e-10 par exemple).
    Toutefois tu n'es pas obligé d'avoir tes variables en float pour calculer en float. Le cast c'est pas fait que pour faire joli...

    Citation Envoyé par Magnum8760 Voir le message
    Mon but était d'attribuer les coordonnées de mon Point B à mon Point A (Xa=Xb et Ya=Yb) et ainsi de suite pour étudié la pente entre des points successif donné par l'utilisateur.
    Ben oui, c'est un peu ce que je t'ai dit de faire aussi...
    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]

  11. #11
    Membre du Club
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    J'avais pour devoir de calculer le nombre de changement de sens du mouvement mélodique et donc le problème est résolu

    Exemple : 440 231 134 182 143 on a un mouvement mélodique descendant (440 231 134), puis un mouvement mélodique ascendant (134 182) puis un descendant à nouveau (182 143).

    Le tout étais d'allé chercher la frequenceActuel et la comparer à ma frequencePrecedente pour connaître le sens du mouvement mélodique à chaque point donné par l'utilisateur/à chaque itération Et à condition qu'il y ai eu une Fréquence précédente.
    Une autre idée étais de comparer la frequencePrecedentePrecedente, avec ma frequencePrecedente et Actuel pour connaitre un éventuel changement de direction... ça implique d'initialiser mes variables FPP=FP et FP=Frequence avant le début de chaque nouvelle boucle.

    Merci pour les infos utiles et supplémentaire..

    Citation Envoyé par Sve@r Voir le message
    C'est vrai que les conditions avec les float c'est un peu de la logique floue (due surtout au codage interne du float dans le bouzin). C'est pour ça que si on doit comparer un float "f" avec une valeur "v", on n'écrit pas f == v mais (f - v) < EPSILON (après avoir défini EPSILON à 1e-10 par exemple).
    (f - v) < EPSILON !!!? ça me semble être une bizarrerie de C ça. Celà ne suffirais pas de lire mon expression arthmétique (f - v) avec un %d ou %i mais bon autant pour moi si je veux utiliser ma valeur qui tend sous zéro ou au dessus de zéro, il vaut peut être mieux restreindre l'infini, non ??

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    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 631
    Points : 30 865
    Points
    30 865
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Magnum8760 Voir le message
    (f - v) < EPSILON !!!? ça me semble être une bizarrerie de C ça.
    Absolument pas. C'est une bizarrerie due à la façon dont l'ordinateur converti un nombre décimal en base 2.

    La méthode de conversion est la suivante: multiplier la partie décimale par 2, garder la partie entière d'un côté tout en la mettant à 0 pour l'itération suivante. Et s'arrêter quand on obtient 0.0
    Exemple: 0.625
    • 0.625 * 2 = 1.25 => je garde "1" et je récupère 0.25
    • 0.25 * 2 = 0.5 => je garde "0" et je récupère 0.5
    • 0.5 * 2 = 1.0 => je garde "1" et je récupère 0.0 et c'est terminé

    Ainsi 0.625(10)=0.101(2) ce qui équivaut effectivement à 2^(-1) + 2^(-3)

    Mais parfois la conversion ne tombe pas juste. Exemple 0.7
    • 0.7 * 2 = 1.4 => je garde "1" et je récupère 0.4
    • 0.4 * 2 = 0.8 => je garde "0" et je récupère 0.8
    • 0.8 * 2 = 1.6 => je garde "1" et je récupère 0.6
    • 0.6 * 2 = 1.2 => je garde "1" et je récupère 0.2
    • 0.2 * 2 = 0.4 => je garde "0" et je récupère 0.4 => valeur déjà obtenue en amont => boucle infinie

    Ainsi 0.7 est un tout petit peu plus grand que 0.10110 et un tout petit peu plus petit que 0.10111 (et aussi un tout petit peu plus grand que 0.101100 et un tout petit peu plus petit que 0.101101) mais impossible à définir avec précision. Cela n'est donc pas la faute au langage mais à la méthode (méthode qui toutefois, convient pour la grande majorité des cas car bien souvent on se fout de la 5° décimale). Et donc comparer "a" calculé comme (0.3 + 0.1) avec "b" calculé comme (0.5 - 0.1) peut ne pas être vrai pour la bécane.

    Et d'ailleurs (démo en Python plus rapide à coder qu'en C)
    Nom : Sans titre.jpg
Affichages : 381
Taille : 60,6 Ko
    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]

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

Discussions similaires

  1. pente d'une droite
    Par mayno1111 dans le forum MATLAB
    Réponses: 6
    Dernier message: 05/01/2012, 21h46
  2. pente d'une droite
    Par inès83 dans le forum Images
    Réponses: 5
    Dernier message: 06/11/2009, 12h56
  3. Déplacement d'une Cible sur une droite
    Par kurul1 dans le forum C++Builder
    Réponses: 10
    Dernier message: 11/07/2005, 17h44
  4. Comptage de voxels traversés par une droite 3D
    Par mathieu_t dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 27/04/2005, 17h33
  5. [MATH] Point par rapport à une droite
    Par teska dans le forum Mathématiques
    Réponses: 6
    Dernier message: 14/05/2003, 17h11

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