Názory ke článku Některé zajímavé funkce pro začátečníka – Palindrom – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Názory ke článku Některé zajímavé funkce pro začátečníka – Palindrom – Programujte.comNázory ke článku Některé zajímavé funkce pro začátečníka – Palindrom – Programujte.com

 

Názory ke článku Některé zajímavé funkce pro začátečníka – Palindrom

xxar3s   NOVÝ
25. 4. 2012

preco v pascale nepouzivate operator inkrementacie inc ?

found, autor článku   NOVÝ
25. 4. 2012     web

#1 xxar3s

Toť otázka, já osobně ho neznám, v Pascalu nepracuji. Pascalovou část jsem psal tak, že mi ji ověřoval kolega, zda je korektně napsána. Tuším, že ale zase extra velký problém v tom není, ne? :)

Jinak se za svou neznalost omlouvám.

yetty   NOVÝ
25. 4. 2012     web     twitter

#1 xxar3s
A proč ano? Pro začátečníka je to akorát zmatení navíc, výhody to pokud vím nepřináší žádné. Pokud nepočítám mezery, je to dokonce stejně dlouhé (pro jednoznakové proměnné):

inc(x);
x:=x+1;

Ale samozřejmě se o výhodách rád nechám poučit ;)

MZetko   NOVÝ
25. 4. 2012     web     twitter

#1 xxar3s
Výhody tam v praxi v té základní formě žádné nejsou (kromě možná místy zkrácení kódu či zjednodušené čitelnosti). inc dec také mají dvouparametrovou verzi, kde je možné uvést o kolik se má proměnná změnit.

Většina překladačů inc a dec překládá jako inline funkce (tedy volání nahradí přímo jejím tělem), ale možná některé výjimky také existují a proto při náročnějších operacích možná je zbytečné přitěžovat si zbytečně voláním funkce navíc.

Navíc pascal nyní podporuje příkaz +=, což se mi zdá jako náhrada inc dec výborné - například x+=1; je kratší na zápis než oba dva zbylé způsoby inkrementace.

yetty   NOVÝ
25. 4. 2012     web     twitter

#4 MZetko

Navíc pascal nyní podporuje příkaz +=, což se mi zdá jako náhrada inc a dec výborné - například x+=1; je kratší na zápis než oba dva zbylé způsoby inkrementace.

A opravdu, to jsem netušil. Díky. A dodám, že mi funguje i *= a -=.

zlz   NOVÝ
26. 4. 2012

sizeof není funkce.
počet prvků pole není to samé jako délka řetezce.
nepoužíváme strlen na řetězci bez ukončovacího znaku.
nezapisujeme do pole bez zajištění/kontroly dostatečné velikosti.
proměnnou nepojmenováváme vysledek, pokud neobsahuje konečný výsledek.
kód před zveřejněním aspoň vyzkoušíme.

když mi dáte kontakt, tak vám koupím knihu o základech céčka a pascalu dle vašeho výběru. než je přečtete, tak články nepište.

Ugo   NOVÝ
26. 4. 2012

nejsem Céčkař ani Pascalista, ale ten kód je hrozný. Dle mého názoru sizeof funkce je a proto mi jde proti srsti když na začátku je napsáno, že se využije jen to a to a přitom sizeof tam napsáno není. Psát programy se základními funkcemi bývá lehké, problémem je, že je to pak hrozný guláš a taky to co vám zde chybí a to je optimalizace, nemám s C moc zkušeností (naprosté minimum s c++), ale procházet zbytečně celé pole vícekrát než je potřeba není dobré nikde, zrovna tak například zbytečná proměnná- zaver.

Taky by mě zajímala ta věta, že v C můžeme jen tak přidávat znaky do pole a vše bude v fungovat, měl jsem za to, že v C je pamět pod kontrolou programátora, čili je třeba nadefinovat si pro to pole paměť a tu nepřesáhnout. (ale možná sem zcela mimo ;))

Samozřejmě každý článek dobrý, ale když už to dá tolik práce, tak by nebylo od věci věnovat tomu o procento víc a udělat to líp.

Marek   NOVÝ
27. 4. 2012

Pár poznámek:

 - funkci JepPovolenýZnak() urychlíte přepsáním algoritmu na tzv. binární vyhledávání (vyžaduje seřazené povoloné znaky - to není porblém), nebo využijte funkci ze standardní knihovny C++ std::binary_search, nebo jí "znovu" implementujte v C

 - v cyklech for nepoužívejte i++ ale ++i, když někdy přejdete na iterátory (C++) tak se i++ může stát  výkonostní brzdou

 - příklady předpokládájí ASCII abecedu, jenže už jsme v 21. století a unicode je všude kolem nás, vím že je práce s unikode kolikrát netriviální ale je dobré na to myslet

 - proč dobrovolně používat C když C++ je kolikrát rychlejší (délka vývoje) a minimálně stejně rychlé nebo rychlejší - rychlost hotového programu (třeba templatovaná funkce std::sort vs qsort)

ian   NOVÝ
27. 4. 2012

#8 Marek
tywe Marku, co to meles?

- binarni vyhledavani na poli o delce 6? deleni a skoky jsou pro procesor mnohem vetsi problem, nez sekvencne projit male pole

- ano, v c++ je zvykem pouzivat prefixovou variantu inkrementu, protoze na objektech to MUZE usetrit vytvoreni jednoho objektu, ale zadna "vykonostni brzda" to v zadnem pripade neni, v C je to uplene sumak

- na co tady unicode?! vzdyt je to vyukovej priklad!

- to by me zajimalo, kdy je c++ rychlejsi a proc je std::sort rychlejsi nez qsort? ;D

Marek   NOVÝ
27. 4. 2012

OK, trochu jsem to přehnal.

Binární vyhledávání je rychlejší (O(log(n)) než průlet polem/vectorem (O(n)), v tomto případě bych spíše použil něco jako char c=/*getPismeno()*/; if(c>='a' && c<='z').

it++ vs ++it osobně všude a vždy píšu ++it, nic mi to neudělá, takže jsem výkonnostní propad nezažil, pravda nic jsem neměřil. Proč zbytečně psát (možná trošku) pomalejší variantu? Jednou někde někdo (nějaká babka na trhu?) vyprávěl jak tím dost urychlil program.

Unicode: ano toto je výukový program, ale zatím u VSECH (nevýukových) programů co jsem kdy psal jsem musel počítat minimálně s češtinou (a různým kodováním), a je tu riziko ze VSECHNY programy začnou používat neczechši nebo neameričani, kolikrát se mi stává, že mi třeba webová aplikace zkomolí jméno, apod.

std::sort vs qsort: to je známé a je toho na webu určitě mnoho, naposledy jsem to slyšel na přednášce GoingNative2012 snad od samotného Bjarne Stroustrup http://channel9.msdn.com/Events/GoingNative/GoingNative-2012

Marek   NOVÝ
27. 4. 2012

#9 ian
Jé, neslinkoval jsem svůj komentář s tím tvým.

crazy   NOVÝ
29. 4. 2012     web     twitter

#7 Ugo

btw. sizeof není funkce, ale operátor

mol   NOVÝ
1. 5. 2012

Autor by se měl naučit alespoň jeden z použitých jazyků, dělá naprosto elementární chyby.

char znaky[] = {" ", ",", ".", "!", "?", "'"}; // a další dle uvážení

znaky deklaroval jako pole znaků, ale inicializuje ho polem řetězců (tj. efektivně polem polí znaků)

  int delka_pole = sizeof(znaky)/sizeof(znaky[0]);

dělení naprosto zbytečné, protože typ znaky[0] je char a sizeof(char) je ze standardu 1

bool jePalindrom( char palindrom[] ){

  int j = 0;
  int delka = sizeof(palindrom)/sizeof(palindrom[0]);

to nemůže fungovat, protože sizeof(palindrom) == sizeof(char*) neboť při předávání polí jako parametrů se jejich velikost nepředává, ale předávají se jako ukazatel na první prvek. za tohle by od každé zkoušky z jazyka C vyletěl

for( int i = 0; i < delka; i++ ){
    vysledek[i] = toupper(vysledek[i]);
  }

chyba, delka byla (resp. mela byt) delka vstupniho textu, vysledek muze byt kratsi

delka = strlen( vysledek );

predchozi kod bohuzel nikde vysledek neukoncuje nulou, strlen nemusi fungovat

  for( int i = 0; i < delka; i++ ){
    if( i > (delka - i) ) break;

což takhle  for( int i = 0; i < delka / 2; i++ ){

    if( vysledek[i] != vysledek[delka-i] ){

nema to bejt if( vysledek[i] != vysledek[delka-i-1] ){

Pascal

function jePovolen( c: char ):boolean;
begin
  znaky[1] := ' ';
  znaky[2] := ','; {a další dle uvážení}

  delka_pole := const.; { určujeme nějakou konstantu,
                         která je daná v Pascalu při deklaraci }

nechapu, v Pascalu lze inicializovat staticky retezec, ale i pole znaku normalne. A take lze snadno ziskat jejich delku 

  for i := 1 to delka_pole do begin
    if znaky[i] = c then jePovolen := false;
  end;
  jePovolen := true;

coz nebude vubec fungovat nebot uvnitr cyklu chybi prikaz exit

function jePailndrom( palindrom :string );

preklep + chybi " : boolean" 

  delka := length( vysledek );
    for i := 1 to delka - 1 do begin
    if i > (delka - 1) then break;

tady melo bejt asi (delka - i), soude podle podobnosti s C verzi (samozrejme jednodussi by bylo mit ten for cyklus do delka div 2

    if( vysledek[i] <> vysledek[delka-i] ) then begin

vysledek[delka-i+1]

puccino   NOVÝ
28. 6. 2012

Preco je v prvom priklade operator OR pouzity 2x za sebou? ( "||" )

Zasláno z mobilního telefonu.

Přidej svůj názor

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo e-mailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Reaguješ na příspěvek:
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové názory e-mailem (pouze pro přihlášené)
Sleduj názory ke článku a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.



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