AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String als Rechenzeichen

Offene Frage von "SimonRap"
Ein Thema von SimonRap · begonnen am 25. Mai 2010 · letzter Beitrag vom 26. Mai 2010
Antwort Antwort
Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#1

String als Rechenzeichen

  Alt 25. Mai 2010, 20:52
Hi Leute,
ich habe mal ne komische Frage:
Kann man Strings als Rechenzeichen benutzen?
Also
Delphi-Quellcode:
...
VAR s:STRING; N,n2:INTEGER;
...
s:='*';
n2:=n(s[0])n;
...
versteht ihr was ich meine?
Irgendsowas?
So das dann n*n raus kommt?
Das wär echt praktisch
Meine Suche war bisher erfolglos...
Bitte um schnelle Antwort
MfG Simon
Simon
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

Re: String als Rechenzeichen

  Alt 25. Mai 2010, 20:54
Du musst schon abfragen, um welches Zeichen es sich handelt und das dann selbst machen.

Delphi-Quellcode:
var
  op : Char;
begin
  op := '*';
  if (op = '*') then
    n := n1 * n2
  else if (op = '+') then
    n := n1 + n2
  { usw.}
end;
Du könntest das Ganz auch noch via einer case-Anweisung machen.

Zitat:
Bitte um schnelle Antwort
Wir antworten alle so schnell, wie wir wollen
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#3

Re: String als Rechenzeichen

  Alt 25. Mai 2010, 20:56
genau das usw.
is das Problem...
ich hab das nich mit VAR n sondern mit n1,n2,n3,n4,n5,..., bis zu n100
und * und + und - und /
Und das soll alles dynamisch von User kommen können...
da werden das schon paar 100 Zeilen Code
Simon
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: String als Rechenzeichen

  Alt 25. Mai 2010, 20:57
Kurz: Nein, geht nicht

Lang: Hört sich so an als suchst du sowas wie Skripting. Sonst bleibt nur eine Fallunterscheidung wie gerade gepostet wurde.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: String als Rechenzeichen

  Alt 25. Mai 2010, 21:41
Irgendwas stimmt an deinem Konzept nicht.
Schreibe die Variablen doch in ein Array und gehe es in einer Schleife durch o.ä.

100 einzelne Variablen sind garantiert nicht notwendig.

Delphi-Quellcode:
var
  n: array[1..100] of string;

// bzw
var
  n: array of string;

SetLength(n, 100);

for i := Low(n) to High(n) do
begin
  // ...
end;
  Mit Zitat antworten Zitat
Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#6

Re: String als Rechenzeichen

  Alt 25. Mai 2010, 22:51
se geht nich so sehr um die anzahl der variablen, sondern um die rechenoperationen...
Simon
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: String als Rechenzeichen

  Alt 25. Mai 2010, 23:04
Zitat von SimonRap:
Hi Leute,
ich habe mal ne komische Frage:
Kann man Strings als Rechenzeichen benutzen?
Also
Delphi-Quellcode:
...
VAR s:STRING; N,n2:INTEGER;
...
s:='*';
n2:=n(s[0])n;
...
Bleibt die Frage, woher soll die Eingabe (String) kommen?
Usereingabe oder fester Ablauf?
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#8

Re: String als Rechenzeichen

  Alt 25. Mai 2010, 23:59
user (oder random^^)
aber dieser hat nur die wahl zwischen *,+,- und /
Simon
  Mit Zitat antworten Zitat
Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#9

Re: String als Rechenzeichen

  Alt 26. Mai 2010, 00:10
Ok habs bisschen abgeändert...
Zahlen von 2 bis 5 (4 stück, keine doppelt, jede einmal) sollen mit den 4 Grundrechenarten !beliebig gerechnet werden...
Bis z.B. 18 rauskommt...
Also, da Punkt- vor Strich-Rechnung geht muss man erstmal ermitteln was das is
//nich wundern, der quellcode is verwirrend... liegt daran, dass ich ihn geschrieben habe^^
Delphi-Quellcode:
function stri(char:char):BOOLEAN;
begin
result:=false;
if char='+'then result:=true;
if char='-'then result:=true;
if char='*'then result:=false;
if char='/'then result:=false;
end;
function punk(char:char):BOOLEAN;
begin
result:=false;
if char='+'then result:=false;
if char='-'then result:=false;
if char='*'then result:=true;
if char='/'then result:=true;
end;
dann die möglichkeiten innerhalb einer Rechnung:
Delphi-Quellcode:
function op(VAR c1,c2,c3:CHAR):INTEGER;
begin
result:=0;
if (stri(c1))and (punk(c2))and (stri(c3)) then result:=1;
if (punk(c1))and (punk(c2))and (punk(c3)) then result:=2;
if (stri(c1))and (stri(c2))and (stri(c3)) then result:=3;
if (punk(c1))and (stri(c2))and (punk(c3)) then result:=4;
if (punk(c1))and (punk(c2))and (stri(c3)) then result:=5;
if (stri(c1))and (stri(c2))and (punk(c3)) then result:=6;
end;
und dann als timer im interval 1 abfragen:
Delphi-Quellcode:
VAR n1,n2,n3,n4:INTEGER; c1,c2,c3:CHAR; nc1,nc2,nc3:INTEGER; res:INTEGER; z1,z2,z3,z4,z5,z6:INTEGER; erg:INTEGER;
begin
  application.ProcessMessages;
  n1:=random(4)+2;
  n2:=random(4)+2;
  n3:=random(4)+2;
  n4:=random(4)+2;
  nc1:=random(3)+1;
  nc2:=random(3)+1;
  nc3:=random(3)+1;
  c1:=itc(nc1);
  c2:=itc(nc2);
  c3:=itc(nc3);
  res:=op(c1,c2,c3);
  if res=4 then // ausversehen 4 und 1 verstauscht
  begin
    if c1='+then z1:=n1+n2;
    if c1='-then z1:=n1-n2;
    if c3='+then z2:=n3+n4;
    if c3='-then z2:=n3-n4;
    if c2='*then erg:=z1*z2;
    if c2='/then erg:=round(z1*z2);
  end;
  if res=2 then
  begin
    if c1='*then z1:=n1*n2;
    if c1='/then z1:=round(n1/n2);
    if c2='*then z2:=n3*z1;
    if c2='/then z2:=round(z1/n3);
    if c3='*then erg:=n4*z2;
    if c3='/then erg:=round(z2/n4);
  end;
  if res=3 then
  begin
    if c1='+then z1:=n1+n2;
    if c1='-then z1:=n1-n2;
    if c2='+then z2:=n3+z1;
    if c2='-then z2:=z1-n3;
    if c3='+then erg:=n4+z2;
    if c3='-then erg:=z2-n4;
  end;
  if res=1 then
  begin
    if c2='*then z1:=n2*n3;
    if c2='-then z1:=round(n2/n3);
    if c1='+then z2:=n3+z1;
    if c1='-then z2:=n3-z1;
    if c3='+then erg:=n4+z2;
    if c3='-then erg:=z2-n4;
  end;// jetzt müsste es mit res=5 weitergehen, aber das funzt ja schon nich!
  if erg=18 then
  if (n1<>n2) and(n1<>n3) and (n1<>n4) and
     (n2<>n1) and(n2<>n3) and (n2<>n4) and
     (n3<>n1) and(n3<>n2) and (n3<>n4) and
     (n4<>n1) and(n4<>n2) and (n4<>n3) then
  begin
  timer1.Enabled:=false;
  listbox1.Items.Add(inttostr(n1)+' '+inttostr(n2)+' '+inttostr(n3)+' '+inttostr(n4)+' '+c1+' '+c2+' '+c3);
  end;
end;
keine fehler oder so... nur falsch... ich bekomme: 4 2 5 3 + * + (oder auch 4 3 5 2 + * - )<- auch 17
Moment... 2*5=10; 10+4=14; 14+3=17...
Wo ist mein Fehler?
Kann da einer helfen?
mfg simon
p.s. wie immer... nich meckern... so programmier ich nunmal^^
[edit]auf die aufgabe kam ich weil jemand mir das rätsel gestellt hatte^^[/e]
Simon
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: String als Rechenzeichen

  Alt 26. Mai 2010, 06:52
Was Du haben willst, ist ein 'Mathe-Parser', oder auch 'Evaluator'. Das ist ein Programm, das mathematische Ausdrücke in Stringform der Art "8+3*(5/2-1)" ausrechnen kann.

Das ist gar nicht so leicht, denn Du musst ja z.B. auch Klammern mitzählen usw. Such mal nach den Begriffen hier im Forum. Da wirst Du ziemlich schnell fündig.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz