Inscription / Connexion Nouveau Sujet
Niveau seconde
Partager :

DM de math

Posté par
lily768231
15-10-16 à 17:07

Bonjour j'ai un DM a rendre lundi et je comprend pas trop

Ecrire un algorithme qui demande à l'utilisateur les coordonnées de 4 points A, B, C et D ,  puis qui affiche la nature du quadrilatère ABCD (parallélogramme , rectangle , losange , carré , etc...)  

merci

Posté par
Jedoniezh
re : DM de math 15-10-16 à 17:08

Bonjour,

Je n'aime pas trop les algotrucs mais que ne comprends tu pas ?

Posté par
lily768231
re : DM de math 16-10-16 à 01:38

Je ne comprend pas comment faire l'algorithme

Posté par
yaxkin
re : DM de math 16-10-16 à 03:14

Entrer Xa =
Entrer Ya =
Entrer Xb =
Entrer Yb =
etc..

VARIABLES :

Xv1 = Xb-Xa  
Xv1' = Xc-Xd
Xv2 = Xc-Xb;
Xv2' = Xd-Xa;
Xdiag = Xb-Xd;

Yv1 = Yb-Ya
Yv1' = Yc-Yd
Yv2 = Yc-Yb;
Yv2' = Yd-Ya;
Ydiag = Yb-Yd;

Rect = 0;

DEBUT ALGO

Si (Xv1 = Xv1' et Yv1 = Yv1')
{
        Si (Xv2 = Xv2' et Yv2 = Yv2')
        {
                Ecrire "ABCD est un parallèlograme"
        Sinon
                Ecrire "ABCD est un trapèze"
        }
}
Sinon quitter algorithme

Si ( (Xv1²+Yv1²) + (Xv2²+Yv2²) = (DiagX²+DiagY²) )
{
        Ecrire "ABCD est un rectangle"
        Rect = 1;
}
Sinon ne rien faire et continuer

Si (Xv1² + Yv1² = Xv2² + Yv2²)
{
        Si rect = 1
        {
                Ecrire "ABCD est un carré"
        }
        Sinon
        {
                Ecrire "ABCD est un losange"
        }
}

FIN

Posté par
lily768231
re : DM de math 16-10-16 à 11:16

merci beaucoup yaxkin  

Posté par
mathafou Moderateur
re : DM de math 17-10-16 à 00:26

Bonsoir,

cet algorithme est malheureusement faux ...

Si (vecAB = vecDC) (c'est ce qui est testé)
{
Si (vecBC = vecDA)
// loufoque, la première condition suffit pour affirmer que c'est un parallélogramme
{
Ecrire "ABCD est un parallèlograme"
Sinon
Ecrire "ABCD est un trapèze"
// ça n'a jamais lieu parce que si vecAB = vecDC alors obligatoirement (Chasles) vecBC aussi = vecDA
}
}
Sinon quitter algorithme
// les trapèzes ne sont donc pas détectés, et confondus avec les quadrilatères quelconques
// et dans ce cas l'algorithme ne dit rien du tout

de plus il dit par exemple pour un rectangle

"ABCD est un parallèlogramme" suivi de
"ABCD est un rectangle"
(il dit les deux)


méthode pour faire des algorithmes :

se poser les bonnes questions sur ce qu'on cherche à calculer / prouver etc et comment
pour en déduire un plan des opérations à effectuer et de leur enchainement

ça c'est à faire en premier et pas à se précipiter sur un clavier d'ordi ou de calculette pour écrite du code...

ici la bonne question est comment je peux savoir, moi, quelle sorte de quadrilatère est ce ?
et d'abord quelles sont les sortes de quadrilatères et leurs caractéristiques (longueurs des côtés, des diagonales, angles droits, côtés parallèles ou pas, lesquels, milieux etc...)

je résume ce que je dois tester de façon logique compte tenu de "l'arbre" des quadrilatères :

DM de math

qui dit que un carré est une sorte de rectangle qui lui-même est une sorte de parallélogramme qui est une sorte de trapèze etc
(chaque flèche dans ce diagramme dit que ce qui est au dessus est "une sorte de" ce qui est en dessous)
un carré est à la fois une sorte de rectangle (un rectangle avec les côtés égaux) et une sorte de losange (un losange avec un angle droit)

cette phase est indispensable pour imbriquer correctement les tests à effectuer.
ensuite je recense toutes les propriétés et je choisis celles que je vais utiliser

ne tester que des longueurs ne permettra pas de distinguer un trapèze d'un quadrilatère quelconque : il faut donc obligatoirement que je teste des parallélismes dans mes tests.

le type le plus "fruste" qui n'est pas un quadrilatère quelconque est le trapèze
tout le reste seront "des sortes de trapèze"

donc je dois commencer par tester :
si AB parallèle à CD et de sens contraire, ou si AD parallèle à CB et de sens contraire
alors c'est une sorte (à préciser ultérieurement) de trapèze
sinon c'est un quadrilatère quelconque. (on ne dit rien de ABDC)

maintenant il faut que je précise dans le cas où c'est une sorte de trapèze, de quelle sorte il s'agit.
si vecAB parallèle à vecCD et de sens contraire, ou si vecAD parallèle à vecCB et de sens contraire
alors commentaire : c'est une sorte de trapèze
si vecAB = vecDC
alors c'est une sorte de parallélogramme
sinon ce n'est effectivement qu'un trapèze, je peux l'affirmer.
sinon c'est un quadrilatère quelconque, je peux l'affirmer

etc. de proche en proche critère par critère je construis le "squelette" de mon algorithme.

je traduis ensuite mes conditions par des calculs mathématiques
par exemple "si AB // CD" se traduira par une condition de colinéarité, assortie d'un test sur le sens pour éliminer les quadrilatères croisés.

je soupçonne que le prof qui a posé un tel exo dans une classe de finalement débutants en algorithmes n'a certainement pas pensé réellement à la difficulté d'identifier correctement le type de quadrilatère quelles que soient les coordonnées fournies !!

Posté par
mathafou Moderateur
re : DM de math 17-10-16 à 00:29

lire "vecBC = vecAD", pas vecDA

Posté par
yaxkin
re : DM de math 17-10-16 à 16:39

Ah oui pardon il était tard et j'avais pas mon "arbre des quadrilatères" sous la main.
Moi je lui ai pondu une charpente de code.. à elle de fignoler.  lily768231 si tu t'es planté et c'est ta faute, t'avais qu'à vérifier! Enfin j'espère que t'as corrigé.

La première condition suffisait en effet et était incomplète, elle aurait aussi du tester la colinéarité possible des deux autres vecteurs, la 2ème condition n'est donc plus pertinente pour départager le parallélogramme du trapèze.
Il s'agit de "conditions imbriquées", les tabulations et les accolades servent à rendre lisible l'imbrication et les instructions à exécuter.
Le code peut toujours détecter des trapèzes mais une fois sur 2.  
Si deux côtés adjacents élevés au carré sont égal au carré de la diagonale, cela implique un angle droit donc ABCD est rectangle et je dis les deux, parallélogramme et rectangle parce que je considère le rectangle comme un cas particulier de parallélogramme et le carré comme un cas particulier de rectangle
Lorsque tout les côtés sont égaux si rect=1 (sert a éviter de réitérer la condition de l'angle droit) alors ABCD est carré et sinon losange.

Posté par
yaxkin
re : DM de math 17-10-16 à 16:43

Ah non même pas une fois sur 2
Le test de colinéarité n'est pas valide

Posté par
mathafou Moderateur
re : DM de math 17-10-16 à 17:19

c'est ce que j'ai dit, il n'est pas incomplet il est carrément faux..
colinéarité ne veut pas dire égaux !!

vecteurs égaux : Si (Xv1 = Xv1' et Yv1 = Yv1')

vecteurs colinéaires : Si (Xv1.Yv1' = Xv1'.Yv1)
et en plus pour que ça colle il faut que les vecteurs soient non seulement colinéaires mais dans le bon sens

pour des vecteurs déja colinéaires, ils seront dans le même sens ou dans le sens contraire selon le signe de Xv1.Xv1' et de Yv1.Yv1'
il faut tester les deux, un seul suffirait si les vecteurs n'étaient jamais horizontaux ni verticaux

avec des vecteurs horizontaux il faut tester Xv1.Xv1' car Yv1.Yv1' = 0
et le contraire pour des vecteurs verticaux
(et si les vecteurs ne sont pas colinéaire ça n'a aucun sens)

l'expression "si AB et CD sont colinéaires et de sens contraire" se traduit donc par
si (xAB.yCD = xCD.yAB et (xAB.xCD <0 ou yAB.yCD<0))


pas si simple n'est-ce pas ...

on aura donc comme je le disais (en appelant xAB = xB - xA coordonnées du vecteur AB etc plutôt que des v1 dont il faut se reporter à chaque instant à la définition pour savoir ce qu'ils représentent)

si (xAB.yCD = xCD.yAB et (xAB.xCD <0 ou yAB.yCD<0))
// alors c'est une sorte de trapèze de bases AB et CD
si (xAB = -xCD et yAB = -yCD)
// alors ces vecteurs ne sont pas seulement colinéaires mais égaux (opposés en fait compte tenu du nommage)
// c'est donc une sorte de parallélogramme
// tester d'autres conditions supplémentaires ici pour savoir si ce parallélogramme est un rectangle, un carré,
// un losange ou un simple parallélogramme
// ...
sinon // les vecteurs ne sont pas égaux, simplement colinéaires
// c'est un trapèze de bases AB et CD
// on peut tester d'autres conditions pour savoir si c'est un trapèze rectangle ou isocèle ou un trapèze quelconque
// ...
sinon
// les droites (AB) et (CD) ne sont pas parallèles
si (xAD.yBC = xBC.yAD et (xAD.xBC >0 ou yAD.yBC>0))
// alors c'est un trapèze de base AD et BC
// ici on sait que ça ne peut pas être un parallélogramme car sinon cela aurait été détecté par (AB) // (CD) dans l'autre branche
// inutile donc de tester si c'en est un !!
// par contre on peut remettre les tests pour "trapèze rectangle ou isocèle", car ce n'est pas les mêmes que précédemment
// (pas les mêmes bases donc pas les mêmes tests)
// ...
sinon
// c'est un quadrilatère quelconque
fin



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !