RÉCIPROQUE DU THÉORÈME DE PYTHAGORE

geantfire Messages postés 17 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 12 mars 2008 - 15 déc. 2007 à 19:59
guignol71 Messages postés 29 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 10 janvier 2011 - 24 déc. 2007 à 12:13
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45073-reciproque-du-theoreme-de-pythagore

guignol71 Messages postés 29 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 10 janvier 2011
24 déc. 2007 à 12:13
Autant pour moi Yoman64!
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
24 déc. 2007 à 12:03
Salut,
petite précision (désolé, je ne peux pas m'empecher la remarque:)), é n'est pas une valeur ASCII, la valeur ascii de 'é' est 233, é et cie sont des "entitées html" (J'ai peut être pas la bonne traduction, je ne connais que le terme anglais html entities). Pour utiliser sa valeur ascii pure tu peux toujours faire é

Mais c'est un bon conseil, encodage correct ou pas, il y a toujours une possibilité que les accents s'affiche mal sous certain navigateur/plateforme, du coup les entitées assure que les accents vont être bien affiché :)

Voici une référence http://en.wikipedia.org/wiki/Html_entities
geantfire Messages postés 17 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 12 mars 2008
24 déc. 2007 à 10:46
Ok je vais changer ça, merci pour le brevet.
guignol71 Messages postés 29 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 10 janvier 2011
24 déc. 2007 à 10:44
Petit détail : pour tes accents pense à les mettre sous leur valeur ASCII, ex : remplace tes é par é et ce sera un bon début pour être aux normes W3C...
Sinon merde pour ton brevet l'année prochaine.
geantfire Messages postés 17 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 12 mars 2008
20 déc. 2007 à 17:41
Alors, je suis bon dans toutes les matières surtout les maths mais là >< J'ai rien compris
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
20 déc. 2007 à 03:13
geantfire Messages postés 17 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 12 mars 2008
19 déc. 2007 à 12:58
Bah je précise je suis en 4eme au collège et le codage, c'est juste parce que j'adore l'ordinateur et le code. Et non je sais pas ce que c'est les... Les quoi déjà ? Ah oui les reperes orthonomes.
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
18 déc. 2007 à 23:13
Oui bon Pour sqrt c'est la rapidité de ma réponse, en fait c'est le fait d'utilser un repère qui permet cela.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 déc. 2007 à 23:08
quel rapport entre === et sqrt ? le probleme dans mon code n'etait pas sur sqrt... il etait sur le typage plus generalement...
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
18 déc. 2007 à 23:05
Coucou,
pour la classe point, tu as as raison, mais j'ai mis ce bout de code en connaissance de cause et le but était d'être pedagogue (et pour ne pas brûler les étapes) : A 13 ans tu ne connais pas forcément l'objet (dans 99.9999% des cas).Et pour le === : je n'ai pas mis de sqrt donc aucun pb.
Et en plus dans mon bout de code si j'avais voulu être d'equerre, j'aurais mis un test sur les types car là ça peut renvoyer true si tu ne passes pas un NULL en param

Moi je connaissais même pas la prog à ce t'age là.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 déc. 2007 à 22:55
c'est beaucoup plus lourd pour ton serveur...
dvdstory Messages postés 192 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 10 août 2009
18 déc. 2007 à 22:52
Et si je confirme, j'utilise bien Ajax, seulement du texte, je n'utilise pas la structure xml lorsque je communique avec le serveur.
je suis d'accors on aurait pu le faire en Javascript, mais mon code PHP fait quand même 800 lignes de code pour le mode avancé et 300 pour le mode basic. Je trouve ça quand meme un peu lourd a charger en plus dans le navigateur internet, il y a déja l'index(XHTML), les 2 fichiers css (un pour l'écran et l'autre pour l'imprimante) et les images.
Et cela consomme moins de resource pour l'internaute (mais plus pour le serveur) et consomme moins de bande passante pour les 2 (internaute et serveur).
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 déc. 2007 à 22:36
les globales c'est le mal...

n'utilise pas pow pour calculer un carre, pow utilise a^b=e^(b*ln(a)) et c'est moche car tu perds en precision...

pour les === ici tu ne dois pas avoir trop de problemes, du fait du retour de pow...

plutot que de passer des array, tu devrais faire une class Point tout simplement

dvdstory, j'espere que ce que tu dis est faux... j'espere que ce site ne fait pas d'ajax pour ca... ca n'a aucun interret, autant tout faire en javascript...
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
18 déc. 2007 à 22:08
Salut,
@geantfire=>je sais pas si tu apprends les repères orthonormés( ça fait un peu loin la 4éme pour moi) mais pourquoi ne passerais-tu pas en paramètre les coordonnées des points dans le plan sous forme de tableau? à moins que tu aies fait ce code dans le but d'un exercice bien défini:
Bon comme ça m'amuse un exemple:

$triangle1=array('A'=>array('x'=>1,'y'=>2),
'B'=>array('x'=>4,'y'=>5),
'C'=>array('x'=>0,'y'=>2)) ;

$triangle2=array('A'=>array('x'=>0,'y'=>0),
'B'=>array('x'=>0,'y'=>1),
'C'=>array('x'=>1,'y'=>1)) ;
function isRectangle($aPts)
{
/**
comme il me semble
AB² = (Xb-Xa)² + (Yb-Ya)²
cela revient à écrire $CarreAB=pow(($aPts['B']['x']-$aPts['A']['x']),2)+pow(($aPts['B']['y']-$aPts['A']['y']),2);
idem Pour BC² et AC²
*/
$CarreAB=pow(($aPts['B']['x']-$aPts['A']['x']),2)+pow(($aPts['B']['y']-$aPts['A']['y']),2);
$CarreBC=pow(($aPts['C']['x']-$aPts['B']['x']),2)+pow(($aPts['C']['y']-$aPts['B']['y']),2);
$CarreAC=pow(($aPts['C']['x']-$aPts['A']['x']),2)+pow(($aPts['C']['y']-$aPts['A']['y']),2);
/**
soit tu fais
*/
return ( ($CarreAB===$CarreBC+$CarreAC || $CarreAC===$CarreBC+$CarreAB) || $CarreBC === $CarreAC+$CarreAB );

/**
ou sinon si tu préfères (c'est peut plus compréhensible sous cette forme)
*/

if ( $CarreAB===$CarreBC+$CarreAC )
return true;
if ( $CarreAC===$CarreBC+$CarreAB )
return true;
if ( $CarreBC === $CarreAC+$CarreAB )
return true;

return false;
}

if (isRectangle($triangle1))
echo '
rectangle';
else echo '
pas rectangle';

if (isRectangle($triangle2))
echo '
rectangle';
else echo '
pas rectangle';


Et si tu veux récupérer la longueur de l'hypothénuse eh ben là, faut apprendre à utiliser les variables globales , ou comme l'a dit malalam par reference (je dis ça mais la, t'as le temps pour ça...)
dvdstory Messages postés 192 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 10 août 2009
18 déc. 2007 à 22:08
J'en profite pour me faire un peu de pub a propos d'une application web sur le théorème et la réciproque de Pythagore programmé en PHP et en JavaScript (utilisation d'Ajax). Disponible à l'adresse http://www.egrunenberger.com/pythagore/
N'oubliez pas de mettre le mode avancé pour avoir toute les foctions, vous verez c'est bien fait, j'ai pas encore trouvé mieux.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
17 déc. 2007 à 21:28
moi ce qui me fait marrer, c'est que quand on regarde le code de depart, et les codes que vous avez envoye pour corriger, le sien correspond au moins a ce qu'on entend des procedures sur les bancs des cours d'infos... (une procedure, c'est un truc qui sert a faire des choses... c'est a peu de choses pres notre definition des procedures)

vous vous codez en php et pas en pascal alors pour vous, une fonction ca calcule (comme en math), ca a des entrees et une sortie, mais n'affiche rien (c'est pas son role), sauf que vos exemples ne sont pas coherents... le sien, correspond par contre a ce que le prof pense des procedures...

enfin j'ai pas dit qu'en php, ce qu'il a fait devait se faire... mais en algorithmique imperative comme ce que l'on voit en cours, c'est correct... contrairement a vos deux exemples...
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
17 déc. 2007 à 21:18
Il est vrai que le passage par référence n'est pas tout a fait adapter a ce cas précis. Mais si l'on souhaite faire ce genre de fonction, le renvois d'un true ou false est le plus approprié que de renvoyer un array.

Je crois que si l'on a besoin de savoir les valeurs des deux carrés, alors il est plus avantageux de les calculer sans faire appel a une fonction qui retourne un array, non? (Je dis ça tout naivement, c'est une question , je veux savoir selon vous si l'interet de retourner un array dans ce cas précis est justifié)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
17 déc. 2007 à 18:39
php n'est pas fait pour faire des maths, mon exemple le montre plutot bien... la gestion des variables en php devrait permetre d'eviter les casts, alors qu'en fait...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 déc. 2007 à 18:25
@Coucou => le triple égal est de toute manière plus rapide. Et j'attends bien 2 types identiques. Il est anormal de jouer avec des flottants et des entiers sans en tenir compte...mon code était juste un exemple sur les références. Si je faisais un code "matheux", je casterai mes valeurs, perso. Et je n'autoriserai que des flottants dans ce cas précis.

Si j'ai retourné les deux valeurs, c'est parce que je m'attends à ce que l'auteur modifie encore mon code...parce que l'idéal est de trouver le moyen (et c'est fgacile), de retourner les valeurs dans les 2 cas, tout en indiquant que dans un cas on est ok, dans l'autre non. Mais c'est facile, ça coule de source. Ma réponse était juste pour Yoman en fait comme je le dis plus haut : juste un exemple sur comment se passer du passage par référence. Mais le mieux est de retourner tes 2 valeurs dans tous les cas...et c'est plus juste : j'attends 2 valeurs, pas une, le carré des côtés et le carré de l'hypothénuse.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
17 déc. 2007 à 18:15
sur une source qui a l'air d'avoir un point commun avec les mathematiques...

if($carre_hypothenuse === $carre_cotes) {
return array($carre_hypothenuse, $carre_cotes);
} else {
return false;
}

je trouve ce morceau de code marrant, en effet, si deux nombres sont egaux, alors ... on renvoie ... un tableau qui contient deux fois ce nombre... formidable non ?

malalam, de plus, ton === n'a pas sa place ici :

max@debian:~$ php -r '$ab=sqrt(0.5); $bc=sqrt(3.5); $b=$ab*$ab+$bc*$bc; echo $b."\n".gettype($b)."\n"; $c=4; echo (($b==$c)?'OK':'NOK')."\n";'
4
double
OK
max@debian:~$ php -r '$ab=sqrt(0.5); $bc=sqrt(3.5); $b=$ab*$ab+$bc*$bc; echo $b."\n".gettype($b)."\n"; $c=4; echo (($b===$c)?'OK':'NOK')."\n";'
4
double
NOK
max@debian:~$
geantfire Messages postés 17 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 12 mars 2008
17 déc. 2007 à 18:04
Alors je met quoi ? Une fonction qui renvoi TRUE ou FALSE ou autre chose ??
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 déc. 2007 à 18:00
Hello,

@Yoman, ce n'est pas très joli ce que tu fais là. 2 variables passées dans une fonction que tu vas redéfinir de toute manière, ce juste pour les afficher sans faire de return dessus...
Beaucoup de fonctions PHP retourne une valeur, un tableau, une ressource etc...ce qu'elles doivent retourner en cas de succès, et false en cas d'échec. Autant garder ce principe. Le passage par référence doit être utilisé dans des buts bien précis, quand on a bien une valeur en amont d'une fonction, et que cette fonction DOIT modifier cette valeur en tenant compte de son origine.

<?php
function reciproqueDePythagore($hypothenuse, $AB, $CA) {
$carre_hypothenuse = $hypothenuse * $hypothenuse;
$carre_cotes = $AB * $AB + $CA * $CA;
if($carre_hypothenuse === $carre_cotes) {
return array($carre_hypothenuse, $carre_cotes);
} else {
return false;
}
}

$aReturn=reciproqueDePythagore(5, 4, 3);
if (is_array($aReturn)) {
echo "Donc ce triangle est rectangle d'apres la réciproque du théorème de Pythagore.";
echo "Le carré de l'hypothenuse est égal à : ".$aReturn[0]."
";
echo "Le carre des deux côtés est égal à : ".$aReturn[1];
} else {
echo "Donc ce triangle n'est pas rectangle d'apres la réciproque du théorème de Pythagore.";
}
?>
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
16 déc. 2007 à 13:07
Il n'est pas vraiment utile, c'est juste si tu souhaite affiché certaine choses comme tu le fais :

par exemple toi tu affichais dans ta fonction:

echo "Le carré de l'hypothenuse est égal à : ".$carre_hypothenuse."
";
echo "Le carre des deux côtés est égal à : ".$carre_cotes;

et bien c'est toujours possible en le sortant de la fonction , par exemple:

<?php
function reciproqueDePythagore($hypothenuse, $AB, $CA, &$carre_hypothenuse=0, &$carre_cotes=0)
{
$carre_hypothenuse = $hypothenuse * $hypothenuse;
$carre_cotes = $AB * $AB + $CA * $CA;
if($carre_hypothenuse == $carre_cotes)
return true;
else
return false;
}

$p=reciproqueDePythagore(5, 4, 3,$carre_hypothenuse,$carre_cotes);

echo "Le carré de l'hypothenuse est égal à : ".$carre_hypothenuse."
";
echo "Le carre des deux côtés est égal à : ".$carre_cotes;


if ($p)
echo "Donc ce triangle est rectangle d'apres la réciproque du théorème de Pythagore.";
else
echo "Donc ce triangle n'est pas rectangle d'apres la réciproque du théorème de Pythagore.";

?>
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 déc. 2007 à 11:48
ici, il n'a probablement pas son utilite
geantfire Messages postés 17 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 12 mars 2008
16 déc. 2007 à 11:45
Humm oui mais la je t'avoue le signe & je comprends pas ce que tu veux en faire.
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
16 déc. 2007 à 11:36
C'est bien de commencer, mais tu es mieu d'écouter les conseils dès maintenant sinon tu vas être perdu plus tard :P.

Ils ont raison, du html dans une fonction c'est jamais bon puisque ça réduit considérablement sont utilitée... On ne pourrait pas s'en servir dans un autre projet sans la modifier par exemple.

<?php
function reciproqueDePythagore($hypothenuse, $AB, $CA)
{
$carre_hypothenuse = $hypothenuse * $hypothenuse;
$carre_cotes = $AB * $AB + $CA * $CA;
if($carre_hypothenuse == $carre_cotes)
return true;
else
return false;
}

if (reciproqueDePythagore(5, 4, 3))
echo "Donc ce triangle est rectangle d'apres la réciproque du théorème de Pythagore.";
else
echo "Donc ce triangle n'est pas rectangle d'apres la réciproque du théorème de Pythagore.";
?>

C'est pas très mélangeant.
Tu peux égallement ajouté un signe "&" devant les arguments dans ta fonction pour récuperé leurs valeur et les afficher en dehors de la fonction
geantfire Messages postés 17 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 12 mars 2008
16 déc. 2007 à 11:10
Désolé mais je prefère la garder comme ça parce que comme je commence le PHP je prefere ne pas me melanger.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 déc. 2007 à 01:32
idem, et afficher des valeurs pleines de chiffres ca sert a rien... autant minimiser le nombre de variables utilisees et ne pas faire de calculs intermediaires
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
16 déc. 2007 à 00:47
+1 avec Codefalse. C'est la première impression que j'ai eue en voyant ton code...
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
16 déc. 2007 à 00:37
essaye de séparer le code html de ta fonction

ta fonction retourne une valeur, et tu gere le html en dehors de ta fonction ! :)
geantfire Messages postés 17 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 12 mars 2008
15 déc. 2007 à 19:59
C'est ma première source donc je voudrais vos avis s'il vous plait.
Rejoignez-nous