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í
×

včera 20:00 | Nová verze

Byla vydána (cgit) verze 0.99 svobodného nelineárního video editoru Pitivi. Jedná se o release candidate verze 1.0. Přehled úkolů, které je nutno ještě dodělat, na Phabricatoru. Pitivi je k dispozici také ve formátu Flatpak.

Ladislav Hagara | Komentářů: 0
včera 17:11 | Komunita

Microsoft s Canonicalem představili linuxové jádro Ubuntu optimalizováno pro cloudové služby Microsoft Azure (linux-azure). Jako výchozí je toto menší a výkonnější jádro použito již v Ubuntu Cloud Images for Ubuntu 16.04 LTS. Canonical zatím nenabízí patchování tohoto jádra za běhu systému (Canonical Livepatch Service).

Ladislav Hagara | Komentářů: 1
včera 14:55 | Komunita

Facebook oznámil, že přelicencuje open source projekty React, Jest, Flow a Immutable.js ze své vlastní kontroverzní licence BSD+Patents na licenci MIT. Stane se tak tento týden s vydáním Reactu 16. Jedním z důvodů přelicencování bylo oznámení nadace Apache, že software pod Facebook BSD+Patents licencí nesmí být součástí produktů pod touto nadací [Hacker News].

Ladislav Hagara | Komentářů: 0
23.9. 21:44 | Nová verze

Po půl roce od vydání verze 9.0 byla vydána verze 10.0 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 a na YouTube.

Ladislav Hagara | Komentářů: 0
22.9. 18:11 | Nová verze

Společnost Oracle oficiálně oznámila vydání Java SE 9 (JDK 9), Java Platform Enterprise Edition 8 (Java EE 8) a Java EE 8 Software Development Kit (SDK). Java SE 9 přináší více než 150 nových vlastností.

Ladislav Hagara | Komentářů: 0
22.9. 12:11 | Komunita

Na Humble Bundle lze získat hororovou počítačovou hru Outlast (Wikipedie) běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 2
22.9. 10:33 | Humor

Mozilla.cz upozorňuje na Knihu Mozilly (Wikipedie), tj. velikonoční vajíčko ve Firefoxu. Zobrazit jej lze zadáním about:mozilla do adresního řádku. Aktuální verze Firefoxu obsahuje proroctví 15:1 "Dvojčata Mamonu se rozhádala a jejich souboje uvrhly svět do nové tmy. Zvířeti se ale tma hnusila. A tak se stalo mrštnější a silnější, šlo vpřed a jeho počty rostly. A zvíře přineslo oheň a světlo do tmy". Firefox 57 bude obsahovat proroctví 11:14. To je zatím jenom v angličtině. Pomoci lze s překladem do češtiny.

Ladislav Hagara | Komentářů: 10
22.9. 01:22 | Zajímavý projekt
Před měsícem byla spuštěna kampaň na podporu chytrého telefonu Librem 5, jenž by měl respektovat bezpečnost, svobodu a soukromí uživatelů. Cílem kampaně je vybrat alespoň milion a půl dolarů. Aktuálně je vybráno přes 600 000 dolarů, tj. 40 %. Kampaň poběží ještě další měsíc. Podporu projektu oznámilo KDE i GNOME.
Ladislav Hagara | Komentářů: 44
22.9. 00:55 | Komunita

Agentura DISA (Defense Information Systems Agency) publikovala (pdf) Ubuntu 16.04 Security Technical Implementation Guide (STIG) (zip), tj. doporučené bezpečnostní nastavení Ubuntu 16.04. Ubuntu se tak dostalo mezi unixové operační systémy a linuxové distribuce AIX, HP-UX, Oracle Linux, Red Hat a Solaris [reddit].

Ladislav Hagara | Komentářů: 2
21.9. 22:55 | Bezpečnostní upozornění

CSIRT.CZ informuje, že byly vydány nové bezpečnostní aktualizace, které opravují několik zranitelných míst v Sambě. Útočník může využít zranitelnosti s cílem získání přístupu k potenciálně citlivých informací. Uživatelům a správcům je doporučeno, aby zkontrolovali bezpečnostní opatření pro CVE-2017-12150, CVE-2017-12151 a CVE-2017-12163 a provedli potřebné aktualizace.

Ladislav Hagara | Komentářů: 0
Těžíte nějakou kryptoměnu?
 (5%)
 (3%)
 (17%)
 (75%)
Celkem 564 hlasů
 Komentářů: 23, poslední včera 18:12
    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.