abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 01:11 | Nová verze

Byla vydána nová major verze 3.0 svobodného multiplatformního geografického informačního systému QGIS (Wikipedie). Její kódové jméno je Girona, dle názvu města, ve kterém proběhlo 15. setkání vývojářů QGISu. Přehled novinek i s náhledy a animacemi v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
včera 20:33 | Zajímavý článek

Nadace Raspberry Pi vydala sedmašedesáté číslo (pdf) anglicky psaného časopisu MagPi věnovanému Raspberry Pi a projektům postaveným na tomto jednodeskovém počítači a čtvrté číslo (pdf) časopisu pro kutily HackSpace věnovanému navíc 3D tisku, pájení, řezání nebo i elektronice a IoT.

Ladislav Hagara | Komentářů: 0
včera 18:33 | Komunita

Morevna Project, který stojí za řadou svobodného softwaru pro animátory (např. Synfig Studio, RenderChan nebo Papagayo-NG) a svobodnými (CC-BY-SA) animovanými filmy/komiksy Morevna (3. díl) a Pepper&Carrot: The Potion Contest (6. díl), sbírá do 1. března příspěvky na 4. díl svého animovaného filmu Morevna. Mezi odměnami přispěvatelům lze najít např. i videokurzy animace v Synfigu či Blenderu.

xHire | Komentářů: 0
včera 12:22 | Bezpečnostní upozornění

Ve středu vydaná "npm@next" verze 5.7.0 správce balíčků pro JavaScript npm (Wikipedie, Node Package Manager) přinesla řadě uživatelů Linuxu nečekanou nepříjemnost. V závislosti na způsobu instalace a ve spojení s příkazem sudo mohlo dojít ke změně vlastníka u systémových souborů, také například /. Chyba je opravena v před několika hodinami vydané verzi npm 5.7.1 [reddit].

Ladislav Hagara | Komentářů: 8
včera 10:00 | Nová verze

Byla vydána verze 10.5 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností v příspěvku na blogu. Zdůraznit lze integrovanou podporu Let's Encrypt.

Ladislav Hagara | Komentářů: 0
22.2. 12:33 | Komunita

Příspěvek na blogu Signalu (Wikipedie) informuje o založení neziskové nadace Signal Foundation, jež bude zastřešovat další vývoj tohoto svobodného bezpečného komunikátoru běžícího také na Linuxu (Signal Desktop). Brian Acton, spoluzakladatel WhatsAppu, věnoval nadaci 50 milionů dolarů [Hacker News].

Ladislav Hagara | Komentářů: 1
22.2. 05:55 | Zajímavý článek

Článek na Fedora Magazine krátce představuje programovací jazyk Rust a několik zajímavých v Rustu naprogramovaných terminálových aplikací. Jedná se o alternativu k příkazu grep ripgrep, moderní barevnou alternativu k příkazu ls exa, příkazem cloc inspirovaný tokei a zvířátko v terminálu ternimal.

Ladislav Hagara | Komentářů: 0
21.2. 23:55 | Zajímavý projekt

Byl spuštěn Humble Classics Return Bundle. Za vlastní cenu lze koupit hry Broken Sword 5 - The Serpent's Curse, Shadowrun Returns a Shadowrun: Dragonfall - Director's Cut. Při nadprůměrné platbě (aktuálně 8,48 $) také Shadowrun: Hong Kong - Extended Edition, Wasteland 2: Director's Cut - Standard Edition, Age of Wonders III a Xenonauts. Při platbě 15 $ a více lze získat navíc Torment: Tides of Numenera a Dreamfall Chapters: The Final Cut Edition.

Ladislav Hagara | Komentářů: 0
21.2. 00:11 | Bezpečnostní upozornění

Vývojáři linuxové distribuce Mageia na svém blogu upozorňují na narušení bezpečnosti Mageia Identity. Narušitel získal přístup k LDAP databázi a zveřejnil jména uživatelů, jejich emailové adresy a haše hesel. Hesla uživatelů byla resetována.

Ladislav Hagara | Komentářů: 3
20.2. 21:55 | Nová verze

Byla vydána verze 2.0.0 nástroje pro záznam a sdílení terminálových sezení asciinema (GitHub). Z novinek je nutno upozornit na nový zpětně nekompatibilní formát záznamu asciicast v2. S novým formátem si poradí nové verze asciinema-playeru a asciinema-serveru [Hacker News].

Ladislav Hagara | Komentářů: 0
Který webový vyhledávač používáte nejčastěji?
 (2%)
 (28%)
 (62%)
 (3%)
 (3%)
 (0%)
 (1%)
 (1%)
Celkem 439 hlasů
 Komentářů: 35, poslední 21.2. 19:51
    Rozcestník

    Dotaz: Problém v C

    7.9.2009 22:02 jirka36 | skóre: 2
    Problém v C
    Přečteno: 936×

    dobrý den, potřeboval bych poradit algorytmus na nahrazení více mezer pouze jednou...tzn. kdyz na vstup zadam: ahoj      jak      se   vede. tak aby to vypsalo ahoj jak se vede

    Odpovědi

    7.9.2009 22:23 dad
    Rozbalit Rozbalit vše Re: Problém v C

    man strtok

    7.9.2009 22:27 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
    Rozbalit Rozbalit vše Re: Problém v C
    algorytmus
    Začíná to pěkně ;-).
    nahrazení více mezer
    Co třeba číst znak po znaku a pokud předchozí i současný znak jsou oba mezera, tak nevypsat nic a jinak vypsat ten současný?
    I am always ready to learn although I do not always like to be taught. (W. Churchill)
    7.9.2009 22:35 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    Domácí úkol? :)
    #define DELKARETEZCE 20
    
    void StripSpaces(char * retezec);
    
    int main()
    {
     char * retezec;
     retezec=(char *)malloc(DELKARETEZCE * sizeof(retezec);
     scanf(%s,retezec);
     StripSpaces(retezec);
     return 0;
    }
    
    void StripSpaces(char * retezec)
    {
     char * buffer;
     char PredchoziZnak = 'a';
     int i = 0;
     buffer = (char *)malloc(DELKARETEZCE * sizeof(buffer);
     for(i = 0; i < DELKARETEZCE; i++)
     {
      if(PredchoziZnak != ' ') buffer[0] = retezec[0];
      PredchoziZnak = retezec[0];
     }
    }
    
    Nic jednodussiho me nenapadlo...
    7.9.2009 22:36 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    A chyběj mi tam free(), už je moc pozdě.
    7.9.2009 22:43 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    #define DELKARETEZCE 20
    
    void StripSpaces(char * retezec);
    
    int main()
    {
     char * retezec;
     retezec=(char *)malloc(DELKARETEZCE * sizeof(retezec);
     scanf(%s,retezec);
     StripSpaces(retezec);
     free(retezec);
     return 0;
    }
    
    void StripSpaces(char * retezec)
    {
     char * buffer;
     char PredchoziZnak = 'a';
     int i = 0;
     buffer = (char *)malloc(DELKARETEZCE * sizeof(buffer);
     for(i = 0; i < DELKARETEZCE; i++)
     {
      if(PredchoziZnak != ' ' && buffer[i] != ' ') buffer[i] = retezec[i];
      PredchoziZnak = retezec[i];
     }
     strcpy(retezec,buffer);
     free(buffer);
    }
    
    7.9.2009 22:46 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
    Rozbalit Rozbalit vše Re: Problém v C
    StripSpaces(retezec);
    free(retezec);
    
    A taky by nebylo na škodu tu krásu (myslim, ten řetězec bez násobných mezer) vypsat :-D. Ale to nechme laskavému čtenáři k vyřešení.
    I am always ready to learn although I do not always like to be taught. (W. Churchill)
    7.9.2009 22:55 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
    Rozbalit Rozbalit vše Re: Problém v C
    Trochu zbytecna cela ta funkce na odstranovani mezer, kdyz %s ignoruje mezery :-D
    Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
    7.9.2009 23:00 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    Rejpalové si nahradí scanf() gets() :-D.
    8.9.2009 09:11 volca
    Rozbalit Rozbalit vše Re: Problém v C

    Tohle by nefungovalo... Je potreba mit druhej citac na ten cilovej buffer.

    #define DELKARETEZCE 20
    
    void StripSpaces(char * retezec);
    
    int main()
    {
     char * retezec;
     retezec=(char *)malloc(DELKARETEZCE * sizeof(retezec);
     scanf(%s,retezec);
     StripSpaces(retezec);
     free(retezec);
     return 0;
    }
    
    void StripSpaces(char * retezec)
    {
     char * buffer;
     char PredchoziZnak = 'a';
     int i = 0; 
     int j = 0;
     buffer = (char *)malloc(DELKARETEZCE * sizeof(buffer);
     for(i = 0; i < DELKARETEZCE; i++)
     {
      if(PredchoziZnak != ' ' && buffer[i] != ' ') buffer[j++] = retezec[i];
      PredchoziZnak = retezec[i];
     }
     strcpy(retezec,buffer);
     free(buffer);
    }
    
    e.lisak avatar 8.9.2009 06:52 e.lisak | skóre: 23
    Rozbalit Rozbalit vše Re: Problém v C
    while, strstr, strcpy + nejake ty zavorky a par pismenek okolo
    8.9.2009 08:27 R
    Rozbalit Rozbalit vše Re: Problém v C
    Bez strcpy(), malloc() a free():
    #include <stdio.h>
    #include <string.h>
    
    char *strip_spaces(char *s) {
        int i, pos = 0;
        for (i = 0; i < strlen(s); i++) {
            s[pos] = s[i];
            if (s[i] != ' ' | (s[i] == ' ' && (i < 1 || s[i-1] != ' ')))
                pos++;
        }
        s[pos] = 0;
        return s;
    }
    
    int main(void) {
        char *s = strdup(" toto   je retazec  ");
        printf("'%s'\n", strip_spaces(s));
    }
    
    8.9.2009 08:58 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Nikdy nemodifikujte vstupní argument, zvlášť když se tváříte, že vracíte nějakou návratovou hodnotu.
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.9.2009 10:52 R
    Rozbalit Rozbalit vše Re: Problém v C
    sprintf() tiez meni argument a svet sa nezrutil. Namiesto "char *" si tam mozes dat "int" a na koniec "return pos" namiesto "return s". Vsetko zalezi od toho, na co ma ta funkcia sluzit.

    Akurat je vhodne napisat do komentara, ze to modifikuje s (keby si to niekto nahodou v tych 8 riadkoch nevsimol).
    8.9.2009 10:59 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    sprintf() tiez meni argument a svet sa nezrutil.
    Funkce sprintf má jasně dáno, že do toho argumentu bude zapisovat, Váš příklad je zavádějící k printf("`%s' -> `%s'\n", s, strip_spaces(s)), ale ouha.
    Akurat je vhodne napisat do komentara, ze to modifikuje s (keby si to niekto nahodou v tych 8 riadkoch nevsimol).

    To je určitě vhodné, ba přímo nutné. A taky je jedna věta v lidském jazyce kratší a srozumitelnější, než 8 řádek v C, které nemusí být navíc vždy k dispozici.
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.9.2009 11:12 R
    Rozbalit Rozbalit vše Re: Problém v C
    Ten moj kod ma jeden vykonnostny problem: v kazdom precohode cyklom sa robi znovu strlen(), pretoze retazec sa modifikuje. Je to potom pomalsie ako kod od rhodosa. Ked sa vsak strlen() vyberie pred cyklus, dost sa to zrychli a je to potom rychlejsie.

    Maly benchmark (10 000 000 prechodov):

    O0:

    ja: 12.922s, po oprave: 6.632s

    rhodos: 7.587s

    O1:

    ja: 26.682s, po oprave: 3.870s

    rhodos: 12.938s

    (dost divna optimalizacia!)

    O2:

    ja: 9.498s, po oprave: 2.743s (!!)

    rhodos: 7.397s
    8.9.2009 11:52 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Jelikož bych k těm měřením odhadoval rozptyl tak 1s, tak druhé a třetí nevypovídají proti sobě nic.
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.9.2009 13:06 R
    Rozbalit Rozbalit vše Re: Problém v C
    Co druhe a tretie nevypoveda nic?

    Inak ten rozptyl je "trochu" lepsi ako 1s:
    $ for i in `seq 1 10`; do time ./a.out; done
    
    real    0m2.720s
    user    0m2.572s
    sys     0m0.024s
    
    real    0m2.678s
    user    0m2.600s
    sys     0m0.000s
    
    real    0m2.692s
    user    0m2.612s
    sys     0m0.008s
    
    real    0m2.691s
    user    0m2.604s
    sys     0m0.008s
    
    real    0m2.675s
    user    0m2.600s
    sys     0m0.016s
    
    real    0m2.697s
    user    0m2.608s
    sys     0m0.004s
    
    real    0m2.685s
    user    0m2.600s
    sys     0m0.012s
    
    real    0m2.692s
    user    0m2.596s
    sys     0m0.004s
    
    real    0m2.690s
    user    0m2.596s
    sys     0m0.008s
    
    real    0m2.688s
    user    0m2.600s
    sys     0m0.000s
    
    
    8.9.2009 15:43 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Zkuste to na vzorku 2000 spuštění, pokud možno ne hned po sobě, a dejte výsledky do grafu, a pak uvidíme.
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.9.2009 15:59 R
    Rozbalit Rozbalit vše Re: Problém v C
    A vysledkom ma byt co? Bude tam 1900 cisiel okolo 2.6-2.7s a zvysok nejake nezmysly (kedze na PC cely den robim).
    8.9.2009 20:02 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Statistika je o těch nesmyslech.
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.9.2009 23:38 R
    Rozbalit Rozbalit vše Re: Problém v C
    Preco sem pleties statistiku? Ja nemeram priemernu dobu vykonania programu na bezne zatazenom systeme, ale dobu vykonania programu na nezatazenom systeme.
    9.9.2009 09:43 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    priemernu
    Protože ji sem pleteš ty? :-)
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.9.2009 09:05 Sten Fil | skóre: 4
    Rozbalit Rozbalit vše Re: Problém v C

    void vyhozeni_mezer (const char* input, char* output)
    {
        int output_size = 0;

        for (int i = 0; i < strlen (input); i++)
        {
            if (input[i] != ' ')
            {
                output[output_size] = input[i];
                output_size++;
            }
            else if ((output_size == 0) ||
                (output[output_size] != ' '))
            {
                output[output_size] = input[i];
                output_size++;
            }
        }

        output[output_size] = 0;

        return;
    }

    8.9.2009 09:11 Sten Fil | skóre: 4
    Rozbalit Rozbalit vše Re: Problém v C

    oprava:

    else if ((output_size == 0) ||
             (output[output_size - 1] != ' '))

    8.9.2009 11:28 Sten Fil | skóre: 4
    Rozbalit Rozbalit vše Re: Problém v C

    Pro replace by melo stacit poslat do input i output stejny ukazatel.

    Josef Kufner avatar 9.9.2009 00:41 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Problém v C
    Co třeba něco jako toto: ?
    
    char *strdup_no_dup_space(const char *src)
    {
      char *dest = (char *) malloc(strlen(src));
      char *p_src = src, *p_dest = dest;
    
      if (dest && (*p_dest = *p_src++)) {
        while ((*p_dest == ' ' && *p_src == ' ') || (*(++p_dest) = *p_src))
          p_src++;
      }
      return dest;
    }
    
    
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 12:10 dark
    Rozbalit Rozbalit vše Re: Problém v C

    A co null terminator?

    Josef Kufner avatar 9.9.2009 13:38 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Problém v C
    Kopírování probíhá před kontrolou, takže se zkopíruje zakončovací nula a pak to teprve skončí.
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 13:55 dark
    Rozbalit Rozbalit vše Re: Problém v C

    Nebudu napínat, pro chudinku nulu nemusí být místo :)

    Josef Kufner avatar 9.9.2009 14:06 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Problém v C
    Aaaaa… taková trapná chyba… tak znovu a lépe. A jako bonus tomu přidáme kontrolu na NULL na vstupu aby to nepadalo na hubu a odstraníme jeden warning.
    char *strdup_no_dup_space(const char *src)
    {
      if (src == NULL)
        return NULL;
    
      char *dest = (char *) malloc(strlen(src) + 1);
      char *p_src = src;
      const char *p_dest = dest;
    
      if (dest && (*p_dest = *p_src++)) {
        while ((*p_dest == ' ' && *p_src == ' ') || (*(++p_dest) = *p_src))
          p_src++;
      }
      return dest;
    }
    Teď už by to mělo být dokonalé :-D
    Hello world ! Segmentation fault (core dumped)
    Josef Kufner avatar 9.9.2009 14:08 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Problém v C
    Jsem já to ale kus vola.
    char *strdup_no_dup_space(const char *src)
    {
      if (src == NULL)
        return NULL;
    
      char *dest = (char *) malloc(strlen(src) + 1);
      const char *p_src = src;
      char *p_dest = dest;
    
      if (dest && (*p_dest = *p_src++)) {
        while ((*p_dest == ' ' && *p_src == ' ') || (*(++p_dest) = *p_src))
          p_src++;
      }
      return dest;
    }
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 21:13 merlin111 | skóre: 15
    Rozbalit Rozbalit vše Re: Problém v C
    Může někdy nastat že '\0' se nerovná 0 ?
    Každá ulice je slepá jen do té doby, než si opatříš buldozer.
    Josef Kufner avatar 9.9.2009 22:16 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Problém v C
    Ne.

    Tuším že důvod se jmenuje „implicitní typové konverze“ nebo tak nějak.
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 22:45 merlin111 | skóre: 15
    Rozbalit Rozbalit vše Re: Problém v C
    Já vím, ale mě spíš šlo o to jestli fakt neexistují nějaké ne ASCII systémy kde platí třeba '\0' = 5. Tedy otázka absolutní /úchylné :-)/ přenositelnosti.
    Každá ulice je slepá jen do té doby, než si opatříš buldozer.
    Josef Kufner avatar 9.9.2009 23:52 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Problém v C
    Pokud napíšeš '\5', tak to znamená byte o hodnotě pět – to lomítko číslo přímo udává hodnotu. Pokud napíšeš '5', tak to závisí na tom, jakou ascii tabulku systém používá.
    Hello world ! Segmentation fault (core dumped)
    10.9.2009 03:52 dark
    Rozbalit Rozbalit vše Re: Problém v C

    Někoho by mohlo zaskočit třeba toto:

      int isEqual1 = (int)('\377' == 255);
      int isEqual2 = ((int)'\377' == 255);
      int isEqual3 = ((unsigned int)'\377' == (unsigned int)255);
      int isEqual4 = ((unsigned int)((unsigned char)'\377') == (unsigned int)255);
    
      printf("isEqual1==%d\n", isEqual1);
      printf("isEqual2==%d\n", isEqual2);
      printf("isEqual3==%d\n", isEqual3);
      printf("isEqual4==%d\n", isEqual4);
    
    
    9.9.2009 23:52 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    Proč v tom případě nepoužít rovnou '\0', to je jako kdybyste používal číslo pro znak nového řádku, třeba. Ještě jsem v žádném C kódu neviděl že by někdo používal neescapovanou variantu, takže by mě to také docela zajímalo. Jestli to správně chápu, tak pokud odescapujete normální číslo tak by to mělo nahradit číslem znaku v osmičkové soustavě...
    Josef Kufner avatar 10.9.2009 21:50 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Problém v C
    To je jen otázka čitelnosti. Jinak je to jedno a překladač to nějak pořeší.
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 13:16 R
    Rozbalit Rozbalit vše Re: Problém v C
    Sice to funguje, ale ten kod je taky humus, ze sa mi ani nechce zistovat, ci je to naozaj dobre.
    Josef Kufner avatar 9.9.2009 13:29 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Problém v C
    Dík za info, psal jsem to jen tak z hlavy a nechtělo se mi to testovat ;-)
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 13:34 dark
    Rozbalit Rozbalit vše Re: Problém v C

    Dobře to není, aneb programátorská hádanka číslo 4 :)

    Josef Kufner avatar 9.9.2009 13:47 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Problém v C
    Co se ti na tom nelíbí? Nekontroluje to zda v src nejsou blbosti, ale jinak…
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 15:37 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Jeden z mých tipů by směřoval na prioritu operátorů.
    In Ada the typical infinite loop would normally be terminated by detonation.
    9.9.2009 17:49 dark
    Rozbalit Rozbalit vše Re: Problém v C

    Už je to vyřešené. Operátory jsou právě v pohodě, takto se v C běžně píše, a připadá mi to i přehledné. Horší to bylo s alokací paměti. Občas se stane, že někdo zapomene připočítat NULL terminator (proto mám osobně radši nějakou knihovnu, která obsahuje String, a postará se o to).

    Ten původní kód by mu ve Visual Studiu v debug režimu asi vyhodil error (mám pocit, že free() detekuje přepis hned za alokovaným prostorem), v linuxu by si stěžoval valgrind (popřípadě přímo glibc, pokud by měl string ideální velikost).

    10.9.2009 10:29 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Problém v C
    Jestli se zase někdy nachomýtnu v diskuzi o tom, jak je psaní v C, žonglování s pointery, ukončovacími nulami a dalšími lahůdkami čirý masochismus, tak určitě přihodím link na tuto diskuzi. :-D Tak jednoduchý dotaz a 40 odpovědí, z nichž většina se zaobírá opravováním zapeklitých chyb zaslaných řešení. :-D

    (Za prvé: brát s rezervou a s humorem. Za druhé: mám Céčko rád, takže nic proti němu. Za třetí: chybičky se samozřejmě občas vloudí, ale tohle už mi přišlo vážně legrační.)
    10.9.2009 10:48 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Problém v C
    Jestli se zase někdy nachomýtnu v diskuzi o tom, jak je psaní v C, žonglování s pointery, ukončovacími nulami a dalšími lahůdkami čirý masochismus
    O tom není třeba diskutovat, to je zřejmé :-D

    (A předpokládám, že též bylo zřejmé, že tuhle poznámku si neodpustím.)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    10.9.2009 12:05 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Problém v C
    Se spíš divím, že ses neozval už dřív a musel jsem to tu napsat já. :-D
    10.9.2009 11:06 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Jojo, taky bych to tak viděl.
    In Ada the typical infinite loop would normally be terminated by detonation.
    10.9.2009 14:15 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    Na druhou stranu je to krásná ukázka toho, jak se dá taková jednoduchá funkce napsat několika způsoby, na každý způsob bude mít jiný vliv optimalizace a v každém úplně jiná chyba. Kdybych ten svůj kód nepsal přímo do komentáře, tak bych v tom možná chybu neudělal, tipuju že u ostatních je to podobně :-D.
    10.9.2009 14:56 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Problém v C
    Ta funkce se dá napsat miliardou způsobů i v Perlu, ale nehrozí tam nějaké odstřelování paměti, ukončovací byte a podobně. :-D Zkrátka tohle je nádherná ukázka toho, jak se dá v Céčku krásně žonglovat se všelijakýma fintičkama, ale i zkušený člověk si při tom prostě může nabít držku. Vzpomínám si, jak jsem v prváku na konci semestru psal v Céčku domácí úkol—asi na 200-300 řádků "alignátor" textu (doprava, doleva, na střed a do zarovnaného bloku na zadanou šířku řádky, se zalamováním a já už nevím čím). Nabíjel jsem si hubu na stejných věcech jako diskutující tady a odnesl jsem si z toho jednu z nejcennějších zkušeností ve svém dosavadním informatickém výcviku. :-)

    Určitě bys ji udělal, maximálně bys ji tak mnohem déle hledal, protože "víc očí víc vidí". :-P (vtip... nebo ne? :-))
    10.9.2009 15:22 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Sluší se dodat, že v C++ by to dopadlo podobně (s tou pamětí).
    In Ada the typical infinite loop would normally be terminated by detonation.
    11.9.2009 01:31 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: Problém v C

    Opravdu?

    std::string str_no_dup_space(const std::string& str)
    {
            std::string ret;
    
            std::string::const_iterator it = str.begin();
            bool space = false;
            for(; it != str.end(); ++it) {
                    if( *it == ' ' ) {
                            if( !space )
                                    ret += ' ';
    
                            space = true;
                    } else {
                            ret += *it;
                            space = false;
                    }
            }
    
            return ret;
    }
    11.9.2009 07:04 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    To je sice pěkné, ale tím jen maskujete podstatu věci. Pokud půjdete do něčeho složitějšího, tak tam někde nějaké "new" použijete.
    In Ada the typical infinite loop would normally be terminated by detonation.
    10.9.2009 15:30 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    Přesně takovýhle úkol jsem dělal v půlce druhého semestru. Původně jsem sice měl rozdělaný archivační program používající Huffmanovo kódování, ale nějak jsem to podcenil a když mi zbývalo do deadline 3 hodiny, tak jsem si vybral jiný projekt(naštěstí to nebylo pevně vybrané). Samotné napsání netrvalo moc dlouho, ale těch chyb tam :-D. Nakonec jsem za to dostal plný počet bodů ale tim kódem bych se nikde nechlubil. :-D
    10.9.2009 15:33 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Diplomka? :P
    In Ada the typical infinite loop would normally be terminated by detonation.
    10.9.2009 15:37 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    Kdepak, diplomku budu mít za dlouho :-D
    10.9.2009 18:58 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Problém v C
    3 hodiny? To seš dobrej, já to dělal celej víkend. :-D Na svou obranu musím říct, že ta chyba s ukončovacím bytem byla fakt rafinovaným a zapeklitým způsobem schovaná. :-D

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.