Bonjour, mon prof de maths nous a donné un DM à faire sur Algobox mais après plusieurs tentatives, l'algorithme ne convient pas. Voici le sujet:
On souhaite étudier la fonction polynôme du second degré f(x)=ax²+bx+c, suivant les réels a, b et c.
proposer un algorithme qui permette, suivant les réels a, b et c donné par l'utilisateur, de:
1. Afficher la fonction polynôme du second degré après la saisie de : a, b et c?
2. Donner des éventuelles solutions dans R, de l'équation : f(x)=0
3. Afficher la forme factorisable de f, quand elle existe
4. Afficher la forme canonique de f
5. Etudier le signe du trinôme f(x)
6. -a=1; b=1; c=1
-a=1; b=-2; c=1
- a=1; b=3; c=-4
-a=0; b=1; c=-9
-a=0; b=0; c=10
-a=0 b=0 c=0
la note tiendra compte de :
-la lisibilité du programme: utiliser les commentaires
-une bonne interaction avec l'utilisateur : utiliser les messages pour informer l'utilisateur des résultats à chaque étape
-le programme doit traiter tout les points précédents de 1 à 5
-Aide : on peut via un menu choisir l'opération à effectuer, par exemple :
_ Tapez A : pour afficher la fonction polynôme f
_Tapez R : pour résoudre l'équation f(x)=0
_Tapez F : pour factorisation de f
_Tapez C : pour la forme canonique de f
_Tapez S : pour étudier le signe de f
_Tapez G : pour afficher le graphique de f
bonjour
qu'as-tu commencé ?
avant de programmer, tu dois réfléchir à la façon dont tu t'y prendrais si tu devais répondre à ces questions avec juste papier et crayon
demande de précision : tu dois tracer le graphique de la fonction ? (option G)
ce n'est pas dit clairement dans l'énoncé des questions.
que représentent les coeff a, b et c que tu énumères en 6)
carita Bonjour, nous sommes un groupe de 4 et avons déjà tenté plusieurs algorithmes mais à chaque fois il y a des erreurs où alors cela ne fonctionne pas. pour le G il faut en effet que la courbe soit tracé et la question 6 je n'ai pas compris votre question.
si besoin, tu pourras t'aider de 4-Résumé sur les polynômes du second degré
ma question :
6. -a=1; b=1; c=1
-a=1; b=-2; c=1
- a=1; b=3; c=-4
-a=0; b=1; c=-9
-a=0; b=0; c=10
-a=0 b=0 c=0
que signifie cette partie de l'énoncé ?
avons déjà tenté plusieurs algorithmes mais à chaque fois il y a des erreurs où alors cela ne fonctionne pas
ben montre ! et précise où ça ne marche pas
ça servira de base.
vous avez essayé le mode pas à pas pour détecter où ça bloque ?
carita Bonjour, nous sommes un groupe de 4 et avons déjà tenté plusieurs algorithmes mais à chaque fois il y a des erreurs où alors cela ne fonctionne pas. pour le G il faut en effet que la courbe soit tracé et la question 6 je n'ai pas compris votre question.caritacaritacaritacaritacarita
6) ok ce sont des propositions de coefficients pour tester notre programme
tu peux me montrer ton algo ? (copier-coller de ton programme algobox)
merci de ne plus citer les messages précédents, ça alourdit inutilement le fil.
une méthode :
commencer à jeter sur papier la trame de ton algorithme
- saisie des coeff (et test)
- saisie de l'option choisie (et test)
- préparer le développement des 6 modules avec des tests si... alors
puis commencer à travailler le 1er module (lettre A)
- quelles variables?
- quels calculs?
- quels affichages?
saisir sur algobox, puis tester
ensuite seulement greffer l'option B (penser à définir les nouvelles variables), saisir, tester.
etc.
Voici le début en sachant qu'il manque beaucoup de chose tel que le menu.
En sachant qu'il y en a eu d'autre après mais se sont mes camarades qui l'ont.
celui si n'est que notre base.
1ère partie
je suppose que tu as défini toutes les variables (mm si ce n'est pas affiché ici)
2 remarques :
1) le test sur a ?
si a=0 alors ce n'est pas du second degré
==> afficher un message
2) à quel moment tu as choisi l'option A, R, etc ?
tu proposes d'emblée l'affichage de f(x) puis tu te lances sur delta !
je regarde la suite
Pour a je sais bien mais le problème quand on est passé la dernière fois a ne pouvait pas être = à 0 mais quand le prof a vu sa il nous a dis que sa n'était pas normal parce que du coup quand on ont prenait le menu G pour tracer la courbe, la courbe était fausse.
Et pour le menu A R... nous n'avons pas pas réussies à faire le menu.
3) les tests sur delta ne sont pas bons
tu pars de : "si delta 0" alors blabla
==> tu es donc dans le cas où delta est soit positif ou négatif
... tu vois
et, dans ton programme, le SINON qui suit concerne donc le cas delta=0 !
ainsi si delta>0, il n'est jamais identifié/traité.
au niveau de la présentation des résultats,
je n'ai pas encore lu en détail, mais il me semble que tu sais faire.
c'est plus au niveau de la logique qu'il faut tout revoir calmement.
tout ce que tu as fait n'est pas perdu!
tu pourras récupérer des groupes d'instructions, mais placées au bons endroits
"quand le prof a vu sa il nous a dis que sa n'était pas normal parce que du coup quand on ont prenait le menu G pour tracer la courbe, la courbe était fausse. "
euh, pas très clair.
le cas a=0 est à identifier dès le départ
"étudier la fonction polynôme du second degré f(x)=ax²+bx+c, "
signaler que ce n'est pas une fonction du second degré
éventuellement afficher la forme affine
et sortir du programme : ne pas permettre de saisir une option.
à la limite, permettre une nouvelle saisie... mais commençons simple.
je pense que le plus simple pour t'aider (à distance), c'est que tu partes sur mon message de 14h51 pour bien poser les choses à plat.
et avancer par étapes validées.
au boulot !
Bonjour,
pour info une copie d'écran ou une photo de Algobox est quasi inutilisable pour se transmettre des algorithmes.
soit on se met en mode "éditeur" dans Algobox et alors du simple copier-coller permet d'échanger dans les deux sens, de citer des morceaux etc .
parce que ce qu'on se transmet c'est du texte , en texte, pas des images.
cela règle aussi le problème de caractères microscopiques peu lisibles.
et cela règle aussi les modes invisibles sinon des "AFFICHER" avec ou sans saut de lignes (différence entre AFFICHER et AFFICHER*, visible seulement en mode éditeur ou dans un export du programme)
soit on fait "exporter vers un fichier texte" et on ouvre ce fichier texte dans un éditeur et on le copie-colle, idem.
il peut y avoir des problèmes de sauts de lignes à la copie (il y a plusieurs codages différents pour passer à la ligne selon les systèmes et les logiciels, un bon éditeur de texte comme Notepad++ règle tout ça en un clic)
FONCTIONS_UTILISEES
VARIABLES
a EST_DU_TYPE NOMBRE
b EST_DU_TYPE NOMBRE
c EST_DU_TYPE NOMBRE
s1 EST_DU_TYPE NOMBRE
delta EST_DU_TYPE NOMBRE
s2 EST_DU_TYPE NOMBRE
alpha EST_DU_TYPE NOMBRE
beta EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
LIRE a
LIRE b
LIRE c
AFFICHER "f(x)="
AFFICHER a
AFFICHER "x²+"
AFFICHER b
AFFICHER "x+"
AFFICHER c
//pour b et c il se peut que deux signes opératoires se suivent.
delta PREND_LA_VALEUR pow(b,2)-4*a*c
SI (delta==0) ALORS
DEBUT_SI
s1 PREND_LA_VALEUR -b/(2*a)
AFFICHER "la solution de l'équation f(x)=0 est"
AFFICHER s1
AFFICHER "la forme factorisée de f est f(x)="
AFFICHER a
AFFICHER "(x-"
AFFICHER s1
AFFICHER ")²"
FIN_SI
SINON
DEBUT_SINON
SI ((delta>0)) ALORS
DEBUT_SI
s1 PREND_LA_VALEUR (-b+sqrt(delta))/(2*a)
s2 PREND_LA_VALEUR (-b-sqrt(delta))/(2*a)
AFFICHER "les solutions de l'équation f(x)=0 sont"
AFFICHER s1
AFFICHER s2
AFFICHER "la forme factorisée de f est f(x)="
AFFICHER a
AFFICHER "(x-"
AFFICHER s1
AFFICHER ")(x-"
AFFICHER s2
AFFICHER ")"
FIN_SI
SINON
DEBUT_SINON
AFFICHER "l'équation f(x)=0 n'a pas de solution donc pas de forme factorisée"
FIN_SINON
FIN_SINON
alpha PREND_LA_VALEUR -b/(2*a)
beta PREND_LA_VALEUR F1(alpha)
AFFICHER "la forme canonique est f(x)=)"
AFFICHER a
AFFICHER "(x-"
AFFICHER alpha
AFFICHER ")²+"
AFFICHER beta
FIN_ALGORITHME
c'est un bon début
j'obtiens après quelques correction mineures
***Algorithme lancé***
Entrer a : 1
Entrer b : 1
Entrer c : 1
f(x)=1x²+1x+1
l'équation f(x)=0 n'a pas de solution donc pas de forme factorisée
la forme canonique est f(x)=1(x--0.5)²+0.75
***Algorithme terminé***
qu'est ce que j'ai corrigé dans ton algorithme ?
tout d'abord il faut définir la fonction F1 dans l'onglet "utiliser une fonction numérique"
il ne peut pas deviner que c'est ax² + bx + c !!
ensuite il faut passer à la ligne de temps en temps sinon ce sera totalement illisible : il mettra tous les affichages à la suite sur une seule grande ligne et sans aucun espaces
par exemle si s1 vaut 1 et s2 vaut 2
AFFICHER s1
AFFICHER s2
affichera 12 ! les deux valeurs collées l'une à l'autre sur une même ligne
en mode éditeur le passage à la ligne après affichage s'écrit AFFICHER*
c'est une case à cocher en mode normal (dans l'écran définissant le AFFICHER)
par exemple
AFFICHER* s1
AFFICHER s2
affichera
1
2
(le 1 à la suite de ce qui était affiché précédemment et ce qu'on affichera ensuite sera collé au 2 car par de "*" dans le deuxième afficher, c'était un exemple)
enfin il y a une faute de frappe dans le
AFFICHER "la forme canonique est f(x)=)"
c'est tout ce que j'ai modifié !
(j'ai viré la ligne "FONCTIONS_UTILISEES " qui ne définissait rien, et qui est de la syntaxe d'un autre algobox que le mien
en export de texte il m'écrit :
sanstitre - 06.02.2019
******************************************
******************************************
1 VARIABLES
2 a EST_DU_TYPE NOMBRE
3 b EST_DU_TYPE NOMBRE
4 c EST_DU_TYPE NOMBRE
...
63 FIN_ALGORITHME
Fonction numérique utilisée :
F1(x)=a*x*x+b*x+c
(ce que j'ai mis dans la définition de F1 dans l'onglet "fonction numérique")
Merci beaucoup pour votre aide je vais corriger les erreurs retanté quelques trucs et je vous le renverez
" on peut via un menu choisir l'opération à effectuer..." -- ce n'est pas obligatoire ?
ensuite, on peut perfectionner l'affichage, par exemple :
- si b<0 ou c<0, ne pas faire afficher "+"b, sinon, il va s'afficher +-8, par exemple.
idem pour de la forme canonique
- si, pour la forme canonique, si est négatif,
afin d'éviter d'avoir "--" deux signes moins cote à cote,
faire un test préalable pour le remplacer par un +
- si un coefficient = 0, ou si = 0, ne pas l'écrire
exemple :
2x²+0x+3 ==> afficher 2x²+3
5(x-1)² + 0 ==> afficher 5(x-1)²
- si a ou b = 1, ne pas l'écrire non plus
ex : 1x² + 1x + 5 ==> afficher x²+ x + 5
- ne pas hésiter à insérer un commentaire pour aérer le programme et expliquer ce qui suit (conseillé par l'énoncé)
et le cas a=0...?
Le menu n'est pas obligatoire mais il nous rapporte 3pts bonus.
Ensuite pour a=0, il faut que je trouve un moyen car lors c que l'on a essayé sur un autre programme cela nous donné une parabole alors que l'on aurait du avoir une droite parallèle à l'axe des abscisse. Et cette pour cette droite on m'a parlé de coefficient directeur.
Le menu n'est pas obligatoire mais il nous rapporte 3pts bonus.
ok
Ensuite pour a=0, il faut que je trouve un moyen car lors c que l'on a essayé sur un autre programme cela nous donné une parabole
alors que l'on aurait du avoir une droite parallèle à l'axe des abscisse. Et cette pour cette droite on m'a parlé de coefficient directeur
pas forcément parallèle à (Ox)
==> la fonction sera de la forme y = bx+c
si b= 0 alors oui, droite // à (Ox)
mais dans le cas général on a une droite de coefficient directeur b
Fonctions linéaires et affines
pour a=0, il faut que je trouve un moyen
c'est pas compliqué ! faire un test juste après la saisie de a.
- si a0 , ben... continuer
- sinon, afficher un message (on peut éventuellement prévoir une nouvelle saisie, mais bon... faisons simple)
vu que dans le jeu d'essai on a trois cas différents avec a = 0, il faut traiter proprement le cas a = 0 et pas le "botter en touche"
c'est à dire que si a = 0, il faut faire tout ce qu'on doit faire avec une fonction affine f(x) = bx+c
et ne rien faire du tout de ce qu'on doit faire avec un trinome du second degré.
on aura donc l'architecture générale :
saisie des données
SI (a == 0)
// traiter le(s) cas affine
SINON
// traiter le(s) cas second degré (= ce qui a été fait, en gros)
FIN SI
l'intérêt du mode éditeur de Algobox est qu'on peut copier coller des morceaux entiers de programme pour les glisser à l'intérieur d'un SI ou déplacer et découper en morceaux (selon le menu ...) sans avoir besoin de tout retaper ...
il y a deux façons d'organiser son travail
je "recense" et je code toutes les briques dont je vais avoir besoin (elles sont définies par les différentes phrases de l'énoncé !)
le morceau déja fait
et je les place dans une structure plus complète pour gérer les différents cas et dialogues
ou au contraire
je définis d'abord le dialogue et les fonctions que je veux faire, la structure générale du programme
et dans cette structure il n'y a en fait que des commentaires !! disant ce qui reste à coder
puis je détaille au fur et à mesure de la conception, en testant chaque étape.
dans aucun cas on n'écrit du code au fur et a mesure au kilomètre en "ajustant jusqu'à ce que ça marche"
il FAUT une méthode de travail...
une petite astuce pour alléger les AFFICHER
tu déclares une variable de type CHAINE
F EST_DU_TYPE CHAINE
puis tu écris dans cette variable tout ce que tu veux afficher
exemple : F PREND_LA_VALEUR "f(x)="+a+"x²"+b+"x"+c
et tout s'écrit avec AFFICHER F, les a;b;c sont remplacés par leur valeur et les chaines entre quottes restent inchangées.
Bonjour, ma copine m'a envoyé les deux autres algorithmes qui sont beaucoup plus mais beaucoup plus complet. Si vous pouviez me dire le quel des deux répond le mieux à l'énoncé. Merci d'avance.
DEBUT_ALGORITHME
//Annonce du but de l'algorithme
AFFICHER* "Nous souhaitons étudier le polynôme f(x)=ax²+bx+c suivant les réels a,b,c"
AFFICHER "Saisir a"
LIRE a
TANT_QUE (a==0) FAIRE
DEBUT_TANT_QUE
AFFICHER "! a NE DOIT PAS ETRE EGAL A 0 !"
//Empêcher l'utilisateur d'entrer a=nul car il est impossible de diviser par 0
LIRE a
FIN_TANT_QUE
AFFICHER "Saisir b"
LIRE b
AFFICHER "Saisir c"
LIRE c
delta PREND_LA_VALEUR pow(b,2)-4*a*c
//calculs des racines lorsque delta> ou = à 0
SI (delta==0) ALORS
DEBUT_SI
//delta=0 donc il n'y a qu'une solution
x0 PREND_LA_VALEUR -b/2*a
FIN_SI
SI (delta>0) ALORS
DEBUT_SI
//delta est strictement supérieur à 0, il y a deux solutions.
SI (((-b-sqrt(delta))/(2*a))<((-b+sqrt(delta))/(2*a))) ALORS
DEBUT_SI
x1 PREND_LA_VALEUR (-b-sqrt(delta))/(2*a)
x2 PREND_LA_VALEUR (-b+sqrt(delta))/(2*a)
FIN_SI
SINON
DEBUT_SINON
x2 PREND_LA_VALEUR (-b-sqrt(delta))/(2*a)
x1 PREND_LA_VALEUR (-b+sqrt(delta))/(2*a)
FIN_SINON
FIN_SI
//Création d'un menu pour faciliter l'utilisation de l'algorithme
AFFICHER* "MENU CHOISIR OPERATION SOUHAITEE :"
AFFICHER* "(Attention : les majuscules sont importantes ! )"
AFFICHER* "TAPEZ A pour afficher la fonction polynome de second degrés"
AFFICHER* "TAPEZ R pour résoudre l'équation f(x)=0"
AFFICHER* "TAPEZ F pour la factorisation de f"
AFFICHER* "TAPEZ C pour la canonique de f"
AFFICHER* "TAPEZ S pour l'étude du signe de f"
AFFICHER* "TAPEZ G pour tracer la courbe de f"
RETOUR_MENU PREND_LA_VALEUR "OUI"
TANT_QUE (RETOUR_MENU=="OUI") FAIRE
DEBUT_TANT_QUE
LIRE MENU
SI (MENU=="A") ALORS
DEBUT_SI
//affichage de la fonction polynome de second degrés
AFFICHER "f(x)="
AFFICHER a
AFFICHER "x²"
SI (b>0) ALORS
DEBUT_SI
AFFICHER "+"
FIN_SI
AFFICHER b
AFFICHER "x"
SI (c>0) ALORS
DEBUT_SI
AFFICHER "+"
FIN_SI
AFFICHER* c
FIN_SI
SI (MENU=="R") ALORS
DEBUT_SI
//résolution de l'équation f(x)=0
//Delta a été calculé, on teste sa valeur
AFFICHER "Le discriminant Delta est égal à : "
AFFICHER* delta
SI (delta<0) ALORS
DEBUT_SI
AFFICHER "Il n'y a pas de solutions pour f(x)=0 dans R car Delta est inférieur à 0"
FIN_SI
SI (delta==0) ALORS
DEBUT_SI
AFFICHER* "Delta est nul donc il y a une racine :"
AFFICHER "La solution pour f(x)=0 dans R est:"
AFFICHER* x0
FIN_SI
SI (delta>0) ALORS
DEBUT_SI
AFFICHER* "Delta est strictement supérieur à 0, il y a deux racines :"
AFFICHER* "Les solutions pour f(x)=0 dans R sont:"
AFFICHER x1
AFFICHER " et "
AFFICHER* x2
FIN_SI
FIN_SI
SI (MENU=="F") ALORS
DEBUT_SI
//déterminer si la fonction est factorisable
AFFICHER "Le discriminant Delta est égal à : "
AFFICHER* delta
SI (delta<0) ALORS
DEBUT_SI
AFFICHER* "f(x) n'est pas factorisable"
FIN_SI
SI (delta==0) ALORS
DEBUT_SI
AFFICHER* "La forme factorisée de f(x) est :"
AFFICHER "f(x)="
AFFICHER a
AFFICHER "(x"
AFFICHER "-"
AFFICHER x0
AFFICHER* ")²"
FIN_SI
SI (delta>0) ALORS
DEBUT_SI
AFFICHER* "La forme factorisée de f(x) est :"
AFFICHER "f(x)="
AFFICHER a
AFFICHER "(x"
AFFICHER "-"
AFFICHER x1
AFFICHER ")(x"
AFFICHER "-"
AFFICHER x2
AFFICHER* ")"
FIN_SI
FIN_SI
SI (MENU=="C") ALORS
DEBUT_SI
//détermination de la forme canonique de la fonction
alpha PREND_LA_VALEUR -b/(2*a)
beta PREND_LA_VALEUR (-b*b+4*a*c)/(4*a)
AFFICHER* "La forme canonique de f(x), f(x)=a(x-alpha)²+beta est : "
AFFICHER "f(x)="
AFFICHER a
AFFICHER "(x"
//changement des signes afin que la forme canonique soit plus "jolie" ou lisible
SI (alpha>0) ALORS
DEBUT_SI
AFFICHER "-"
FIN_SI
SINON
DEBUT_SINON
alpha PREND_LA_VALEUR -alpha
AFFICHER "+"
FIN_SINON
AFFICHER alpha
AFFICHER ")²"
SI (beta>0 OU beta==0) ALORS
DEBUT_SI
AFFICHER "+"
FIN_SI
AFFICHER* beta
FIN_SI
SI (MENU=="S") ALORS
DEBUT_SI
//étude du signe de f(x)
//prise en compte des différentes possibilités: delta < ou > ou = à 0
SI (delta<0) ALORS
DEBUT_SI
AFFICHER* "Delta est négatif donc f(x) est du signe de a"
SI (a>0) ALORS
DEBUT_SI
AFFICHER* "Le signe de f(x) est positif"
FIN_SI
SINON
DEBUT_SINON
AFFICHER* "Le signe de f(x) est négatif"
FIN_SINON
FIN_SI
SINON
DEBUT_SINON
SI (delta==0) ALORS
DEBUT_SI
AFFICHER* "Delta est nul donc f(x) est du signe de a"
SI (a>0) ALORS
DEBUT_SI
AFFICHER* "Le signe de f(x) est positif"
FIN_SI
SINON
DEBUT_SINON
AFFICHER* "Le signe de f(x) est négatif"
FIN_SINON
FIN_SI
SINON
DEBUT_SINON
SI (delta>0) ALORS
DEBUT_SI
AFFICHER* "Delta est supérieur à 0 donc "
AFFICHER "f(x) est de signe "
SI (a<0) ALORS
DEBUT_SI
AFFICHER "négatif pour x<"
FIN_SI
SINON
DEBUT_SINON
AFFICHER "positif pour x<"
FIN_SINON
AFFICHER* x1
AFFICHER "f(x) est du signe "
SI (a<0) ALORS
DEBUT_SI
AFFICHER "positif pour "
FIN_SI
SINON
DEBUT_SINON
AFFICHER "négatif pour "
FIN_SINON
AFFICHER x1
AFFICHER "<x<"
AFFICHER* x2
AFFICHER "f(x) est du signe "
SI (a<0) ALORS
DEBUT_SI
AFFICHER "négatif pour x>"
FIN_SI
SINON
DEBUT_SINON
AFFICHER "positif pour x>"
FIN_SINON
AFFICHER* x2
FIN_SI
FIN_SINON
FIN_SINON
FIN_SI
SI (MENU=="G") ALORS
DEBUT_SI
//étude de la courbe de la fonction f(x)
pascourbe PREND_LA_VALEUR 0.1
xdepart PREND_LA_VALEUR -10
TANT_QUE (xdepart<10) FAIRE
DEBUT_TANT_QUE
xfin PREND_LA_VALEUR xdepart+pascourbe
TRACER_SEGMENT_Rouge (xdepart,a*pow(xdepart,2)+b*xdepart+c)->(xfin,a*pow(xfin,2)+b*xfin+c)
xdepart PREND_LA_VALEUR xfin
FIN_TANT_QUE
AFFICHER* "Mettre fin à l'Algorithme pour afficher la courbe"
FIN_SI
AFFICHER* "------"
AFFICHER "voulez-vous revenir au menu principal pour le même polynome tapez OUI"
LIRE RETOUR_MENU
FIN_TANT_QUE
FIN_ALGORITHME
DEBUT_ALGORITHME
//Annonce du but de l'algorithme
AFFICHER* "Nous souhaitons étudier le polynôme f(x)=ax²+bx+c suivant les réels a,b,c"
AFFICHER "choisir a"
LIRE a
AFFICHER "choisir b"
LIRE b
AFFICHER "choisir c"
LIRE c
SI (a==0) ALORS
DEBUT_SI
AFFICHER* "La fonction est une fonction affine de forme :"
//pas oublier retours a la ligne
AFFICHER "f(x)=bx+c"
AFFICHER* "donc la fonction sera comme ceci:"
//retour a la ligne
AFFICHER "f(x)="
AFFICHER b
AFFICHER "x+"
AFFICHER c
SI (b==0) ALORS
DEBUT_SI
x PREND_LA_VALEUR -(c)
SI (c==0) ALORS
DEBUT_SI
AFFICHER "les solutions sont toutes possibles"
FIN_SI
SINON
DEBUT_SINON
AFFICHER "il n'y a pas de solutions"
FIN_SINON
AFFICHER* "MENU CHOISIR OPERATION SOUHAITEE :"
AFFICHER* "(Attention : les majuscules sont importantes ! )"
AFFICHER* "TAPEZ A pour afficher la fonction polynome de second degrés"
AFFICHER* "TAPEZ R pour résoudre l'équation f(x)=0"
AFFICHER* "TAPEZ F pour la factorisation de f"
AFFICHER* "TAPEZ C pour la canonique de f"
AFFICHER* "TAPEZ S pour l'étude du signe de f"
AFFICHER* "TAPEZ G pour tracer la courbe de f"
RETOUR_MENU PREND_LA_VALEUR "OUI"
TANT_QUE (RETOUR_MENU=="OUI") FAIRE
DEBUT_TANT_QUE
LIRE MENU
SI (MENU=="A") ALORS
DEBUT_SI
//affichage de la fonction polynome de second degrés
AFFICHER "f(x)="
SI (b>0) ALORS
DEBUT_SI
AFFICHER "+"
FIN_SI
AFFICHER b
AFFICHER "x"
SI (c>0) ALORS
DEBUT_SI
AFFICHER "+"
FIN_SI
AFFICHER* c
FIN_SI
SI (MENU=="R") ALORS
DEBUT_SI
//résolution de l'équation f(x)=0
//Delta a été calculé, on teste sa valeur
x PREND_LA_VALEUR -(c)/b
AFFICHER* "on résout l'équetion f(x)=bx+c"
//retour ligne
AFFICHER* "donc:"
//retour ligne
AFFICHER b
AFFICHER "x+"
AFFICHER c
AFFICHER* "=0"
//RL
AFFICHER "la solution est :"
AFFICHER x
FIN_SI
FIN_SI
SI (MENU=="C") ALORS
DEBUT_SI
AFFICHER* "il n'y a pas de forme canonique"
FIN_SI
SI (MENU=="S") ALORS
DEBUT_SI
AFFICHER* "si b est positif la droite sera croissante sinon elle sera décroissante"
SI (b<0) ALORS
DEBUT_SI
AFFICHER* "donc la droite est décroissante puisque :"
AFFICHER b
AFFICHER* "<0"
FIN_SI
SI (b==0) ALORS
DEBUT_SI
AFFICHER* "la droite est constante elle est horizontal donc"
AFFICHER "y="
AFFICHER c
FIN_SI
SI (b>0) ALORS
DEBUT_SI
AFFICHER* "la droite est croissante puisque "
AFFICHER b
AFFICHER ">0"
FIN_SI
FIN_SI
SI (MENU=="G") ALORS
DEBUT_SI
AFFICHER "désolé nous n'avons pas eu le temps de nous intéresser a ce menu"
FIN_SI
FIN_SI
SINON
DEBUT_SINON
x PREND_LA_VALEUR -(c)/b
FIN_SINON
FIN_SINON
FIN_SI
SINON
DEBUT_SINON
delta PREND_LA_VALEUR pow(b,2)-4*a*c
//calculs des racines lorsque delta> ou = à 0
SI (delta==0) ALORS
DEBUT_SI
//delta=0 donc il n'y a qu'une solution
x0 PREND_LA_VALEUR -b/2*a
FIN_SI
SI (delta>0) ALORS
DEBUT_SI
//delta est strictement supérieur à 0, il y a deux solutions.
SI (((-b-sqrt(delta))/(2*a))<((-b+sqrt(delta))/(2*a))) ALORS
DEBUT_SI
x1 PREND_LA_VALEUR (-b-sqrt(delta))/(2*a)
x2 PREND_LA_VALEUR (-b+sqrt(delta))/(2*a)
FIN_SI
SINON
DEBUT_SINON
x2 PREND_LA_VALEUR (-b-sqrt(delta))/(2*a)
x1 PREND_LA_VALEUR (-b+sqrt(delta))/(2*a)
FIN_SINON
FIN_SI
//Création d'un menu pour faciliter l'utilisation de l'algorithme
AFFICHER* "MENU CHOISIR OPERATION SOUHAITEE :"
AFFICHER* "(Attention : les majuscules sont importantes ! )"
AFFICHER* "TAPEZ A pour afficher la fonction polynome de second degrés"
AFFICHER* "TAPEZ R pour résoudre l'équation f(x)=0"
AFFICHER* "TAPEZ F pour la factorisation de f"
AFFICHER* "TAPEZ C pour la canonique de f"
AFFICHER* "TAPEZ S pour l'étude du signe de f"
AFFICHER* "TAPEZ G pour tracer la courbe de f"
RETOUR_MENU PREND_LA_VALEUR "OUI"
TANT_QUE (RETOUR_MENU=="OUI") FAIRE
DEBUT_TANT_QUE
LIRE MENU
SI (MENU=="A") ALORS
DEBUT_SI
//affichage de la fonction polynome de second degrés
AFFICHER "f(x)="
AFFICHER a
AFFICHER "x²"
SI (b>0) ALORS
DEBUT_SI
AFFICHER "+"
FIN_SI
AFFICHER b
AFFICHER "x"
SI (c>0) ALORS
DEBUT_SI
AFFICHER "+"
FIN_SI
AFFICHER* c
FIN_SI
SI (MENU=="R") ALORS
DEBUT_SI
//résolution de l'équation f(x)=0
//Delta a été calculé, on teste sa valeur
AFFICHER "Le discriminant Delta est égal à : "
AFFICHER* delta
SI (delta<0) ALORS
DEBUT_SI
AFFICHER "Il n'y a pas de solutions pour f(x)=0 dans R car Delta est inférieur à 0"
FIN_SI
SI (delta==0) ALORS
DEBUT_SI
AFFICHER* "Delta est nul donc il y a une racine :"
AFFICHER "La solution pour f(x)=0 dans R est:"
AFFICHER* x0
FIN_SI
SI (delta>0) ALORS
DEBUT_SI
AFFICHER* "Delta est strictement supérieur à 0, il y a deux racines :"
AFFICHER* "Les solutions pour f(x)=0 dans R sont:"
AFFICHER x1
AFFICHER " et "
AFFICHER* x2
FIN_SI
FIN_SI
SI (MENU=="F") ALORS
DEBUT_SI
//déterminer si la fonction est factorisable
AFFICHER "Le discriminant Delta est égal à : "
AFFICHER* delta
SI (delta<0) ALORS
DEBUT_SI
AFFICHER* "f(x) n'est pas factorisable"
FIN_SI
SI (delta==0) ALORS
DEBUT_SI
AFFICHER* "La forme factorisée de f(x) est :"
AFFICHER "f(x)="
AFFICHER a
AFFICHER "(x"
AFFICHER "-"
AFFICHER x0
AFFICHER* ")²"
FIN_SI
SI (delta>0) ALORS
DEBUT_SI
AFFICHER* "La forme factorisée de f(x) est :"
AFFICHER "f(x)="
AFFICHER a
AFFICHER "(x"
AFFICHER "-"
AFFICHER x1
AFFICHER ")(x"
AFFICHER "-"
AFFICHER x2
AFFICHER* ")"
FIN_SI
FIN_SI
SI (MENU=="C") ALORS
DEBUT_SI
//détermination de la forme canonique de la fonction
alpha PREND_LA_VALEUR -b/(2*a)
beta PREND_LA_VALEUR (-b*b+4*a*c)/(4*a)
AFFICHER* "La forme canonique de f(x), f(x)=a(x-alpha)²+beta est : "
AFFICHER "f(x)="
AFFICHER a
AFFICHER "(x"
//changement des signes afin que la forme canonique soit plus "jolie" ou lisible
SI (alpha>0) ALORS
DEBUT_SI
AFFICHER "-"
FIN_SI
SINON
DEBUT_SINON
alpha PREND_LA_VALEUR -alpha
AFFICHER "+"
FIN_SINON
AFFICHER alpha
AFFICHER ")²"
SI (beta>0 OU beta==0) ALORS
DEBUT_SI
AFFICHER "+"
FIN_SI
AFFICHER* beta
FIN_SI
SI (MENU=="S") ALORS
DEBUT_SI
//étude du signe de f(x)
//prise en compte des différentes possibilités: delta < ou > ou = à 0
SI (delta<0) ALORS
DEBUT_SI
AFFICHER* "Delta est négatif donc f(x) est du signe de a"
SI (a>0) ALORS
DEBUT_SI
AFFICHER* "Le signe de f(x) est positif"
FIN_SI
SINON
DEBUT_SINON
AFFICHER* "Le signe de f(x) est négatif"
FIN_SINON
FIN_SI
SINON
DEBUT_SINON
SI (delta==0) ALORS
DEBUT_SI
AFFICHER* "Delta est nul donc f(x) est du signe de a"
SI (a>0) ALORS
DEBUT_SI
AFFICHER* "Le signe de f(x) est positif"
FIN_SI
SINON
DEBUT_SINON
AFFICHER* "Le signe de f(x) est négatif"
FIN_SINON
FIN_SI
SINON
DEBUT_SINON
SI (delta>0) ALORS
DEBUT_SI
AFFICHER* "Delta est supérieur à 0 donc "
AFFICHER "f(x) est de signe "
SI (a<0) ALORS
DEBUT_SI
AFFICHER "négatif pour x<"
FIN_SI
SINON
DEBUT_SINON
AFFICHER "positif pour x<"
FIN_SINON
AFFICHER* x1
AFFICHER "f(x) est du signe "
SI (a<0) ALORS
DEBUT_SI
AFFICHER "positif pour "
FIN_SI
SINON
DEBUT_SINON
AFFICHER "négatif pour "
FIN_SINON
AFFICHER x1
AFFICHER "<x<"
AFFICHER* x2
AFFICHER "f(x) est du signe "
SI (a<0) ALORS
DEBUT_SI
AFFICHER "négatif pour x>"
FIN_SI
SINON
DEBUT_SINON
AFFICHER "positif pour x>"
FIN_SINON
AFFICHER* x2
FIN_SI
FIN_SINON
FIN_SINON
FIN_SI
SI (MENU=="G") ALORS
DEBUT_SI
//étude de la courbe de la fonction f(x)
pascourbe PREND_LA_VALEUR 0.1
xdepart PREND_LA_VALEUR -10
TANT_QUE (xdepart<10) FAIRE
DEBUT_TANT_QUE
xfin PREND_LA_VALEUR xdepart+pascourbe
TRACER_SEGMENT_Rouge (xdepart,a*pow(xdepart,2)+b*xdepart+c)->(xfin,a*pow(xfin,2)+b*xfin+c)
xdepart PREND_LA_VALEUR xfin
FIN_TANT_QUE
AFFICHER* "Mettre fin à l'Algorithme pour afficher la courbe"
FIN_SI
AFFICHER* "------"
AFFICHER "voulez-vous revenir au menu principal pour le même polynome tapez OUI"
LIRE RETOUR_MENU
FIN_TANT_QUE
FIN_SINON
FIN_ALGORITHME
tant qu'à faire tu aurais pu nous mettre les déclarations de variables, ça nous aurait permis de tester les algorithmes.
il manque toutes les déclarations de variables de sorte qu'on ne peut pas tester directement.
et donc ça ne donne pas envie de tester vu qu'il faudrait que l'on se tape toutes les déclarations de variables nous même !
(compléter par les seules sections "Variables :" inutile d'allourdir la discussion en répétant l'algorithme lui-même)
ceci dit on met le doigt sur les limites de Algobox : le programme est vite abominable et totalement illisible
avantage à utiliser un vrai langage de programmation (par exemple Python), et pas Algobox qui ne sert que pour apprendre les bases et écrire des petites trucs de rien du tout.
on peut être amené à ajouter plein de commentaires en particulier pour préciser de quel "SI" il s'agissait quand on arrive au "FIN_SI", vu que le "SI" correspondant est deux pages au dessus !!
SI (a==0) ALORS
DEBUT_SI
// cas d'une fonction affine
... (deux pages de code)
// fin du cas affine
FIN_SI
SINON
DEBUT_SINON
// cas du second degré
... (encore plusieurs pages de code)
// fin du cas second degré
FIN_SINON
bonjour à tous
j'attends aussi de tester pour y voir plus clair, car comme le souligne Mathafou, c'est long (normal) !
difficile de suivre la structure, sauf imprimer et surligner.
mais quand même, j'ai envie de dire chapeau ! à l'équipe (niveau 1ère!).
sous réserve de tester tout ça, on sent que ça a phosphoré
note : un algo a tenu compte des signes pour l'affichage.
on pourrait peaufiner en traitant les cas coeff.=1 ou -1...
je ne comprends pas le rôle de ce message
AFFICHER* "Mettre fin à l'Algorithme pour afficher la courbe"
la courbe est affichée en permanence au fur et à mesure de son tracé dans la fenêtre graphique juste au dessus de la fenêtre de dialogue...
tout au moins c'est comme ça dans Algobox "stand alone" (celui qu'on installe sur son PC)
dans le menu sur la fonction affine est il nécessaire de proposer "forme canonique" etc pour se voir répondre "il n'y a pas de forme canonique " ?
limiter le menu "affine" à ce qu'on sait faire avec une fonction affine (y compris la tracer, à compléter vu que celle là elle n'est pas dure : il n'y a même pas de boucle à écrire ! ni de pas d'incrémentation)
mettre à jour les commentaires correspondants : parler de delta dans un tel commentaire est hors de propos sur une fonction affine !
et donc sème le doute pour savoir dans quelle partie du programme on est !
amélioration :
si la réponse est autre chose qu'une lettre "légale", râler en redonnant la description du menu
au lieu de demander "voulez vous revenir au menu"
y revenir systématiquement et avec une réponse "Q" pour quitter
AFFICHER* "(Attention : les majuscules sont importantes ! )"
bof
il suffit de faire les tests sous la forme
SI (MENU=="C" OU MENU=="c")
pour libérer l'utilisateur de cette contrainte de majuscules et rendre le programme plus convivial
Glapion a deja signalé la méthode pour réduire "l'étalement" de tous ces afficher en série
à employer sans modération
nota :
on peut mettre des sauts de lignes à l'intérieur du message avec le caractère \n
on peut composer le message par morceaux par
msg PREND_LA_VALEUR msg+"la suite"
perso, j'appelle traditionnellement "msg" ma variable chaine qui me sert à composer des affichages (des messages), c'est plus parlant que "F"
on l'appelle bien sûr comme on veut
on peut même faire encore plus fort !!
intégrer les "SI" à l'intérieur de l'affectation de la variable chaine !!
mais bon ... (c'est du code JavaScript ! donc réservé au pros, le prof risque de ne pas apprécier)
c'est toutefois intéressant pour avoir un programme un peu plus "compact", vu la verbosité excessive de Algobox sur les structures de programme avec tous ces "ALORS" "FAIRE" "DEBUT_de" "FIN_de" etc
Voici les déclarations de variables.
delta EST_DU_TYPE NOMBRE
a EST_DU_TYPE NOMBRE
b EST_DU_TYPE NOMBRE
c EST_DU_TYPE NOMBRE
x EST_DU_TYPE NOMBRE
x1 EST_DU_TYPE NOMBRE
x2 EST_DU_TYPE NOMBRE
x0 EST_DU_TYPE NOMBRE
alpha EST_DU_TYPE NOMBRE
beta EST_DU_TYPE NOMBRE
MENU EST_DU_TYPE CHAINE
RETOUR_MENU EST_DU_TYPE CHAINE
xdepart EST_DU_TYPE NOMBRE
xfin EST_DU_TYPE NOMBRE
pascourbe EST_DU_TYPE NOMBRE
De plus nous sommes obligé de travailler sur algo et non sur python. Nous savons que c'est long mais nous sommes obligés si nous voulons répondre à toute les demandes du professeur.
il doit y avoir une erreur quelque part car ça me donne :
***L'algorithme contient une erreur : impossible de le lancer***
***Vérifiez la syntaxe des affectations et des conditions***
et faire ça sur plus de 350 lignes c'est mission impossible
un programme aussi gigantesque se met au point petit à petit
tout d'un coup ce n'est plus possible.
et redécouper tout en petits bouts pour savoir où est l'erreur ce n'est pas notre boulot...
je pense à des erreurs de copier-coller, le programme étant tellement long qu'il a été copié "par morceaux"
du coup quelques lignes ont dû sauter par-ci par là incluant des FIN_de
c'est confirmé :
en collant petit bout par petit bout :
VARIABLES
delta EST_DU_TYPE NOMBRE
a EST_DU_TYPE NOMBRE
b EST_DU_TYPE NOMBRE
c EST_DU_TYPE NOMBRE
x EST_DU_TYPE NOMBRE
// ...
MENU EST_DU_TYPE CHAINE
RETOUR_MENU EST_DU_TYPE CHAINE
// ...
DEBUT_ALGORITHME
//Annonce du but de l'algorithme
AFFICHER* "Nous souhaitons étudier le polynôme f(x)=ax²+bx+c suivant les réels a,b,c"
// AFFICHER "choisir a" inutile, algobox dit deja "a"
LIRE a
// AFFICHER "choisir b"
LIRE b
// AFFICHER "choisir c"
LIRE c
SI (a==0) ALORS
DEBUT_SI
// cas affine
AFFICHER* "La fonction est une fonction affine de forme :"
//pas oublier retours a la ligne
AFFICHER "f(x)=bx+c"
AFFICHER* " donc la fonction sera comme ceci :"
//retour a la ligne
AFFICHER "f(x)="
AFFICHER b
AFFICHER "x+"
AFFICHER c
SI (b==0) ALORS
DEBUT_SI
x PREND_LA_VALEUR -(c)
SI (c==0) ALORS
DEBUT_SI
AFFICHER "les solutions sont toutes possibles"
FIN_SI
SINON
DEBUT_SINON
AFFICHER "il n'y a pas de solutions"
FIN_SINON
// fin du cas b = 0, ce FIN_SI manquait
FIN_SI
// il manque le SINON du cas b!=0
AFFICHER* "MENU CHOISIR OPERATION SOUHAITEE :"
AFFICHER* "(Attention : les majuscules sont importantes ! )"
AFFICHER* "TAPEZ A pour afficher la fonction polynome de second degrés"
AFFICHER* "TAPEZ R pour résoudre l'équation f(x)=0"
AFFICHER* "TAPEZ F pour la factorisation de f"
AFFICHER* "TAPEZ C pour la canonique de f"
AFFICHER* "TAPEZ S pour l'étude du signe de f"
AFFICHER* "TAPEZ G pour tracer la courbe de f"
RETOUR_MENU PREND_LA_VALEUR "OUI"
TANT_QUE (RETOUR_MENU=="OUI") FAIRE
DEBUT_TANT_QUE
LIRE MENU
// ... traitement des menus du cas affine puis
// tout ça manquait :
AFFICHER* "------"
AFFICHER "voulez-vous revenir au menu principal pour le même polynome tapez OUI"
LIRE RETOUR_MENU
FIN_TANT_QUE
// jusqu'à ce FIN_TANT_QUE inclus
// fin du cas affine
FIN_SI
SINON
DEBUT_SINON
// cas second degré
// ...
FIN_SINON
FIN_ALGORITHME
(rien que ça c'est déja suffisamment long pour commencer à être ingérable ...)
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :