Category Archives: Programski jezici

Basic, Delphy, Pascal, C++, Python i ostali programski jezici.

Pascal: Funkcije i procedure (nastavak)

Ovo je nastavak prethodnog texta koji odvajamo zbog preglednosti. Kao sto smo vec pomenuli, funkcije i procedure su dva tipa potprograma. Ovo vazi za pascal, python kao i vecinu modernih programskih jezika. Razlika je sto funkcije vracaju neku vrednost u glavni program, dok procedure jednostavno urade ono zbog cega su pozvane i tu im se zadatak zavrsava. One medjutim mogu primati argumente iz glavnog programa, na osnovu kojih ce izvrsiti svoj zadatak. Pogledajmo primer:

program Procedura;
uses crt;
var
n:integer;

procedure lines(c:byte; lin:integer);
var
m:integer;
begin
textcolor(c);
gotoXy(10,lin);
for m := 1 to 10 do
begin
Write(chr(196));
end; end;

begin
for n := 1 to 7 do
begin
lines (n,n);
end;
readln;
end.

U ovom primeru nasa procedura ispisuje linije u razlicitim bojama u sukcesivnim redovima. Argumente koje prima su boja i linija. Iz glavnog programa for petlja poziva proceduru i salje joj parametre za oba elementa koji se povecavaju za jedan. Rezultat je program koji ispisuje 7 linija u isto toliko boja.

Kao sto smo vec pomenuli, procedure mogu da rade i bez argumenata. Tada ih jednostavno pozivamo iz glavnom programa imenom. U tom slucaju funkcionisu recimo kao klasicni potprogrami iz Basica. Sada cemo prethodni primer preraditi tako da funkcionise na ovaj nacin.

program Procedura2;
uses crt;

procedure xyz;
var
n,m:integer;
begin
for n := 1 to 7 do
begin
textcolor(n);
gotoXy(10,n+5);
for m := 1 to 10 do
begin
Write(chr(196));
end; end; end;

begin
write('Nasih 7 linija >>');
xyz;
readln;
end.

Ovde smo najpre definisali proceduru xyz koja crta 7 linija u duginim bojama. Zatim smo jednostavno pozvali xyz iz glavnog programa. Naravno, ovaj pristup ima smisla u koliko se radnja ponavlja vise puta. Primere namerno pravimo tako da budu jednostavni, da bi se lakse ilustrovali principi i metod rada.

Vise o procedurama procitajte ovde i ovde.

Advertisements

Python http server u jednoj liniji u terminalu

Kao sto naslov kaze, uz pomoc Pythona, iz terminala mozete podici web, odnosno http server u samo jedno komandnoj liniji, bez potrebe za instaliranjem Appache web servera i slicnih komplikacija. Idealno, ako na brzinu zelite da podignete server da probate nesto ili da delite fajlove preko lokalne mreze.
Server ce biti podignut na portu 8000, ako zelite na portu 80 ili nekom drugom portu ispod 1024, treba da kucate sudo ispred komande.
Pokretanje servera sa sudo privilegijama nikako ne preporucujem.

U narednim primerima ce biti podignut http server. Dostupni fajlovi ce biti u trenutno aktivnom direktorijumu.
Za potrebe testiranja, napravite direktorium i udjite u taj direktorijum, u terminalu kucajte:
mkdir brzihttpserver
cd brzihttpserver

Radi potrebe testiranja iskopirajte fajlove u taj direktorijum. Ti fajlovi ce biti vidljivi u web pregledacu.
Ako se u direktorijumu nalazi fajl index.html, taj fajl ce biti automataski otvoren u web pregledacu.

Pokrenite terminal i kucajte sledece:
Primeri za Python 2.x:

Pokrece server na portu 8000:
python -m SimpleHTTPServer
Sada u web pregledacu, u polje za adresu kucajte: 127.0.0.1:8000 ili ip_adresa_servera:8000 ako se server nalazi na drugom umrezenom kompjuteru.

Pokrece server na portu 80:
sudo python -m SimpleHTTPServer 80
Ovde je dovoljno kucati 127.0.0.1 ili ip adresu umrezenog kompjutera, ako se server nalazi na drugom kompjuteru.

Primeri za Python 3.x:

Pokrece server na portu 8000:
python3 -m http.server
Sada u web pregledacu, u polje za adresu kucajte: 127.0.0.1:8000 ili ip_adresa_servera:8000 ako se server nalazi na drugom umrezenom kompjuteru.

Pokrece server na portu 80:
sudo python3 -m http.server 80
Ovde je dovoljno kucati 127.0.0.1 ili ip adresu umrezenog kompjutera, ako se server nalazi na drugom kompjuteru.

Pascal: Funkcije i procedure

U Pascalu postoje dva tipa potprograma, funkcije i procedure. Razlike je sto funkcije vracaju neku vrednost u glavni program, dok procedure jednostavno izvrse ono zbog cega su pozvane. Inace glavni razlog za koriscenje potprograma je bolja organizacija. Ako neki proces ponavljamo nekoliko puta na vise mesta u programu, logicno je da ga napisemo jednom i kasnije pozivamo kada nam treba. Takodje, ovakve potprograme mozemo koristiti kasnije i u drugim programima. Pogledajmo nekoliko primera.

program Funkcije;
var
a,b,v: integer;

//funkcija koja vraca veci broj
function max(x,y:integer): integer;
//lokalna varijabla unutar funkcije
var
calc: integer;
begin
if (x > y) then calc := x else calc :=y;
max := calc;
end;

//glavni program
begin
write('Unesite prvi broj: ');
readln(a);
write('Unesite drugi broj: ');
readln(b);
writeln('--------------------');
//pozivamo funkciju
v := max(a,b);
writeln ('Veci broj je: ',v);
readln;
end.

U ovom primeru smo najpre deklarisali funkciju max koja od dva poslata broja vraca veci. Zatim smo je pozvali iz glavnog programa da bi odredili koji je broj veci od dva uneta, i na kraju ispisali rezultat na ekranu. Kao sto ste mogli da vidite, funkcije se definisu sintaxom:

function ime(argumenti:tip; argumenti2:tip2;..):izlazni tip

.. i na kraju vraca rezultat u formatu: ime := neki proracun. Ona moze sadrzati i lokalne varijable koje smo u nasem primeru ubacili samo radi demonstracije, inace nije bilo neophodno. Pogledajmo jos jedan primer.

program Funkcije2;
var
a,b:integer;
//direktno vracena funkcija
function god(a,b:integer):integer;
begin
god := a-b;
end;

//glavni program
begin
write('Unestite vase godiste: ');
readln(a);
write('Unestite aktuelnu godinu: ');
readln(b);
writeln('--------------------');
writeln('Ove godine punite ',god(b,a),' god.');
readln;
end.

Ovaj program je vrlo slican, i demonstrira vracanje rezultata u jednoj liniji bez dodatnih internih varijabli. Takodje i pozivanje funkcije direktno iz druge komande ili izraza, bez dodatnih spoljnih varijabli.

Vise o potprogramima u Pascalu mozete pogledati ovde.

Pascal: Stringovi

Stringove smo vec pominjali i koristili u prethodnim primerima. Oni predstavljaju niz karaktera i kao takvi su jedan od najbitnijih elemenata u svim modernim programskim jezicima opste namene. Ovde cemo obraditi neke od brojnih funkcija i operacija sa stringovima u Pascalu.

Pogledajmo sada jedan primer sa stringovima:

program Stringovi;
uses
crt;

var
ime,pre,c,n:string;

begin
write('Unesite ime: ');
readln(ime);
write('Unesite prezime: ');
readln(pre);
c := ' '; //dodajemo razmak
clrscr;
//nastavljanje
writeln('Puno ime je: ', concat(ime,c,pre));
//moze i sa +
c := ime+pre;
writeln('Zbir imena i prezimena je: ', c);
//brisanje dela stringa
n := c; //cuvamo originalni zbir
delete(c,2,3);
writeln('Zbir bez tri slova: ', c);
//razno
writeln('Broj karaktera u imenu: ', length(ime));
writeln('Zbir malim slovima: ', lowercase(n));
writeln('Zbir velikim slovima: ',upcase(n));
writeln('Pozicija prezimena u zbiru: ',pos(pre,n));
readln;
end.

U nasem programu najpre smo uneli ime i prezime. Zatim smo pomocu funkcije concat sastavili tri stringa u jedan, i demonstrirali kako se isti efekat moze postici sa prostim sabiranjem. Zatim smo obrisali deo stringa pomocu funkcije delete. Argumetni su delete(string,pocetak brisanja,duzina brisanja). U delu razno smo obradili jos nekoliko funkcija. To su length koja vraca duzinu stringu, zatim prebacivanje u mala i velika slova pomocu lowercase i upcase, kao i odredjivanje pozicije stringa u stringu pomocu funkcije pos.

U koliko pod Uses ucitate i sysutils, bice vam dostupne dodatne korisne funkcije, poput IntToStr i StrToInt. Pogledajmo jos jedan primer.

program Stringovi2;
uses
crt, sysutils;

var
ime,god,lin:string;
g,x:integer;

begin
write('Unesite ime: ');
readln(ime);
write('Unesite godiste: ');
readln(god);
clrscr;
//prebacivanje u integer i nazad
g := strtoint(god);
g := 2020 - g;
god := inttostr(g);
//sabiranje stringa
lin := '2020te punite ' + god + ' godina';
writeln(lin);
//vracamo vrednost u god
g := 2020 - g;
god := inttostr(g);
//prebacivanje u ASCII i nazad
x := ord(ime[1]);
writeln('ASCII prvog slova imena: ', x);
lin := chr(x);
writeln('Prvo slovo imena iz ASCII: ',lin);
insert(god,ime,3);
writeln('Godiste ubaceno u ime: ',ime);
delete(ime,3,4);
writeln('Obrisano godiste iz imena: ',ime);
readln;
end.

Ovde smo najpre uneli ime i godiste. Zatim smo prebacili godiste u integer da bi izvrsili racunsku operaciju, nakon cega smo vrednost opet vratili u string i ispisali na ekranu. Zatim smo prebacili slovo u ASCII vrednost i nazad, i na kraju pokazali kako se string ubacuje i izbacuje iz drugog stringa. Argumenti funkcije insert su (string koji ubacujemo, string u koji ubacujemo, mesto odakle pocinjemo). Argumenti funkcije delete su vec objasnjenji u prethodnom primeru.

Svi moderni jezici imaju brojne funkcije sa stringovima. Ovde smo obradili samo neke koje se cesto koriste. Vise o stringovima u pascalu pogledajte ovde i ovde.

Pretežno vedro v1.1

Program: Pretežno vedro
Verzija: 1.1
Namena: Prikaz meteoroloških podataka
Licenca: GNU GPL v3
Autor: SkYNeT

Program preuzima podatke sa rss fida republickog hidrometeoroloskog zavoda Srbije i prikazuje aktuelne meteoroloske podatke za izabrani grad u prozoru programa. Podaci se automatski azuriraju na svakih 30 minuta, a mozete ih i rucno azurirati, pritiskom na dugme.

Razvijam ga za Linux 32Bit/64Bit i Windows 32Bit.

———————

Program mozete preuzeti na Download strani.

Pretezno vedro

Pretezno vedro

Pascal: Nizovi (Arrays)

Nizovi su, kako im samo ime govori, elementi u programiranju koji sadrze sredjeni niz podataka. To mogu biti brojevi, stringovi, bajtovi itd. Nizovi se definisu u var bloku a zatim inicijalizuju pre koriscenja, tako sto se ispunjavaju nekim standardnim podacima. Elementima niza se pristupa pomocu rednog broja. Ovo vazi i za citanje i za pisanje. Pogledajmo sada sve ovo u praksi.

program Nizovi;
uses
crt;

var
n:integer;
//definisanje niza
a:array[1..10] of Integer;

begin
//inicijalizacija
for n := 1 to 10 do
//punimo niz brojevima
a[n] := n*n;
//citamo redne brojeve 2 i 7
writeln('Na broju 2 je ',a[2]);
writeln('Na broju 7 je ',a[7]);
readln;
clrscr;
//upisujemo 30 na mesto broj 5
a[5] := 30;
//citamo sve brojeve
for n in a do
writeln('Na broju ',round(sqrt(n)), ' je vrednost: ',n);
readln;
end.

Napomena: Ovaj program nece raditi u Dev-Pascalu zato sto on koristi verziju FPC kompajlera u kojoj ne postoji podrska za For/In strukturu. Mozete ga probati u Lazarusu, jer je podrska za ovo dodata od FPC v2.4.2. Ako insistirate na Dev-Pascal IDEu isti efekat cete dobiti ako poslednjih pet redova napisete ovako:

//citamo sve brojeve
for n := 1 to 10 do
writeln('Na broju ',n, ' je vrednost: ',a[n]);
readln;
end.

Da podsetimo, u Lazarusu ovakve programe mozete kreirati sa Project > New Project > Simple Program ili Program. Za nase potrebe preporucljiva je prva opcija.

Pogledajmo sta nas program radi. Najpre definisemo sam niz u var bloku. Zatim ga punimo brojevima tako sto na svako mesto u nizu stavljamo kvadrat rednog broja elementa. Nakon toga ocitavamo vrednost na dva mesta, da bi se uverili sta se tu nalazi. Zatim upisujemo drugaciju vrednost na mestu broj 5 (gde se nalazi 25 kao kvadrat rednog broja). I na kraju iscitavamo sve vrednosti po redu, kao demonstraciju For/In strukture. Da bi simulirali redne brojeve koristimo zaokruzivanje korena vrednosti na tom mestu. Drugi nacin da se uradi ista stvar objasnjen je u delu napomene.

Vise o nizovima mozete pogledati ovde.

Pascal: Loo(m)povanje plus

Drugi text o lupovima odvajamo zbog preglednosti. Ovde cemo obraditi jos nekoliko korisnih stvari vezano za Pascal petlje. To su brojanje unazad, brojanje na preskoke i petlja u petlji. Ovde necemo obraditi korisnu For/in strukturu, jer su nam za to potrebni nizovi. Primeri ce kao i ranije biti vrlo jednostavni da bi se video princip. A nakon toga vam mogu posluziti kao modeli za sopstvene programe.

1) Brojanje unazad

program ForUnazad;
var
a:integer;

begin
for a := 10 downto 1 do
begin
writeln('Vrednost a je ',a);
end;
readln;
end.

2) Preskoci Do/While

program Neparni;
var
a:integer;

begin
a := 1;
while a <= 10 do
begin
writeln('Vrednost a je ',a);
a := a+2; //preskacemo za 2
end;
readln;
end.

3) Preskoci Repeat/Until

program Parni;
var
a:integer;

begin
a := 2;
repeat
writeln('Vrednost a je ',a);
a := a+2;
until a > 10;
readln;
end.

4) Petlja u petlji

program PuP;
var
a,n:integer;

begin
for n := 1 to 3 do
begin
for a := 1 to 5 do
writeln('Za krug: ',n,' - Vrednost a je: ',a);
end;
readln;
end.

Ovde su data 4 jednostavna primera koriscenja petlji. Najpre smo demonstrirali kako se broji unazad pomocu for-a. Nakon toga smo dali dva primera preskakanja pomocu DoWhile i RepeatUntil i na kraju smo demonstrirali petlju u petlji pomocu dva for lupa. Za unutrasnji for nismo otvarali begin/end blok jer smo koristili samo jednu komandu, te u tom slucaju nije neophodno. U Pascalu ne postoji For/Step struktura, tipicna za neke druge programske jezike, i zato se preskoci rade pomocu drugih metoda. Naravno, sve ove petlje je moguce kombinovati u zavisnosti od situacije, potreba ili kako vama odgovara.

Pascal: Loo(m)povanje

Petlje ili lupovi su strukture u programiranju koje nam omogucavaju da delove koda ponavljamo vise puta na kontrolisan nacin. U Pascalu, slicno kao i u drugim programskim jezicima, postoji tri tipa petlji. To su Reapeat/Until, Do/While i For petlja. U koliko se unutar petlje nalazi vise komandi, one se nalaze u begin/end bloku, slicno kao kod If/then. Pogledajmo sada svaku od njih:

1) Do/While:

program DoWhile;
var
a:integer;

begin
a := 1;
while a <= 10 do
begin
writeln('Vrednost a je ',a);
a := a+1
end;
readln;
end.

2) Reapeat/Until:

program RepeatUntil;
var
a:integer;

begin
a := 1;
repeat
writeln('Vrednost a je ',a);
a := a+1;
until a = 11;
readln;
end.

3) For petlja:

program ForPetlja;
var
a:integer;

begin
for a := 1 to 10 do
begin
writeln('Vrednost a je ',a);
end;
readln;
end.

Ovde su data tri vrlo jednostavna primera, tako da mozete lako videti razliku u pristupima. Takodje ih mozete koristiti kao modele za svoje petlje. Sva tri programa jednostavno broje od 1 do 10 i ispisuju vrednost na ekranu. Obratite paznju na 2) primer u kome smo brojac postavili do 11. Ovo je zato sto kod Reapeat/Until, brojanje pocinje nakon izvrsenja prvog ciklusa. Samim tim, morali smo dodati jos jedan ciklus da bi bio ispisan i broj 10. Inace bi samo izasli iz petlje na broju 9, pa se 10ti krug ne bi ni izvrsio.

Vise o petljama u Pascalu mozete videti ovde.

Sat-Alarm v2.0

Ovo je unapredjena verzija programa Sat-Alarm v1.1 koga sam predstavio ovde.

U ovoj verziji sam dodao opciju da se menjaju teme i da se pamte izmene vremena alarma i tema. Za sada postoje samo dve teme, osnovna, ciji autor Dile i tema Tron koju sam ja napravio.
Teme i vreme alarma se pamte u fajlu sat-alarm.ini.
Izmene u sat-alarm.ini se automatski upisuju prilikom izlaska iz programa, klikom na x.
Program se razvija u Lazarusu.

Izvorni kod i iskompajliran program za Linux mozete preuzeti na Download strani.

Sat-Alarm v2.0
Namena programa: Sat sa alarmom
Autori: Dile i SkYNeT
Licenca: GNU GPL v3

Osnovna tema
osmovna tema

tema Tron
tema tron

Podesavanje alarma
Screenshot Sat-Alarm podesavanja

Da bi prikaz brojeva na satu bio korektan, morate instalirati oba fonta iz direktorijuma Fontovi.

To mozete uraditi uz pomoc prilozene skripte fontinstaler.sh.
Skripta kopira fontove u ~/.fonts, tako da ce fontovi biti dostupni samo lokalno, trenutno logovanom korisniku.
Kada skripta iskopira fontove tamo gde treba, probajte program, ako kojim slucajem opet imate problem sa prikazom, onda rucno instalirajte fontove iz direktorijuma Fontovi.

Kako instalirati fontove u Linuxu?

Kopirajte fajlove BPdotsVertical.otf i Digital Dismay.otf
u /usr/share/fonts da bi bili dostupni svim korisnickim nalozima (trebace Vam sudo sifra).

ili

Kopirajte fajlove BPdotsVertical.otf i Digital Dismay.otf
u ~/.fonts da bi bili dostupni lokalno, samo pojedinacnom korisnickom nalogu.

ili dvoklikom na fajlove BPdotsVertical.otf i Digital Dismay.otf pa install.
Ako ne otvara fajlove, desni klik na fajlove BPdotsVertical.otf i Digital Dismay.otf pa potrazite u listi Font Viwer.

Windows verzija:
Fontove mozete instalirati pokretanjem odgovarajuce skripte za Vasu verziju Windowsa.
Skripte su testirane na Windows XP i Windows 7.
Na drugim verzijama Windows-a, nisam probao skripte.
Skrita FontInstallerWin7.vbs instalira fontove u Windows 7.
Skrita FontInstallerWinXP.vbs instalira fontove u Windows XP.

Prikaz fontova u programu bi trebalo da bude korektan odmah posle izvrsenja skripte.

Ako prikaz fontova u programu, ni posle restarta nije odgovarajuci, fontove mozete instalirati rucno, na uobicajen nacin.

Kliknite na START (ili Windows dugme u donjem levom uglu ekrana)
Kliknite na Control Panel
Otvorite Fonts (ako je ne vidite prebacite pregled sa Category na Icons view)
Prevucite obe ikone fonta u Fonts.

Sat-Alarm v1.1

Ovaj put cu da Vam predstavim program Sat-Alarm.
Program je pod GNU GPL v3 licencom. Razvija se u Lazarusu. Autori programa smo Dile i ja. Da, u programu sam se drugacije potpisao. :)
Mozete preuzeti iskompajlirani fajl za Linux 32Bit. Takodje, mozete preuzeti i izvorni kod, pa ga, tada mozete sami menjati i kompajlirati za Vas operativni sistem, ako na primer koristite Windows ili Mac. Kada ga preuzmete, potrebno je da ga raspakujete negde na hard disk. Pre nego sto pocnete da ga koristite, treba da instalirate prilozene fontove. To mozete uraditi uz pomoc skripte fontinstaler.sh ili rucno u slucaju da na Vasoj Linux distribuciji kojim slucajem skripta ne radi kako treba. Za ostale operativne sisteme morate rucno instalirati fontove. Zatim pokrenite program, dvoklikom na Sat-Alarm.

Ovo je glavni prozor programa koji prikazuje trenutno vreme, datum i vreme alarma.
Screenshot Sat-Alarm
Klikom na dugme Podesi alarm otvarate prozor za podesavanje alarma.
Klikom na kvadratic Aktiviraj alarm, aktivirate ili deaktivirate alarm, Ako je kvadratic cekiran, onda je alarm aktivan i obrnuto. Kao dodatna indikacija, sluzi i prikaz vremena alarma, ako je crven, alarm je aktivan, ako je siv, alarm nije aktivan.
Klikom na dugme O programu, otvorice se prozor sa informacijama o verziji i autorima.

Ovo je prozor za podesavanje alarma:
Screenshot Sat-Alarm podesavanja
Podesite zeljeno vreme alarma, zatim kliknite na Potvrdi i aktiviraj vreme alarma.
Ako ne zelite da menjate nista, samo kliknite na Odustani od izmena.

Sat-Alarm v1.1
Namena programa: Sat sa alarmom
Autori: Dile i SkYNeT
Licenca: GNU GPL v3

Program mozete preuzeti na Download strani.

%d bloggers like this: