Példák Pascal összetett feltételes utasításaira. Pascal operátorok. Pascal programozási nyelv. Nem, vagy inverzió

Valószínűleg minden diák ismeri a "Pascal" programozási nyelvet. Mit képvisel? Régen adott nyelv halott lett, mert csak az iskolákban használják a diákok tanítására és az alapnak számít. Az Algol nyelv egyszerűsített változatára utal. De az utóbbival ellentétben a "Pascal" valódi programok, sőt játékok írására is használható. Korábban kellő népszerűségnek örvendett, de mára már csak oktatási célokra őrizték meg. Az első dolog, ami vonzza a potenciális programozókat a Pascalhoz, az a képesség, hogy a tulajdonságok megőrzése mellett írnak az angol nyelvből, és nem a speciális sémák használatán, amelyek olyan nyelveken elfogadottak, mint a C.

Az operátor egy szimbólum, amely bizonyos matematikai vagy logikai manipulációk végrehajtására utasítja a fordítót. A Pascal a következő típusú operátorok használatát teszi lehetővé. Aritmetikai operátorok Relációs operátorok Boole-operátorok Bit-operátorok Operátor-operátorok Karakterlánc-operátorok. Beszéljük meg egyenként az aritmetikai, relációs, logikai és bitenkénti operátorokat.

Mindezek az operátorok logikai operandusokon működnek, és logikai eredményeket adnak. A bitenkénti operátorok biteken dolgoznak, és bitenkénti műveleteket hajtanak végre. Mindezek az operátorok egész számú operanduson dolgoznak, és egész számú eredményeket adnak. A bitenkénti és bitenkénti vagy bitenkénti igazságtáblázat nem a következő.

A Pascalt Niklaus Wirth hozta létre 1970-ben. A nyelv nevét a tudósról kapta, aki a világ első gépének atyja lett. Két különböző számot tudott hozzáadni. A Pascal nyelv közvetlen leszármazottja a Modula-2. Ez utóbbi egy továbbfejlesztett változat.

Programozási rendszer

A Pascal ABC egy programozási nyelv, amelyet egy már létező rendszer képvisel. A leírt azonban egy új generációs változat.

Operátori elsőbbség Pascalban

Az operátori prioritás határozza meg a kifejezések csoportosítását. Ez befolyásolja a kifejezés értékelését. Egyes operátorok magasabb prioritásúak, mint mások; például a szorzó operátornak nagyobb a prioritása, mint az összeadás operátornak. Itt a legmagasabb prioritású operátorok a táblázat tetején, míg a legalacsonyabb prioritású operátorok a táblázat alján jelennek meg. Egy kifejezésen belül a magasabb prioritású operátorok kerülnek kiértékelésre először.

Az ember gyakran találkozik a következővel: mi lesz, ha elkészül? A szintaxis elég egyértelmű: egy logikai kifejezés lehet összehasonlítás, de lehet logikai érték is: vagy logikai kifejezés. Az egyik esetben "Eredmény = 0", a másik esetben pedig "Eredmény0". A 0-val nem egyenlő érték nem feltétlenül lehet 1 vagy -1! A "hamis"-val való összehasonlítás felesleges, de nem vezet a program hibás viselkedéséhez. Írjunk egy függvényt, amely kiolvas egy egész számot egy karakterláncból, és beállít egy hibaváltozót, ha a karakterlánc nem tartalmaz érvényes számot.

  • hurok paraméterrel;
  • ismétlődő.

Mit jelképez mindegyik? Az első (paraméteres hurok) mindig ismert paraméterekkel rendelkezik. Néha rendszeresnek is nevezik. A fő különbség az, hogy a ciklus iterációinak száma ismert, mielőtt elindulna.

Az iteratív változatban ilyen árnyalat nem ismert. A ciklus addig fut, amíg a feltétel nem teljesül.

Ehhez a jó öreg "Val"-t használjuk – mert nem kell tartanunk a kivételektől, és időt és energiát takarítunk meg. A kód 0-t tartalmaz, ha az átalakítás lehetséges volt, vagy a hiba helye a karakterláncban. Ez azt eredményezi, hogy a logikai változó sorszáma 0 vagy 0.

Nem, vagy inverzió

Használjuk helytelenül ezt a függvényt. Ha most mindezt így fogjuk nevezni: egymás után kapjuk az üzeneteket. Egy kicsit szőrös példa nem túl jó. Logikai kifejezések kiértékelése. A logikai kifejezéseknél természetesen előfordulhat, hogy az eredményt idő előtt rögzítik. A logikai kifejezések lerövidített értékelése azonban egy másik gonosz esethez vezet. ez nagyon veszélyes dolog. Ha a fordító beállítására hagyatkozik, akkor marad, és akkor kap Visszacsatolás a felhasználótól, hogy minden "néha" rosszul történik.

Néhány struktúra segítségével megkülönböztetheti a ciklusok típusait és típusait:

  • REPEAT: ismétlés utófeltétellel.
  • WHILE: ismételje meg előfeltétellel.
  • FOR - számlavezető. Paraméteres ciklusban használatos.

Az első két lehetőség az iteratív ismétléshez használatos. Legfőbb különbségük az utolsó kijelentéshez képest, hogy FOR-ban használhatók, de paraméter nélküli ismétléseknél ez lehetetlen.

Tehát a probléma így is megoldható. Egy kiértékelés beágyazható egy függvénybe. A rövidített értékelés értelme és értelmetlensége. A fenti példában az összehajtott pontszám hasznosnak tűnik. De mi van akkor, ha több függvényt hívunk meg, és mindegyik mást csinál?

Példa. Számítsa ki a téglatest terét! Ha minden értéket helyesen adott meg, az eredménymező a szoba tartalmára lesz beállítva. Felirat: = "Hiba!". Eredmény. Ha engedélyeztük a rövidzárlatot, csak az első hibát jelezzük. Az értékelés befejeztével minden hibát jelentenek.

I/O nyilatkozatok

A programozási környezet interakciójához környezet Az I/O operátorok válaszolnak. Lehetővé teszik az információk bevitelét és az eredmény megjelenítését a képernyőn vagy a nyomtatásban. A read parancs lehetővé teszi a felhasználó számára, hogy beírja adatait a futó programba. Hogyan történik ez? A program egy időre leáll, a képernyőn megjelenik egy villogó kurzor, aki egy személy bevitelére vár. Kevés különbség van a két read és readln utasítás működésében. Ez utóbbi egyszerűen a következő sorra mozgatja a kurzort.

Szabványos logikai függvények

Az alkalmazás egy komplett projektet tartalmaz, mindkét verzió egyidejű értékelésével. Számos mezőben láthatja a különbséget a beviteli hibák között. Ergonómiából a bal oldali oszlop viselkedését kell használni. Ha nem akarsz fordítani, letöltheted a gyíkot is.

Minden a lehető legegyszerűbb – ez csak egy elv, amelyet meg kell mutatni. Aki természetesen követi az "Összeállítja, mi tudjuk szállítani" mottót, az esélytelen. Ebben a fejezetben az ágakat nézzük meg. A cél a programozási folyamat szabályozása feltételekkel.

A kimeneti operátor ("Pascal") a write(ln). Az LN részecske lehetővé teszi, hogy a következő sorban folytassa az adatok kimenetét. Ha egyszerűen megad egy operátort a programban, akkor egy üres kifejezés jelenik meg. Ebben az értelemben nem szükséges ezt a parancsot használni.

Vannak var és close operátorok is. Nem használhatja őket, ha maga a program nem igényli.

Eddig a számítógép minden bemenetre ugyanúgy reagált. Ehhez szükségünk van egy úgynevezett „kérésre”. A számítógép ellenőrzi, hogy konkrét eset igaz vagy hamis. A feltétel összehasonlítások vagy egyetlen igazságérték kombinációja. Először is az összehasonlításoknak szeretnénk szentelni magunkat.

De először nézzünk egy példát, mielőtt a hivatkozásokhoz érnénk. Lássuk, Hugo kimondja-e a nevét. A keresztnév nem vonatkozik aposztrófokra, mivel ez egy változó neve. Azonban a Hugo az az érték, amellyel a változót össze kell hasonlítani, ezért itt az aposztrófok szükségesek. Az egész program most így néz ki.


A fő operátorok ("Pascal") leírása a cikkben található. Segítenek jobb programot írni, de maguk is elég gyorsan és hiba nélkül működnek. Nélkülük semmi sem fog sikerülni a leendő programozónak, amikor a Pascal nyelvvel dolgozik. Sajnos a programok operátorok nélkül elképzelhetetlenek. Tehát tudniuk kell működni. A hurokutasítások bonyolultnak tűnhetnek, de gyakorlással minden probléma eltűnik. Sok sikert a munkádhoz!

Ehhez egy kicsit kibővítjük a szintaxisunkat. Tehát a kiterjesztett programunk most valahogy így néz ki. Ez a változó most újra használható a lekérdezésekben. Ezért a logikai változók esetében nincs szükség összehasonlításra, mivel ezek már valódi értékek.

Ha most egyszerre több feltételt kérünk, akkor több kérést is be lehet állítani. Itt azonban több probléma is felmerül. Összetett lekérdezések esetén ez nagyon zavaró. . E problémák megoldása érdekében két kérést szeretnénk átalakítani egybe. Mindössze annyit kell tennünk, hogy az összehasonlító zárójeleket és és azok közé helyezzük. És nem ez az egyetlen operátor.

Sok Pascal programban vannak olyan helyzetek, amikor egy bizonyos feltétel alapján számos utasítás végrehajtásra kerül vagy nem.

Ezeket a feltételeket igaz vagy hamis állításként definiáljuk (IGAZ, HAMIS). Például:

X>3("x nagyobb, mint 3"), ahol az "x" egy egész változó. Ha „x”-et különböző értékekkel helyettesítünk, azt kapjuk, hogy az állítás igaz (TRUE) vagy hamis (FALSE). Tegyük fel, hogy "x" egyenlő 4-gyel.

Ha a kéréseket másképp lehet kezelni, ha a kérések gyorsan összekeveredhetnek. Ezekkel egy változó értékét csak egyszer kéri le, majd a program közvetlenül a megfelelő értékhez ugrik a végrehajtandó helyre.

Az esetkérelem a következőképpen épül fel. Ha ugyanazokat a műveleteket kell végrehajtani különböző értékeket, ezek az értékek vesszővel választhatók el. Az űrlapértékben a teljes értéktartományt is megadhatja. Megjegyzendő azonban, hogy egy változónak csak egy értéke kerül kiértékelésre.

4>3 Egyértelmű, hogy a négy nagyobb, mint a három, ami azt jelenti, hogy az állítás igaz (IGAZ). Ha az "x" változó értéke 2, akkor a kifejezés a következőre változik

2>3 Ami persze hamis (HAMIS). Ugyanez történik "x=3" esetén is (a 3>3 hamis).

Nézzük a programot:

(1) program booldemo; (2) var (3) x:integer; (4) b: logikai érték; (5) kezdődik (6) x:=4; (7) b:= x>3; (8) writeln(b); (9) b:= x Program kimenet: TRUE FALSE HAMIS

Nagyon gyakran a kért adattípus karakterlánc nem használható az esetben. A program ismét felszólítja, hogy lépjen be, és ezúttal egy karaktert várjon. Így kérés esetén kezelheti az ilyen változókat. Az utolsó bejegyzésben magáról a kiválasztási struktúráról volt szó. Egy másik széles körben használt kiválasztási struktúra a kommutátor.

Egy kapcsoló segítségével összevetjük egy változó tartalmát néhány konstanssal, és így választjuk ki, hogy melyik kódrészletet hajtsa végre az alkalmazásunk. Nem sokkal ezután a szintaxis részleteiről fogunk beszélni. Vannak érdekes funkcióink, amelyekről ebben a kódrészletben lehet szó. Ezután meghatározzuk az összehasonlításokat.

sorok 1-3 már ismerjük, de a 4. sor egy új "boolean" típusú változót jelöl. Egy ilyen típusú változó csak 2 értéket vehet fel - TRUE, FALSE. Ezenkívül egy ilyen típusú változó bizonyos értékeket vehet fel, attól függően, hogy milyen kifejezéssel van társítva. Vagyis írhat b:=true vagy írhat b:=2>1 és még b:=3-1>5-4 is. Ezekben az esetekben a változó értéke "TRUE" lesz.

Ennek az állandónak nem kell egész számnak lennie. Lehet karakter, lebegőpontos stb. A konstans után hozzáadjuk: azt jelzi, hogy az ennek a megoldásnak megfelelő kódrészlet kezdődik. A kettőspont után kinyitjuk a kulcsokat, vagy nem. Ritkán látni, hogy ki csinálja, de ez mindenkinek az íze. Vannak, akik ezt szervezési kérdésként részesítik előnyben, de semmi olyat, amit a jól végrehajtott behúzás megoldana. Mindenesetre használja vagy ne billentyűket a kódrészlet meghatározásához.

Példánk esetében növeljük a megfelelő változókat, szimulálva, hogy mindegyik egy adott jelöltet képvisel majd a választáson. Amikor eset-összehasonlítást definiál, valójában a struktúra "jelölését" határozza meg. Futtatásakor a program ezeken a meghatározott címkéken belül keres, amíg nem talál egy összehasonlítást, amely kielégíti a változó aktuális tartalmát.

A 6. sorban az "x" változóhoz 4-es érték tartozik.

A 7. sorban a "b" logikai változóhoz az "X>3" feltétel értéke van hozzárendelve, azaz IGAZ (végül is a 6. sor után x egyenlő 4-gyel).

A 8. sor ezt az értéket írja ki.

A 9-10 és 11-12 sorban az "x" feltételek értékei ugyanahhoz a változóhoz vannak rendelve. Ezután a feltételekről fogok beszélni. A feltételek a következő operátorokat használják:

A címkék csak „jelölők”, vagyis szünetre van szükségünk, hogy figyelmeztessük, hogy a „blokk” bezárult. Kedvezőbb helyzetekben ki fogjuk használni, és jobban fogunk mutatni. Ha nem teszünk semmit, ha a változó egyik tesztesetnek sem egyezik, akkor elhagyhatjuk az alapértelmezett kódrészletet, vagy üresen hagyhatjuk.

Ebben a részben egy nagyon érdekes módszert mutatunk be a változók növelésére. Amikor beírunk egy változónevet, amelyet követ, csak vesszük az értéket, és hozzáadjuk. Ugyanezt tehetjük, hogy csökkentsük a -. Lehet, hogy már látta ezeket a növekedéseket és csökkentéseket egy változónév előtt és után.

A "not" operátor egy kifejezés vagy logikai változó elé kerül. Megváltoztatja egy változó vagy kifejezés értékét IGAZ-ról FALSE-ra, vagy fordítva.

Az "and", "or", "xor" operátorok két kifejezés (logikai változó) közé helyezkednek el. Az „és”-t tartalmazó kifejezések csak akkor „IGAZ”-ra számítanak, ha mindkét kifejezés (jobb és bal) értéke „IGAZ”, ellenkező esetben „FALSE”. Egy vagy kifejezés kiértékelése "IGAZ", ha legalább az egyik "alkifejezés" értéke "IGAZ". Az "xor" kifejezést "TRUE" értékre értékeli, ha csak az egyik részkifejezés értéke "IGAZ"

Mi a különbség a két forma között? Ha a növekmény a változó neve előtt van, akkor a növekmény azelőtt kerül végrehajtásra, hogy a változó értékét felhasználnánk a kifejezésben. Ha később, akkor később is felhasználják. Egyszerű, de odafigyelést igényel egyik vagy másik forma használatakor.

Amint az a következő példákban látható, szerkezete nagyon hasonló a megfelelő Pascal-belihez. Röviddel ezután rendelkezésünkre állnak az újrapróbálkozási blokkot meghatározó nyilvános kulcsok. Ha az ismétlődő blokk csak egy parancsot tartalmaz, akkor a billentyűket elhagyhatja.

A fennmaradó operátorok azonos típusú értékek/változók közé kerülnek.

A zárójelek is megengedettek bizonyos feltételek mellett. Az 1-től 4-ig tartó operátorok a legmagasabb prioritásúak, ezt követi az összes többi.

Íme az eredmények táblázata logikai műveletek"a" és "b" változókkal ("a", "b" logikai típusúak).

a b a és b a vagy b a xor b
IGAZIGAZIGAZIGAZHAMIS
IGAZHAMISHAMISIGAZIGAZ
HAMISIGAZHAMISIGAZIGAZ
HAMISHAMISHAMISHAMISHAMIS

És itt van egy program, amely a fentieket szemlélteti.

Ez az állítás nem tesz mást, mint hozzáad az utána lévő változó aktuális értékéhez. Ugyanez megtehető más operátorokkal is. Egy másik használt ismétlődő struktúra a do while. Nos, a szintaxis meglehetősen egyszerű, és hasonló a korábban bemutatotthoz. Kezdjük egy kulcsszóval és a billentyűk között meghatározott kódblokkkal. Az egyetlen részlet az, hogy a feltétel után pontosvesszőt kell használni.

Pascalban a feltétel „kevesebb, mint 200” volt. Az ismétlési ciklus szerkezete viszonylag eltér a Pascalban láthatótól. Hamarosan elmondhatjuk, hogy szerkezete eltér Pascal nyelvétől. Magyarázzuk el, hogyan működik. Ha érti, három felosztás van zárójelben.

(1) program bemutató; (2) var a,b:boolean; (3) begin (4) a:=not((1) A program TRUE értéket ad ki.

Nem a teljes programot elemzem, hanem a benne használt kifejezéseket adok elemzést.

Kezdjük a 4. sorral: not((1 not(TRUE xor FLASE) -> not(TRUE) -> FALSE

5. sor: a vagy (2+1=3) -> HAMIS vagy (3=3) -> HAMIS vagy IGAZ -> IGAZ

6. sor: (b xor a)and(not(a or FALSE)) -> (TRUE xor FALSE)and(not(FALSE or FALSE)) -> TRUE and not(FLASE) -> TRUE and TRUE -> TRUE

Itt az ideje, hogy a feltételes állításokról beszéljünk. Feltételes kijelentések olyan utasítások, amelyek segítségével befolyásolhatjuk a program végrehajtásának sorrendjét. Íme az első:

Az első rész jelzi, hogy mit kell tenni a munka megkezdése előtt. A kódblokk végrehajtása előtt ellenőrzi ezt a feltételt. Mindig ügyelnünk kell ezekre a feltételekre, nem csak közben, hanem időben és időben is, hogy elkerüljük, hogy programunk egy végtelen ciklusban legyen, és soha ne fejezze be a végrehajtását. Tehát legyen óvatos a programozás során! Ez az, amire szüksége van és szüksége van. Ezen "paraméterek" meghatározása után van egy kódblokk, amely végrehajtásra kerül. A fenti esetben van egy beolvasott utasításunk egy vektorra.

Vagyis ha deklarálunk egy vektort. Ha 10, akkor a pozíció beolvasása nélkül fejezi be a végrehajtást. Ha ennek a vektornak a 10 pozícióval deklarált 10. pozícióját próbáljuk elérni, memóriahibát kapunk. Szóval még egy tipp nektek 😉. A Booleanokat Mr. Boole találta ki, hogy olyan alapvető függvényeket hozzon létre, amelyek más funkciókkal együtt nagymértékben bonyolíthatják a többi függvényt.

ha...akkor...egyébként

Tegyük fel, hogy írunk egy programot, amely beolvas két számot, és ha ezek közül a második nem egyenlő nullával, akkor írja ki az első szám hányadosát és a maradékot, amely osztja az első számot a másodikkal.

(1) program bemutató; (2) var a,b:integer; (3) kezdődik (4) olvassa (a,b); (5) if b0 then writeln(a div b," ", a mod b); (6) vége. Az 1-4 sorok már ismerősek számunkra.

Az 5. sor egy új if utasítást tartalmaz. (A formátum: „if állapot akkor operátor")

Ha a feltétel kiértékelése IGAZ, akkor az utasítás végrehajtásra kerül. Ez azt jelenti, hogy ha b értéke nem nulla, akkor a div b és a mod b kerül kiadásra.

Ha ezt követően azt írja be, hogy "egyéb operátor2", akkor ha a feltétel értéke hamis, akkor az utasítás2 végrehajtásra kerül. Például:

Ha b0 then writeln(a div b," ", a mod b) else writeln("Nem lehet osztani 0-val"); (ha a "b" nem egyenlő nullával, akkor a következőt írja ki: div b, " ", a mod b, ellenkező esetben írja ki a "Nem osztható 0-val")

Ne feledje, hogy a másikat soha nem előzi meg pontosvessző.

Ebben a példában csak egy utasítás kerül végrehajtásra, vagy nem hajtódik végre. Gyakran arra van szükség, hogy több utasítást végre kell hajtani / nem kell végrehajtani. Ez könnyen megtehető, ha több állítást kombinál kódblokk, amelyet a kezdő és záró utasítások alkotnak.

Például:

(1) program bemutató; (2) var a,b:integer; (3) kezdődik (4) olvassa (a,b); (5) ha b0, akkor (6) begin (7) writeln("Privát: ",a div b); (8) writeln("Fennmaradó: ",a mod b); (9) end else writeln("Nem osztható 0-val"); (10)vége.

Ehhez csak a kezdet és a vége közé kell mellékelnie a szükséges utasításokat.