Operatori logici Pascal. Tipuri de date booleene

Această lecție introduce tipul logic Boolean în Pascal. Algoritmul modului de a găsi minimȘi maxim număr în Pascal


Site-ul oferă sarcini de laborator pe această temă pentru a consolida materialul teoretic și pentru a obține abilități practice de programare în Pascal. Scurte informații teoretice vă vor permite să obțineți cunoștințele minime necesare pentru aceasta. Exemplele vizuale rezolvate și sarcinile de laborator sunt prezentate în ordinea complexității crescânde, ceea ce face ușoară studierea materialului de la zero. Noroc!

Am învățat deja cum să scriem programe bazate pe algoritmi liniari în Pascal. Și chiar compilăm algoritmi neliniari - cu ramificare - care folosesc , care iau valorile adevărate sau false.

Valori booleene:

În exemplul de mai jos, rezultatul unei expresii logice este afișat pe ecran:

1 2 3 4 5 6 var A: întreg ; începe A := 5 ; scrie (A > 0); (Adevărat va fi afișat) Sfârşit.

var A: întreg; începe A:= 5; scrie (A > 0); (True va fi scos) end.

Pentru a înregistra rezultatul unei expresii logice, se folosește o variabilă logică specială, care în Pascal este de tip boolean și poate lua, de asemenea, una dintre cele două valori - adevărată sau falsă.

Să vedem cum funcționează aceeași sarcină cu o variabilă booleană:

1 2 3 4 5 6 7 8 var A: întreg ; b:boolean; începe A := 5 ; b: = A > 0 ; scrie (b); (Adevărat va fi afișat) Sfârşit.

var A: întreg; b: boolean; începe A:= 5; b:=A > 0; scrie(b);(Adevărat va fi tipărit) end.

Exemplu: Să ne uităm la un exemplu de lucru cu tipul boolean în Pascal:

var a:boolean; începe a:=adevărat; if a=true then writeln("adevărat") else writeln("fals"); Sfârşit.

Pentru a crea condiții complexe, se folosesc unele speciale: și, sau, nu și xor.

Sarcina booleană 1. Este dat un număr întreg pozitiv. Verificați adevărul afirmației: „este par”

Să ne uităm la un exemplu folosind operația XOR logică:

Exemplu: Solicitați două numere întregi: X, Y. Verificați adevărul afirmației: „Doar unul dintre numerele X și Y este impar”

programBoolean; var x,y: întreg; c:boolean; începe scrierea ("Introduceți X, Y: "); citeste(x,y); c:= (Impar(x)) xor (Impar(y)); writeln("Doar una dintre variabilele X și Y are o valoare impară - ", c); Sfârşit.

Să luăm în considerare o altă soluție la problema în Pascal folosind o variabilă logică:

Sarcina booleană 2. Având trei numere întregi: A, B, C. Verificați adevărul afirmației: „B este între numerele A și C”.

Să luăm în considerare rezolvarea unei probleme mai complexe cu o variabilă de tip logic:

Exemplu: Este dat un număr din trei cifre. Verificați adevărul afirmației: „Toate cifrele unui anumit număr sunt diferite”.

Afișați soluția:

1 2 3 4 5 6 7 8 9 10 11 12 13 const a= 348 ; var d_n, s_n, e_n: integer ; steag:boolean ; steag de început: = false ; s_n: = a div 100 ; d_n: = ((a mod 100 ) div 10 ) ; e_n: = a mod 10 ; dacă (s_n<>d_n) și (d_n<>e_n) și (e_n<>s_n) apoi flag: = true ; scrieln(steagul); Sfârşit.

const a=348; var d_n, s_n, e_n: întreg; steag:boolean; start flag:=false; s_n:=a div 100; d_n:=((a mod 100)div 10); e_n:=a mod 10; dacă (s_n<>d_n) și (d_n<>e_n) și (e_n<>s_n) apoi flag:=true; scrieln(steagul); Sfârşit.

Aici, fiecare cifră este obținută prin utilizarea operațiilor de împărțire cu un întreg și luând restul împărțirii: s_n este cifra a sutei cifre, d_n este cifra a zecea cifră, e_n sunt cele.

Sarcina booleană 3. Dat un număr întreg N > 0 . Folosind operațiile de împărțire la un număr întreg și luând restul împărțirii, determinați dacă numărul N conține cifra „2”. Dacă există, imprimați TRUE, dacă nu, tipăriți FALSE.

Sarcina booleană 4. Este dat un număr întreg pozitiv. Verificați adevărul afirmației: „Acest număr este un număr impar din trei cifre”.

Numărul minim și maxim în Pascal

Atunci când se organizează o căutare a numărului minim sau maxim dintr-o serie de numere, un vechi algoritm „bunicii” vine întotdeauna în ajutor:

  • Să ne imaginăm situația în care prăjim plăcinte și am prăjit deja o grămadă mare; Acum trebuie să-l alegeți pe cel mai mare dintre ele, adică. în cazul nostru maximul.
  • Luăm plăcinta de sus, adică. primul, iar noi spunem că este cel mai mare de până acum și îl lăsăm deoparte.
  • Apoi o luăm pe a doua și o comparăm cu cea mai mare; dacă această a doua plăcintă se dovedește a fi mai mare, o punem deoparte în locul „fosta cea mai mare” și spunem că acum este cea mai mare.
  • Luați următorul și repetați pașii. Așa că efectuăm această procedură cu toate plăcintele.

Uneori, cel mai mic număr posibil este atribuit ca maxim inițial (în funcție de contextul problemei). Și ca minim, dimpotrivă, cel mai mare număr posibil. De exemplu, dacă spuneți că trebuie să găsiți maximul/minimul dintre numerele pozitive mai mici de 1000, atunci:

max: = 0 ; min: = 1000 ;

Lucrări de laborator Nr. 3

Subiect: Tip logic (boolean).

Pascal are două constante logice: TRUE (adevărat) și FALSE (fals). O variabilă booleană poate lua oricare dintre aceste valori și este de tip boolean. Datele logice sunt utilizate pe scară largă în verificarea validității anumitor condiții și în compararea cantităților. Rezultatul poate fi „adevărat” sau „fals”. Următoarele operațiuni sunt permise asupra datelor logice:

Operații booleene:

Operator

Operațiune

Tipul de operand

Tip de rezultat

negare

ȘI logic

SAU logic

logic exclusiv OR

Rezultatele operațiunilor pe date logice sunt rezumate în tabel:

(A) și (B)

(A) sau (B)

Din date booleene, operații de comparare și operațiuni booleene, se construiesc expresii logice care au valori de tip boolean. De exemplu: (c10) sau (d

Când evaluați valorile expresiilor booleene, trebuie să luați în considerare ordinea în care sunt efectuate operațiile booleene. Operatorul NOT are cea mai mare prioritate, urmat de operatorul AND și apoi operatorul OR. Operațiunile de comparare au cea mai mică prioritate.

Variabilele de tip boolean sunt descrise în secțiunea de declarare a variabilelor folosind identificatorul standard BOOLEAN.

Exemplu: a, R1, f: boolean;.

În limbajul Pascal există funcții care acceptă tipul boolean:

1. ODD(A)- valoarea este adevărată când A nu este un număr par.

2. EOLN- valoarea este adevărată dacă sfârșitul liniei fișierului text.

3. EOF- adevărat dacă sfârșitul fișierului text.

Exemplu de program:

var a,b,c:intger;

writeln('introduceți trei numere întregi');

scrie(‘s=’,s);

Ca urmare a execuției programului, variabilei s i se va atribui valoarea TRUE sau FALSE, în funcție de dacă expresia logică a fost falsă sau adevărată, iar valoarea variabilei s va fi afișată pe ecran, adică. TRUE sau FALSE vor apărea pe ecran.

Sarcini pentru munca de laborator Nr. 3.

Pentru a finaliza laboratorul, trebuie să scrieți programe care se imprimă adevărat sau fals, în funcție de îndeplinirea sau nu a condițiilor specificate:

    Pentru numere reale arbitrare a, b și c, stabiliți dacă ecuația pătratică are cel puțin o soluție reală.

    Determinați dacă suma primelor două cifre ale unui număr dat de patru cifre este egală cu suma ultimelor două cifre ale acestuia.

    Determinați dacă pătratul unui număr dat de trei cifre este egal cu cubul sumei cifrelor acelui număr.

    Determinați dacă printre primele trei cifre ale părții fracționale a unui număr real pozitiv dat există o cifră 0.

    Stabiliți dacă printre cifrele unui număr dat de trei cifre există unele identice.

    Sunt date trei numere arbitrare. Determinați dacă este posibil să construiți un triunghi cu aceste lungimi de laturi.

    Creați o ecuație logică folosind toate operațiile logice cu o variabilă logică afișată pe ecran.

    Stabiliți dacă pătratul unui număr dat este mai mare decât rădăcina pătrată a altui număr dat.

    Lungimile laturilor unui patrulater convex sunt exprimate prin numerele a,b,c,d. Stabiliți dacă un cerc poate fi înscris în el.

Sarcini pentru munca de laborator Nr. 3.

Pentru a finaliza laboratorul, trebuie să scrieți programe care se imprimă adevărat sau fals, în funcție de îndeplinirea sau nu a condițiilor specificate:

    Pentru numere reale arbitrare a, b și c, stabiliți dacă ecuația pătratică are cel puțin o soluție reală.

    Determinați dacă suma primelor două cifre ale unui număr dat de patru cifre este egală cu suma ultimelor două cifre ale acestuia.

    Determinați dacă pătratul unui număr dat de trei cifre este egal cu cubul sumei cifrelor acelui număr.

    Determinați dacă printre primele trei cifre ale părții fracționale a unui număr real pozitiv dat există o cifră 0.

    Stabiliți dacă printre cifrele unui număr dat de trei cifre există unele identice.

    Sunt date trei numere arbitrare. Determinați dacă este posibil să construiți un triunghi cu aceste lungimi de laturi.

    Creați o ecuație logică folosind toate operațiile logice cu o variabilă logică afișată pe ecran.

    Stabiliți dacă pătratul unui număr dat este mai mare decât rădăcina pătrată a altui număr dat.

    Lungimile laturilor unui patrulater convex sunt exprimate prin numerele a,b,c,d. Stabiliți dacă un cerc poate fi înscris în el.

Descriere: var n: boolean;

Datele booleene pot lua doar două valori: adevărat și fals. Pentru valorile de tip boolean sunt permise operatii de comparatie, și Adevărat> fals.Aplicați și 4 operatii logice:

șiînmulțire logică

sau adaos logic

xor exclusiv sau"

nu negare

Regulile pentru efectuarea operațiilor logice sunt determinate folosind următoarele tabele de adevăr:

X și Y

X sau Y


Exemplu 1:

nu (5>2) = fals

(5>2) și (3<10) = true

(8<>9) sau (4>5) = adevărat

nu (5=2) xor (3>2) = fals

Exemplu 2:

La compararea datelor BOOLEAN, se ia în considerare convenția internă a Turbo Pascal, conform căreia FALSE este un octet zero, iar TRUE este un octet cu unul în bitul cel mai puțin semnificativ. Rețineți că, prin urmare, funcția ORD convertește nu numai simboluri, ci și valori logice într-un număr întreg

2.5 Tipuri restricționate

Pe baza tipurilor standard, vă puteți construi propriile tipuri, limitând gama de valori posibile: 1..10, -100..10, ‘a’..’z’ etc.

Exemplu:

b: ‘a’...’z’;

b:=0; (eroare: tip nepotrivire - un număr întreg este atribuit unei variabile de tip de caracter)

a:=0; (eroare: în afara intervalului 2..5)

2.6 Tipuri de enumerare

Ele sunt formate prin listarea explicită a tuturor valorilor posibile specificate prin nume. De exemplu, pentru un program de control al semaforului, se poate defini următorul tip:

var light: (rosu, galben, verde);

oper: (plus, minus);

Tipul boolean este un caz special de tip enumerat.

2.7 Descrierea tipurilor

Noile tipuri de date în Pascal sunt definite prin declarații care încep cu cuvântul TYPE. Descrierea constă dintr-un nume de tip și o valoare de tip, separate prin semnul „=”.

Exemplu:

abc=’A’...’z’;

2.8 Conversie de tip

După cum sa menționat deja, tipul unei variabile vă permite nu numai să setați lungimea reprezentării sale interne, ci și să controlați acțiunile care sunt efectuate asupra acesteia în program. Controlul asupra utilizării variabilelor chiar și în etapa de compilare a programului este un avantaj important al Turbo Pascal față de alte limbaje de programare care permit conversia automată a tipului. Conversiile de tip implicit (automate) sunt aproape imposibile în Turbo Pascal. Se face o excepție numai pentru constantele și variabilele de tip INTEGER (întreg), care pot fi folosite în expresii de tip REAL (real). Dacă, de exemplu, variabilele X și Y sunt definite după cum urmează:

var x: întreg;

apoi operatorul

va fi corect din punct de vedere sintactic: deși există o expresie întreagă în dreapta semnului de atribuire și o variabilă reală în stânga, compilatorul va face automat conversiile necesare. În același timp operatorul

va fi incorectă, deoarece conversia automată a tipului REAL (constanta 2.0 conține un punct zecimal și, prin urmare, aparține tipului REAL) în tipul INTEGER este interzisă în Turbo Pascal.

Astfel, variabilelor li se pot atribui doar valori de tip propriu; singura excepție este atunci când variabila este un număr real și valoarea este un număr întreg (caz în care numărul întreg va fi convertit într-un număr real cu o parte fracțională de 0).

Desigur, interzicerea conversiei automate de tip nu înseamnă că Turbo Pascal nu are instrumente de conversie a datelor. Desigur, ele există, dar trebuie folosite în mod explicit. Pentru a transforma datele în limbaj, există funcții încorporate care primesc o valoare de un tip ca parametru și returnează rezultatul ca valoare de alt tip. În special, pentru conversia REAL în INTEGER există chiar și două funcții încorporate de acest fel: ROUND rotunjește REAL la cel mai apropiat număr întreg, iar TRUNC trunchiază REAL prin eliminarea părții fracționale (vezi secțiunea 1.5).

De exemplu, operatorul ar fi eronat

dar corect

x:= rotund(y/x);

(vezi declarațiile variabilelor de mai sus).

De exemplu, pentru a converti date de tip CHAR (caracter) într-un număr întreg, este intenționată funcția ORD, iar conversia inversă a INTEGER în CHAR este efectuată de funcția CHR.

Prezența a două operațiuni de divizare este o altă manifestare a principiului fundamental al Turbo Pascal: programatorul trebuie să confirme în mod explicit compilatorului că este pregătit pentru posibilele consecințe ale conversiei de tip. Dacă, de exemplu, expresia 1/2 este folosită în limbajul Fortran, atunci rezultatul acestei expresii va depinde de tipul de variabilă căruia i se va atribui: dacă N este o variabilă de tip întreg, iar X este un tip real, apoi într-un program Fortran sarcinile

va da valorile 0 pentru N și 0,5 pentru X. În Turbo Pascal nu există o astfel de ambiguitate: expresia 1/2 are întotdeauna valoarea 0,5 și, prin urmare, operatorul

pur și simplu inacceptabil. În același timp, operatorii admiși în Turbo Pascal sunt:

Și în sfârșit, despre operațiile relaționale și logice.

Următoarele operațiuni relaționale (comparație) sunt definite pentru tipurile de date REAL, INTEGER, CHAR, STRING:

<>- nu este egal;

< - меньше;

> - mai mult;

<= - меньше или равно,

>= - mai mare sau egal cu.

Operațiile de comparare trebuie să implice operanzi de același tip. Se face din nou o excepție pentru REAL și INTEGER, care pot fi comparate între ele. Rezultatul aplicării operatorului relațional la orice operanzi este de tip BOOLEAN.

Expresiile sunt constructe de limbaj care specifică ordinea în care sunt efectuate acțiunile asupra elementelor de date.

O expresie este formată din operanzi (operandul este un element de date implicat într-o operație) combinați prin semne de operație. Operanzii pot fi constante, variabile și apeluri de funcții. Tipul valorii unei expresii este determinat de tipul operanzilor acesteia și de operațiile efectuate asupra acestora. De exemplu,

  • expresie: b > a + 10 ;
  • b - operand stânga, a + 10 - operand dreapta, > - operație relațională; rezultatul este de tip boolean.

Important: valorile care alcătuiesc expresia trebuie să fie de tipuri compatibile.

Operațiile pot fi unare sau binare. O operație unară se referă la un operand și este scrisă înaintea acestuia (de exemplu, -x), o operație binară exprimă o relație între doi operanzi și este scrisă între ei (de exemplu, a + b). Operațiile definesc acțiuni asupra operanzilor care sunt efectuate în funcție de priorități:

  • Unar -, nu,...
  • Operații de tip de multiplicare: *, /, div, mod și, …
  • Operații precum adăugarea: +, - sau,...
  • Operații relaționale: =, =, …

Rețineți că dacă funcțiile sunt găsite în expresie, acestea sunt calculate mai întâi. Ordinea operațiilor poate fi modificată folosind paranteze.

În lecția curentă vom analiza operații relaționale, operații aritmetice și logice, restul vor fi luate în considerare pe măsură ce studiem materialul.

Expresii și operații aritmetice

O expresie compusă din operanzi de tipuri întregi sau reale, uniți prin operații aritmetice semne și paranteze, se numește aritmetică.

Rezultatul unei expresii aritmetice poate fi un număr întreg sau o valoare reală.

Operațiile aritmetice includ:

  • operații unare: + , - pentru numere reale și întregi;
  • operații binare: +, -, *, / pentru numere reale și întregi;
  • operații binare: div, mod pentru numere întregi.

Expresii și operații relaționale

O expresie formată din operanzi conectați printr-un operator relațional se numește expresie relațională.

Doi operatori relaționali = și se aplică tuturor tipurilor, ceilalți se aplică operanzilor de tip simplu și șirurilor de caractere.

Operatorii relaționali compară doi operanzi pentru a determina dacă o expresie este adevărată sau falsă.

Expresii și operații logice

O expresie formată din operanzi conectați prin operații logice se numește expresie logică.

Operanzii unei expresii logice pot fi doar date de tip boolean iar rezultatul este adevărat (adevărat) sau fals (fals).

Operațiile logice care se supun regulilor standard ale algebrei logice includ:

  • operațiune unară nu ;
  • operații binare și, sau, xor.

Operațiile logice și, discutate mai sus, operațiile relaționale sunt utilizate pe scară largă pentru a implementa algoritmi de ramificare și ciclici.

Bună ziua, dragi cititori ai site-ului nostru! Astăzi, vom vorbi despre variabile booleene în Pascal, despre operații logice și despre rezolvarea a cinci probleme.

De ce ai nevoie de logică în Pascal? Sper că ați învățat deja cum să scrieți cele mai simple programe liniare, iar acum probabil vă întrebați cum să scrieți program neliniar? Pentru ca un program să fie neliniar în Pascal, ca și în alte limbaje de programare, se folosesc expresii logice care iau valori Adevărat sau fals. Adică, adevărat sau fals este pus în locul oricărei relații în Pascal. De exemplu,

Var A: întreg; începe A:= 5; scrie (A > 0); (True va fi tipărit.) end.

Lista operatorilor relaționali:

  • mai mult: >
  • Mai puțin:<
  • mai mare sau egal cu: >=
  • mai mic sau egal cu:<=
  • este egal cu: =
  • nu este egal:<>

Pentru a înregistra rezultatul unei expresii logice, avem nevoie de o variabilă specială. Această variabilă va fi de tip boolean și poate lua două valori - adevărat sau fals. Înțelegeți deja cum să creați condiții simple, dar cum să creați condiții complexe? Pentru aceasta, se folosesc operații logice speciale: și, sau, nuȘi xor. Să ne uităm la fiecare operație separat și să creăm tabele de adevăr. Să considerăm că 1 este adevărat și 0 fals.

Și, sau conjuncție.


Înmulțirea logică este adevărată numai atunci când ambele afirmații simple sunt adevărate.

Sau, sau disjuncție.

Adevărat dacă cel puțin o afirmație simplă este adevărată.

Xor, sau disjuncție strictă.


Adevărat dacă exact una dintre cele două afirmații simple este adevărată.

Nu, sau inversare.


Dacă o afirmație este adevărată, atunci negația ei este o minciună și invers.

Sarcini booleene.

Să ne consolidăm cunoștințele rezolvând câteva probleme.

. Având în vedere un număr întreg A. Verificați adevărul afirmației: „Numărul A este pozitiv”.

ProgramBoolean1; var a: întreg; begin write("Introduceți numărul A: "); Citeste o); writeln("Numărul A este pozitiv - ", a > 0); (O afirmație simplă.) end.

. Având în vedere un număr întreg A. Verificați adevărul afirmației: „Numărul A este impar”.

Pentru a afla dacă un anumit număr este impar, Pascal oferă o funcție specială Odd, care revine Adevărat, dacă numărul este impar și fals, dacă numărul este par.

ProgramBoolean2; var a: întreg; b: boolean; begin write("Introduceți numărul A: "); Citeste o); b:=Impar(a); writeln("Numărul A este impar - ", b); (Puteți face fără b) sfârșit.

. Având în vedere un număr întreg A. Verificați adevărul afirmației: „Numărul A este par”.

Pentru a afla dacă un număr este impar, folosim o funcție pe care o cunoaștem deja, apoi inversăm rezultatul.

ProgramBoolean3; var a: întreg; b: boolean; begin write("Introduceți numărul A: "); ( 6 ) citiți(a); b:=Impar(a); ( Fals ) writeln("Numărul A este par - ", nu b); (adevărat) sfârşit.

. Având trei numere întregi: A, B, C. Verificați adevărul afirmației: „Numărul B este între numerele A și C.”

Programul Boolean7; var a, b, c: întreg; b1, b2: boolean; începe scrierea ("Introduceți numărul A, B, C: "); citiți (a, b, c); b1:= (B > A) și (B< C); b2:= (B >C) și (B)< A); { Надо учитывать оба варианта } writeln("Число B находится между числами A и C - ", b1 or b2); end.

