PCPROG.3

26 Jul 1993 - 22 Apr 1994

Messages - pascal

pascal.205 asterix, -> #203, eagle
> type pok=žinteger; > function bezveze:pok; > > a ne može: > > function nemoguca:žinteger; Da pa naravno :) da prethodno mora da se deklariše pokazivač :). Mislio sam da li je moguća konstrukcija tipa: Type pokazivac=^clan; clan=record ... end; Function nemoguca (...) ; Begin ... node^.levi:=nemoguca (...) ; ... End.
pascal.206 zokalezic,
Hi Sledeći program bi trebalo da preuzme int 21 i da odradi neki posao, međutim ovako napisan iz cuga zaglupi mašinu. E sad ako promenim interapt koji preuzima ( stavim bilo koji <> 21 ) onda radi bez problema. Zna li neko zašto ? {$B-,F-,R-,S-} {$M 1024,0,0} Program test; Uses dos,rezid; Var r:Registers; Old:Procedure; Procedure New;Interrupt; Begin Inline($9c); Old; End; Begin Swapvectors; GetIntVec($21,@Old); SetIntVec($21,@New); Keep(0); End.
pascal.207 pedjak, -> #201, asterix
> Da li funkcija u Pascal-u može da vrati pokazivač ? Može.
pascal.208 eagle, -> #206, zokalezic
> Sledeći program bi trebalo da preuzme int 21 i da odradi neki > posao, međutim ovako napisan iz cuga zaglupi mašinu. E sad ako > promenim U Tp-u nije baš onako jednostavno uraditi tako nešto. Proceduri koju si sklonio sa tog vektora je u najvećem broju slučajeva važan sadržaj registara, pa pre njenog poziva moraš ubaciti niz instrukcija u asembleru za skidanje sa steka sadržaja registara_pre poziva tvoje procedure. Zameni redove: inline($9C); old; procedurom DoOldInt iz poruke 8.191
pascal.210 niklaus, -> #196, paki
(:> Kako da u Paskalu deklarišem static promenljivu? Pošto očekuješ nešto više od jednostavnog odgovora, predložiću ti nešto wadikalnije za pascal - rad sa stekom, jer to u stvari radi i C kompajler. Jedan od uslova da se stek na ovaj način bezbedno i isravno koristi, je da non-stop obraćaš pažnju na to da li neki "asm" segment koji primenjuješ za svaki PUSH ima i odgovarajući POP na kraju datog segmenta. Kako izgleda da programiraš u TP 4Win-u, i to tek od skora, "asm" sigurno ne koristiš. Mada će ti to biti dobra vežba za vežbanje "asm"-a i koncentrisanja na "sitnice" tipa PUSH&POP, štednja Code Segmenti (korišćenjem manje globalnih promenljivih)... (:niklaus:) PS Kako nemam nameru da koristim TPW (BPW), očekujem 32-bitni Pascal kompajler... (:
pascal.211 niklaus, -> #205, asterix
(:> Function nemoguca (...) ; (:> Begin (:> ... (:> nodež.levi:=nemoguca (...) ; (:> ... (:> End. Misliš li na rekurzione funkcije, koje se služe pokazivačima? I to je moguće! Primer je sastavljanje Hafmanovog stabla, kod mnogih algoritama za kompresiju. (:niklaus:) PS (za neupućene) Hafman (Huffman) stablo - binarno drvo koje se sastavlja na osnovu učestanosti pojavljivanja različitih karaktera u fajlu, koga analiziramo (a posle (de)kompresujemo). Ako da se šeta- mo kroz stablo dobijamo skraćeni kod za svaki od karaktera. Ako se iz roditeljskog stabla "skreće" u "levog" potomka, sledeći bit za reprezentaciju nekog karaktera će biti "1", a ako se "skreće" u desnog sledeći bit je "0". (ovo "1" i "0", naravno, nije dogma (; )
pascal.209 niklaus, -> #194, bearboy
(:> Elem, evo programa ALI - juzer interfejs i nije neki (nema ga (:> ;) sve dugmice cete morati da pohvatate (ima ih oko desetak). (:> Ova verzija konkretno sluzi za testiranje 32bitnog CRC-a. Ako (:> pokrenete program bez parametara, reci ce vam sta treba da se (:> upise. Nema sira? (; (;niklaus;)
pascal.212 paki, -> #210, niklaus
­> skora, "asm" sigurno ne koristiš. Mada će ti to biti dobra vežba za ­> vežbanje "asm"-a i koncentrisanja na "sitnice" tipa PUSH&POP, štednja ­> Code Segmenti (korišćenjem manje globalnih promenljivih)... Dobra ideja, ali ne verujem da ću je upotrebiti, bar ne u skorije vreme (već mi je dovoljno mučenje ovaj Windows ;). Možda kad se malo uhodam, pa kad dođe red i na optimizaciju programa... Thanx.
pascal.213 sbrk,
Dal' ima neko sve primere iz knjige TP6 - Kompletan vodič od O'Briena (Mikro Knjiga) na disketi? Knjigu sam kupio od Mikro Knjige odavno, a sada nemaju source na disketi.
pascal.214 ndragan, -> #210, niklaus
/ ti nešto wadikalnije za pascal - Predložio bih da se dvostvuko v piše kao w, a jednostvuko kao v, ne zato što tako tveba, nego da možemo da napišemo dvostvuko gde zaista jeste tako, naprimer u reči 'watiti' (vvatiti) i slično.
pascal.215 drpr,
Haj, za sve one koji ne znaju c a želeli su da vide kako radi fejdovanje boja na ekranu u text režimu imaju fajl prikačen uz poruku. Fajl je u originalu napisao user Klisa a ja sam ga preveo i ostavio komentare tako da sad i vi možete da vidite kako se menjaju nijanse u paleti boja i da se sa tim poigravate :)) cope fade.zip
pascal.216 asterix,
Jedno skoro teorijsko pitanje :) U jednom trenutku u toku programa, poziva se rekurzivna funkcija koja može praktično da ide u dubinu rekurzivnosti dokle god veličina stack-a dozvoljava. Prekid rekurzivnosti se dešava proverom uslova koji je vezan za lokalnu promenljivu procedure koja zove rekurzivnu funkciju. Pitanje : Da li je sa stanovišta izvršavanja i racionalnog korišćenja stack-a bolje taj parametar prenositi iz jednog stepena rekurzije u drugi kao argument funckije (čime bi se možda dobilo na brzini izvršavanja) ili je bolje jednostavno koristiti taj parametar kad god je potrebno njegovim dohvatanjem tamo gde se nalazi (što bi svakako uzrokovalo koliko ja shvatam skakutanje po memoriji tamo-vamo ;) obzirom da bi on za rekurzivnu funkciju bio vidljiv, odnosno dostupan po oblasti važenja ?
pascal.217 .bale., -> #216, asterix
> Da li je sa stanovišta izvršavanja i racionalnog korišćenja stack-a > bolje taj parametar prenositi iz jednog stepena rekurzije u drugi > kao argument funckije (čime bi se možda dobilo na brzini izvršavanja) > ili je bolje jednostavno koristiti taj parametar kad god je potrebno > njegovim dohvatanjem tamo gde se nalazi (što bi svakako uzrokovalo > koliko ja shvatam skakutanje po memoriji tamo-vamo ;) obzirom da bi > on za rekurzivnu funkciju bio vidljiv, odnosno dostupan po oblasti > važenja ? Svaka funkcija sa sobom vuče tzv. pristupnu listu, pokazivače na nelokalne promenljive. Ako tu promenljivu prenosiš kao argument rekurzivne funkcije, povećaćeš kôd za pripremu argumenata funkcije, a i više potrošiti prostora na steku, što znači usporenje. U drugom slučaju, funkcija nasleđuje pristupnu listu od procedure koja je statički obuhvata, tj. jedan isti pokazivač na tu promenljivu za bilo koju dubinu rekurzije. Dakle, ako ne buncam u 4:39 ujutro, bolje bi bilo da tu promenljivu dohvataš kao nelokalnu.
pascal.218 vvelisavljev,
žemu služe ovi kompajler prekidači u TP7 ? $P: Open String Parameters Switch $T: Type-Checked Pointers Switch Ono što piše u helpu mi nije baš najjasnije. :(
pascal.219 vvelisavljev,
Funkcija function Pos(Substr: String; S: String): Byte; je imala u ranijim verzijama Tubo Pascala jedan bag koji je bio veoma koristan. Ako je Substr = '' funkcija je, u ranijim verzijama, vraćala 1 što je bilo veoma zgodno kod raznih pretraživanja. U Turbo Pascalu 7.0 ova funkcija vraća 0 ako je Substr='' tako da moj program više ne radi onako kako je radio sa TP 6.0 :(( Ima li neko elegantnije rešenje od "rešenja" da napravim svoju funkciju POS?
pascal.220 eagle, -> #219, vvelisavljev
> Funkcija function Pos(Substr: String; S: String): Byte; > je imala u ranijim verzijama Tubo Pascala jedan bag koji je bio > veoma koristan. Ako je Substr = '' funkcija je, u ranijim > verzijama, vraćala 1 što je bilo veoma zgodno kod raznih > Ima li neko elegantnije rešenje od "rešenja" da napravim svoju > funkciju POS? Napišeš funkciju MyPos: function mypos(s1,s2:string):byte; begin if s1='' then mypos:=1 else mypos:=pos(s1,s2); end; I zameniš svako pos u tvom programu sa mypos... Zar postoji nešto elegantnije? :)
pascal.222 .bale., -> #218, vvelisavljev
> $T: Type-Checked Pointers Switch Ovo je valjda za proveru tipova podataka na koje pokazuju pokazivači, pri dodelama, poređenju i sl.
pascal.221 .bale., -> #217, .bale.
Hm, sada nije 5 ujutro, a kad sam video šta sam napisao, reko' bolje da ponovim, malo jasnije :) Ono što sam napisao za prenošenje te promenljive kao parametra, stoji. A kad iz neke funkcije koristiš nelokalnu promenljivu, koja je definisana u nekoj funkciji/proceduri koja ovu pomenutu statički obuhvata, posao povezivanja se obavlja pri samom prevođenju. Naime, nije potrebno da podatke o toj promenljivoj stavljaš na stek, već su sve informacije u samom kodu, a to su: broj "skokova" po pristupnoj listi, od *statičke* dubine ugnježdenja pomenute rekurzivne funkcije (dakle, prirodan broj) do *statičke* dubine ugnježdenja funkcije/procedure u kojoj je pomenuta promenljiva definisana (isto prirodan broj); i ofset unutar prostora na steku u kome su smeštene lokalne promenljive funkcije/procedure u kojoj je pomenuta promenljiva definisana (kako drugačije da objasnim, ako ne kucam ove kobasice? ;-) Dakle, kompajler obraćanje toj nelokalnoj promenljivoj prevodi kao niz skokova (ali nezavisan od dubine rekurzije) preko pokazivača i na kraju jedno indeksno adresiranje. Dakle, za slučaj paskala, u kome je opseg važenja statički, to tako izgleda, otprilike. Na steku se nalaze, u tzv. aktivacionom zapisu, samo lokalne promenljive _aktivacije_ funkcije/procudure, njeni argumenti i mesto za rezultat, malo prostora za rad, a za vraćanje kontrole pozivajućoj funkciji/proceduri se koristi ista pristupna lista koja se koristi za nelokalne promenljive. Ovo poslednje je isto u aktivacionom zapisu, mada postoje poboljšanja za pristup nelokalnim promenljivama (objasniću ako te interesuje), tako da je, u svakom slučaju, bolje da tu promenljivu dohvataš sa strane.
pascal.223 janko, -> #221, .bale.
> lista koja se koristi za nelokalne promenljive. Ovo > poslednje je isto u aktivacionom zapisu, mada postoje > poboljšanja za pristup nelokalnim promenljivama (objasniću > ako te interesuje), tako da je, u svakom slučaju, bolje da > tu promenljivu dohvataš sa strane. Mož' da bidne, al' ne mora da znači. Kompajleri su prilično pametni, pa umeju da prepoznaju da li funkcija pristupa nelokalnim promenljivama, pa ako uopšte ne pristupa, fino, unutar aktivacionog zapisa uopšte ne ubacuju pristupnu vezu do više funkcije, niti generišu kod koji to treba da obezbedi. U tom slučaju, i ako je kritična promenljiva jednake veličine kao pointer, ne može se primetiti ni promena u potrošnji memorije na steku, a, čak, u zavisnosti od implementacije, može da se dobije u brzini. žesto je višestruko pristupanje nelokalnoj promeljivoj operacija koja troši više računarskog vremena od jednog kopiranja i, posle, pristupa lokalnoj promenljivoj. To zavisi od implementacije, kvaliteta optimizacije koda same funkcije, i, naravno, procesora (na 80x86 su neke optimizacije nemoguće zbog premalog broja registara). Odgovor je, dakle: Zavisi od toga šta radiš. Ako je potencijalna nelokalna promenljiva jedna jedina takva u funkciji, i ako nije velika, onda je isplativo i da se prenosi kao parametar funkcije. Ako je funkcija takva da treba da menja nelokalnu promenljivu, onda, potencijalna nelokalna mora da bude nelokalna. Ako je potencijalna nelokalna takva, da će kopiranja potrošiti više vremena nego rad sa njom (oko ovoga se, u praksi, ne vredi zamajavati), ili, da će se previše angažovati prokleto mali stek na 80x86 procesorima, (vrlo bitno ograničenje, na to treba paziti uvek) i onda je preporučljivo da nelokalna ostane nelokalna.
pascal.224 fole,
Da li se neko bavi Paradox Engine-om za TP (BP)?
pascal.225 .bale., -> #223, janko
Al' ga razradi! :)
pascal.226 asterix, -> #221, .bale.
> promenljivama (objasniću ako te interesuje), tako da je, u svakom Interesuje me :)
pascal.227 predragd, -> #224, fole
> Da li se neko bavi Paradox Engine-om za TP (BP)? Bavim se. Peđa.
pascal.228 .bale., -> #226, asterix
>> promenljivama (objasniću ako te interesuje), tako da je, u svakom > > Interesuje me :) OK, daklem. Da prvo kažem da sam napravio greščicu kada sam (ako se dobro sećam) napisao da se u paskalu (u standardnoj implementaciji) poklapaju kontrolna veza i pristupna veza nelokalnim promenljivama. To važi u jezicima sa dinamičkim opsegom važenja (na primer, lisp), u paskalu ne. Najbolje da dâm primer, ne vredi da pišem onolike kobasice. Na primer, dat je program sledeće strukture: A def: a, x B ... endB C def: x D ... x, a ... endD E ... a, v D ... endE endC endA Kada se pristup nelokalnim promenljivama vrši preko pristupnih veza, pri prevođenju se može saznati, na primer, da će se u funkciji E pod imenom "a" podrazumevati promenljiva "a" definisana u A, dva nivoa iznad (jedan skok preko pristupnih veza, tj. jednostruke liste pokazivača, jer prvi u listi pokazuje na jedan statički nivo iznad), sa tim-i-tim ofsetom. Ukoliko se unutar E poziva funkcija D, to će se prevoditi tako da se izračuna broj potrebnih skokova niz pristupne veze (broj skokova = nivo E - nivo D + 1 = 1), pa se generiše kôd koji se "spusti" taj broj puta niz pristupne veze i tamo gde se zaustavi, to je aktivacioni zapis na koji će pokazivati pristupna veza u aktivacionom zapisu funkcije D (tačnije, pokazivaće na sledeći pokazivač u listi, a koji se nalazi u tom aktivacionom zapisu), a u kodu za D je već definisan pristup nelokalnim promenljivama, kao u opisanom slučaju (E, a). Ukoliko se šalju funkcije kao parametri, i njihove pristupne veze moraju da se šalju. Drugi način je pomoću tzv. displeja. Displej predstavlja niz pokazivača na najsvežije aktivacione zapise na pojedinim statičkim nivoima ugnježdavanja. Na primer, ako je E na nivou 3, displej[1] i displej[2] će pokazivati na poslednje aktivacije funkcija na nivoima 1 i 2, redom, a koje statički obuhvataju E (ne može a da ne obuhvataju). Algoritam ažuriranja sadržaja displeja je sledeći: Kada se aktivira funkcija na statičkom nivou ugnježdavanja "i", radi se sledeće: 1) Sačuva se stara vrednost displej[i] u aktivacionom zapisu, 2) U displej[i] se smešta adresa novog (najsvežijeg) aktivacionog zapisa. Pri povratku se sačuvana vrednost vraća u displej[i]. To je to, valjda nisam negde pobrljavio :)
pascal.229 kenza,
Hi! Zna li neko kako da odredim gde mi pocinje heap? Treba mi u stvari da odredim da li mi pokazivac pokazuje na heap. Program mi javlja run time error 204-invalid pointer operation, help kaze da je to zato sto radim dispose od nil-a ili sto ide dispose pokazivaca koji ne pokazuje na heap.prvo nije , kako da saznam da li pokazivac pokazuje na heap? Hvala & cu
pascal.230 eagle, -> #229, kenza
> Zna li neko kako da odredim gde mi pocinje heap? > Treba mi u stvari da odredim da li mi pokazivac pokazuje na > heap. Program mi javlja run time error 204-invalid pointer > operation, help kaze da je to zato sto radim dispose od nil-a > ili sto ide dispose pokazivaca koji ne pokazuje na heap.prvo > nije , kako da saznam da li pokazivac pokazuje na heap? Uđeš u editor , ukucaš "heap" , pritisneš Ctrl-F1 i eto... ;) Dakle, imaš promenljive: Heaporg - pointer na početak heap-a Heapend - pointer na kraj heap-a Heapptr - pointer na vrh heap-a Gore pomenuta poruka se javlja kada pointer ne pokazuje na lokaciju između početka i vrha heap-a, što se lako utvrđuje: if seg(pž)*16 + ofs(pž) in Šseg(heaporgž)*16 + ofs(heaporgž) .. seg(heapptrž)*16 + ofs(heapptrž)Ć then Jeste; Btw, zašto ti ovo treba? :)
pascal.231 valhala, -> #190, a.kircanski
>###### I sta je IRQ? (znam da je interrupt request number, al >###### sta znaci)
pascal.232 kenza, -> #230, eagle
(;> if seg(pC)*16 + ofs(pC) in (;> Sseg(heaporgC)*16 + ofs(heaporgC) .. seg(heapptrC)*16 + (;> ofs(heapptrC)C then Jeste; .................... (;> Btw, zasto ti ovo treba? :) Pisem neki program koji koristi TOT (TechnoJock'sObjectToolkit) za menije , maske i uopste user-interface.I onda se javlja error 204 kada dva puta za redom pozovem istu masku za unos?! Ako pozovem tu masku samo jednom , sve je o.k., isto je sve u redu ako pozovem neki drugi deo tot-a izmedju 2 poziva "problematicne" maske. Hvala ti puno ;)
pascal.233 peca.st, -> #232, kenza
!-> Pisem neki program koji koristi TOT Ma TOT je i inače prilično bagovit, pogotovu po pitanju hot-keya. Bez veze što su uradili tako puno dobrih stvari, ali dosta površno i izgleda bez testiranja. Peđa.
pascal.234 niklaus, -> #232, kenza
(:> Pisem neki program koji koristi TOT (:> (TechnoJock'sObjectToolkit) za menije , maske i uopste (:> user-interface.I onda se javlja error 204 kada dva puta za (:> redom pozovem istu masku za unos?! Ako pozovem tu masku samo (:> jednom , sve je o.k., isto je sve u redu ako pozovem neki (:> drugi deo tot-a izmedju 2 poziva "problematicne" maske. Ako ti eagle ništa ne kaže, ja kažem sledeće: "Probaj sa dummy procedurom, onaj fazon begin end;" Ajd' probaj, lako je... (:niklaus:)
pascal.235 drpr,
Danas sam nešto muljao oko pascala i naiđoh u O'Brien-ovom vodiču na funkciju PORT ali nigde ne nađoh da li je ona zamena za IN/OUT u asembleru ili šta je? U On line helpu pascala ne piše ništa o ovoj fj-i a TP je kompajlira bez problema pa ide pitanje zna li neko o ovome ponešto? cope
pascal.236 bole,
Hi ljudi, evo ja napisah jedan prg. A to je Modul Player zvani BOMP (BOlex Modul Player) bomp.arj
pascal.237 eagle, -> #235, drpr
> Danas sam nešto muljao oko pascala i naiđoh u O'Brien-ovom > vodiču na funkciju PORT ali nigde ne nađoh da li je ona zamena > za IN/OUT u asembleru ili šta je? U On line helpu pascala ne > piše ništa o ovoj fj-i a TP je kompajlira bez problema pa ide > pitanje zna li neko o ovome ponešto? To ti se ovako radi: Napišeš jednostavan programčić tipa begin portŠ1Ć:=portŠ2Ć; end. prevedeš ga, i pogledaš .exe nekim disassemblerom (ili debugom). Parče koda za ovaj red programa izgleda ovako: IN AL,02 OUT 01,AL Btw, TP kompajler tretira port kao niz, ne kao funkciju. Dakle: y:=portŠxĆ je zamena za IN portŠxĆ:=y je zamena za OUT
pascal.238 dejanr, -> #235, drpr
>> Danas sam nešto muljao oko pascala i naiđoh u O'Brien-ovom >> vodiču na funkciju PORT ali nigde ne nađoh da li je ona zamena >> za IN/OUT u asembleru ili šta je? Jeste. Umesto što bi rekao iz asemblera OUT 12, 123, kažeš port[12]:=123 Isto tako i za IN, samo što fiktivni niz port[] stoji sa desne strane :=
pascal.239 kenza, -> #233, peca.st
(;> Ma TOT je i inace prilicno bagovit, (;> pogotovu po pitanju hot-keya. Bez veze sto su Hot Keyove (;) sam izbacio, a bug po bug ispravljam... Beyond 2000 ce da bude o.k. ;)
pascal.240 kenza, -> #234, niklaus
(;> Ako ti eagle nista ne kaze, ja kazem sledece: (;> "Probaj sa dummy procedurom, onaj fazon begin end;" Ona f-ja koju mi je Eagle ostavio izgleda da je resila stvar. Dummy sam vec ranije probao, i nije vredelo ;)
pascal.241 a.kircanski, -> #236, bole
_-=> Hi ljudi, evo ja napisah jedan prg. A to je Modul Player _-=> zvani BOMP (BOlex Modul Player) Axa, a koji unit si koristio? Nemoj samo da kažeš da si sam napisao algoritam za mod datoteke ;-) sale.
pascal.242 ognjen,
Evo, i ja poceh da malo ucim PASCAL, ali mi nesto nikako ne ide u glavu (valjda od posledica BASICa ;) : WHILE A<=3 DO itd. !!!! Dok je A manje ili jednako 3 radi to i to i to... (ovo je ok, ne razumem ovo sto sledi: ) FLAG:=TRUE WHILE FLAG DO blabla !!!! Ovo ne kapiram! Zar ne bi trebalo da stoji WHILE FLAG:=TRUE DO blabla??? Dakle, dok je flag Ok, radi blabla, a, kad se flag promeni pici dalje, zar ne? Ali, po datom primeru, reklo bi se, NE! Gornja petlja bi onda bila DOK_JE_FLEG_RADI_blabla?!? Dok je flag, STA? Dok je flag TRUE ili FALSE ili STA???? HELP!
pascal.243 bulaja, -> #242, ognjen
│FLAG:=TRUE │WHILE FLAG DO blabla │!!!! │Ovo ne kapiram! Zar ne bi trebalo da stoji WHILE FLAG:=TRUE DO blabla??? │Dakle, dok je flag Ok, radi blabla, a, kad se flag promeni pici dalje, │zar ne? Ali, po datom primeru, reklo bi se, NE! Gornja petlja bi onda │bila DOK_JE_FLEG_RADI_blabla?!? Dok je flag, STA? Dok je flag TRUE ili │FALSE ili STA???? HELP! └─── WHILE petlju posmatraj kao while (<uslov>), gde je <uslov> logicki izraz, sto znaci da njegove vrednosti moug biti true ili false. Potpuno je svejedno da li je taj logicki izraz prost (npr. ispituje se stanje samo jedne promenljive tipa Boolean kao u tvom slucaju) ili slozen (kao sto je (a<=3) - vazan je rezultat logickog izraza. Konkretno, u tom tvom primeru petlja ce se vrteti dokle god je vrednost izraza (flag) jednaka true, sto prakticno znaci isto sto i while (flag == true).
pascal.245 peca.st, -> #243, bulaja
!-> while (flag == true). Hm, hm, neće biti "==" :) (to bi bilo za C) Peđa.
pascal.244 peca.st, -> #242, ognjen
!-> WHILE FLAG:=TRUE DO blabla??? Dakle, dok !-> je flag Ok, Prvo što moraš da naučiš je da razlikuješ naredbu dodele ( := ) i logičko jednako ( = ) Dakle, ovo što si napisao gore nikako ne bi moglo da stoji. Moglo bi da stoji While flag = true do blabla ali nije potrebno jer je "While flag = true" ekvivalentno sa "While flag", a "While flag = false" ekvivalentno sa "While not flag". Ako ti je lakše, slobodno možeš da piše tako, potpuno je svejedno. Ali, ne zaboravi, a := b NIJE ISTO ŠTO I a = b Peđa.
pascal.247 draganm, -> #242, ognjen
*> Ovo ne kapiram! Zar ne bi trebalo da stoji *> WHILE FLAG:=TRUE DO blabla??? Dakle, dok je flag Ok, *> radi blabla, a, kad se flag promeni pici dalje, zar ne? *> Ali, po datom primeru, reklo bi se, NE! Gornja petlja *> bi onda bila DOK_JE_FLEG_RADI_blabla?!? Dok je flag, STA? *> Dok je flag TRUE ili FALSE ili STA???? HELP! Flag ti je promenjiva boolean tipa, on moze da ti zameni bilo koji logicki izraz (npr. a>3) i u ovom primeru se ono sto je iza while izvrsava dok je flag=TRUE, ako flag promeni vrednost u FALSE program izlazi iz WHILE petlje. -=>Phantom Lord<=-/.CoRRoSioN.
pascal.246 draganm, -> #241, a.kircanski
*> Axa, a koji unit si koristio? Nemoj samo da kazes da si *> sam napisao algoritam za mod datoteke ;-) Nije unit nego OBJ, tacnije mod-obj :)) -=>Phantom Lord<=-/.CoRRoSioN.
pascal.248 predragd,
Zašto neke MS-DOS funkcije (IOCTL, čitanje/setovanje serijskog broja diska) ne rade u protected modu (BP 7.0). Dok na primer funkcija $41 - brisanje fajla, takođe u protected modu, radi odlično. Sa druge strane sve te funkcije u real modu (takođe BP 7.0) rade potpuno ispravno. Peđa.
pascal.249 paki, -> #242, ognjen
­> WHILE FLAG DO blabla ­> !!!! ­> Ovo ne kapiram! Zar ne bi trebalo da stoji ­> WHILE FLAG:=TRUE DO blabla??? Dakle, dok je flag Ok, ­> radi blabla, a, kad se flag promeni pici dalje, zar ne? ­> Ali, po datom primeru, reklo bi se, NE! Gornja petlja ­> bi onda bila DOK_JE_FLEG_RADI_blabla?!? Dok je flag, STA? ­> Dok je flag TRUE ili FALSE ili STA???? HELP! Dok je fleg True. Evo i malog objašnjenja: Recimo da se logička promenljiva (tj. flag) zove SunceSija. Tada, ako napolju sija sunce, napišeš 'SunceSija:=True'. Dalje u programu ti treba da vidiš da li sunce sija. Ispitaćeš sa 'if SunceSija then...'. Vrednost SunceSija je logički izraz koji može biti tačan ili netačan. Isto tako si mogao da napišeš 'if 2>3 then...', i u ovom slučaju je '2>3' logički izraz koji vraća vrednost False (jer 2 nije veće od 3). Dakle, podrazumeva se da, ako napišeš 'while Flag', misliš na 'while Flag=True'. Takođe, umesto 'while Flag=False' možeš pisati 'while not Flag'. Npr. ako sunce ne sija, sigurno ti je razumljivije ako napišeš 'if not SunceSija' nego 'if SunceSija=False'.
pascal.250 magician, -> #244, peca.st
­=> !-> WHILE FLAG:=TRUE DO blabla??? Dakle, dok... ­=> ­=> Prvo što moraš da naučiš je da razlikuješ naredbu dodele ( := ) ­=> i logičko jednako ( = ) ­=> Dakle, ovo što si napisao gore nikako ne bi moglo da stoji. Pascal nemam pojma, ali u C-u bi moglo da stoji i while (FLAG = TRUE) // '=' čitaj kao ':=' Jeste da u ovom slučaju nema mnogo smisla, ali nije neispravno. Da li je u Pascalu neispravno prvo dodeliti vrednost promenljivoj, pa onda ispitivati njenu logičku vrednost?
pascal.251 snemcev, -> #245, peca.st
>> !-> while (flag == true). >> >> Hm, hm, neće biti "==" :) (to bi bilo za C) I za Clipper! ;)))
pascal.252 peca.st, -> #250, magician
!-> Da li je u !-> Pascalu neispravno prvo dodeliti vrednost !-> promenljivoj, pa onda ispitivati njenu !-> logičku vrednost? Ma, u Pascalu ne možeš ko u Cu da u sred nekog izraza dodeljuješ vrednosti. Dodeljivanje vrednosti mora (valjda) da se vrši u posebnoj naredbi, posebnom redu. Peđa.
pascal.253 pedjak, -> #242, ognjen
> WHILE FLAG DO blabla > Ovo ne kapiram! Zar ne bi trebalo da stoji > WHILE FLAG:=TRUE DO blabla??? Dakle, dok je flag Ok, Nikako ne može da stoji while flag:=true ,može jedino while flag=true ili skraćeno while flag.
pascal.254 eagle, -> #196, paki
> Kako da u Paskalu deklarišem static promenljivu? > Znači, treba mi promenljiva koja će zadržavati svoju vrednost i > kada izađem iz funkcije u kojoj je definisana. Jedino što mi > pada na pamet su globalne promenljive. Ovo sam danas sasvim slučajno otkrio, i to zato što mi je pravilo probleme u jednom programu. Dakle, deklarišeš promenljivu sa const: const promenljiva : tip = pocetna_vrednost; Na primer: procedure proba; const i:byte=0; begin inc(i); writeln(i); end; BEGIN while true do proba; END.
pascal.255 dejanr, -> #254, eagle
>> const promenljiva : tip = pocetna_vrednost; Dodao bih još jednu sitnicu - ako je "konstanta" string, onda *ne* treba pisati: const ime: string = 'Pera' nego const ime: string[5] = 'Pera'. Inače u .EXE fajlu (kada ga napravi) ostavi stringčinu od 256 nula bajtova, što možda i ne smeta mnogo ali deluje malo glupo. Naravno, ako će "konstanta" posle menjati vrednost, onda mora da se stavi maksimalna moguća dužina, pa kolko nula mora, mora.
pascal.256 v.nesic, -> #250, magician
> ............................................................... Da > li je u Pascalu neispravno prvo dodeliti vrednost promenljivoj, pa > onda ispitivati njenu logičku vrednost? U čemu je ovde poenta ?
pascal.257 a.kircanski, -> #242, ognjen
_-=> WHILE FLAG DO blabla To ti je isto što i While flag = true do blablabla _-=> WHILE FLAG:=TRUE DO blabla??? Dakle, dok je flag Ok, ------ Ne treba while flag:=true do, nego while flag=true do. := je dodeljivanje. sale.
pascal.258 magician, -> #256, v.nesic
­=>> ............................................................... Da ­=>> li je u Pascalu neispravno prvo dodeliti vrednost promenljivoj, pa ­=>> onda ispitivati njenu logičku vrednost? ­=> ­=> U čemu je ovde poenta ? žini mi se da sam lepo napisao, ali... Obrati se na pažnji: if( (KlaraMandic = Read(...)) != SlobodankaGruden) Ovde se prvo promenljivoj Klara dodeljuje neka vrednost pa se tek onda ispituje njena log. vrednost. Poentu izvuci sam...
pascal.259 vitez.koja, -> #250, magician
#=> neispravno. Da li je u Pascalu neispravno prvo dodeliti #=> vrednost promenljivoj, pa onda ispitivati njenu logičku #=> vrednost? Kratko rečeno, jeste. Razlika je, zapravo, suštinska, i to u funkcionisanju parsera za ova dva jezika i evaluiranju izraza. U Cu ce izraz evaluria s desna na levo (naravno uzimajući u obzir prioritete operanda), čak sam stekao utisak da se cela jedna naredba (između dva ';') može sa stanovišta Ca posmatrati kao brojni izraz. Za paskal nisam siguran kako stvar izgleda, ali verovatno je mnogo stroža i ograničavajuća. Pitanje za one koji su se malo bavili samim jezikom, ne samo programiranjem u njemu : zar vam se ne čini da je u Cu 'void' tip kršenje principa zarad lakšeg korišćenja (programiranja) ? Naime, da nema ovog tipa (a pre ANSI standarda nije ga ni bilo) bilo koji C programski izraz mogao bi se obrađivati kao aritmetiči izraz, jer _svi_ članovi tog izraza ili imaju aritmetičke vrednosti ili su operacije; rekao bih da su od takve koncepcije pošli i tvorci Ca.
pascal.260 debelijencija, -> #259, vitez.koja
Ovome je ovdi mesto! :) !=?> programiranjem u njemu : zar vam se ne čini da je u Cu !=?> 'void' tip kršenje principa zarad lakšeg korišćenja !=?> (programiranja) ? Naime, da nema ovog tipa (a pre ANSI !=?> standarda nije ga ni bilo) bilo koji C programski izraz void tip je postojaoi pre ANSI standarda, u nekim implementacijama. K&R i kažu da su to usvojili pošto su se lično, u radu uverili da je to korisna stvar. Uostalom, šta ti fali? :) Zar nije ovako bolje? (da ga ima, nego da ga nema) !=?> mogao bi se obrađivati kao aritmetiči izraz, jer _svi_ !=?> članovi tog izraza ili imaju aritmetičke vrednosti ili su !=?> operacije; rekao bih da su od takve koncepcije pošli i !=?> tvorci Ca. Pa, čekaj, ti ne možeš da deklarišeš promenljivu tipa void. Stoga ona i ne može da se pojavi u izrazu. Dakle, svaki izraz možeš tako da posmatraš... Možda i ne možeš, ali ondak ne zna koji je taj. Iskreno rečeno, pojma nemam od kakve su koncepcije pošli tvorci Ca (tačnije tvorac Ca, pošto je Kernighan samo pomagao u knjizi), ali nije loše ispalo, zar ne? :)
pascal.261 paki, -> #254, eagle
­> Ovo sam danas sasvim slučajno otkrio, i to zato što mi je pravilo ­> probleme u jednom programu. Dakle, deklarišeš promenljivu sa const: ­> ­> const promenljiva : tip = pocetna_vrednost; Super :) Ja sam to video na par mesta, ali sam mislio da služi samo da se promenljivoj dodeli početna vrednost :)
pascal.262 bojanp, -> #255, dejanr
>>> const promenljiva : tip = pocetna_vrednost; > > Dodao bih još jednu sitnicu - ako je "konstanta" string, onda *ne* > treba pisati: const ime: string = 'Pera' nego const ime: string[5] = > 'Pera'. Inače u .EXE fajlu (kada ga napravi) ostavi stringčinu od 256 nula > bajtova, što možda i ne smeta mnogo ali deluje malo glupo. Ako se želili minimalno memorijsko zauzeće onda je u gornjem primeru ipak prihvatljivije napisati const ime : string[4] = 'Pera', jer je dužina ovoga stringa 4 a ne 5. Kod Turbo Pascala se navodi maksimalna dužina stringa i u nju ne treba uračunati byte u kome se čuva trenutna dužina (za razliku od C gde treba alocirati jedan byte više za nul karakter na kraju). Pozdrav, Bojan
pascal.263 v.nesic, -> #258, magician
> ­=> U čemu je ovde poenta ? > žini mi se da sam lepo napisao, ali... Pretpostavio sam da to misliš, ali mi je zvučalo skroz drugojačije.
pascal.264 vitez.koja, -> #260, debelijencija
#=> može da se pojavi u izrazu. Dakle, svaki izraz možeš #=> tako da posmatraš... Ma ni blizu: while(e++%=25 ? e : clrscr()); Zaista nemam pojma čemu bi ovaj izraz služio, ali da ne radi - ne radi.
pascal.265 ognjen, -> #257, a.kircanski
)-> Ne treba while flag:=true do, nego while flag=true do. := je )-> dodeljivanje. sale. Ok, nemoj mo zameriti, novi sam :)
pascal.266 ognjen, -> #253, pedjak
)-> Nikako ne može da stoji while flag:=true ,može jedino while )-> flag=true ili skraćeno while flag. Thanks, samo jos nesto. Da li je skraceno flag po difoltu =true ili mu je true vrednost dodeljena u nekom od prethodnih redova?
pascal.267 peca.st, -> #266, ognjen
!-> Thanks, samo jos nesto. Da li je skraceno !-> flag po difoltu =true ili mu je true !-> vrednost dodeljena u nekom od prethodnih !-> redova? Uvek je true. Pakijev primer ti je najbolji i najlakše ćeš shvatiti tako. "U duhu jezika" je da se piše "if flag", ili "if not flag", a ne drugačije. Peđa.
pascal.269 broker, -> #242, ognjen
> FLAG:=TRUE > WHILE FLAG DO blabla U ovakvom slučaju ja bih upotrebio repeat until petlju. U gornjem slučaju očigledno je da se u petlju ulazi bar jednom, a tada je repeat until petlja zgodnija. broker
pascal.270 broker, -> #250, magician
> Pascal nemam pojma, ali u C-u bi moglo da stoji i > > while (FLAG = TRUE) // '=' čitaj kao ':=' C je u tome malo slobodan pa se pod TRUE uglavnom smatra ono sto je različito od FALSE, a FALSE se obično smatra da je nula. Obratiti pažnju na ono 'obično'. :) Negde se smatra da je FALSE ono sto nije TRUE, a opet TRUE moze da se smatra da je 1... Sad ima ono 'može'. :) Zato ja i volim Paskal. Jeste da je tvrd, ali brate znaš na čemu si. broker
pascal.268 broker, -> #255, dejanr
> Dodao bih još jednu sitnicu - ako je "konstanta" string, > onda *ne* treba pisati: const ime: string = 'Pera' nego > const ime: stringŠ5Ć = 'Pera'. Inače u .EXE fajlu (kada ga > napravi) ostavi stringčinu od 256 nula bajtova, što možda > i ne smeta mnogo ali deluje malo glupo. > > Naravno, ako će "konstanta" posle menjati vrednost, onda > mora da se stavi maksimalna moguća dužina, pa kolko nula > mora, mora. Da, ali je tada jednostavnije da se promenljiva deklariše na uobičajeni način, pa da joj se vrednost dodeli na početku programa. Tada će u exe-u da zauzima minimalan prostor, a neće biti ograničenja da se dužina kasnije poveća. broker
pascal.271 eagle, -> #268, broker
> Da, ali je tada jednostavnije da se promenljiva deklariše na > uobičajeni način, pa da joj se vrednost dodeli na početku > programa. Tada će u exe-u da zauzima minimalan prostor, a neće > biti ograničenja da se dužina kasnije poveća. Ali tada ne bismo imali STATIC promenljivu.
pascal.272 pedjak, -> #266, ognjen
> Thanks, samo jos nesto. Da li je skraceno flag po difoltu =true > ili mu je true vrednost dodeljena u nekom od prethodnih redova? Ne dodeljuje se flagu nikakva vrednost, nego se njegova vrednost ispituje, znači while flag do ... je isto što i while flag=true do ... Ok?
pascal.273 dejanr, -> #268, broker
>> Da, ali je tada jednostavnije da se promenljiva deklariše na >> uobičajeni način, pa da joj se vrednost dodeli na početku programa. >> Tada će u exe-u da zauzima minimalan prostor, a neće biti >> ograničenja da se dužina kasnije poveća. Dosta diskutabilno, tj. decidiran odgovor bi zahtevao proučavanje načina na koji turbo pascal generiše izvršni kod. Naime, ako kažem: var p: string; begin p:='pera'; ... end. biće u data segmentu alocirano 256 bajta za string p, ali još negde mora da stoji tekst 'pera'. E sad, moglo bi se zamisliti (tako su i radili neki od "poslednjih" bejzika na osmobitnim računarima) da se p nanišani tako da pokazuje na string 'pera' u memoriji, pa tek ako se nekada taj string promeni, da se alocira prostor na drugom mestu. Međutim sumnjam da Turbo Pascal tako radi, verovatno je tekst 'pera' negde u kod segmentu, a alocirani prostor je u data segmentu. Sve u svemu, ako bih ovako dodelio puno dugačkih promenljivih, to bi dalo relativno kratak EXE fajl, ali bi u trenutku izvršavanja em ceo taj fajl stajao u memoriji, em bi stringovi bili još na jednom mestu, u data segmentu. Dakle, trošila bi se memorija više nego što mora, tj. u zbiru bi bilo manje prostora na heap-u. Sa druge strane, ako stavim: var p: string[5]:='Pera'; (može i string[4], kako neko reče, ali ja obično stavim bajt-dva više, za svaki slučaj, naročito otkad me je jednom dimenzionisanje "u bajt" koštalo 800 dem) onda će se alocirati u data segmentu 5 (tj. 6 jer ima i dužina) bajta za promenljivu, i odma tu piše početna vrednost. U zbiru, ušteda na heap-u. Osim svega toga, meni je nekako preglednije kada vidim dodeljenu vrednost odmah, a ne moram da gledam "dole" u program.
pascal.274 .obj, -> #273, dejanr
> Međutim sumnjam da Turbo Pascal tako radi, verovatno je tekst 'pera' > negde u kod segmentu, a alocirani prostor je u data segmentu. U pravu si, ne postoji razlog da se promenljivoj naknadno dodeljuje vrednost. Samo bi se dodatno trošila memorija u CODE segmentu, gde TP smešta konstantne stringove. A osim toga, i nije pregledno. :) Eventualno bi kao argument bio da je odgovarajući EXE kraći, ali... PKLITE rules. ;)
pascal.275 .obj, -> #274, .obj
> Samo bi se dodatno trošila memorija u CODE segmentu, gde TP > smešta konstantne stringove. Nisam, kao i obično, bio precizan: TP stringove iz CONST-a smešta u DATA segment (zajedno sa "nulama":), a ("konstantne") stringove koje koristi u toku izvršavanja programa (pri dodeljivanju, konkatenaciji itd.) smešta u CODE segment.
pascal.276 bole,
Jao! Ovako: Ocu da napravim neki prg. (recimo) koji ce da upisuje u fajl podatke bilo kakve a da posle mogu da ih menjam. E to mora (koliko ja znam) da se radi sa RECORDIMA e posto jos nisam svatio kako se sa njima radi, MOLIM VAS pomoZITE Hvala unapred i unazad! bolE
pascal.277 dejanr, -> #276, bole
>> E to mora (koliko ja znam) da se radi sa RECORDIMA e posto jos nisam >> svatio kako se sa njima radi, MOLIM VAS pomoZITE Možda da pročitaš umetak o Paskalu iz prošlih (septembarskih) "Računara", tamo je to objašnjeno dosta detaljno? Kratko rečeno, napraviš record, na primer type telt = record ime: string; brtel: longint; end; onda definišeš promenljivu i fajl: var tel: telt; telf: file of telt; u programu otvoriš fajl: assing (telf, 'telefoni.dat'); reset (telf); i onda kada hoćeš da promeniš deseti (broji se od nule) telefon kažeš: seek (telf,10); read (telf, tel); tel.brtel:=123456; seek (telf,10); write (telf, tel); i na kraju zatvoriš fajl close (telf);
pascal.278 peca.st, -> #276, bole
!-> Ocu da napravim neki prg. (recimo) koji !-> ce da upisuje u fajl podatke bilo kakve a !-> da posle mogu da ih menjam. E to mora !-> (koliko ja znam) da se radi sa RECORDIMA !-> e posto jos nisam svatio kako se sa njima !-> radi, MOLIM VAS pomoZITE Ako hoćeš da menjaš podatke u fajlu, oni u opšte ne moraju biti neki slog. Mogu biti bilo kog tipa. Evo kako bi to izgledalo na uopštenom primeru: f : file of bilokojitip; bkt : bilokojitip; ... (ovde ide ono assign, reset, pa šetanje po fajlu, bilo šta...) read (f, bkt); .... (promena sadržaja promenljive "bkt") seek (f, filepos (f) - 1); (da se vrati tamo gde je malopre pročitao) write (f, bkt); ... Eto, ako još uvek nije jasno, pitaj. Peđa.
pascal.279 nikac,
Jedno pitanje za poznavaoce TVISION-a. Kako da saznam ime trenutno aktivnog prozora u Editoru?
pascal.280 niklaus, -> #270, broker
(:> C je u tome malo slobodan pa se pod TRUE uglavnom smatra ono (:> sto je različito od FALSE, a FALSE se obično smatra da je (:> nula. (:> Zato ja i volim Paskal. Jeste da je tvrd, ali brate znaš na (:> čemu Što jes' - jes! Poznata mi je (kao mnogima) definicija (aksiom?) FALSE je 0, a TRUE ponekad -1 (ovako beše u BASIC-u), nekad 1, nekad x!=0 (u C-u). I pored toga sam x puta morao da pogledam u onaj TurboC-ov Help, za naredbu _if_ - koji blok naredbi se izvršava za rezultat "zero", ili "nonzero". (:niklaus:)
pascal.281 vvelisavljev,
Kako rešavate štampanje iz TPa? Mene onaj standardni printer unit baš i ne zadovoljava. Nema kontrole da li je štampač uključen i sl. Da li postoji neki unit ovde na sezamu koji rešava stvar. Da li taj unit ima nešto više od jednog Assign(lst, prn)? Za neka duža štampanja koistim dos print. (napunim tekst fajl i onda pozovem print tekst.txt) Da li mogu nekako da u svom programu dobijem informacije o tome da li je određena datoteka odštampana, da li je uključen štampač i sl. a da ne koristim trik "print > trt.txt".
pascal.282 dejanr, -> #281, vvelisavljev
>> Kako rešavate štampanje iz TPa? U prošlomesečnim (septembarskim) "Računarima", u okviru umetka, diskutovano je i o štampanju iz paskala. Varijanta sa Assign(lst, prn), bilo preko printer unita ili direktno, ne zadovoljava ni za šta što nije tekst - pojedini karakteri (a naročio chr(26)) se kod takve štampe gube. Tamo je data procedura koja sprečava taj gubitak znakova (dos_rowmode), uz nju se može relativno pristojno štampati iz paskala. Jedno nešto drugačije rešenje (koje, inače, i ja koristim) dato je u "Računarima 85", u okviru umetka o laserskim štampačima. Isto, naravno, funkcioniše i na matričnom printeru. Ideja je da se sa štampačem komunicira preko BIOS-a, tamo imaš proceduru kojom se testira da li je štampač spreman, šalje znak itd. Primere iz jednog i drugog umetka imaš i u direktorijumu RSOFT: R094PAS.ZIP odnosno R055LAS.ZIP.
pascal.283 fole, -> #279, nikac
> Jedno pitanje za poznavaoce TVISION-a. > Kako da saznam ime trenutno aktivnog prozora u Editoru? Pročitaj naziv prozora :) Evo ja sam nešto izmajmunisao. Radi, ali rešenje je prilično neelegantno. Uz poruku je zakačen modifikovan TVEDIT.PAS iz TP 6.0. Izmene su ozna- čene sa (***********). Voleo bi kad bi neko uradio to jednostavnije (čitaj: elegantnije). ed.zip
pascal.284 predragd, -> #279, nikac
> Jedno pitanje za poznavaoce TVISION-a. > Kako da saznam ime trenutno aktivnog prozora u Editoru? Funkcijom GetTitle (MaxSize: Integer) iz TEditWindow objekta. MaxSize predstavlja maksimalnu dužinu imena prozora. Iako koliko sam ja uspeo da zakljucim iz fajla EDITORS.PAS MaxSize ne igra nikakvu ulogu. Peđa.
pascal.285 eagle, -> #283, fole
> Evo ja sam nešto izmajmunisao. Radi, ali rešenje je prilično > neelegantno. Uz poruku je zakačen modifikovan TVEDIT.PAS iz TP Jednostavnije ne može, ali ovako ipak neće raditi baš u svim programima. Može da se desi da aktivan pogled nije prozor. Doduše, u većini programa se direktno u desktop ubacuje isključivo Pwindow ili njegovi potomci (Pdialog, Peditwindow...) ali može neko da direktno iz Pviewa napravi svoj pogled, na primer neki terminal, i u tom slučaju bi program otišao na ko zna koju adresu, pošto je twindow.gettitle virtuelan. Ja sam smislio jedan način kojim možeš da pristupaš svim poljima bilo kog objekta iz desktopa. Na primer, treba mi dužina bafera iz aktivnog editora. Pošto ne postoji način da saznam da li je aktivan pogled editor ili npr. dijalog, umesto Teditwindow napravim svoju klasu koja je nasleđuje, i u toj klasi redefinišem neki metod sa parametrima, koji potiče iz Tview-a (zato što je desktop^.current^ tog tipa), na primer handleevent, tako da za neku cm vrednost upisuje u neku globalnu promenljivu polje bufsize iz svog objekta, a za druge vrednosti poziva teditwindow.handleevent. Pomenuta dužina se saznaje na sledeći način: duzina:=0; (* duzina je globalna promenljiva *) event.command:=cmDajMiBafer; desktop^.current^.handleevent(event); U slučaju da je duzina ostala na istoj vrednosti, znači da aktivan prozor nije editor, u svim ostalim slučajevima je sigurno pozvan metod tMyeditwindow.handlevent koji radi duzina:=bufsize; Dakle, ovako je moguće proveriti i tip aktivnog pogleda. Način je potpuno legalan, radi uvek, a treba dopisati ne više od desetak redova. Evo šiljem uz poruku ovako promenjen tvedit.pas , bitno je da vraća title samo ako je u pitanju editor, što je i trebalo uraditi. ed1.zip
pascal.286 djelovic, -> #284, predragd
> Iako koliko sam ja uspeo da zakljucim iz fajla EDITORS.PAS MaxSize ne igra > nikakvu ulogu. Rekao bih da je to uvedeno čisto zbog kompatibilnosti sa TurboVisionom za C++, koji je od C-a nasledio te nesrećne stringove.
pascal.287 djanjusevic,
Evo jednog problema na pascalu: Uz poruku ide i fajl sa source-om programa.Dati program bi trebao da nacrta jedan svemirski brodic.U zavisnosti od ugla Alfa brodic bi trebao da bude u sasvim drugom polozaju od pocetnog(tj. da sve koordinate budu rotirane za ugao Alfa u odnosu na centar rotacije(xcor,ycor). Pocetne koordinate svih tacaka nalaze se u fajlu podaci.dat,koji program koristi.Sve koordinate su sigurno dobre,ali ja ne znam u cemu je problem. HHHHEEEELLLPPP!!!!!! Mansell pascal.arj
pascal.288 ognjen,
Da li se pri ponovnom izvršavanju nekog programa u Pascalu stare vrednosti promenjlivih ostaju iste izuzev ako nisu "resetovane" u samom programu? Uf, ala sam ga zavukao... Dakle, da li se prilikom rešavanja jednacine Z=1/2 * 2/3 *...* 99/100 dva puta (dva puta se startuje program) dobija resenje 1/10000 umesto 1/100??? A, da, naravno, Z nije dobijalo nijednu određenu vrednost, što znači da se jednačina ustvari rešavala _DVA_ puta...
pascal.289 dejanr, -> #288, ognjen
>> Da li se pri ponovnom izvršavanju nekog programa u Pascalu stare >> vrednosti promenjlivih ostaju iste izuzev ako nisu "resetovane" u >> samom programu? Ne znam da li sam dobro razumeo - ako recimo imaš program TEST.EXE, startuješ ga, on nešto mulja i završi, ili ga prekineš, pa onda ponovo startuješ TEST, vrednosti promenljivih naravno neće biti sačuvane, izuzev ako je sam program preduzeo neko njihovo snimanje u datoteku itd.
pascal.290 zdule,
Zna li neko kako da izmerim vreme pisanja neke reči ili rečenice od pritiska prvog tastera do pritiskanja enter-a? ZDule...
pascal.291 ognjen, -> #289, dejanr
)-> Ne znam da li sam dobro razumeo - ako recimo imaš program )-> TEST.EXE, startuješ ga, on nešto mulja i završi, ili ga )-> prekineš, pa onda ponovo startuješ TEST, vrednosti )-> promenljivih naravno neće biti sačuvane, izuzev ako je sam )-> program preduzeo neko njihovo snimanje u datoteku itd. Da, to sam hteo da kažem... Ali vidi, kad sam startovao program: ----------------------------------------------------------------- program Simple (input, output); var z: real; b,i: integer; begin b:=1; i:=2; z:=1/2; repeat begin b:=b+1; i:=i+1; z:=z*(b/i); end; until b=100; writeln (z); writeln (1/10); if z<1/10 then writeln ('Tacno!') else writeln ('Nije tacno!') end. ----------------------------------------------------------------- Koji bi, kao sto vidiš, trebao da izračuna vec pomenutu jadnačinu, rešenje je bilo SVAKI PUT DRUGAžIJE (!?!) ! Kako je to moguće? (Exponent se povećavao uvek za -2, što znači da se dobijeni broj množio sa rešenjem jednačine 1/100, što znači da se ista jednačina izračunavala više puta! (onoliko puta koliko sam startovao program)).
pascal.292 peca.st, -> #291, ognjen
!-> Koji bi, kao sto vidiš, trebao da !-> izračuna vec pomenutu jadnačinu, !-> rešenje je bilo SVAKI PUT DRUGAžIJE (!?!) Ako si ga startovao iz editora onda je moguće. Ako ga kompajliraš na disk, pa startuješ ga kao exe (ono što je dejan napisao) onda se to ne može (hvala Bogu) desiti. Peđa.
pascal.293 a.kircanski, -> #290, zdule
_-=> Zna li neko kako da izmerim vreme pisanja neke reči ili _-=> rečenice od pritiska prvog tastera do pritiskanja enter-a? Lako: Kad ovaj pritisne prvo slovo(sa npr. keypressed proveravaš), onda uzmeš vreme sa gettime. (ne znam tačno sintaksu, ali ima nešto kao gettime. onda, kad lupi enter, uzmeš gettime u drugu varijablu, i onda lepo uzmeš delta(sati) i delta(minuti) B-) poz, sale.
pascal.294 zdule, -> #293, a.kircanski
╠═══ Kad ovaj pritisne prvo slovo(sa npr. keypressed proveravaš), Ma probao sam ja sa if keypressed then gettime() ali sam kao rezultat dobio neke nebuloze od brojeva. :((( ZDule...
pascal.295 asterix,
Da li u MS FORTRAN-u 5.1 postoji ekvivalentna funkcija koja vraća pritisnuti taster ? Odnoso da li se u FORTRAN-u može napraviti sledeća struktura: Program ... ; uses crt; Var c : char; Begin ... c:=Readkey <--- da li postoji ovakva konstrukcija u MSF5.1 ? ... End. Pozdrav Nenad :)
pascal.296 maksa, -> #295, asterix
<><> Da li u MS FORTRAN-u 5.1 postoji ekvivalentna funkcija <><> koja vraća pritisnuti taster ? Odnoso da li se u <><> FORTRAN-u može napraviti sledeća struktura: Ne znam je l' baš insistiraš na onome 5._1_ (u 5.0 definitivno ne postoji) a ako se ne pojavi neko ko kaže da postoji, pomaže ti samo ovo: Nađeš neku dobru dušu koja će ovo da ti izasemblira MASM-om: (ja bih rado, al' nemam MASM) PUBLIC GETCHR GETCHR PROC FAR PUSH BP MOV AH, 08H INT 21H MOV BP, SP LES BP, BP+6 XOR AH, AH MOV ES:BX, AX POP BP RET 04H GETCHR ENDPR i ubažiš, to jest povežeš sa tvojim programom. Koristilo bi se ovako nekako: PROGRAM TASTPROBA C--------------------------------- malo kozmetike :) INTERFACE TO INTEGER*2 GETCHR(M) INTEGER*2 M END C INTEGER*2 N WRITE(*,*) 'Pritisni nesto, sa Ctrl-C zavrsavas' 10 CONTINUE CALL GETCHR (N) WRITE(*,*) 'Nagazio si taster ',N,' ' GO TO 10 END Znam, znam, strašno. :( Sve ovo da bi dobio kôd jednog bezveznog tastera.
pascal.300 andrejt,
Kako da otvorim fajl za upis/citanje u TSR-u.I, usput kako da proverim tastere (sve sem onih koji mogu da se provere prekidom $16), takodje u TSR-u.
pascal.301 ognjen, -> #292, peca.st
)-> Ako si ga startovao iz editora onda je moguće. )-> Ako ga kompajliraš na disk, pa startuješ ga kao exe )-> (ono što je dejan napisao) onda se to ne može (hvala Bogu) )-> desiti. Kako da sredim da mi iz editora daje istu vrednost...?
pascal.302 janko, -> #294, zdule
> Ma probao sam ja sa if keypressed then gettime() ali sam > kao rezultat dobio neke nebuloze od brojeva. :((( Najlakše je da napišeš svoju rutinu za input.
pascal.303 a.kircanski,
Kako da pročitam sadržaj FAT-a? Ili da ga uništim. Prilog u ASMu je dobrodošao, također :-) poz, sale.
pascal.304 bulaja, -> #303, a.kircanski
│Kako da procitam sadrzaj FAT-a? Ili da ga unistim. └─── Najbolje za strukturu FAT-a, Boot sektora i slicnih stvari pogledaj neki od fajlova u INFO direktorijumu, npr. DosRef, HelpPC, TechRef i slicno. Ukratko, FAT obicno pocinje na prvom logickom sektoru (pise u boot sektoru gde tacno pocinje), citas ga funkcijama za absolut disk read (ne znam koja je f() u TP za to, ali imas i INT 25h). Dakle najbolje pogledaj opise strukture u tim INFO fajlovima, ako negde zapne pitaj :).
pascal.305 bole, -> #293, a.kircanski
>> Kad ovaj pritisne prvo slovo(sa npr. keypressed proveravas), >> onda uzmes vreme sa gettime. (ne znam tacno sintaksu, ali >> ima nesto kao gettime. onda, kad lupi enter, uzmes gettime Prosto napravis 8 wordova i 4 (ili 3 zavisno od preciznosti koja ti treba) integera pa das: GetTime (Hour, Min, Sec, Sec100); Pa posle gettime (hour2, min2, sec2,sec1002) pa das integer1:=hour2-hour ....pa prebacujes do 60 je jedan pa....
pascal.306 dr.grba,
Imam mladog druga, srednjoškolca, prilično zagrejanog za neke napredne tehnike u programiranju. Već je prilično verziran u Turbo Pascalu, a ja mu dođem nešto poput podstrekača, jer mu ponekad postavljam neke probleme na razmišljanje. Iz svega toga - pre ili kasnije - treba da se izrodi i korist, moja jer ću doći do nekog alatićA po narudžbi, a njegova jer će nešto da nauči i to upotrebi u budućnosti... Postavio sam mu problem u kome se još nije snašao: editovanje .EXE fajla, pisanog u Pascalu ili čak u nepoznatom razvojnom okruženju. I to sve u dva smera: sa jedne tačke kako pronaći neki deo koda i izmeniti mu neki if() uslov, a sa druge strane kako postaviti nove default vrednosti "zamrzavanjem" opcija datim na komandnoj liniji. Nešto, dakle, poput novih defaulta u programu FDS, viđenom na Sezamu. Stoga vas molim da ovde ili u mail na moje ime ostavite neku korisnu referencu, savet ili primer. Zahvaljujem se unapred na pomoći bilo koje vrste.
pascal.307 dejanr, -> #306, dr.grba
>> sa jedne tačke kako pronaći neki deo koda i izmeniti mu neki if() >> uslov... Ovo bi i mene zanimalo. >> a sa druge strane kako postaviti nove default vrednosti Nije poseban problem - pre neki dan baš to napravih u Prvoj Srpskoj Elektronskoj Kihalici (IBMPC\FUN\KIHALICA.ZIP). Staviš neki karakterističan string u program (npr. const default: string[12]:='TRALALA#$XXX'), onda otvoriš EXE fajl kao i svaki drugi (imaš ime u PARAMSTR(0)), nađeš string TRALALA#$$ i umesto XXX upišeš novu vrednost. Nije baš u duhu "čistog i kulturnog" programiranja, ali radi posao :) Mislim da je zzivotic pisao o ovome pre par meseci u "Računarima".