Inscription / Connexion Nouveau Sujet
Niveau terminale
Partager :

algorithme couples equation maths spé

Posté par
loulamb
23-01-16 à 13:53

Bonjour,
Alors voilà, j'ai un Dm en maths spé qui consiste à écrire un algorithme pour trouver les couples (x,y) compris entre -50 et 50 tels que 39x+27y=18.

J'ai commencé à faire:

Variables: x un entier naturel
                        y un entier naturel
traitement:
pour y allant de -50 à50
pour x allant de -50 a 50
si
39x+27y=18
tant que 39x+27y=18
afficher x
afficher y
sinon

(je voudrais marquer qu'il faut recommencer jusqu'à ce que l'on trouve mais je sais pas quoi mettre)

fin si
fin pour

Surtout que je pense que cette algorithme affichera un seul couple et pas les autres demander.


Sinon je pensais pouvoir demander a la calculette avec ranInt#(-50,50)  d'appliquer un nombre aléatoire à x et y pour que la calculette puisse donc calculer tout les couples possibles et qu'elle me les affichent ensuite . Mais je ne sais pas comment procéder.

Merci d'avance pour votre aide,
Lou

Posté par
mathafou Moderateur
re : algorithme couples equation maths spé 23-01-16 à 14:34

Bonjour,

il y a deja les deux boucles "pour" imbriquées pour balayer toutes les valeurs, pourquoi voudrais tu rajouter encore un "tant que" ???
c'est totalement inutile et ça ne rime à rien, raison pour laquelle tu n'arrives pas à l'écrire.

l'affichage il est dans le "si" et c'est tout
et ce si va être exécuté 10000 fois, c'est à dire pour chaque couple (x, y) solution ou pas, et fera cracher toutes les solutions trouvées

à la fin tu dois par contre avoir deux "fin pour"
un premier pour la fin de la boucle la plus interne (le pour x)
et un deuxième pour la fin de la boucle pour y

Posté par
Taly
re : algorithme couples equation maths spé 23-01-16 à 14:38

Puis n'oublie pas d'indenter tes boucles

pour x allant de -50 à 50
   pour y allant de -50 à 50
      si 39x + 27y = 18
         afficher (x,y)

Etc
C'est très important, surtout si un jour tu programmes sur python par exemple.
Ah et petit détail : on dit spé maths ! Parce que maths spé désigne une deuxième année de prépa scientifique

Posté par
loulamb
re : algorithme couples equation maths spé 23-01-16 à 14:41

merci,
voilà donc ma nouvelle proposition :

Variables: x un entier naturel
                        y un entier naturel
traitement:
pour y allant de -50 à50
pour x allant de -50 à50
39x+27y=18
afficher x
afficher y
sinon

(je voudrais marquer qu'il faut recommencer jusqu'à ce que l'on trouve mais je sais pas quoi mettre)

fin si
fin pour
fin pour


Mais que mettre dans la boucle sinon,
je ne sais pas comment dire à la calculette de recommencer à proposer des y et x jusqu'à se qu'elle trouve toutes les solutions .

Posté par
mathafou Moderateur
re : algorithme couples equation maths spé 23-01-16 à 14:44

le problème de l'indentation "à la Python" est qu'on voit beaucoup moins clairement les "fin"
et donc ce n'est pas recommandé aux débutants.
il vaut mieux leur faire écrire ces "fin" explicitement.
(et mettre en plus l'indentation, histoire de prendre des bonnes habitudes)


pour x allant de -50 à 50
pour y allant de -50 à 50
si 39x + 27y = 18
afficher (x,y)
fin si
fin pour
fin pour

Posté par
loulamb
re : algorithme couples equation maths spé 23-01-16 à 14:44

oui, merci Taly  (spé maths)  

oui, il faut indenter mais je compte le faire sur la calculatrice,  parce que je maitrise pas encore assez bien python(je fais une double spé: maths et isn).

Posté par
mathafou Moderateur
re : algorithme couples equation maths spé 23-01-16 à 14:46

sinon, rien
sinon ça continue les boucles pour.

et si oui aussi d'ailleurs

dans tous les cas après le finsi ça continue à balayer toutes les valeurs.

et du coup il est même totalement inutile de l'écrire ce sinon.

Posté par
loulamb
re : algorithme couples equation maths spé 23-01-16 à 14:48

je n'ai donc pas besoin de mettre de sinon ?

mais si je met pour x allant de -50 à 50  et y allant de -50 à 50 , la calculatrice va t'elle me proposer des couples comme x=-29 et y=35
ou alors va t'elle faire exclusivement des couples comme x=-40 et y=-40?
va t'elle prendre des chiffres x et y aléatoirement dans l'intervalle -50 ; 50?

Posté par
mathafou Moderateur
re : algorithme couples equation maths spé 23-01-16 à 15:01

"aléatoire" est une très mauvaise idée ça ne marcherait pas (ou alors si, ça va te donner des résultats aléatoires : plusieurs fois les mêmes ou pas et certaines jamais trouvées et comment saurais tu que tu les as toutes essayées ???
c'est absurde

par contre le fonctionnement des deux boucles pour imbriquées (l'une à l'intérieur de l'autre) fera que tous les couples possibles seront tous essayés

première exécution du pour x, x vaut -50
maintenant on fait varier y de - 50 à +50
ce qui va donner (-50, -50), (-50, -49), ... (-50, +50)
fin de la boucle pour y
et poursuite de la boucle pour x par la valeur suivante : -49
et on recommence la boucle pour y de nouveau de -50 à +50
pour les couples (-49, -50), (-49, -49), ... (-49, +50)

etc

la boucle pour y est entièrement exécutée (elle fait à chaque fois ses 100 tours) et ces 100 tours de cette boucle là sont exécutes 100 fois dans la boucle externe
ce qui fait que le "si" sera exécuté 100 fois 100 fois = 10000 fois,
pour chacun des couples possibles, de tous les couples possibles

Posté par
mathafou Moderateur
re : algorithme couples equation maths spé 23-01-16 à 15:03

oui bon, de -50 à +50 inclus ça fait 101 valeurs, on n'est pas à ça près ici...

Posté par
loulamb
re : algorithme couples equation maths spé 23-01-16 à 15:16

# -*- coding: cp1252 -*-
from math import*
for x in range (-50,50):
   for y in range (-50,50):
       if 39*x + 27*y == 18:
          print(x,y)

voila mon algorithme sur python qui fonctionne
(alors que je n'arrivais pas à le programmer sur ma calculette)

résultats:

>>>
(-30, 44)
(-21, 31)
(-12, 18)
(-3, 5)
(6, -8)
(15, -21)
(24, -34)
(33, -47)
>>>


MERCI MERCI

Posté par
Taly
re : algorithme couples equation maths spé 23-01-16 à 15:23

Très bien !
Fais autant de python que tu peux quand tu as un programme sous la main. C'est mieux que la calculatrice et c'est une bonne façon de commencer à programmer. Si plus tard tu fais de l'info, tu auras moins de mal à aborder des langages plus difficiles come le C, C++ etc ...

Posté par
loulamb
re : algorithme couples equation maths spé 23-01-16 à 15:40

oui , merci encore !!!

Posté par
mathafou Moderateur
re : algorithme couples equation maths spé 23-01-16 à 15:48

noter la différence et la subtilité de vocabulaire (pas si anodine que ça du tout !!!)

algorithme : description formelle de la méthode suivie et de l'enchainement précis des opérations
un algorithme est généralement écrit dans un langage dit "naturel" (= en français plus ou moins "formalisé")

programme : traduction d'un algorithme dans un langage donné sur une machine donnée


ceci dit savoir se servir de sa calculatrice n'est pas à négliger non plus ...
insister pour le faire tourner en étudiant attentivement le mode d'emploi de la calculette pour savoir comment on traduit

pour
si
fin si
fin pour
afficher

il n'y a aucune raison de ne pas y arriver, vu que c'est le même algorithme
seule sa traduction diffère (voir la remarque du début)

Posté par
carpediem
re : algorithme couples equation maths spé 23-01-16 à 16:51

salut

ouais enfin ya beaucoup plus simple que de tout tester ....

Begin
For = x = -50 To 50
      y = (18 - 39x)/27
      If y = E(y) And |y| =< 50 Then Write x, y
End

E(y) = partie entière de Y ...

Posté par
carpediem
re : algorithme couples equation maths spé 23-01-16 à 16:52

PS : ensuite 39x + 27y = 18 est la même chose que 13x + 9y = 6 ... en plus compliqué ...

Posté par
mathafou Moderateur
re : algorithme couples equation maths spé 23-01-16 à 23:58

oui, oui,
il ne s'agissait pas de fait l'algorithme le plus subtil mais "un" algorithme qui fonctionne ..
après certes on peut améliorer énormément par rapport à faire 101² = 10201 boucles très simples, faire 101 boucles plus compliquées (enfin juste un tout petit peu plus compliquée)

en algorithme en langage naturel ça s'écrit (c'est la description formelle de la méthode, pas du détail de la bidouille pour le faire)

pour x de -50 à +50
si y = (18-39x)/27 est un nombre entier
afficher x et y
finsi
finpour

l'histoire du partie entière etc c'est du codage, pas de l'algorithme
c'est spécifique à la machine employée

peut être que la machine dispose d'une opération div(a, b) qui retourne le quotient et le reste de la division, qui sait...

Posté par
carpediem
re : algorithme couples equation maths spé 24-01-16 à 09:37

certes mais c'est une fonction mathématique ... dont j'ai utilisé la notation usuelle .... et écrit ce qu'est "être un entier" par une relation mathématique

j'ai écrit un algorithme en anglais ... comme je le fais avec tous mes élèves qui ont un oral d'anglais technique

l'avantage de l'anglais est d'être très proche des langages réels quant aux mots (du langage) utilisés

mais il reste encore du boulot pour le traduire dans le langage du machine ... donc ça n'est qu'un algorithme ....

de plus la plupart des élèves ne sauraient pas traduire "être un entier" .... même si c'est effectivement ce que l'on cherche en "langage naturel" ....

Posté par
alb12
re : algorithme couples equation maths spé 24-01-16 à 10:04

salut,
un SpeMath qui ne sait pas traduire N/27 est entier c'est assez rare, non ?

Posté par
carpediem
re : algorithme couples equation maths spé 24-01-16 à 13:29

ben non ... vu qu'ils ne connaissent que rarement la fonction partie entière ..... au lycée ....

Posté par
mathafou Moderateur
re : algorithme couples equation maths spé 24-01-16 à 18:50

mais que la fonction partie entière n'est pas la seule façon de "traduire" "est un entier"

"le reste de la division de N par 27 est nul"
ça marche aussi et dans la plupart des langages c'est plus direct que de passer par la partie entière

mébon, je dis ça je dis rien ...
l'algorithme "qui reste dans le flou" sur la façon précise de le faire couvre ce cas
et y compris le langage machine d'un microprocesseur de base qui fait "en natif" une division entière avec quotient dans un registre et reste dans un autre. en une seule instruction machine
alors que des calculs en virgule flottante pour calculer N/27 comme "nombre réel" à virgule sont énormément plus compliqués pour un tel microprocesseur, voire même impossibles.

Posté par
alb12
re : algorithme couples equation maths spé 24-01-16 à 19:21

d'autant plus que floor avec des flottants donne lieu à de graves erreurs ...

Posté par
carpediem
re : algorithme couples equation maths spé 24-01-16 à 20:22

certes ... mais il faut le calculer ce reste ....

Posté par
mathafou Moderateur
re : algorithme couples equation maths spé 24-01-16 à 20:48

ce calcul dépend du répertoire d'instruction disponible
dans tous les langages "dérivé du C" (Algobox, Java etc etc )
a%b représente le reste de la division de a par b
directement

et comme je le disais au niveau d'un microprocesseur la division de deux nombres entiers donnant le reste dans un registre et le quotient dans un autre est une instruction native (et pas du tout en virgule flottante)
directement aussi.

il n'y a pratiquement que pour des calculatrices qu'une telle opération peut ne pas exister, et donc nécessitant le coup de la partie entière (sur des calculs en virgule flottante, donc)
et comme le dit alb12 si les nombres sont trop grands ça répond n'importe quoi.

Posté par
alb12
re : algorithme couples equation maths spé 24-01-16 à 22:15

même Algobox utilise a%b !

chez moi avec Xcas:

DIGITS:=12;floor(1/(3.1-3)); // renvoie 9

DIGITS:=15;floor(1/(3.1-3)); // renvoie 10

et ce n'est pas un bug !

Posté par
alb12
re : algorithme couples equation maths spé 24-01-16 à 22:21

A la fin de cet article le cas connu d'Ariane 5 qui passionne toujours les eleves !  



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 !