BLOGas.lt
Lėktuvų bilietai
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

Simbolių masyvai

Masyve galime saugoti ne tik skaičius, bet ir simbolius (raides).
Simbolių masyvą aprašome taip pat, kaip ir skaičius, tik kintamųjų
tipas turi būti char.

Hmm. kažkaip viskas kitas tas pats, kaip ir paprastame pasyve.


Simbolių eilutė.

Ji žymima žodeliu string. Šį tipą galime pavaizduoti taip:

type string = array [0..50] of char;

Pastebime, kad eilutė masyvą.
Eilutės savybė nulinio indeksas nurodo, kiek yra simbolių.
Pvz:

var A: string;



A:= 'Pascal'

Nulinis eilutės A indeksas norodys, kad yra 6 simboliai.
Jei reikia kintamajam priskirti simboliaus kiekio skaičių pasinaudosime funkcija Length.
Pvz:
var A: string; n:integer;


A:= 'Pascal';
n:= length (a);   {n bus lygus 6}

var A: string;


A:= 'Pascal'

Kartais labai naudinga vartoti sutrumpintas eilutės.

var A: string[6];

Tokioje eilutėje negali būti daugiau negu 6 simboliai.

Rodyk draugams

Veiksmai su masyvo elementais

Įtariu, kad nelabai įkirtot tą masyvo naudojimą. Tai gi šį kartą su pavyzdžiais ir t.t. paaiškinsiu.

Su masyvo elementais galime atlikti visus įprastus programavimo veiksmus (apie juos rašiau “Skaičių tipai ir veiksmai su skaičias).

Pirmiausia, kaip žinia, reikia aprašyti kintamuosius. Aprašoms

type   Mas = array [1..50] of integer;
           var A, B : mas;
                   i, n, k :  integer;

Dažniausiai reikia užpildyti masyvą pradinėmis reikšmėmis (duomenimis). Tam mums prireiks ciklo for:
for i:= 1 to 50 do
     A[i]:=  0;

Norint išpausdinti ar įvesti duomenis į masyvą reikia naudoti tą patį ciklą (for), bet pakeisti vidų.
Readln (n);
for i:= 1 to 50 do

    
Readln (A[i]);
Analogiškai galima ir išpausdinti tik
vietoj Readln reikės naudoti WriteLn.

Kartais tenka sulyginti masyvus. Ta prasme iš vieno masyvo elementus pervesti į kitą.
Va šiam atvejui yra labai parastas būdas. tiesiog parašyti A:=B;
Beje, tai vienintelis galimas veiksmas su masyvu. Aišku, galima ir su for ciklu, bet jį naudosime tik tuo atveju, kai masyvai neto paties tipo.

Labai dažnai prireikia rasti masyve elementų skaičių, kurie tenkina kokią nors sąlygą (pvz: didesni už nulį, mažesni už 5). Tada remsimies Didžiausios (mažiausios) reikšmės paieška ir bus taip:

k:= 0; {–nulinių elementų skaičius–)
for i:= 1 to n do { n- masyvo elementų skaičius–}
     if A[i] =  0
         then k:=k+1;

PS. Bene vienas svarbiausių Pascal programavime yra masyvas, tai jei nesuprantate klauskite.



Rodyk draugams

Masyvas

Tai gi tęskime masyvo aiškinimą.

Masyvo indeksas turi būti
sveikasis skaičius (integer). (taip būna dažniausiai)
Kintamuosius galima numeruoti ir raidėmis. Tuomet indekso
kintamasis turi būti simbolinio (
char) tipo.

Masyvo kintamiasias gali būti bet kuris duomenų
tipas. Svarbu, kad vieną masyvą sudarantys elementai būtų to paties tipo.

Kadangi integer tipas turi daug reikšmių, tai būtina nurodyti mažiausią ir
didžiausią leistiną reikšmę.

Programuotojas turi pats
susikurti reikalingą masyvo tipą.
Po to galima
aprašyti sukurto masyvo tipo kintamuosius. Masyvo tipų ir kintamųjų aprašų
pavyzdžiai:

type
   Masyvas1 = array [1..50] of real;
 

Čia pavartota dar viena aprašų rūšis – duomenų tipų, kuris
pradedamas nurodžius žodį
type. Tipo aprašo kairėje lygybės pusėje nurodomas naujasis tipo
vardas, dešinėje – tipo vardas.

Masyvų elementai vartojami reiškiniuose bei kitose konstrukcijose
taip, kaip ir paprasti kintamieji. Visam masyvui iš karto galima taikyti tiktai
priskyrimo operaciją, tačiau tokiu atveju būtina, kad abu operacijoje nurodomi masyvai
būtų aprašyti vienodai (tuo pačiu masyvo tipu):

type Mas = array [1..20] of char;
var A, B : Mas;


A := B;

Masyve galima laikyti ne daugiau reikšmių negu nurodyta jo apraše.
Sakydami, kad masyve, pavyzdžiui, yra 10 skaičių, suprasime, kad pirmasis iš jų yra
pirmoje vietoje, antrasis – antroje ir t. t. Programose labai svarbu stebėti, kad
indekso reikšmė visuomet būtų iš aprašyto intervalo.

Jeigu pirmojo elemento indeksas yra vienetas (patogiausias atvejis, nes
taip priimta ir matematikoje), tuomet elementų skaičius ir paskutinės įrašytos
reikšmės indeksas sutampa. Sakydami, kad masyve yra 10 skaičių, suprasime, kad
paskutinis 10-asis skaičius yra dešimtoje vietoje.

Įvedant duomenis tikslinga patikrinti, ar tiek elementų tilps masyve.
Jeigu ne, tuomet reikėtų numatyti galimus tolesnius veiksmus: nutraukti programos
darbą, priimti maksimaliai leistiną reikšmių skaičių, pasiūlyti vartotojui naujai
nurodyti masyvo reikšmių skaičių ir pan.

Ps. Straipsnis sukurtas remiantis Programavimo vadovėliu 11-12kl., kurį galite rasti internete adresu pprc.lt

Rodyk draugams

Masyvas. Įžanga

Programose dažnai prireikia ne vien pavienių duomenų reikšmių, o susietų duomenų rinkinių. Viena dažniausiai vartojamų duomenų struktūrų tokiems atvėjams yra masyvas. Šiandien panagrinėsime kam jis reikalingas ir kas per velnias jis yra.

Masyvais vadinami vienodo tipo duomenų rinkiniai, kuriuose svarbi elementų išdėstymo tvarka. Paprasčiausias žymėjimas yra numeracija eilės tvarka. Dažniausiai numeracija pradedama vienetu. Tie numeriai vadinami indeksais. Masyvo rašomi indeksai rašomi šalia vardo laužtiniuose skliaustuose.

Pateiksiu geriau pavyzdinį aiškinimą:
Įsivaizduokite esate laimingas žmogus ir kiekvieną kartą Teleloto žaidime laimite po automobilį. Jau turite 10 automobilių.
Ir kad nereikėtų kiekvieną kartą ieškoti, kurios mašinos rakteliai. Jūs susinomeruojate. 1- pirma laimėta mašina ir t.t.
Taip kartu žinosite, kuria pirmą laimėjote ir kurios rakteliai yra jūsų rankoje.

Jei dar neaišku aiškinu papraščiau:
Yra skaičių eilė (5, 20 ,25, 3, 6, 4, ..). Norint su jais atlikti juos reikia juos kur nors susirašyti, vietoj to, kad įsivesti begalę kintamųjų. Pasinaudosime masyvu. A[1] bus lygu 5 ir t.t.

Kitą kartą sužinosite kaip juo naudotis ir t.t.
Jei dar neaišku, tai paaiškės, kai pradėsiu aiškinti kaip viską rašyti ir t.t.

Rodyk draugams

Funkcijos

Šį kartą apie funkcijas. Jos panašios į procedūras, bet kartu ir skirtingos. Tai gi kuo jos panašios ir kuo jos skiriasi?

Panašumai į procedūrą:

Kreipimusi.
Pagrindiniai veiksmai.
Parametrų “atėjimu”.

Skirtumai:

Funkcijas turi tik vieną rezultatą.
Būtinai turi būti vienas priskyrimo sakinys.

Vėl pabandysiu išaiškinti pavyzdyje kaip viskas vyksta.

Function Suma (a, b :integer):longint;

Suma - funkcijas pavadinimas (antraštė) ir kartu kintamasis.
a,b - a, b -  kintamieji, kurie bus paimti iš programos. Jų reikšmė nepasikeis, po funkcijas įvykdymo.
: longint; - tai funkcijas rezultato tipas.

begin
suma := a+b;
end;

suma - funkcijos kintamasis, reikšmė.
Funkcija, kaip ir procedūra pradedama žodžias begin ir baigiama end;.

Pavyzdys, kaip funkcija atrodo programoje.

Program antra;
  {——————–}
  Function suma (a, b:integer):
longint;
      begin
          suma:=a+b;
       end;
{——————–}
   var a, b:longint;
begin
 Writeln ('Įveskite  du skaičius');  Readln (a,b);
 Writeln ('Dviejų skaičių suma ', Suma (a,b));  Readln;
end.

Atreipkite dėmesį į skirybos ženklus. Kintamųjų tipai turi sutapti, bet funkcijos rezultato tipas nebūtinai turi sutapti su kintamųjų tipo. Beje jei radote kažkokių netikslumų ar šiaip iškilo problemų rašykite tikrai padėsiu, atsižvelgsiu.

Rodyk draugams

Procedūros

Procedūra pradedama antrašte. Pirmasis antraštės žodis - procedure. Paskui suprantama, kad turi būti vardas. Vėliau skliaustuose nurodami kintamieji kurie bus “pasiimti” (gražinti) iš (į) pačios programos.
Veiksmai nurodomi taip pat, kaip ir programoje.

Manau, kad geriausia būtų išaaiškinti pavyzdžiu.

procedure suma (a, b :longint; var sm :lonint);

  procedure, kaip jau minėjau antraštės žodis.
suma procedūros pavadinimas.
a, b -  kintamieji, kurie bus paimti iš programos. Jų reikšmė nepasikeis, po procedūros įvydymo.
sm - kintamasis, kuris bus pasiimtas iš programos (prieš kreipinį reikia nurodyti, kad jo reikšme 0). Jo reiškmė pasikeis įvydžius programą.

begin
sm:= a+b;
end;

Procedūra, kaip ir programa pradedama žodžias begin ir baigiama end;. Toliau toki patys veiksmai kaip ir programoje.

Pavyzdys, kaip procedūra atrodo programoje.
Program pirma;
  {——————–}
  procedure suma (a, b:longint; var sm :longint);
      begin
          sm:=a+b;
       end;
{——————–}
   var a, b, sm :longint;
begin
 Writeln ('Įveskite  du skaičius');  Readln (a,b);
  Suma (a,b,sm);
  Writeln ('Dviejų skaičių suma ', sm);  Readln;
end.


Beje kintamųjų tipai turi sutapti. Kitaip tariant jei kreipinyje yra visi integer tipo, tai ir procedūros antraštėje turi būti visi integer. Manau esme supratot. Jei nesupratote klauskite drąsiai. Padėsiu. 

Rodyk draugams

Proceduros ir Funcijos. Įžanga.

Programa gali turėti vienodų veiksmų. (pvz: kelimą kūbiniu laipsniu du kartus daugintume iš to skaičiaus).
Šiandien bus tik įvadas, tai yra procedūrų ir funkcijų reikšmė ir t.t.

Dažnai uždavinį lengviau programuoti išskaidžius į dalis (spaudinimo, nuskaitymo, veiksmų).
Kuo savarankišesnės dalys, tuo lengviau sudaryti ir aiškintis programos klaidas.
Atskiros programos dalys, galinčios turėti savo kintamiuosius ir pradinius duomenys vadinamos procedūromis ir funcijomis.
Jose vartojami duomemys ir veiksmai aprašomi atskirai. Priėjus programos vietą, kurioje reikia atlikti procedūrą (funkciją), pakanka parašyti kreipinį į ją.
Į ta pačia procedūra (funkciją) galima krieptis daug kartų. Procedūrų (funkcijų) skaičius programose neribojamas.

Informacija tarp procedūrų, funkcijų ir programos gali būti persiunčiama šias būdais:
1. Parametrais - perduodama kintamųjų reikšmė ir vardai;
2. Funcijų vardais - perduodami tik rezultatai;
3. Išoriniais (globalinias) vardais.

Visos programoje vartojamos procedūros (funcijos) (išskyrus standartinias) turi būti aprašytos programoje.

Kaip viskas daroma ir kitus niuansus paiškinsiu tolimesniuose įrašuose.

PS. Šį įrašas rėmesi knyga “Programavimo pradmenys” XI-XII klasėms. 

Rodyk draugams

Didžiausios (mažiausios) reikšmės paieška

Tai dažnai pasitaikantys programavime uždaviniai.

Populiariausias sprendimo būdas:
Pirmojo kintamojo reiškmė prilyginama didžiausia ir jinai nesikeis kol neras didesnės.
Ir aišku nepamirštame ciklo (šiuo atveju taikysime while), bet vartotoją reikia informuoti, kad paskutinys skaičius turi būti nulis. Kitaip sakant 0 reiškia pabaigą.
Pvz:
WriteLn ('Įveskite skaičių'); Readln (n);
D:=x;
while x<>0 do
 begin
  if x > d the d:=x;
  WriteLn ('Įveskite kitą skaičių'); Readln (x);
 end;
Writeln (d); Readln;

O jei reikia rasti mažiausią reiškmę, reikia pakeisti ženklą > į ženklą <.

Yra ir kitų būdų rasti didžiausia.
Vienas iš populiariasnių tai paprašyti vartotoją įvesti vedamų kiekį.
Šiuo atvejų programa atrodytų taip:

WriteLn ('Įveskite kiekį'); Readln (n)

D:=x;

for i :=1 to n do

  if x > d the d:=x;
Writeln (d); Readln;

Rodyk draugams

Loginiai duomenys

Programuojama ne tik sveikaisias bei realiasias skaičiais,
bet ir loginio tipo duomenimis.

Palyginimo ir loginių operacijų rezultatas yra loginės reikšmės TRUE (tiesa) arba FALSE (melas)

Kintamieji, kurių tipas yra boolean, vadinami loginia kintamieji. (Pvz: var x:boolean;)

Jiems galima priskiti logines reikšmes (true arba false) (Pvz: x:=True;)

Procedūra Write išpausdina žodžius true arba false.

Loginiams kintamiesiems galioja lyginimo ir loginės operacijos (or, and, not)

OR – vienas iš kintamųjų turi atitikti sąlyga. Ji atitinka žodį ARBA  (Pvz: if (x>10) or (y<10) then z:=0;  Z reikšmė bus lygi nuliui, kai x bus didesnis už 0 arba y mažesnis)

AND- visi kintamieji turi atitikti sąlyga ir tik tada vyks operacijos (ciklas, sąlygos sakinio then reikšmė). Kitaip sakant AND reiškia matematinę daugyba (*) ir atitinka žodį IR (Pvz: if (x>10) and (y<10) then z:=0;  Z reikšmė bus lygi nuliui, kai x bus didesnis už 0 ir y mažesnis)

NOT- paneigimas (galioja tik loginėms reikšmėms). Atitinka žodį NE(Pvz: x:= not true, bus x reikšme false)

Rodyk draugams

Simboliai

Programavime (FPS) yra netik skaičiai, bet raidės ir žodžiai. Tai šį kartą tą ir panagrinėsime.

Visi simboliai simboliai Pascaliu aprašomi kodavimo lentelėmis. Simbolius attitinka jų eilės numeris.
Simbolį galima nurodyti jo numeriu arba vaizdu (pvz A - 65 nr., o a- 97 nr.)
Kintamajam, kuris yra simbolis, turi būti priskirtas tipas char. (var a:char;)
Simboliai rašomi, tarp apostrofų (' '). (Pvz: x:='a')
Didesnis simbolis bus tas, kurio numeris didesnis (Pvz: a didesnis už A)
Kintamojo reikšmė gali būti nurodyta ir numeriu (pvz: x:=#65) arba naudojant funcija Chr. (Pvz: x:=chr (65);)
Simbolio numerį galima sužinoti naudojant funciją Ord. (Pvz: nr:=Ord ('a');)

Rodyk draugams