Evidence zaměstnanců ve Small Basicu
Evidence zaměstnanců ve Small Basicu
Mám vytvořit program na evidenci zaměstnanců. Má obsahovat úvodní menu s následujícími položkami - Nový zaměstnanec, Smazat zaměstnance, Vypiš všechny zaměstnance (stačí jména).
Vím, jak vytvořit menu a teoreticky jak přidat zaměstnance... Nedokážu ho ale přidat do pole, tzn. nedokážu je poté všechny vypsat. A smazání konkrétního zaměstnance? Opravdu netuším...
Pochobyl bych, kdyby se to dělalo v SQL, ale ve Small Basicu?
Díky za radu...
Vím, jak vytvořit menu a teoreticky jak přidat zaměstnance... Nedokážu ho ale přidat do pole, tzn. nedokážu je poté všechny vypsat. A smazání konkrétního zaměstnance? Opravdu netuším...
Pochobyl bych, kdyby se to dělalo v SQL, ale ve Small Basicu?
Díky za radu...
Re: Evidence zaměstnanců ve Small Basicu
Zrovna pole není na takovéhle věci ideální, ale v BASICu se s nimi velmi snadno pracuje. Akorát si předem musíš stanovit nějaký maximální počet, který pak už nelze překročit, dřív byl omezený hlavně velikostí operační paměti, která se pohybovala maximálně v desítkách kilobajtů 
Musíš mít v nějaké proměnné uložený počet zaměstnanců, kteří se už v poli nacházejí, a vypíšeš je normálně jednoho po druhém smyčkou FOR. U toho výpisu je dobré buď pozastavovat ho po určitém počtu řádků, a pokračovat po stisku klávesy, nebo mít maximální počet položek takový, aby se vždy vešly všechny na obrazovku...
Přidání položky je úplně jednoduché, přičteš k počtu jedničku a na místo které počet ukazuje vložíš nové jméno.
Odstranění položky je trochu zdlouhavější, použiješ zase cyklus FOR, prostě na její místo okopíruješ jméno z vyšší buňky, do té vyšší zase z té nad ní, a tak pořád dokola až do konce pole, a na závěr od počtu odečteš jedničku. Nebo jí odečteš předem, záleží jak postavíš ten cyklus.
Jako bonus můžeš přidat řazení podle abecedy, data narození, platu a podobně, záleží na fantazii. Ale začni tím nejjednodušším - jménem a příjmením, další údaje se dají doprogramovat dodatečně.

Musíš mít v nějaké proměnné uložený počet zaměstnanců, kteří se už v poli nacházejí, a vypíšeš je normálně jednoho po druhém smyčkou FOR. U toho výpisu je dobré buď pozastavovat ho po určitém počtu řádků, a pokračovat po stisku klávesy, nebo mít maximální počet položek takový, aby se vždy vešly všechny na obrazovku...
Přidání položky je úplně jednoduché, přičteš k počtu jedničku a na místo které počet ukazuje vložíš nové jméno.
Odstranění položky je trochu zdlouhavější, použiješ zase cyklus FOR, prostě na její místo okopíruješ jméno z vyšší buňky, do té vyšší zase z té nad ní, a tak pořád dokola až do konce pole, a na závěr od počtu odečteš jedničku. Nebo jí odečteš předem, záleží jak postavíš ten cyklus.
Jako bonus můžeš přidat řazení podle abecedy, data narození, platu a podobně, záleží na fantazii. Ale začni tím nejjednodušším - jménem a příjmením, další údaje se dají doprogramovat dodatečně.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Evidence zaměstnanců ve Small Basicu
Díky.
Zatím my opravdu stačí jméno...
Díky
to udělám jak? udělám proměnnou, ale jak zjistím počet položek v poli?Musíš mít v nějaké proměnné uložený počet zaměstnanců, kteří se už v poli nacházejí
Musím tedy mazat podle pozice nebo to jde udělat i podle jména?Odstranění položky je trochu zdlouhavější, použiješ zase cyklus FOR, prostě na její místo okopíruješ jméno z vyšší buňky, do té vyšší zase z té nad ní, a tak pořád dokola až do konce pole, a na závěr od počtu odečteš jedničku
Zatím my opravdu stačí jméno...
Díky
Re: Evidence zaměstnanců ve Small Basicu
Počet položek nezjišťuješ, protože na začátku máš nulu, a při každém přidání přičítáš jedničku
Mazat podle jména by šlo také, musel bys ho nejdřív v poli vyhledat (hledání můžeš přidat jako další funkci), ale nejjednodušší bude prostě zadat pořadové číslo (vypisuj ho při výpisu před jménem), protože to můžeš rovnou použít jako počáteční hodnotu pro rozběhnutí mazacího FORu.
Bylo by dobré ohlídat jestli se nemá mazat položka která neexistuje, a buď ohlásit chybu, nebo úspěšné splnění úkolu. Kdysi dávno o tom vyšla skvělá knížka "Dialog s počítačem".
Ještě k tomu výpisu, při pozastavení můžeš mezerníkem nebo Enterem pokračovat, a Escape další vypisování přeruší, abys třeba viděl pořadové číslo zaměstnance, kterého chceš smazat.
A přišlo by vhod ukládání do souboru, abys nemusel pokaždé zadávat všechno znovu.

Mazat podle jména by šlo také, musel bys ho nejdřív v poli vyhledat (hledání můžeš přidat jako další funkci), ale nejjednodušší bude prostě zadat pořadové číslo (vypisuj ho při výpisu před jménem), protože to můžeš rovnou použít jako počáteční hodnotu pro rozběhnutí mazacího FORu.
Bylo by dobré ohlídat jestli se nemá mazat položka která neexistuje, a buď ohlásit chybu, nebo úspěšné splnění úkolu. Kdysi dávno o tom vyšla skvělá knížka "Dialog s počítačem".
Ještě k tomu výpisu, při pozastavení můžeš mezerníkem nebo Enterem pokračovat, a Escape další vypisování přeruší, abys třeba viděl pořadové číslo zaměstnance, kterého chceš smazat.
A přišlo by vhod ukládání do souboru, abys nemusel pokaždé zadávat všechno znovu.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Evidence zaměstnanců ve Small Basicu
Jo, už mi to pak taky došlo...
Řekl bych, že to mám tak nějak hotové... Ale ve výpisu se mi nezobrazují jména zaměstnanců. Mohl byste mi poradit?
Díky
Řekl bych, že to mám tak nějak hotové... Ale ve výpisu se mi nezobrazují jména zaměstnanců. Mohl byste mi poradit?
Kód: Vybrat vše
počet = 0
i = 1
Začátek:
TextWindow.WriteLine("1 - Nový zaměstanenec")
TextWindow.WriteLine("2 - Smazat zaměstnance")
TextWindow.WriteLine("3 - Výpis zaměstnanců")
TextWindow.WriteLine("")
TextWindow.WriteLine("Napiš číslo operace, kterou chceš provést:")
index = TextWindow.ReadNumber()
If index = 1 Then
Goto Nový
ElseIf index = 2 Then
Goto Smazat
ElseIf index = 3 Then
Goto Výpis
Else
TextWindow.WriteLine("ŠPATNĚ, ZADEJ SPRÁVNÉ ČÍSLO")
EndIf
Nový:
TextWindow.WriteLine("Zadej jméno zaměstnance:")
zaměstnanec[i] = TextWindow.Read()
TextWindow.WriteLine("Zaměstnanec " + zaměstnanec[i] + " byl přidán do evidence")
zaměstnanec[i] = zaměstnanec[i+1]
počet = počet + 1
TextWindow.WriteLine("")
Goto Začátek
Smazat:
If počet < 1 Then
TextWindow.WriteLine("V evidenci nejsou žádní zaměstnanci")
TextWindow.WriteLine("")
Else
TextWindow.WriteLine("Zadej pozici zaměstnance, kterého cheš smazat:")
pozice = TextWindow.ReadNumber()
If pozice > počet Then
TextWindow.WriteLine("Na této pozici není žádný zaměstnanec")
Goto Smazat
Else
For pozice = pozice To počet
zaměstnanec[i] = zaměstnanec[i-1]
EndFor
počet = počet - 1
EndIf
EndIf
Goto Začátek
Výpis:
If počet < 1 Then
TextWindow.WriteLine("V evidenci nejsou žádní zaměstnanci")
TextWindow.WriteLine("")
Else
TextWindow.WriteLine("V evidenci jsou tito zaměstnanci:")
For i = 1 To počet
TextWindow.WriteLine(i + ". " + zaměstnanec[i])
EndFor
TextWindow.WriteLine("")
EndIf
Goto Začátek
Díky
- domitea
- Tvůrce článků
-
Level 4.5
- Příspěvky: 1971
- Registrován: červen 09
- Bydliště: Královehradecký kraj
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Evidence zaměstnanců ve Small Basicu
PetrJan píše:Pochobyl bych, kdyby se to dělalo v SQL, ale ve Small Basicu?
Dovolím menší rejp.
Proč zneužívat databázi na jednu tabulku, když stačí CSV

Re: Evidence zaměstnanců ve Small Basicu
Tak hlavně ukonči tu volbu z Menu skokem na Začátek, takhle vjedeš při zadání jakéhokoliv neplatného čísla rovnou do zadání nového zaměstnance 
Proměnná i je tam úplně zbytečná, tu použiješ akorát v cyklech, ve všech ostatních případech vystačíš s tou počet. Mimochodem, většina programovacích jazyků nedovoluje v názvech proměnných nebo funkcí používat diakritiku.
Chyba při zadání je tenhle řádek:
zaměstnanec[i] = zaměstnanec[i+1]
Tím si zadané jméno ihned přepíšeš vyšší položkou, která ještě neexistuje, takže na jeho místo zkopíruješ prázdný řetězec a ten se pak pokoušíš vypisovat... On se ti samozřejmě zobrazí, ale nic v něm není
Není ve SmallBasicu příkaz GOSUB? Ono GOTO se má používat minimálně, jen v nejnutnějších případech*, a pokud možno vůbec, protože nezapadá do zásad strukturovaného programování! Takže GOSUB Nový
Funkce LEN v BASICu zjišťovala délku řetězce, zkus pro ní najít ekvivalent.
Není v SB nutné dimenzovat velikost pole? Ve starších dialektech bylo možné použít automatickou velikost, ale ta byla vždy , když jsi potřeboval jiný počet, musel jsi ho deklarovat na začátku programu:
DIM zamestnanec(1000)
V mazání musíš kopírovat vyšší položku, ne předchozí, takže
zaměstnanec[i] = zaměstnanec[i+1]
* To zamená že se na GOTO máš vykašlat, dokud nebudeš psát programy dlouhé aspoň deset tisíc řádků

Proměnná i je tam úplně zbytečná, tu použiješ akorát v cyklech, ve všech ostatních případech vystačíš s tou počet. Mimochodem, většina programovacích jazyků nedovoluje v názvech proměnných nebo funkcí používat diakritiku.
Chyba při zadání je tenhle řádek:
zaměstnanec[i] = zaměstnanec[i+1]
Tím si zadané jméno ihned přepíšeš vyšší položkou, která ještě neexistuje, takže na jeho místo zkopíruješ prázdný řetězec a ten se pak pokoušíš vypisovat... On se ti samozřejmě zobrazí, ale nic v něm není

Není ve SmallBasicu příkaz GOSUB? Ono GOTO se má používat minimálně, jen v nejnutnějších případech*, a pokud možno vůbec, protože nezapadá do zásad strukturovaného programování! Takže GOSUB Nový
Kód: Vybrat vše
Nový: 'Přidání nového zaměstnance
TextWindow.WriteLine("Zadej jméno zaměstnance:")
počet=počet+1
zaměstnanec[počet] = TextWindow.Read()
IF LEN(zaměstnanec[počet])>0 then
TextWindow.WriteLine("Zaměstnanec " + zaměstnanec[i] + " byl přidán do evidence")
ELSE
TextWindow.WriteLine("CHYBA: Nebylo zadáno jméno!")
počet=počet-1
END IF
Return
Funkce LEN v BASICu zjišťovala délku řetězce, zkus pro ní najít ekvivalent.
Není v SB nutné dimenzovat velikost pole? Ve starších dialektech bylo možné použít automatickou velikost, ale ta byla vždy , když jsi potřeboval jiný počet, musel jsi ho deklarovat na začátku programu:
DIM zamestnanec(1000)
V mazání musíš kopírovat vyšší položku, ne předchozí, takže
zaměstnanec[i] = zaměstnanec[i+1]
* To zamená že se na GOTO máš vykašlat, dokud nebudeš psát programy dlouhé aspoň deset tisíc řádků

