Avatar billede nikolajdu Nybegynder
28. august 2001 - 12:11 Der er 48 kommentarer og
4 løsninger

Skift operator

Titlen giver næsten sig selv :-)

Jeg er gået lidt kold i mit forsøg på at lave nedenstående og så er det jo at http://www.eksperten.dk/kategori/20 er et glimrende sted. Jeg har 2 tal. Det jeg gerne vil er at kunne skifte mellem at plusse/minusse/gange/dividere ved klik på en knap.

Jeg kan godt lave 4 forskellige funktioner, men er af flere grunde mere interesseret i en løsning hvor man kan nøjes med at skifte operatoren ud.

Altså et script til dette:

_root.sum = Number(_root.tal1)+Number(_root.tal2);
_root.sum = Number(_root.tal1)-Number(_root.tal2);
_root.sum = Number(_root.tal1)*Number(_root.tal2);
_root.sum = Number(_root.tal1)/Number(_root.tal2);

/Nikolaj
Avatar billede hoejrup Nybegynder
28. august 2001 - 12:52 #1
Hvis du i teorien kun havde en knap til at skifte operator, så skulle du trykke op til 3 gange på knappen for at få fat på den korrekte operator.

Er der er fordel i den løsning?

/per



Avatar billede nikolajdu Nybegynder
28. august 2001 - 13:48 #2
Det er ikke så meget en knap der kan skifte jeg er ude efter. Det er simpelthen hvordan jeg laver selve funktionen. I det øjeblik nogen eller nogle kommer med metoden kan jeg selv lave resten. Har virkeligt spekuleret her, men er rimeligt blank...
Avatar billede pixelpaw Nybegynder
28. august 2001 - 14:38 #3
er det ligesom på en lommeregner?
Avatar billede nikolajdu Nybegynder
28. august 2001 - 14:44 #4
Det der er hele humlen er at jeg har mange tal der skal bruge disse operatorer. Det jeg så er ude efter er at lave én funktion med operator skift fremfor flere funktioner med alle mulige konstallationer af operatorer.

Hvis jeg kunne scripte en operator ind ville det gøre det tusinde gange nemmere.
Avatar billede pixelpaw Nybegynder
28. august 2001 - 14:52 #5
ja istedet for at bruge en masse if/else sætninger? klart
sidder lige og roder lidt med det, men det går sku ikke så godt igen
Avatar billede Slettet bruger
28. august 2001 - 15:44 #6
Kan du ikke prøve at samle  din nuværende sum og input op for dernæst at køre et IF THEN i stil med;

Current = lastsum;
if (tegn eq \"*\") {
    _root.sum = input*Current;
    lastsum = _root.sum;
}
if (tegn eq \"+\") {
    _root.sum = input+Current;
    lastsum = _root.sum;
}
if (tegn eq \"-\") {
    _root.sum = input-Current;
    lastsum = _root.sum;
}
if (tegn eq \"/\") {
    _root.sum = input/Current;
    lastsum = _root.sum;
}

Jeg tror nemlig ikke du kommer ud over at lave en if/else sætning... selvom det andet lyder smart, tror jeg du kommer til at gøre det mere kompliceret som så ;-)
Avatar billede nikolajdu Nybegynder
28. august 2001 - 15:49 #7
Jeg tvivler også meget på at det ville kunne lade sig gøre. Din idé bliver nogenlunde det samme som Paw lige har foreslået over Icq.

du bliver nok nødt til at lave en function med nogle if else sætninger alt efter hvad du sender med i den function

function calc(strOperator){
  if(strOperator == \"+\"){
    _root.sum = _root.tal1 + _root.tal2;
  }else if(strOperator == \"-\"){
    _root.sum = _root.tal1 - _root.tal2;
  }
}

Problemet er at der skal være flere hundrede udregninger og hvis jeg ikke kan lave en samlet funktion der kan placere operatorene bliver det nok nemmest at smide hele formler ind :-(

I øvrigt skal der heller ikke være noget input - Det var kun for at kunne teste med flere tal.
Avatar billede Slettet bruger
28. august 2001 - 15:50 #8
skal selvfølgelig være ;;

if (tegn eq \"+\") {
    _root.sum = Number(input)+Number(Current);
    lastsum = _root.sum;
Avatar billede olebole Juniormester
28. august 2001 - 16:29 #9
<ole>

<script language=\"JavaScript\">
var bla = \"+\";
function beregn() {
    total =eval(30+bla+10);
    alert(total);
}
</script>

...og:

<a href=\"#\" onclick=\"bla=\'+\'\">Plus</a><br><br>
<a href=\"#\" onclick=\"bla=\'-\'\">Minus</a><br><br>
<a href=\"#\" onclick=\"beregn();\">Beregn</a>

...såmænd bare  =o)
/mvh
</bole>
Avatar billede pixelpaw Nybegynder
28. august 2001 - 16:37 #10
bare synd at det ikke virker i Flash  :(
Avatar billede lingoman Nybegynder
28. august 2001 - 16:38 #11
Hej Alle,

Var det ikke en ide at bruge eval() her og sætte strengen ved hvert klik til

fks

startStreng = \"_root.sum = Number(_root.tal1)\"
endStreng = \"Number(_root.tal2);\"
            myOperator = \"+\"

myString = startStreng + myOperator + endStreng;

eval(myString);

myOperator skiftes så til \"+\", \"-\",\"*\",\"/\" ved klik

mvh geo
Avatar billede pixelpaw Nybegynder
28. august 2001 - 16:43 #12
det har jeg også testet, men kan ikke få det til at virke
Avatar billede olebole Juniormester
28. august 2001 - 16:43 #13
pixelpaw >> hvorfor mener du, det ikke virker i Flash? Har du prøvet?
Avatar billede pixelpaw Nybegynder
28. august 2001 - 16:44 #14
function calc (strOperator) {
    _root.sum = Number(_root.tal1)+strOperator+Number(_root.tal2);
}

sum = 2+5
_____________
function calc (strOperator) {
    _root.sum = eval(Number(_root.tal1)+strOperator+Number(_root.tal2);)
}

sum =

så sker der ingenting
Avatar billede lingoman Nybegynder
28. august 2001 - 16:45 #15
eval() SKAL have en streng !
Avatar billede olebole Juniormester
28. august 2001 - 16:50 #16
23+\"\"
Så er det vel en stren, eller?
Avatar billede olebole Juniormester
28. august 2001 - 16:51 #17
...altså:
_root.tal1+\"\";
Avatar billede lingoman Nybegynder
28. august 2001 - 16:57 #18
eval(\"_root.sum = _root.tal1+_root.tal2\") ; er kommandoen der bliver udført.

startString = \"_root.sum = _root.tal1\";
endString = _root.tal2\";

operatorString = \"+\";

myString = startString + operatorString + endString

eval( myString);

mvh geo
Avatar billede pixelpaw Nybegynder
28. august 2001 - 17:05 #19
men operatorString skal være dynamisk
operatorString = \"_root.strOperator\"

jeg kan ikke få det til at virke
Avatar billede lingoman Nybegynder
28. august 2001 - 17:05 #20
Er I der ?
Avatar billede olebole Juniormester
28. august 2001 - 17:07 #21
Hvad sker der her:
  startString = \"_root.sum = _root.tal1\";
.....?!?!?!
Avatar billede olebole Juniormester
28. august 2001 - 17:08 #22
Prøv liiiiige at skrive: alert(startString);
Avatar billede Slettet bruger
28. august 2001 - 17:23 #23
Lingoman -> har du afprøvet dit eksempel ?? virker det ?? nej vel ;-)
Avatar billede olebole Juniormester
28. august 2001 - 17:50 #24
pixelpaw >> Den forstår jeg ikke: 28/08 2001 17:05:19.
Men lad os nu snart få nikolajdu på banen, så vi kan høre, hvad han kan finde ud af. Det er jo trods alt hans spm  :)
/mvh
Avatar billede pixelpaw Nybegynder
28. august 2001 - 18:00 #25
ole, operatorString (fra geo eksempel) er sat til \"+\"
men denne string skal være dynamisk alt efter hvad der måske er blevet trykket på af enten +,-,* eller /, det var bare det jeg mente
:)
Avatar billede olebole Juniormester
28. august 2001 - 18:12 #26
pixel >> Hvad returnerer dette: alert(Number(_root.tal1)); og: alert(operatorString); ?
Avatar billede jakoba Nybegynder
28. august 2001 - 18:32 #27
<script language=\'javascript\'>

function plus ( a, b ){ return a+b };
function minus ( a, b ){ return a-b };
function gange ( a, b ){ return a*b };
function dele ( a, b ){ return a/b };
var udvalg = new Array( plus, minus, gange, dele );

var operator = plus;

function setOperator ( kode ) // 0=+ 1=- 2=* 3=/
    if ( 0 <= kode && kode <= 3 )
      operator = udvalg[kode];
};

</script>

nu kan du skifte operator med
    setOperator( 2 );    // bliver til gange
og så gange alle de tal du vil med:
    resultat = operator( tal1, tal2 )

mvh JakobA
Avatar billede jakoba Nybegynder
28. august 2001 - 18:36 #28
alternativt kan du nårsomhelst kalde
    resultat = udvalg[1]( tal1, tal2 );  // giver tal1-tal2

men det er vist kun nyttigt til nere fintede operatorer der ikke er indbygget i javascript. det er immervæk nemmere at skrive
    resultat = tal1 - tak2;  // :-))
Avatar billede lingoman Nybegynder
28. august 2001 - 20:08 #29
diktator> Du har ret, og jeg har taget fejl ...

Actionscript\'s eval() er ikke det samme som javascript kan jeg nu se, men følgende er testet og virker

tal1 = 5;
tal2 = 3;

myStr = \"+\";


    plusResult = tal1+tal2;

    minusResult = tal1-tal2;

    multResult = tal1*tal2;

    divResult = tal1/tal2;

if (myStr == \"+\") {
    myOp = \"plus\";
}
if (myStr == \"-\") {
    myOp = \"minus\";
}
if (myStr == \"*\") {
    myOp = \"mult\";
}
if (myStr == \"/\") {
    myOp = \"div\";
}

trace(eval(  +myop + \"Result\"));

mySTR strengen kan så ændres dynamisk til \"+\", \"-\", \"*\", \"/\", for at give de forskellige resultater


mvh geo
Avatar billede pixelpaw Nybegynder
28. august 2001 - 20:16 #30
geo, så er vi tilbage til if/else sætningerne ...
Avatar billede lingoman Nybegynder
28. august 2001 - 20:21 #31
pixelpaw> Jep, vi kan altså ikke lave actionScript strenge dynamisk som eksekverer via eval() funktionen :(
Der må der være en eller anden måde...
Avatar billede olebole Juniormester
28. august 2001 - 20:30 #32
lingoman og pixelpaw >> I skal vist have pengene tilbage for jeres monitors. Noget tyder på de ikke kan vise bogstaverne \'j\', \'a\', \'k\', \'o\', \'b\' og \'a\'...og det er jo noget frygteligt roderi  =o)
/mvh
Avatar billede olebole Juniormester
28. august 2001 - 20:31 #33
...eller læser I bare ikke besvarelserne?  :)
Avatar billede pixelpaw Nybegynder
28. august 2001 - 20:42 #34
eller også forstod jeg det bare ikke  :)
Avatar billede olebole Juniormester
28. august 2001 - 20:53 #35
Hehe  =o)
Ellers det bedste forslag på denne side  :)
/mvh
Avatar billede olebole Juniormester
28. august 2001 - 21:03 #36
Dette er en funktion, der returnerer summen af de to tal \'a\' og \'b\':
  function plus( a, b ){ return a+b };
(Jeg kan nu bare ikke lide, at jakoba har lavet mellemrum mellem \'plus\' og parentesen).

Her sættes variablen \'operator\' - ved at sende 0, 1, 2 eller 3 med som argument:
  var udvalg = new Array( plus, minus, gange, dele );
  var operator = plus;

  function setOperator ( kode ) // 0=+ 1=- 2=* 3=/
      if ( 0 <= kode && kode <= 3 )
      operator = udvalg[kode];
  };

Så kan du sætte \'operator\' til \'gange\' med:
  setOperator( 2 );

Når du har gjort det, kan du skrive:
  resultat = operator( tal1, tal2 );
...og derved gange de to tal.........comprende?  :)
/mvh

Avatar billede pixelpaw Nybegynder
28. august 2001 - 21:25 #37
jeg må lige se om jeg kan få det til at virke i Flash
Avatar billede pixelpaw Nybegynder
28. august 2001 - 23:36 #38
Avatar billede lingoman Nybegynder
28. august 2001 - 23:38 #39
pixelpaw>Bare du også havde zipped den :(
Avatar billede jakoba Nybegynder
28. august 2001 - 23:45 #40
Det er vist det med at javascript ikke virker i flash.

Men jeg troede egentlig at flash-sider havde både en html del (hvor javascript virker) og en flash-del hvor javascriptet udenfor kan kaldes med noget i retning af \"java script:setOperator(2);\".

mvh JakobA
Avatar billede pixelpaw Nybegynder
29. august 2001 - 01:10 #41
geo, skal jeg zippe den?
Avatar billede pixelpaw Nybegynder
29. august 2001 - 01:11 #42
Avatar billede lingoman Nybegynder
29. august 2001 - 06:28 #43
pixelpaw> Tak !  Kigger på det når jeg kommer hjem :)
Avatar billede nikolajdu Nybegynder
29. august 2001 - 07:07 #44
Gik lige i kassen i går, så har ikke fået kigget på det.

Jakoba - Du har helt ret. JavaScript virker ikke i flash - Kun i browseren. Grunden til at jeg skrev til Ole og dig tidligere at en js løsning også kunne bruges, er at opbygningen af actionScript og js er nogenlunde den samme. Derfor tænkte jeg at det måtte være umiddelbart til at overføre.

Hele det her \"_root.\" tingeling angiver en absolut sti til variablen. Dette er i og for sig ligegyldigt, da beregningerne kommer til at ligge i tomme clip eller inkluderede actionScript filer (nogenlunde det samme som eksterne .js filer) hvor der altså ingen niveauer er i.

Da antallet af tal kan ændre sig fra 2 til måske 30 havde jeg selv umiddelbart forestillet mig en mere dynamisk løsning hvor tal plus operatorer blev lagt ind i en streng, der derefter blev søgt igennem, splittet op og evalueret. Princippet herfor er stort set det samme som i Js. Dog med den undtagelse at de andre tilsyneladende har fundet ud af at Eval() åbentbart ikke helt har samme funktion.
Avatar billede nikolajdu Nybegynder
06. september 2001 - 08:11 #45
Har ikke rigtigt fået det til at virke efter hensigten og tvivler på at vil som jeg vil. Hvis nu bare eval() havde haft helt samme virkemåde i Flash såååå....

Paw - hvis du lige svarer så kan i få jer en deler :-)
Avatar billede Slettet bruger
06. september 2001 - 10:14 #46
Avatar billede nikolajdu Nybegynder
06. september 2001 - 10:22 #47
Tak det ser også spændende ud der :-)
Avatar billede pixelpaw Nybegynder
06. september 2001 - 10:33 #48
svar
Avatar billede nikolajdu Nybegynder
06. september 2001 - 10:35 #49
Da jeg går ud fra at D!ktator stædigt holder fast på at han ingen point vil have, så lukker jeg her.

Tak for indsatsen - Vender tilbage hvis/når jeg ser lyset :-)

/Nikolaj
Avatar billede pixelpaw Nybegynder
06. september 2001 - 10:43 #50
ja hvis du finder et fuldstændigt svar, så vil jeg enormt gerne se det.
Avatar billede lingoman Nybegynder
17. november 2001 - 23:23 #51
Det umulige blev mulugt!

Fandt et fuldstændigt svar her
Citat:

\"Hi everybody,

i just uploaded a parser for
mathematical expressions to
www.bokelberg.de/actionscript

go down the page to experiments.

please report bugs to
actionscript@bokelberg.de

--
bokel
http://www.bokelberg.de/actionscript\"

Jeg har tested det og det virker.

Var lige ved at paste actionen ind her men kom i tanke om at det måske ikke var lovligt da jeg ikke har bedt om bokels tilladelse. Dog kan man downloade .as filen ved at følge linket for oven :o)

mvh geo
Avatar billede pixelpaw Nybegynder
18. november 2001 - 00:29 #52
for sejt!

det vil jeg lige kigge lidt nærmere på  :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester