Logické operátory Pascal. Booleovské datové typy

Tato lekce představuje logický typ Boolean v Pascalu. Algoritmus, jak najít minimální A maximumčíslo v Pascalu


Webová stránka poskytuje laboratorní úlohy na toto téma, které posílí teoretický materiál a získají praktické dovednosti programování v Pascalu. Stručné teoretické informace vám umožní získat minimální znalosti potřebné k tomu. Řešené vizuální příklady a laboratorní úlohy jsou prezentovány v pořadí stále složitější, což usnadňuje studium materiálu od začátku. Hodně štěstí!

Již jsme se naučili psát programy založené na lineárních algoritmech v Pascalu. A dokonce již kompilujeme nelineární algoritmy - s větvením - které používají , které mají hodnoty true nebo false.

Booleovské hodnoty:

V níže uvedeném příkladu se na obrazovce zobrazí výsledek logického výrazu:

1 2 3 4 5 6 var A: integer ; začít A := 5 ; zápis(A ​​> 0); (Pravda bude výstupem) konec.

var A: celé číslo; začít A:= 5; zápis(A ​​> 0); (True bude výstup) end.

K zaznamenání výsledku logického výrazu se používá speciální logická proměnná, která je v Pascalu typu boolean a může také nabývat jedné ze dvou hodnot - true nebo false.

Podívejme se, jak stejná úloha funguje s booleovskou proměnnou:

1 2 3 4 5 6 7 8 var A: integer ; b:boolean ; začít A := 5 ; b: = A > 0; napsat(b); (Pravda bude výstupem) konec.

var A: celé číslo; b: booleovský; začít A:= 5; b:=A > 0; write(b);(True bude vytištěno) end.

Příklad: Podívejme se na příklad práce s typem boolean v Pascalu:

var a:boolean; begin a:=true; if a=true then writeln("true") else writeln("false"); konec.

K vytvoření složitých podmínek se používají speciální podmínky: a, nebo, ne a xor.

Booleovská úloha 1. Je zadáno kladné celé číslo. Zkontrolujte pravdivost výroku: „je to stejné“

Podívejme se na příklad s použitím logické operace XOR:

Příklad: Požadujte dvě celá čísla: X, Y. Zkontrolujte pravdivost tvrzení: „Pouze jedno z čísel X a Y je liché“

programBoolean; var x,y: celé číslo; c:boolean; begin write("Zadej X, Y: "); read(x,y); c:= (lichý(x)) xor (lichý(y)); writeln("Pouze jedna z proměnných X a Y má lichou hodnotu - ", c); konec.

Zvažme další řešení problému v Pascalu pomocí logické proměnné:

Booleovská úloha 2. Jsou dána tři celá čísla: A, B, C. Zkontrolujte pravdivost tvrzení: „B je mezi čísly A a C.“

Zvažme řešení složitějšího problému s proměnnou logického typu:

Příklad: Je uvedeno třímístné číslo. Ověřte si pravdivost tvrzení: „Všechny číslice daného čísla jsou různé.

Zobrazit řešení:

1 2 3 4 5 6 7 8 9 10 11 12 13 const a= 348 ; var d_n, s_n, e_n: integer ; flag:boolean ; begin flag: = false ; s_n: = a div 100 ; d_n: = ((a mod 100) div 10); e_n: = a mod 10 ; pokud (s_n<>d_n) a (d_n<>e_n) a (e_n<>s_n) pak příznak: = true ; writeln(příznak); konec.

const a=348; var d_n, s_n, e_n: celé číslo; flag:boolean; begin flag:=false; s_n:=a div 100; d_n:=((a mod 100)div 10); e_n:=a mod 10; pokud (s_n<>d_n) a (d_n<>e_n) a (e_n<>s_n) then flag:=true; writeln(příznak); konec.

Zde je každá číslice získána pomocí operací dělení celým číslem a přebíráním zbytku dělení: s_n je číslice sté číslice, d_n je číslice desáté číslice, e_n jsou jedničky.

Booleovská úloha 3. Je dáno celé číslo N > 0 . Pomocí operací dělení celým číslem a převzetí zbytku dělení určete, zda číslo N obsahuje číslici „2“. Pokud existuje, vytiskněte PRAVDA, pokud ne, vytiskněte NEPRAVDA.

Booleovská úloha 4. Je zadáno kladné celé číslo. Ověřte si pravdivost tvrzení: „Toto číslo je liché třímístné číslo.

Minimální a maximální číslo v Pascalu

Při organizování hledání minimálního nebo maximálního čísla mezi řadou čísel vždy přichází na pomoc starý algoritmus „babičky“:

  • Představme si situaci, že smažíme koláče, a už jsme usmažili celou velkou hromadu; Nyní je třeba vybrat největší z nich, tzn. v našem případě maximum.
  • Vezmeme vrchní koláč, tzn. ten první a my říkáme, že je zatím největší a odložíme ho stranou.
  • Pak vezmeme druhý a porovnáme ho s největším, pokud se tento druhý koláč ukáže být větší, odložíme ho na místo „bývalého největšího“ a řekneme, že je nyní největší.
  • Vezměte další a opakujte kroky. Takže tento postup provádíme se všemi koláči.

Někdy je jako počáteční maximum přiřazeno nejmenší možné číslo (v závislosti na kontextu problému). A jako minimum naopak co největší počet. Pokud například řeknete, že potřebujete najít maximum/minimum mezi kladnými čísly menšími než 1000, pak:

max: = 0; min: = 1000;

Laboratorní práce č. 3

Předmět: Logický typ (booleovský).

Pascal má dvě logické konstanty: TRUE (true) a FALSE (false). Proměnná typu boolean může nabývat jakékoli z těchto hodnot a je typu boolean. Logická data jsou široce používána při kontrole platnosti určitých podmínek a při porovnávání veličin. Výsledek může být „pravda“ nebo „nepravda“. Na logických datech jsou povoleny následující operace:

Booleovské operace:

Operátor

Úkon

Typ operandu

Typ výsledku

negace

logické AND

logické NEBO

logické exkluzivní NEBO

Výsledky operací s logickými daty jsou shrnuty v tabulce:

(A) a (B)

(A) nebo (B)

Z booleovských dat, porovnávacích operací a booleovských operací se konstruují logické výrazy, které mají hodnoty typu boolean. Například: (c10) nebo (d

Při vyhodnocování hodnot booleovských výrazů musíte vzít v úvahu pořadí, ve kterém jsou logické operace prováděny. Operátor NOT má nejvyšší prioritu, následuje operátor AND a poté operátor OR. Porovnávací operace mají nejnižší prioritu.

Proměnné typu Boolean jsou popsány v části deklarace proměnných pomocí standardního identifikátoru BOOLEAN.

Příklad: a, Rl, f: boolean;.

V jazyce Pascal existují funkce, které přijímají booleovský typ:

1. ODD(A)- hodnota je pravdivá, když A není sudé číslo.

2. EOLN- hodnota je true, pokud je konec řádku textového souboru.

3. EOF- true, pokud je konec textového souboru.

Příklad programu:

var a,b,c:integer;

writeln('zadejte tři celá čísla');

napsat(‘s=‘,s);

V důsledku provádění programu bude proměnné s přiřazena hodnota TRUE nebo FALSE podle toho, zda byl logický výraz nepravdivý nebo pravdivý a na obrazovce se zobrazí hodnota proměnné s, tzn. Na obrazovce se objeví TRUE nebo FALSE.

Zadání laboratorní práce č. 3.

Chcete-li dokončit cvičení, musíte napsat programy, které vypisují true nebo false v závislosti na tom, zda jsou zadané podmínky splněny nebo ne:

    Pro libovolná reálná čísla a, b a c určete, zda má kvadratická rovnice alespoň jedno reálné řešení.

    Určete, zda se součet prvních dvou číslic daného čtyřmístného čísla rovná součtu jeho posledních dvou číslic.

    Určete, zda se druhá mocnina daného trojciferného čísla rovná třetí mocnině součtu číslic tohoto čísla.

    Určete, zda mezi prvními třemi číslicemi zlomkové části daného kladného reálného čísla je číslice 0.

    Určete, zda jsou mezi číslicemi daného trojciferného čísla shodné.

    Jsou dána tři libovolná čísla. Určete, zda je možné sestrojit trojúhelník s těmito délkami stran.

    Vytvořte logickou rovnici pomocí všech logických operací s logickou proměnnou zobrazenou na obrazovce.

    Určete, zda je druhá mocnina daného čísla větší než druhá odmocnina jiného daného čísla.

    Délky stran konvexního čtyřúhelníku jsou vyjádřeny čísly a,b,c,d. Určete, zda do něj lze vepsat kružnici.

Zadání laboratorní práce č. 3.

Chcete-li dokončit cvičení, musíte napsat programy, které vypisují true nebo false v závislosti na tom, zda jsou zadané podmínky splněny nebo ne:

    Pro libovolná reálná čísla a, b a c určete, zda má kvadratická rovnice alespoň jedno reálné řešení.

    Určete, zda se součet prvních dvou číslic daného čtyřmístného čísla rovná součtu jeho posledních dvou číslic.

    Určete, zda se druhá mocnina daného trojciferného čísla rovná třetí mocnině součtu číslic tohoto čísla.

    Určete, zda mezi prvními třemi číslicemi zlomkové části daného kladného reálného čísla je číslice 0.

    Určete, zda jsou mezi číslicemi daného trojciferného čísla shodné.

    Jsou dána tři libovolná čísla. Určete, zda je možné sestrojit trojúhelník s těmito délkami stran.

    Vytvořte logickou rovnici pomocí všech logických operací s logickou proměnnou zobrazenou na obrazovce.

    Určete, zda je druhá mocnina daného čísla větší než druhá odmocnina jiného daného čísla.

    Délky stran konvexního čtyřúhelníku jsou vyjádřeny čísly a,b,c,d. Určete, zda do něj lze vepsat kružnici.

Popis: var n: boolean;

Booleovská data mohou nabývat pouze dvou hodnot: true a false. Pro booleovský typ jsou povoleny hodnoty srovnávací operace, a skutečný> Nepravdivé.Použít také 4 logické operace:

a logické násobení

nebo logické doplnění

xor exkluzivní "nebo"

ne negace

Pravidla pro provádění logických operací jsou určena pomocí následujících pravdivostních tabulek:

X a Y

X nebo Y


Příklad 1:

ne (5>2) = nepravda

(5>2) a (3<10) = true

(8<>9) nebo (4>5) = pravda

ne (5=2) xor (3>2) = nepravda

Příklad 2:

Při porovnávání BOOLEAN dat se bere v úvahu vnitřní konvence Turbo Pascalu, podle které FALSE je nulový bajt a TRUE je bajt s jedničkou v nejméně významném bitu. Všimněte si, že funkce ORD převádí nejen symboly, ale také logické hodnoty na celé číslo

2.5 Omezené typy

Na základě standardních typů můžete vytvářet vlastní typy, omezující rozsah možných hodnot: 1..10, -100..10, ‚a‘..‘z‘ atd.

Příklad:

b: ‚a‘...‘z‘;

b:=0; (chyba: neshoda typu – celé číslo je přiřazeno proměnné typu znaku)

a:=0; (chyba: mimo rozsah 2..5)

2.6 Typy výčtů

Jsou tvořeny explicitním výpisem všech možných hodnot specifikovaných jmény. Například pro program řízení semaforů lze definovat následující typ:

var light: (červená, žlutá, zelená);

oper: (plus, mínus);

Booleovský typ je speciální případ výčtového typu.

2.7 Popis typů

Nové datové typy v Pascalu jsou definovány deklaracemi začínajícími slovem TYPE. Popis se skládá z názvu typu a hodnoty typu, oddělených znakem „=“.

Příklad:

abc=’A’..’z’;

2.8 Převod typu

Jak již bylo zmíněno, typ proměnné umožňuje nejen nastavit délku její vnitřní reprezentace, ale také řídit akce, které se s ní v programu provádějí. Kontrola nad používáním proměnných i ve fázi kompilace programu je důležitou výhodou Turbo Pascalu oproti jiným programovacím jazykům, které umožňují automatický převod typů. Implicitní (automatické) převody typů jsou v Turbo Pascalu téměř nemožné. Výjimku tvoří pouze konstanty a proměnné typu INTEGER (integer), které je povoleno používat ve výrazech typu REAL (real). Pokud jsou například proměnné X a Y definovány takto:

var x: celé číslo;

pak operátor

bude syntakticky správný: ačkoli je napravo od přiřazovacího znaku celočíselný výraz a nalevo skutečná proměnná, kompilátor provede potřebné převody automaticky. Zároveň provozovatel

bude nesprávný, protože automatický převod typu REAL (konstanta 2.0 obsahuje desetinnou čárku a patří tedy k typu REAL) na typ INTEGER je v Turbo Pascalu zakázán.

Proměnným lze tedy přiřadit pouze hodnoty jejich vlastního typu; jedinou výjimkou je situace, kdy proměnná je reálné číslo a hodnota je celé číslo (v takovém případě bude celé číslo převedeno na reálné číslo s desetinnou částí 0).

Zákaz automatického převodu typů samozřejmě neznamená, že Turbo Pascal nemá nástroje pro převod dat. Samozřejmě existují, ale musí být výslovně použity. Pro transformaci dat v jazyce existují vestavěné funkce, které přijímají hodnotu jednoho typu jako parametr a vracejí výsledek jako hodnotu jiného typu. Konkrétně pro převod REAL na INTEGER existují dokonce dvě vestavěné funkce tohoto druhu: ROUND zaokrouhlí REAL na nejbližší celé číslo a TRUNC zkrátí REAL zahozením zlomkové části (viz část 1.5).

Chyboval by například operátor

ale správně

x:= round(y/x);

(viz deklarace proměnných výše).

Například pro převod dat typu CHAR (znak) na celé číslo je určena funkce ORD a zpětný převod INTEGER na CHAR se provádí funkcí CHR.

Přítomnost dvou dělicích operací je dalším projevem základního principu Turbo Pascalu: programátor musí kompilátoru výslovně potvrdit, že je připraven na možné důsledky typové konverze. Pokud je například v jazyce Fortran použit výraz 1/2, bude výsledek tohoto výrazu záviset na tom, ke kterému typu proměnné bude přiřazen: pokud N je proměnná celočíselného typu a X je proměnná skutečný typ, pak v programu Fortran zadání

dá hodnoty 0 pro N a 0,5 pro X. V Turbo Pascalu taková nejednoznačnost není: výraz 1/2 má vždy hodnotu 0,5 a proto operátor

prostě nepřijatelné. Současně jsou v Turbo Pascal povoleni operátoři:

A nakonec o relačních a logických operacích.

Pro datové typy REAL, INTEGER, CHAR, STRING jsou definovány následující relační (porovnávací) operace:

<>- nerovná se;

< - меньше;

> - více;

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

>= - větší nebo rovno.

Porovnávací operace musí zahrnovat operandy stejného typu. Výjimku tvoří opět REAL a INTEGER, které lze vzájemně porovnávat. Výsledek použití relačního operátoru na libovolné operandy je typu BOOLEAN.

Výrazy jsou jazykové konstrukce, které určují pořadí, ve kterém jsou akce prováděny s datovými prvky.

Výraz se skládá z operandů (operand je datový prvek zahrnutý do operace) kombinovaných operačními znaky. Operandy mohou být konstanty, proměnné a volání funkcí. Typ hodnoty výrazu je určen typem jeho operandů a operací s nimi prováděných. Například,

  • výraz: b > a + 10 ;
  • b - levý operand, a + 10 - pravý operand, > - relační operace; výsledek je typu boolean.

Důležité: hodnoty, které tvoří výraz, musí být kompatibilního typu.

Operace mohou být unární nebo binární. Unární operace odkazuje na jeden operand a zapisuje se před něj (například -x), binární operace vyjadřuje vztah mezi dvěma operandy a zapisuje se mezi nimi (například a + b). Operace definují akce s operandy, které se provádějí podle priorit:

  • Unární - ne, ...
  • Operace typu násobení: *, /, div, mod a, …
  • Operace jako sčítání: +, -, nebo, …
  • Relační operace: =, =, …

Všimněte si, že pokud jsou ve výrazu nalezeny funkce, jsou nejprve vypočteny. Pořadí operací lze změnit pomocí závorek.

V aktuální lekci budeme analyzovat relační operace, aritmetické a logické operace, zbytek budeme brát v úvahu při studiu látky.

Aritmetické výrazy a operace

Výraz složený z operandů celočíselného nebo reálného typu, spojených znaménkem a závorkami aritmetických operací, se nazývá aritmetika.

Výsledkem aritmetického výrazu může být celé číslo nebo skutečná hodnota.

Aritmetické operace zahrnují:

  • unární operace: + , - pro reálná a celá čísla;
  • binární operace: +, -, *, / pro reálná a celá čísla;
  • binární operace: div, mod pro celá čísla.

Výrazy a relační operátory

Výraz sestávající z operandů spojených relačním operátorem se nazývá relační výraz.

Dva relační operátory = a platí pro všechny typy, ostatní platí pro operandy jednoduchého typu a pro řetězce.

Relační operátory porovnávají dva operandy, aby určily, zda je výraz pravdivý nebo nepravdivý.

Logické výrazy a operace

Výraz sestávající z operandů spojených logickými operacemi se nazývá logický výraz.

Operandy logického výrazu mohou být pouze data typu boolean a výsledek je true (true) nebo false (false).

Mezi logické operace, které se řídí standardními pravidly logické algebry, patří:

  • unární operace ne;
  • binární operace a, nebo, xor.

Logické operace a výše uvedené relační operace se široce používají k implementaci větvících a cyklických algoritmů.

Dobrý den, milí čtenáři našich stránek! Dnes si povíme něco o booleovských proměnných v Pascalu, logických operacích a vyřešíme pět problémů.

Proč potřebujete logiku v Pascalu? Doufám, že jste se již naučili psát nejjednodušší lineární programy a nyní vás pravděpodobně zajímá, jak psát nelineární program? Aby byl program v Pascalu nelineární, stejně jako v jiných programovacích jazycích, používají logické výrazy, které nabývají hodnot skutečný nebo Nepravdivé. To znamená, že pravda nebo nepravda je v Pascalu místo jakéhokoli vztahu. Například,

Var A: celé číslo; začít A:= 5; zápis(A ​​> 0); (True bude vytištěno.) end.

Seznam relačních operátorů:

  • více: >
  • méně:<
  • větší nebo rovno: >=
  • menší nebo rovno:<=
  • rovná se: =
  • nerovná se:<>

Abychom mohli zaznamenat výsledek logického výrazu, potřebujeme speciální proměnnou. Tato proměnná bude typu boolean a může nabývat dvou hodnot – true nebo false. Už chápete, jak vytvořit jednoduché podmínky, ale jak vytvořit složité podmínky? K tomu se používají speciální logické operace: a nebo ne A xor. Podívejme se na každou operaci zvlášť a vytvořte pravdivostní tabulky. Vezměme 1 za pravdu a 0 za nepravdu.

A nebo konjunkce.


Logické násobení je pravdivé pouze tehdy, když jsou pravdivá obě jednoduchá tvrzení.

Nebo, nebo disjunkce.

Pravda, pokud je pravdivé alespoň jedno jednoduché tvrzení.

Xor neboli přísná disjunkce.


Pravda, pokud je pravdivé právě jedno ze dvou jednoduchých tvrzení.

Ne, nebo inverze.


Pokud je tvrzení pravdivé, pak je jeho negace lží a naopak.

Booleovské úlohy.

Upevněme své znalosti vyřešením několika problémů.

. Dané celé číslo A. Zkontrolujte pravdivost tvrzení: „Číslo A je kladné.“

ProgramBoolean1; var a: celé číslo; begin write("Zadejte cislo A: "); číst); writeln("Číslo A je kladné - ", a > 0); (Jednoduché prohlášení.) konec.

. Je dáno celé číslo A. Zkontrolujte pravdivost tvrzení: „Číslo A je liché.“

Aby bylo možné zjistit, zda je dané číslo liché, nabízí Pascal speciální funkci Odd, která vrací skutečný, je-li číslo liché a Nepravdivé, pokud je číslo sudé.

ProgramBoolean2; var a: celé číslo; b: booleovský; begin write("Zadejte cislo A: "); číst); b:=Lichý(a); writeln("Číslo A je liché - ", b); (Můžete se obejít bez b) konec.

. Je dáno celé číslo A. Zkontrolujte pravdivost tvrzení: „Číslo A je sudé.“

Abychom zjistili, zda je číslo liché, použijeme funkci, kterou již známe, a výsledek invertujeme.

ProgramBoolean3; var a: celé číslo; b: booleovský; begin write("Zadejte cislo A: "); (6) čtěte(a); b:=Lichý(a); ( False ) writeln("Číslo A je sudé - ", ne b); (pravdivý) konec.

. Jsou dána tři celá čísla: A, B, C. Zkontrolujte pravdivost tvrzení: „Číslo B je mezi čísly A a C.“

Program Boolean7; var a, b, c: celé číslo; b1, b2: booleovská hodnota; begin write("Zadejte cislo A, B, C: "); read(a, b, c); b1:= (B > A) a (B< C); b2:= (B >C) a (B)< A); { Надо учитывать оба варианта } writeln("Число B находится между числами A и C - ", b1 or b2); end.

. Jsou dána dvě celá čísla: A, B. Zkontrolujte pravdivost tvrzení: „Přesně jedno z čísel A a B je liché.“

Používáme xor.

ProgramBoolean10; var a, b: celé číslo; c:boolean; begin write("Zadejte cislo A, B: "); read(a, b); c:= (lichý(a)) xor (lichý(b)); ( Kolik závorek 🙂 ) writeln("Přesně jedno z čísel A a B je liché - ", c); konec.

. Je uvedeno čtyřmístné číslo. Ověřte si pravdivost tvrzení: „Toto číslo se čte stejně zleva doprava a zprava doleva.”

Využíváme poznatky získané v lekci.

Tato úloha tedy zkontroluje, zda zadané čtyřmístné číslo je palindrom. Nejznámějším palindromem je jistě Malvinina věta: „A růže spadla na Azorovu tlapu. (Zkuste přečíst tuto větu zprava doleva)

ProgramBoolean23; var a, b, c, d, e, f: celé číslo; b1, b2: booleovská hodnota; begin write("Zadejte čtyřmístné číslo: "); read(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("Toto číslo je palindrom - ", f = e); konec.

To je pro dnešek vše! Nezapomeňte pravidelně navštěvovat naše webové stránky, přihlásit se k odběru a klikat na tlačítka!