{"id":22859889,"url":"https://github.com/harmim/vut-izp-proj1","last_synced_at":"2025-06-28T13:40:34.856Z","repository":{"id":74891450,"uuid":"72385005","full_name":"harmim/vut-izp-proj1","owner":"harmim","description":"Základy programování - Projekt 1 - Práce s textem","archived":false,"fork":false,"pushed_at":"2017-02-17T02:43:43.000Z","size":23,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-06T12:48:11.413Z","etag":null,"topics":["c","izp","project","text-processing","vut"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/harmim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-31T00:44:01.000Z","updated_at":"2021-11-19T10:55:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"f95a0db7-a179-4096-81bb-2e80ee357622","html_url":"https://github.com/harmim/vut-izp-proj1","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harmim%2Fvut-izp-proj1","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harmim%2Fvut-izp-proj1/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harmim%2Fvut-izp-proj1/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harmim%2Fvut-izp-proj1/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/harmim","download_url":"https://codeload.github.com/harmim/vut-izp-proj1/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246436770,"owners_count":20777084,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","izp","project","text-processing","vut"],"created_at":"2024-12-13T09:08:23.123Z","updated_at":"2025-03-31T08:22:29.190Z","avatar_url":"https://github.com/harmim.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# izp-proj1\nProjekt 1 - Práce s textem\n\n## Obhajoba Necasova\nhttp://www.fit.vutbr.cz/~inecasova/ob1.zip\n\n### Popis projektu\nCílem projektu je vytvořit program, který buď binární data formátuje do textové podoby nebo textovou podobu dat převádí do binární podoby. V případě převodu binárních dat na text bude výstupní formát obsahovat adresy vstupních bajtů, hexadecimální kódování a textovou reprezentaci obsahu. V případě převodu textu do binární podoby je na vstupu očekáváné hexadecimální kódování bajtů.\n\n### Detailní specifikace\nProgram implementujte ve zdrojovém souboru proj1.c. Vstupní binární data budou čtena ze standardního vstupu (stdin), výstup bude tisknut na standardní výstup (stdout). Chování programu lze upřesnit jeho argumenty (viz spuštění programu).\n\n## Překlad a odevzdání zdrojového souboru\nOdevzdání: Odevzdejte zdrojový soubor proj1.c prostřednictvím informačního systému.\n\nPřeklad: Program překládejte s následujícími argumenty\n```sh\n$ gcc -std=c99 -Wall -Wextra -Werror proj1.c -o proj1\n```\n\n## Syntax spuštění\nProgram se spouští v následující podobě: (./proj1 značí umístění a název programu):\n```sh\n./proj1 [-s M] [-n N]\n```\nnebo\n```sh\n./proj1 -x\n```\nnebo\n```sh\n./proj1 -S N\n```\nnebo\n```sh\n./proj1 -r\n```\nPokud je program spuštěn s libovolnými dalšími neprázdnými argumenty, vypíše svůj krátký popis (nápovědu) a úspěšně skončí. V opačném případě provádí čtení a zpracování dat ze vstupu.\n\n## Implementační detaily\n### Převod binárního vstupu na text\nPokud je program spuštěn bez argumentů, s argumentem -x (hexa-print) nebo s argumentem -S (strings), převádí vstupní binární data do textové podoby. Argument programu pak definuje výstupní formát:\n\n#### Spuštění bez povinných argumentů\nVýstupní formát se skládá z posloupnosti řádků, kde každý řádek popisuje jednu sérii 16 bajtů ze vstupního souboru. Každý řádek odpovídá formátu:\n\n`AAAAAAAA  xx xx xx xx xx xx xx xx  xx xx xx xx xx xx xx xx  |bbbbbbbbbbbbbbbb|`\nkde:\n- _AAAAAAAA_ je adresa/pozice prvního bajtu dané série ve vstupním souboru. Jedná se o hexadecimální číslo z cifer 0-9a-f zarovnané na 8 číslic, doplněné nulami zleva. Adresa prvního bajtu je 00000000.\n- _xx_ vyjadřuje hexadecimální hodnotu daného bajtu. Pozice xx na řádku odpovídá pozici bajtu v dané sérii.\n- _b_ je tisknutelná podoba daného bajtu. V případě, že daný znak není tisknutelný, vytiskne se znak . (tečka). Nechť tisknutelný znak je ten, který je v ASCII a je definován pomocí funkce isprint.\n\nV případě, že série obsahuje méně než 16 bajtů, namísto chybějících cifer xx a odpovídajících b se vytiskne výplň pomocí mezer.\n\nTato varianta spuštění může mít upřesňující argumenty -s M a/nebo -n N.\n\n- Přepínač -s (skip) definuje, na které adrese má výpis začínat (tedy kolik znaků ze vstupního souboru se má ignorovat). Argument M je nezáporné číslo. V případě, že M je větší než velikost vstupního souboru, nevypíše program nic.\n- Přepínač -n (number-of-chars) definuje maximální délku vstupních bajtů ke zpracování. N je kladné číslo.\n\n#### Spuštění s argumentem -x\nVeškerá vstupní data budou převedena do hexadecimální podoby na jeden řádek. Každému vstupnímu bajtu odpovídá dvouciferné hexadecimální číslo z číslic 0-9a-f.\n\n#### Spuštění s argumentem -S\nProgram bude tisknout pouze takové posloupnosti v binárním vstupu, které vypadají jako textový řetězec. Každý řetězec je vytištěn na jeden řádek. Nechť řetězec je nejdelší posloupnost tisknutelných a prázdných znaků (tj. mezera nebo tabulátor, viz isblank), jejíž délka je větší nebo rovna N znaků. N je druhý argument programu a udává celé číslo v intervalu 0 \u003c N \u003c 200.\n\n### Převod textového vstupu na binární\nPokud je program spuštěn s argumentem -r (reverse), očekává na vstupu sekvenci hexadecimálních číslic a tyto převádí do binárního formátu. Bílé znaky na vstupu program ignoruje. Každá dvojice vyjadřuje hodnotu jednoho bajtu (první číslice má větší váhu). V případě, že je počet číslic lichý, poslední čislice vyjadřuje hodnotu bajtu v rozsahu 0-15.\n\n## Omezení v projektu\nJe zakázané použít následující funkce:\n- všechna volání hlavičkového souboru string.h - hlavičkový soubor je v projektu zakázaný,\n- volání z rodiny malloc a free - práce s dynamickou pamětí není v tomto projektu zapotřebí,\n- volání z rodiny fopen, fclose, fscanf, ... - práce se soubory (dočasnými) není v tomto projektu žádoucí,\n- volání scanf a jeho varianty - cílem projektu je převody naprogramovat, nikoliv je používat.\n- volání atoi - neověřuje správnost vstupních dat.\n\n## Neočekávané chování\nNa chyby za běhu programu reagujte obvyklým způsobem: Na neočekávaná vstupní data, formát vstupních dat nebo chyby při volání funkcí reagujte přerušením programu se stručným a výstižným chybovým hlášením na příslušný výstup a odpovídajícím návratovým kódem. Hlášení budou v kódování ASCII česky nebo anglicky.\n\n## Příklady vstupů a výstupů\n```sh\n$ echo \"Hello, world! Ahoj svete!\" | ./proj1\n00000000  48 65 6c 6c 6f 2c 20 77  6f 72 6c 64 21 20 41 68  |Hello, world! Ah|\n00000010  6f 6a 20 73 76 65 74 65  21 0a                    |oj svete!.      |\n```\n```sh\n$ echo \"Hello, world! Ahoj svete!\" | ./proj1 -s 14 -n 5\n0000000e  41 68 6f 6a 20                                    |Ahoj            |\n```\n```sh\n$ echo \"Hello\" | ./proj1 -x\n48656c6c6f0a\n```\n```sh\n$ printf 'Hello, world!\\0Ahoj svete!\\n\\0AP\\nABCD\\n' | ./proj1 -S 3\nHello, world!\nAhoj svete!\nABCD\n```\n```sh\n$ echo \"48 65 6c6c6f a\" | ./proj1 -r\nHello\n```\n\n## Hodnocení\nNa výsledném hodnocení mají hlavní vliv následující faktory:\n- přeložitelnost zdrojového souboru,\n- formát zdrojového souboru (členění, zarovnání, komentáře, vhodně zvolené identifikátory),\n- dekompozice problému na podproblémy (vhodné funkce, vhodná délka funkcí a parametry funkcí),\n- správná volba datových typů, případně tvorba nových typů,\n- správná funkcionalita převodu dat a\n- ošetření chybových stavů.\n\n## Poznámky\nTextový soubor je takový, který je buď prázdný nebo obsahuje tisknutelné a bílé znaky a jeho poslední znak je znak konce řádku.\nPři vypracování se můžete inspirovat nástroji hexdump(1) s parametrem -C a strings(1).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharmim%2Fvut-izp-proj1","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharmim%2Fvut-izp-proj1","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharmim%2Fvut-izp-proj1/lists"}