Andmesisestuslaused ReadLn ja Read. Protseduurid Loe ja ReadLn Mida readln teeb pascalis

lugeda ja ReadLn lugeda teavet standardsest sisendseadmest. Konsoolirakendustes võib selleks seadmeks olla näiteks klaviatuur (täpsemalt klaviatuurilt sisestatud andmed), graafilistes rakendustes fail kettal.

See tähendab, et need protseduurid on "antipoodid" - nad sooritavad vastupidiseid toiminguid.

Protseduurid Read ja ReadLn teostavad sarnaseid toiminguid. Peamine erinevus nende kahe vahel seisneb selles, et ReadLn-rutiin teostab pärast sisestuse lõpetamist reavahetuse (ja failide puhul loeb see faili ridahaaval ette). Ja protseduur Read loeb andmeid järjest – ilma reavahetuseta.

MÄRGE:

Turbo Pascalis ma seda ei mäleta (võib-olla lihtsalt unustasin), aga klaviatuuri sisendit saab teha ainult ReadLn protseduuri kasutades ja ReadLn protseduur millegipärast ei tööta.

Konsooli väljundi süntaks:

menetlust Loe (Args: Argumendid);

Faili väljundi süntaks:

menetlust Loe ( var F: tekst; Args: Argumendid);

Argumendid ( Argumendid) võib olla erinev. Kui kasutatakse mitut muutujat, eraldatakse need komadega. Näiteks:

Var x, y: täisarv; z:real; str:string; begin WriteLn("Sisesta kolm tühikuga eraldatud täisarvu:"); LoeLn(x, y, z); WriteLn("Sisestasite: ", x, ", ", y, ", ", z:0:2); ReadLn(str); WriteLn(str + str); ReadLn; lõpp.

Nagu juba mainitud, võivad need muutujad konsoolist sisestamisel olla erinevad tüübid. Kuid erinevalt Write / WriteLn protseduuridest pole seda lubatud kasutada (ja see on loogiline))).

TÄHTIS!
Andmete sisestamisel pidage meeles, et kui kasutaja sisestatud väärtus erineb muutuja tüübist, millesse see väärtus sisestatakse, siis tekib käitustõrge. Kui näiteks ülaltoodud näites sisestab kasutaja esimese numbrina reaalse väärtuse (näiteks 3.14), siis programm jookseb kokku, kuna muutujal x on täisarvu tüüp.

Failist lugedes saate töötada nii trüki- kui ka tekstifailidega.

Kui F(vt süntaks) on trükitud fail, siis peavad parameetritena edastatavad muutujad (Args) olema sama tüüpi, mis faili jaoks on määratud F. Trükimata failid pole lubatud. Kui parameeter F pole määratud, eeldatakse, et lugemine pärineb standardsisendist.

Kui fail F on tüüp Tekst, siis peavad muutujad olema tüüpi , või .

Kui faili lugemise ajal pole lugemiseks saadaval andmeid, tagastatakse muutujale F tühi väärtus (0 - jaoks , tühi string - stringide jaoks).

Protseduuri ReadLn kasutamisel ehk andmete rida-realt lugemisel tähistab rea lõppu teatud märgijada (millised - oleneb operatsioonisüsteem, DOS/Windowsi puhul on need kaks märki – #10 ja #13).

Rea lõpu marker ei ole lugemisrea osa ja seda ignoreeritakse.

Kui protseduuri Read/ReadLn täitmisel ilmneb tõrge, genereeritakse käitusaegne tõrge. Selline käitumine ei ole alati vastuvõetav (näiteks faili lugemise ajal). Seetõttu on mõnel juhul vigade genereerimine keelatud. Seda saate teha rakendusega.

MÄRGE:

Erinevates silumis- ja koolitusprogrammides kasutatakse sageli protseduuri ReadLn, et vältida konsoolirakenduse automaatset sulgemist pärast käivitamist. Selleks kirjutage programmi lõpus lihtsalt (nagu ülaltoodud näites):

See tähendab, et lihtsalt protseduuri nimi ilma parameetriteta. Sel juhul ootab programm ENTER klahvi vajutamist. Seetõttu ei lõpe programm enne, kui vajutatakse klahvi ENTER ja see võimaldab näha programmi tulemust. Muidugi operatsioonisüsteemis

Ma arvan, et paljud inimesed on sellest huvitatud

lugege ja lugege juhiseid

Lugemisjuhis on mõeldud muutuvate väärtuste (algandmete) sisestamiseks klaviatuurilt. Üldiselt näeb juhend välja selline:

loe(muutuja1, muutuja2, ... muutujaN)

kus muutuja on muutuja nimi, mille väärtus tuleb programmi täitmise ajal klaviatuurilt sisestada.

Siin on näited loetud avalduse kirjutamisest:

Loe); loe (Cena, Kol);

Lugemislause täitmisel juhtub järgmine:

1. Programm peatab oma töö ja ootab, kuni klaviatuuril sisestatakse vajalikud andmed ja vajutatakse klahvi .

2 http://tissot.ua/ kella ostmiseks Kiievi ostmiseks. . Pärast klahvi vajutamist sisestatud väärtus omistatakse muutujale, mille nimi on avalduses määratud.

Näiteks käsu täitmise tulemusena

loe(Temperatuur);

ja tippides klaviatuuril rida 21, on muutuja Temperat väärtuseks number 21.

Üks lugemislause võimaldab teil saada mitme muutuja väärtused. Sel juhul tuleb sisestatud numbrid kirjutada ühele reale ja eraldada need tühikutega. Näiteks kui muutujate a, b ja c tüüp on reaalne, siis käsu täitmise tulemusena loe(a, b, c); ja rea ​​klaviatuurisisend:

4.5 23 0.17

muutujatel on järgmised väärtused:

a = 4,5; b = 23,0; c = 0,17.

Kui string sisaldab rohkem numbreid kui lugemisjuhises määratud muutujad, siis ülejäänud stringi töödeldakse järgmise lugemisjuhisega http://crystal.lviv.ua crystal crystal. . https://mainvisa.com.ua fotokutse Ukrainasse välisriikide kodanikele. . Näiteks juhiste täitmise tulemusena

loe(A, B); loe(C);

ja klaviatuuri sisend

10 25 18

muutujad saavad järgmised väärtused: A=10, B=25. Käsu lugemine (C); määrab muutujale c väärtuse 18.

Readln-käsk erineb lugemiskäsklusest selle poolest, et pärast klaviatuuril sisestatud stringist järgmise numbri eraldamist ja lugemiskäskude loendi viimasele muutujale omistamist läheb ülejäänud string kaotsi ja järgmine lugemis- või lugemiskäsk nõuab uut sisendit.

Näiteks käsu täitmise tulemusena

loe (A, B); loe(C);

ja trükkides klaviatuurilt

10 25 18

muutujad saavad järgmised väärtused: A=10, B=25. Pärast seda ootab programm uue numbri sisestamist, et määrata see muutujale c.

Enne iga lugemis- või lugemisjuhist tuleks panna kirjutamiskäsk, mis annab kasutajale teada, milliseid andmeid programm temalt ootab. Näiteks võib ostu maksumuse arvutamise programmi fragment välja näha järgmine:

writeln("Sisesta algandmed.");

Write("Toote hind:");

Readln(Cena);

write("Partii kogus:");

readln(col);

write("Allahindlus:");

readln(Skidka);

Kui klaviatuurilt sisestatud andmete tüüp ei ühti või neid ei saa teisendada muutuv tüüp mille nimed on lugemis- (lugemis)käskes määratud, programm jookseb kokku (lugemisele järgnevaid juhiseid ei täideta) ja ekraanile kuvatakse veateade.

autor Aleksander esitas küsimuse Muud keeled ja tehnoloogiad

Miks on Pascalil read ja readln, kui read tõlgib ka rea, kuigi teoreetiliselt ei tohiks? ja sain parima vastuse

Skipy _[guru] vastus
readln – võtab väärtuse sisendpuhvrist parameetrisse, tühjendab kogu klaviatuuri sisendpuhvri
ja loe - võtab väärtuse sisendpuhvrist parameetrisse ja ei kustuta seda puhvrisse, vaid jätab väärtuse!! !
reavahetus automaatse sisenemisel - kõikjal
st readln on turvaline sisend
loe – ebaturvaline sisend
näide:
var
a,b: täisarv;
alustada
Loe); (kasutaja sisestas: 4, 5 a = 4)
(Sisendpuhvris on number 5!!}
loe(b); (siia ta sisestas numbri: 6, kuid b = 5)
(number 6 jääb sisendpuhvrisse!!}
---
readln(a);(kasutaja sisestas: 4, 5; a = 4)
(sisendpuhver on puhas!!}
readln(a);(kasutaja sisestas numbri 6 ja b = 6)
(sisendpuhver on puhas!!}
readln(b);
lõpp.
Vastupidi, sisendväärtuse tüübi automaatset määramist ei toimu, kõik on määratud sümbolid vorminguspetsifikaatoris.

Vastus alates Yoali-Mali[guru]
Seda saab seletada lihtsamalt, ilma suuremate probleemideta:
Lugemisprotseduuri täitmisel loetakse samalt realt järgmiste andmete väärtus ja protseduuri readln täitmisel loetakse järgmise andmete väärtus uuelt realt.
Seetõttu on väide Readln (b1,b2,...bn); pakub andmete sisestamist veerus.
Pärast iga muutuja b1, b2, ..bn sisestamist hüppab kursor uue rea algusesse.
Operaator Read(b1,b2,...bn); annab andmesisestuse STRING


Vastus alates VT-107 SOBIV[guru]
Siin läks midagi Dmitri lahku, kuid see pole tõsi. Ja umbes täielikult tühjendatud ja puhastamata puhvrist ja ohutusest. Sali vastas samuti valesti. Ei ole veerge ja ridu, täiesti erinevad reeglid.
Esiteks, need rutiinid ei tööta ainult konsooli sisendiga, seega on vaja kahte funktsiooni.
protseduur Loe(F, V1 [, V2,...Vn ]);
loeb voost kõik V1..Vn (täpselt n parameetrit) , kõik loetud andmed kustutatakse. Kõik pärast neid andmeid jääb muutumatuks.
Rea lugemisel loetakse kõike kuni reavahetuse või faili lõpuni. Järgnevad lugemiskutsed tagastavad tühja stringi. Ja reavahetusmärki voost ei eemaldata.
Kui loete tähemärki, siis olenevalt sätetest saab reavahetusmärki lugeda kui char(26)
Numbrite lugemisel jäetakse vahele kõik tühikud, tabeldusmärgid, reavahetused. Ja järgmine lugemine algab loetud numbrile järgneva märgiga. Jällegi võib ebavajalikud tegelased vahele jätta.
protseduur ReadLn([ var F: Tekst; ] V1 [, V2, ..Vn ]);
loeb voost V1, Vn (st töötab nagu loe) ja jätab seejärel vahele kõik märgid kuni uue reani (kaasa arvatud). Kõik märgid pärast reavahetust jäävad muutumatuks.
Minema uus rida tehakse, kuna vajutate konsoolis sisestusklahvi.
Turvalisusest kaugele tõmmatud. Need on erineva eesmärgiga funktsioonid. Nende ebaõige kasutamine ei ole ohutu, iga õige kasutamine on vastavalt ohutu.

Lugemisjuhis on mõeldud muutuvate väärtuste (algandmete) sisestamiseks klaviatuurilt. Üldiselt näeb juhend välja selline:

read (Muutuja!, Muutuja2, ... MuutujaU kus muutuja on muutuja nimi, mille väärtus tuleb programmi täitmisel klaviatuurilt sisestada.

Siin on näited loetud avalduse kirjutamisest:

Loe); loe (Cena, Kol);

Lugemislause täitmisel juhtub järgmine:

1. Programm peatab oma töö ja ootab, kuni klaviatuuril sisestatakse vajalikud andmed ja vajutatakse klahvi .

2. Pärast klahvi vajutamist sisestatud väärtus omistatakse muutujale, mille nimi on avalduses määratud.

Näiteks käsu täitmise tulemusena

Loe (Temperaat);

ja tippides klaviatuuril rida 21, on muutuja Tempérât väärtuseks number 21.

Üks lugemislause võimaldab teil saada mitme muutuja väärtused. Sel juhul tuleb sisestatud numbrid kirjutada ühele reale ja eraldada need tühikutega. Näiteks kui muutujate a, b ja c tüüp on reaalne, siis käsu täitmise tulemusena loetakse (a, b, c); ja rea ​​klaviatuurisisend:

4.5 23 0.17

muutujatel on järgmised väärtused: a = 4,5; b = 23, o; c = 0,17.

Kui real on rohkem numbreid kui loetavas lauses olevaid muutujaid, siis töötleb ülejäänud rida järgmise loetud lausega. Näiteks juhiste täitmise tulemusena:

Loe(a, b); loe(C);

ja klaviatuuri sisend

10 25 18

muutujad saavad järgmised väärtused: a = 10, b = 25. Käsu lugemine (C); määrab muutujale c väärtuse 18.

Readln-käsk erineb lugemiskäsklusest selle poolest, et pärast klaviatuuril sisestatud stringist järgmise numbri eraldamist ja selle omistamist readln-käskude loendi viimasele muutujale läheb ülejäänud string kaotsi ja järgmine lugemis- või lugemiskäsk nõuab uut sisendit.

Näiteks avalduse täitmise tulemusena:

readln(a, b); loe(C);

ja trükkides klaviatuurilt

10 25 18

muutujad saavad järgmised väärtused: a = u, b = 25. Pärast seda ootab programm uue numbri sisestamist, et määrata see muutujale c.

Enne iga lugemis- või lugemiskäsku tuleks panna kirjutamiskäsk, mis annab kasutajale teada, milliseid andmeid programm temalt ootab. Näiteks võib ostu maksumuse arvutamise programmi fragment välja näha järgmine:

Writeln("Sisesta algandmed."); write("Toote hind:"); readln(sepa); write("Partii kogus:"); readln(col); write("Allahindlus:"); readln(Skidka);

Kui klaviatuurilt sisestatud andmete tüüp ei ühti või ei saa üle kanda muutujate tüüpidele, mille nimed on lugemiskäskes (readln) määratud, jookseb programm kokku (lugemisele järgnevaid juhiseid ei täideta) ja teade kuvatakse ekraanile.

Teema: Sisend väljund. Operaatorid loevad (Readln), kirjutavad (Writeln). Lihtsamad lineaarsed programmid.

Lahendame probleemi, kommenteerides iga oma tegevust lokkis traksid. Tuletage meelde, et arvuti ei taju kommentaari ja me vajame seda programmi toimimise paremaks mõistmiseks.

Ülesanne . Kirjutage programm, mis tühjendab ekraani ja arvutab kahe kasutaja sisestatud arvu korrutise.

ProgramProizv2;
kasutab
Crt;(kaasa Crt moodul)
Var
number1, (muutuja, mis sisaldab esimest numbrit)
number2, (muutuja, mis sisaldab teist numbrit)
tulemus (muutuja, mis sisaldab tulemust)
: täisarv;
Alusta
ClrScr;(ekraani tühjendamise rutiini kasutamine Crt-moodulist)
Write("Sisesta esimene number");
readln(number1);
(Kasutaja sisestatud number loetakse muutujasse number1)
Write("Sisesta teine ​​number");
(Kuvame ekraanil apostroofide vahele kirjutatud tähemärke)
readln(number2);
(Kasutaja sisestatud number loetakse muutujasse number2)
tulemus:= arv1 * arv2;
(Leiame sisestatud arvude korrutise ja omistame tulemuse muutujale)
Write ("Arvude ", number1, " ja ", number2, "on võrdne", tulemus korrutis);
(Kuvame rea, mis sisaldab probleemi vastust)
Readln;(ekraani viivituse protseduur)
lõpp.

Programmi toimimise paremaks mõistmiseks tippige see oma arvutisse ja testige seda. Vasta küsimustele:

  • miks on programmi nimi Proizv2?
  • Miks paigutati Crt-moodul jaotisesse Kasutusalad?
  • mis on muutujate arv1, arv2, tulemus eesmärk?
  • mis tüüpi need muutujad on? mida see tähendab?
  • Kui omistame muutujatele number1 ja number2 väärtused 5 ja 7, siis millise rea toodab arvuti viimase Write protseduuri sooritamisel? Kirjutage see oma märkmikusse.
  • millistel ridadel küsitakse kasutajalt muutujate väärtusi?
  • Millisel real on arvud korrutatud?
  • mida loovutamise operaator selles programmis teeb?

Harjutus . Muutke programmi nii, et see küsib kasutajalt teist muutujat ja prindib välja kolme arvu korrutise tulemuse.

Kirjuta ja WriteLn avaldused

Oleme juba kasutanud Write- ja WriteLn-operaatoreid, kuid peame täpsustama nende operaatorite kasutamise reegleid.

Write (inglise keeles write) - operaator, mida kasutatakse teabe kuvamiseks ekraanil. Operaator WriteLn teeb sama toimingu, kuid kuna sellel on ka lõpp Ln (rida - ingliskeelne rida, rida), siis pärast soovitud teate kuvamist ekraanil viib ta kursori lisaks järgmisele reale.

Üldine vorm:
Kirjutage (väljendite loend)
WriteLn (väljendiloend)

Write ja WriteLn protseduure ei kasutata mitte ainult tulemuse kuvamiseks, vaid ka erinevate teadete või päringute kuvamiseks. See võimaldab teil pidada kasutajaga dialoogi, öelda talle, millal on vaja väärtusi sisestada, millal ta saab tulemuse, millal ta tegi vea jne.

Näiteks protseduuri WriteLn ('Leitud number', a) täitmisel trükitakse välja apostroofidega ümbritsetud rida ja seejärel kuvatakse muutuja a väärtus.

WriteLn lauset saab kasutada ka ilma parameetriteta. Sel juhul trükitakse tühikutest koosnev rida ja kursor liigub teisele reale. Mõnikord vajame seda andmete sisestamise paremaks tajumiseks.

Loe ja ReadLn avaldusi

Tuletage meelde, et arvutite peamine eesmärk on inimtööjõu säästmine. Seetõttu on vaja anda võimalus pärast programmi kirjutamist seda korduvalt kasutada, sisestades iga kord erinevaid andmeid. Selle keele paindlikkuse tagavad avaldused Read ja ReadLn. Need operaatorid sisestavad teavet klaviatuurilt.

Üldine vorm:
Loe (muutuja, muutuja...)
ReadLn(muutuja, muutuja...)

Lugemisprotseduuri täitmisel eeldatakse sulgudes loetletud väärtusi. Sisendandmed peavad olema üksteisest tühikutega eraldatud. Väärtuste määramine käib kordamööda.

Näiteks kui sisestatakse väärtused 53 ja X, siis käsu Read (a, b) täitmisel omistatakse muutujale a number 53 ja muutujale X täht X. märgime, et hädaolukorra vältimiseks peate jaotises Var õigesti määrama andmetüübi; meie puhul a:integer ja b:char.

Lausete Read ja ReadLn kasutamisel pole lugemise ja kirjutamise vahel erilisi erinevusi. Sageli kasutatakse parameetriteta protseduuri ReadLn programmi lõpus viivitamiseks: kuni klahvi vajutamiseni programmi täitmise tulemus jääb ekraanile. See on tulemuste analüüsimisel väga kasulik.

Märge . Ekraani viivituse määramisel pöörake tähelepanu eelmisele sisendile. Kui andmeid küsiti lugemisprotseduuri alusel, siis viivitust ei toimu.

Lahendame probleemi, milles kaalume nende protseduuride kõiki võimalikke kasutusviise.

Ülesanne . Leidke kolme arvu keskmine.

Märge . Mitme arvu keskmise leidmiseks peate need arvud liitma ja jagama summa nende arvude arvuga.

Tippige ülesande tekst ja kaaluge hoolikalt iga rida. Programmi nimi Srednee peegeldab ülesande sisu. Muide, lepime kokku, et programmi nimi ja seda programmi sisaldava faili nimi on samad. Edasi tuleb Crt mooduli ühendamine. Jaotises Var kirjeldatakse First, Second, Third täisarvu tüüpi muutujatena ja Sum kui reaaltüüpi. Operaatori jaotis algab tähega standardprotseduur ekraani puhastamine ClrScr (Clear Screen), mis asub moodulis Crt. Järgmisena kuvame Write lause abil teate ‘Sisesta esimene number’, mille järel kasutaja peab numbri sisestama.

Nüüd peab arvuti lugema sisestatud märgid ja salvestama need muutujasse First, see juhtub järgmise ReadLn(First) lause täitmisel. Seejärel küsime Write-lause abil veel kahe arvu väärtusi ja loeme need teiseks ja kolmandaks muutujaks. Seejärel arvutame nende summa ja omistame saadud arvu muutujale Sum. Keskmise leidmiseks tuleb nüüd saadud arv jagada 3-ga ja salvestada tulemus mingisse muutujasse.

Tulemuse salvestamiseks ei ole vaja deklareerida teist muutujat. Nagu meie programmis, on võimalik jagada muutuja Sum väärtus 3-ga ja määrata tulemus uuesti samale muutujale Sum. Nüüd saate arvutuse tulemust ekraanile kuvada, kasutades protseduuri Write. Ja lõpuks, viimane protseduur ReadLn lükkab meie väljundi ekraanil edasi, kuni klahvi vajutatakse.

Vajutage klahve +. Sisestage muutujate 5, 7 ja 12 väärtused, näete ekraanil järgmist:

5, 7 ja 12 keskmine on 8.00

Vaadake seda rida hoolikalt ja võrrelge meie programmi tulemuse väljundreaga. Testige programmi veel paar korda muude muutujate väärtuste jaoks.

Valige järgmisest loendist koos õpetajaga lahendatavad ülesanded:

  1. Sisestage kaks numbrit a ja b. Kasutage nende väärtuste vahetamiseks määramise operaatorit:
    a) kasutades vahemuutujat (x:=a; a:=b; b:=x);
    b) ilma vahepealset muutujat kasutamata (a:=a-b; b:=a+b; a:=b-a).
  2. Kirjutage programm, mis küsib kasutajalt täisarvu, reaalarvu, suvalise märgi ja stringi ning seejärel prindib need kõik ühele reale.
  3. Kuvage oma perekonnanimi, eesnimi ja isanimi ning kaks rida hiljem oma sünnikuupäev.
  4. Kirjutage programm ühe tärniga joonise printimiseks:
    a) jõulupuud (mitu jõulupuud);
    b) lumehelbed (mitu lumehelvest);
    c) maja. Näiteks

    *
    * *
    * *
    ***********
    * *
    * *
    * *
    * *
    ***********

  5. Koostage oma visiitkaart.


    * Ivanov Sergei *
    * Proletaarne 74 ruutmeetrit 55*
    * Telefon 45-72-88 *
    *******************************

  6. Koostage dialoog kasutaja ja arvuti vahel suvalisel teemal.
    Näiteks esitab masin kaks küsimust: "Mis su nimi on?" kui vana sa oled?"; pärast nime (Anton) ja numbri (15) sisestamist kuvatakse "Jah ... 50 aasta pärast olete juba 65-aastane ja teie nimi ei ole Anton, vaid vanaisa Anton"
  7. Küsige kasutajalt kahte numbrit ja kuvage täieliku vastusena nende arvude summa, vahe, korrutis ja jagatis.
  8. Küsige kasutajalt kahte numbrit ja kuvage täisarvu jagamise tulemus ja täisarvu jagamise ülejäänud osa tabelina. Näiteks numbrite 5 ja 3 sisestamisel peaks ekraanile ilmuma järgmine tabel:

    **************************
    *X*Y*div*mod*
    **************************
    * 5 * 3 * 1 * 2 *
    **************************

  9. Kirjutage programm, mis küsib looma nime ja numbrit ning kuvab seejärel fraasi nagu "Orav sööb 10 seent" (sõna "orav" ja numbri 10 sisestamisel).
  10. Korraldage dialoog müüja (arvuti) ja ostja (kasutaja) vahel toote ostmisel vastavalt järgmisele skeemile: toote pakkumine kindla hinnaga, ostetava toote koguse küsimine, rahasumma määramine ja kuvamine. ostja peab ostu eest tasuma.