"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Evidence zaměstnanců ve Small Basicu
Díky, toho jsem si nevšiml...
Funguje mi to, kromě mazání. Nestane se vůbec nic.
Ještě když mám u výpisu:
tak načítá stále dále čísla.
Tak jsem zavedl porměnnou max:
to se pole zkrátí, tím pádem to odmaže poslední pozici
A když tam mám natvrdo počet položek:
nestane se nic a pole se zobrazí stále stejně, i když jsem něco vymazal...
Vím, že bych GOTO používat neměl, ale takto my to zatím vyhovuje...
Nikde jsem nenašel, jak se zadá pevná velikost pole ve small basicu :(
Díky moc
Funguje mi to, kromě mazání. Nestane se vůbec nic.
Ještě když mám u výpisu:
Kód: Vybrat vše
FOR Počet = 1 TO Počet
Tak jsem zavedl porměnnou max:
Kód: Vybrat vše
FOR Počet = 1 TO max
A když tam mám natvrdo počet položek:
Kód: Vybrat vše
FOR Počet = 1 TO 15
Vím, že bych GOTO používat neměl, ale takto my to zatím vyhovuje...
Nikde jsem nenašel, jak se zadá pevná velikost pole ve small basicu :(
Kód: Vybrat vše
počet = 0
max = 0
Začátek:
TextWindow.WriteLine("1 - Nový zaměstanenec")
TextWindow.WriteLine("2 - Smazat zaměstnance")
TextWindow.WriteLine("3 - Výpis zaměstnanců")
TextWindow.WriteLine("")
TextWindow.WriteLine("Napiš číslo operace, kterou chceš provést:")
operace = TextWindow.ReadNumber()
If operace = 1 Then
Goto Nový
ElseIf operace = 2 Then
Goto Smazat
ElseIf operace = 3 Then
Goto Výpis
Else
TextWindow.WriteLine("ŠPATNĚ, ZADEJ SPRÁVNÉ ČÍSLO")
Goto Začátek
EndIf
Nový:
TextWindow.WriteLine("Zadej jméno zaměstnance:")
počet = počet + 1
max = max + 1
zaměstnanec[počet] = TextWindow.Read()
TextWindow.WriteLine("Zaměstnanec " + zaměstnanec[počet] + " byl přidán do evidence")
TextWindow.WriteLine("")
Goto Začátek
Smazat:
If počet < 1 Then
TextWindow.WriteLine("V evidenci nejsou žádní zaměstnanci")
TextWindow.WriteLine("")
Else
TextWindow.WriteLine("Zadej pozici zaměstnance, kterého cheš smazat:")
pozice = TextWindow.ReadNumber()
If pozice > počet Then
TextWindow.WriteLine("Na této pozici není žádný zaměstnanec")
Goto Smazat
Else
For pozice = pozice To max
zaměstnanec[počet] = zaměstnanec[počet+1]
EndFor
max = max - 1
počet = počet - 1
EndIf
EndIf
Goto Začátek
Výpis:
If počet < 1 Then
TextWindow.WriteLine("V evidenci nejsou žádní zaměstnanci")
TextWindow.WriteLine("")
Else
TextWindow.WriteLine("V evidenci jsou tito zaměstnanci:")
For počet = 1 To 15
TextWindow.WriteLine(počet + ". " + zaměstnanec[počet])
EndFor
TextWindow.WriteLine("")
EndIf
Goto Začátek
Díky moc
Re: Evidence zaměstnanců ve Small Basicu
Tak zrovna v tom výpisu je potřeba ta proměnná i:
Jen taková historická zajímavost, ve FORTRANu (prvním programovacím jazyku z roku 1956) byly proměnné jejichž názvy začínaly písmeny I,J,K,L,M,N celočíselné, zatímco všechny ostatní byly reálné. Sloužilo to kromě jiného i jako mnemotechnická pomůcka, index pole nebo smyčky byl prostě I, druhá vnořená smyčka měla jako index následující písmeno J, třetí K... To se od té doby používá tradičně dodnes, protože není důvod dělat to jinak. I je prostě Index, ukazatel na určitou položku v pořadí.
Takže vystačíš se dvěma proměnnými, hlavní proměnou počet ve které máš aktuální stav, a pomocnou proměnnou i, která slouží pro výpis.
To mazání by mělo jít takhle nějak:
Tady jsou potřeba proměnné tři, hlavní počet, a pomocné pozice a i.
To dimenzování pole jsem v návodech co mám také nenašel, třeba to už není potřeba, můžeš to odzkoušet, jestli (a kdy) ti to spadne:
Zbytek už nemám dneska sílu luštit, tak jen pro inspiraci něco podobného co jsem kdysi dělal:
Kód: Vybrat vše
Výpis: 'zobrazí databázi zaměstnanců
If pocet>Then
For i = 1 To počet
TextWindow.WriteLine(i + ". " + zaměstnanec[i])
EndFor
Else
TextWindow.WriteLine("V evidenci nejsou žádní zaměstnanci")
Endif
Jen taková historická zajímavost, ve FORTRANu (prvním programovacím jazyku z roku 1956) byly proměnné jejichž názvy začínaly písmeny I,J,K,L,M,N celočíselné, zatímco všechny ostatní byly reálné. Sloužilo to kromě jiného i jako mnemotechnická pomůcka, index pole nebo smyčky byl prostě I, druhá vnořená smyčka měla jako index následující písmeno J, třetí K... To se od té doby používá tradičně dodnes, protože není důvod dělat to jinak. I je prostě Index, ukazatel na určitou položku v pořadí.
Takže vystačíš se dvěma proměnnými, hlavní proměnou počet ve které máš aktuální stav, a pomocnou proměnnou i, která slouží pro výpis.
To mazání by mělo jít takhle nějak:
Kód: Vybrat vše
počet=počet-1
For i=pozice To počet
zaměstnanec[i]=zaměstnanec[i+1]
Endfor
Tady jsou potřeba proměnné tři, hlavní počet, a pomocné pozice a i.
To dimenzování pole jsem v návodech co mám také nenašel, třeba to už není potřeba, můžeš to odzkoušet, jestli (a kdy) ti to spadne:
Kód: Vybrat vše
For i=1 To 1000000
pole[i]=i
TextWindow.WriteLine(i)
Endfor
Zbytek už nemám dneska sílu luštit, tak jen pro inspiraci něco podobného co jsem kdysi dělal:
Kód: Vybrat vše
10 PRINT "*** Vysledkova listina ***"
20 INPUT "pocet hracu: ", h
30 DIM jmeno$(h), skore(h)
40 FOR a = 1 TO h
50 PRINT a; : INPUT "- jmeno, skore: ", jmeno$(a), skore(a)
60 NEXT a
70 INPUT "1 - podle jmena 2 - podle skore 3 - tisk 4 - konec "; a
80 ON a GOTO 100, 200, 300, 400
90 GOTO 70
100 FOR a = 2 TO h: b = a
110 IF jmeno$(b - 1) <= jmeno$(b) THEN GOTO 150
120 w$ = jmeno$(b):jmeno$(b) = jmeno$(b - 1):jmeno$(b - 1) = w$
130 w = skore(b): skore(b) = skore(b - 1): skore(b - 1) = w
140 IF b > 2 THEN b = b - 1: GOTO 110
150 NEXT a: GOTO 500
200 FOR a = 2 TO h: b = a
210 IF skore(b - 1) >= skore(b) THEN GOTO 250
220 w$ = jmeno$(b):jmeno$(b) = jmeno$(b - 1):jmeno$(b - 1) = w$
230 w = skore(b): skore(b) = skore(b - 1): skore(b - 1) = w
240 IF b > 2 THEN b = b - 1: GOTO 210
250 NEXT a: GOTO 500
300 LPRINT TAB(20); "Vysledkova listina:": LPRINT
310 FOR a = 1 TO h
320 LPRINT jmeno$(a); TAB(60); skore(a)
330 NEXT a: LPRINT : GOTO 70
400 END
500 FOR a = 1 TO h
510 PRINT jmeno$(a); TAB(60); skore(a)
520 NEXT a: GOTO 70
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Evidence zaměstnanců ve Small Basicu
Díky moc za pomoc, vyřešeno...
Kód: Vybrat vše
počet = 0
Začátek:
TextWindow.WriteLine("1 - Nový zaměstanenec")
TextWindow.WriteLine("2 - Smazat zaměstnance")
TextWindow.WriteLine("3 - Výpis zaměstnanců")
TextWindow.WriteLine("")
TextWindow.WriteLine("Napiš číslo operace, kterou chceš provést:")
operace = TextWindow.ReadNumber()
If operace = 1 Then
Goto Nový
ElseIf operace = 2 Then
Goto Smazat
ElseIf operace = 3 Then
Goto Výpis
Else
TextWindow.WriteLine("ŠPATNĚ, ZADEJ SPRÁVNÉ ČÍSLO")
Goto Začátek
EndIf
Nový:
TextWindow.WriteLine("Zadej jméno zaměstnance:")
počet = počet + 1
zaměstnanec[počet] = TextWindow.Read()
TextWindow.WriteLine("Zaměstnanec " + zaměstnanec[počet] + " byl přidán do evidence")
TextWindow.WriteLine("")
Goto Začátek
Smazat:
If počet < 1 Then
TextWindow.WriteLine("V evidenci nejsou žádní zaměstnanci")
TextWindow.WriteLine("")
Else
TextWindow.WriteLine("Zadej pozici zaměstnance, kterého cheš smazat:")
pozice = TextWindow.ReadNumber()
If pozice > počet Then
TextWindow.WriteLine("Na této pozici není žádný zaměstnanec")
Goto Smazat
Else
For i = pozice To počet
zaměstnanec[i] = zaměstnanec[i+1]
EndFor
počet = počet - 1
EndIf
EndIf
Goto Začátek
Výpis:
If počet < 1 Then
TextWindow.WriteLine("V evidenci nejsou žádní zaměstnanci")
TextWindow.WriteLine("")
Else
TextWindow.WriteLine("V evidenci jsou tito zaměstnanci:")
For i = 1 To počet
TextWindow.WriteLine(i + ". " + zaměstnanec[i])
EndFor
TextWindow.WriteLine("")
EndIf
Goto Začátek
Re: Evidence zaměstnanců ve Small Basicu
Ještě mě napadlo pár drobností, před mazáním by bylo dobré se pro jistotu zeptat na potvrzení. Ona je sice při zadání čísla mnohem menší pravděpodobnost překlepu než při zapisování celého jména ručně, ale člověk je tvor chybující, a když občas něco podělá, rád to svede na někoho jiného, v tomhle případě na blbý počítač a neschopného programátora. Takže nějak takhle (a až teď jsem si všimnul že ti tam chybí písmeno c):
Zadej pozici zaměstnance, kterého cheš smazat:
14
Opravdu chceš vymazat zaměstnance: Pepíček (A/N)?
a
Položka vymazána.
A zadávání čísla nebo potvrzení na dalším řádku vypadá divně, není ve SB kromě TextWindow.WriteLine() také TextWindow.Write() podobně jako v Pascalu? Pak by to bylo takové:
Zadej pozici zaměstnance, kterého cheš smazat: 14
Opravdu chceš vymazat zaměstnance: Pepíček (A/N)? a
Položka vymazána.
Zadej pozici zaměstnance, kterého cheš smazat:
14
Opravdu chceš vymazat zaměstnance: Pepíček (A/N)?
a
Položka vymazána.
A zadávání čísla nebo potvrzení na dalším řádku vypadá divně, není ve SB kromě TextWindow.WriteLine() také TextWindow.Write() podobně jako v Pascalu? Pak by to bylo takové:
Zadej pozici zaměstnance, kterého cheš smazat: 14
Opravdu chceš vymazat zaměstnance: Pepíček (A/N)? a
Položka vymazána.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti