Cunoștințe, prelegere, tipuri logice, construcții și componente

Rezumat: Prelegerea oferă un material exhaustiv privind lucrul cu date logice. Tipuri logice existente, operații pe ele, precum și componente ale TCheckBox, TCheckGroup, TRadioButton, TRadioBox. Exemple de programe demonstrează toate posibilitățile de a lucra cu tipuri logice.







Scopul prelegerii

Studierea modurilor de a lucra cu tipuri de date logice. Învățarea principalelor componente pentru a lucra cu aceste tipuri.

Tip de date boolean

În prelegerile anterioare am întâlnit deja acest tip - unele proprietăți ale componentelor ar putea lua doar una din cele două valori: Adevărat sau Fals. Acesta este tipul de date logic. În Pascal, acesta este tipul de boolean. care ia un octet de RAM. În Lazarus, în plus, există tipuri de ByteBool (de asemenea 1 octet), WordBool (2 octeți) și LongBool (4 octeți). Toate aceste tipuri pot lua doar una din cele două valori: adevărate sau false. În practică, totuși, o astfel de varietate nu se aplică, programatorii gestionează complet numai un tip standard de boolean. Puteți crea o variabilă de acest tip și îl puteți atribui drept sau fals. În plus, există adesea expresii care rezultă fie din Adevăr. sau minciuni. ele sunt, de asemenea, considerate logice. De exemplu, dacă atribuiți expresia 3> 2 unei variabile booleene. atunci variabila va fi setată la True. deoarece trei, într-adevăr, mai mult de două.

Deci, ce puteți face cu datele logice, pe lângă atribuirea lor adevărată sau falsă. Ele pot fi comparate între ele, folosind operatorii de comparație pentru aceasta:

Să analizăm mai detaliat funcționarea acestor operațiuni.

Operația NOT (NOT), spre deosebire de alte operații logice, funcționează numai cu un singur operand. Aceasta este o operație flip-flop: dacă operandul conține True. atunci rezultatul returnat este Fals. și invers. Această operație este adesea folosită pentru a schimba valoarea unei variabile logice (sau a unei proprietăți) la contrariul, de exemplu,

Operația AND (AND) returnează True numai dacă ambii operanzi comparați conțin True. Dacă primul operand conține False. Verificarea ulterioară nu mai este efectuată (nu are sens), iar AND returnează False. Dacă primul operand conține True. apoi AND verifică al doilea operand - dacă conține și Adevărat. atunci rezultatul returnat este Adevărat. altfel Fals.

Operația OR funcționează într-un mod similar, dar returnează True dacă cel puțin unul dintre operanzi conține True. Sau verifică primul operand. Dacă este adevărat. Verificarea ulterioară nu mai este efectuată și OR returnează True. În caz contrar, OR verifică al doilea operand - dacă este adevărat. atunci se întoarce Adevărat. altfel Fals.

Operația XOR (Exclusive OR) verifică întotdeauna ambii operanzi și returnează True numai atunci când unul dintre operanzi este True. iar celălalt trebuie să fie Fals. Adevărat, în practică, XOR nu este de obicei folosit, deoarece este întotdeauna mai ușor să faci un A <> B. Care returnează același rezultat exact.

Deci, exemple de lucru cu date logice (în Lazarus nu trebuie să fie executate):

Structura de control IF

De la un tip de date logic nu ar fi de folos dacă nu am putea aplica diferite acțiuni în funcție de rezultatele verificării - dacă variabila conține Adevărul. apoi executați un cod, altfel executați un alt cod. Aceasta este tocmai posibilitatea oferită de structura de control IF.

Cea mai simplă sintaxă a acestei construcții este următoarea:







Engleză IF se traduce ca IF. și apoi - apoi. Aici totul este destul de clar: dacă orice expresie condiționată (o proprietate booleană sau booleană a unei componente) este adevărată. atunci acțiunea specificată este efectuată. Acum putem studia exemplele în practică. Descărcați Lazarus cu un nou proiect. În mijlocul ferestrei, setați butonul TButton. Salvați proiectul în dosarul 07-01 ca MyBool; nu uitați formularul principal pentru a apela fMain. iar modulul salvat este Main. Apoi generați un eveniment clic pentru butonul pe care îl veți executa după cum urmează:

Aici totul este foarte simplu: declarați variabila logică b. apoi atribuiți Adevărat. În rând

verificăm dacă b este adevărat (adică dacă b este adevărat), atunci afișăm mesajul "Adevăr". Salvați și executați proiectul. Apăsarea butonului va afișa mesajul. De exemplu, puteți seta b la False - în acest caz, apăsarea unui buton nu va cauza niciun mesaj.

Apropo, în acest caz, ca o condiție, am indicat pur și simplu numele variabilei b. La urma urmei, aceasta conține deja valoarea Adevărat. Deci linia

Dacă extindem condiția prin operații condiționate, atunci toți operanzii trebuie să fie închise în paranteze. Excepția este NU. care funcționează numai cu un singur operand. Să schimbăm codul:

Aici verificăm două condiții. Și dacă primul (a = b) ne întoarce Fals. atunci al doilea b va reveni Adevărat. Și din moment ce folosim operația OR. este suficient pentru noi ca cel puțin unul dintre operanzi să fie Adevărat. Prin urmare, mesajul va fi executat. Dacă în al doilea operand am comparat b cu altceva, ar trebui să fie, de asemenea, plasate în paranteze. De exemplu,

În acest exemplu, mesajul "Adevăr" va fi afișat, deoarece în al doilea operand b este de fapt mai mare decât a. Dacă uitați de armături, compilatorul nu vă va spune eroarea și programul va fi pornit. Cu toate acestea, este posibil ca rezultatul să nu fie corect. De exemplu, dacă scoatem parantezele din primul exemplu:

Acest mesaj "Adevăr" nu va fi îndeplinit. La urma urmei, instrucțiunea IF nu face decât o singură verificare, așa că verifică numai a = b. O parte din condiția cu OR va fi omisă, pentru că nu am codificat operanzii în paranteze. Deci, dacă aplicați AND operații în condiție. OR sau XOR. nu uitați să puneți operanzii în paranteze. Parentheses poate fi omis dacă specificați o variabilă condiționată sau o proprietate ca operandi, de exemplu, codul:

va imprima mesajul "Adevăr", deoarece b conține Adevărat.

Instrucțiunea IF este cunoscută ca un construct, sintaxa sa poate fi compusă din mai multe părți:

Engleză ELSE este tradus ca AKA. Aici, dacă o condiție revine True. atunci acțiunea 1 va fi executată. În caz contrar, se va efectua acțiunea2. Rețineți că înainte de ELSE, punct și virgulă nu este făcut! Să schimbăm codul:

Apăsând butonul va apărea mesajul "Adevăr", dar dacă corectați codul, puneți False în variabila b în loc de True. atunci va exista un mesaj "False" - verificați-l singur.

Cu toate acestea, construcția IF poate fi mai complicată. Dacă nu trebuie să verificăm una decât două condiții? Sau mai mult? Sintaxa completă a acestui construct este:

Să înțelegem. În această construcție, dacă condiția1 revine True. atunci acțiunea va fi efectuată1. iar proiectul se va termina. Dacă se întoarce Fals. verificarea va continua. Dacă următoarea condiție2 revine True. atunci acțiunea 2 va fi efectuată. și așa mai departe, astfel de controale pot fi cât de multe doriți. Dacă toate testele de stare revin Fals. atunci acțiunea este activată. Să schimbăm codul:

Ce crezi, ce mesaj va fi lansat în acest caz? Și câte mesaje vor fi difuzate? Dacă ați spus că va exista doar un mesaj "Acțiunea # 2", atunci ați stăpânit construcția IF. Altfel, vă sfătuiesc să vă întoarceți și să studiați cu atenție toate cele de mai sus.

Vă mulțumim pentru cursul minunat!

În lucrarea independentă numărul 2, când compilam modulul MyCript.pas (OS: Windows 7 x64, Lazarus 1.4 win64), se generează o eroare pentru codul de asamblare

mycript.pas (54,5) Eroare: Asm: [push reg32] combinație nevalidă de opcode și operanzi
mycript.pas (95,5) Eroare: Asm: [pop reg32] combinație nevalidă de opcode și operanzi

Înțeleg că cursul era pregătit pentru OS-uri pe 32 de biți, dar despre sistemele pe 64 de biți?

În procesoarele elementelor de meniu FileCreate și FileOpen, precum și în manualul de închidere a formularului OnClose, aceste trei proceduri conțin același cod

înainte de a crea un text nou>
dacă începe Memo1.Modified
// dacă utilizatorul este de acord să salveze modificările:
dacă MessageDlg ("Salvați fișierul"
"Fișierul curent a fost modificat. Salvați modificările? ',
mtConfirmation, [mbYes, mbNo, mbIgnore], 0) = mrYes atunci
FileSaveClick (Expeditor);
se încheie; // dacă

Permiteți-mi să întreb: nu ar fi mai bine să puneți codul într-o procedură separată, de exemplu - în cazul unui handler al evenimentului OnCloseQuery? În ceea ce îmi amintesc din experiența Delphi, chemarea acestei proceduri în sine nu trebuie să ducă la închiderea formularului. Deci, poate fi folosit în procedurile de curățare a Memo1 și citirea din fișier. Sau în Lazăr este imposibil de făcut?







Articole similare

Trimiteți-le prietenilor: