Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

nejlepsi jazyk pro zacatek

Razi3L (612)|13.1.2008 17:33
zdravim, chtel bych se neco zacit ucit, material bych si i sehnal a neco mam, ale nevim s cim zacit. Umim jenom neco malo z HTML-to doplnim casem. Tak bych se vas rad zeptal, jakej jazyk je nejlepsi na zacinani. Cetl sem ze prej je dobry Delphi, ale to me zas ted kamos psal, ze uz v nem prestal vyvoj, takze to nema smysl. Co vy na to?
a8nr (176)|13.1.2008 18:09
Razi3L (612)|13.1.2008 18:18
tenhle thread sem procital, ale ten chce delat web, ja se ptam, co se da naucit uplne nejlip a co je nejlepsi pro zacatek a jestli ma Delphi jeste smysl, kdyz se nevyviji( co mi psal kamos)
Pabler (425)|13.1.2008 18:31
Pascal / Delphi je vhodny pre zaciatocníka, lebo si osvojis navyky, ak by si zacal priamo v C mozes narazit na par problemov a niektore veci nebudu hned take jasne,
jazyky ako Pascal priamo urcene na vyuku maju vyhodu v tom ze ti nedavaju az taku volnost, a teda chyby byvaju vacsinou take ze ich odhali kompilator, a da ti to hned vediet
-
A ako som pisal aj v inom threade, naucit sa princip co ako, sa mozes naucit v hocijakom jazyku, v inom to bude podobne, (rozdiely v prikazoch, syntax) ale princip ostane rovnaky, predsalen ak chces nieco triedit, stale to bude o tom isto, porovnat a vymenit ...
-
Skor sa snaz ucit optimalizovane algoritmy, lebo napr. bubblesort v podnikovej databaze by bol celkom dobry akurat k vytoceniu uctovniciek ;)
------------
Z toho co by som ti doporucil, tvoje spominane delphi na osvojenie si navykov, mozes si tam priamo skusit aj OOP, a neskor presedlat na C/C++ alebo Javu
Intri (3490)|13.1.2008 19:07
Myslím, že pokud jde o začátky s OOP, můžeš klidně jít rovnou na Javu. V Delphi stejně budeš pouze skládat aplikace z už hotových komponent, to můžeš i v Javě. Akorát s tím, že když s Javou začneš, bude ti o to bližší. Pokud jde o komponentní technologie, ty zkoumej až poté, co zvládneš základy OOP, až ti bude jasné, co je třída, dědičnost, polymorfismus, instance apod. Není to nic složitého, až to budeš studovat, snaž se si to přirovnat k něčemu v reálném světě ( OOP je totiž právě o modelování skutečnosti ).
Razi3L (612)|13.1.2008 19:47
jelikoz sem v tomhle smeru totalni lama - co prosimte presne znamena objetově orientované programování(OOP) a kde se da java vyuzit, co se v ni da vytvorit.
A co myslis tim komponentni technologie?
Intri (3490)|13.1.2008 20:01
OOP je přístup k programování, který se snaží fungovat tak, jak fungují věci ve skutečném světě. V OOP se třeba uděláš dva objekty ( lidi ) a ty budou používat nějaké metody pro komunikaci mezi sebou. Jednomu objektu ( člověku ) tak třeba řekneš, že má toho druhého podrbat na zádech a on to udělá způsobem, který mu předepíšeš. OOP je prostě založeno na objektech a komunikaci mezi nimi.

"Klasické" programování používáné při tvorbě konzolových aplikací ( např. pro DOS ) s objekty nepočítá, tam prostě přímo napíšeš, co se má v ten a ten moment stát, píšeš posloupnosti příkazů, které určují, jak se program bude krok za krokem chovat. To je základ, na který je rozšiřován OOPčkem ( přesně takto se totiž píšou ty metody, kterými objekty komunikují - napíšeš sekvenci příkazů, co se stane ), ale pro dnešní systémy to prostě nestačí.

No a komponentní technologie je přístup, který umožňuje využít už hotovou práci někoho jiného. Třeba s Delphi ( ale i s Javou nebo třeba C# ) se pracuje hlavně tak, že si na formulář ( okno aplikace ) nataháš komponenty ( prvky toho okna, jako textová pole, tlačítka apod. ) a těm pak určíš vlastnosti a jejich chování. Názorný příklad je třeba tlačítko - prostě si ho ve vývojovém prostředí přetáhneš na formulář, dvakrát na něj klikneš a v kódu zapíšeš, co se stane po kliknutí na to tlačítko. Je to hodně jednoduchý způsob programování, říká se tomu RAD ( Rapid Application Development ).
Ritchie83 (369)|13.1.2008 21:19
[QUOTE=Intri;80837]"Klasické" programování používáné při tvorbě konzolových aplikací ( např. pro DOS ) s objekty nepočítá, tam prostě přímo napíšeš, co se má v ten a ten moment stát, píšeš posloupnosti příkazů, které určují, jak se program bude krok za krokem chovat.[/QUOTE]
I konzolové či serverové aplikace se programují metodou OOP. Na druhou stranu není problém napsat GUI aplikaci v procedurálním jazyce (například GNOME je psáno v C).

Abych předchozí myšlenku rozvinul, tak existuje několik přístupů k programování. Programovací jazyky jsou pak vytvářeny na míru zvolenému přístupu. C či Pascal jsou klasické procedurální jazyky. Vedle nich stojí funkcionální jazyky jako Lisp, Haskell, Scheme. Koncept objektově orientovaného programování založeného na třídách rozvíjejí C++, Java, Smalltalk. Poměrně nezvyklý model OOP založený na prototypování má JavaScript. Nakonec existuje řada programovacích jazyků, které kombinují různé fundamentální přístupy. Mezi ně patří např. Python či Ruby.

Znalost programovacího jazyka je však k ničemu, pokud neumíte programovat (algoritmizovat).
Intri (3490)|13.1.2008 21:35
No, nechtěl jsem v tom dělat chaos, ale dejme tomu, když už je to venku...:-) Jo, jestli se bude kolega zabývat Javou, určitě se tutorialy nevrhnout hned na GUI ( Grafic User Interface ), budou se programovat konzolové aplikace.

A je taky pravda, že nejen GNOME, ale celý Unix vznikl v C. Není to tedy tak černé a bílé, jak jsem to nalíčil, ale věřil jsem, že to Razi3lovi bude stačit.

Co je ale absolutní pravda s pěti vykřičníky je poslední Ritchieho věta: pokud neumíš algoritmizovat, je znalost jazyka k ničemu. Primitivní příklad algoritmizace: jak se vynásobí dvě čísla ( třeba 5x3 )? Rozepíšeš si to na jednotlivé kroky, takže 3+3+3+3+3 ( nebo 5+5+5, záleží na tom, co si vybereš, matematická asociace, žádný problém ). Jde o to, že když chceš něčeho dosáhnout, budeš mít asi nějakou představu, jak to má fungovat. Ale abys tu představu realizoval, nestačí mít pouze nápad, že takto by to mohlo fungovat, je zapotřebí si celý postup krok po kroku promyslet. Žádný krok se nedá vynechat ( když teď opomenu blbě navržené algoritmy, jako třeba 3+0+0+0+3+3+3+0+0+3 ), PC je sice inteligentní, ale totální blbec. Chybějící krok si nedomyslí.
eraser (0)|13.1.2008 21:38
Ak chceš rozumieť programovaniu od gruntu, tak by si musel stráviť dosť času s výbornými knihami o ASM a potom C. Otázkou tiež ostáva, či využiť dané znalosti pre vývoj Windows aplikácií s využitím WinAPI alebo sa vrhnúť na Linux. :)
Intri (3490)|13.1.2008 21:43
Nejdřív bych se zaměřil na Windows kvůli jeho majoritnosti. Ale pokud jde o úplné začátky, které povedou celkem určitě ke konzolovým aplikacím, doporučil bych pro učení mít k dispozici oba systémy a zjišťovat, co si můžeš dovolit tak, aby to bylo univerzální. U okenních aplikací to už nepůjde tak snadno, tam si budeš muset vybrat a až později, až tomu budeš více rozumět, se začít učit cesty, jak aplikaci tvořit univerzálně ( nebo alespoň tak, aby úpravy v ní pro jiný systém byly co nejmenší, protože úplně univerzálně to jde jen málokdy ).
mech13 (5526)|14.1.2008 02:30
imho mu v tom delate uz moc velky hokej a sypete na neho spoustu informaci. ja bych na zacatek doporucil C a potom treba prechod na javu nebo zustat u C a jit na C++. rozhodne se ze zacatku nezabyvat zadnym GUI, jen to odvadi pozornost. napred se naucit resit slozite problemy a pak teprve si zacit hrat s tim jak to vypada.

jak nemam zrovna v lasce tucnaka, tak musim doporucit zacit ucit se programovat pod linuxem - vse je pripraveno, staci nabootovat, otevrit textovy editor a muze se zacit. veskera nutna znalost je "gcc -std=c99 -Wall -pedantic hello.c -o hello" pro preklad programu a "./hello" pro spusteni
neni potreba kvuli tomu nejak prekopavat PC nebo formatovat disk, staci rozjet tucnaka ve virtualnim PC a muze delat psi kusy, nic se nemuze pokazit (zdarma m$ virtual PC 2007 nebo VMware player, nejlepsi nastroj je placene VMWare workstation)

jak uz zminil intri, dulezite je byt schopen algoritmizovat - bez toho se programovat neda, dal je dobry mit vhodny priklady pro reseni. nejake klasicke zacatky jsou treba zde:
http://mat.fsv.cvut.cz/ivana/PrikladyC.rtf
http://vyuka.pavel-rimsky.cz/worksheets/lesson4.pdf
http://vyuka.pavel-rimsky.cz/worksheets/lesson6.pdf

rozhodne se neboj a pis sem jaky je treba tvuj soucasny stav a co by te treba zajimalo, par programatoru se tu najde a nekdo ti urcite rad poradi. komunikace s ostatnimi je dost dulezita, jednak jestli nedelas nejakou vec "prasacky", neco by se nedalo udelat lip nebo jestli to vubec mas dobre

//Ritchie83: jestle jsi nezminil peknou uchylarnu prolog:) - logicky programovaci jazyk... proti tomu zlaty lisp (=lost in stupid parenthesis)
mrozu (87)|15.1.2008 11:24
Zacal bych v Jave, pro zacatecnika mi to prijde lehci nez C. Ja zacinal Pascalem, potom C. Tedka delam hlavne v Jave a k predchozim se velmi nerad vracim.

2 mech13> PROLOG rulezz! :D
Styryx (351)|15.1.2008 11:57
Tak tak, pokud plánuješ skutečně vážně programovat, tak Java, dostává se hodně do popředí. Nejvíc se sice v současnosti pořád programuje asi v C/C++ (taky jak kde), ovšem je o dost těžší než Java (tj. je o dost težší neudělat tam chybu, Java má poměrně silnou typovou kontrolu) a v Javě se toho dělá čím dál víc. C++ je pro úplnýho začátečníka příšerně těžký, takže Java je lepší varianta.
Pascal už asi nemá smysl, sice leckdo ještě dělá v Delphi, ale je to IMHO slepá větev (dřív jsem v Delphi dělal hodně, jak v práci tak i soukromý věci, měl jsem je skutečně hodně oblíbený, v současný době už téměř nic). V Pascalu je sice snadnější se naučit strukturovaně programovat, jenže pak se stejně člověk musí naučit něco jinýho, v čem bude programovat skutečně, a ne jenom "školní příklady".

Takže já se taky přidávám s doporučením Javy.

P.S.: Java je výhodná i z finančního hlediska, je toho pro ní spoustu zadarmo (a Eclipse je úplně bomba). Pro C++ je taky hodně překladačů a knihoven zdarma, ale problémem je tam IDE (i když jde taky použít Eclipsa) a Delphi je draze placený, takže Pascal ne i z tohohle důvodu (pokud to nechce mít člověk nainstalovaný tak říkajíc "neoficiálně").

// to mech13, mrozu: jojo, Prolog a Lisp, to jsou super jazyky :D, taky jsem si s nima na škole dost užil ...
filky (197)|15.1.2008 14:24
Ve vyvoji aplikaci jak web tak normalnich jsou v soucastnosti pouzivany technologie Java, .NET a samozrejme DB technologie jako Oracle apod. Pokud chcete zacit programovat, je nejprve dobre zacit pochopenim OOP, jak Vam radi Intri.

V oboru vyuky OOP je u nas dlouhodobe nejznamejsi Rudolf Pecinovsky. Jeho metoda vyuky OOP na strednich skolach me pripada idealni pro zacatky. Vse o tom najdete na http://vyuka.pecinovsky.cz . Vyuziva k tomu http://www.bluej.org .

Pokud pochopite OOP a zvladnete zaklady Javy nebo C# mate nakroceno spravnou cestou.

Good luck :)
filky (197)|15.1.2008 14:35
[QUOTE=Styryx;81276]
P.S.: Java je výhodná i z finančního hlediska, je toho pro ní spoustu zadarmo (a Eclipse je úplně bomba). Pro C++ je taky hodně překladačů a knihoven zdarma, ale problémem je tam IDE (i když jde taky použít Eclipsa) a Delphi je draze placený, takže Pascal ne i z tohohle důvodu ...
...[/QUOTE]

Doby, kdy se za vyvojove prostredi pro zacatecniky nebo nadsence muselo platit, jsou davno pryc.
Zdarma vyvojove IDE od MS:

Visual C++ 2008 Express Edition
http://www.microsoft.com/express/vc/

Visual C# 2008 Express Edition
http://www.microsoft.com/express/vcsharp

Visual Basic 2008 Express Edition
http://www.microsoft.com/express/vb

Visual Web Developer 2008 Express Edition
http://www.microsoft.com/express/vwd
Razi3L (612)|15.1.2008 18:57
dik vsem za rady-tak zacnu s OOP brzo si zajdu koupit nejakou knizku o OOP a zakladech javy

Ale porad jsem nepochopil, co myslite tim naucit se algoritmizovat, muze to pls nekdo ukazat na nejaky priklade popripade odkaz na nejakou stranku, kde je to popsany?
Razi3L (612)|15.1.2008 19:00
[QUOTE=filky;81332]Doby, kdy se za vyvojove prostredi pro zacatecniky nebo nadsence muselo platit, jsou davno pryc.
Zdarma vyvojove IDE od MS:[/QUOTE]

neco v cestine by nebylo? ne ze bych to neprelouskal v Aj, ale prece jenom mam radsi rodnej jazyk :-)
filky (197)|16.1.2008 00:19
Jsme mala zeme na to, aby tyto produkty byli i v cestine. Stejne bez anglictiny se v programovani neobejdete, tak lepsi zacit hned.
filky (197)|16.1.2008 00:27
Razi3L: Na algoritmy zatim zapomente. Naucte se nejdriv OOP, stejne jako pan Pecinovsky si myslim, ze znalost OOP by mela byt na prvnim miste. Ruku v ruce s OOP se budete ucit i design paterny, ktere jsou v jazycich jako Java a .Net to hlavni. Spravne pochopeni OOP a design paternu z Vas uz z pulky udela dobreho programatora.

Algoritmy to je jina vec. V podstate se ucite jakym zpusobem resit specificke problemy jako napr. radeni, trideni, ruzne algoritmy matematickych vypoctu atp. Je v tom hodne logiky, matematiky a linearni algebry. V dnesni dobe je dobre vedet, ze to existuje, neni to ale vylozene potreba pro zacatecnika.
Razi3L (612)|16.1.2008 19:56
[QUOTE=filky;81483]Jsme mala zeme na to, aby tyto produkty byli i v cestine. Stejne bez anglictiny se v programovani neobejdete, tak lepsi zacit hned.[/QUOTE]
ne ze bych neumel anglicky, tu zvladam celkem solidne a co se tyce porozomumeni textu, tak to je vubec v pohode, ale mam proste radsi cestinu :)
Intri (3490)|16.1.2008 20:10
[quote=Styryx;81276]P.S.: Java je výhodná i z finančního hlediska, je toho pro ní spoustu zadarmo (a Eclipse je úplně bomba). Pro C++ je taky hodně překladačů a knihoven zdarma, ale problémem je tam IDE (i když jde taky použít Eclipsa) a Delphi je draze placený, takže Pascal ne i z tohohle důvodu (pokud to nechce mít člověk nainstalovaný tak říkajíc "neoficiálně").[/quote]

Turbo Delphi Explorer je nástroj od Borlandu zdarma a podporuje jak klasický Pascal, tak Object Pascal. Ke všemu jej leze použít pro tvorbu komerčních aplikací ( taky zdarma ). Jeho nevýhodami je nemožnost rozšířit prostředí o komponenty třetích stran ( což ale začátečníka vůbec nemusí tížit, i tak je TDE vybaven více než 200 komponentami, s nimiž si každý začátečník bohatě vystačí ) a hlavně trochu nepohodlné bugy. Ale ty naštěstí nijak neomezují funkčnost, jen třeba občas zlobí identifikace chyb a podtrhává to slova, která to podtrhávat nemá. Kompilovat však program jde v pohodě i přes to, že to podtrhne desetinu textu, takže jak říkám - na funkčnost nemá vliv. Rozpoznávání chyb funguje bezchybně.

Jsem se trochu rozepsal o něčem, co stejně asi kolega nevyužije ( a Delphi ani není moc dobrý jazyk, na nějž se upnout ), ale napsal jsem to aspoň pro vyjasnění.
Razi3L (612)|16.1.2008 21:25
jen se na nej zbezne podivam. Jinak tenhle nebo prsti tyden si pujdu koupit knizku o OOP a potom pujdu na Javu.
Intri (3490)|16.1.2008 21:29
Jj, hodně štěstí. Kdybys měl dotazy, jsme tu.
mrozu (87)|16.1.2008 21:41
[quote=Razi3L;81751]tenhle nebo prsti tyden si pujdu koupit knizku o OOP a potom pujdu na Javu.[/quote]

Pro zacatecnika bych doporucil asi tuhle: http://www.grada.cz/katalog/kniha/myslime-objektove-v-jazyku-java-50/
pavel_p (993)|17.1.2008 19:51
Na Java x C nemám jednoznačný názor, ale spíš Javu.

U Javy je nutné znát základy OOP, protože o něm člověk musí vědět i když nechce. Přechod z C na Javu mi přijde jednodušší než opačně. Jednoznačnou výhodou pro vývoj opravdových aplikací je, že Java obsahuje ohromné množství knihoven a člověk nemusí začínat jejich psaním. Rozšířenou pověrou je zcela automatická správa paměti (její uvolňování, aby ji program pokud možno při delším běhu nesežral).

U C je nutné se kompletně starat o správu paměti, tj. řídit požadavky na přidělování a uvolňování, pointrová aritmetika je pro začátečníka trochu zmatečná (je nutné vědět kdy chci adresu v paměti a kdy hodnotu toho co tam je), práce se stringy nepohodlná a díky různým přetečením se občas vyskytují velmi zajímavé chyby (v paměti omylem zapíšu do jiné proměné než chci). C je mnohem blíže k hardwaru a jestli je to dobře nebo špatně je celkem dobré téma na flame.

Ono je nakonec nejtěžší aplikaci napsat tak, aby člověk pokud možno nedošel po dvou měsících názoru, že by bylo lepší to celé zahodit a za měsíc to napsat lépe. Program není nutné optimalizovat za každou cenu na výkon zvlášť pokud tím naroste jeho složitost a nějaká sem tam prováděná operace se zkrátí celkem zanedbatelně.
Intri (3490)|17.1.2008 20:06
Práce se stringy ( pro toho, kdo neví - s textovými řetězci ) je v C sice nepohodlná, ale na netu se určitě dá najít třída, která tu práci usnadňuje a string jakožto pole znaků zabaluje. Pokud se takovou třídu nepodaří najít, není obtížné si při porozumění stringů v C takovou třídu napsat svépomocí.

Pomocí přetížení operátorů pak není problém instanci té třídy považovat za obyčejnou proměnnou ( aspoň teda doufám, že se teď nepletu, když si myslím, že se dá přetížit operátor přiřazení ).
mech13 (5526)|17.1.2008 20:19
intri - ansi C99 tusim pretizeni neumoznuje... pretizeni jde az v cpp
matilda (83)|20.1.2008 10:31
podle me je nejlepsi c/c++ a to z duvodu rychlosti, preci jenom jsou program v nem zkompilované nejrychlejsi...teda hned po assembleru...a proti jave je to 1000x rychlejsi tagze idealni na hry, na slozite vypocty...a winApi v nem neni zadnej problem...navic jak si osvojis pravidla de to vod ruky a mas kontrolu uplne nad vsim
Pabler (425)|20.1.2008 11:16
Matilda: Suhlasim ze C ma rychlejsí kod ako Java, hoci tu zalezí dost aj od pouzitej verzie compilatora, no na druhu stranu Java je viac prenositelna medzi platformami, Win,Lin,Mac vdaka JVM
-
Ono si to treba vyberat podla toho naco to chces, a nikto ti nebrani niektore casti naprogramovat v C a prilinkovat ich trebars do Javy ako hotove .obj
-
Co sa zlozitosti tyka na konstanty sa moc nehrame, pri mat vypoctoch a grafike je kazdy usetreny krok v asm dobry, no co sa tyka GUI programu, pokial sa da vytvorit v niecom jednoduchsie preco nie ;)
-
ono ze to c je 1000x rychlejsie sa rychlo stratí ak ma clovek sam o sebe zle navyky programovania
-
Príklad: vyhladanie polozky v utriedenom zozname o 1 000 000 prvkoch
Metoda: Prechadzam postupne az to najdem O(n) cize v najhorsom prípade rovny 1 000 000 porovnaní
Metoda: Binarne hladanie O (log n) v najhorsom pripade: 20 porovnaní
-
Zaver: spravim to v Jave 20 * 1000 = 20 000 co je stale lepsie ako 1 000 000 v C
----
Ale ako som pisal ked je treba vela vypoctov za co najmensi cas ... tak C, a casto sa opakujuce casti sa snazit dat do ASM
---------------
Pavel P: Na flame ani nie, neviem preco by mala byt potreba sa hadat o tom co je absolutne najlpsie, dobry programator co si uvedomuje ako sa veci maju, je celkom rad ze ma tolko nastrojov ktore moze vyuzit pre pomer jeho komfort / vykon aplikacie
nebudeme predsa zatlkat hrebik do steny papucou, ked na to mame kladivo...
diverman (5)|20.1.2008 13:54
Zarazi me, ze tu nepadl napr. bash, perl nebo python. Jde o opravdu silne programovaci jazyky.
Intri (3490)|20.1.2008 15:37
Ale ne moc rozšířené. Perl a Python ještě dejme tomu, ale i tak to jsou jazyky, které se v porovnání s Javou nebo C moc nepoužívají.
mrozu (87)|20.1.2008 15:48
Hlavne je to tema ktery jazyk pro zacatek, takze takovehle poznamky jsou ponekud mimo misu.
diverman (5)|20.1.2008 16:48
citace: "Python je skvělý programovací jazyk pro začátečníky i pro pokročilé, pro studenty i pro vydělávající programátory."
viz: http://www.py.cz/PythonZaciname
mrozu (87)|20.1.2008 16:59
Samozrejme, kazdy, kdo neco propaguje, o tom tvrdi, ze, to jeho je nejlepsi pro vsechny a na vsechno, ja ale beru realitu a ta je takova, ze vsude okolo je Java a C, tak proc si delat problemy a ucit se neco uplne jinyho.
Razi3L (612)|20.1.2008 17:38
[QUOTE=mrozu;82756]Samozrejme, kazdy, kdo neco propaguje, o tom tvrdi, ze, to jeho je nejlepsi pro vsechny a na vsechno, ja ale beru realitu a ta je takova, ze vsude okolo je Java a C, tak proc si delat problemy a ucit se neco uplne jinyho.[/QUOTE]

naprosto souhlasim, co jsem cetl, tak z Javy se da v pohode prejit na C/C++ a naopak. C se stejne budu muset naucit do skoly, tudiz zacnou javou, protoze vetsina z vas tvrdi, ze je to nejlepsi pro zacatek...
diverman (5)|20.1.2008 18:48
razi3l: umite algoritmicky myslet? tim myslim, jestli napr. dokazete zapsat algoritmus trideni vyberem nebo haldou? pokud ne, tak programovani rovnou vzdejte.
Razi3L (612)|20.1.2008 19:08
muzete to uvest na nejakem prilade? mozna sme se to ucili ve skole a uz sem zapomnel, ze se to tak jmenuje :D
diverman (5)|20.1.2008 19:28
2 7 3 9 1 4 0 6 5 8

seradte tato cisla algoritmem select sort a heap sort
mech13 (5526)|20.1.2008 19:48
na zacatek jsi nasadil docela dost silny kalibr, on chce zacit, ne se tim hned z fleku zivit

//radici algoritmy jsou docela slusne popsany na wiki a daji se vygooglit vyborne animace jak ktera metoda funguje
Razi3L (612)|20.1.2008 19:57
tak nejak bych to taky rekl, nepotrebuju hned umet vsechno, jen uz je nejvyssi cas zacit neco delat...
Pabler (425)|20.1.2008 20:08
////
2 7 3 9 1 4 0 6 5 8
seradte tato cisla algoritmem select sort a heap sort
////
Itexpert: ono na toto sa da odpovedat len jednou moznosotu
0 1 2 3 4 5 6 7 8 9
a obe metody triedenia ju vratia ;)
----
Tvoja povodna otazka bola ci vie spravit algac k select/heapsortu, najprv si musí ozrejmit zaklady programovania, potom to ako tie metody funguju (na com su zalozene) až potom sa moze pokusit niektoru z nich naprogramovat, alebo aspon spisat kroky potrebne k vykonaniu triedenia...
ono sa totiz dost tazko pise algoritmus na nieco co "nevies" co je ;)
Intri (3490)|20.1.2008 20:49
[quote=itexpert;82807]2 7 3 9 1 4 0 6 5 8

seradte tato cisla algoritmem select sort a heap sort[/quote]

Vzhledem k tomu, že tyhle algoritmy už někdo vymyslel, stěží jejich napsáním někdo dokáže, že umí algoritmizovat... Abych naprogramoval heap sort, musím vědět, co to heap sort je a na jakých principech staví. Ale jakmile to vím, znám ten algoritmus a stačí ho napsat.

Myslím, že rozumější zadání úkolu by bylo napsat ta čísla a říct "programově setřiďte". Tečka. Tohle ho donutí přemýšlet, jak by to asi provedl ( přemýšlel by nad tím, jak to zalgoritmizovat ). Protože by nejspíš z vlastní hlavy přišel na bubble sort, chtělo by mu to pak říct, že ta metoda je hrozně pomalá a že existují lepší, rychlejší způsoby. A ať se tedy pokusí najít cokoliv lepšího. Když pak přijde se shaker sortem, je to zase přece jenom nějaké zlepšení. Nebo i kdyby přišel na to blbé omezení jednoho kroku ve vnějším cyklu u bubble sortu, pořád je to známka naděje, že bude umět aspoň nějak algoritmizovat.;-)

Ale je samozřejmé, jak ostatní poznamenali, že nejdříve bude muset vědět, co je pole, jak funguje atd., aby ta čísla neukládal každé do samostatné proměnné.
diverman (5)|20.1.2008 22:23
[QUOTE=Pabler;82832]////
2 7 3 9 1 4 0 6 5 8
seradte tato cisla algoritmem select sort a heap sort
////
Itexpert: ono na toto sa da odpovedat len jednou moznosotu
0 1 2 3 4 5 6 7 8 9
a obe metody triedenia ju vratia ;)
[/QUOTE]

Spatne :-D Heap sort cisla setridi opacne: 9 8 7 6 5 4 3 2 1 0

BTW: Slo mi o to, aby tazatel vypsal nekolik iteraci prubehu algoritmu.
Razi3L (612)|20.1.2008 22:52
[QUOTE=itexpert;82881]Spatne :-D Heap sort cisla setridi opacne: 9 8 7 6 5 4 3 2 1 0

BTW: Slo mi o to, aby tazatel vypsal nekolik iteraci prubehu algoritmu.[/QUOTE]

ono je to v podstate jedno, zjistil jsem (jak jsem predpokladal) , ze algoritmy neumim, ale jak nekdo poznamenal vyse k uplnym zakladum to neni potreba a navic se je mohu kdykoliv doucit...
Intri (3490)|20.1.2008 22:58
Nejde o to umět algoritmy, to je ti vesměs k ničemu. Hotové algoritmy budeš mít při vývoji vždycky k dispozici. Tvoje práce je vymyslet nějaký nový algoritmus, pokud možno takový, že nikoho na světě nenapadne lepší.:-) To je samozřejmě ideál, kterého určitě nedosáhneš ( no, aspoň ne hned... ), pro tebe bude podstatné, když si třeba teď ta rozházená čísla napíšeš, zapomeneš na veškerou inteligenci a přesně krok za krokem budeš čísla setřizovat.

Prostě ta čísla seřaď, ale musíš postupovat tak, že když se rozhodneš po nějaký krok, musíš být schopný taky do detailu říct, proč ten krok můžeš udělat. A navíc ten krok musí platit pro jakákoliv dvě čísla, která mají stejné vlastnosti jako ta dvě, se kterými teď pracuješ. Zní to složitě, ale jednoduché algoritmy nejsou složité ( divná věta... ).
Pabler (425)|21.1.2008 02:09
[QUOTE=itexpert;82881]Spatne :-D Heap sort cisla setridi opacne: 9 8 7 6 5 4 3 2 1 0

BTW: Slo mi o to, aby tazatel vypsal nekolik iteraci prubehu algoritmu.[/QUOTE]

Asi som mal radsej napisat ze vystupom bude utriedena postupnost cisel, nejak som si to v tom zapale neuvedomil :shy:
Ale nic mi nebrani upravit kapanek zaver heapsortu a bude aj 0 - 9 a to fakt nebude velka uprava...
-
myslienka je odobrat koren stromu a ulozit ho na koniec, skratit rozsah, posledny list supnut na koren a "preosiat" strom, a toto opakovat, kto mi ale zakaze pamatat iteraciu a vkladat vzdy pred prvok [posledny - iteracia] ;)
inak povedane, prvy krat dam odobrany koren na koniec, a kazdy dalsi nasledne pred neho...
teraz premyslam ci by nebolo vyhodnejsie to proste precitat opacne ;)
- mozem mat ako zabavku na dalsi weekend
----------
este ked sme pri alg triedenia, tak Heapsort v najhorsom pripade O(n*lg n) a narodom oblubeny quicksort v najlepsom pripade O(n*lg n) v najhorsom O(n^2) ako bubblesort z ktoreho sa odvinul, avsak statisticky preukazane ze je ten quick o nieco rychlejsi nez heapsort (suvisí s dodatocnou reziou ako budovanie haldy)
no na velke objemy dat je viac odporucany heapsrt
pre oba platí ze su nestabilne (to znamena dva rovnake prvky jeden na pravo postupnosti druhy nalavo sa mozu prehodit a skoncit opacne)

Ale to uz ideme hodne offtopic, Razi3Lovi radim nech to nevzdava, cvicením k dokonalosti, pokial ho to baví tak to pojde ... soferovat auto sa tiez nikto nenaucil len pozeraním sa nan ... hoci dakedy si myslim ze niektory aj hej podla toho co stretne clovek na cestach :D
Na zaciatok si zacni s Hello world, potom s dakou jednoduchou textovou kalkulackou, potom poskusaj polia, a pri nich mozes uplatnovat triedenia o ktorych sa hovorilo, zacni zakladnymi ako bubblesort, insertsort, selectsort a neskor prejdi k vylepsením shell,heap,quick,merge
neskor mozes skusat perlicky ako spajanie monotonií, radix sort, topologicke triedenie ;)
mech13 (5526)|21.1.2008 03:16
[lechce OT]co takhle bogosort?:D[/OT]
mrozu (87)|21.1.2008 23:26
Vubec nechapu, co tady strasite s radicima algoritmama. Nevim, co programujete, ze furt musite neco radit a jeste k tomu znat algoritmy, ktery jsou uz davno implementovany a staci je jenom zavolat. Jediny, co Razi3l potrebuje k tomu, aby zacal programovat, je vule.
pavel_p (993)|21.1.2008 23:42
Přesně tak.

Alternativní přístup.
Su línej a tuším, že v Javě je na třízení a spoustu elementárních algoritmů vždy nějaká metoda. Pokud jsem ji poslední půlrok nepoužil a tuším, kde jsem to dělal naposledy, podívám se do již napsaného kódu. Pokud ne pak google: java sort.
Výsledek je ...
[code]java.util.Arrays.sort (intArray);[/code]
... a mám celkem jistotu, že na třízení velkých polí to bude efektivnější, než to co napíšu a u malých polí je to úplně jedno (jestli to nedělám milionkrát).

EDIT: je to hodně OT :turtle a prosím itexperta, aby zkusil psát konstruktivnější příspěvky. Na prezentaci svých znalostí lze napsat i blog (včetně kódu). Pokud bude o programování, linuxu a serverovém HW, tak ho budu možná i číst.