Šta je novo?

Pascal, bice tu dosta problema :D

Misko

Čuven
VIP član
Učlanjen(a)
02.10.2000
Poruke
5,133
Poena
769
Posto na faxu moram da napisem neki glupi seminarski na Pascalu, uzeo ja pre par dana da ucim Pascal, i lepo islo dok nisam dosao do: kako da napravim program koji ispisuje da li sam uneo broj(1..9), krakter(>?<) ili slovo(a..w), a ja znaci unesem bilo sta?

Mislim jeste prosto za vas koji to radite duze vreme al ja se time bavim tri dana :(.
 
Mozes to uraditi na nekoliko nacina, kako god ti je lakse. Ako pretpostavimo da je char varijabla "uneto", onda moze recimo ovako:

Primer br. 1 - prema ispitivanju karaktera direktno
[code:1]
case uneto of
'a'..'z', 'A'..'Z': UnetoSlovo;
'0'..'9' : UnetBroj;
'?' : UnetUpitnik:
end;
[/code:1]

Primer br. 2 - prema vrednosti karaktera u ASCII tabeli.
ASCII kod karaktera dobijas sa Ord(uneto), a karakter od ASCII koda dobijas sa Chr(ascii_kod).
'A'..'Z' su u intervalu 65..90
'a'..'z' su u intervalu 97..122
'0'..'9' su u intervalu 48..57
'?' je 63
Posto velika i mala slova predstavljaju prekinuti niz (91-96), a tebi je vazno samo da detektuje da li je slovo - pretvoris sve u velika slova interno.

[code:1]
Uneto := UpperCase(Uneto); // ne deluje na brojeve i spec karaktere
if Ord(Uneto)=63 then UnetUpitnik
else if ((Ord(Uneto)>64) and (Ord(Uneto)<91)) then UnetoSlovo
else if ((Ord(Uneto)>47) and (Ord(Uneto)<58)) then UnetBroj;
[/code:1]


Primer 3 - revizija primera 1 & 2
isti princip, samo se koristi druga konstrukcija (setovi)

[code:1]
if Uneto = '?' then UnetUpitnik
else if ((Uneto in ['a'..'z']) or (Uneto in ['A'..'Z'])) then UnetoSlovo
else if Uneto in ['0'..'9'] then UnetBroj;
[/code:1]

U svakoj od ovih 'procedura' (unetbroj, unetupitnik, unetoslovo) vrsis obradu koja ti treba.
 
Za probleme sa kojima se trenutno bavis, a i one koji ce zatim uslediti, toplo bih ti preporucio "Metodicku zbirku iz programiranja" M. Cabarkapa (koliko se secam, trebalo bi da se tako zove)... Zbirka je vrlo fino uradjena, sa resenjima svakog zadatka, krece od samog pocetka (def. promenjivih, osnovnih funkcija itd), pa preko petlji, posle nizova, procedura itd...
 
Hvala srebrni mada tvoj program puca ako unesem npr % ili ^.....zgleda da ovo ipak mora perko duple if then else, a ne preko case of-a. Znaci nesto tipa

if je 1..9 then napisi uneto je broj
else if uneto je a..z then napisi uneto je slovo
else unet je specijalni karakter

Nego zbunili su me jer su rekli da idem preko case of-a. Hvala jos jednom svima bice tu jos pitanja. Pozdrav.
 
EagleOne je napisao(la):
Za probleme sa kojima se trenutno bavis, a i one koji ce zatim uslediti, toplo bih ti preporucio "Metodicku zbirku iz programiranja" M. Cabarkapa (koliko se secam, trebalo bi da se tako zove)... Zbirka je vrlo fino uradjena, sa resenjima svakog zadatka, krece od samog pocetka (def. promenjivih, osnovnih funkcija itd), pa preko petlji, posle nizova, procedura itd...
Gde se moze nabaviti ta zbirka(da li je to udzbenik za neki fakultet)?
Ima li jos nekih dobrih knjiga za Pascal (da krecu od pocetka)?
 
Misko je napisao(la):
Hvala srebrni mada tvoj program puca ako unesem npr % ili ^.....zgleda da ovo ipak mora perko duple if then else, a ne preko case of-a. Znaci nesto tipa

if je 1..9 then napisi uneto je broj
else if uneto je a..z then napisi uneto je slovo
else unet je specijalni karakter

Nego zbunili su me jer su rekli da idem preko case of-a. Hvala jos jednom svima bice tu jos pitanja. Pozdrav.

Moja greska je to sto sam te razumeo da od specijalnih karaktera ocekujes samo '?' (ucinilo mi se u tom trenutku logcnim za poziv nekog 'help' ekrana ili nesto slicno). Onda je lepo iskoristiti else blok case naredbe tipa:

[code:1]
case uneto of
'a'..'z', 'A'..'Z': UnetoSlovo;
'0'..'9' : UnetBroj;
else
UnetSpecijalnZnak;
(* iliti sve ostalo, ukljucujuci i kontrolne karaktere - enter i sl *)
end;
[/code:1]
 
Shesti je napisao(la):
Gde se moze nabaviti ta zbirka(da li je to udzbenik za neki fakultet)?
Ima li jos nekih dobrih knjiga za Pascal (da krecu od pocetka)?
Kada je u pitanju Cabarkapa, nije mi uopste jasno cemu sluzi ta knjiga jer je nivo zadataka srednjoskolski (bukvalno, jer je knjiga pisana krajem osamdesetih KAO POLU-ZVANICNI UDZBENIK ZA SREDNJU SKOLU). Mada, kada uzmemo u obzir sta se uci na smeru NRT, ona je, ustvari, realnost...
 
Cabarkapa je profesor u matematickoj gimnaziji, predavala mi je njegova zena. Knjiga i te dve zbirke... nisam tacno siguran za koga su pisane, ali mi smo u mat gim ucili iz njih.
Sve u svemu Cabar je smarac i sve sto je naucio naucio je pre 20 god, i od tada je vreme za njega stalo. Medjutim, ta knjiga iz pascala, i te zbirke, kao i ona iz c-a i nisu toliko lose za pocetnike. Doduse, nisam ih mnogo koristio, tada sam vec super znao pascal, ali ono sto sam video i nije tako lose. Ako pocinjes da ucis to je verovatno prava stvar, meni se i kao podsetnik mnogo vise svidjala od onih americkih debelih od 400 strana.
 
Jel moze jedno glupo pitanje, sta sve treba da znam da bih mogao da napisem program koji npr. opsluzuje video klub? Sta su Uniti?
 
Misko je napisao(la):
Jel moze jedno glupo pitanje, sta sve treba da znam da bih mogao da napisem program koji npr. opsluzuje video klub? Sta su Uniti?
Sve u svoje vreme...

Program za CD klub nije neki izazov, ali ovo pitanje deluje kao ono:
Tek sam poceo da ucim sabiranje, ali kako se resavaju diferencijalne jednacine. Nisu diferencijalne mnogo teske, ali ako ne znas osnovne operacije...
 
Misko, uniti su stvarno osnova ne samo paskala, nego svakog programskog jezika. Cak i za tako jednostavan zadatak kao sto je pisanje programa za vodjnje cd/video-kluba treba popuniti sve rupe u osnovnom znanju. Mada takav program ne bih okarakterisao kao diferencijalne jednacine, nego pre kao Pitagorinu teoremu ;)

Dakle, strpljenja malo. Kada pocnes nakon x meseci ucenja da ulazis dublje u sve to, videces i sam koliko oblast siroka - pogotovo kad krenes da uzimas i druge knjige koje nisu striktno pocetnicke. Pa kad vidis da su u pocetnickim knjigama opisali samo 10-20% gradiva, a tada ti se to cinilo zavrsenim poslom. E, kada ti tu pukne pogled u sirinu i duzinu (tj, shvatis koliko tu posla ima) sam ces znati kada si spreman za pisanje i najosnovnijeg 'komercijalnog' programa.
 
Par generalnih saveta...
Nemoj nista da bubas napamet. Sintaksu imas u helpu, i vremenom ces je nauciti, bitno je samo da znas cemu sta sluzi.
Kad pravis program, najbitnije je kako pristupis resavanju... nije problem napisati program nego unapred razraditi kako ce sta da funkcionise. Duduse, programiranje nije neka umetnost, nego postoje neki generalni principi kako se sta radi, ali najbolje je da ne stedis na razmisljanju.
I najvaznije: upornost. Kad ti nesto ne bude radilo, a ti ne mozes da pronadjes gresku, nemoj se obeshrabriti nego se potrudi... videces i sam vec :D
Pokusaj da se ne oslanjas preterano na debugger. Bolje je da probas da napravis "savrsen program" nego da ga napravis "ofrlje" pa posle ispravljas greske. Ovaj drugi nacin je brzi, i vecina profi programera ga koristi, zato su i programi tako bagoviti :) uvek se podkrade neka greska.
 
Odakle ti to da vecina profi programera pravi sw ofrlje, pa se posle ispravljaju greske ?!?!?!? Koliko ti to znas profi programera (kad kazem profi, mislim na profi, ne oni koji samo dobijaju pare za svoj posao) i njihov nacin rada ?


Problem nastaje zbog toga sto su programski zadaci (oni malo jaci od cd/video kluba) vrlo komplexni. Stvar se dobro proanalizira i rastavi na sastavne delove koji se uredno zavrse (znaci, plan+implementacija+testiranje+dokumentacija). Medjutim problemi pocinju da nastaju kada te delove treba sastaviti nazad u celinu, pogotovo ako imamo na umu tim od pedesetak programera, gde nije retkost da se radilo i u vise jezika, alata i stilova. Naravno da su interfejsi planirani, ali budi siguran da u procesu implementacije neke stvari moraju biti izmenjene da bi se resio neki konkretan problem koji jednostavno nije mogao biti predvidjen planiranjem. I recimo da si za resenje problema morao da upotrebis dodatni thread i taj jedan je dodvoljan da ugrozi stabilnost celog procesa (zbog ocajne strukture OSa ili nesto slicno) jer threadova ima suvise (vise od 16, recimo), nisu sinhronizovani, ili nesto trece. Onda ispada da treba nesto da se isece kao celina i odvoji u odvojen proces. Ili da se uzima real-time kernel. Ili da se ponovo menja taj izvorni modul i izabere neki drugaciji model za resenje problema. Dakle, primer je jednostavan i ne tako redak. Da je sve tako jednostavno, svi bi se bavili programiranjem, ali nije. To je krvav i zaj*ban posao i kada problem iskrsne (a ume da iskrsne), ima da se radi noci i dan, subotom i nedeljom dok se problem ne resi ili oci ne ispadnu. I uvek moze da se desi da ti jenegde ostao potencijalni lutajuci pointer koji moze da zezne neku memorijsku lokaciju samo usled odredjenog spleta uslova, pa ga zato nisi otkrio.

Za one koje je mrzelo sve da citaju: sa porastom kompleksnosti programa, raste i broj problema - to je neizbezno. I nema veze sa 'ofrlje' pisanjem programa. Debugger je majka programerskih alata i nauci da ga koristis, Misko, jer ces ga cesto ljubiti ;)

Stoji Geekova konstatacija (samo malo preformulisana by me :D) : nemoj da zuris nikada sa implementacijom. Potrosi rado nedelju-dve vremena vise pre samog programiranja u razmisljanju kako ces resiti stvari. Kada krenes sa kodiranjem, ne mozes da si priustis takav luksuz da kreces iz pocetka, jer si neke stvari u brzini prevideo. Nestrpljivost i brzopletost su dve prve osobine koje ljudima udare u glavu kod programiranja. Sama izrada ideje i plana projekta zna da uzme cak i trecinu vremena planiranu za izvrsenje, a samo dve trecine kodiranje.
 
silverglider je napisao(la):
Mada takav program ne bih okarakterisao kao diferencijalne jednacine, nego pre kao Pitagorinu teoremu ;)
Da li ovo da shvatim kao lose znanje matematike (precenjivaje tezine diferencijalnih jednacina) ili kao extremno dobro znanje programiranja?;)
 
Kao diferencijalne jednacine bih okarakterisao recimo komunikaciju izmedju threadova razlicitih procesa (dakle IPC) bez koriscenja semafora i mutexa, zatim reprogramiranje interapt vektora, distribuirane baze u real-time sistemima, DCOM tunneling ili razradu dobrog algoritma za OGL rendering. E, tako izgleda pravi zadatak programera - videoteka je zadatak za seminarski rad studenta prve godine (ili gimnazijalca) koji ne bi trebao da mu odnese vise od nedelju dana (dve ako je maximalno lenj i stalno roka pivo ;) ). Kada sam pomenuo diferencijalne jednacine, mislio sam na prave diferencijalne jednacine, ne na bozu koju dobijes nakon Laplasovih transformacija.
 
silverglider je napisao(la):
Odakle ti to da vecina profi programera pravi sw ofrlje, pa se posle ispravljaju greske ?!?!?!? Koliko ti to znas profi programera (kad kazem profi, mislim na profi, ne oni koji samo dobijaju pare za svoj posao) i njihov nacin rada ?

Za one koje je mrzelo sve da citaju: sa porastom kompleksnosti programa, raste i broj problema - to je neizbezno. I nema veze sa 'ofrlje' pisanjem programa. Debugger je majka programerskih alata i nauci da ga koristis, Misko, jer ces ga cesto ljubiti ;)

Nije mi bas jasno ono sa profi programerima, pa profesionalac je po definiciji covek koji tim poslom zaradjuje novac - ne mora da zaradjuje 100 000$ godisnje da bi bio profi. Hteo sam da kazem da programer nije uvek u situaciji da razradi sve do detalja i napise ga, nekada ti gazda kaze: to mora da bude do tad i tad, pa ti gledaj kako ces. Zato kazem da su neki programi pisani na brzinu i caskom debagovani, pa u programu ima slucajeva koji nisu razmatrani... Takodje, nisam rekao da su takvi programi jedini izvor bagova, naravno da si u pravu sa slozenoscu... i kad se dva coveka kordiniraju propisno je oznoje, a ne gomila...

Slazem se da je debugger koristan, ali svakako je bolje da se covek sto manje oslanja na njega. Ti naravno mozes mnogo bolje da ocenis sta se koliko koristi, ali misko nije rekao da hoce da bude profi programer, samo da uradi seminarski...
 
Ma ok, kul. Pod profi programerom sam podrazumevao coveka koji istina, zaradjuje za zivot programirajuci, ali koji takodje shvata taj svoj posao na profesionalan nacin, pre svega primenjujuci moderne i napredne metode. Znam da ima ljudi kod nas koji i danas zaradjuju praveci programe u kliperu. Slazem se, castan je svaki posao koji donosi hleb u kucu, ali tu koncepciju je vreme pojelo pre desetak godina i nekako mi je nezgodno da ih zovem 'profesionalcima'.

Gazda u firmi koji ne konsultuje razvojni tim (makar i od dva coveka) da vidi kakve su prognoze koliko ce to trajati (i sta treba od resursa) nece dugo jos biti gazda te firme; ili ce se nakon par skracenih rokova i losih programa izblamirati ili ce mu ljudi otici na neko drugo mesto.

Glede dibagera, samo za takav seminarski mu i ne treba - mada ne znam onda zasto si ga onda uopste potezao ? ;)


(D)
 
Pa dobro, ako cemo tako, svaka dif. jednacina moze se resiti numericki, ako zadovoljava Lipsicov uslov, pa ispada da teorijski resenje nije "u je sta je sad ovo". Postoje mnogo komplikovaniji problemi u matematici, kao i u programiranju mnogo teze stvari od nekakvog CD kluba. Moja poenta je bila da i jedno i drugo zahtevaju solidno poznavanje osnovnih koncepata i da je za totalnog pocetnika jos rano da to radi (moze i CD klub da bude zahtevan problem za pocetnika, sta npr. ako ima vise ispostava na razlicitim lokacijama koje treba povezati, itd.).
 
Evo kako glasi moj seminarski:

Implementiraj sistem rent a car sluzbe. u datom sistemu potrebno je uociti najmanje dve klase, koje treba implementirati kao nezavisne objekte. na disku podatke cuvati u datoteci, a u operativnoj memoriji objekte jedne klase cuvati u nizu kao red niz, a pojavljivanja druge klase koriscenjem liste kao stak liste. Za svaku klasu sistema je potrebno implementirati operacije ubaci, izbaci i promeni objekat. Potrebno je napraviti minimum tri izvestaja: prvi koji prikazuje sve objekte datih klasa, drugi koji povezuje objekte prve i druge klase i treci slozen (koji prolazi kroz sve objekte, vrsi odgovarajucu obradu objekekata i na kraju to prikazuje). Sta sve trebam da naucim da bih ovako nesto napisao? Odakle da pocnem sa pisanjem?
 
Misko je napisao(la):
Sta sve trebam da naucim da bih ovako nesto napisao? Odakle da pocnem sa pisanjem?

Pa treba da naucis nizove (p. dim), liste (samo osnovno, ali bice cimanja), pristup fajlovima (dim). E sad problem je sto nisi ucio pascal pa ce ti trebati dosta vremena i rada da uopste dodjes do toga i mozes da ga povezes. Racunaj bar dva meseca gruvanja prvo.

Mogu da primetim da je onaj ko ti je dao taj zadatak poprilican ***** :), jel moze on da objasni sta tu u stvari treba da se uradi, a ne kako da se uradi? "Implementiraj sistem rent a car sluzbe"???
 
Sistem bi trebao da bude jednostavan, posto je i zadatak jednostavan, samo sto je zadat na uobicajeno "skolski-glup" nacin (ovde se misli na text, prim. aut.).

Generalni hint:

1. Posto ti je zadatak zadao bar dve razlicite klase, kreiraj jednu granu "auto" i drugu "klijent". Ukoliko hoces da napravis malo prosirenje (reda radi i radi neke ocene) malo ukomplikuj stvari tako sto ces definisati nasledjivanje iz "klijent" u "fizicko lice" i "pravno lice" (tj pojedinci i firme), a drugu granu "vozilo" -> nasledjivanje u "automobil", "kombi", "kamion", "trotinet" ...
2. imas dve datoteke - klijenti & vozila, a mozda i trecu koja prikazuje 'iznajmljivanja', tj vozilo2klijent - mozda je lakse za ovaj treci, kombinovani izvestaj
3. za implementaciju liste kao staticki niz (array) pogledaj implementaciju (sourceve) klase TCollection, a za dinamicki niz (lista) pogledaj TList, koje dolaze uz pascal, delphi, kylix. Uz malo shvatanja objektnog dizajna, pomoci ce ti da shvatis organizaciju i skrate ti vreme.


Dakle, pre nego sto pocnes da pises, prvo moras da znas nesto o objektnom programiranju (pojmovi kao sto su nasledjivanje, polimorfnost, itd), da znas sintaksu paskala i osnovne strukture podataka u njemu - strukture (pardon, recordi), nizovi, liste, datoteke. Onda da sednes i lepo izorganizujes sta, gde, kako, pa onda krenes tek sa pisanjem.

To je u vezi sa onim threadom da programiranje ne moze da se nauci na kursu ili po bilo kakvom drugom kratkom postupku.
 
silverglider je napisao(la):
Sistem bi trebao da bude jednostavan, posto je i zadatak jednostavan, samo sto je zadat na uobicajeno "skolski-glup" nacin (ovde se misli na text, prim. aut.).

Generalni hint:

................

To je u vezi sa onim threadom da programiranje ne moze da se nauci na kursu ili po bilo kakvom drugom kratkom postupku.
Pa tesko da si ga ovim naucio da programira. :D
Ti si mu ovde samo ponudio idejno resenje, a u principu i za to je potrebno da poznaje sintaksu i principe nekog jezika, da bi znao sa cim raspolaze.Sve u svemu, i za ovo sto si mu rekao da ima da nauci, ima dobro da zagreje stolicu, i to bez dubljeg ulazenja u tematiku ( ako nikad do sada nije programirao ni u jednom jeziku).Mozda bi na nekom kursu uspeo uz neciju pomoc da zavrsi takav program ( i da zna sta je tu sve uradio), ali je to jos uvek daleko od "naucenog programiranja", pogotovo znajuci kakvi su nam "predavaci" na kursevima. To se moze uporediti sa slepcem koji zna da svira 10 pesama na harmonici, i nijednu vise, a i kad bi hteo da je nauci, morao bi sve iz pocetka.
 
Ja nisam ni zeleo da ga jednom postom naucim da programira, nego da predlozim (jedno od vise mogucih) idejno resenje. Ako mu je frka sa vremenom, bar da razmisli oko organizacije seminarskog i koncentrise se na podlogu (paskal i OO) i tako skrati bar malo vreme.

Prethodnim postom nisam hteo da 'dokazem kako je, eto, moguce i brzo nauciti programirati', bas naprotiv.
 
Cool momci, nemojte kao i uvek da sve zavrsimo sa necim trecim , bar ne u ovoj sobi. Znaci za sada znam osnovno tipa, sortiraj dijagonalu matrice (E da kako da uvijem niz u matricu?)Sad cu malo da ceprkam sa recordima, pa idem na LIFO i FIFO ako sam dobro napisao. Ajd da mi neko pomogne kako da ga odvalim, znaci mnogo me nerviraju profani pa hocu da zakucam 10-tku, znaci ja bi sve sam napisao, a ako bi neko znao brze, jednostavnije, lepse i bolje molio bih ga da mi pomogne. Znaci posto sam ja pocetnik, pa cu verovatno, da napisem koju stranu koda viska, voleo bi da mi neko kaze ej mali to moze ovako, pa ovako pa mu dodaj jos i ovo i otkinem Pascal jos u predroku u maju. Pozdrav.
 
Misko je napisao(la):
Znaci za sada znam osnovno tipa, sortiraj dijagonalu matrice (E da kako da uvijem niz u matricu?)

primer:
niz: array[1..100,1..100] of nesto;

kad hoces trodimenzionalnu picis [x1..x2,y1..y2,z1..z2] i slicno.
 
Misko je napisao(la):
Evo kako glasi moj seminarski:

Implementiraj sistem rent a car sluzbe. u datom sistemu potrebno je uociti najmanje dve klase, koje treba implementirati kao nezavisne objekte. na disku podatke cuvati u datoteci, a u operativnoj memoriji objekte jedne klase cuvati u nizu kao red niz, a pojavljivanja druge klase koriscenjem liste kao stak liste. Za svaku klasu sistema je potrebno implementirati operacije ubaci, izbaci i promeni objekat. Potrebno je napraviti minimum tri izvestaja: prvi koji prikazuje sve objekte datih klasa, drugi koji povezuje objekte prve i druge klase i treci slozen (koji prolazi kroz sve objekte, vrsi odgovarajucu obradu objekekata i na kraju to prikazuje). Sta sve trebam da naucim da bih ovako nesto napisao? Odakle da pocnem sa pisanjem?

Ma najbolje resenje je da mi se javis i da ti ja odradim seminarski za 25 dm.Najjeftinije na Fon-u 100%
 
james je napisao(la):
Ma najbolje resenje je da mi se javis i da ti ja odradim seminarski za 25 dm.Najjeftinije na Fon-u 100%

:mad: :mad: :mad: :mad: :mad:
A zasto bi tebi davao 25 DM kada na http://www.puskice.co.yu ima vec uradjen program, samo treba da malo "prerovari" po fajlovima i unese neke sitne izmene (malo teksta, drugacije da nazove promenljive i sl.). Misko, pretpostavljam da zelis da naucish Pascal, a eto ako ti negde zapne mozes da pogledas kako je to neko drugi uradio ili da pitash.
Kod koga branish rad? Da li si izlazio na kolokvijum?
Ako zapne javi se.

Pozdrav.
 
silverglider je napisao(la):
Ja nisam ni zeleo da ga jednom postom naucim da programira, nego da predlozim (jedno od vise mogucih) idejno resenje. Ako mu je frka sa vremenom, bar da razmisli oko organizacije seminarskog i koncentrise se na podlogu (paskal i OO) i tako skrati bar malo vreme.

Prethodnim postom nisam hteo da 'dokazem kako je, eto, moguce i brzo nauciti programirati', bas naprotiv.
Cool, sorry, nisam te razumeo, iznerviran sam zbog ljudi koji postuju takve komentare, pa sam "pozurio". :wave;
 
Ma ljudi necu niko da mi pise seminarski, ocu da naucim nesto, znaci moze pomoc ali ogranicena, nemam ja od toga nista sto ce sada da mi neko napise seminarski ocu da naucim da pisem SAM. Nego posto cu verovatno da se nalupam ocu da mi neko pomogne tipa ej ovako je mnogo najjace, i hop ode strana koda u kantu :D. Cao.
 
Kako napreduje ucenje za sada?
 
Nazad
Vrh Dno