Nuitka – kompajler za Python

Python je interpretirani objektno orijentisani programski jezik. Interpretirani, uprosceno znaci da ne mora da se kompajlira, ali je potrebno da na sistemu na kojem se pokrecu Python programi bude instaliran Python. Ukoliko Python nije instaliran na nekom kompjuteru, to znaci da ni vasi programi nece raditi na tom kompjuteru. Ovde prvenstveno mislim na Windows, jer Windows po defoltu ne dolazi sa preinstaliranim Pythonom. Na Linuxu to nije problem, jer svaki Linux dolazi sa preinstaliranim Pythonom.

Nuitka je kompajler, koji prevodi Python program u binarni izvrsni fajl. Samim tim, program koji iskompajlirate na vasem kompjuteru, radice na drugom kompjuteru koji nema instaliran Python. Osim te pogodnosti, Nuitka ukljucuje sve biblioteke koje koristite u vasem Python programu. Sto je dobra stvar jer cak i ako na nekom kompjuteru postoji instaliran Python, moguce da nema instalirane potrebne biblioteke koje ste koristili u vasem programu. Citao sam neke komentare na internetu, cesto se pominje i ubrzanje u izvodjenju vaseg programa, od nekih 25%. Na mom testu, koji sam radio sa jednim mojim programom za merenje brzine, rezultati su pokazali ubrzanje, ali daleko manje od komentara koje sam citao. Ali to zavisi i od testova koji su radjeni.

Vazno je jos da pomenem i to da Nuitka pravi jako velike izvrsne fajlove, jos ako koristite i biblioteke, izvrsni fajl sa ukljucenim bibliotekama moze da bude i nekoliko stotina megabajta. Problem sa uvezenim bibliotekama je sto su velike, a Nuitka ne moze da zna sta tacno koristite iz tih biblioteka, pa ih ukljucuje kompletne.

Ukoliko koristite Mint / Ubuntu, Nuitka mozete instalirati komandom:
sudo apt install nuitka

Vise informacija mozete saznati na: https://nuitka.net/

GO (GOLANG) – 03 – komentari

Komentar je tekst koji se ignorise prilikom izvrsavanja programa.
Komentari se koriste da se objasni deo koda.
Takodje mogu da sluze kao podsetnik, u situaciji, kada nakon nekoliko meseci odlucite da napisete novu verziju programa, a ne mozete da se setite sta koji deo programa radi. Zato upisete komentar koji objasnjava cemu sluzi deo koda i lakse cete se setiti sta koji deo programa radi. Isto tako, ukoliko neki drugi programer nastavi da radi na vasem programu, komentari ce mu pomoci da lakse shvati sta koji deo programa radi.
Komentari se takodje mogu koristiti za sprecavanje izvrsavanja koda prilikom testiranja.
Programski jezik Go podrzava komentare u jednom redu ili vise redova.

Jednoredni komentari pocinju sa // iza stoji komentar. Pogledajte primer ispod:

// Ovo je primer komentara.
fmt.Println("Hello World!")

Jednoredni komentari mogu stajati iza funkcije, a ne samo u zasebnom redu. Funkcija ce da se izvrsi, komentar nece smetati izvodjenju funkcije.

fmt.Println("Hello World!") // Ovo je takodje komentar

Komentari u vise redova pocinju sa /* i zavrsavaju se sa */

/* Ovo je komentar
u vise redova.
Ovo je poslednji red komentara. */
fmt.Println("Hello World!")

Ispod je primer komentara koji sprecava izvrsavanje koda.

fmt.Println("Hello World!")
// fmt.Println("Ovaj kod se ne izvrsava.")

GO (GOLANG) – 02 – podesavanje Visual Studio Code editora i Hello World

U prethodnom tekstu sam pisao o instalaciji programskog jezika Go i pisanje programa Hello World u Geany editoru. U ovom tekstu nastavljamo sa programskim jezikom Go, ali ovog puta sve to radimo u Visual Studio Code.
Visual Studio Code razvija Microssoft i to je jedan od Microsoftovih open source projekata. Nisam bas ljubitelj Microsoftovih proizvoda, ali za nekoliko njihovih proizvoda stvarno nemam zamerke. Jedan od tih proizvoda je Visual Studio Code. Postoji i verzija koja je oslobodjena Microsoftove telemetrije, VSCodium, ali ukoliko ste pocetnik, ipak, preporucujem Visual Studio Code. Iz dva razloga, prvo, Microsoftov marketplace sa dodacima za razlicite programske jezike je daleko bogatiji od marketplace VSCodium i drugo, VSCodium morate, za sada, rucno updateovati kada se pojavi nova verzija, Visual Studi Code to radi automatski.

VSCode i VSCodium se razvijaju za Linux, Windows i Mac.
Ispod su linkovi za oba programa, pa odlucite sami sta zelite da instalirate:
Microsoft Visual Studio Code: https://code.visualstudio.com/
VSCodium: https://vscodium.com/

U daljem tekstu nastavljam sa postupkom podesavanja Visual Studio Code. Postupak je slican i za VSCodium, jedino se dodaci za podrsku programskim jezicima razlikuju.

  1. Pokrenite VS Code.
  2. Otvorite menadzer ekstenzija, klikom na ikonu Extensions sa leve strane. (precica sa tastature ctrl+shift+x)
  3. U pretragu ukucajte go
  4. U listi ekstenzija potrazite ekstsenziju Go koju razvija Google (Go Team Google) – Ovaj deo se razlikuje u odnosu na VSCodium, tamo nema Go ekstenzije koju razvija Google, ali postoji ekstenzija drugog razvojnog tima.
  5. Instalirajte ekstenziju klikom na Install i sacekajte da se instalacija zavrsi.
  6. Prtitisnite ctrl+shift+p da bi ste otvorili komandnu liniju u ukucajte:
    Go: Install/Update Tools
  7. U mom slucaju nije bilo potrebe za dodatnim instalcijama, ukoliko kod Vas postoji neka opcija za instalacije, instalirajte sve ponudjeno i kliknite na ok.

Sada je VSCode spreman za programiranje u Go programskom jeziku.

U prethodnom tekstu smo odmah krenuli sa Hello World. To je zapravo bio takozvani “quick and dirty” nacin. Odnosno brzi nacin da dodjemo do Hello World primera. U principu programi programirani na taj nacin ce raditi, barem jednostavni programi. U vecini tekstova preporucuju da se napravi radni folder / direktorijum za projekat, nakon toga da se u radni direktorijum inicijalizuje Go modul.

Pravljenje direktorijuma:
mkdir "hello"

Udjite u direktorijum:
cd hello

Inicijalizacija Go modula:
go mod init hello

U osnovi, ova komanda kreira go.mod fajl u hello direktorijumu. Ovaj fajl prati sve dependency-e koje nas modul koristi. Drugim recima, mozete zamisliti da je to fajl za upravljanje dependency-ima. Go mod init komanda omogucava upravljanje dependency-a za projekat.

Ovde, hello nije nista drugo do putanja modula. Obicno ce ukazivati na lokaciju gde ce biti prisutan izvorni kod. Na primer, ukoliko se direktorijum hello nalazi u direktorijumu programiranje, onda kucate:
go mod init programiranje/hello

Mozete pogledati sadrzaj fajla go.mod, komandom: cat go.mod u ovom primeru izgleda ovako:

module hello

go 1.19


Prvi red je putanja do modula, u poslednjem redu je verzija Go.

Sledeci korak je programiranje.
Pokrenite VS Code, kliknite na File -> New Text File i kucajte kod. I ovde cu upotrebiti isti kod kao i prosli put.

package main

import "fmt"
func main() {
fmt.Println("hello world")
}

Zatim, sacuvajte izvorni kod u direktorijum hello, File -> Save As, nazovite ga hello.go i kliknite na Save.
Ukoliko ovo radite prvi put, moze se desiti da VS Code ponudi da instalira neke dodatke za Go. Kliknite na Install All.

Sada, mozete testirati Vas program. U terminalu udjite u direktorijum hello, ukoliko to niste uradili. To mozete uraditi i iz internog terminala u VS Code. Zatim kucajte: go run hello.go da bi ste pokrenuli program ili kucajte:
go build hello.go da bi ste kompajlirali program. Zatim, kompajlirani program mozete pokrenuti sa ./hello

Toliko za ovaj put.

GO (GOLANG) – 01 – Instalacija, podesavanje Geany editora i Hello World

Evo posle duze pauze ponovo pisem, nikako da nadjem vremena da redovnije pisem. Ovom prilikom nastavljam seriju tekstova o programskim jezicima, koju sam zapoceo u ovom postu: https://kompjuteri2011.wordpress.com/2022/09/12/a-sad-malo-o-programskim-jezicima/

Go mozete preuzeti sa adrese https://go.dev/dl/ kada se otvori web strana, mozete izabrati verziju za koji operativni sistem zelite da preuzmete instalaciju. Go mozete probati online iz web pregledaca na adresi https://play.golang.com/.

Nakon preuzimanja instalacije, potrebno je instalirati Go. Detaljno uputstvo se nalazi na sledecem linku: https://go.dev/doc/install
Ovde cu samo ukratko napisati postupak instalacije u Linuxu.
Ukoliko imate instaliranu stariju verziju Go, a preuzeli ste noviju verziju, prvo izbrisite staru instalaciju, tako sto izbrisete ceo folder /usr/local/go
Brisanje foldera i instalaciju mozete uraditi kucajuci komandu u terminalu, naravno, prvo udjite u folder gde se nalazi instalacija koju ste preuzeli. U komandi izmenite naziv instalacione arhive, umesto, kao u ovom primeru go1.19.2.linux-amd64.tar.gz, upisite verziju fajla koju ste preuzeli. Ovo je samo primer aktuelne verzije u trenutku pisanja ovog teksta. Lako se moze desiti, na primer ukoliko ovaj tekst citate za par nedelja, da se pojavi nova verzija Go.

sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.19.2.linux-amd64.tar.gz

Zatim, treba da dodate putanju do Go foldera na nivou korisnika ili na sistemskom nivou.
Za nivo korisnika upisite u fajl: $HOME/.profile sledecu liniju:

export PATH=$PATH:/usr/local/go/bin

Za sistemski nivo upisite gore navedenu liniju u fajl: /etc/profile
Ja sam to uradio samo za moj korisnicki nalog, to jest ubacio sam liniju u $HOME/.profile
Promena ce biti aktivna nakon ponovnog logovanja u nalog ili kucanjem komandi:

source $HOME/.profile

ili

export PATH=$PATH:/usr/local/go/bin

Na kraju proverite da li je Go dobro instaliran kucajuci sledecu komandu:

go version

Testirao sam dva IDE editora sa Go programskim jezikom. Geany i Visual Studio Code. U ovom tekstu cu koristiti Geany, za naredni tekst ostavljam Visual Studio Code. Verovatno se pitate, zasto bas ovim redosledom, jer je Visual Studio Code u ovom trenutku najpopularniji IDE editor? Jednostavno, bas zato, jer svi pisu primere za Visual Studio Code, a ne za Geany. :) Drugi razlog je sto bi tekst bio predugacak. I ovako se oduzio, bio sam u nedoumici da li primere podesavanja IDE editora da ostavim za naredni tekst.

Sto se tice Geany, sve se automatski podesi u zavisnosti od programskog jezika, koji kodirate. Kliknite File -> New i odmah sacuvajte fajl. U ovom primeru HelloWorld.go

Zatim, radi provere i primera za potrebe ovog teksta, kliknite na Build -> Set Build Commands trebalo bi da sve bude automatski podeseno kao na slici ispod.

Geany automatski generise potrebne komande za programski jezik koji kodirate. Sve je automatski odradjeno i u ovom primeru. Vazno je da dodelite ispravnu ekstenziju u nazivu fajla. Ukoliko pisete programe u Go, ekstenzija je .go, ukoliko piste programe u Pythonu, ekstenzija je .py. Ukoliko pisete progame u Free Basic, ekstenzija je .bas. Ukoliko build komande nisu automatski podesene, morate ih sami upisati. To lako moze da se desi kada radite sa Free Basic. Na kraju kliknite OK da se prihvate izmene, ukoliko ste nesto menjali ili Cancel da odustanete od promena.

Sada je najzad daosao red i na konkretno programiranje. Naravno, Hello World je verovatno prva stvar sto kucate prvi put u nekom programskom jeziku. Kazem verovatno, jer ja kucam samo TEST, ali da se ovaj put drzim utemeljene prakse sa Hello World. :)

package main

import "fmt"

func main() {
fmt.Println("Hello, World!")
}

Na kraju kliknite File -> Save da sacuvate fajl.

Vas program mozete pokrenuti i kompajlirati direktno iz Geany, zato smo i gledali Set Build Commands. Za pokretanje kliknite na Build -> Run, ukoliko je sve u redu, u terminalu ce da se prikaze poruka Hello World, kao na slici ispod. Precica sa tastature za pokretanje programa je F5.

Ukoliko ste zadovoljni programom, mozete ga kompajlirati i u tom slucaju ce biti sacuvan iskompajlirani program, koji pokrecete standardno iz komandne linije, kao i sve ostale programe iz komandne linije. Naravno, pre toga udjite u odgovarajuci folder, ukoliko folder nije u sistemskoj putanju.
Precica sa tastature za kompajliranje je F8 ili kliknite na Build -> Build
Ispod je screenshot prozora terminala, sa primerom pokretanja iskompajliranog programa.

Package main je glavni, odnosno ulazni odnosno osnovni paket.
Komandom import, uvozimo pakete koji su potrebni za izvrsavanje funkcija.
U ovom primeru imamo import “fmt”
Svaki paket je dokumentovan, pa tako i fmt. O fmt mozete procitati detaljnije ovde: https://pkg.go.dev/fmt
Zatim deklarisemo funkciju main().
Funkcijama cemo se baviti u narednim tekstovima. Za sada cu samo reci da je funkcija main() posebna funkcija, jer u toj funkciji pocinje izvrsavanje programa.

fmt.Println(“Hello, World!”) ispisuje tekst Hello Wrold!
U drugim programskim jezicima ste navikli da bude samo Print ili Println, u Go ispred Println ide oznaka paketa u kome je definisana funkcija Println.
U programskom jeziku Go, kao sto ste videli u primeru fmt.Println, ispred funkcije ide naziv paketa u kome je definisana funkcija, zatim tacka, pa na kraju sama funkcija.

Toliko za ovaj put.

A sad malo o programskim jezicima…

Poslednjih nekoliko dana sam ponovo poceo da ekperimentisem sa programiranjem. Instalirao sam i probao Rust i Go. O programskom jeziku Rust sam procitao dosta pozitivnih tekstova i komentara, da je pouzdan, bezbedan, brz, a u isto vreme, nije (toliko) komplikovan kao C/C++. Linus Torvalds, koliko vidim, predvidja da ce Rust ubrzo da bude jedan od razvojnih alata za Linux kernel. I za Go sam citao dosta pozitivnih tekstova, da je brz, da se lako uci. I eto, resio sam da ih isprobam.

Da bi ste instalirali Rust, idite na https://www.rust-lang.org/learn/get-started i pratite uputstva. Rust mozete probati i bez instalacije, iz Vaseg web pregledaca. Na adresi https://play.rust-lang.org/ se nalazi online Rust playground, gde mozete testirati Rust. Da sam odmah otisao na Rust playground, ustedeo bih bar pola sata da shvatim kako da napisem print. :) Ono sto mi se odmah nije svidelo je zvanicno uputstvo, iskreno, potrosio sam nekih sat vremena dok nisam shvato kako da napisem Hello World i da definisem neke varijable. Da sam otisao pravo na Rust playground… :) Salu na stranu, imate zvanicno uputstvo za pocetnike u Rust-u na adresi https://doc.rust-lang.org/book/. Mozda je najbolje, da odmah odete na sledecu adresu, umesto na zvanicno uputstvo, jer su stvari lepo objasnjene za totalne pocetnike. https://www.programiz.com/rust/getting-started.

Jos jedna stvar koja mi se ne svidja kod Rust-a je sto je kompajlirani fajl jako veliki. Cak i test kod Hello World kada se iskompajlira sa podrazumevanim parametrima, je veliki oko 3.7 MiB. Sa nekim optimizacijama sam uspeo da ga smanjim na 1.5 MiB, ali to je i dalje mnogo. Ovo je u Linuxu, ali mislim da je slicna stvar i u Windows verziji.

Go mozete preuzeti sa adrese https://go.dev/dl/ kada se otvori web strana, mozete izabrati verziju za koji operativni sistem zelite da preuzmete instalaciju. Poput Rust-a, i Go mozete probati online iz web pregledaca na adresi https://play.golang.com/. Kada se iskompajlira, sa podrazumevanim parametrima, program Hello World je dugacak oko 1.7 MiB. Uz pomoc optimizacija, fajl sam uspeo da smanjim na 1.2 MiB.

U ovom tekstu sam hteo da pisem samo o Rust i Go, medjutim, zaintrigiralo me je koliki su Hello World fajlovi u drugim programskim jezicima. Ovde pre svega mislim na velicinu kompajliranog fajla. Kada se Hello World kompajlira u Lazarusu, da radi u terminalu (dakle ne iz grafickog okruzenja, kako bi poredjenje bilo ravnopravno), sa default parametrima, velicina kompajliranog fajla je oko 416 KiB. Uz pomoc optimizacija, fajl sam uspeo da smanjim na 187 KiB. Necu detaljnije da se zadrzavam oko Lazarusa, jer sam o njemu vec pisao. Samo cu dodati da ga mozete preuzeti sa adrese https://www.lazarus-ide.org/index.php?page=downloads

Apsolutni sampion, sto se tice male velicine kompajliranog fajla, od testiranih kompajlera je, Free Basic. Da, dobro ste procitali Free Basic! Velicina izlaznog fajla je manja od 42 KiB. Jako dobar i optimizovan kompajler. Steta sto skoro niko ne zna za Free Basic. Free Basic mozete preuzeti sa adrese https://sourceforge.net/projects/fbc/files/. Po kvalitetu sigurno zasluzuje vecu popularnost. Takodje za razliku od ostalih programskih jezika, Free Basic je daleko najjednostavniji. Source kod je samo u jednoj liniji: print “Hello World!”

U narednom periodu, kada malo bolje savladam Rust i Go, preradicu moj Python program za testiranje brzine ostalim programskim jezicima, pa cu testirati brzine. Python vs Rust vs Go vs Lazarus vs Free Basic.

QPython 3L

U ovoj objavi predstavljam jos jedan program uz pomoc kojeg mozete programirati u Pythonu 3 i pokretati Python 3 programe na Android telefonu ili tabletu.

Za razliku od Pydroid 3, QPython 3L je besplatna open source aplikacija.

Link na Google Play Store:

https://play.google.com/store/apps/details?id=org.qpython.qpy3

Primetio sam da terminal, odnosno konzola u QPython 3L ne radi dobro sa Samsung tastaturom na Samsung A21s telefonu. Iz tog razloga sam instalirao Google GBoard. GBoard radi bez problema u konzoli QPython 3L.

U QPython 3L mozete instalirati Python pakete uz pomoc pip komande iz pip konzole. Na uobicajen nacin kao sto bi to radili na kompjuteru. Na primer pip3 install ime_paketa.

Pydroid 3

Na blogu je bilo dosta objava o programiranju u Python-u. Sve objave su se odnosile na programiranje na kompjuteru. Ovaj put predstavljam program uz pomoc kojeg mozete programirati u Pythonu 3 i pokretati Python 3 programe na Android telefonu ili tabletu.

Link na Google Play Store:

https://play.google.com/store/apps/details?id=ru.iiec.pydroid3

Pydroid 3 je integrisano razvojno okruzenje za Python 3 na Android operativnom sistemu. Prvenstvena namena Pydroid je ucenje Python-a, ali je potpuno upotrebljiv i za razvoj programa. U besplatnoj verziji se povremeno pojavljuju reklame i nije moguce instalirati premium dodatke. Probao sam nekoliko razvojnih okruzenja za Python na Androidu i Pydroid se pokazao kao najbolji, barem iz mog ugla gledanja.

PyCharm

PyCharm je IDE za Python, koji razvija firma Jet Brains. Osim komercijalne verzije, postoji i “Comunity” verzija koja je open source i besplatna.

PyCharm omogućava pametno kompletiranje koda, inspekciju koda, isticanje gresaka i nudi opcije za ispravljanje gresaka, zajedno sa automatizovanim prepravljanjem koda i bogatim navigacijskim mogucnostima.

Ono sto je zanimljivo kod PyCharma je to sto se Python program razvija u virtuelnom okruzenju. Na primer, ako ste navikli da pisete program za Python u nekom od klasicnih editora, kao na primer Geany, Prilikom koriscenja nekih eksternih modula za Python, taj modul treba da bude instaliran u sistemu. Dakle da ga instalirate sa sudo apt install… ili sa pip3 install…
To u PyCharmu nije slucaj, kada pisete Python program u PyCharmu, potrebne dodatne module instalirate za svaki projekat ponaosob. I taj modul nece biti instaliran u sistemu, vec samo u virtuelnom razvojnom okruzenju za dati projekat.

Razvija se za Linux, Windows i Mac.

Zvanicna web prezentacija se nalazi na adresi:
https://www.jetbrains.com/pycharm/

 

 

 

Pascal: Retrospektiva

Ovim tutorijalom zavrsavamo seriju lekcija o osnovnom Pascalu, za koju se nadamo da ce vam biti od visestruke koristi. Najpre, ovaj programski jezik predstavlja odlicnu kombinaciju izmedju jasnoce i upotrebljivosti, sto ga cini vrlo zahvalnim za ucenje. Takodje, ima dovoljno striktnu strukturu, u odnosu na recimo Basic ili Python, cime je stimulisana jasnoca programerskog razmisljanja. Podrska koju ima kroz razvojna okruzenja mu daju visoku upotrebljivost i perspektivu. Sve ovo skupa me je i navelo da napisem seriju tutorijala na temu, u nadi da ce dobro poznavanje osnovnog Pascala biti od velike pomoci u radu za kompleksnim okruzenjima poput Delphija i Lazarusa.

Pogledajmo sta smo do sada naucili, uz reference ka lekcijama:

1. Uvod u Pascal – Ovde smo obradili uvodni deo i opste teme poput istorijata, okruzenja i slicno

2. Dev-Pascal IDE – Razvojno okruzenje u kome je uradjena vecina primera, uz visoku kompatibilnost sa Lazarusom, kao najkoriscenijim savremenim Pascal okruzenjem

3. Pascal: Hello World – Uvodna lekcija o programiranju i opste smernice

4. Pascal: varijable i konstante – Ovde smo obradili neke od osnovnih elemenata programiranja

5. Pascal: Tok programa – Usmeravanje programa kroz koriscenje If/Then konstrukcije

6. Pascal: Tipovi i uniti – Dva bitna elementa Pascala

7. Loopovi prvi deo – Razliciti formati petlji

8. Loopovi drugi deo – Nastavak price o petljama

9. Pascal: Nizovi (Arrays) – Upotreba sredjenih podataka odredjenog tipa

10. Pascal: Stringovi – Jedan od najbitnijih elemenata svih savremenih programskih jezika

11. Pascal: Funkcije i procedure – Nacin organizacije subrutina u Pascalu

12. Pascal: Funkcije i procedure (nastavak) – Nastavak price o subrutinama

13. Pascal: Rad sa fajlovima – Bitna lekcija za praktican programerski rad

14. Pascal: Rekordi – Rudimentarni oblik baza podataka kao elemenat u Pascalu

15. Pascal: Dodatne teme – Elementi koji nisu pokriveni u posebnim lekcijama

16. Pascal: Dodatne teme (nastavak) – Nastavak prethodnog tutorijala i zadatak iz programiranja

17. Pascal: FAQ (Pitanja i odgovori) – Objasnjenja koja nisu pokrivena u ranijim lekcijama

18. Pascal: Retrospektiva – Text koji upravo citate, retrospektiva, zakljucak i resenje zadatka

Sada cemo dati jedno od mogucih resenja za predlozeni zadatak. Da se podsetimo, ideja je bila da se napravi program koji bira random broj od 1 do 70, zatim da se kroz seriju pokusaja korisnik dovode do resenja. Pogadjanje brojeva je samo jedan od brojnih standardnih programerskih zadataka za koji se nadamo da ce vam biti zanimljivi kao vezba. Ponudjeno resenje je jedno od brojnih koja se mogu primeniti, a ovde smo namerno ostavili mogucnost da se program poboljsa kroz dodavanje hendlovanja gresaka ili obavestenja da je pokusaj izvan trazenog opsega. Jos jednom, u programiranju je moguce doci do resenja na mnogo nacina i svako drugo koje radi je jednako dobro. Pogledajmo primer..

program Pogadjanje;

var
a,b:integer;

begin
//pokrecemo random-seed
randomize();

//generisemo random broj
a := random(70)+1; b := 0;

while (b<>a) do begin
write('Unesite broj od 1 do 70: ');
readln(b);

if b < a then begin writeln;
writeln('Trazeni broj je veci'); writeln;
end else if b > a then begin writeln;
writeln('Trazeni broj je manji'); writeln;
end else if a = b then begin writeln;
writeln('Cestitamo, pogodili ste broj :)');
readln; end; end;

end.

Ovo je naravno, najjednostavnije moguce resenje, a kompletan kurs sadrzi u sebi brojne mogucnosti i opcije za optimizaciju, sto je samo po sebi vredna programerska vezba.

Na kraju, postoje tri stvari koje bih dodao, u nadi da ce vam ovi saveti, od iskusnog programera, u praksi pomoci koliko je moguce:

– Sve programe kucajte rucno. Videli ste kako se Ewok igra sa kodom u video tutorijalima. To dolazi nakon mnogo godina kucanja koda.

– Igrajte se sa kodom uvek i na svaki nacin. Ovo ce pomoci da u praksi pohvatate sitne razlike ili unaprediti vase razumevanje koda i programerskih tehnika.

– Imajte na umu da je programiranje profesija, ali i igra. Kada god je moguce, sledite svoje srce – Pravite od svojih programa i zivota ono sto Vi zelite.

Srecno i uzivajte u programerskom znanju i izazovima.

Pascal: FAQ (Pitanja i odgovori)

Kada sam poceo sa serijom textova o osnovnom Pascalu, dobio sam brojna pitanja od raznih poznanika, medju kojima je bilo i iskusnih programera ali i onih koje je tema zanimala na korisnickom nivou. U ovom clanku cu probati da odgovorim na ona koja mi se cine najzanimljivijim. Neka pitanja su licna, druga se ticu same teme i kompjuterskih nauka. Nadam se da ce ovaj FAQ biti zanimljiv.

1) Zasto bas Pascal, da li se neko uopste jos uvek bavi time?

Naravno da se bavi i dobre su sanse da se ovaj trend nastavi u duzem periodu. Najaktivnija grupa je svakako okupljena oko projekta Lazarus i Free Pascal Compiler-a (FPC). Glavni razlog je korisnost i cena. Besplatan je, primenljiv na svim sistemima, i podseca na Delphi na kome su mnogi odrasli, kad je u pitanju brzi razvoj software-a.

2) Da li postoje jos neke grupe i projekti koje postujete i preporucujete?

Naravno! Najpre prethodno pomenuti Delphi, kao projekat RAD (Brzo Razvijanje Software-a), kojim se vise ne bavim ali je i dalje u razvoju. Tu su razni izvedeni programski jezici i okruzenja, poput Oxygene-a ili onih baziranih na Lazarusu o kojima smo vec pisali. Naravno, tu je i nezaobilazan GNU Pascal projekat, koji predstavlja takodje cross-platformski i dugogodisnji standard u ovom jeziku.

3) U ovom kontextu, mozete li reci kako ste poceli sa programiranjem?

To je bilo davne 1985te, sto je mozda i formiralo moj ukus u IT oblasti. Poceo sam sa 8bitnim, u to vreme naprednim kompjuterima, radeci najvise sa Sinclair Basicom i Z80 Asemblerom. Kada kazem da je to formiralo ukus, mislim na postovanje hardwareskih resursa i optimizacije koda. Recimo, kompletna memorija ZX Spectruma je zauzimala manje memorije od jedne ikonice na ekranu danasnjih kompjutera, pa ipak u njoj su stajale fantasticne igre i programi.

4) Kako bi uporedili Pascal sa drugim programskim jezicima?

U sustini sve zavisi sa kojim jezikom. Pascal je pre svega orijentisan ka desktop programiranju i ucenju. U pitanju je jezik koji radi na svim sistemima, daje konzistentne rezultate i moze se lako primeniti u razlicitim okruzenjima. Druga bitna prednost je kompajlerski pristup, koji po defaultu daje gotove upotrebljive aplikacije, a ne skripte koje, iako mogu biti jako korisne, zahtevaju neko okruzenje da bi se izvrsile.

5) Zasto smatrate da je Pascal superioran za ucenje programiranja?

Tesko je odgovoriti na taj nacin, pre bih rekao da je superioran za ucenje logike programiranja. Tu su stvari relativno jednostavne. Pascal je izuzetno citljiv i razumljiv, za razliku od recimo C-a i derivata, ili Asemblera na kome sam pravio prve korake u kompajlerskim jezicima. Sa druge strane, dovoljno je striktan u svojoj stukturi, za razliku od tipicnih intepreterskih jezika, poput recimo ranog Basica ili danasnjeg Pythona, koji su prilicno liberalni. Drugim recima, svako treba da radi onako kako smatra da je najbolje, ovo je samo moj pristup. Pascal je idealan spoj razumljivosti, uz pouzdanu strukturu i optimizovanu upotrebljivost. Zato se isplati uciti ga.

6) Ocigledno je da su drugi jezici preuzeli primat, zbog cega je to tako?

Ne mogu se u potpunosti sloziti sa vama. Svaki jezik ima svoj fokus, i to je normalno kada se neka oblast razvija. Svakako cemo programe za web raditi u PHP-u sa CSS dodacima. HTML5 nove generacije nam otvara mogucnosti za koje smo ranije morali da se dovijamo preko Flasha. Pojavljuju se potpuno novi jezici poput R za statistiku, Perl koji mnogima deluje suludo ali daje odlicne rezultate, ili Python koji pravi cuda u gotovo svim oblastima. Samo je pitanje sta vas tacno zanima. Ova lista se moze siriti u nedogled.

7) Dobro to je jasno, jos jednom, zasto preporucujete Pascal za ucenje i uopste?

Dobro dacu jasan odgovor, da svima bude jasno:

1] Pascal ima striktnu programersku strukturu, sto razvija dobre programerske navike. Za razliku od jezika poput Basica i Pythona koji previse toga podrazumevaju.

2] Ovaj jezik je u stalnom razvoju kako od aktivnih zajednica tako i od komercijalnih kompanija. Na primer Lazarus/FPC, GNU Pascal ili Delphi.

3] Daleko je razumljiviji od jezika koji su savremenici ali su daleko tezi za razumevanje i ucenje. Razlog zasto su drugi jezici preuzeli primat je podrska velikih kompanija, poput Microsofta. Dobar primer je C i kasnije derivati istog.

4] Optimizovani kompajlirani programi u Pascalu zauzimaju izuzetno malo prostora. Npr. osnovna igra iz pogadjanja brojeva koju cu objaviti u narednoj lekciji zauzima svega 18kb. Ikonica Firefoxa ili slicnog programa uzima dva do cetiri puta vise.

5] Pascal je lep za programiranje i pripada dugoj tradiciji optimizovanog i svesnog codiranja. Sad, ovo mozda nikom ne znaci, ali je pitanje upuceno meni pa je to i odgovor. U koliko radite mehanicki najbolje da se bavite nekim drugim poslom.

8) Sta mislite o ostalim programskim jezicima i njihovoj primeni?

Programski jezici su toliko raznovrsni da je tesko napraviti neki razumni presek. Samo cu reci da, bar iz mog ugla, stare podele vise ne vaze. Na primer gde smestiti Perl ili ChucK, ili kako uopste odrediti prednosti i mane kompajlerskih i interpreterskih jezika. Vremena su se promenila, odavno vladaju druga pravila, a IT naucnu busiju i dalje drzi stara garda koju mrzi da uci novotarije. Ovo je standardna pojava u svim naukama i disciplinama, pa se moze videti i u IT sektoru.

9) Dobro, preciznije onda, pored Pascala koje bi programske jezike preporucili i zbog cega?

Ja samo mogu dati svoje favorite, ali ovo svakako ne treba shvatiti kao univerzalni putokaz. Pored Pascala koga preporucujem kao jezik opste namene koji je kompajlerski i moze da pravi aplikacije na svim nivoima i platformama, preporucio bih Python kao interpreterski. Python je izuzetno zanimljiv, kao vrlo flexibilan jezik opste namene, koji se dokazao na gotovo svim planovima. E sad, postoje i specijalizovani jezici koje bih pomenuo, recimo PHP je idealan za server-side programiranje, ili ko voli da chatuje, do sada nisam sreo mocniji jezik od mIRC skriptinga. Tako da, sa jedne strane ovde pricamo o jezicima opste namene i tu preporucujem Pascal i Python, sa druge o specificnim jezicima koji zavise od vasih potreba – za net PHP, za muziku ChucK itd.

10) Niste pomenuli Javu, C++ i ostale koji se mozda smatraju danasnjim favoritima.

Manje je poznato, ali Pascal i C su bili jaka konkurencija, kao bazicni jezici kasnih 60tih. Sticaj je istorijskih okolnosti da je C ‘pobedio’ u toj trci, ranih 70tih. Logika C-a je primenjena kako u C++, tako u Javi, PHP-u, C#, javascript i brojnim slicnim jezicima. Naravno to je sasvim ok i svako je nastavio da ide svojim putem. Tu su se pojavili i razni hibridi, preklapanja itd. Ono sto pisem je iskljucivo moj licni pogled i zaista ne zelim da potcenim bilo koga. Za mene je linija Pascal ka Basicu ka Pythonu linija koja u programerskom smilu, ima vise logike i stila od C struje. Naravno, svako ima pravo na svoj pristup i logiku.

11) Kako vidite globalnu buducnost razvoja IT-ja i programerskih jezika?

U toj oblasti zaista je nezahvalno biti bilo kakav prognozer, jer se stvari menjaju jako brzo. Kada bih rekao nesto oko prirodnih nauka, na kojima je moje obrazovanje bazirano, to bi mozda imalo vise smisla. Iako danas marketing odredjuje sve, mislim da ce na duze staze pobediti vrednosti. To znaci, da ce pobediti diverzitet pristupa u skladu sa potrebama. Naravno, opste vrednosti ce opstati kao i do sada, u programerskom smislu. Sto ce reci C/C++, Basic/Python, Pascal, PHP itd. Uveliko zivimo u digitalnom svetu, pa ce ova pitanja sve vise dolaziti do izrazaja. Ukratko, nadam se najboljem.