Prosba o pomoc pri programování jednodůchého programu v delphi
Zdravim všechny kdo se vyznají v delphi a byli by ochotní mi pomoc. Mam za ukol vytvorit program ktery by vetu kterou napisu ja napsal pozpatku. Bud v delphi nabo v pascalu. Pomozte PROSÍM
No to by snad nemělo být tak těžký, ne?
Větu uložíš do stringu a pak např. pomocí cyklu FOR nebo WHILE projdeš ten řetězec a vypíšeš znaky v opačném pořadí.
A když už by sis nechtěl namáhat hlavu, tak použij Google:
http://www.seminarky.cz/Pascal-text-pozpatku-pomoci -rekurzivni-procedury-81
To je fikany. Musel jsem na to chvili koukat, nez jsem pochopil, jak to pracuje. Chudak profesor...
proč? Vždyť je to typický příklad rekurze. Náš profesor informatiky na gymplu si v těchhle hříčkách liboval; dodnes si pamatuju, jak nás nutil programovat 3D programy (to bylo v roce 92), od té doby nemám rád vektory . Dneska už jsem to skoro všechno pozapomínal, ale vím, že pomocí rekurze šlo zprasit kdeco..
Výhoda rekurzívity je:
- jednoduchosť zápisu
Nevýhoda:
- pri mnohonásobných volaniach (nebýva to zvykom) pretečenie zásobníka
No to víš, originální řešení udělá větší dojem než nějaký cyklus FOR, který zvládne kdejaka lamka.
Vše má své pro a proti. For je klasika, o které nemusíš přemýšlet, víš že bude fungovat a jak bude fungovat a je napsaná za pár sekund.
U rekurzí si musíš dávat velký pozor na to, zda jsi na něco nezapomněl a jestli se ti to v nejméně vhodném okamžiku nekde nazacyklí nebo to nepřeskočí půl struktury. Výsledkem je geniální kód, nad kterým jsi strávil pár hodin...
Rekurzia je na toto nevhodna. Neefektivne to pracuje s pamatou, nie je tam kontrola na velkost vstupu, zasobnik nie je nekonecny...
rekurzia je nevhodna skoro na vsetko. okrem toho ze sprehladnuje kod, nema ziadny dalsi vyznam.
Ma vyznam v specialnych pripadoch, napr. pri nejakom dynamickom vytvarani kombinacii apod (bola by vhodna napr na predposlednu perm.programming challenge na HTS ale potom som to aj tak prerobil inac nech to je rychlejsie, s rekurziou to ale mohlo byt kratsie a paradoxne prehladnejsie).
este raz. rekurzia sluzi len na sprehladnenie kodu(co som uz spominal), vsetko sa da napisat bez nej. prinasa do kodu len zvysenu reziu ohladne volania funkcii(odkladanie lokalnych premennych a navratovych hodnot). ale ja ti to vyvracat nebudem, kludne ju pouzivaj.
Musím s Igorem souhlasit. Vše jde přepsat do cyklů nebo iterací bez použití rekurze a je to rychlejší. Rekursivní je samozřejmě čitelnější a robustnější. Obzvlášť v simulací automatů nebo metody různých stromových struktur. Ale i to lze napsat bez rekurze . Ve školách se obvykle vykládá, že rekurse je geniální na všechno a nepředpokládá se konečná velikost paměti počítače .
To je pravda, ale nesouhlasím s tím, že rekurze ....
"Ve školách se obvykle vykládá,že rekurse je geniální na všechno a nepředpokládá se konečná velikost paměti počítače"
Například u mě si učitel všiml, že i když mi jeden program fungoval tak byl řešen jeden důležitý krok voláním funkce
rekurzivně. Hned mi řekl co a jak ! A ani si nepamatuji, že by nějaký učitel ve vzorových příkladech rekurzi vůbec
podstrkoval. Asi na to mají intuitivní reflex a vyhýbají se tomu.
Sám když se nas**u tak první co udělám je, že kašlu na rekurzi a šup tam s ní...
Takové ty chlácholíve myšlenky:
1 ) Tenhle program stejně nikdo nebude používat.....
2 ) Pokud nebude platit 1) tak stejně ne dost dlouho aby se to projevilo.....
3 ) Je to jen cvičně ve škole......
4 ) Stejně to nikdy dělat nebudu....
5 ) Kdyby náhodou tak to předělám později.......
Ty myšlenky jsou nádherné .
//Edit: V dobách mého mládí se teprva objevovaly jazyky, umožňující rekurzi (Algol) a tak byl rekursivní boom. K tomu tenkrát kapacita paměti sálového (!!) počítače 64KB a bylo vymalováno. Pamatuji na oblíbený rekursivní algoritmus na výpočet faktoriálu. Tam přeplnění stacku nehrozilo, neboť při výpočtu cca 80! vypuklo daleko dřív numerické přetečení .
Ale ved ja netvrdim ze sa neda, pisem o tom kde je to vhodne a kde nie.
Rekurzia je veľmi dobrá pri jednoduchom šachovom algoritme. Jednoduchý preto, lebo netreba kontrolovať čas.
to už jsou zase zkoušky? nebo před vysvědčením?
to víš, prázdniny skončily, studenti za ten týden zapomněli, co probrali za půl roku, tak se musí dohánět
Na Builder.cz je zaženou, tak hledají pomoc jinde...
1 ) Větu uložíš do stringu
2 ) zjištíš délku stringu
3 ) Ve foru to vytiskneš v opačném pořadí nějak takto:
v C++ takto:
// edit
Když jsem to ťukal nebyl tu JaFi....
jj, mě se takto dost často "přihodí" taky JaFi nebo Host. Mám nutkání je smazat
To co je za program, pozeram ze mate vsetci dnes blby den
Naco si vytvaras premennu delkaTextu a naco ju v cykle znizujes, ked ju nikde nepouzivas? V cykle bude snad nieco ako printf("%c", (int)(mujText[i]));
... P.S. resp cely ten cyklus ma byt naopak, for(i=mujText.length(); i>0; i--)
a potom printf("%c", (int)(mujText[i-1]));
Nesouhlasím. Mám to tam sice jen symbolicky, ale jednu věc jsem zatajil.
Výpis do printf by měl obsahovat ještě "substring" od zadu postupně kupředu.
Nicméně je pravda, že napsané to tam nemám.
To co píšeš je jen další možné řešení, ne však jediné.
ale s jednym musis suhlasit, ze miesas C a C++ dokopy.
No...... a co Šák to funguje.
//edit
A už nech toho porypování a napiš článek o hackování jak ses onehdá dušoval.
Pořád se nic neděje.
vsak ano. ja len tak.
Robis veci zbytocne komplikovane. substring, zbytocne premenne... Ja som si zvykol automaticky pisat veci efektivne, ma to 2 vyhody: a) pisem 2x menej b)nemam zbytocny problem s kozistenciou rovnakej informacie vo viacerych premennych, hlavne po pripadnych zmenach programu (vsimni si ze mas to iste (dlzku) na 2miestach (v 2premennych), ak sa zmeni nieco musis menit vsetky miesta = potencialne riziko).
P.S. jasne ze v 3riadkoch to je jedno, ale taketo navyky ludia prenasaju aj do komplikovanych projektov a potom maju problem. Rovnaka informacia nema co hladat na 2miestach.
Kompletní domácí úkol pro Delphi:
P.S. opravena spodni hranice cyklu po upozorneni MM
downto 0? Nema packal indexy od 1?
Pro sting to melo byt skutecne 1. Ale protoze string je v Delphi AnsiString, tak je v indexu 0 ulozen tusim znak #0, tak to nema na vysledek vliv.
Priklad opravim.