. Având în vedere două numere întregi: A, B. Verificați adevărul afirmației: „Exact unul dintre numerele A și B este impar.”

Folosim xor.

ProgramBoolean10; var a, b: întreg; c:boolean; begin write("Introduceți numărul A, B: "); citiți (a, b); c:= (Impar(a)) xor (Impar(b)); ( Câte paranteze 🙂 ) writeln("Exact unul dintre numerele A și B este impar - ", c); Sfârşit.

. Este dat un număr din patru cifre. Verificați adevărul afirmației: „Acest număr se citește la fel de la stânga la dreapta și de la dreapta la stânga”.

Folosim cunoștințele acumulate în lecție.

Deci, această sarcină verifică dacă numărul de patru cifre introdus este un palindrom. Cu siguranță, cel mai faimos palindrom este fraza lui Malvina: „Și trandafirul a căzut pe laba lui Azor”. (Încercați să citiți această propoziție de la dreapta la stânga)

ProgramBoolean23; var a, b, c, d, e, f: întreg; b1, b2: boolean; begin write("Introduceți un număr din patru cifre: "); citeste(e); a:= e div 1000; b:= e mod 1000 div 100; c:= e mod 100 div 10; d:= e mod 100 mod 10; f:= d * 1000 + c * 100 + b * 10 + a; writeln("Acest număr este un palindrom - ", f = e); Sfârşit.

Asta e tot pentru azi! Nu uitați să vizitați periodic site-ul nostru, să vă abonați și să faceți clic pe butoane!