Page 1 of 1

Re: besoin d'aide

Unread postPosted: 12 Oct 2014, 22:04
by saidina hamza
je voudrais mettre des variables dans Request il peuvent allez de 7 à 12 variables. je voudrais que si j'ai 7 données les autres espaces je laisse des espaces libres et que la calculatrice me calcule que la ou il y a des données

Re: besoin d'aide

Unread postPosted: 12 Oct 2014, 22:53
by Bisam
Il suffit d'utiliser des listes comme seules variables, avec la bonne taille !
Tu peux faire tous les calculs directement sur les listes
Tu peux même faire afficher toutes tes listes en même temps grâce aux matrices.

Cela simplifie encore grandement ton code :
Code: Select all
()
Prgm
Local d,e,g,pe,pg,ce,dg
Lbl deb
Dialog
  Title "Tableau"
  Request "Donner la liste des prix", d
  Request "Q1 : trop cher", e
  Request "Q2 : mauvaise qualité", g
EndDlog
Try
  expr(d)->d
  expr(e)->e
  expr(g)->g
Else
  Text "Une des listes entrées est erronée"
  Goto deb
EndTry
e*100/sum(e)->pe
g*100/sum(g)->pg
cumSum(pe)->ce
100-cumSum(pg)->dg
ClrIO
Pause augment(["Prix", "trop cher", "en %", "% cumulé", "camelote", "en %", "% cumulé", "% acheteurs"]; {d, e, pe, ce, g, pg, dg, 100-ce-dg}T)
EndPrgm

Le "T" de la dernière ligne est le "T" de la transposée, que l'on obtient dans [2nd] [Math] [4] [1].
J'espère avoir bien compris ce que tu voulais...

Re: besoin d'aide

Unread postPosted: 13 Oct 2014, 21:16
by saidina hamza
Code: Select all
()
Prgm
Dialog
  Title "prévision des ventes"
  Request "liste prix",d
EndDlog
expr(d)»d
ClrIO
dim(d)»g
If fPart(g/2)=0 Then
  mid(d,d[1],g/2)»k
Else
  mid(d,d[1],g/2+0.5)»k
EndIf
mean(right(k,g))»e   © (je voudrais moyenne de d[i] qui se trouve à droite)
mean(left(k,g))»f    © (je voudrais moyenne de d[i] qui se trouve à gauche)
mean(right(d,g))»h   © (je voudrais la moyenne de dim(d) qui se trouve à droite )
main(left(d,g))»j  © (je voudrais la moyenne de dim(d) qui se trouve à gauche)
Disp "X1="&string(h)&"   Y1="&string(e)
Pause "X2="&string(j)&"   Y2="&string(f)
Disp string(f)&"=a*"&string(j)&"+b"
Pause string(e)&"=a*"&string(h)&"+b"
(f-e)/(h-j)»a
e-a*h»b
EndPrgm

Re: besoin d'aide

Unread postPosted: 13 Oct 2014, 22:04
by Bisam
Je corrige une petite erreur sur le programme précédent et j'en profite pour mettre des valeurs approchées arrondies à 2 décimales :
Code: Select all
()
Prgm
Local d,e,g,pe,pg,ce,dg
Lbl deb
Dialog
  Title "Tableau"
  Request "Donner la liste des prix", d
  Request "Q1 : trop cher", e
  Request "Q2 : mauvaise qualité", g
EndDlog
Try
  expr(d)->d
  expr(e)->e
  expr(g)->g
Else
  Text "Une des listes entrées est erronée"
  Goto deb
EndTry
approx(e*100/sum(e))->pe
approx(g*100/sum(g))->pg
cumSum(pe)->ce
shift(pg)->dg
0->dg[1]
100-cumSum(dg)->dg
ClrIO
Pause augment(["Prix", "trop cher", "en %", "% cumulé", "camelote", "en %", "% cumulé", "% acheteurs"]; round({d, e, pe, ce, g, pg, dg, 100-ce-dg},2)T)
EndPrgm

Le "T" de la dernière ligne est le "T" de la transposée, que l'on obtient dans [2nd] [Math] [4] [1].

Re: besoin d'aide

Unread postPosted: 24 Oct 2014, 11:51
by saidina hamza
(en gros les données peuvent être inconnu pour les calculer j'ai l'habitude de mettre 0 et avec la condition If ... Then ... EndIf je les calcule )
Code: Select all
()
Prgm
ClrIO
Dialog
  Request "Chiffre d'affaires",c
  Request "charges variable",cv
  Request "Marge sur cout var",sv
  Request "charges fixes",cf
  Request "résultat",r
EndDlog
expr(c)»c
expr(cv)»cv
expr(sv)»sv
expr(cf)»cf
expr(r)»r
Lbl a1
If cv=0 Then 
  c-sv»cv
  Goto a1
EndIf
If c>0 and cv>0 and sv=0 Then
  c+cv»sv
  Goto a1
EndIf
If sv=0 and cf>0 and r>0 Then
  cf+r»sv
  Goto a1
EndIf
If c=0 Then
  cv+sv»c
  Goto a1
EndIf
If cf=0 Then
  sv-r»cf
  Goto a1
EndIf
If r=0 Then
  sv-cf»r
  Goto a1
EndIf
seq(i,i,1,1)»b
b*c/c*100»ca     (pourcentage
b*cv/c*100»chv       .....
b*sv/c*100»msv      ......
b*cf/c*100»chf     ........
b*r/c*100»re         ....... pourcentage)
b*c»c        (données ou calculés
b*cv»cv       .........
b*sv»sv        .........
b*cf»cf         ........
b*r»r            ..... données ou calculés )
Pause augment(["chiffre d'affaire","charges variable","MSCV","charges fixes","résultat"];{c,cv,sv,cf,r}T)
Pause augment(["chiffre d'affaire","charges variable","MSCV","charges fixes","résultat"];{ca,chv,msv,chf,re}T)
EndPrgm

Re: besoin d'aide

Unread postPosted: 24 Oct 2014, 12:58
by Bisam
Voici quelques améliorations possibles :
1) Utilise des variables locales pour ne pas polluer ton espace de travail avec des variables qui ne servent que dans ton programme.
2) Donne des valeurs par défaut égales à 0 (pour ne pas être obligé de le taper... et du coup de pas oublier)
3) Évite le Goto avec une boucle while (ou même simplement des If bien écrits...) (d'ailleurs, il me semble qu'il y a une erreur dans l'une des formules : si sv=0, il faut le calculer en faisant c-cv et non c+cv, si je ne m'abuse)
4) Ta variable b ne sert à rien, ainsi que les 3/4 des calculs suivants. En plus, tu pourrais tout simplifier en mettant tout dans une seule liste.
5) Tu peux tout afficher (chiffres exacts ET pourcentages) dans un même tableau.
6) Il y a pas mal de fautes d'orthographe...

Voici une façon d'améliorer tout ce que je viens de citer :
Code: Select all
()
Prgm
Local c, cv, sv, cf, r, chif
ClrIO
"0"»c
c»cv
c»sv
c»cf
c»r
Dialog
  Request "Chiffre d'affaires",c
  Request "Charges variable",cv
  Request "Marge sur coût var",sv
  Request "Charges fixes",cf
  Request "Résultat",r
EndDlog
expr(c)»c
expr(cv)»cv
expr(sv)»sv
expr(cf)»cf
expr(r)»r
While c*cv*sv*r*cf=0
  If cv=0
    c-sv»cv
  If sv=0 and c>0 and cv>0
    c-cv»sv
  If sv=0 and cf>0 and r>0
    cf+r»sv
  If c=0
    cv+sv»c
  If cf=0
    sv-r»cf
  If r=0
    sv-cf»r
EndWhile
{c, cv, sv, cf, r}»chif
Pause augment(["Chiffre d'affaire", "Charges variables", "MSCV", "Charges fixes", "Résultat"];{chif, 100*chif/c}T)
EndPrgm