Behöver hjälp med C#! [Miniräknare ]

Permalänk

Behöver hjälp med C#! [Miniräknare ]

Håller på att programmera en miniräknare med triviala funktioner. Försöker efterlikna Windows-kalkylatorns (calc.exe)
funktioner så mycket som möjligt, men nu har det tagit stop

Allt O K så länge...
Om man utgår ifrån calc.exe så kan den göra följande.
Säg att vi adderar 100 med 3 (100 + 3) och trycker sedan på likamedstecknet (=).
Detta ger givetvis summan 103. Än så länge inga problem.

Men det är detta jag har problem med
Om man sedan fortsätter att trycka =, so fortsätter calc.exe addera 3 till 103, vilket blir 106.
Och om man sedan trycker lika med igen, så fortsätter calc.exe lägga 3 till 106, vilket blir 109 osv.
(och lika väl med övriga arimetriska operationer)

Jag har ansträngt mig för att försöka lista ut hur detta ska göras, men idéerna börjar ta slut.
Någon som kan ge tips på hur detta kan lösas?

Permalänk
Hedersmedlem

Är det inte bara att ersätta det tal man matade in först med det man just räknade ut och göra om samma uträkning?

Permalänk

Jag har "nästan" listat ut det. Det jag försöker göra är att lagra den sista inmatade siffran i en variabel:
- Trycker man 100+3 och lika med (resultatet blir 103), så är alltså den sista inmatade variabeln 3.
- Trycker man 100+3+4+6+7 och lika med (resultatet blir 120), så är alltså den sista inmatade variabeln 7.

Men hur kan jag lagra sista inmatade siffran i en variabel?

Kan tillägga att jag gör allting i Vistual Studio med Windows Forms.

Permalänk
Medlem

Det enkla svaret hade varit att sifferknappen själv lagrar talet, men det skulle bara fungera på ental, då nästa siffra ger ett nytt tal. Men om man tänker en gång till så är iden inte alls så dum.

Skapa en variabel LastInput som Sträng.
Skapa en variabel LastOperand som Integer.

När du klickar på en siffra så adderas denna siffra till strängen LastInput.
När du klickar på en funktionstangent så tömmer du LastInput och sätter även funktionen LastOperand
Raderaknappen tar bort sista siffran i LastInput

När du klickar på summa så testas om LastOperand har utfört summa eller inte. Testen utförs binärt genom sista biten i ett absoluttal. Om du har 8 funktioner så adderar du 8 för att aktivera att summan är uträknad. (Om minus är 2 så är summan och minus samma som 10.) Samma metod som räknar ut talet för hur en dialogruta ska se ut.

Om Summa inte har utförts så summeras värdet
Om Summa har utförts så utförs LastOperand med LastValue värdet och Summa uppdateras

Visa signatur

Server: Fractal design Define 7 XL | AMD Ryzen 7 5800X 8/16 | ASUS ROG CROSSHAIR VIII DARK HERO | 64GB Corsair @ 3000MHz | ASUS Radeon RX 460 2GB | Samsung 960 PRO 512 GB M.2 | 2x 2TB Samsung 850 PRO SSD | 6x Seagate Ironwolf Pro 10TB
WS: Phantex Entoo Elite | AMD Ryzen Threadripper 1950X 16/32 | ASUS Zenith extreme | 128GB G.Skill @ 2400MHz | ASUS Radeon HD7970 | 3x 2TB Samsung 960PRO M.2 | 6x Seagate Ironwolf Pro 10 TB
NEC PA301W 30" @ 2560x1600 | Linux Mint 21.3 Cinnamon

Permalänk

Nu hann jag lösa problemet innan jag såg ditt meddelande

Löste det hela med hjälp av en boolean som kontrollerar om likamed har blivit klickad eller inte, om så fallet så kan programmet t.ex. fortsätta lägga 3 (eller vilken aritmetrisk operation användare har använt) till summan om och bara om siffran 3 är den sista intryckta siffran.

Den sista intryckta siffran lagrar jag en i variabel. Den variabeln kommer att nollställas ifall någon artimetrisk operation har blivit intryckt. Om man fortsätter att trycka på lika med så kommer den variabeln att vara den sista intryckta siffran.

Och lite andra saker för att övriga funktioner ska fungera som de ska.

Flummig beskrivning men en nybörjare har svårt med att beskriva det hela med ett korrekt ordförråd