Avatar billede dl Nybegynder
06. februar 2001 - 19:49 Der er 19 kommentarer og
1 løsning

Matematik og programmering

Der er nogen der har et bud på hvordan man lave en funktion fx Regn( Value: String ): Integer;
Som skal kunne regne fx:
3,14(12 + 5(2 - 1) * 2 )

som så bliver sendt til som en String, og komme tilbage som et tal.

==========================================

Den skal kunne udregne med og uden komma.

Og den skal regne med \"(\" og \")\" - skal regnes først.

Og så skal den kunne + og - og / og *.

Kan i løse denne opg.

PS. Og der er flere point, hvis det er det der skal til.

Avatar billede erikjacobsen Ekspert
06. februar 2001 - 20:20 #1
Sagtens, men hvis det er en skoleopgave burde du se at få startet på den
selv, og så få hjælp undervejs. Meget bedre!!
Avatar billede drean Nybegynder
06. februar 2001 - 20:26 #2
hæhæ
Avatar billede stigc Nybegynder
06. februar 2001 - 20:27 #3
Det er godt nok en være end! Det kræver jo sin mand at lave en parser, men den kna heldigvsi downlaodes her:

http://linderoman.republika.pl/parser.html
Avatar billede stigc Nybegynder
06. februar 2001 - 20:29 #4
Avatar billede dj Nybegynder
06. februar 2001 - 22:16 #5
/me fiser igen ud og opretter et spørgsmål til 6000 point til den første den bedste der kan svare ham på hvad 2+2 er ..

ADMIN ! hvis det her pointsystem skal holde på nogen som helst måde, så skal der altså nogle regler om de point til ..

Den person der svarer på dette spørgsmål vil ryge op på en samlet 6 plads i kategorien Delphi, over folk der har svaret på MANGE spørgsmål for at opnå deres plads! Kan dette være rigtigt?

Jeg ved ikke med jer andre .. men jeg ser en ende på Eksperten.dk eftersom folk tilsyneladende ikke kan styre deres point mere og det er ikke fedt at ligge på en Top10 hvis enhver bare kan svare på et newbie spørgsmål og så rykke op over alle andre ..

dl >> og ja jeg ville have hjulpet dig for 60 point, men jeg vil ikke føle det er fair over for nogen som helst på dette forum at svare på noget til 2500 point, og absolut ikke fair over for dem der har opnået det antal point ved at svare på spørgsmål over mange måneder.

Jeg har selv været med her på eksperten.dk fra starten og har svaret på utallige spørgsmål her i Delphi kategorien igennem tiden, jeg ser ikke point som noget specielt, det eneste der gør det lidt \"sjovt\" at bruge sin tid på at hjælpe andre herinde er Top10 listen efter min mening, lidt konkurrence skader jo aldrig :)
Men hvis det her overdrevne Pointofring fortsætter, så bliver der ligepludselig heller ikke noget ved at ligge på Top10 listen og så bliver der ligepludselig heller ikke noget ved Eksperten.dk.

Så jeg vil bare sige TAK fordi du er så flink og deltage aktivt i at ødelægge et ellers genialt forum!

Mvh. en lettere negativ _DJ_
Avatar billede wismann Nybegynder
06. februar 2001 - 22:39 #6
jeg er enig med Dj, selv om jeg ikke har været her rat længe og det kunne da være fedt at score 2500 point på et spm, men det er Abosolut ikke fair for de andre.
Så du bedes lade være med at ødelægge et genialt forum.

/vh
Wismann
Avatar billede pellelil Nybegynder
07. februar 2001 - 06:57 #7
DL> her har du en, der desuden også giver dig mulighed for nogle få matematiske funktioner. De eneste pascal-funktioner som jeg ikke har medtaget er \"StripCh(szExpression, \' \')\" og \"ReplaceCh(szExpression, \',\', \'.\')\" som er to funktioner fra mig \"streng-bibliotek\" som henholdsvis fjerner samtlige spaces og laver alle \",\" om til \".\". Sidstnævnte skal gøres da \"den gode gamle\" VAL bliver brugt, og denne tager ikke højde for \",\":

<SNIP>
Procedure Evaluate(Var szExpr : String; Var fltValue : Float; Var iErrPos : integer);
type
  stdf = (fabs,fsqrt,fsin,fcos,farctan,fln,fexp);
  stdflist = array[stdf] of string[6];
const
{ TODO -oPelle -cDX_NICE : Additional \"functions\" to the Evaluate procedure }
  stdfun : stdflist = (\'ABS\',\'SQRT\',\'SIN\',\'COS\',\'ARCTAN\',\'LN\',\'EXP\');
  chErr    = \'?\';
  chEofLine = #13;
var
  iPos : integer;
  ch  : char;

  Procedure  NextChar;
  begin
    repeat
      iPos := iPos + 1;
      if iPos <= length(szExpr) then ch := szExpr[iPos]
                                else ch := chEofLine;
    until ch <> \' \';
  end;

  Function  Expression : Float;
  var
    E  : Float;
    Opr : char;

    Function  Simexpr : Float;
    var
      s  : Float;
      opr : char;

      Function  Term : Float;
      var
        t : Float;

        Function  Signedfactor : Float;

          Function  Factor : Float;
          {Delphi 3.0 gives Internal Error: URW376  (Moved to outer function)
          type
            stdf = (fabs,fsqrt,fsin,fcos,farctan,fln,fexp);
            stdflist = array[stdf] of string[6];
          const
            stdfun : stdflist = (\'ABS\',\'SQRT\',\'SIN\',\'COS\',\'ARCTAN\',\'LN\',\'EXP\');
          }
          var
            p,e,sl : integer;
            found  : boolean;
            f      : Float;
            sf    : stdf;
          begin
            if ch in [\'0\'..\'9\'] then begin
              p := iPos;
              repeat NextChar until not(ch in [\'0\'..\'9\',\'.\'{DecimalSeparator}]);
              if ch in [\'E\',\'e\'] then begin
                NextChar;
                if ch in [\'+\',\'-\'] then NextChar;
                while ch in [\'0\'..\'9\'] do NextChar;
              end;
              val(copy(szExpr, p, iPos-p), f, e);
              if e<>0 then begin
                iPos := p + e - 1;
                ch := chErr;
              end;
            end else
            if ch=\'(\' then begin
              NextChar;
              f := expression;
              if ch = \')\' then NextChar
                          else ch := chErr;
            end else
            if ch=\'X\' then begin
              NextChar;
              f := fltValue;
            end else begin
              found := false;
              for sf := fabs to fexp do begin
                if not found then begin
                  sl := length(\'stdfun[sf]\');
                  if copy(szExpr, iPos, sl) = \'stdfun[sf]\' then begin
                    iPos := iPos + sl - 1;
                    NextChar;
                    f := factor;
                    case sf of
                      fabs    : f := abs(f);
                      fsqrt  : f := sqrt(f);
                      fsin    : f := sin(f);
                      fcos    : f := cos(f);
                      farctan : f := arctan(f);
                      fln    : f := ln(f);
                      fexp    : f := exp(f);
                    end;
                    found := true;
                  end;
                end;
              end;
              if not found then ch := chErr;
            end;
            factor := f;
          end;

        begin
          if ch = \'-\' then begin
            NextChar;
            signedfactor := -factor;
          end else begin
            signedfactor := factor;
          end;
        end;

      begin
        t := signedfactor;
        while ch = \'^\' do begin
          NextChar;
          t := exp(ln(t)*signedfactor);
        end;
        term := t;
      end;

    begin
      s := term;
      while ch in [\'*\',\'/\'] do begin
        opr := ch;
        NextChar;
        case opr of
          \'*\' : s:=s*term;
          \'/\' : begin
                  TempFloat := term;
                  S := S / TempFloat;
                end;
        end;
      end;
      simexpr := s;
    end;

  begin
    e := simexpr;
    while ch in [\'+\',\'-\'] do begin
      opr := ch;
      NextChar;
      case opr of
        \'+\' : e := e + simexpr;
        \'-\' : e := e - simexpr;
      end;
    end;
    expression := e;
  end;

begin
  iPos := 0;
  nextchar;
  fltValue := expression;
  if (ch = chEofLine) then iErrpos := 0
                      else iErrpos := iPos;
end;


Function  Calc(szExpression : String) : Float;
var
  fltRes    : Float;
  iErrorPos : Integer;
begin
  Try
    szExpression := StripCh(szExpression, \' \');
    szExpression := ReplaceCh(szExpression, \',\', \'.\');
    Evaluate(szExpression, fltRes, iErrorPos);
    Result := fltRes;
    if iErrorPos <> 0 then fltRes := 0;
  Except
    On EZeroDivide do Result := 0;
  end;
end;
</SNIP>
Avatar billede pellelil Nybegynder
07. februar 2001 - 07:50 #8
DJ, WISMANN> Jeg mener umiddelbart at I går for meget op i point. Hvis DL har 2500 point og han mener at det er relevant at fyre dem af på dette spørgsmål så for min skyld ingen alarm. Når jeg svare på spørgsmål så er det ikke for at få point (jeg kan jo alligevel ikke \"købe noget\" for dem), men det er for at hjælpe en med de problemer man selv har haft på et tidspunkt hvor man kunne ønske sig at der var en nemmere måde at løse dem på. Konkurence momentent I at have flest point, er ubetydeligt for mig. Det at nogen har flere point end andre siger ikke at de er bedre end andre, men måske noget om de har bedre muligheder for at bruge mere tid på eksperten.

Jeg ser snarre pointene som en tilkendegivelse om hvor meget svaret betyder for den der stiller det. Hvis spørgsmålstilleren sætter få point på højkant så tyder det på (i min bog) at svarret ikke er så vigtigt som hvis man er villig til at satse flere point. Jo mere spørgsmålstilleren \"har brug for svarret\" jo mere villig er man til at bruge tid på det.
Avatar billede wismann Nybegynder
07. februar 2001 - 09:11 #9
Jeg kan kun give dig rat.
Avatar billede delphi Nybegynder
07. februar 2001 - 10:07 #10
Jeg kan kun sige det på en måde: Hvis de 2500 point (eller for den sags skyld de 6000 i det andet spørgsmål) bliver givet, så vil jeg alvorligt overveje, om jeg gider at blive i dette forum.  Der er andre steder, hvor jeg kan få afløb for min trang til at lege med forskellige aspekter ved Delphi.

Peter
Avatar billede cstern Nybegynder
07. februar 2001 - 10:19 #11
dl: hvad med at ændre points til f.eks. 200, - så tror jeg både du vil få svar og alle bliver glade (igen)
Avatar billede dl Nybegynder
07. februar 2001 - 21:42 #12
Hvis alle er med på den så gør jeg det!
Men hvordan gør man så det? ( Ha alle prøvet det før ).

Jeg kan godt se hvad i mener, men for mig var dette problem udoverskuligt, og
Avatar billede dl Nybegynder
07. februar 2001 - 21:43 #13
Hvis alle er med på den så gør jeg det! ( Jeg jo ikke ud på balade!! )
Men hvordan gør man så det? ( Har alle prøvet det før ).

Jeg kan godt se hvad i mener, men for mig var dette problem udoverskuligt!!
Avatar billede borrisholt Novice
08. februar 2001 - 07:54 #14
dl >> Ja jeg har prøvet det før ... Altså ikke det med pointsne ..... Nå men du opretter et svar fra dig selv ... Når så det er gjort så accepterer du fx. pellelil\'s svar (han er så flink), giver han det antal point du nu synes han fortjener, og der efter giver du dig selv resten .... Sådan tror jeg nok det skal gøres ...

Jens B
Avatar billede egede Nybegynder
10. februar 2001 - 23:52 #15
Du skal baregå ind der hvor der står avanceret pointgivning eller sådan noget (gider ikke åbne et spm for at se præcis hvad der står) og skriver det antal points de forskellige personer skal have og resten forbliver ubrugte
Avatar billede dl Nybegynder
12. februar 2001 - 20:30 #16
Jeg har givet pellelil 200 point.
Og jeg vil prøve hans kode af.

PS. Jeg takker for alle de andre svar.
Avatar billede cms Nybegynder
10. juli 2001 - 19:22 #17
nej du har givet ham 2500 :-) kig selv i kolonnen til venstre
Avatar billede dl Nybegynder
05. august 2001 - 20:17 #18
Når, så kan han da få noget godt ud af dem.
En fejl fra min side!!
Avatar billede egede Nybegynder
05. august 2001 - 21:06 #19
Hvis du spørger ham pænt skal han nok leverere et par tusinde tilbage... :-)
Avatar billede dl Nybegynder
06. august 2001 - 18:48 #20
Det gør ikke noget!
Jeg har nok point, til de sp. jeg stiller her i denne gruppe.
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
Kurser inden for grundlæggende programmering

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