Începând din octombrie 2016, Embarcadero oferă o versiune gratuită a Delphi (Delphi 10.1 Berlin Starter Edition). Există câteva restricții, dar este un pas binevenit către conștientizarea mai multor programatori de bucuriile Delphi. Ei spun că „Oferta poate fi retrasă în orice moment”, așa că nu întârziați dacă doriți să o verificați. Vă rugăm să utilizați linkul de feedback pentru a-mi spune dacă linkul nu mai funcționează.

simplu

Suport DFF - Magazin

Dacă faceți cumpărături la Amazon oricum, luați în considerare utilizarea acestui link.

Primim câțiva cenți din fiecare achiziție. Mulțumiri


Sprijină DFF - Donează

Dacă beneficiați de site-ul web, în ​​ceea ce privește cunoștințele, valoarea divertismentului sau ceva altfel util, luați în considerare efectuarea unei donații prin PayPal pentru a ajuta la acoperirea costurilor. (Nu este necesar un cont PayPal pentru a dona prin card de credit.) Tranzacția este sigură.

Mensa ® Puzzle-uri zilnice

De peste 15 ani, calendarele Mensa Page-A-Day au oferit mai multe puzzle-uri pe an pentru plăcerea mea de a programa. Codificarea „rezolvătorilor” este foarte distractivă, dar multe programe permit, de asemenea, rezolvarea de către utilizator, convenabil pentru tipul „completare spații libere”. Mai jos sunt link-uri Amazon către cei doi ultimi ani.

(Sfat: dacă puteți aștepta, calendarele din anul curent sunt de obicei disponibile în ianuarie.)

a lua legatura

Feedback: Trimiteți un e-mail cu comentariile dvs. despre acest program (sau orice altceva).

Descrierea problemei

Iată un program simplu de calculare cu 4 funcții care a fost scris pentru a îndeplini anumite cerințe specifice. Este o poveste interesantă: Calculatorul a fost scris pentru secția de psihologie a unei universități pentru a fi folosit la testarea copiilor din școala primară. Deoarece este utilizat pe ecran cu o prezentare PowerPoint (PowerPoint este programul de prezentare de diapozitive al Microsoft), cerința era ca acesta să fie un fel de larg și scurt. În acest fel, se va potrivi în partea de jos a ecranului. De asemenea, deoarece copiii nu pot fi foarte bine, ei au dorit să fie afișate atât tastele, cât și răspunsurile.

Versiunea 2 a acestui program sa dovedit a fi considerabil mai sofisticată, inclusiv posibilitatea de a afișa sau ascunde butoane, nu * sau / butoane de exemplu dacă problemele erau toate + și - tip. De asemenea, aveam nevoie de un fișier jurnal pentru a înregistra apăsările de taste și timpul dintre intrări (nu mă întrebați de ce, eu sunt doar programatorul). Și în prezent adaug posibilitatea de a controla prezentarea de diapozitive din cadrul programului, lăsând copiii să facă clic pe un Următorul pentru a merge la următorul diapozitiv.

Dar, deocamdată, să lucrăm la versiunea simplă.

Context și tehnici

Vom construi un calculator normal de la stânga la dreapta care procesează numerele pe măsură ce sunt introduse. Vom discuta mai jos despre cum cerința de a afișa intrările face lucrurile puțin mai complicate.

Tocmai am petrecut 30 de minute documentând algoritmul aici, dar am șters totul pentru că mi-am dat seama de asta programul este algoritmul. Pascal este suficient de lizibil încât navigarea în cod va fi o descriere mai ușor de înțeles a procesului decât orice pot scrie în limbaj natural. Doar recunoașteți că Windows este un sistem de mesagerie, așa că, de obicei, programele nu fac nimic până când nu primesc un mesaj. Când vezi rutine de genul DigitBtnClick, PlusBtnClick, etc. acea rutină este cea care a fost apelată când s-a făcut clic pe butonul respectiv.

Nu există prea multe diferențe în procesarea tastelor numerice, așa că am scris un AddDigit procedură pentru afișarea cifrei și adăugarea la versiunea șir a numărului care este construit. În mod similar, cea mai mare parte a gestionării operațiunilor este similară, atâta timp cât ne amintim să adăugăm, scădem, înmulțim sau împărțim când vine momentul. Deci avem un HandleOp procedura pentru acele lucruri. Rețineți că nu putem face cu adevărat nimic atunci când utilizatorul intră în operațiune, deoarece nu avem încă a doua valoare. Așadar, vom ține doar până vom avea nevoie de ea. Știm, de asemenea, că utilizatorul a terminat de introdus o valoare când vedem codul operației, astfel încât să îl putem procesa în funcție de operatorul care l-a precedat și să ne pregătim să construim următorul număr.

Există un Resetați procedura care este chemată pentru a șterge afișajele și a reseta semnalizatoarele interne etc. Trebuie să facem acest lucru la intrarea inițială sau dacă utilizatorul apasă clar, sau când utilizatorul apasă următoarea cifră după ce a apăsat pe = cheie.

Programul are aproximativ 55 de linii de cod scrise de utilizator, mai mult decât aș fi ghicit. Dar există câteva lucruri dificile.

Trebuie să împiedicăm utilizatorul să introducă mai multe puncte zecimale în număr.
Trebuie să gestionăm ecranul inteligent atunci când * sau/sunt amestecate cu + sau -. În calculatorul dvs. normal și în acesta, dacă introduceți 1, +, 2, *, 3, rezultatul este 9 deoarece 1 + 2 = 3 și 3 * 3 este 9. Dar din cauza regulilor de prioritate ale aritmeticii, multiplicării și divizarea în expresii se efectuează înainte de adunări și scăderi, deci 1 + 2 * 3 scris ca expresie ar trebui = 7. În acest program, rezolvăm problema inserând paranteze în expresie, astfel încât exemplul de mai sus este afișat ca (1+ 2) * 3 = 9.
Pentru a reduce numărul de linii de cod, am folosit un truc pe care probabil nu l-aș folosi într-un proiect mai complex: Mai degrabă decât să am 10 rutine diferite pentru a procesa butoanele de la 0 la 9, le-am numit Btn0, Btn1, Btn2 etc. și extrageți al patrulea caracter al numelui ca cifră dorită într-o rutină obișnuită.

Cred că asta ar trebui să explice suficient logica programului, așa că mergeți mai departe și aruncați o privire.

Rularea/explorarea programului

Răsfoiți extrasul sursă
Descărcați sursa
Descărcați executabil

Sugestii pentru explorări ulterioare

Extensiile logice includ adăugarea unei taste „pornire” (de obicei afișată ca Exp sau ^ pe tastele calculatorului). Alte chei obișnuite pe care le-ați putea adăuga includ Sqrt și 1/x, butoane de memorie, plus orice altele la care vă puteți gândi. Nu este grozav? Puteți avea primul calculator cu o cheie Fibonacci sau o cheie „Obțineți următorul număr prim mai mare” sau o cheie „Factorizați acest număr”.
Probabil că veți dori să rearanjați butoanele la o configurație mai normală. Sugestie: țineți apăsată tasta Shift în timp ce faceți clic pe o grămadă de butoane și toate vor fi selectate. Apoi, dacă faceți clic dreapta și selectați meniul „Alinierea”, pentru a putea alinia butoanele, a le spaționa în mod egal etc.
Nu există check-in de gamă aici, deci este posibil să faci lucruri rele să se întâmple dacă împărți la 0 sau încerci rezultate foarte mari. Vom vorbi despre gestionarea erorilor în viitor, dar dacă doriți să priviți înainte, consultați structurile Încercați/Exceptează.

Distrează-te și trimite-mi orice rezultat interesant!