X aparține segmentului. Subiect: tip de date boolean

Lecție din seria " Algoritmi geometrici»

Bună dragă cititor!

Astăzi vom lua în considerare o altă problemă tipică din seria algoritmilor geometrici. Să scriem o funcție care va verifica apartenenta arbitrar segment de linie dat de coordonatele începutului şi sfârşitului acestuia.

Pentru a implementa operații de comparare pe date reale, vom mai scrie două funcții: funcția EqPoint(), care va verifica dacă două puncte din plan coincid și funcția RealMoreEq(), pe care o vom folosi pentru a verifica „>=” relație (mai mare sau egală cu). Știm deja motivul introducerii funcțiilor speciale.

Sarcină. Verifica, aparține dacă segment de linie.

Lăsați punctele să fie punctele de început și de sfârșit ale segmentului. este un punct arbitrar pe plan.

Un vector care începe într-un punct și se termină într-un punct va avea coordonate (x2-x1, y2-y1).

Dacă P(x, y) este un punct arbitrar, atunci coordonatele vectorului sunt: ​​(x-x1, y - y1).

Punctul P va aparține segmentului dacă:

Programul geom3; Const _Eps: Real = 1e-3; (precizia calculului) var x1,y1,x2,y2,x,y:real; Funcția RealEq(Const a, b:Real):Boolean; (strict egal) începe RealEq:= Abs(a-b)<= _Eps End; {RealEq} Function RealMoreEq(Const a, b:Real):Boolean; {больше или равно} begin RealMoreEq:= a - b >= _EpsEnd; (RealMoreEq) Funcția EqPoint(x1,y1,x2,y2:real):Boolean; (Dacă două puncte din plan coincid) începe EqPoint:=RealEq(x1,x2)și RealEq(y1,y2) se termină; (EqPoint) Funcția AtOtres(x1,y1,x2,y2,x,y:real):Boolean; (Se verifică dacă punctul P aparține segmentului P1P2) Începeți dacă EqPoint(x1,y1,x2,y2) Atunci AtOtres:= EqPoint(x1,y1,x,y) (punctele P1 și P2 coincid, rezultatul este determinat de coincidență a punctelor P1 și P) Altfel AtOtres:= RealEq((x-x1)*(y2-y1)- (y-y1)*(x2-x1),0)și (RealMoreEq(x,x1)și RealMoreEq(x2) ,x)Sau RealMoreEq(x ,x2)și RealMoreEq(x1,x)) final; (AtOtres) începe (principal) writeln(Introduceți coordonatele punctului: x1,y1,x2,y2,x,y"); readln(x1,y1,x2,y2,x,y); if AtOtres(x1,y1,x2 ,y2,x,y) apoi writeln("Da") else writeln("Nu.); Sfârşit. (principal)

Rezultatele executiei programului.

Introduceți coordonatele punctului: x1, y1, x2, y2, x,y
0.5 1 2.5 2.8 1.203 1.633
Da.

Rezultatele testelor în programul GeoGebra:


Astăzi am scris funcția AtOtres(), care verifică dacă un punct arbitrar aparține unui segment dat de coordonatele sale.

Au fost introduse încă două funcții: EqPoint() și RealMoreEq() pentru a implementa operațiuni de comparare pe date reale. Primul verifică dacă două puncte din plan coincid, al doilea este folosit pentru a verifica relația ">=".

În lecția următoare, pe baza procedurilor scrise anterior, vom scrie o procedură pentru determinarea coordonatelor punctului de intersecție a două segmente.

Despre asta îmi iau rămas bun de la tine. Ne vedem la următoarea lecție.

Variabilele booleene își obțin de obicei valorile din operațiuni de comparare și matematică (discutate în lecția anterioară), precum și din operațiuni booleene specifice.

Turbo Pascal are operații logice care pot fi aplicate variabilelor de tip boolean. Acestea nu sunt operațiuni și, sau și xor. În acest subiect, veți analiza trei operații logice. Denumirile și rezultatele acestor operațiuni sunt date în tabel. Ia in considerare.

Operațiune nu(nu) are un operand și își formează negația logică. Rezultatul operației not este False dacă operandul este adevărat și True dacă operandul este fals. Asa de,

nu Adevărat Fals (neadevărul este o minciună)

nu fals Adevărat (non-fals este adevărat)

Rezultatul operațiunii și(i) este adevărată numai dacă ambii operanzi ai săi sunt adevărati, iar fals în caz contrar.

Rezultatul operațiunii sau(sau) este adevărat dacă oricare dintre operanzii săi este adevărat și fals numai dacă ambii operanzi sunt falși.

Exercițiu . Încercați să determinați semnificația operațiilor booleene pentru instrucțiuni:

  1. Un școlar stă acasă în vacanța de iarnă sau merge undeva să se odihnească.
  2. Philip Kirkorov este cântăreț și operator de combină.
  3. Scolarii sunt baieti si fete.

Operațiile logice, relaționale și aritmetice apar adesea în aceeași expresie. În acest caz, relațiile la stânga și la dreapta semnului operației logice trebuie să fie cuprinse între paranteze, deoarece operațiile logice au o prioritate mai mare. În general, se adoptă următoarea prioritate a operațiunilor:

  • și, *, /, div, mod
  • sau, +, -
  • operațiuni de relație.

. Operația logică și se mai numește și înmulțire logică, iar operația logică sau se mai numește și adunare logică.

În plus, ordinea operațiilor poate fi modificată prin paranteze. De exemplu, într-o expresie logică, aranjam ordinea acțiunilor

A sau B și nu (A sau B)

Operatorul sau parantezat este executat mai întâi, urmat de operatorii not, and, or. Dacă înlocuim valorile True și False în loc de variabilele A și B, atunci, folosind procedura deja luată în considerare, obținem valoarea întregii expresii egală cu True.

Exercițiu . Scrieți în caiet și calculați valorile expresiilor pentru a=10, b=20, c=adevărat, d=fals:

  • (a>5) și (b>5) și (a<20) and (b<30);
  • nu (a<15) or not (b<30);
  • c sau d şi (b=20);

Atenţie! În Pascal, nu există nicio modalitate de a introduce date booleene folosind instrucțiunea read. Cu toate acestea, ieșirea valorilor variabilelor de tip boolean este furnizată folosind operatorul de scriere.

De exemplu, după executarea instrucțiunii write (5>2), pe ecran va fi afișat True.

Muncă independentă

Alegeți împreună cu profesorul o sarcină pentru a efectua o muncă independentă din exercițiile de mai jos.

  1. Calculați valorile expresiei:

    a) sqr(x)+sqr(y)<=4 при x=0.3, y=-1.6;

    b) k mod 7 = k div5-1 la k=15;

    c) impar(trunc(10*p)) la p=0,182;

    d) nu impar(n) pentru n=0;

    e) t și (p mod 3=0) la t=adevărat, p=101010;

    e) (x*y<>0) și (y>x) cu x=2, y=1;

    g) (x*y<>0) sau (y>x) când x=2, y=1;

    h) a sau (nu b) cu a=Fals, b=Adevărat;

  2. Scrieți o relație în Pascal care este adevărată dacă condiția specificată este îndeplinită și falsă în caz contrar:

    a) întregul k este divizibil cu 7;

    b) punctul (x, y) se află în afara cercului de rază R centrat în punctul (1,0);

    c) numărul natural N este pătratul numărului natural;

    d) 0

    e) x=max(x,y,z);

    e) cel puţin una dintre variabilele logice a şi b este adevărată;

    g) ambele variabile logice a și b sunt adevărate.

  3. Specificați ordinea în care sunt efectuate operațiile la evaluarea expresiilor:

    a) a și b sau nu c și d;

    b) (x>=0) sau nu c și d.

  4. Evaluați următoarele expresii cu a=adevărat, b=fals:

    a) a sau b și nu a;

    b) (a sau b) și nu a;

    c) nu a și b;

    d) nu (a și b)

  5. Scrieți o expresie în Pascal care este adevărată dacă condiția specificată este îndeplinită și falsă în caz contrar:

    a) x aparține segmentului;

    b) x se află în afara segmentului;

    c) * x aparține segmentului sau [-1, 1];

    d) * x se află în afara segmentelor și [-1, 1];

    e) fiecare dintre numerele x, y, z este pozitiv;

    g) niciunul dintre numerele x, y, z nu este pozitiv;

    h) doar unul dintre numerele x, y, z este pozitiv;

    i) variabila booleană a are valoarea Adevărat, variabila booleană b are valoarea Fals;

    j) * un an cu numărul de serie y este un an bisect (un an este un an bisect dacă numărul său este un multiplu de 4, dar din multiplii de 100, numai multiplii de 400 sunt ani bisecti, de exemplu, 1700, 1800 iar 1900 sunt ani non-bisecți, 2000 este un an bisect).

  6. Desenați pe planul (x, y) o zonă în care și numai în care expresia specificată este adevărată:

    a)* (y>=x) și (y+x>=0) și (y<=1);

    b) (sqr(x)+sqr(y)<1) or (y>0) și (abs(x)<=1);

    c) (trunc(y)=0 și (rotunzi(x)=0);

    d)* (abs(x)<=1)>(abs(y)>=1);

    e) (sqr(x)+sqr(y)<=4)=(y<=x).

  7. Există un operator condiționat:
    dacă d<>10
    apoi
    scrieln('ura!')
    altfel
    writeln('rau...');

    Este posibil să-l înlocuiți cu următoarele afirmații:

  8. Care vor fi valorile variabilelor j, k după executarea instrucțiunii condiționate:
    dacă j>k
    apoi
    j:=k-2
    altfel
    dec(k,2);
    dacă valorile inițiale ale variabilelor sunt egale:
    a) j=3, k=5;
    b) j=3, k=3;
    c) j=3, k=2.

Notă . Ca urmare a afirmației dec (k,2), valoarea variabilei k este redusă cu 2.

Alegeți împreună cu profesorul o sarcină pentru a efectua o muncă independentă din exercițiile de mai jos.

1. Calculați valorile expresiei:

a) sqr(x)+sqr(y)<=4 при x=0.3, y=-1.6;

b) k mod 7 = k div5-1 la k=15;

c) impar(trunc(10*p)) la p=0,182;

d) nu impar(n) pentru n=0;

e) t și (p mod 3=0) la t=adevărat, p=101010;

e) (x*y<>0) și (y>x) cu x=2, y=1;

g) (x*y<>0) sau (y>x) când x=2, y=1;

h) a sau (nu b) cu a=Fals, b=Adevărat;

2. Scrieți în Pascal o relație care este adevărată dacă condiția specificată este îndeplinită și falsă în caz contrar:

a) întregul k este divizibil cu 7;

b) ecuația nu are rădăcini reale;

c) punctul (x, y) se află în afara cercului de rază R centrat în punctul (1,0);

d) numărul natural N este pătratul numărului natural;

e) x=max(x,y,z);

g) (nu utilizați operațiunea not)

h) cel puţin una dintre variabilele logice a şi b este adevărată;

i) ambele variabile logice a și b sunt adevărate.

3. Specificați ordinea în care sunt efectuate operațiunile la evaluarea expresiilor:

a) a și b sau nu c și d;

b) (x>=0) sau nu c și d.

4. Calculați următoarele expresii cu a=adevărat, b=fals:

a) a sau b și nu a;

b) (a sau b) și nu a;

c) nu a și b;

d) nu (a și b)

5. Scrieți o expresie în Pascal care este adevărată dacă condiția specificată este îndeplinită și falsă în caz contrar:

a) x aparține segmentului;

b) x se află în afara segmentului;

c) * x aparține segmentului sau [-1, 1];

d) * x se află în afara segmentelor și [-1, 1];

e) fiecare dintre numerele x, y, z este pozitiv;

g) niciunul dintre numerele x, y, z nu este pozitiv;

h) doar unul dintre numerele x, y, z este pozitiv;

i) variabila booleană a are valoarea Adevărat, variabila booleană b are valoarea Fals;

j) * un an cu un număr de serie y este un an bisect (un an este un an bisect dacă numărul său este un multiplu de 4, dar din multiplii de 100, numai multiplii de 400 sunt ani bisecti, de exemplu, 1700, 1800 și 1900 sunt ani non-bisecți, 2000 este un an bisect).

6. Desenați pe planul (x, y) aria în care și numai în care expresia specificată este adevărată:

a)* (y>=x) și (y+x>=0) și (y<=1);

b) (sqr(x)+sqr(y)<1) or (y>0) și (abs(x)<=1);

c) (trunc(y)=0 și (rotunzi(x)=0);

d)* (abs(x)<=1)>(abs(y)>=1);

e) (sqr(x)+sqr(y)<=4)=(y<=x).

7) Există un operator condiționat:

scrieln('ura!')

scrieți('rău...')

Este posibil să-l înlocuiți cu următoarele afirmații:

a) dacă d=10 b) dacă nu (d=10)

writeln („ura!’) writeln („ura!’)

writeln('rau...'); writeln('rau...');

c) dacă nu (d=10) d) dacă nu (d<>10)

writeln ('rău...') writeln ('rău...')

writeln('ura!'); writeln('ura!');

8) Care vor fi valorile variabilelor j, k după executarea instrucțiunii condiționate:

dacă valorile inițiale ale variabilelor sunt egale:

Notă. Ca urmare a afirmației dec (k,2), valoarea variabilei k este redusă cu 2.

. X aparține segmentului ;
X se află în afara segmentului;
X aparține segmentului sau [-1,1];
X se află în afara segmentului sau [-1,1].
3.
Explicați structura și regulile pentru executarea instrucțiunilor condiționate.
4.
Scrieți acțiunea specificată ca o singură instrucțiune condiționată:
cos
2
X, la 0x la =
1-păcat
2
X, in caz contrar.
5.
z
int z=0, x=1, y=

1;

80 Programarea algoritmilor liniari în sistem C++Builder
dacă (x>0) dacă (y>0) z=1; altfel z=2;
6.
Ce valoare va avea variabila z după executarea instrucțiunilor:
int z=0, x=

1,y=1;
dacă (x) ( dacă (y>0) z=1;) altfel z=2;
7.
Ce valoare va avea variabila z după executarea instrucțiunilor:
int z=0, x=0, y=1;
dacă (x) ( dacă (y>0) z=1;) altfel z=2;
8.
Ce valoare va avea variabila z după executarea instrucțiunilor:
int z=0, x=3, y=1;
dacă (x) ( dacă (y) z=1;) altfel z=2;
9.
Specificați erorile în următoarele afirmații:
dacă (1
elsex=0; y+= 1;
10.
int z=0, x=0, y=1;
dacă (!x) ( dacă (!(y

1)) z=1;) altfel z=2;
11.
Ce valoare va avea variabila z după executarea instrucțiunilor:
int z=0, x=1, y=1;
dacă (!x) ( dacă (!(y

1)) z=1;) altfel z=2;
12.
Găsiți erori în fragmentul de program:
(int n,x; comutator (k) caz + : x:=x-4 pauză; caz

-

,

*

, x=5;
}
Ce reguli sunt încălcate și cum pot fi corectate erorile?


81
3.4
Sarcini individuale pentru secțiunea 3
Fiecare elev trebuie să rezolve două probleme de primul și al doilea nivel de complexitate.
Sarcini de prim nivel de complexitate.
1.
Vi se oferă un număr întreg pozitiv de patru cifre. Scrieți un program care imprimă Adevărat sau falsîn funcție de îndeplinirea sau nu a condiției specificate: suma cifrelor 1 și 4 este egală cu produsul cifrei 2 și 3.
2.
Sunt date numere reale x, y. Dacă x și y sunt negative, atunci înlocuiți fiecare valoare cu modulul său; dacă doar unul dintre ele este negativ, atunci creșteți ambele valori cu 5,5; în alte cazuri, ambele valori ar trebui reduse de 10 ori.
3.
Sunt date numere reale x, y. Dacă x și y sunt pozitive, atunci scade fiecare valoare cu un factor de 5; dacă ambele valori sunt în intervalul [-3, 9], atunci ambele valori ar trebui înlocuite cu 0; în caz contrar, x și y cresc cu 3.
4.
Sunt date numere reale x, y (xy). Înlocuiți cel mai mic dintre aceste două numere cu jumătatea lor, iar pe cel mai mare cu produsul lor dublu.
5.
Dacă suma a trei numere reale distincte în perechi x, y, z este mai mică decât 1, atunci cel mai mic dintre aceste trei numere este înlocuit cu jumătatea sumei celorlalte două; în caz contrar, înlocuiți cel mai mic dintre x și y cu jumătate din suma celor două valori rămase.
6.
Sunt date numere reale a, b, c, d. În cazul în care un b>c>d, apoi lăsați numerele neschimbate; în caz contrar, înlocuiți toate numerele cu pătratele lor.
7.
Determinați dacă un întreg de șase cifre este norocos. (Un număr se numește norocos dacă suma primelor sale trei cifre este egală cu suma ultimelor trei cifre.)
8.
Adevărat sau falsîn funcție de îndeplinirea sau nu condiția specificată: pentru numere reale arbitrare a, b, c, determinați dacă ecuația ax
2
+bx+c=0 cel puțin o soluție reală.

82 Programarea algoritmilor liniari în sistem C++Builder
9.
Pentru a rezolva următoarea problemă, scrieți un program care se imprimă Adevărat sau falsîn funcție de îndeplinirea sau nu condiția specificată: pentru a determina dacă suma primelor două cifre ale unui număr dat de patru cifre este egală cu suma ultimelor două numere ale sale.
10.
Unele școli au următoarele politici de admitere. Solicitanții susțin două examene, care sunt notate conform
100 de puncte fiecare. Dacă solicitantul obține cel puțin 150 de puncte, atunci aceasta dă dreptul de a intra în departamentul de zi, de la 100 la 149 - în departamentul de seară; sub 100 de puncte înseamnă refuzul admiterii la studii. Scrieți un program care, în funcție de numărul de puncte obținute, să informeze solicitantul despre dreptul său de înscriere.
11.
Scrieți un program folosind operatorul de selecție, care vă permite să obțineți o descriere verbală a notelor. (1 - „rău”, 2 -
„nesatisfăcător”, 3 – „satisfăcător”, 4 – „bine”, 5 -
"Grozav".)
12.
Pentru a rezolva următoarea problemă, scrieți un program care se imprimă Adevărat sau falsîn funcție de îndeplinirea sau nu condiția specificată: pentru a determina dacă dintre cifrele unui număr dat de trei cifre sunt aceleași.
13.
Scrieți un program care imprimă Adevărat dacă data d1, m1 precede (în termen de un an) data d2, m2și sens fals in caz contrar.
14.
Scrieți un program folosind o instrucțiune select care afișează numele complet după prima literă a numelui.
(Ivan, Petru, Nikolai, Vladimir, George).
15.
Scrieți un program folosind operatorul de selecție, care, având în vedere cifra de intrare 0≤ k≤ 5 tipărește numele acestei figuri în rusă și engleză.
16.
Dat un număr întreg k (1

k

365). Stabiliți dacă a k-a zi a anului va fi un weekend sau o zi lucrătoare, dacă 1 ianuarie este luni.
17.
Dat un număr real X. calculati f, dacă:











păcat
,
1 0
,
0 5
2 11 2
cazuri
restul
în
X
X
X
la
X
X
X
la
f

Programare cu tablouri unidimensionale
83 18.
Dat un număr real X. Scrieți un program de calculat f:












34 5
,
12 3
lg ln
,
3 5
1 3
2 4
cazuri
restul
în
X
X
X
la
X
X
X
la
f
19.
Scrieți un program folosind un operator de selectare care, după prima literă a numelui orașului, afișează numele orașului în întregime (Kursk, Moscova, Tula, Novgorod, Voronezh).
20.
Scrieți un program folosind o declarație select care afișează numele complet după prima literă a numelui de familie (Ivanov, Petrov, Sidorov, Myshkin, Shishkin).
21.
Având în vedere coordonatele centrului și raza cercului. Determinați dacă un anumit punct cu coordonatele (x,y) aparține cercului.
22.
Scrieți un program folosind o declarație select care va tipări numele complet al animalului (câine, pisică, girafă, cal, maimuță) având în vedere prima literă a numelui animalului.
23.
Date trei numere distincte a,b,c. Sortați aceste numere în ordine crescătoare astfel încât A corespundea celui mai mic numar, b- număr mediu, c- cel mai mare.
24.
Scrieți un program folosind o instrucțiune select care, prin număr (de la 1 la 7), afișează numele zilei săptămânii.
25.
Scrieți un program folosind o instrucțiune select care, prin număr (de la 1 la 12), afișează numele lunii din an.
26.
Scrieți un program folosind o declarație selectă care, având în vedere prima literă a numelui anotimpului anului, imprimă numele complet al anotimpului anului.
27.
Vi se oferă un număr întreg pozitiv de cinci cifre. Scrieți un program care imprimă Adevărat sau falsîn funcție de îndeplinirea sau nu condiția specificată: suma cifrelor 1, 3 și 5 este mai mare decât produsul cifrei 2 și 4.
28.
Vi se oferă un număr întreg pozitiv de patru cifre. Scrieți un program care imprimă Adevărat sau fals depinde de vreme

84 Programarea algoritmilor liniari în sistem C++Builder indiferent dacă este sau nu îndeplinită condiția specificată: media aritmetică 1 și
4 cifre este mai mult decât suma a 2 și 3 cifre.
29.
Se dă o cifră și un număr de trei cifre în notație zecimală. Dacă cifra se potrivește cu cea mai mare cifră a numărului, atunci calculați suma cifrelor numărului. Dacă cifra se potrivește cu cifra din mijloc a numărului, atunci calculați produsul cifrelor numărului. Dacă cifra se potrivește cu cea mai puțin semnificativă cifră a numărului, atunci calculați media aritmetică a cifrelor numărului. Dacă niciuna dintre condiții nu este îndeplinită, atunci calculați media geometrică a cifrelor numărului.
30.
Se dă o cifră și un număr de trei cifre în notație zecimală. Dacă cifra se potrivește cu cea mai mare cifră a numărului, atunci calculați media aritmetică a cifrelor numărului. Dacă cifra coincide cu cifra din mijloc a numărului, atunci calculați media geometrică a cifrelor numărului. Dacă cifra se potrivește cu cea mai puțin semnificativă cifră a numărului, atunci calculați suma cifrelor numărului. Dacă niciuna dintre condiții nu este îndeplinită, atunci calculați produsul cifrelor numărului
Sarcini de al doilea nivel de complexitate.
1.
Dat un număr întreg pozitiv de două cifre în sistemul de numere ternar. Scrieți un program care afișează numele cifrelor unui număr în limba rusă, dacă cea mai mare cifră a numărului este mai mare decât cea mai mică, în caz contrar
- în limba engleză.
2.
Dat un număr întreg pozitiv de două cifre în sistemul numeric de cinci cifre. Scrieți un program care să afișeze numele cifrelor unui număr în engleză, dacă cea mai mare cifră a numărului este mai mare decât cea mai mică, în caz contrar
- in rusa.
3.
Dat un număr întreg pozitiv de două cifre în sistemul numeric de cinci cifre. Scrieți un program care tipărește numele cifrelor unui număr în engleză dacă cea mai mare cifră a numărului este exact de 2 ori cea mai mică cifră, în caz contrar
- in rusa.
4.
Dat un număr întreg pozitiv de două cifre în sistemul de numere ternar. Scrieți un program care afișează numele cifrelor unui număr în limba rusă, dacă cea mai mare cifră a numărului este mai mică decât cea mai mică, în caz contrar
- în limba engleză.

Programare cu tablouri unidimensionale
85 5.
Dat un număr întreg pozitiv de două cifre în sistemul numeric de cinci cifre. Scrieți un program care afișează numele cifrelor unui număr în limba rusă.
6.
Dat un număr întreg pozitiv de două cifre în sistemul de numere octale. Scrieți un program care afișează numele cifrelor unui număr în limba rusă.
7.
Dat un număr întreg pozitiv de două cifre în sistemul de numere octale. Scrieți un program care să afișeze, dacă cea mai mare cifră este mai mică de jumătate din cifra cea mai mică, numele cifrelor numărului în limba engleză, în caz contrar

in rusa.
8.
Dat un număr întreg pozitiv de două cifre în sistemul de numere septimal. Scrieți un program care să afișeze, dacă cifrele sunt în ordine descrescătoare, numele cifrelor numărului în limba engleză, în caz contrar

in rusa.
9.
Vi se oferă două cifre în sistemul numeric zecimal. Scrieți un program care să afișeze numele în engleză ale cifrelor sumei acestor cifre.
10.
Vi se oferă două cifre în sistemul numeric zecimal. Scrieți un program care afișează numele în rusă ale cifrelor produsului acestor cifre.
11.
Vi se oferă două cifre în sistemul numeric zecimal. Scrieți un program care afișează numele în rusă al cifrei modulului diferenței acestor cifre.
12.
Vi se oferă două cifre în sistemul numeric zecimal. Scrieți un program care să afișeze numele cifrelor în engleză ale coeficientului și restul împărțirii întregi a acestor numere.
13.
Dat un număr întreg pozitiv de două cifre în sistemul numeric zecimal. Scrieți un program care să afișeze, dacă cea mai mare cifră este de trei ori cea mai mică, numele cifrelor numărului în engleză, în caz contrar

in rusa.
14.
Dat un număr întreg pozitiv de două cifre în sistemul numeric zecimal. Scrieți un program care imprimă numele cifrei unui număr care are o valoare mai mare în engleză și numele cifrei unui număr care are o valoare mai mică,

in rusa.

86 Programarea algoritmilor liniari în sistem C++Builder
15.
Dat un număr întreg pozitiv de două cifre în sistemul de numere septimal. Scrieți un program care imprimă numele cifrei unui număr care are o valoare mai mare în engleză și numele cifrei unui număr care are o valoare mai mică,

in rusa.
16.
Dat un număr întreg pozitiv de două cifre în sistemul numeric hexazecimal. Scrieți un program care să afișeze numele cifrelor unui număr în limba engleză.
17.
Date două numere întregi de două cifre pozitive în sistemul de numere ternar. Scrieți un program care afișează numele cifrelor sumei acestor numere în rusă.
18.
Sunt date două numere întregi pozitive din două cifre în sistemul de numere binar. Scrieți un program care să afișeze numele cifrelor sumei acestor numere în limba engleză.
19.
Dat un număr întreg pozitiv de două cifre în sistemul numeric de cinci cifre. Scrieți un program care să afișeze, dacă cifrele sunt în ordine crescătoare, numele cifrelor numărului în limba engleză, în caz contrar

in rusa.
20.
Dat un număr întreg pozitiv de două cifre în sistemul numeric hexazecimal. Scrieți un program care afișează, dacă cea mai mare cifră este de cinci ori mai mică, numele cifrelor numărului în rusă, altfel

în limba engleză.
21.
În sistemul de numere octale sunt date două cifre. Scrieți un program care afișează numele în rusă ale cifrelor modulului diferenței acestor cifre.
22.
În sistemul de numere octale sunt date două cifre. Scrieți un program care afișează numele în rusă ale cifrelor sumei acestor două cifre.
23.
Dat un număr întreg pozitiv de două cifre în sistemul de numere septimal. Scrieți un program care afișează, dacă cea mai mare cifră este de trei ori mai mică, numele cifrelor numărului în rusă, în caz contrar

în limba engleză.
24.
Dat un număr întreg pozitiv de două cifre în sistemul de numere octale. Scrieți un program care să afișeze numele cifrei unui număr care are o valoare mai mare în rusă și în

Programare cu tablouri unidimensionale
87 rangul cifrei numărului care are cea mai mică valoare,

în limba engleză.
25.
Dat un număr întreg pozitiv de două cifre în sistemul de numere septimal. Scrieți un program care imprimă numele cifrelor unui număr care are o valoare mai mică de 4 în rusă și numele cifrelor numărului care are o valoare mai mare sau egală cu 4,

în limba engleză.
26.
Dat un număr întreg pozitiv de două cifre în sistemul numeric hexazecimal. Scrieți un program care afișează numele cifrelor unui număr care are o valoare mai mică de 3 în rusă și numele cifrelor unui număr care are o valoare mai mare sau egală cu 3,

în limba engleză.
27.
Având în vedere primele două litere (insensibile la majuscule, atât litere mici, cât și litere mari) ale numelui lunii anului. Scrieți un program care să afișeze numele complet al lunii din an în limba rusă.
28.
Având în vedere primele două litere (insensibile la majuscule, atât litere mici, cât și litere mari) ale numelui zilei săptămânii. Scrieți un program care să afișeze numele complet al zilei săptămânii în limba rusă.
29.
În vechiul calendar japonez, a fost adoptat un ciclu de 60 de ani, constând din cinci subcicluri de 12 ani. Subciclurile au fost desemnate prin nume de culori: verde, roșu, galben, alb și negru. În cadrul fiecărui subciclu, anii au fost numiți după animale: șobolani, vaci, tigri, iepuri de câmp, dragoni, șerpi, cai, oi, maimuțe, găini, câini și porci (1984 - anul șobolanului verde - a fost începutul ciclul următor). Scrieți un program care introduce numărul unui anumit an al erei noastre și imprimă numele acestuia conform vechiului calendar japonez.
30.
Dat un număr întreg pozitiv de două cifre în sistemul numeric zecimal. Scrieți un program care afișează numele cifrelor unui număr care are o valoare mai mare de 5 în rusă și numele cifrelor unui număr care are o valoare mai mică sau egală cu 5,

în limba engleză.

88 Programarea algoritmilor liniari în sistem C++Builder
4 PROGRAMAREA CICLICULUI
ALGORITMI ÎN SISTEMUL C++ BUILDER
În această secțiune se efectuează studiul operatorilor de buclă de limbaj.
C++, dobândirea de competențe în programarea algoritmilor ciclici, introducerea
Da, programe de compilare și depanare.
4.1
Noțiuni de bază
Pe limbă C++Builder Există trei instrucțiuni de buclă:
1.
Buclă cu precondiție ( in timp ce);
2.
Bucla cu postcondiție ( do);
3.
Bucla cu contor ( pentru).
Declarație buclă cu precondiție in timp ce (Figura 4.1):
in timp ce(condiție) (corp buclă)
Figura 4.1

Schema algoritmului operatorului de buclă in timp ce
Dacă rezultatul evaluării stării este Adevărat(adevărat), apoi corpul buclei este executat și trecerea la verificarea condiției este efectuată din nou. Dacă rezultatul evaluării stării este fals(fals), apoi bucla iese și sare la instrucțiunea care urmează instrucțiunii ciclice in timp ce.
Dacă, înainte de prima execuție a buclei, valoarea expresiei a fost fals, corpul buclei nu este executat deloc și are loc trecerea la instrucțiunea următoare.
Condiție
Corpul buclei
da
Nu

Programare cu tablouri unidimensionale
89
Exemplu:
Calculați suma numerelor impare între 1 și 10.
( int k=1, s=0; în timp ce (k ( s+=k; k+=2;
}
}
Declarație buclă cu postcondiție do (Figura 4.2):
do(corp buclă) in timp ce(condiție); da nicio conditie
Corpul buclei
Figura 4.2

Schema algoritmului operatorului de buclă face în timp ce
Condiția este o expresie de tip boolean, corpul buclei este o instrucțiune simplă sau compusă.
Corpul buclei declarației

Variabilele de tip boolean sunt descrise printr-un identificator boolean . Ele pot lua doar două valori - Fals (Fals)și Adevărat (Adevărat). Ele sunt, de asemenea, descrise în secțiunea de declarare a variabilelor. Var<имя>: boolean;

Expresiile booleene pot include:

n booleeni,

n operațiuni de relație (<- меньше, >- Mai mult,<=- меньше или равно, >=- mai mare sau egal,<>- nu este egal, = - egal).

n operații logice Și, Sau, Nu

n dif. acțiuni și funcții


Turbo Pascal are operații logice care pot fi aplicate variabilelor de tip boolean. Acestea nu sunt operațiuni și, sau și xor.

Operațiune nu(nu) are un operand și își formează negația logică. Rezultatul operației not este False dacă operandul este adevărat și True dacă operandul este fals. Deci, nu Adevărat Fals (neadevărat este o minciună) nu Fals Adevărat (non-fals este adevărat).

Rezultatul operațiunii și(i) este adevărat numai dacă ambii operanzi ai săi sunt adevărati și fals în toate celelalte cazuri (înmulțire booleană).

Rezultatul operațiunii sau(sau) este adevărat dacă oricare dintre operanzii săi este adevărat și fals numai dacă ambii operanzi sunt falși (adunare logică).

Operațiile logice, relaționale și aritmetice apar adesea în aceeași expresie. În acest caz, relațiile la stânga și la dreapta semnului operației logice trebuie incluse între paranteze, deoarece operațiile logice au prioritate mai mare. În general, se adoptă următoarea prioritate a operațiunilor:

2. și, *, /, div, mod

3. sau, +, -

4. operațiuni de relație (<- меньше, >- Mai mult,<=- меньше или равно, >=- mai mare sau egal,<>- nu este egal, = - egal).

În plus, ordinea operațiilor poate fi modificată prin paranteze. De exemplu, într-o expresie logică, aranjam ordinea acțiunilor:

AorBandnot(AorB)


Operatorul sau parantezat este executat mai întâi, urmat de operatorii not, and, or. Dacă înlocuim valorile True și False în loc de variabilele A și B, atunci, folosind procedura deja luată în considerare, obținem valoarea întregii expresii egală cu True.

Exercițiul 5: . Scrieți într-un caiet și calculați valorile expresiilor

cu a=10, b=20, c=adevărat, d=fals: A)(a>5) și (b>5) și (a<20) and (b<30);

b) nu (a<15) or not (b<30);

c) c sau d și (b=20).

Atenţie ! În Pascal, nu există nicio modalitate de a introduce date booleene folosind instrucțiunea read. Cu toate acestea, ieșirea valorilor variabilelor de tip boolean este furnizată folosind operatorul de scriere. de exemplu, după executarea operatorului de scriere (5>2), pe ecran va fi afișat True.

Întrebări și sarcini de acasă:

1. Cum este descrisă o variabilă booleană și ce valori poate lua?

2. Ce poate fi inclus în expresiile logice. Dați exemple de expresii logice simple.

3. Vorbește-ne despre operațiile logice în Pascal. Dați exemple de expresii logice compuse.

4. Care este prioritatea diferitelor operațiuni în Pascal. Dă un exemplu.


Sarcini:

№19.

A. întregul k este divizibil cu 7;

C. Cel puțin unul dintre numerele întregi x, y este par;

G. x=max(x, y, z), adică x este cel mai mare dintre cele trei numere x, y, z;

D. (nu utilizați nu operațiune)

E. cel puţin una dintre variabilele logice a şi b este adevărată;

G. Variabilele booleene a și b sunt ambele adevărate.

№20. Specificați ordinea în care sunt efectuate operațiile la evaluarea expresiilor:

A) a și b sau nu c și d; b) (x>=0) sau nu c și d.

№21. Evaluați următoarele expresii cu a=adevărat, b=fals:

A) a sau b și nu a; b)(a sau b) și nu a; în) nu a și b; G) nu (a și b)

№22. Realizați un program: La examenele de admitere, solicitantul a promovat fizică, informatică, compoziție. Un solicitant va intra dacă primește 5 la informatică și obțin minimum 13 puncte la trei examene.Este adevărat că a intrat (tipărește Adevărat / Fals)?

§ 8. Rezolvarea problemelor pe tema „Programe liniare. cantități booleene.”

Ex. 7 . Calculați valorile expresiei:

a) sqr(x)+sqr(y)<=4 при x=0.3, y=-1.6;

b) k mod 7 = k div5-1 la k=15;

c) impar(trunc(10*p)) la p=0,182;

d) nu impar(n) pentru n=0;

e) t și (p mod 3=0) la t=adevărat, p=101010;

e) (x*y<>0) și (y>x) cu x=2, y=1;

g) (x*y<>0) sau (y>x) când x=2, y=1;

h) a sau (nu b) cu a=Fals, b=Adevărat;

Ex. opt. Scrieți o expresie în Pascal care este adevărată dacă condiția specificată este îndeplinită și falsă în caz contrar:

a) x aparține segmentului;

b) x se află în afara segmentului;

c) * x aparține segmentului sau [-1, 1];

d) * x se află în afara segmentelor și [-1, 1];

e) fiecare dintre numerele x, y, z este pozitiv;

g) niciunul dintre numerele x, y, z nu este pozitiv;

h) doar unul dintre numerele x, y, z este pozitiv;

i) variabila booleană a are valoarea Adevărat, variabila booleană b are valoarea Fals;


j) * un an cu un număr de serie y este un an bisect (un an este un an bisect dacă numărul său este un multiplu de 4, dar din multiplii de 100, numai multiplii de 400 sunt ani bisecti, de exemplu, 1700, 1800 și 1900 sunt ani non-bisecți, 2000 este un an bisect).

Ex. nouă . Desenați pe planul (x, y) o zonă în care și numai în care expresia specificată este adevărată:

a)* (y>=x) și (y+x>=0) și (y<=1);

b) (sqr(x)+sqr(y)<1) or (y>0) și (abs(x)<=1);

c) (trunc(y)=0 și (rotunzi(x)=0);

d)* (abs(x)<=1)>(abs(y)>=1);

e) (sqr(x)+sqr(y)<=4)=(y<=x).

Ex. zece ..Cartea costă X ruble. Cumpărătorul are bancnote în valori de 50, 10, 5, 1 ruble. Câte și ce bancnote trebuie să luați pentru a plăti cartea cu numărul minim de bancnote?