Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 5793
Réponses : 25
Type : discussion
Etat : réponses autorisées

Intervalles

Calipso le 20/10/2011 à 17:14
Bonjour, j'aimerais faire un programme sur les intervalles ! et c'est plus compliqué que ça en a l'air !

Avec les association de 2 ou 3 intervalles, les "Union" les "inter" etc...

genre d'abord choisir si on veut 2 ou 3 interval
Puis on entre les valeur si ya par exemple 2 interval:
5/4 < x <= -5/3
ou
1/2 < x <= 7/2

et comme c'est "ou", "union" ça dois donner l'interval: [-5/3 ; 5/4[
et si possible un ptit dessin avec les 4 nombres dans l'ordre et tout minied.gif

mais le problème c'est que, je ne sais pas comment faire les condition avec les signe ">" ou "=>". surtout que ce n'est pas toujours du genre: a<x<b ; ya aussi x<a pour un interval avec + ou - infini...
Calipso le 20/10/2011 à 17:18
A oui, il faut aussi que le programme dis si c'est un ensemble vide et tout...
et si ya 3 intervalles, qu'il fasse d'abord les 2 premiers, puis l'autre

par exemple: a<x<b ou c<x<d et x>e
ça fasse dabord a<x<b ou c<x<d; puis le résultat inter x>e

voila je sais pas si c'est faisable !
Calipso le 20/10/2011 à 18:03
Et... encore moi, commetn on fais si on a des nombre, que le programme les mettre dans l'ordre croissant ??
sandro le 20/10/2011 à 18:17
Tu peut les mettre dans une liste et utiliser lafonction TriCroi( (dans stats) avc pour argument : soit une liste à trier, soit plusieurs listes de même longueur dont les termes seront clasés par odre croisaant de la liste placée en première.

Sandro
Calipso le 20/10/2011 à 18:27
Merci de répondre happy.gif

mais je ne comprend pas trop !

Si j'ai par exemple 6 variable A,B,C,D,E,F :
je fais: L1={A,B,C,D,E,F}

et après ?
sandro le 20/10/2011 à 18:32
Je te conseille :
Code
Prompt A,B,C,D,E,F
{A,B,C,D,E,F -> L1
TriCroi(L1
L1(1 -> G
L1(2 -> H
L1(3 -> I
L1(4 -> J
L1(5 -> K
L1(6 -> L


Tu aura donc G<H<I<J<K<L.

Si l'ordre importe, prévient moi en expliquant clairement comment tu compte untiliser les résultats une fois triés.

Sandro
Calipso le 20/10/2011 à 18:37
Merci !!
Si j'ai 6 variables, dans le désordre je veux les mettres dans l'ordre croissant pour pouvoir les mettre ensuite sur un axe des Réel.

Je pense que tu as répondu a ma question merci happy.gif
sandro le 20/10/2011 à 18:54
Derien, si c'es ça qu'il te faut, ça va; si par contre il t'aurrait fallut garder les intervales, ça aurrait été plus compliqué.

Sandro
Calipso le 20/10/2011 à 19:02
J'ai fais comme cela:

-je choisi la forme du premier interval
-je choisi si c'est une union ou intersection
-je choisi la forme du second interval

forme:
a < x < b
a <= x <= b
a <= x < b
a < x <= b
a < x
a <= x
a > x
a >= x

Puis j'entre la (ou les) valeur(s)

Puis je les met dasn l'ordre sur un axe, avec les beau interval happy.gif
puis, après quelque condition je vois le résultat si c'est ensemble vide ou autre chose.
sandro le 20/10/2011 à 19:16
Bonne chance.

Par contre un petit rappel : ne fait jamais If 9<X<20 sur la TI, elle le comprendrait comme : si 9<X : If 1<20 et sinon 0<20
Il te faut doncécrire If 9<X and X<20

Sandro
Calipso le 20/10/2011 à 19:20
Dac, merci !!
je montrerais le programme quand je finirais happy.gif
Calipso le 20/10/2011 à 20:15
Une ptit chose qui me pose problème ^^

Si dans les valeur je met: 5/3 ; ou racine de 2
je voudrai que elle reste comme elle sont, en fraction ou en racine sans être calculé... ou, au pire je voudrai qu'elle soit arrondi a un seul chiffre après la virgule
sandro le 20/10/2011 à 20:20
Pour garder tel quel, il faut que tu remplace Prompt A par
Code
Imput"A",Chaîne1         //Chaîne1 se trouve dans Var/7
expr(Chaîne1 -> A        //expr(  n'est que dans le catalogue

Ensuite, pour afficher A exactement comme rentré, tu remplace A par Chaîne 1

Sandro
Calipso le 20/10/2011 à 20:33
C'est cool ça happy.gif
si par exemple dans la chaine on ne met pas un nombre mais des lettre le expr ne marche pas ? ^^ je ne veux pas le faire mais c'est juste pour savoir happy.gif

merci ! et bien on a tout prévu en programmation godgrace.gif
Calipso le 20/10/2011 à 20:38
Aaaah ça me pose un autre problème !

par exemple:

Code

Imput"A",Chaîne1 
expr(Chaîne1 -> A 
Imput"B",Chaîne2 
expr(Chaîne2 -> B

{A,B-> L1
SorA(L1
L1(1 -> C    //  ma chaine 1 et ma chaine 2 elle sont ou ???
L1(2 -> D    //  je ne peut plus savoir ??

sandro le 20/10/2011 à 20:41
Dans tous les cas tu poura afficher le contenue en tant que texte, par contre si tu met expr(Chaîne1 et que le contenu de Chaîne 1 ne peut pas être calculé, la Ti t'affiche une erreure.
Par example:
2+6(2) est valable
2+()2 est invalide
2+3A+C est valide
7*L1(1 est valide (L1 est une chaîne
7*L1 est valide si au lieux d'enregistrer le résulat dans une variable nombre, tu l'enregistre dans une liste

Sandro
Calipso le 20/10/2011 à 20:45
Ok ! et pour mon dernier problème ? ^^
je peux mettre dans l'ordre des nombres mais mettre dans l'ordre des chaines calculable je sais pas...
sandro le 20/10/2011 à 20:52
Pas directement : tu peut mettre dans l'ordre les nombres et ensuite tester chaîne par chaîne si la valeur corespond : si oi : afficher la chaîne, sinon, tenter la chaîne suivante.
Ou alors, chercher dans la liste où ce situe le nombre corespondant à telle chaîne et afficher en conséquence.

sandro
Calipso le 20/10/2011 à 20:56
Code


Imput"A",Chaîne1
expr(Chaîne1 -> A
Imput"B",Chaîne2
expr(Chaîne2 -> B

{A,B-> L1
SorA(L1
L1(1 -> str3
expr(str3 -> C   
L1(2 -> str4
expr(str4 -> C

if str1 = str3 : str3 -> str1


comme ça ?
sandro le 20/10/2011 à 21:06
Non, ça ne marchear pas, on ne peut pas mettre un nombre dans une chaîne directement.

Il te faudrait faire :
Code
Imput"A",Chaîne1
expr(Chaîne1 -> A
Imput"B",Chaîne2
expr(Chaîne2 -> B
Imput"C",Chaîne3
expr(Chaîne3 -> B
Imput"D",Chaîne4
expr(Chaîne4 -> B

{A,B,C,D-> L1
SorA(L1

{X1,X2,X3,X4 -> L2      //abscisse du premier, puis second, puis 3ème puis 4ème texte
{Y1,Y2,Y3,Y4 -> L3      //ordonnée du premier, puis second, puis 3ème puis 4ème texte

For(X,1,dim(L1
L1(X -> Z
If Z=A
Output(L3(X),L2(X),Chaîne1
If Z=B
Output(L3(X),L2(X),Chaîne2
If Z=C
Output(L3(X),L2(X),Chaîne3
If Z=D
Output(L3(X),L2(X),Chaîne4
End


Sandro

PS : si tu est sur écran graphique, remplace Output par Texte en adaptant les valeures des coordonnées.
Calipso le 20/10/2011 à 21:26
Bouuuuh je comprend plus...

bon j'ai:
G = str4
H = str5
I = str6
J = str7

{G,H,I,J-> L1
L1(1-> K
L1(2-> L
L1(3-> M
L1(4-> N

et après je veux affiché K,L,M,N dans l'ordre en image
je n'ai vraiment pas compris ce que tu as fais avant...
sandro le 20/10/2011 à 21:45
La méthode que tu site n'est plus trop d'actualité (s'était avant que je sache précisément ce que tu voulait en faire.

Je t'explique donc le code :
Code
Imput"A",Chaîne1      //on entre les chaînes et en les calcule : de ici
expr(Chaîne1 -> A
Imput"B",Chaîne2
expr(Chaîne2 -> B
Imput"C",Chaîne3
expr(Chaîne3 -> B
Imput"D",Chaîne4
expr(Chaîne4 -> B           //jusqu'à là

{A,B,C,D-> L1               // on met les valeures numériques dans une liste ...
SorA(L1               // ... que l'on trie par ordre croissant

{X1,X2,X3,X4 -> L2      //liste qui permet de retrouver l'abscisse des expréssions
à placer (indépendamant de valeures: on associe juste à la plus petite valeur un emplacement
 spécifique, et de même pour les suivantes.
{Y1,Y2,Y3,Y4 -> L3      //idem mais pour l'ordonnéee
For(X,1,dim(L1   // boucle plaçant les expréssions
L1(X -> Z
If Z=A
Output(L3(X),L2(X),Chaîne1
If Z=B
Output(L3(X),L2(X),Chaîne2
If Z=C
Output(L3(X),L2(X),Chaîne3
If Z=D
Output(L3(X),L2(X),Chaîne4
End


Explication de la boucle :
For(X,1,dim(L1 : on fait passer la variable X par toutes les rand dans la liste (plus X est petit, plus la valeur associée sera petite.
L1(X -> Z : on fait passer dans Z la valeur numérique du Xème plus petit nombre

ensuite, on teste à chaque fois si c'est égal à A (c'est-à-dire a la première chaîne), puis à B, à C et à D et quand c'est la bonne chaîne qui a été retrouvée, on la positionne à l'emplacement déterminé par son rand à l'aide des listes L2 et L3.

En espérant avoir été assez clair,
Sandro
Calipso le 20/10/2011 à 22:03
C'est assez compliqué ^^

merci en tout cas. Mais je n'ai pas assez d'expérience dans le domaine...
pour arrondir un nombre, c'est int(
mais pour arrondir a un chiffre après la virgule c'est quoi ?

Je pense qu'après ça je vais me couché, merci d'avoir suivi mmon programme je le posterais demain happy.gif
Calipso le 20/10/2011 à 23:05
{X1,X2,X3,X4 -> L2

X1 c'est quoi ? un "X" suivi d'un "1" ?
sandro le 21/10/2011 à 20:31
Non, c'est à remplacer par les abscisses : si par example tu veut afficher la plus petite valeur en abcisse 3, la secconde en 5, la 3ème en 7 et la dernière en 9 , tu fait {3,5,7,9 -> L2

Sandro
linkakro le 24/10/2011 à 23:31
Ce code permet certes d'afficher des expressions, mais je trouve dommage de compliquer le problème ainsi. Je tente donc ceci tout simplement.
Code
Prompt A,B,C,D
{A,B,C,D->L1
SortA(L1
For(E,1,4
Output(E+4,1,arrondi(L1(E),1
End


Et avec ça il ne devrait plus y avoir de problème pour voir les intervalles et les intersections.
Code
Prompt A,B,C,D
{A,B,C,D->L1
SortA(L1
For(E,1,4
Texte(0,10E,arrondi(L1(E),1
End
For(E,1,4
L1(E
If A=Rép
10E->F
If B=Rép
10E->G
If C=Rép
10E->H
If D=Rép
10E->I
End
Ligne(F,10,G,10
Ligne(H,20,I,10