Onko tehtäväoperaattori kirjoitettu oikein Pascalissa? Tehtäväoperaattori. Tulo-, lähtö-, osoitusoperaattorit

Oppitunnin tyyppi:

  • koulutuksellinen Opiskelijat tutustuvat uuteen Pascal-operaattoriin;
  • teeman toisto" Sisäinen muisti tietokone";
  • hankitun tiedon lujittaminen.

Oppitunnin aihe:"Ohjelmointi Pascalilla. Tehtäväoperaattori."

Tavoitteet:

  • Esittele "tehtäväoperaattorin" käsite.
  • Erota kokonaislukuja ja reaalilukuja koskevat operaatiot.
  • Rakenna ja arvioi lausekkeet oikein määritysoperaattorilla.
  • Kirjoita ohjelmia yksinkertaisiin tehtäviin.

Oppitunnin kesto: 1 tunti 30 minuuttia.

TUTKIEN AIKANA

Ensimmäinen oppitunti

1. Toista edellisen oppitunnin "Tietotyypit" aihe. Esimerkkejä sanoista, jotka kuulostavat samalta, mutta joilla on erilaiset semanttiset merkitykset.

Opettaja ja opiskelijat työskentelevät kysymys-vastaus -muodossa (10 minuuttia).

2. Opettaja selittää uuden aiheen käyttämällä multimediaesitystuntia “Ohjelmointi Pascalilla. Tehtäväoperaattori." Määritelmä käsitteelle "toimeksiantooperaattori" on annettu sekä operaattorin yleinen ja rakenteellinen muoto. Ennen kuin pohdimme osoitusoperaattorin toimintaa, muistetaan ja toistetaan aihe "Satunnaismuisti, ominaisuudet RAM-muisti».

Esittelyn mukana. Liite 1 (15 minuuttia).

3. Opiskelijat työskentelevät itsenäisesti lukemalla ja tekemällä muistiinpanoja uudesta aiheesta (tunti-esitys nauhoitetaan valmiiksi oppilaiden tietokoneille, muistiinpanoa koskevat kysymykset päättää opettaja). Täällä opiskelijat voivat tutustua tehtäväoperaattoria käyttävien ohjelmien teksteihin Liite 2(20 minuuttia).

Toinen oppitunti

4. Opiskelijat työskentelevät laudalla tehden harjoituksia (12-15 minuuttia).
1. Opettaja suorittaa tiedonhallinnan kokeen muodossa. Testiohjelma on valmiiksi tallennettu opiskelijoiden tietokoneille. Pistemäärä määräytyy ohjelman mukaan. Liite 5(10 minuuttia).
5. Oppilaat tekevät pientä itsenäistä työskentelyä korttien parissa tai kirjoittavat ja debugaavat ALP Pascalilla ohjelman, joka käyttää tehtävän operaattoria/operaattoreita (opettaja kutsuu tehtävien mukana korttien numeroita). Oppilaat saavat työstään arvosanan. Liite 3 . Liite 4(15 minuuttia).
Kotitehtävät. Opiskelijoita pyydetään kirjoittamaan yksinkertaisen ohjelman teksti ASL Pascal -kielellä, joka käyttää tehtävän operaattoria/operaattoreita (niille opiskelijoille, joilla ei ollut aikaa suorittaa tehtävää tunnilla).

Johtopäätökset:

  • Toista edellisen oppitunnin aihe lohkossa 1.
  • Lohkojen 2, 3 ja 4 kautta esitellään ja vahvistetaan uusi aihe "Assignment Operator".
  • Lohkojen 5 ja 6 kautta suoritetaan tiedon ohjaus.

Ohjelmointi Pascalilla

Oppitunti nro 1 (2 tuntia). Muuttujat ja vakiot. Tehtäväoperaattori

  1. Kotitehtävien tarkistaminen.
  2. Uusi aihe.
  3. Kotitehtävät.

Kotitehtävien tarkistaminen.

2. Uusi aihe: "Muuttujat ja vakiot. Tehtäväoperaattori"

Muuttuva - on sen muistialueen nimi (alueen koko riippuu tietotyypistä), johon muuttujalle annettu arvo on tallennettu. Muuttujaa voidaan verrata laatikkoon, jossa arvo sijaitsee (paras vertailu on kerrostaloon, koska laatikosta saa jotain irti ja se jää viimeiseksi, eli laatikko jää tyhjäksi ja muuttuja jopa jos sitä on käytetty, jää muistialueelle).
Vakio - kiinteät yksittäiset numero- tai tekstiarvot, jotka eivät voi muuttua ohjelman suorittamisen aikana.
Tehtäväoperaattori. Yksi yleisimmin käytetyistä operaattoreista toimeksiantooperaattori. Yleisnäkymä toimeksiantooperaattorista:

muuttujan nimi:= lauseke;

Lauseke voi olla tietty arvo (eli kokonaisluku tai reaaliluku, esimerkiksi 22 tai 2,5, symbolinen arvo: "ABC", looginen arvo: TRUE tai FALSE) ja jokin lauseke (arvot + operaatiot niillä ), jonka tulos liitetään vasemmalla olevaan muuttujaan.

ESIMERKKEJÄ:

PAG: = 10;(tietty arvo numerona);
X: = X + 1;(ilmaisu);
C:=B;(muuttujan nimi);
G:= 'HELLO'; ( erityinen merkitys on symbolinen);
X:= (-A + SIN(Y) – 4 * B * X) / (2 * C);(matemaattinen lauseke);
Y:= TOSI;(erityinen looginen arvo).

Ero matematiikan ja ohjelmoinnin tehtävätoiminnon välillä.

Matematiikassa lauseke = b tarkoittaa, että a:n ja b:n laskettujen arvojen on oltava samat.
Ohjelmoinnissa A:=B tarkoittaa, että B-nimiseen muistipaikkaan tallennettu arvo sijoitetaan muistipaikkaan A. Siksi käänteinen lauseke
B:= A antaa erilaisen tuloksen.
Esimerkki: arvot 5 ja 9 sijoitetaan kohtaan A ja B, vastaavasti.

A: = 5;
B: = 9

a) Toimenpiteen tulos A:= B;

b) Toiminnan tulos B:= A;

Tässä on toinen merkittävä ero yhtäläisyysmerkin ja määritysoperaattorin välillä: A = A + 1;
Matematiikassa tällainen ilmaus on yksinkertaisesti merkityksetön, koska identiteetti on väärä. Ei ole olemassa A:n numeerisia arvoja, joille tämä olisi totta. Ohjelmoinnissa tämä tarkoittaa sitä, että soluun A tallennettuun arvoon lisätään 1 ja uusi saatu arvo korvaa vanhan solussa A. Esimerkiksi jos ennen tämän käskyn suorittamista A:lla oli arvo 5, niin se suorituksen jälkeen on yhtä suuri kuin 6.

Seuraava ero: matemaattinen lauseke A + 9 – B = X on varsin järkevä ja voi tarkoittaa, että kun korvaat joitain lukuja A:n ja B:n sijaan lausekkeen vasemmalla puolella, saat H. Samalla Tämän lausekkeen ohjelmointi on merkityksetöntä, koska lausekkeen vasemmalla puolella on oltava sen muistialueen nimi, jolle oikealla puolella laskettu arvo on määritetty. Jos yrität lisätä tällaisen lausekkeen ohjelmaan, saat virheilmoituksen, koska muuttujan nimi on A + 9 – B ei ymmärrä.

kirjoita vakiomuotoon:

(– b + sqrt(sqr(b) – 4 * a * c))/(2 * a);
a/b * (c + d) – (a – b)/b/c + 1E – 8;

Bibliografia:

  • V.B. Popov"TURBO PASCAL koululaisille", "Rahoitus ja tilastot", Moskova, 1996
  • A.A. Cherno teoksissa "Tietojenkäsittelytieteen oppituntien muistiinpanot luokilla 9 - 11", "Opettaja", Volgograd, 2004.
  • D.M. Zlatopolsky"Menen tietojenkäsittelyn tunnille. Ohjelmointitehtävät, luokat 7 - 11", "Syyskuun ensimmäinen", Moskova, 2001.

Operaattori– määräys tiettyjen toimien suorittamisesta. Pascal-ohjelmointikieli sisältää 11 operaattoria.

Tehtäväoperaattori Pascalissa

Tehtäväoperaattori on yleisimmin käytetty operaattori Turbo Pascal -kielessä.

Tallennusmuoto: X:=A;
Missä: X– muuttujan nimi;
A- ilmaisu ;
:= - toimeksiantomerkki.

Operaattorin työ: Operaattorin suorituksen aikana lausekkeen oikealla puolella oleva arvo lasketaan ja liitetään muuttujan nimeen.

Muuttujan tyypin ja lausekkeen tyypin on vastattava toisiaan, paitsi jos lauseke on kokonaislukutyyppi ja muuttuja reaalityyppinen. Tässä tapauksessa lausekkeen laskettu arvo muunnetaan todelliseksi tyypiksi.

Esimerkki 9.1. Kirjoita ohjelma funktioiden laskemiseen:

y=cosa+lnb; n = k+1; r=ord(#65).

Var
a, b, y: todellinen;
k, n: kokonaisluku;
r:char;
t, v, u: Boolen;
* * *
y: = cos(a)+ln(b);
n:=k+1;
r:=ord(#65);
t:=(v ja u)tai(v eikä u);
* * *
Loppu.

Siirtymäoperaattori Pascalissa

Turbo Pascalissa otetaan käyttöön operaattorien luonnollinen suoritusjärjestys, ts. siinä järjestyksessä kuin ne näkyvät ohjelman tekstissä. Hyppyoperaattori keskeyttää lauseiden luonnollisen suoritusjärjestyksen ja siirtää ohjauksen käskyyn, joka on merkitty hyppyoperaattorissa määritetyllä tunnisteella.

Tallennusmuoto: GoTo m;

Missä: Mene- mene;
m- etiketti

Operaattorin työ: Hyppyoperaattori siirtää ohjauksen tarralla merkitylle käyttäjälle m.
Siirtymäoperaattorin käyttö TR:ssä ei ole toivottavaa, koska se rikkoo ohjelman rakenteellista eheyttä. Tällaista ohjelmaa on vaikea lukea, korjata ja muokata. Siirtymäoperaattorin käytölle TR:ssä on rajoituksia, jotka eivät salli sen epäsysteemistä käyttöä.

Siirtymäoperaattorilla voit siirtää ohjauksen yhden tason sisällä tai siirtyä sisäiseltä tasolta ulkoiselle tasolle. Siirtyminen ulkoiselta sisäiselle tasolle on kielletty. Esimerkiksi ohjelmasta aliohjelman runkoon tai silmukkakäskyn tai ehdollisen käskyn sisällä.


Tehtäväoperaattori on yksinkertaisin ja yleisin operaattori.

Tehtävän operaattorin muoto

Osoitusoperaattori on merkintä, joka sisältää =-symbolin, jonka vasemmalla puolella on muuttujan nimi ja oikealla puolella lauseke. Tehtäväoperaattori päättyy merkkiin; (puolipiste).

Muuttuva = Ilmaisu ; // Tehtäväoperaattori

Tehtäväoperaattori voidaan tunnistaa ohjelmatekstissä yhtäläisyysmerkin läsnäolosta. Lauseke voi olla vakio, muuttuja, funktiokutsu tai itse lauseke.

Tehtäväoperaattorin suoritussääntö

Tehtäväoperaattori, kuten kaikki muutkin operaattorit, on suoritettava. Tämä tarkoittaa, että merkintä, joka muodostaa osoitusoperaattorin, suoritetaan säännön mukaisesti. Kun osoitusoperaattori suoritetaan, oikealla puolella oleva arvo lasketaan ja sitten tämä arvo annetaan muuttujalle yhtäläisyysmerkin vasemmalla puolella. Asennusoperaattorin suorittamisen seurauksena vasemmalla oleva muuttuja saa aina uuden arvon; tämä arvo voi olla erilainen tai sama kuin tämän muuttujan edellinen arvo. Osoitusoperaattorin oikealla puolella oleva lauseke arvioidaan sen mukaan, missä järjestyksessä lausekkeet on arvioitu (katso Toiminnot ja lausekkeet).

Esimerkkejä toimeksiantooperaattoreista

Osoitusoperaattorissa on mahdollista ilmoittaa yhtäläisyysmerkin vasemmalla puolella olevan muuttujan tyyppi:

int In = 3;
double Do = 2,0;
bool Bo = tosi ;
väri Co = 0 x008000 ; // Muuttujalle Co annetaan vakion arvo
merkkijono St = "sss"; // Muuttujalle St annetaan vakion arvo
päivämäärä-aika Da = D "01/01/2004"; // Muuttujalle Da annetaan vakion arvo

Aikaisemmin ilmoitettuja muuttujia käytetään osoitusoperaattorissa ilman tyyppiä.

In = 7; // Muuttuja In on määritetty vakion arvoksi
Do = 23,5; // Muuttuja Do on määritetty vakion arvoksi
Bo = 0; // Muuttujalle Bo annetaan vakion arvo

Osoitusoperaattorissa yhtäläisyysmerkin oikealla puolella oleva muuttujatyypin ilmoitus ei ole sallittu:

In = int In_2; // Muuttujien tyypin ilmoittaminen oikealla puolella on kielletty
Do = double Do_2; // Muuttujien tyypin ilmoittaminen oikealla puolella on kielletty

Osoitusoperaattori ei salli muuttujien tyypin uudelleen ilmoittamista.

Int In; // Muuttujatyypin In ilmoitus
int In = In_2; // Muuttujan (In) uudelleenilmoittaminen ei ole sallittua

Esimerkkejä mukautettujen ja vakiotoimintojen käytöstä oikealla puolella:

In = Oma_toiminto () ; // In on määritetty käyttäjäarvoksi. toimintoja
Do = Gipo(Do1, Do1); // Do on määritetty käyttäjäarvoksi. toimintoja
Bo = IsConnected () ; // Bo on vakiona. toimintoja
St = ObjektinNimi(0); // St on vakiona. toimintoja
Da = TimeCurrent(); // Da on vakiona. toimintoja

Esimerkkejä käytöstä lausekkeiden oikealla puolella:

In = (Oma_funktio() + In2) / 2; // Liitetty muuttujaan In
// ..lausekkeen arvo
Do = MathAbs (Do1 + Gipo (Do2, 5) + 2,5); // Liitetty muuttujaan Do
// ..lausekkeen arvo

Tehtäessä laskelmia toimeksiantooperaattorissa noudatetaan tietotyyppien muuntamisen sääntöjä (katso Tyyppimuunnos).

Esimerkkejä lyhyiden tehtävien operaattoreista

MQL4 käyttää myös lyhytmuotoista kirjoitustehtäväoperaattoria. Tämä on osoitusoperaattorien muoto, joka käyttää muita toimeksiantooperaattoreita kuin toimeksiantooperaattoria = (yhtäsuuruusmerkki) (katso Operaatiot ja lausekkeet). Lyhyen muodon operaattoreihin sovelletaan samoja sääntöjä ja rajoituksia. Selvyyden vuoksi koodissa on käytetty lyhennettä tehtäväoperaattorit. Ohjelmoija voi käyttää harkintansa mukaan toimeksiantooperaattorin yhtä tai toista lomaketta. Mikä tahansa lyhytmuotoinen tehtäväoperaattori voidaan helposti kirjoittaa uudelleen täysimuotoiseksi, eikä operaattorin suorittamisen tulos muutu.

In /= 33;
In = In / 33 ;

St += "_exp7"; // Tehtäväoperaattorin lyhyt muoto
St = St + "_exp7"; // Tehtäväoperaattorin täydellinen muoto

Tarkastelimme yksinkertaisimpia Pascalilla kirjoitettuja ohjelmia PascalABC.Net-ympäristössä. Siellä suoritimme aritmeettisia operaatioita numeroille ja tulostimme ne sitten kirjoitus- (tai writeln) -operaattorilla. Emme kuitenkaan käyttäneet määritysoperaattoria, joka on hyvin yleinen ohjelmoinnissa. Joten mikä on toimeksianto?

Tarkastellaan joitain muuttujia M ja N, joilla on tietyt arvot, esimerkiksi M = 12, N = 34. Jokaiselle näistä arvoista tietokone varaa erillisen muistin osan, joka on tietty määrä soluja tai bittejä (1 solu = 1 bitti). Useita numeroita (tai muunlaisia ​​tietoja) ei voi tallentaa samaan muistipaikkaan samasta syystä, koska yhteen litran purkkiin ei voi mahtua kahta litraa vettä.

Hyvin usein muuttujan M arvo, joka on 12, on poistettava ja sen sijaan tulee muuttujan N arvo, eli 34. Mitä tietokone tekee? Hän löytää muistipaikan, jossa N:n arvo on "piilotettu", kopioi sen (luku 34), palaa tallennuspaikkaan M (yhtä kuin 12), poistaa sen arvon ja lisää uuden, eli 34:n. tuloksena M = 12 muuttui M = 34:ksi.

Osoitus on tietojen tallentaminen tietokoneen muistin osaan, joka on varattu arvon M arvolle, tiedot, jotka on tallennettu tietokoneen muistin toiseen osaan, jossa suuren N arvo on tallennettu.

Tehtävä kirjoitetaan muodossa M:= N, eli arvo N menee M:lle. Luonnollinen kysymys kuuluu: mitä tapahtui arvolle N? Ei mitään, se vain näytti "jakavan" arvon muuttujan M kanssa, mutta itse ei muuttunut. Joskus ohjelmoinnin aloittelijat ajattelevat, että muuttujat M ja N muuttavat arvoja, mutta näin ei ole. Tämän ilmiön kuvaamiseksi harkitse ongelmaa:

Tehtävä. Annetut luvut: M = 12, N = 34. Vaihda niiden arvot.

Meidän on määritettävä 34 numeroon M ja 12 numeroon N (päinvastoin). Hyvin usein aloittelevat ohjelmoijat kirjoittavat näin:


Ensimmäisellä koodirivillä M on määritetty N:ksi, eli M:= 34. Toisella rivillä N on määrätty M:lle, mutta viimeinen muuttuja ei ole enää 12, koska se muutti arvoaan edellinen rivi on 34. Siksi molemmat muuttujat ovat yhtä suuria kuin 34. Esittelyä varten kirjoitetaan täydellinen koodi, joka sinun on kirjoitettava uudelleen PascalABC.Net-ohjelmointiympäristössä:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var M, N: kirjoita kokonaisluku;

Kuvaus:

")" onmouseout="toolTip()">kokonaisluku
; alkaa writeln( "Syötä numerot M ja N:" <-- вводим 12 } write (" N = " ) ; readln (N) ; { <-- вводим 34 } M := N; { <== M присваивается N, поэтому M = 34 } N = M; { <== N присваивается M, поэтому N = 34 } loppu.

Suorita ohjelma suorittamista varten; Kun sinua pyydetään M, kirjoita 12, kirjoita kohtaan N 34 ja paina Enter. Jos kaikki on tehty oikein, sinun pitäisi nähdä:

Syötä numerot M ja N:
M = 12
N = 34
Tulos:
M = 34 N = 34

Kuten viimeiseltä riviltä näet, tämä ei ole sitä, mitä halusimme - vaihtaa M:n ja N:n arvot.

Oikean tuloksen saavuttamiseksi sinun on kiinnitettävä muuttujan M alkuarvo, esimerkiksi s:= M (”muista” M kirjoittamalla sen arvo muuttujaan s). Tämän seurauksena annamme numerolle N ei jo muuttuneen muuttujan M arvoa, vaan käytämme sitä vastaavaa arvoa s:


Viimeisimpien muutosten mukaisesti edellinen ohjelma on muotoa:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var M, N, s: kirjoita kokonaisluku;

Kuvaus:
Edustaa 32-bittistä etumerkillistä kokonaislukua.

Arvoalue: -2 147 483 648 .. 2 147 483 647")" onmouseout="toolTip()">kokonaisluku
; alkaa writeln( "Syötä numerot M ja N:") ; kirjoittaa(" M = "); readln(M); (<-- вводим 12 } write (" N = " ) ; readln (N) ; { <-- вводим 34 } s := M; { <== запоминаем M, равное 12 } M: = N; (M = 34, koska N = 34) N:= s; (N = 12, koska s = 12) writeln("Tulos:"); writeln("M = ", M, "N = ", N); lueln loppu.

Kirjoita tämä ohjelma uudelleen PascalABC.Netissä ja suorita (näppäimistön F9-painike). Jos vastaus on tämä:

Syötä numerot M ja N:
M = 12
N = 34
Tulos:
M = 34 N = 12

niin ohjelma toimii oikein. Kuten viimeiseltä riviltä voidaan nähdä, numeroiden M ja N arvot ovat vaihtaneet paikkoja.

Tehtävä- ohjelmoinnin sidosmekanismi, jonka avulla voit muuttaa dynaamisesti tietoobjektien (yleensä muuttujien) nimien ja niiden arvojen välisiä yhteyksiä. Tarkkaan ottaen arvojen muuttaminen on osoitustoiminnon sivuvaikutus, ja monissa nykyaikaisissa ohjelmointikielissä operaatio itse myös palauttaa jonkin tuloksen (yleensä kopion määritetystä arvosta). Fyysisellä tasolla osoitusoperaation tulos on muistisolujen tai prosessorirekisterien kirjoittaminen ja uudelleenkirjoittaminen.

Assignment on yksi keskeisistä rakenteista imperatiivisissa ohjelmointikielissä, ja se toteutetaan tehokkaasti ja yksinkertaisesti nykyaikaisten tietokoneiden perustana olevalle von Neumann -arkkitehtuurille.

Olio-ohjelmointikielissä tehtävien semantiikka on merkittävästi erilainen. Esimerkiksi Kotlin-kielellä tehtävän tapahtuessa objekti kopioidaan, ja Rust-kielellä objektia siirretään (siirrä semantiikkaa) ja vanha linkki raukeaa.

Aseta<целевая_переменная> <выражение>

Tämä merkintä vastaa funktion kutsumista. Samoin vanhan tyylin COBOLissa:

KERRO 2 2:LLA ANNA NELJÄ.

Työalgoritmi

  • Laske ensimmäisen operandin vasemmanpuoleinen arvo. Tässä vaiheessa tiedetään kohdeobjektin, uuden arvon vastaanottajan, sijainti.
  • Laske toisen operandin oikeanpuoleinen arvo. Tämä vaihe voi olla niin suuri kuin halutaan ja sisältää muita lausuntoja (mukaan lukien tehtävät).
  • Määritä laskettu oikeanpuoleinen arvo vasemmanpuoleiselle arvolle. Ensinnäkin, jos on tyyppiristiriita, on suoritettava heitto (tai virheilmoitus on annettava sen mahdottomuuden vuoksi). Toiseksi nykyaikaisten ohjelmointikielten todellinen arvojen määrittäminen voidaan korvata, ja se ei sisällä vain muistisolujen arvojen siirtämistä (esimerkiksi kohteiden "ominaisuuksiin", operaattorin ylikuormitus).
  • Palauta laskettu oikeakätinen arvo toiminnon tuloksena. Ei vaadita kaikilla kielillä (ei esimerkiksi Pascalissa).

Nimitys

Tehtävähahmon valinta herättää keskustelua kielten kehittäjien keskuudessa. Väitetään, että =-symbolin käyttäminen tehtävän antamiseen hämmentää ohjelmoijia ja herättää myös kysymyksen sellaisen symbolin valitsemisesta vertailuoperaattorille, jota on vaikea tehdä hyvin.

Tunnetun huono esimerkki on yhtäläisyysmerkin valinta tehtävän osoittamiseen, joka juontaa juurensa Fortranista vuonna 1957 ja jota monet kielenkehittäjät toistavat edelleen sokeasti. Tämä huono idea kumoaa ikivanhan perinteen käyttää =-merkkiä merkitsemään tasa-arvovertailua, predikaattia, joka ottaa arvot "tosi" tai "epätosi". Mutta Fortranissa tämä symboli merkitsi tehtävää, joka pakotti tasa-arvoon. Tässä tapauksessa operandit ovat epätasaisessa paikassa: vasen operandi, muuttuja, on tehtävä yhtäläiseksi oikean operandin, lausekkeen kanssa. Siksi x = y ei tarkoita samaa kuin y = x.

Alkuperäinen teksti (englanniksi)

Pahamaineinen esimerkki huonosta ideasta oli yhtäläisyysmerkin valinta osoittamaan tehtävää. Se juontaa juurensa Fortraniin vuonna 1957, ja kielisuunnittelijoiden armeijat ovat kopioineet sen. Miksi se on huono idea? Koska se kumoaa vuosisadan vanhan perinteen antaa "=" tarkoittaa tasa-arvon vertailua, predikaattia, joka on joko tosi tai epätosi. Mutta Fortran teki sen tarkoittavan toimeksiantoa, tasa-arvon täytäntöönpanoa. Tässä tapauksessa operandit ovat eriarvoisessa asemassa: Vasen operandi (muuttuja) on tehtävä yhtä suureksi kuin oikea operandi (lauseke). x = y ei tarkoita samaa kuin y = x.

Tämän Wirthin aseman toteutus voidaan katsoa, ​​että Pascal-kielessä, jonka kirjoittaja hän on, osoitusoperaattori on:=, kun taas vertailussa sitä käytetään yksinkertaisesti =.

Symbolin valinta yhtäläisyysoperaattorille kielessä käytettäessä = tehtävänä on ratkaistu:

  • Ottamalla käyttöön uusi kielisymboli tasa-arvooperaattorille.
A = B = C

muuttujalle A annetaan Boolen arvo relaatiolausekkeelle B = C. Tämä merkintätapa heikentää luettavuutta ja sitä käytetään harvoin.

Semanttiset ominaisuudet

"Intuitiivinen" (pakollisten kielten ohjelmoijille) tapa tulkita tehtävä ei ole aina ainoa oikea ja mahdollinen.

Pakollisten kielten syntaksista ei aina ole mahdollista ymmärtää, kuinka tehtävän semantiikka on toteutettu, ellei sitä ole erikseen määritelty kielessä.

A = b = a a = 1000

Tämän jälkeen b:llä on arvo - yksinkertaisesti siksi, että sen arvo on itse asiassa a:n arvo. Viittausten määrää samaan tietoobjektiin kutsutaan sen kardinaliteettiksi, ja itse objekti kuolee (tuhoaa tai kerätään roskat), kun sen kardinaliteetti saavuttaa nollan. Alemman tason ohjelmointikielet (kuten C) antavat ohjelmoijalle mahdollisuuden valvoa, käytetäänkö osoittimen semantiikkaa vai kopiointisemantiikkaa.

Toiminnan korvaaminen

Monet kielet tarjoavat mahdollisuuden muuttaa toimeksiannon merkitystä: joko ominaisuusmekanismin kautta tai ylikuormittamalla toimeksiantooperaattoria. Korvaaminen voi olla tarpeen määritetyn arvon oikeellisuuden tarkistamiseksi tai muiden lisätoimintojen suorittamiseksi. Tehtäväoperaattorin ylikuormitusta käytetään usein "syväkopiointiin", toisin sanoen arvojen kopioimiseen viittausten sijaan, jotka kopioidaan oletuksena monilla kielillä.

Tällaiset mekanismit mahdollistavat mukavuuden työskentelyn aikana, joten ohjelmoijalle ei ole eroa sisäänrakennetun operaattorin ja ylikuormitetun operaattorin käytön välillä. Samasta syystä ongelmat ovat mahdollisia, koska ylikuormitetun operaattorin toiminnot voivat olla täysin erilaisia ​​​​kuin oletusoperaattorin toiminnot, ja funktiokutsu ei ole ilmeinen ja voidaan helposti sekoittaa sisäänrakennetuksi toiminnoksi.

Edistyneet mallit

Tehtäväkonstruktiot eri ohjelmointikielillä

Koska osoitustoimintoa käytetään laajalti, ohjelmointikielten kehittäjät yrittävät kehittää uusia rakenteita tyypillisten toimintojen yksinkertaistamiseen (lisää ns. "syntaktinen sokeri"). Lisäksi matalan tason ohjelmointikielissä operaation sisällyttämiskriteerinä on usein kyky kääntää tehokkaaksi suoritettavaksi koodiksi. C-kieli on erityisen kuuluisa tästä ominaisuudesta.

Useita kohteita

Yksi vaihtoehto yksinkertaiselle operaattorille on kyky määrittää lausekkeen arvo useille objekteille. Esimerkiksi PL/1-kielellä operaattori

SUMMA, YHTEENSÄ = 0

määrittää samanaikaisesti arvon nolla SUM- ja TOTAL-muuttujille. Ada-kielessä tehtävä on myös operaattori, ei lauseke, joten usean tehtävän merkintä on:

SUMMA, YHTEENSÄ: Kokonaisluku:= 0;

Pythonissa vastaavalla tehtävällä on seuraava syntaksi:

Summa = yhteensä = 0

Toisin kuin PL/1, Ada ja Python, joissa usean määrityksen katsotaan olevan vain lyhennetty merkintämuoto, C:ssä, Lispissä ja muissa kielissä tällä syntaksilla on tiukka perusta: määritysoperaattori yksinkertaisesti palauttaa niille määritetyn arvon (katso yllä). ). Eli viimeinen esimerkki on itse asiassa:

Summa = (yhteensä = 0)

Tällainen rivi toimii C:ssä (jos lisäät puolipisteen loppuun), mutta aiheuttaa virheen Pythonissa.

Rinnakkaistehtävä

Viimeinen vaihtoehto toimii vain tyypeillä, jotka tukevat bittitoimintoja (esimerkiksi kaksinkertaisella kielenkääntäjä ei salli muuttujaarvojen vaihtamista tällä tavalla).

a ||= 10

Tämä konstruktio antaa arvon muuttujalle a vain, jos arvoa ei ole vielä määritetty tai se on yhtä suuri kuin false.

Yhdistelmäoperaattorit

Yhdistetyn tehtävän operaattorin avulla voit lyhentää yleisesti käytettyä tehtävän muotoa. Tällä tekniikalla voidaan lyhentää esimerkiksi osoitusmerkintöjä, joissa kohdemuuttujaa käytetään ensimmäisenä operandina lausekkeen oikealla puolella.