Algorithme avec Algobox, need a command o/

Réponses à toutes vos questions de la 2nde à la Terminale toutes séries
Shidate Kunan
Membre Naturel
Messages: 26
Enregistré le: 09 Oct 2013, 18:30

Algorithme avec Algobox, need a command o/

par Shidate Kunan » 27 Mar 2014, 21:19

Bonjour bonjour !

Je suis actuellement en train de bosser sur un DM pour dans 10 jours, et un de mes exercices est un algorithme à écrire.

Je cherche à savoir s'il existe une commande me permettant de vérifier si n² est un nombre entier ou non.

Si vous avez besoin de l'énoncé de l'exercice pour plus de clarté, n'hésitez pas à me le dire o/

Merci par avance à vous toussa toussa.



Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 13:25

par Cliffe » 27 Mar 2014, 21:58

Partie entière d'une variable x : floor(x)

Shidate Kunan
Membre Naturel
Messages: 26
Enregistré le: 09 Oct 2013, 18:30

par Shidate Kunan » 27 Mar 2014, 23:03

Awé d'accord, mais tu ne m'expliques pas comment je dois l'utiliser ...

Pour information, voici mon énoncé :

Ecrire un algorithme qui permet pour un nombre entier n donné de savoir si on peut empiler exactement n triangles.

Avec ce genre d'images : http://image.noelshack.com/fichiers/2014/13/1395957795-triangles-empiles.png

J'ai trouvé que pour n_rangée² on a n_triangle (par exemple, 3 rangées donc 9 triangles).

mathafou
Membre Relatif
Messages: 325
Enregistré le: 12 Fév 2013, 09:48

par mathafou » 27 Mar 2014, 23:16

Shidate Kunan a écrit:Awé d'accord, mais tu ne m'expliques pas comment je dois l'utiliser ...
Bonsoir

SI (floor(x) == x)
alors x est entier
SINON
x n'est pas entier

ça c'est dans le principe, après tu adaptes à tes calculs.

à noter aussi que pour savoir si un nombre entier a est divisible par b on ne teste pas si le quotient est entier par
SI (floor(a/b) == a/b)

mais en utilisant le reste ... de la division entière et l'opération "modulo" :
SI (a%b == 0)

etc.

il peut être parfois aussi mieux de ne traiter par conception que des entiers.
la question de savoir si un calcul donne un entier ou pas est alors sans objet : il n'y a que des entiers partout dans le programme

Shidate Kunan
Membre Naturel
Messages: 26
Enregistré le: 09 Oct 2013, 18:30

par Shidate Kunan » 27 Mar 2014, 23:25

En fait, mon soucis dans cet algorithme, c'est que si je rentre n=51, je veux que mon algorithme puisse me dire "Non, on ne peut pas empiler exactement 51 triangles car 51 n'est pas un carré d'un nombre entier (voir formule ci-dessus).

Et de la même manière, si je rentre n=25, vu que c'est 5x5, qu'il me dise "Oui on peut empiler exactement 25 triangles car 25 est un carré d'une nombre entier" x)

mathafou
Membre Relatif
Messages: 325
Enregistré le: 12 Fév 2013, 09:48

par mathafou » 28 Mar 2014, 00:11

Shidate Kunan a écrit:... car 51 n'est pas un carré d'un nombre entier
...car 25 est un carré d'un nombre entier"


bein oui c'est bien ça, il s'agit de tester si x = sqrt(n) est un entier ou pas
tu calcules floor(sqrt(n)) et tu testes si c'est pareil que sqrt(n)

SI (floor(sqrt(n)) == sqrt(n))
. . . alors n est un carré
SINON
. . . n n'est pas un carré

paquito
Membre Complexe
Messages: 2168
Enregistré le: 26 Fév 2014, 12:55

par paquito » 28 Mar 2014, 11:53

effectivement pour n rangées tu auras empilé n² triangles:

1+3+5+......+(2n-1)=(n(2n-1)/2=n² (suite arithmétique); sinon est est un carré parfait si
int(V(n))=Vn

Sur TI82, ça donne:

:Prompt N
:If INT(V(n))=V(n)
:Then
:Disp "OUI ON PEUT EN EMPILER",N
:Else
:Disp "NON"
:End

mathafou
Membre Relatif
Messages: 325
Enregistré le: 12 Fév 2013, 09:48

par mathafou » 28 Mar 2014, 12:58

paquito a écrit:Sur TI82, ça donne:

:Prompt N
:If INT(V(n))=V(n)
:Then
:Disp "OUI ON PEUT EN EMPILER",N
:Else
:Disp "NON"
:End
en calculant R = V(N) à part on peut même améliorer :

:Prompt N
:R <-- V(N)
:If INT(R)=R
:Then
:Disp "OUI ON PEUT EN EMPILER",N, "EN ",R," RANGEES"
:Else
:Disp "NON"
:End[/quote]

ou du même genre (j'ai pas de TI, la syntaxe exacte est à vérifier)

paquito
Membre Complexe
Messages: 2168
Enregistré le: 26 Fév 2014, 12:55

par paquito » 28 Mar 2014, 14:44

[quote="mathafou"]en calculant R = V(N) à part on peut même améliorer :

:Prompt N
:R N; sinon effectivement le nombre de triangles et le nombre de rangées.

Shidate Kunan
Membre Naturel
Messages: 26
Enregistré le: 09 Oct 2013, 18:30

par Shidate Kunan » 29 Mar 2014, 22:43

Merci pour vos super réponses !
Ca m'a bien aidé pour le faire sur Algobox.

Alors bon, vu que vous êtes bien sympa, je vous poste le reste de l'énoncé ainsi que l'algo' que j'ai fait, et dites-moi ce que vous en pensez, s'il n'est pas trop long ou si on peut l'améliorer !

Ecrire un algorithme qui permet pour un nombre entier n donné de savoir si on peut empiler exactement n triangles, et dans le cas d'une réponse positive, il doit afficher le nombre de triangles que doit comporter la première rangée.

Code: Tout sélectionner
1   VARIABLES
2     n EST_DU_TYPE NOMBRE
3     nb_rangée EST_DU_TYPE NOMBRE
4     nb_triangle_dans_1ère_rangée EST_DU_TYPE NOMBRE
5   DEBUT_ALGORITHME
6     LIRE n
7     SI (floor(sqrt(n))==sqrt(n)) ALORS
8       DEBUT_SI
9       AFFICHER "Pour un nombre entier n égal à "
10      AFFICHER n
11      AFFICHER " , on peut empiler exactement "
12      AFFICHER n
13      AFFICHER " triangles."
14      FIN_SI
15      SINON
16        DEBUT_SINON
17        AFFICHER "On ne peut pas emplier exactement "
18        AFFICHER n
19        AFFICHER " triangles."
20        FIN_SINON
21    nb_rangée PREND_LA_VALEUR n
22    nb_rangée PREND_LA_VALEUR sqrt(n)
23    AFFICHER "Le grand triangle comprend donc "
24    AFFICHER nb_rangée
25    AFFICHER " rangées."
26    nb_rangée PREND_LA_VALEUR nb_rangée-1
27    nb_rangée PREND_LA_VALEUR pow(nb_rangée,2)
28    nb_triangle_dans_1ère_rangée PREND_LA_VALEUR n-nb_rangée
29    AFFICHER "Il y a "
30    AFFICHER nb_triangle_dans_1ère_rangée
31    AFFICHER " dans la première rangée du grand triangle."
32  FIN_ALGORITHME

mathafou
Membre Relatif
Messages: 325
Enregistré le: 12 Fév 2013, 09:48

par mathafou » 29 Mar 2014, 23:09

On te demande :
dans le cas d'une réponse positive, il doit afficher le nombre de triangles que doit comporter la première rangée.

toi tu sors un nombtre pas entier si la réponse est négative. puisque tu fais ce calcul là quelle que soit la réponse.

dans le cas de la réponse négative il ne faut rien sortir du tout.
ensuite il y a pas mal de "lourdeurs" dans le calcul de ce nombre de triangles de la 1ère rangée.

Code: Tout sélectionner
21    nb_rangée PREND_LA_VALEUR n
22    nb_rangée PREND_LA_VALEUR sqrt(n)

la première affectation ne sert à rien du tout puisque la valeur est immédiatement "écrasée" par autre chose

la suite du calcul me semble bien compliquée car tu devrais déja étudier le problème "mathématiquement " avant d'écrire l'algorithme
Si T[n] est le nombre de triangles, T[n] = n² donc
tu écris toi que le nombre de triangles de la première rangée est T[n] - T[n-1]
c'est juste, mais du coup ça t'oblige à calculer T[n-1] "de façon compliquée" (avec une élévation au carré etc)

peut être bien que ce nombre de triangles dans la première rangée est une expression disons beaucoup plus simple directement du nombre de rangées :zen:

mathématiquement que vaut n² - (n-1)² ?

Shidate Kunan
Membre Naturel
Messages: 26
Enregistré le: 09 Oct 2013, 18:30

par Shidate Kunan » 29 Mar 2014, 23:28

On te demande :
dans le cas d'une réponse positive, il doit afficher le nombre de triangles que doit comporter la première rangée.


toi tu sors un nombtre pas entier si la réponse est négative. puisque tu fais ce calcul là quelle que soit la réponse.

dans le cas de la réponse négative il ne faut rien sortir du tout.


Oui, ça je viens de le remarquer à l'instant. J'étais justement en train de chercher comment je peux faire pour changer ça :srs:

ensuite il y a pas mal de "lourdeurs" dans le calcul de ce nombre de triangles de la 1ère rangée.
Code: Tout sélectionner
21 nb_rangée PREND_LA_VALEUR n
22 nb_rangée PREND_LA_VALEUR sqrt(n)
la première affectation ne sert à rien du tout puisque la valeur est immédiatement "écrasée" par autre chose


Le soucis, c'est qu'avant que je ne mette cette première affectation, le calcul final avec n et nb_rangée était faussé par les autres valeurs prises. J'ai donc décidé que nb_rangée prendrait la valeur de n pour éviter ce soucis.

la suite du calcul me semble bien compliquée car tu devrais déja étudier le problème "mathématiquement " avant d'écrire l'algorithme Si T[n] est le nombre de triangles, T[n] = n² donc tu écris toi que le nombre de triangles de la première rangée est T[n] - T[n-1] c'est juste, mais du coup ça t'oblige à calculer T[n-1] "de façon compliquée" (avec une élévation au carré etc) peut être bien que ce nombre de triangles dans la première rangée est une expression disons beaucoup plus simple directement du nombre de rangées


Bah c'est ce que j'ai fait quoi x) !

Le nombre de triangles est égal au nombre de rangées².
Le nombre de triangle dans la première rangée est égal au nombre de triangles au total - le nombre de triangles dans le grand triangle ayant une rangée de moins.
C'est ce que j'ai "tenté" de mettre sous algorithme, et mon Dieu, qu'aurais-je fait si la solution ne me serrait pas venu en mangeant une bonne pizza ! xD

Bref !

mathématiquement que vaut n² - (n-1)² ?


;)_;) disons qu'il est 23h40 et que je ne sais pas trop où tu veux en venir et que faut-il que je réponde :'D
C'est une suite arithmétique c'est ça ?

mathafou
Membre Relatif
Messages: 325
Enregistré le: 12 Fév 2013, 09:48

par mathafou » 29 Mar 2014, 23:43

Shidate Kunan a écrit:Oui, ça je viens de le remarquer à l'instant. J'étais justement en train de chercher comment je peux faire pour changer ça
déplacer le calcul à l'interrieur d'un SI / SINON précédent ?
bref avant d'écrire un algo "dans le langage algobox avec les détails de programmtion", commencer par un algorithme de principe en langage naturel, complet ...
le "bidouillage" d'un programme tout écrit "jusqu'à ce que ça marche" n'est jamais la bonne solution
il faut commencer par réfléchir sérieusemnt au problème avant : quelles sont les opérations qu'il faut faire et quand.


Le soucis, c'est qu'avant que je ne mette cette première affectation, le calcul final avec n et nb_rangée était faussé par les autres valeurs prises. J'ai donc décidé que nb_rangée prendrait la valeur de n pour éviter ce soucis.
faux problème. la raison de tes soucis n'était pas là
cette ligne là est inutile quand elle est suivie immédiatement de
nb_rangée PREND_LA_VALEUR sqrt(n)
point barre
(il n'en était peut être pas de même avant lorsque ces deux lignes étaient séparées par "des trucs" disparus depuis après "bidouillage", voir remarque précédente)

edit :

Citation:
mathématiquement que vaut n² - (n-1)² ?
et que je ne sais pas trop où tu veux en venir


à développer cette expression et à la simplifier
n² - (n² -2n + 1) = 2n - 1
le nombre de triangles dans la première rangée est tout simplement 2*nb_rangée - 1

Shidate Kunan
Membre Naturel
Messages: 26
Enregistré le: 09 Oct 2013, 18:30

par Shidate Kunan » 30 Mar 2014, 00:06

mathafou a écrit:déplacer le calcul à l'interrieur d'un SI / SINON précédent ?
bref avant d'écrire un algo "dans le langage algobox avec les détails de programmtion", commencer par un algorithme de principe en langage naturel, complet ...
le "bidouillage" d'un programme tout écrit "jusqu'à ce que ça marche" n'est jamais la bonne solution
il faut commencer par réfléchir sérieusemnt au problème avant : quelles sont les opérations qu'il faut faire et quand.


C'est ce que je vais tenter de faire demain, là je vais dormir :'D
En revanche, c'est faux. J'ai d'abord tenté un algorithme écrit sur papier pour voir ce que cela pouvait donner. Sauf que je n'ai pas encore fait assez d'algorithme pour connaitre toutes les commandes qu'il me fallait (voir première question) ni leur utilité, ni comment forcement, les utiliser.

Les opérations à réaliser sur l'algorithme ont d'abord été réfléchies et écrites sur papier, pour information. Je n'ai pas tenté de faire du bidouillage, je sais que ça ne mène à rien.

faux problème. la raison de tes soucis n'était pas là
cette ligne là est inutile quand elle est suivie immédiatement de
nb_rangée PREND_LA_VALEUR sqrt(n)
point barre
(il n'en était peut être pas de même avant lorsque ces deux lignes étaient séparées par "des trucs" disparus depuis après "bidouillage", voir remarque précédente)


Je n'ai rien changé entre ces deux lignes lorsque je l'ai testé en mode "pas à pas" pour voir ce que cela donnait. Et c'est à ce moment là que j'ai vu que n prenait une valeur que je ne voulais pas, ce qui m'a poussé à donner à nb_rangée la valeur de n

edit :

à développer cette expression et à la simplifier
n² - (n² -2n + 1) = 2n - 1
le nombre de triangles dans la première rangée est tout simplement 2*nb_rangée - 1


Oui, je n'ai vu ton message qu'après que j'ai réalisé ce que tu voulais dire. La fatigue, sans doute. Et je viens de m'auto-infliger un magnifique facepalm en voyant que je suis parti sacrement loin :')

mathafou
Membre Relatif
Messages: 325
Enregistré le: 12 Fév 2013, 09:48

par mathafou » 30 Mar 2014, 00:26

Shidate Kunan a écrit:algorithme écrit sur papier .... Sauf que je n'ai pas encore fait assez d'algorithme pour connaitre toutes les commandes
j'ai bien dit un algorithme en langage naturel
pas un programme avec des commandes en quelque langage que ce soit

un truc du genre :
Code: Tout sélectionner
entrer n
si racine de n est un nombre entier (*)
      nb de rangées = racine carrée de n
      nb de triangles première rangée = 2*nb de rangées - 1
      afficher "oui on peut", nb de rangées, nb de triangles première rangée
sinon
      afficher "on ne peut pas"
fin si
fin algo

(*) ou "si n est un carré parfait" ou comme tu veux, à ce stade ça n'a aucune importance

un truc qui montre clairement où doivent être mises chacune des opérations
pas les détails "des commandes"

ensuite il n'y a plus qu'à traduire ça dans le langage qu'on veut
la structure est déja définie.

si on veut rajouter des trucs "après coup" on le fait d'abord sur cet algorithme "en langage naturel"
ce qui permet de voir de suite exactement où il faut modifier le programme.

Shidate Kunan
Membre Naturel
Messages: 26
Enregistré le: 09 Oct 2013, 18:30

par Shidate Kunan » 30 Mar 2014, 00:29

Way ben justement, c'est ce que j'ai fait ... pour la fin en tout cas, j'aurais peut-être du le faire intégralement dès le début, ça m'aurait aidé à y voir plus clair :/

Bah, c'est en faisant des erreurs qu'on apprend à ne plus les refaire, n'est-ce pas ?

Je reposterais l'algo' corrigé demain, merci beaucoup beaaaaaucoup pour ton aide ! 8D

Shidate Kunan
Membre Naturel
Messages: 26
Enregistré le: 09 Oct 2013, 18:30

par Shidate Kunan » 30 Mar 2014, 13:42

Bonjour bonjour !

Voilà le résultat, en espérant que c'est niquel cette fois-ci !

Code: Tout sélectionner
1   VARIABLES
2     n EST_DU_TYPE NOMBRE
3     nb_rangée EST_DU_TYPE NOMBRE
4     nb_triangle_dans_1ère_rangée EST_DU_TYPE NOMBRE
5   DEBUT_ALGORITHME
6     LIRE n
7     SI (floor(sqrt(n))==sqrt(n)) ALORS
8       DEBUT_SI
9       AFFICHER "Pour un nombre entier n égal à "
10      AFFICHER n
11      AFFICHER " , on peut empiler exactement "
12      AFFICHER n
13      AFFICHER " triangles."
14      nb_rangée PREND_LA_VALEUR sqrt(n)
15      AFFICHER "Le grand triangle comprend donc "
16      AFFICHER nb_rangée
17      AFFICHER " rangées."
18      nb_triangle_dans_1ère_rangée PREND_LA_VALEUR 2*nb_rangée-1
19      AFFICHER "Il y a "
20      AFFICHER nb_triangle_dans_1ère_rangée
21      AFFICHER " dans la première rangée du grand triangle."
22      FIN_SI
23      SINON
24        DEBUT_SINON
25        AFFICHER "On ne peut pas emplier exactement "
26        AFFICHER n
27        AFFICHER " triangles."
28        FIN_SINON
29  FIN_ALGORITHME

mathafou
Membre Relatif
Messages: 325
Enregistré le: 12 Fév 2013, 09:48

par mathafou » 01 Avr 2014, 00:40

Nickel !

On peut éventuellement améliorer par l'utilisation de variables de type chaine pour diminuer le nombre de "AFFICHER" (on affiche juste cette seule variable qui est la concaténation de tout le fatras, textes et variables)

exemple :
msg EST_DU_TYPE CHAINE
...
msg PREND_LA_VALEUR "avec "+n+"triangles on peut construire un grand triangle de "+nb_rangées+" rangées"
AFFICHER msg

mais c'est du peaufinage.

Shidate Kunan
Membre Naturel
Messages: 26
Enregistré le: 09 Oct 2013, 18:30

par Shidate Kunan » 15 Avr 2014, 21:11

Merci pour tout !

@mathafou : Durant mon temps libre (même si je l'ai déjà rendu) j'ai essayé d'utiliser une chaîne pour l'améliorer, et malgré ce que j'ai pu trouver niveau aide sur Internet, et malgré de nombreux essais, je n'arrive pas à faire fonctionner le système de chaîne ...
Cela dit, on n'a pas encore utilisé ça en cours, mais je suis curieux de savoir comment utiliser cette fonction d'Algobox ...

Merci par avance ! o/

mathafou
Membre Relatif
Messages: 325
Enregistré le: 12 Fév 2013, 09:48

Algobox du code JavaScript auquel il n'aurait normallmement

par mathafou » 22 Avr 2014, 14:21

Shidate Kunan a écrit: j'ai essayé d'utiliser une chaîne pour l'améliorer


les variables chaines sur algobox on deux usages "intéressants"
- en tant que chaines proprement dites (c'est à dire si on veut traiter des chaines "en soi")
- pour formatter les sorties
- (plus un troisième "illlégal" pour "tricher" et faire exécuter par Algobox du code JavaScript auquel il n'aurait normallement pas droit, mébon ...)

ici c'est juste pour formatter les sorties

le principe est de remplacer la sortie de tout un tas de petits bouts par la sortie d'une seule chaine, par utilisation de la concaténation (+) de deux chaines
et c'est exactement mon dernier exemple
ce n'est pas plus compliqué que ça.

traiter réellement des chaines pour les redécouper, les triturer, et faire du traitement dessus n'est pas l'objet de cette question.

 

Retourner vers ✎✎ Lycée

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 35 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite