pascal.1238ventura,
-> #1237, emajsijuen> To je lako, a ? Aj' mi onda napravi (onako, na brzaka) jedan viewer za
> recimo *.PCX fajlove (kad si ih vec pomenuo). Ako ti treba opis formata,
> javni mi pa da ga iskopam negde sa NET-a... ;)
PCX skoro pa da nema nikakav format, uzmi lepo ucitaj file i napravi
petlju koja proverava koja je vrednost dati byte, i shodno tome ispises
boju... malo matematike al je barem lako...
VeNTuRa
pascal.1239jjerry,
-> #1238, ventura>> boju... malo matematike al je barem lako...
Ma da,a i matematike skoro da nema,osim operacija +,* itd. :)
Uostalom,milion programa na Netu koji se bave recimo texture
mappingom u sebi imaju kod za chitanje .PCX. Trivijalno bre..
pascal.1240ventura,
-> #1239, jjerry> Ma da,a i matematike skoro da nema,osim operacija +,* itd. :)
> Uostalom,milion programa na Netu koji se bave recimo texture
> mappingom u sebi imaju kod za chitanje .PCX. Trivijalno bre..
Pa jebiga... Nego ko li je trazio, ovaj sors. Sad se setih.
Ja imam bbs posvecen upravo ovim stvarima ;) koji za divno
cudo ima gomilu sorseva u pascalu... loguj se od 22-06 pa skini...
Nickeldon BBS (011) 3942592
pascal.1241goxi,
Hi!
Kako resiti sledeci problem...javlja mi : "Stack overflow error" ! Probao sam
sa povecanjem Stack Size-a (Options/memory size), ali to ne pomaze.
Goran.,
pascal.1242jjerry,
-> #1241, goxi>>Kako resiti sledeci problem...javlja mi : "Stack overflow error" !
>>Probao sam sa povecanjem Stack Size-a (Options/memory size), ali
to
>>ne pomaze.
Ponekad mozhe da pomogne da ruchno (pomocu onih direktiva koje se
stavljaju u { } ) povetjash stek. Inache,mislim da ti se to javlja
neka rekurzija koja izgleda nije najpametnije osmishljena,pa bi
mogao da pregledash rek. procedure ako ih imash..
Poz,J.J..
pascal.1243gkosta,
Evo problema, da li mi neko moze pomoci:
type
covek=record
ime:string[20];
prezime:string[20];
end;
slog:record
ljudi:array [1..50] of covek;
end;
Potrebno mi je da ovaj niz bude neogranicen (znaci ljudi>=1).
Sta da radim?
Pozdrav
pascal.1244jjerry,
-> #1243, gkosta>>type
>> covek=record
>> ime:string[20];
>> prezime:string[20];
>> end;
>> slog:record
>> ljudi:array [1..50] of covek;
>> end;
Prvo,ne bi bilo loshe da pishesh malo sa
uvlachenjima/izvlachenjima,tj. da text ne bude poravnat kao ovde.
Drugo,malo mi nisu ovi end-ovi jasni. Ovaj prvi bi trebalo da bude
kraj definisanja tipa chovek,ali za shta sluzhi ovaj drugi ? I ako
definishesh tip "slog" i tip "ljudi" zashto su tu onda dve tachke
umesto znaka jednako. Mnogo konfuzno,u najmanju ruku.
Inache,tvoj problem,ako pretpostavimo da je sve ostalo sintaxno OK
:) bi se mogao reshiti tako shto definishesh tip ljudi kao pointer
na tip "covek",isto kao shto se radi u C-u. Ili da napravish
neku dinamichku strukturu,npr. listu u koju cesh da stavljash
podatke. Inache,bilo kako bilo,niz ti ne mozhe bidi ni blizu
neogranichenom jer postoji 64K ogranichenje za Pascalov DATA
segment..djubre.
Poz,J.J..
pascal.1245kojai,
Sta da uradim da bih se nakacio na interapt od coma 4, tacnije da se neka
moja procedura poziva na svaku promenu na comu...
Sa Setintvec se 'kao' zakacim medjutim da bi to radilo kako sam ja zamislio
treba da popunim one nazovimo tablice kod portova, koje su objasnjene u
interapt listama... Ali ono je nesto oko 20-30 komada ako se ne varam, tako da
je provaljivanje duzi posao, ako je nekao uradio neka mi baci na mail...
Isa
pascal.1246vule.,
Koje su komande za obradu gresaka ?
pascal.1247gkosta,
Molim nekoga da mi odgovori:
Zasto mi ne funkcionise u programu klasicno otvaranje fajla sa
Assign - Reset?
Kada posle Assign stavim Rewrite fajl se otvara, medjutim ne odgovara mi
ponistavanje (presnimavanje) fajla.
E, da... U prvom slucaju mi ispisuje gresku i prijavljuje da fajl nije
nadjen/otvoren!
Saljem deo programa.
Hvala vam.
proba.paspascal.1248kojai,
-> #1247, gkosta>> E, da... U prvom slucaju mi ispisuje gresku i prijavljuje da fajl nije
>> nadjen/otvoren!
Normalno kad ne postoji fajl...
Uradi sledece:
f-file of poset
a-array[1..n] of poset
Assign(f, 'mika.txt');
Rewrite(f);
for i:=1 to n do begin
Write(f, a[i]);
end;
Close(f):
Kada ucitavas:
Assign(f, 'mika.txt');
Reset(f);
for i:=1 to n do begin
Read(f, a[i]);
end;
Close(f);
Ili ako oces samo jedan element da ocitas npr. 4-ti od 6 elemenata, ides:
Seek(f, 4);
Write(f, e); e-poset
Znaci kada zadajes sta hoces da ocita ne stavljas mu npr. seek(f, pos) vec
seek(f, n) gde je: pos-pozicija u bajtovima, n-redni broj reda koji se ocitava.
Isa
pascal.1249qpele,
-> #1248, kojai> Kada ucitavas:
>
> Assign(f, 'mika.txt');
> Reset(f);
> for i:=1 to n do begin
> Read(f, a[i]);
> end;
> Close(f);
>
Opet ce pucati ako nema fajla "mika.txt".
Uradi sledece
{$I-} (* ukida kontrolu U/I*)
Assign(f, 'mika.txt');
Reset(f);
{$I+} (* uvodi kontrolu U/I inace default stanje *)
if (IOResult=0) then (* Ako datoteka postoji IResult je 0
u suprotnom je razlicit od 0 *)
begin
for i:=1 to n do begin
Read(f, a[i]);
end
else
rewrite(f);
end;
Close(f);
pascal.1250nbjvsb,
-> #1248, kojai>> n-redni broj reda koji se ocitava.
Redni broj podatka, redovi u binarnim datotekama ne postoje :-)
Nadovezivanje:
Ukoliko radiš sa tekstualnom datotekom (f: text), onda ćeš imati malih
komplikacija, jer se Seek(f,pos); koristi samo u binarnim datotekama. Koja
je razlika između text i file of string? Razlika je u tome što tekstualne
datoteke rade sa redovima koji se završavaju sa Eoln (to mu dođe kombinacija
karaktera #13 i #10 - #13 označava prelazak na istu poziciju u sledećem redu,
a karakter #10 vraća kursor na početak reda), a file of string sa
podkanapisa, ondae ta vičina
6 bajtova). Kada imaš podatke određene veličine lako je skakati sa jednog
na drugi, dok je kod različitih duđina redova to komplikovanije raditi.
Kod tekstualnih datoteka koriste se Read/ReadLn i Write/WriteLn procedure. Da
bi mogao da uradiš kakav-takav Seek (koji će sa velikim datotekama raditi
sporo), možeš da iskoristiš ovakvu proceduru:
procedure SeekText(f: text; Pos: word);
var
i: word;
begin
Reset(f);
for i:=1 to Pos do
ReadLn(f)
end;
Kolko se sećam, var za datoteke nije neophodan, al' možda i grešim :-)
Elem, u gornjem primeru (kao i inače), Seek(f,0); postavlja datotečki
pokazivač na prvi red, itd...
Preterano sam se raspisao, odo' da se odmorim :-)
pascal.1251gkosta,
-> #1249, qpele
Hvala vam svima.
Tek sam sada procitao poruke i cini mi se da je ovo sa IOResult-om najbolje
resenje.
Javicu sta sam uradio.
Hvala jos jednom!
:)
pascal.1252kojai,
-> #1250, nbjvsb>> Redni broj podatka, redovi u binarnim datotekama ne postoje :-)
Nisam znao kako da se izrazim...
Da pojasnim...
Ako je fajl otvoren kao file of slog, gde je slog = Record od necega i ako
fajl sadrzi recimo 10 elemenata, 7-om elementu se pristupa sa Seek(f, 7), a ne
Seek(f, pos), gde je pos pozicija...
Ako je fajl otvoren kao text onda seek ne radi... A ako je otvoren sa file of
byte, char, word..., onda ide obicno seek(f, pos)...
Ako je otvoren sa file of string[20] onda je moguce uraditi seek(f, 5) npr. da
bi se dobio 5 string...
>> {$I-} (* ukida kontrolu U/I*)
Pa jeste... Ovo izgleda kao pametnije resenje... :)
Isa
pascal.1253voyager,
Pitanje:
Imam putanju : '*:\direktorijum\..'
* - drajv
Kako da na osnovu ove putanje saznam koliko je mesta ostalo na
drajvu?
VoYaGeR
pascal.1254kojai,
-> #1253, voyager>> Kako da na osnovu ove putanje saznam koliko je mesta ostalo na
>> drajvu?
Evo ti nesto primitivno... Recimo da je s: string...
Uses Dos;
Var
s: String;
a: Byte;
begin
s:='C:\UTIL';
If Copy(s,1,1)='A' then a:=1; {Ili uradis sa case CH of}
If Copy(s,1,1)='B' then a:=2; {Gde je CH: Char, Copy(S, 1, 1)}
If Copy(s,1,1)='C' then a:=3; {Ali za ovako malo nema potrebe}
If Copy(s,1,1)='D' then a:=4;
If Copy(s,1,1)='E' then a:=5;
{...itd.}
WriteLn('Na disku je ostalo ', DiskFree(a), ' bajtova.');
end.
:))
Ako ti treba za nesto ozbiljnije - nemoj ovako...
Isa
pascal.1255voyager,
-> #1254, kojai >> Ako ti treba za nesto ozbiljnije - nemoj ovako...
Ovo sam znao i sam da uradim ali posto mi treba za nesto ozbiljnije
bio bi zahvalan ako neko zna malo prostiji nacin :) Ali u svakom
slucaju hvala.
VoYaGeR
pascal.1256kojai,
-> #1255, voyager>> Ovo sam znao i sam da uradim ali posto mi treba za nesto ozbiljnije
>> bio bi zahvalan ako neko zna malo prostiji nacin :) Ali u svakom
Pa da li postoji prostiji nacin od citanja prvog karaktera stringa?
Ja nisam rekao da je ovo slozeno, nego da nije previse oziljno... Ali
definitivno je najlakse...
Isa
pascal.1257jjerry,
Zadaci sa shkolskog takmichenja iz informatike u MG-u..
1.zadatak :
Dat je niz od N brojeva.Naci najduzi segment koji je palindrom.
Segment se sastoji od uzastopnih elemenata polaznog niza. Segment
je palindrom akko se isto cita sleva nadesno i zdesna nalevo.
Ulazni podaci se nalaze u fajlu :
* U prvom redu broj N (N<=2000)
* U sledecih N redova po jedan ceo pozitivan broj,manji od
2000000000.
Primer ulaznog fajla :
6
1
2
4
3
5
3
Na ekranu treba ispisati : 3 4
2.zadatak :
Data je matrica se M vrsta i 2^N kolona.Sve vrste osim prve mogu se
ciklichno pomerati udesno (svaki element prelazi u susednu desnu
kolonu,osim poslednjeg,koji prelazi u prvu kolonu). Za koliko mesta
udesno treba pomeriti svaku vrstu,da bi nakon pomeranja svaka
kolona imala isti zbir.
Ulazni podaci su u fajlu ZAD2.DAT :
* U prvom redu brojevi M i N ; M,N <= 10
* U sledecih M redova po 2^N integera. (-MAXINT-1..MAXINT)
Treba ispisati M-1 brojeva,koji oznachavaju pomeraje
druge,trece...M-te vrste.
Na primer,za fajl :
3 2
1 2 3 4
5 6 7 8
1 3 1 3
na ekranu treba ispisati : 2 1 ili 2 3.Ako nema reshenja,treba
ispisati "nema reshenja".
----------------------------
To je to.Btw. kome uspe da napravi takav algoritam koji ce na
prosechnom P5 da radi ispod 5 sekundi za RANDOM matricu 10x1024
skidam kapu i dajem mu svoje mesto u MG a ja idem u djubretarsku :)
Poz,JJ..
pascal.1258qpele,
-> #1256, kojai> Ja nisam rekao da je ovo slozeno, nego da nije previse oziljno... Ali
> definitivno je najlakse...
A i radi posao, sto je najbitnije.
pascal.1259aandric,
-> #1257, jjerrySto se tice takmicenja iz informatike.
Zadaci u principu nebi bili mnogo teski da stoka koja ih je
sastavljala nije po svom obicaju stavljala glupe fazone tipa
:"da ti program radi za 3 sekunde sa brojevima vecim od
longint..."
Inace ja sam drugi uradio backtracking-om za sve brojeve ali
sam zbog vremenskih ogranicenja dobio samo 15 poena (shmrc).
Sada bih svoj algoritam mogao da unapredim za sve test primere
osim onog 10*1024 sa resenjem.Pokazao nam je Dragan
Urosevic,koji mi inace predaje C, kako se radi taj
zadatak.Covece nista nisam razumeo: neki ciklicni krugovi,
pizde materine...
BTW, jel zna neko ko ce da ide dalje?Pitao sam Vugdeliju i
on mi je u petak rekao da postoje dve mogucnosti u zavisnosti
od broja raspolozivih racunara: ili ce proci dalje prvih 30
ili svi koji imaju vise od nula bodova.
pascal.1260ventura,
-> #1259, aandric> Zadaci u principu nebi bili mnogo teski da stoka koja ih je
> sastavljala nije po svom obicaju stavljala glupe fazone tipa
> :"da ti program radi za 3 sekunde sa brojevima vecim od
> longint..."
Nakon listanja raznih enciklopedija, sam skontao da zadatci nisu
nesto preterano teski, ali oni debilisto ih sastavljaju ti napisu,
isracunaj parafenamonalnodislekcionu matricuopsedjuktivnog broja...
jebiga nismo svi iz MG :)
pascal.1261kojai,
-> #1257, jjerryCemu ovo sluzi?? Uz to i ne radi... :))
pascal.1262emajsijuen,
-> #1254, kojai>> s:='C:\UTIL';
>> If Copy(s,1,1)='A' then a:=1; {Ili uradis sa case CH of}
>> If Copy(s,1,1)='B' then a:=2; {Gde je CH: Char, Copy(S, 1, 1)}
>> If Copy(s,1,1)='C' then a:=3; {Ali za ovako malo nema potrebe}
A:=Ord(S[1])-64;
pascal.1263kojai,
-> #1262, emajsijuen>> A:=Ord(S[1])-64;
Ne moze Ord od stringa... Ali lepa zamisao... :)
Isa
pascal.1264nbjvsb,
-> #1263, kojai>> >> A:=Ord(S[1])-64;
>> ^^^^
>> Ne moze Ord od stringa... Ali lepa zamisao... :)
Pogledaj malo bolje ovo gore. Ne piše samo S, već S[1]. S[poz] vraća
_karakter_ (znači char) koji se nalazi na poziciji poz u stringu, pri
čemu S[0] predstavlja karakter dužine - Ord(S[0]) će ti reći koliko je
string dugačak. Isto kao i Length(S).
pascal.1265kojai,
-> #1264, nbjvsbDa... Moja greska... :)
pascal.1266jjerry,
-> #1259, aandric>> Inace ja sam drugi uradio backtracking-om za sve brojeve ali
>>sam zbog vremenskih ogranicenja dobio samo 15 poena (shmrc).
Ma znam,ja sam ga isto uradio backtracking-om,al' sam dobio samo 6
poena. Fazon : prolaskom sa Trace Into se ispisuju tachna reshenja,
i u strukturu se ista upisuju savrsheno. Sa Ctrl-F9 se ispisuju 0 ?!
Reche mi Vugdelija da je to,kao,99% programerska greshka i da
verovatno program dira neku memoriju koju ne bi smeo,kao npr. pichi
van matrice ili slichno,ali takvih stvari kod mene nema..rebus..
>>osim onog 10*1024 sa resenjem.Pokazao nam je Dragan
>>Urosevic,koji mi inace predaje C, kako se radi taj
Blago tebi,blago meni...Meni inache sad predaje Jasminka ;)))) tako
da si mi ulepshao dan saznanjem da mi ona u trecoj nece predavati ;)
>>od broja raspolozivih racunara: ili ce proci dalje prvih 30
>>ili svi koji imaju vise od nula bodova.
Napisali su u shkoli...Praktichno ,30 onih koji odu na gradsko
odlaze i na republichko,jer 30 i pushtaju. Razlog : proferore mrzi
da sede 8 sati..Barabe..
Pozdrav,JJ..
pascal.1267jjerry,
-> #1260, ventura>> Nakon listanja raznih enciklopedija, sam skontao da zadatci nisu
Shto si listao enciklopedije ? Btw. ipak mislim da su vremenska
ogranichenja pozitivna stvar. Prvo,onaj ko pregleda nije blesav da
sedi 10h za kompjuterom chekajuci reshenje,a drugo,da nema
ogranichenja,genijalan algoritam i najprizemniji peshachki
algoritam ce biti isto ocenjeni,zar ne ?
Pozdrav,JJ..
pascal.1268nbjvsb,
-> #1252, kojaiIzvinjavam se što tek sad odgovaram, ali grešom sam sve poruke u Pascalu
označio kao pročitane :-(
>> Ako je fajl otvoren kao file of slog, gde je slog = Record od necega i ako
>> fajl sadrzi recimo 10 elemenata, 7-om elementu se pristupa sa Seek(f, 7),
>> a ne Seek(f, pos), gde je pos pozicija...
Koja je razlika između Seek(f,7) i Seek(f,pos), gde je pos pozicija, majke
ti? Naravno, pod pos mislim na redni broj podatka, a ne na bajt u datoteci.
BTW. 7-om elementu pristupa se sa Seek(f,6). Kao što rekoh, Seek(f,0) vraća
prvi element u datoteci, itd.
pascal.1269kojai,
-> #1268, nbjvsb>> Koja je razlika izmedu Seek(f,7) i Seek(f,pos), gde je pos pozicija, majke
>> ti? Naravno, pod pos mislim na redni broj podatka, a ne na bajt u datoteci.
A sta sam ja rekao?!
Nema razlike izmedju seek(f,7) i seek(f,pos) ali ja sam pricao o dve razlicite
stvari... Prvo o fajlu otvorenom sa file of rec, a potom o fajlu otvorenom sa
file of byte... Samo sam uporedio...
Mozda sam pogresio u kuckanju... :)
Isa
pascal.1270nbjvsb,
-> #1269, kojai>> A sta sam ja rekao?!
Pa rekao si da se sa file of slog elemntu pristupa sa Seek(f,7) a ne sa
Seek(f,pos). Cijenim da se nismo razumeli. Mislim da si pod pos podrazumevao
poziciju u bajtovima, a ja poziciju elementa, iliti sloga, u fajlu :-)
pascal.1271jjerry,
Otjete zadatke sa gradskog u MG ? Btw. da li neko na sluchajno,da
li su zadaci za sve shkole isti,ili kao na matematici ,ono,mi smo A
kategorija,ostali su B itd. ?
Poz,JJ..
pascal.1272nbjvsb,
-> #1271, jjerry>> Otjete zadatke sa gradskog u MG ? Btw. da li neko na sluchajno,da
>> li su zadaci za sve shkole isti,ili kao na matematici ,ono,mi smo A
>> kategorija,ostali su B itd. ?
U informatici, gradsko je uvek bilo isto za sve. Jedino je školsko bilo
deljeno na jače i slabije. :-)
Inače, šalji zadatke. Ko ih uopšte sada pravi?
pascal.1275sqweaky,
Senzacionalno! :)
********************************
** Sors Dos Navigatora v1.51! **
********************************
Skinite obavezno. :)
Predlazem javno unapredjivanje DN-a. Recite sta bi trebalo
dodati, promeniti. Meni je ovo prvo palo na pamet:
1) Podrska za LFN
2) Izbaciti registraciju O:)
3) Windows verzija
4) Meniji na srpskom
5) Vise asemblera, manje paskala :)
6) ...
p.s.
Za kompajliranje su vam potrebni Tasm, Tlink i Borland Paskal
7.0.
dn151src.zippascal.1276kojai,
-> #1275, sqweaky>> Senzacionalno! :)
Bilo bi da si poslao pre 5 godina... Kome danas treba bilo koji dos source?
Neisplativo, nazalost... :(
Isa
pascal.1277pavijan,
-> #1275, sqweaky> Senzacionalno! :)
>
> ********************************
> ** Sors Dos Navigatora v1.51! **
> ********************************
> Predlazem javno unapredjivanje DN-a. Recite sta bi trebalo
> dodati, promeniti. Meni je ovo prvo palo na pamet:
>
> 1) Podrska za LFN
> 2) Izbaciti registraciju O:)
> 3) Windows verzija
> 4) Meniji na srpskom
> 5) Vise asemblera, manje paskala :)
> 6) ...
______________________________
Predlozi:
1) Pozdrska za LNF
2) Brisanje u Recycle Bin
3) Unaprediti Terminal (recimo sa Mini Host-om)
4) Unaprediti CD Player za MP3, MOD i sl.
5) Vise assemblera svakako.
6) Unaprediti System Information.
7) Pojacati Help.
8) Ostati u okviru 1.44 Mb instalacija.
9) Izbor za vise jezika.
10) Meni vise netreba :)))))))))))
Ako se ovo postigne Windows verzija uopste nije neophodna. Registraciju
zadrzati.
Pozdrav od pavijana. :))))))))
pascal.1278pavijan,
-> #1276, kojai> Bilo bi da si poslao pre 5 godina... Kome danas treba bilo koji dos source?
______________________________
Ovaaj.. grdno ovaaj.. grdno gresis sinak.. :)))))
Bez uvrede ali DN se danas trosi nesmanjenom zestinom i stoji po upotrebi rame
uz rame sa Windovs Commander-om i Windows Explorerom a kad bi se unapredio
garant bi potisnuo rivale. Posto je izasao source predpostavljam da ce sledeca
verzija Windows Commanreda (koja inace dosta kasni) biti dogradjena tako da ce
izgledati kao Windows verzija DN-a. Win Navigator je lep pokusaj ali je jos
nedoradjen i vise podseca na NC nego na DN.
Pozdrav od pavijana dosofilima - vrsti koja izumire. :)))))))
pascal.1280kojai,
-> #1278, pavijan
>> Pozdrav od pavijana dosofilima - vrsti koja izumire. :)))))))
Upravo to... :(
Isa
pascal.1281stemil,
-> #1278, pavijan> Bez uvrede ali DN se danas trosi nesmanjenom zestinom i stoji po upotrebi
> rame uz rame sa Windovs Commander-om i Windows Explorerom a kad bi se
> unapredio
The Best Shell In The World !
Still...Forever !!!
pascal.1282stameni,
Uz poruku ide, kazu, najbolji generator slucajnih brojeva,
koga je neko vec ranije kacio ovde. Algoritam je raden u
Fortranu, pa je posle prebacen u C, i u takvom obliku ga ja
ponavljam. Potreban je program u Pascalu, pa ako je neko u
prilici da prebaci, ne bilo mu tesko...
P. S. Radim bez tvrdog diska, tako da nema sanse da
pokrenem kompajler, pa zato molim.
best_rnd.cpascal.1283kojai,
Imam jedno pitanje...
Sa jednog kompa saljem podatke preko porta $2F8 (COM 2), a na drugom ocitavam
taj port... Zanima me kako da saopstim da sam procitao podatak i da cekam do
sledeceg. Pokusao sam sa Delay-om(pauzom) ali to se tako ne radi posto ponekad
se preskoci i neprocitani... Pokusao sam knjisku varijantu sa SetIntVec i
GetIntVec ali to mi ne radi. Pokusao sam sa interaptom 14h, ah=1 recive from
com port, ali to mi presporo ide(odnosno ne ide)...
Kako ovo da sredim, odnosno kako da ocitavam lepo sa COM-a 2?
pascal.1284jjerry,
Da li neko zna tachnu formulu za prevodjenje boje iz hue,saturation,
luminocity (intensity,kod nekih autora) vrednosti u RGB vrednosti.
Analizom vrednosti u chuvenom 'Custom color' prozoru windowsa sam
napravio proceduru koja daje tachan prevod (jedini uochljivi bag je
shto ponekad vrednosti zbog round-ovanja budu 1 manje/vece od
tachnih) ali sam u nekim drugim kodovima video drugachiju formulu :
R = [ 64*I/2 * (1 + S * sin(H - 2*Pi/3))]
G = [ 64*I/2 * (1 + S * sin(H))]
B = [ 64*I/2 * (1 + S * sin(H + 2*Pi/3))]
R,G,B,H,S,I <=> Red,Green,Blue,Hue,Saturation,Intesity (Luminocity)
[x] = trunc(x) itd. ,
koja ne daje tachne rezultate za Windows ;) 'Custom color' prozor.
Poz,JJ..
pascal.1285kiklop,
-> #1284, jjerry> Da li neko zna tachnu formulu za prevodjenje boje iz hue,saturation,
> luminocity (intensity,kod nekih autora) vrednosti u RGB vrednosti.
Pa evo ti ceo članak iz MS-ove baze znanja koji se bavi pitanjem:
PSS ID Number: Q29240
Article last modified on 11-02-1995
PSS database name: WIN32SDK
3.00 3.10 4.00 | 3.50 3.51
WINDOWS | WINDOWS NT
-------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Windows Software Development Kit (SDK) for Windows
versions 3.1 and 3.0
- Microsoft Win32 Application Programming Interface (API) included with:
- Microsoft Windows NT versions 3.5 and 3.51
- Microsoft Windows 95 version 4.0
-------------------------------------------------------------------------
SUMMARY
=======
The code fragment below converts colors between RGB (Red, Green,
Blue) and HLS/HBS (Hue, Lightness, Saturation/Hue, Brightness,
Saturation).
MORE INFORMATION
================
/* Color Conversion Routines --
RGBtoHLS() takes a DWORD RGB value, translates it to HLS, and
stores the results in the global vars H, L, and S. HLStoRGB takes the
current values of H, L, and S and returns the equivalent value in an
RGB DWORD. The vars H, L, and S are only written to by:
1. RGBtoHLS (initialization)
2. The scroll bar handlers
A point of reference for the algorithms is Foley and Van Dam,
"Fundamentals of Interactive Computer Graphics," Pages 618-19. Their
algorithm is in floating point. CHART implements a less general
(hardwired ranges) integral algorithm.
There are potential round-off errors throughout this sample.
((0.5 + x)/y) without floating point is phrased ((x + (y/2))/y),
yielding a very small round-off error. This makes many of the
following divisions look strange.
*/
#define HLSMAX RANGE /* H,L, and S vary over 0-HLSMAX */
#define RGBMAX 255 /* R,G, and B vary over 0-RGBMAX */
/* HLSMAX BEST IF DIVISIBLE BY 6 */
/* RGBMAX, HLSMAX must each fit in a byte. */
/* Hue is undefined if Saturation is 0 (grey-scale) */
/* This value determines where the Hue scrollbar is */
/* initially set for achromatic colors */
#define UNDEFINED (HLSMAX*2/3)
void RGBtoHLS(lRGBColor)
DWORD lRGBColor;
{
WORD R,G,B; /* input RGB values */
BYTE cMax,cMin; /* max and min RGB values */
WORD Rdelta,Gdelta,Bdelta; /* intermediate value: % of spread from max
*/
/* get R, G, and B out of DWORD */
R = GetRValue(lRGBColor);
G = GetGValue(lRGBColor);
B = GetBValue(lRGBColor);
/* calculate lightness */
cMax = max( max(R,G), B);
cMin = min( min(R,G), B);
L = ( ((cMax+cMin)*HLSMAX) + RGBMAX )/(2*RGBMAX);
if (cMax == cMin) { /* r=g=b --> achromatic case */
S = 0; /* saturation */
H = UNDEFINED; /* hue */
}
else { /* chromatic case */
/* saturation */
if (L <= (HLSMAX/2))
S = ( ((cMax-cMin)*HLSMAX) + ((cMax+cMin)/2) ) / (cMax+cMin);
else
S = ( ((cMax-cMin)*HLSMAX) + ((2*RGBMAX-cMax-cMin)/2) )
/ (2*RGBMAX-cMax-cMin);
/* hue */
Rdelta = ( ((cMax-R)*(HLSMAX/6)) + ((cMax-cMin)/2) ) / (cMax-cMin);
Gdelta = ( ((cMax-G)*(HLSMAX/6)) + ((cMax-cMin)/2) ) / (cMax-cMin);
Bdelta = ( ((cMax-B)*(HLSMAX/6)) + ((cMax-cMin)/2) ) / (cMax-cMin);
if (R == cMax)
H = Bdelta - Gdelta;
else if (G == cMax)
H = (HLSMAX/3) + Rdelta - Bdelta;
else /* B == cMax */
H = ((2*HLSMAX)/3) + Gdelta - Rdelta;
if (H < 0)
H += HLSMAX;
if (H > HLSMAX)
H -= HLSMAX;
}
}
/* utility routine for HLStoRGB */
WORD HueToRGB(n1,n2,hue)
WORD n1;
WORD n2;
WORD hue;
{
/* range check: note values passed add/subtract thirds of range */
if (hue < 0)
hue += HLSMAX;
if (hue > HLSMAX)
hue -= HLSMAX;
/* return r,g, or b value from this tridrant */
if (hue < (HLSMAX/6))
return ( n1 + (((n2-n1)*hue+(HLSMAX/12))/(HLSMAX/6)) );
if (hue < (HLSMAX/2))
return ( n2 );
if (hue < ((HLSMAX*2)/3))
return ( n1 + (((n2-n1)*(((HLSMAX*2)/3)-hue)+(HLSMAX/12))/(HLSMAX/6))
);
else
return ( n1 );
}
DWORD HLStoRGB(hue,lum,sat)
WORD hue;
WORD lum;
WORD sat;
{
WORD R,G,B; /* RGB component values */
WORD Magic1,Magic2; /* calculated magic numbers (really!) */
if (sat == 0) { /* achromatic case */
R=G=B=(lum*RGBMAX)/HLSMAX;
if (hue != UNDEFINED) {
/* ERROR */
}
}
else { /* chromatic case */
/* set up magic numbers */
if (lum <= (HLSMAX/2))
Magic2 = (lum*(HLSMAX + sat) + (HLSMAX/2))/HLSMAX;
else
Magic2 = lum + sat - ((lum*sat) + (HLSMAX/2))/HLSMAX;
Magic1 = 2*lum-Magic2;
/* get RGB, change units from HLSMAX to RGBMAX */
R = (HueToRGB(Magic1,Magic2,hue+(HLSMAX/3))*RGBMAX +
(HLSMAX/2))/HLSMAX;
G = (HueToRGB(Magic1,Magic2,hue)*RGBMAX + (HLSMAX/2)) / HLSMAX;
B = (HueToRGB(Magic1,Magic2,hue-(HLSMAX/3))*RGBMAX +
(HLSMAX/2))/HLSMAX;
}
return(RGB(R,G,B));
}
Additional reference words: 3.00 3.10 3.50 4.00 95 color RGB HLS HBS
KBCategory: kbgraphic
KBSubcategory: GdiPal
=============================================================================
Copyright Microsoft Corporation 1995.
Nadam se da ti je ovo pomoglo.
pascal.1286zdravkod,
-> #1285, kiklopGde moze da se nabavi MS SDK. Da li se dobija (kompletan) uz Delphi
ili C++ Builder?
Zdravko
pascal.1287kiklop,
-> #1286, zdravkod> Gde moze da se nabavi MS SDK. Da li se dobija (kompletan) uz Delphi
> ili C++ Builder?
>
> Zdravko
Uz Delphi 3.0/4.0 i C++ Builder 1.0/3.0/4.0 se dobijaju hlp fajlovi koji
uglavnom predstavljaju dokumentaciju za win32 SDK. S time da to
nije sve, nije najsvežije i najtačnije. Uz sve to je jako poželjno da
nabaviš MSDN (Microsoft Developers Network) koji se isporučuje uz
MS VC++. Najbolje je da kupiš ovaj uz VC++ 6.0, pošto je najsvežiji.
u njemu je kompletan win32 SDK, knowledge base za sve MS
proizvode, bugovi, primeri itd... Inače ide na dva CD-a i zahteva
postojanje Internet Explorera 4.0 i podrške za HTML help (win98).
pascal.1288goxi,
Da li je nekako moguce citati _znak po znak_ iz fajla (i upisivati
u drugi) ?
Znaci vazno je da se cita znak po znak a ne red po red.
Goran.
pascal.1289emajsijuen,
-> #1288, goxi
EM>> Da li je nekako moguce citati _znak po znak_ iz fajla (i upisivati
EM>> u drugi) ?
Naravno da jeste. Izvodljivo je na vise nacina. Evo ti nesto iz glave, valjda
nisam nigde pogresio.
Uses DOS;
Var
FIn :File Of Char;
Znak :Char;
Begin
Assign(FIn, ParamStr(1));
Reset(FIn);
While Not EOF(FIn)
Do Begin
Read(FIn, Znak);
Writeln('Znak br. ', FilePos(FIn), ' iz fajla je: "'+Znak+'");
End;
Close(FIn);
End.
pascal.1290jjerry,
Opis par provereno najboljih (najbrzhih) sortova..ako mozhe ? :)
Na takmichenjima sam uglavnom koristio Heap,pa bih chisto da znam
da li ima neshto brzhe,bez najgoreg sluchaja itd.
Poz,JJ..
pascal.1291ventura,
Ortaku trebaju za sutra ovi zadati, pa ako neko zna ovo neka sibne na mail..
P.S. Ovo treba da se resi tak sto ce se program razlediiti na funkcije
(function program(x,x:real):real)...
1. Napisati potprogram funkcije cij ulazni podatak je velicina X a izlaz
predstavlja Y gde je Y=f(x) funkcija data izrazom:
{x^2 - 4x + 4, -2<x<2
Y = f(x) = {x^2 - 4x - 4, -2<=x<+beskonacno
{x^2 + 4x + 4. -beskonacno<x<=-2
u glavnom programu predvideti unos 3 ulazna podatka XP, XK i DX gde XP
predstavlja pocetnu vrednost, XK kraqjnju vrednos a DX korak promene
promenjljive X. Nakon unosa izvrsiti proveru odnosno uskladjivanje ulaznih
podataka, pozivati podprogram tako da se X menja od pocetne XP do krajnje XK
vrednosti u odgovarajucem koraku DX, te ispisati tabelarno izracunate vrednosti
u parovima (X,Y) za svaku tacku iz predvidjenog opsega promene.
2. Napisati podprogram cij je ulaz ceo broj N i jednocifreni broj B, a izlaz
broj pojavljivanja jednocifrenog broja (cifre) B u broju N. Napiasti glavni
program u kome se vrsi ucitavanje celog broja N, kao jednocifrenog broja B,
provera dali N pripada opsegu -32768<=N<=32767, a B opsegu 0<=B<=9, pozivanje
podprograma, kao i ispis rezultata. U glavnom programu predvideti ponovlkjeni
pokusaj ako se unese broj N ili B izvan predvidjenog opsega.
10x.
pascal.1292obren,
-> #1290, jjerry> Opis par provereno najboljih (najbrzhih) sortova..ako mozhe ? :)
> Na takmichenjima sam uglavnom koristio Heap,pa bih chisto da znam
> da li ima neshto brzhe,bez najgoreg sluchaja itd.
Za najbrži algoritam opšte namene i dalje važi Quick Sort, a
jedna od implementacija (rekurzivna) ti je okačena uz poruku
U pitanju je primer koji dolazi uz Turbo Pascal "od pamtiveka".
qsort.paspascal.1293jjerry,
-> #1292, obren>> Za najbrzi algoritam opste namene i dalje vazi Quick Sort, a
>> jedna od implementacija (rekurzivna) ti je okacena uz poruku
>> U pitanju je primer koji dolazi uz Turbo Pascal "od pamtiveka".
Znam za Quick,naravno,ali mi se Heap vishe svidjao prosto iz
razloga shto je malo sporiji od QuickSort-a,a nema najgori sluchaj
(konkretno za Quick kad je niz vec sortiran).
Poz,JJ..
pascal.1294stameni,
Pre nego što pokrenete ovaj program, pokušajte da pogodite
koliko racionalnih brojeva on štampa.
----<cut>----
program bug;
var
x: real;
begin
x := 1;
writeln;
while(x <= 2) do
begin
writeln(x);
x := x + 0.1
end
end.
----<cut>----
Površnom analizom pretpostavlja se da treba da odštampa 11
racionalnih brojeva: 1.0, 1.1, 1.2, ..., 2.0. Ipak, za Turbo
Pascal 6.0 važi i psi faktor, po kome će program da štampa samo
10 brojeva: 2.0 biće izostavljen. Uz poruku je prikačena izvršna
verzija programa, kompajlirana verzijom 6.0; može li neko da
proveri nekim drugim verzijama, možda je bug ispravljen?
Bug se sastoji u poređenju racionalnih brojeva, gde je (bivši)
Borland napravio manji propust: zbog jednog greškom resetovanog
zero flaga dolazi se do smešne situacije da je 2.0 veće od 2.0,
što je uslov za izlazak iz petlje -- videti program. U TP6BUGS
samo je napomenuto da problem postoji kod real aritmetike, ali
nisu precizno utvrđeni slučajevi kad program ne radi.
tp6bug.exepascal.1295emajsijuen,
-> #1294, stameniEM>> Bug se sastoji u poredenju racionalnih brojeva, gde je (bivsi)
EM>> Borland napravio manji propust: zbog jednog greskom resetovanog
EM>> zero flaga dolazi se do smesne situacije da je 2.0 vece od 2.0,
EM>> sto je uslov za izlazak iz petlje -- videti program. U TP6BUGS
EM>> samo je napomenuto da problem postoji kod real aritmetike, ali
EM>> nisu precizno utvrdeni slucajevi kad program ne radi.
Ja sam imao slican problem sa Delphi-jem cak je takvo sranje pravila i
verzija 4 (koju trenutno imam). Problem sam resio na prilicno debilan nacin:
konverzijom iz realnog broja u string (sa zaokruzivanjem na 3 decimale), pa
ponovnom konverzijom u real broj. Problem je u stvari bio malko drugaciji,
ali je greska ista: dva poziva jedne funkcije (naravno sa istim parametrima)
vracala su dva realna broja koji su (gledano iz Delphija) imali istu vrednost.
Medjutim kada se te dve vrednosti oduzmu, dobija se neki treci real broj
koji je manji od nule, i ispostavlja se da su se brojevi razlikovali u nekoj
decimali.
pascal.1296stameni,
-> #1295, emajsijuen>> Ja sam imao slican problem sa Delphi-jem cak je takvo sranje pravila i
>> verzija 4 (koju trenutno imam).
Maločas napisah isto u C-u za TC++ 1.0 i BC++ 3.1, i,
šta mislite, da li ima greške? Naravno da ima :)
Očigledno u (bivšem) Borlandu koriste isti kod za rad
sa racionalnim brojevima godinama -- samo zamene "ono okolo"
a "srž" ne diraju :) Eeee... :)
pascal.1297stameni,
-> #1296, stameni>> Maločas napisah isto u C-u za TC++ 1.0 i BC++ 3.1, i,
>> šta mislite, da li ima greške? Naravno da ima :)
Upravo sam kompajlirao program Turbo Pascalom 2.0, pod CP/M, i,
kao što se moglo očekivati, nema buga :) Program kako treba izbaci
svih jedanaest vrednosti. Kod koda za Z80, dakle, nije bilo problema.