{"id":22606296,"url":"https://github.com/mariantaragel/setcal","last_synced_at":"2025-10-14T01:05:25.510Z","repository":{"id":88083492,"uuid":"427625621","full_name":"mariantaragel/setcal","owner":"mariantaragel","description":"Set and relation calculator","archived":false,"fork":false,"pushed_at":"2022-07-11T20:23:34.000Z","size":47,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-28T21:46:33.762Z","etag":null,"topics":["c","data-structures","project"],"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/mariantaragel.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":"2021-11-13T09:48:29.000Z","updated_at":"2022-07-11T20:24:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"41ef8385-0b7c-4844-bce6-d1760a4a3b5c","html_url":"https://github.com/mariantaragel/setcal","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mariantaragel/setcal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariantaragel%2Fsetcal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariantaragel%2Fsetcal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariantaragel%2Fsetcal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariantaragel%2Fsetcal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mariantaragel","download_url":"https://codeload.github.com/mariantaragel/setcal/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariantaragel%2Fsetcal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274152522,"owners_count":25231290,"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","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","data-structures","project"],"created_at":"2024-12-08T14:13:09.645Z","updated_at":"2025-10-14T01:05:20.464Z","avatar_url":"https://github.com/mariantaragel.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Set Calculator\n\n## Popis projektu\n\nCílem projektu je vytvořit program, který bude implementovat základní matematické operace nad množinami a binárními relacemi. Vstupem programu budou textová data reprezentující množiny a relace a zadání operací. Výsledek zpracování bude program tisknout na standardní výstup.\n\n## Detailní specifikace\n\nVstupní data budou čtena ze souboru, jehož jméno bude zadáno argumentem příkazové řádky. Program provádí operace zadané v souboru po řádcích jedním průchodem. Výsledek zpracování každého řádku program tiskne na standardní výstup (tedy počet řádků na výstupu odpovídá počtu řádků vstupního souboru).\n\n### Překlad zdrojového souboru\n\nProgram překládejte s následujícími argumenty:\n\n```sh\n$ gcc -std=c99 -Wall -Wextra -Werror setcal.c -o setcal\n```\n\n### Syntax spuštění\n\nProgram se spouští v následující podobě (./setcal značí umístění a název programu):\n\n```sh\n./setcal FILE\n``` \n\n### Formát vstupního souboru\n\n Textový soubor se skládá ze tří po sobě následujících částí:\n\n\u003col\u003e\n    \u003cli\u003eDefinice univerza - jeden řádek začínající \"U \" a pokračující mezerou oddělenými prvky\u003c/li\u003e\n    \u003cli\u003eDefinice množin a relací - jeden nebo více řádků začínající \"S \" nebo \"R \" a pokračující mezerou oddělenými prvky (řádek začínající \"S\" indikuje definici množiny, \"R\" slouží pro definici relace)\u003c/li\u003e\n    \u003cli\u003ePříkazy nad množinami a relacemi - jeden nebo více řádků začínající \"C \" a pokračující identifikátorem příkazu\u003c/li\u003e\n\u003c/ol\u003e\n\n### Univerzum\n\nPrvky univerza jsou řetězce obsahující malá a velká písmena anglické abecedy. Délka řetězce je maximálně 30 znaků. Prvky univerza nesmí obsahovat identifikátory příkazů (viz níže) a klíčová slova true a false. Všechny prvky v množinách a relacích musí patřit do univerza. Příklad:\n\n```sh\nU Apple Lemon Orange Banana Peach\n```\n\n### Množiny\n\n Každá množina je definovaná na jednom řádku mezerou oddělenými prvky z univerza. Identifikátorem množiny je číslo řádku, na kterém je množina definovaná (vzhledem k tomu, že na prvním řádku souboru je univerzum, identifikátory množin tedy začínají číslem 2). Identifikátory množin jsou použity v operacích (viz níže). Příklad definice množiny:\n\n```sh\nS Apple Banana Peach\n```\n\n ### Relace\n \n Každá relace je definována výčtem dvojic. Dvojice je ohraničená kulatými závorkami, první a druhý prvek dvojice jsou oddělené mezerou. Jednotlivé dvojice jsou oddělené mezerou. Příklad:\n \n```sh\nR (Apple Banana) (Apple Peach) (Apple Apple)\n```\n\n### Příkazy\n\nKaždý příkaz je definován na jednom řádku, začíná identifikátorem příkazu a argumenty příkazu jsou oddělené mezerou (od identifikátoru i mezi sebou). Argumenty příkazu jsou číselné identifikátory množin a relací (celá kladná čísla, číslo 1 identifikuje množinu univerza). Příklad:\n\n```sh\nC minus 1 2\n```\n\n### Příkazy nad množinami\n\nPříkaz pracuje nad množinami a jeho výsledkem je buď množina (v tom případě tiskne množinu ve stejném formátu jako se očekává ve vstupním souboru, tj. začíná \"S \" a pokračuje mezerou oddělenými prvky) nebo je výsledkem pravdivostní hodnota (v tom případě tiskne true nebo false na samostatný řádek) nebo je výsledkem přirozené číslo (které se tiskne na samostatný řádek).\n\n\u003cul\u003e\n    \u003cli\u003eempty A - tiskne true nebo false podle toho, jestli je množina definovaná na řádku A prázdná nebo neprázdná\u003c/li\u003e\n    \u003cli\u003ecard A - tiskne počet prvků v množině A (definované na řádku A)\u003c/li\u003e\n    \u003cli\u003ecomplement A - tiskne doplněk množiny A\u003c/li\u003e\n    \u003cli\u003eunion A B - tiskne sjednocení množin A a B\u003c/li\u003e\n    \u003cli\u003eintersect A B - tiskne průnik množin A a B\u003c/li\u003e\n    \u003cli\u003eminus A B - tiskne rozdíl množin A \\ B\u003c/li\u003e\n    \u003cli\u003esubseteq A B - tiskne true nebo false podle toho, jestli je množina A podmnožinou množiny B\u003c/li\u003e\n    \u003cli\u003esubset A B - tiskne true nebo false, jestli je množina A vlastní podmnožina množiny B\u003c/li\u003e\n    \u003cli\u003eequals A B - tiskne true nebo false, jestli jsou množiny rovny\u003c/li\u003e\n\u003c/ul\u003e\n\n### Příkazy nad relacemi\n\nPříkaz pracuje nad relacemi a jeho výsledkem je buď pravdivostní hodnota (tiskne true nebo false), nebo množina (tiskne množinu ve formátu jako ve vstupnímu souboru).\n\n\u003cul\u003e\n    \u003cli\u003ereflexive R - tiskne true nebo false, jestli je relace reflexivní\u003c/li\u003e\n    \u003cli\u003esymmetric R - tiskne true nebo false, jestli je relace symetrická\u003c/li\u003e\n    \u003cli\u003eantisymmetric R - tiskne true nebo false, jestli je relace antisymetrická\u003c/li\u003e\n    \u003cli\u003etransitive R - tiskne true nebo false, jestli je relace tranzitivní\u003c/li\u003e\n    \u003cli\u003efunction R - tiskne true nebo false, jestli je relace R funkcí\u003c/li\u003e\n    \u003cli\u003edomain R - tiskne definiční obor funkce R (lze aplikovat i na relace - první prvky dvojic)\u003c/li\u003e\n    \u003cli\u003ecodomain R - tiskne obor hodnot funkce R (lze aplikovat i na relace - druhé prvky dvojic)\u003c/li\u003e\n    \u003cli\u003einjective R A B - tiskne true nebo false, jestli je funkce R injektivní, A a B jsou množiny; a∈A, b∈B, (a,b)∈R\u003c/li\u003e\n    \u003cli\u003esurjective R A B - tiskne true nebo false, jestli je funkce R surjektivní, A a B jsou množiny; a∈A, b∈B, (a,b)∈R\u003c/li\u003e\n    \u003cli\u003ebijective R A B - tiskne true nebo false, jestli je funkce R bijektivní. A a B jsou množiny; a∈A, b∈B, (a,b)∈R\u003c/li\u003e\n\u003c/ul\u003e\n\n### Implementační detaily\n\n\u003cul\u003e\n    \u003cli\u003eMaximální podporovaný počet řádků je 1000\u003c/li\u003e\n    \u003cli\u003eNa pořadí prvků v množině a v relaci na výstupu nezáleží\u003c/li\u003e\n    \u003cli\u003eVšechny prvky množin a v relacích musí patřit do univerza. Pokud se prvek v množině nebo dvojice v relaci opakuje, jedná se o chybu\u003c/li\u003e\n\u003c/ul\u003e\n\n## Příklady použití\n\n```sh\n$ cat sets.txt\nU a b c x y z\nS a b c x\nS x y z\nC intersect 2 3\nC minus 2 3\n```\n\n```sh\n$ ./setcal sets.txt\nU a b c x y z\nS a b c x\nS x y z\nS x\nS a b c\n```\n\n```\n$ cat rel.txt\nU dad mom girl boy man woman\nR (dad boy) (dad girl) (mom boy) (mom girl)\nR (dad man) (boy man) (mom woman) (girl woman)\nC codomain 2\nC function 3\n```\n\n```\n$ ./setcal rel.txt\nU dad mom girl boy man woman\nR (dad boy) (dad girl) (mom boy) (mom girl)\nR (dad man) (boy man) (mom woman) (girl woman)\nS boy girl\ntrue\n```\n\n## Authors\n\n- [mariantaragel](https://github.com/mariantaragel)\n- [xtroitgeo](https://github.com/xtroitgeo)\n- [TProkop01](https://github.com/TProkop01)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmariantaragel%2Fsetcal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmariantaragel%2Fsetcal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmariantaragel%2Fsetcal/lists"}