Įvestis / išvestis Spausdinti
( 17 Votes )

Parašė Vidmantas Šarkys   

Ankstesniuose skyriuose kelis kartus apžvelgėme sakinius WriteLn(..) ir ReadLn(..). Šįkart su šiais ir panašaus tipo vykdomaisais sakiniais susipažinsime iš arčiau.

Skyrių pavadinome "Įvestis/Išvestis" ne šiaip sau. Informatikoje įvedimu vadiname vartotojo duomenų perdavimą kompiuteriui, pvz.: rašyti su klaviatūra tekstą, atlikti įvairias operacijas su pele ir t.t. Išvestis - atvirkščias variantas. Tai kompiuterio kreipimąsis į vartotoją, informacijos teikimas, užduočių įvykdymas. Programavime galioja labai panašūs principai. Programai paprašius įvedame kokį nors ženklą ar tekstą (įvestis), pasirodo programos atsakymas ekrane (išvestis).

Išvestis

FPS išvesties sakiniai yra du : Write ir WriteLn. Suprasti, kuo jie skirasi galime sukūrę nesudėtingą programą :

program isvestis;
var x, y : integer;
Begin
x := 1; y := 2;
Write(x);
Write(y);
WriteLn;
WriteLn(x);
WriteLn(y);
ReadLn;
end.

Sukompiliavę programą išvysime tokį langą:

Tiek Write, tiek WriteLn naudojamos išspausdinti tekstą. Vienintelis jų skirtumas - žymeklio padeties kitimas. Išspausdinus tekstą naudojant Write, žymeklis atsidurs iškart po paskutinio simbolio, naudojant WriteLn - peršoks į kitos eilutės pradžią. WriteLn sakinys gali būti naudojamas kaip Enter klavišas klaviatūroje : 7-oje programos kodo eilutėje mes nerašėme jokio simbolio, tiesiog perkelėme žymeklį į kitą eilutę. Atkreipkime dėmesį į tokį atvejį, kai rašomas ne vienas, bet du simboliai ar kintamieji naudojantis vienu išvedimo sakiniu. Pavyzdžiui, WriteLn(a, b, c). Įvykdžius šį sakinį, visi kintamieji bus parašyti vienoje eilutėje, žymeklis bus perkeltas tik po paskutiniojo.

Kai išspausdiname kintamąjį, jo ilgis simboliais yra parenkamas automatiškai.  Skyriuje "Kintamieji" trumpai aptarėme String kintamąjį. Kintamųjų aprašyme laužtiniuose skliaustuose šalia jo galime nurodyti būsimą String ilgį. Sakinys "x : String[15]" reikš, jog kintamajam x bus skirta 15 laisvų vietų. Jeigu kintamasis bus vos iš 5 simbolių, likusi neišnaudota vieta bus tuščia erdvė. Nenurodžius sakinio ilgio kintamieji gali "lipti" vienas ant kito, tuomet susigaudyti, kas vyksta, gali būti itin keblu. Norint to išvengti ir naudojamas toks ilgio nurodymas.

Galimas ir kitoks kintamojo ilgio nurodymas - tiesiog rašymo sakinyje. Jis yra būtinas spausdinant realiojo tipo kintamąjį. Tai padaryti galima štai taip : "WriteLn(x:5:2);". Rašome kintamąjį x, kuris yra realiojo tipo. Po dvitaškio einantis skaičius - vieta, skiriama realiojo skaičiaus sveikajai daliai, t.y. jei turime skaičių 156.94, 5 simboliai bus skiriami skaičiui 156 . Po kito dvitaškio einantis skaičius, tai vieta trupmeninei daliai, šiuo atveju 94-iems. Norėdami realųjį skaičių suapvalinti iki sveikųjų dalių, trupmeninei daliai vietos apskritai neskiriame, arba jos vietoje prirašome 0. Kitas atvejis, kai realusis skaičius iš tikrųjų yra sveikasis, tarkim 120. Jeigu nurodysime vietos kiekį trup. daliai, tai skaičius atrodys adekvačiai 120.00 ar panašiai. Nenurodę skiriamos vietos kiekio ir išspausdinę realųjį skaičių ekrane matysime labai akiai nemalonų ir nesuprantamą skaičių - raidžių junginį. Sveikajam skaičiui nurodyti skiriamos vietos dažniausiai nėra būtina.

Įvestis

Suvokti, kaip veikia įvestis, gali būti šiek tiek sudėtingiau. Programuodami tiesiog parašome, ką norėsime rodyti ekrane. Tačiau tai, kokius kintamuosius programa turėsi nuskaityti iš vartotojo įvesties, mes taip pat turime numatyti ir nurodyti. Parašykime programą, kuri nuskaitys 3 vartotojo įvestus skaičius ir juos vėliau išspausdins ekrane:

Program skaiciai;
var x, y, z : integer;
Begin
WriteLn('Įveskite pirmąjį skaičių');
ReadLn(x);
WriteLn('Įveskite antrąjį skaičių');
ReadLn(y);
WriteLn('Įveskite trečiąjį skaičių');
ReadLn(z);
WriteLn('Jūsų įvestieji skaičiai yra : ',x,' ',y,' ',z);
ReadLn;
end.

Atkreipkime dėmesį į tai, jog nuskaitėme sveikuosius ( integer ) skaičius. Įvedę realujį skaičių arba tekstinį simbolį programos vykdyti negalėsime.

Jeigu supratote, kuo skirasi Write ir WriteLn, suprasti skirtumą tarp Read ir ReadLn nebus sunku. Skirtumas toks pat - žymeklio padėtis po sakinio įvykdymo. Pademonstruosime, kaip atrodys programa, kai visus kintamuosius nuskaitysime vienu sakiniu:

program skaiciai2;
var x, y, z : integer;
Begin
WriteLn('Įveskite tris skaičius');
ReadLn(x, y, z);
WriteLn('Jūsų įvestieji skaičiai yra : ',x,' ',y,' ',z);
ReadLn;
end.

Programavime labai svarbu kompaktiškumas ir aiškumas, todėl rekomenduojama programas daryti kuo trumpesnes. Taip ne tik palengvinsite gyvenimą kompiliatoriui, bet ir lengviau rasite klaidą ją padarę.