Anonymní profil jakum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil jakum – Programujte.comAnonymní profil jakum – Programujte.com

 

Příspěvky odeslané z IP adresy 93.91.144.–

Pascal › Začiatky
31. 3. 2012   #155778

Jediné, co potřebuješ, je cyklus, který nemá předem nastavený počet opakování, tj. Repeat nebo While. V tomhle případě bude lepší ten Repeat, protože nejdřív musíme něco načíst a až potom se podle toho rozhodnout, jestli už to ukončíme nebo ještě ne:

repeat
readln(číslo);
if číslo=6 then blahopřeju
           else zkus něco jiného;
until číslo=6;
Pascal › hra bludiště
31. 3. 2012   #155777

Upřímně řečeno, nejsem si úplně jistý. Inc(pomradek) zvětšuje proměnnou Pomradek o 1, tím prochází budoucí bludiště od prvního do posledního řádku - OK. Cyklus for pomSloupec:=1 to Length(radek) prochází řetězec Radek a příslušný řádek bludiště od prvního do posledního znaku - taky OK. Příkaz TPole[pomSloupec,pomRadek]:=radek[pomSloupec] vloží do proměnné Tpole na pomsloupec-tý sloupec a pomradek-tý řádek příslušný znak z řetězce Radek - taky OK, tím se bludiště naplní načtenými daty ze souboru.

Jediné, co nechápu, je ten case. Původní účel asi byl, že políčko se "$" se obsluhuje jinak a místo přímého uložení do pole se z něj třeba udělají souřadnice panáčka a do pole se zapíše volno. Ale panáček měl být *, tak nevím. Taky nevím, co přesně dělá procedura Vykresli - v jejích parametrech nevidím žádné informace o tom, kdy končí řádek, takže by je nejspíš nedokázala na obrazovce správně zalamovat, to bude asi problém. Nejradši bych z tohohle místa kreslení vyhodil a řešil ho až potom během hlavního cyklu hry, tady v tomhle místě by asi nemělo být vůbec.

Místo case bych tam dal if, ale to už je jenom detail, na funkci by to nic nezměnilo.

Potom tam chybí výpočet a zapamatování rozměrů bludiště. Chtělo by to si počet a délku řádků někam uložit.

Jinak to vypadá plus mínus funkčně (tedy jestli je bludiště definované jako array[1..něco,1..něco] of char). Mimochodem, jestli nemáte objektovost v zadání, možná by stálo za to to napsat normálně, bez objektů - bylo by to asi jednodušší.

jakum
Hry › Sindicate chyba přihlášení
1. 12. 2011   #150747

#1 Mila
mam uplne ten samej problem a nejde mi stahnout ani ten DevIL.dll:((((((

Pascal › Nejde unita uses
24. 4. 2010   #127694

Jo ták...
Crt je většinou uložená v TURBO.TPL. Jestli tam opravdu je, zjistíš programem TPUMOVER.EXE, který je standardně součástí TP (Turbo.tpl mu dej jako parametr). Jestli tam je, tak si někde v nastavení (tuším options - startup) zkontroluj, jestli máš zatržené "Load turbo.tpl" (nebo tak nějak). Jestli tam není, tak se podívej, jestli ji někde máš v podobě CRT.TPU. Jestli ne, tak si ji budeš muset někde sehnat. Jestli jo, tak zkontroluj, jestli je ve správném adresáři (options - directories - exe and tpu directory), nebo ji Tpumoverem přesuň do turbo.tpl.

Doufám, že to pomůže.

Pascal › Pole
22. 3. 2010   #125649

Šlo by to i na jeden průchod. Máš proměnné max (pro největší) a max2 (pro druhou největší). Před cyklem vlož nejmenší možnou hodnotu do obou dvou (nebo radši první číslo z pole, ať nehrozí, že se náhodou vyskytne něco menšího). Podmínka ve třetím bodě cyklu se změní na: Pokud je hodnota prvku větší než max, zkopíruješ max do max2 a za max dáš hodnotu příslušného prvku. A je to.

A nebo můžeš pole setřídit a pak prostě vzít první dvě různé hodnoty od konce, ale to je z praktického hlediska pitomost (třídění určitě potrvá déle než ten předchozí postup).

Pascal › Procházení adresářu a výpis
14. 3. 2010   #125270

Potřebuješ proceduru, která by uměla tohle:

1) Projde aktuální adresář a zpracuje soubory, které v něm najde (Findfirst+Findnext, atribut Anyfile-Directory).
2) Projde aktuální adresář a zapamatuje si všechny podadresáře, které v něm najde (Findfirst+Findnext, atribut Directory).
3) Zavolá sama sebe na každý ze zapamatovaných podadresářů.

Na to, jak proceduře předat informaci o tom, který adresář má procházet, mě napadají dva způsoby: buď se předá kompletní cesta přes parametr a pak se předhodí Findfirstu, nebo se před voláním procedury do příslušného adresáře přepneme (Chdir) a pak procházíme vždycky aktuální adresář. První způsob je "čistší", jednodušší a bezpečnější (nehrozí, že po skončení procedury zůstaneme omylem zahrabaní někde v podadresářích), u druhého zase nehrozí potíže při hodně hlubokém vnoření (kdy by cesta přesáhla maximální povolenou délku).

Zapamatování seznamu podadresářů je nutné. Na první pohled to sice vypadá, že by se daly procházet hned, jak je najdeme, ale má to háček: Findnext je jenom jeden a rekurzi by nepřežil.

Pascal › Vytvoření souboru pokus.txt
27. 2. 2010   #124585

Tím chtěl autor říci, že by se měly využívat takové ty "standardní" adresáře typu Documents and settings\bla bla\Application data. Výhoda je v tom, že pak každý uživatel má jiný konfigurační soubor, i když se na něj program odkazuje pokaždé stejným způsobem (určitě existuje nějaká funkce "řekni mi aktuálně platnou cestu do adresáře Application data"). A že když zkopíruješ adresář s programem a přeneseš ho na jiný počítač, nepotáhne s sebou tvoje konfigurační soubory, bude to čistě jenom ten program. A navíc program správně poběží, i když bude celý jeho adresář read-only nebo nějak jinak chráněný.

Doporučení: tenhle systém používej pro uživatelské nastavení (např. rychlost myši, rozmístění ovládacích prvků a podobně), které bude chtít mít každý svoje a nebude chtít, aby mu ho někdo měnil, nebo v případě, že má být program umístěn na místě, kam nepůjde zapisovat.


Konfigurační soubory v adresáři s programem mají nevýhodu, že jsou společná pro všechny. V programu se to dá obejít (sady dat pro x uživatelů si můžš rozlišit vlastními prostředky), ale je to práce navíc. Při překopírování adresáře s programem s ním půjde i veškeré nastavení, se kterým na novém počítači třeba nemusí fungovat (to se dá vyřešit přečtením nějakých "unikátních" informací o hardwaru počítače (sériové číslo procesoru apod.) a jejich porovnáním s uloženými daty, aby se zjistilo, jestli na tomhle počítači program běží poprvé nebo ne, ale to je zase práce navíc). Naopak výhoda je v jednodušší přenositelnosti kódu (adresář s programem tu je vždycky, zatímco konfigurační adresář se v každém OS jmenuje jinak a v některých třeba vůbec není) a v kompaktnosti (tj. že program ze svého adresáře nevystrčí nos a nerozlézá se po celém systému).

Doporučení: tenhle systém používej pro data, která mají být společná, mají se šířit spolu s programem a jsou nezávislá na hardwaru (např. tabulky nejlepších výsledků ve hrách, definice pro antiviry apod.) nebo když jde o nějakou menší, jednorázovou utilitku, kde se spíš chce, aby šla po použití co nejpohodlněji smazat.

Pascal › pomoc_uloha
22. 12. 2009   #121529

Dovnitř do procedury dostaneš přes parametr cokoli. Ven potom buď jako návratovou hodnotu (jen u funkcí) nebo přes parametr se slovem var. Tady máš příklad - úprava tvojí procedury na otvírání seznamu:

function Otvor(var soubor:zoznam):boolean;

Begin
Assign(soubor,'adresar.bin');
{$I-}
Reset(soubor);
{$I+}
if IOResult<>0 then Rewrite(soubor);
otvor:=FileSize(soubor)<>0;
End;

Co jsem udělal:
- Soubor jsem předal jako parametr (var říká, že je to přímo odkaz na proměnnou, která se proceduře při volání předá, ne jen kopie její hodnoty, a u souborů je toto slovíčko nutné).
- Nastavení proměnné Prazdny jsem nahradil přepsáním procedury na funkci a vrácením informace o prázdnosti souboru v návratové hodnotě (otočil jsem význam, protože mi to tak připadá logičtější - samozřejmě to není nutné).

Volání v hlavním programu by pak vypadalo takhle:
prazdny:=not otvor(f);


U ostatních procedur a funkcí by to bylo obdobné, rozepisovat je už nebudu.


A mimochodem, když příště vložíš zdroják rovnou do příspěvku (nejlépe s použitím tlačítka "kód" z formátovací lišty), ušetříš nám spoustu času a klikání.

Pascal › Anglická klávesnice
11. 10. 2009   #117045

Aha, takhle. V tom případě můžeš psát v tom Notepadu celý zdroják, pak ho otevřít v TP a zkompilovat. Ale tím přijdeš o chytré odsazování po Enteru a Backspacu a help, takže by to zas taková výhra nebyla. Ale teoreticky můžeš mít zdroják otevřený zároveň v TP i NP, protože ho oba po každém načtení nebo uložení poctivě zavírají (a nedrží ho otevřený jako třeba Word), takže můžeš v jednom okně uložit, přepnout do druhého a tam reloadnout. Ale pořád je to dost otrava, to uznávám, ale nevím, co by s tím šlo dělat.

Podle mého názoru je nejvýhodnější si na tu anglickou klávesnici prostě zvyknout, už kvůli tomu, že na české se špatně píšou znaky jako ;'@#$^[*]{}\, které při programování potřebuješ každou chvíli.

Mimochodem, numerická klávesnice na noteboocích obvykle je, stačí někde najít Numlock (většinou Fn+něco) a pak se ti čísla namapují na klávesy 789UIOJKLM.

Pascal › Anglická klávesnice
11. 10. 2009   #117041

Používám Ctrl+Alt+F2 (zpátky na anglickou pak Ctrl+Alt+F1), ale to platí pro DOS, který Visty zrovna moc nežerou. Alt+Shift jsi zkoušel?
Taky je možné, že příslušné ovladače pro dosovskou češtinu vůbec nemáš.

Jestli ti jde jenom o to, jak dostat do zdrojáku texty s diakritikou, tak si je můžeš napsat třeba v Notepadu a pak si je nějakým způsobem překonvertovat (např. tenhle program: http://laaca.borec.cz/soubory/anycz.rar nebo funkce Prekoduj z tehle jednotky: http://mircosoft.ic.cz/download/RETEZCE.PAS nebo propátrej síť, existuje i online formulář).

Pascal › Ciselne sustavy
4. 10. 2009   #116731

Délka řetězce je uložena v jeho nultém znaku. Když vkládáš znaky přímo na určité pozice, délka zůstává pořád stejná (nula) a počítač si myslí, že je řetězec prázdný a nic nezobrazí.

Takže máš dvě možnosti:
1) Buď pro přidávání číslic do výsledného řetězce používat standardní postup (retezec:=retezec+neco nebo retezec:=neco+retezec), pak se délka nastavuje automaticky.
2) Nebo dál vkládat znaky přímo, ale nakonec ještě délku ručně nastavit (retezec[0]:=chr(pocet_cifer);).

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý