pomoc s programovaním 2 Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: pomoc s programovaním 2

Příspěvekod faraon » 01 pro 2013 20:02

Deklarace proměnných na začátku je "slušný styl" od roku 1958 ;-)
A definice proměnných před jejich prvním použitím ještě dřív!

Takže jsem to otestoval a to znaménko opravil, už je to lepší?
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Reklama
Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: pomoc s programovaním 2

Příspěvekod domitea » 01 pro 2013 21:27

Já vám ukážu slušný styl. Čitelnost kódu až na posledním místě. :lol:

Deklarace proměnných? Není potřeba, stačí funkcionální jazyk :D

Kód: Vybrat vše

soucin(C1,0,C1).
soucin(C1,C2,V):-C2>0,C21 is C2 - 1, V1 is v + C1,soucin(C1,C21,V1).
soucin(C1,C2,V):-C2<0,C1>0,soucin(C2,C1,V).
soucin(C1,C2,V):-C1<0,C2<0,C11 is C1 * (-1),C21 is C2 * (-1),soucin(C11,C21,V).


Tomu říkám pořádně šťavnatý kus kódu. Měl by být funkční, píšu to jen tak od boku a Prolog mám teprve první semetr :lol:

BTW: V Lispu by to zabralo jednu řádku, tady vlastně taky, ale nejsem ten typ člověka, co to rád zkracuje :lol:

petod
Level 1
Level 1
Příspěvky: 64
Registrován: březen 13
Pohlaví: Muž
Stav:
Offline

Re: pomoc s programovaním 2

Příspěvekod petod » 11 pro 2013 20:19

mám otázku : k čemu použiju v praxi ukazatele kdybych chtěl později programovat v C , C++ ? vím že je to adresa v paměti ale k čemu mi bude?

Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: pomoc s programovaním 2

Příspěvekod domitea » 11 pro 2013 20:49

Dají se s tím hrát různé čachry, třeba takové, že hodnota bude jen jedna, ale bude na ni odkazovat více ukazatelů ;)

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: pomoc s programovaním 2

Příspěvekod CZechBoY » 11 pro 2013 21:01

Nemusíš kopírovat celej objekt, ale budeš ho mít v paměti jen jednou.
Takže ho můžeš kdekoliv zničit a už ho nikdy neuvidíš :-)
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: pomoc s programovaním 2

Příspěvekod faraon » 12 pro 2013 18:14

petod píše:mám otázku : k čemu použiju v praxi ukazatele kdybych chtěl později programovat v C , C++ ? vím že je to adresa v paměti ale k čemu mi bude?

Ono se to nezdá, ale ukazatele jsou zrovna v tom Céčku to úplně nejdůležitější co máš! Bez nich bys těžko udělal třeba jen jednoduchý spojový seznam, a práce s řetězci by byla mnohem komplikovanější. Jeden příklad:

char text[100]; je pole znaků o velikosti 100 bajtů. Můžeš do něj uložit řetězec o maximální délce 99B, protože vždycky musíš mít na konci znak '\0', který ho ukončuje.
Dá se s ním pracovat jako s polem: text[12]='B'; ti na třináctou pozici (první znak má číslo 0!) vloží velké B.
Ale pokud chceš předat nějaké funkci celý řetězec, předáš na něj jen ukazatel, co je pouze název toho pole bez té bižuterie okolo: text. Například výpis textu bude takhle: printf("%s", text);
Funkce dostane adresu začátku textu, a vypíše ti na obrazovku všechny znaky od té adresy až k prvnímu nulovému.
To je nejrychlejší možný způsob jak se to dá udělat, nic efektivnějšího už neexistuje. Ale je to zároveň také velmi nebezpečné, protože pokud nebyl ten řetězec ukončený nulou (znakem s ASCII kódem 0), tak se prostě vypisuje pořád dál, dokud funkce nedojde k nějaké nule, nebo dokud nepřekročí paměť vymezenou pro program, načež ho operační systém odstřelí jako prašivého psa, a po zásluze!

Jenže to máš stále jen řetězec s pevně stanovenou délkou, tak jak jí nastavíš při psaní programu. Ale tímhle způsobem bys třeba textový editor programovat nemohl, protože nevíš předem jak dlouhý text bude. Takže ve skutečnosti to proběhne jinak:
char *text=NULL; vytvoří ukazatel na pole znaků, tedy řetězec, a rovnou ho nastaví na úplný začátek paměti (adresu 0), kde zaručeně žádná data nejsou, To je důležité pro kontrolu jestli ukazatel někam ukazuje nebo ne! Pomocí funkce malloc() si potom požádáš o potřebnou velikost paměti, operační systém ti jí přidělí, a vrátí ukazatel na dostatečně velký volný úsek, který do té proměnné text zapíšeš. Potom s ní můžeš pracovat úplně stejně jako s předchozím řetězcem stálé velikosti...
Může ale nastat situace že je paměť plná a operační systém prostě nemá co přidělit, potom ti malloc() vrátí místo ukazatele právě ten výše zmíněný NULL, takže je dobré po každé takové činnosti otestovat co jsi vlastně dostal, a podle toho se zařídit. On by totiž jakýkoliv pokus o čtení nebo zápis na adrese 0 skončil opět okamžitým odstřelem tvého programu.
No a když už tu paměť nepotřebuješ, tak jí systému zase vrátíš příkazem free(text);, a je velmi užitečné ihned po tom do té proměnné zase vložit NULL, abys případně věděl že nikam neukazuje! Jinak bys při příštím pokusu mohl přepsat data která v tu chvíli patří úplně jiným proměnným, a pokud by ta tvoje bývalá paměť už byla přidělená jinému programu, následovalo by co?
Zase ten odstřel, jako obvykle :lol:

To je jen malý zlomek toho co se dá s ukazateli provádět, dají se použít prakticky na cokoliv, a pro práci s nimi je v těch jazycích spousta užitečných pomůcek. Třeba ukazatelové aritmetika, která ti pomáhá počítat další pozici automaticky podle toho kolik bajtů daný typ v paměti zabírá...
Ale naopak ty, pro správné použití ukazatelů, musíš dobře chápat jak je paměť počítače organizovaná a jak s ní procesor pracuje, a musíš dávat velmi dobrý pozor, abys neudělal nějakou chybku, protože ta může mít vražedné následky pro data se kterými pracuješ v úplně jiné části programu.

P.S. Nula je prostě nejdůležitější číslo jaké existuje, a v programování to platí ještě 1024krát víc než v matematice 8)
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

petod
Level 1
Level 1
Příspěvky: 64
Registrován: březen 13
Pohlaví: Muž
Stav:
Offline

Re: pomoc s programovaním 2

Příspěvekod petod » 14 pro 2013 20:20

faraon : takže bych si měl přečíst něco o hardware než půjdu do c . a nenapadá tě použití ukazatelů v pascalu (příklad který bych naprogramoval) .

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: pomoc s programovaním 2

Příspěvekod faraon » 15 pro 2013 18:39

Ne jen něco přečíst, ale nastudovat pořádnou kupu skript :lol:

Nějaký příklad? Třeba ten spojový seznam. Prostě udělej nějakou databázi, kam můžeš přidat novou kartu s údaji (alokovat pro ní paměť a vyplnit jí), nechat jí zařadit podle různých hledisek, a libovolnou kartu zase zrušit (a uvolnit její paměť).
Jednosměrný seznam je jednodušší, v obousměrném se zase některé věci dělají jednodušeji (třeba to řazení):
http://cs.wikipedia.org/wiki/Line%C3%A1rn%C3%AD_seznam
http://home.pf.jcu.cz/~edpo/program/kap10.html
http://home.pf.jcu.cz/~edpo/program/kap11.html
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

petod
Level 1
Level 1
Příspěvky: 64
Registrován: březen 13
Pohlaví: Muž
Stav:
Offline

Re: pomoc s programovaním 2  Vyřešeno

Příspěvekod petod » 16 pro 2013 20:33

faraon nemáš něco podobného na neobjektový pascal? :-) no ono je to jedno delphi je podobné pascalu. btw: už ted jsem pochopil že pro hlubší pochopení budu muset pochopit hardware :D .


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Pomoc s webem
    od Tay » 09 úno 2025 15:53 » v Web-tipy a vaše weby
    5
    19805
    od Tay Zobrazit poslední příspěvek
    10 úno 2025 12:09
  • Pomoc při taktu Příloha(y)
    od ondyN » 14 led 2025 15:53 » v Taktování a další úpravy PC
    2
    6794
    od Dyonysos Zobrazit poslední příspěvek
    14 led 2025 16:19
  • Pomoc s naceněním pc komponent.
    od Mikajl » 02 zář 2024 14:50 » v P: Hardware
    4
    4878
    od Mikajl Zobrazit poslední příspěvek
    12 zář 2024 18:02
  • Pomoc s výběrem herního PC
    od RyeNi » 31 bře 2025 12:00 » v Rady s výběrem hw a sestavením PC
    5
    2723
    od Alferi Zobrazit poslední příspěvek
    31 bře 2025 19:37
  • Pomoc s výběrem PC monitoru. Příloha(y)
    od ski1961 » 17 dub 2025 11:17 » v Rady s výběrem hw a sestavením PC
    29
    6509
    od windroid2 Zobrazit poslední příspěvek
    22 dub 2025 20:28

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 8 hostů