Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2007-09-28, 22:30
  #1
Medlem
Hej! jag har ett problem.. har nyligen börjat studera pascal i delphi på egen hand men har nu ett problem som jag inte lyckats få svar på.

jag skriver just nu en typ av "miniräknare" men när jag kommer till metoden
dvs +,-,* och / så lägger jag in dessa i variablar där man själv väljer vad det ska va för metod. men när jag kommer till beräkningen
så använder jag mig av:

writeln(number[1]:0:2,method[1],number[2]:0:2);

då blir t.ex. ressultatet på skärmen att den bara skriver ut 20 + 30
men jag vill att den ska skriva ut summan av de 2 talen. dvs. 50 i detta läge.

"number" är av datatyp Real och "method" är av datatyp Char och jag använder dom i arrays. det hade fungerat att lösa med if-satser men om man vill använda sig av fler tal och olika metoder blir det ju en jäkla massa if-satser


jag är nog lite "noob" på detta men hoppas någon kan hjälpa mig eller framföralt förstår vad jag just skrivit..

Hela programkoden:
tack på förhand.
Citera
2007-09-29, 20:48
  #2
Medlem
Vet inte om jag förstått dej rätt men borde inte något liknande funka.


if method = '+' then
WriteLn(number[1] + number[2]);
else if method = '-' then
WriteLn(number[1] - number[2]);

osv.
Citera
2007-09-29, 23:26
  #3
Medlem
Citat:
Ursprungligen postat av johnan
Vet inte om jag förstått dej rätt men borde inte något liknande funka.


if method = '+' then
WriteLn(number[1] + number[2]);
else if method = '-' then
WriteLn(number[1] - number[2]);

osv.

jo altså den skulle ju fungera.. men tänk dig att jag vill sätta in 5 olika tal och ha 4 olika metoder.. som ex. 45+32-35/2*5 ... att skriva liknande ifsatser för dessa uträkningar blir ju enorma =/ försöker få reda på om dett är möjligt att göra detta på något smidigare sätt.

men tack för försöket =)
Citera
2007-09-30, 04:17
  #4
Medlem
Kvackelikvacks avatar
Orkar inte sätta mig in i problemet, men jag tuggar fradga av att se folk som använder nästlade if-satser.
Använd Case!

case max of
2:....
3:.....
4:....
5:.....
otherwise
end (* case *)
Citera
2007-09-30, 16:24
  #5
Medlem
Citat:
Ursprungligen postat av Kvackelikvack
Orkar inte sätta mig in i problemet, men jag tuggar fradga av att se folk som använder nästlade if-satser.
Använd Case!

case max of
2:....
3:.....
4:....
5:.....
otherwise
end (* case *)

okej.. med nästlade if-satser menar du då att man använder 1 eller fler if-satser i 1 if-sats? hehe jag har nyligen börjat sätt mig in i programmering över huvudtaget.. har tröttnat på att webbprogrammera php osv för en period nu.
Citera
2007-09-30, 18:13
  #6
Medlem
Kvackelikvacks avatar
Citat:
Ursprungligen postat av _ZarToK_
okej.. med nästlade if-satser menar du då att man använder 1 eller fler if-satser i 1 if-sats?
Yes box. If then (gör någonting) else if. Du verkar ha 5 if-satser i samma sats. Case finns både i Pascal och C (ser lite olika ut). Case både ser bättre ut (är mer lättläst) och exekverar snabbare.
Citera
2007-09-30, 18:16
  #7
Medlem
Citat:
Ursprungligen postat av _ZarToK_
okej.. med nästlade if-satser menar du då att man använder 1 eller fler if-satser i 1 if-sats? hehe jag har nyligen börjat sätt mig in i programmering över huvudtaget.. har tröttnat på att webbprogrammera php osv för en period nu.

Det är när man testar fler villkor än ett. t ex:

if nånting then
kod;
else
kod;
end;

en nästlad if-sats:

if nånting then
kod;
else if nånting then
kod;
else if nånting then
kod;
else if nånting then
kod;
else
kod; // om inget av dom andra villkoren var sann;
end;

oj var visst lite sen.
Citera
2007-09-30, 19:41
  #8
Medlem
Citat:
Ursprungligen postat av Kvackelikvack
Yes box. If then (gör någonting) else if. Du verkar ha 5 if-satser i samma sats. Case finns både i Pascal och C (ser lite olika ut). Case både ser bättre ut (är mer lättläst) och exekverar snabbare.
Okej ska lägga de på minnet har använt mig lite av case förut men har aldrig fattat vikten av dess funktion försen nu, tack så mkt.

Jag har fortfarande inte fått något svar på frågan jag ställde helt.
går det att få 3 variabler där 2 av dom är heltal och en av dom är tecken som t.ex. +,-,* och / att lägga ihop till en beräkning direkt eller måste man använda sig av if/case satser?
Citera
2007-09-30, 19:42
  #9
Medlem
Citat:
Ursprungligen postat av johnan
oj var visst lite sen.

hehe tack för förklaringen vilket fall som hällst
Citera
2007-09-30, 21:31
  #10
Medlem
Citat:
Ursprungligen postat av _ZarToK_
Okej ska lägga de på minnet har använt mig lite av case förut men har aldrig fattat vikten av dess funktion försen nu, tack så mkt.

Jag har fortfarande inte fått något svar på frågan jag ställde helt.
går det att få 3 variabler där 2 av dom är heltal och en av dom är tecken som t.ex. +,-,* och / att lägga ihop till en beräkning direkt eller måste man använda sig av if/case satser?

Tror nog att det blir smidigast om man använder en if eller case - sats, men jag kan mycket väl ha fel också :P
Citera
2007-09-30, 21:57
  #11
Medlem
Citat:
Ursprungligen postat av johnan
Tror nog att det blir smidigast om man använder en if eller case - sats, men jag kan mycket väl ha fel också :P

föreställ dig att jag vill använda 11 variablar där 5 är heltal och 4 är metoder.
att skriva ut det i case eller if satser blir väldigt komplicerat och osmidigt.
skulle det gå att göra på annat sätt skulle jag va superglad.. men värkar inte som att någon kan svaret på denna fråga :S den kanske är lite dåligt formulerad men endå.
Citera
2007-10-01, 16:51
  #12
Medlem
Här kommer ett förslag på lösning:

Först skapar du en rutin som tar två värden plus en metod som indata, och returnerar resultatet:

Kod:
function Calculate(AValue1, AValue2 : Real; AMethod : Char) : Real;
begin
   Result := AValue1;
   
   Case AMethod of
     '+':  Result := AValue1 + AValue2;
     '-':  Result := AValue1 - AValue2;
     '/':  Result := AValue1 / AValue2;
     '*':  Result := AValue1 * AValue2;
   end;  
end;


Denna funktion kan du sedan använda för att "loopa" igenom dina indata. Exempelvis:


Kod:
var i : Integer;
var n : Real;


n := number[1];   // Starta med första värdet

for i = 1 to 4 do begin  // Ersätt 4 med antalet metoder i arrayen method
   n :=  Calculate(n, number[i + 1], method[i]);
end;


För att lägga till nya metoder behöver du bara lägga till dessa i case-satsen i din calculate funktion. Enkelt och överskådligt.

Hoppas det här kan hjälpa dig lite.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback