{"id":18831522,"url":"https://github.com/kbnim/elte-fi-imperative-assignment","last_synced_at":"2026-01-24T23:30:24.890Z","repository":{"id":234118972,"uuid":"788290256","full_name":"kbnim/elte-fi-imperative-assignment","owner":"kbnim","description":"Command-line utility for reversing text. [Course: Imperative Programming]","archived":false,"fork":false,"pushed_at":"2024-05-10T10:18:22.000Z","size":8,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-30T07:08:44.011Z","etag":null,"topics":["c","c-basics","command-line-tool","file-operations","header-files","low-level-programming","memory-management"],"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/kbnim.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":"2024-04-18T06:13:59.000Z","updated_at":"2024-05-10T11:06:36.000Z","dependencies_parsed_at":"2024-05-10T13:27:53.150Z","dependency_job_id":"36341026-67bc-4e57-a3f9-10e10fa5a7ed","html_url":"https://github.com/kbnim/elte-fi-imperative-assignment","commit_stats":null,"previous_names":["kbnim/rev","kbnim/elte-fi-imperative-assignment"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kbnim%2Felte-fi-imperative-assignment","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kbnim%2Felte-fi-imperative-assignment/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kbnim%2Felte-fi-imperative-assignment/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kbnim%2Felte-fi-imperative-assignment/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kbnim","download_url":"https://codeload.github.com/kbnim/elte-fi-imperative-assignment/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239768925,"owners_count":19693760,"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","c-basics","command-line-tool","file-operations","header-files","low-level-programming","memory-management"],"created_at":"2024-11-08T01:55:00.876Z","updated_at":"2026-01-24T23:30:24.732Z","avatar_url":"https://github.com/kbnim.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Imperative Programming: `rev` utility\nCommand-line utility for reversing text. [Course: Imperative Programming]\n\n## Description\n\n_(The task was written in Hungarian. Translation coming soon.)_\n\n### 1. A _reverse_ parancs megvalósítása\n\nEbben a feladatban megvalósítjuk a `reverse` parancsot: az argumentumként kapott fájlok tartalmát, vagy a konzolról beolvasott sorokat sorszámozva vagy sorszámozás nélkül, fordított sorrendben, és a sorokat megfordítva (tükrözve) írjuk ki a standard outputra. Pl. ha a `test.txt` tartalma a következő, és sorszámozást is kérünk:\n```\nalma\nbarack\nszilva\n```\n... akkor a `reverse` parancs eredménye a következő:\n```\n3 avlizs\n2 kcarab\n1 amla\n```\nPélda több fájl feldolgozására: ha a `test.txt` fájlt kétszer adjuk meg paraméterül, és nem kérünk sorszámozást, akkor a kimenet a következő:\n```\navlizs\nkcarab\namla\navlizs\nkcarab\namla\n```\nA megoldáshoz feltesszük, hogy bármely fájl teljes egészében elfér a memóriában.\n\nA megoldás forráskódját (a `.c` ´es `.h` fájlokat, tehát a lefordított binárist nem kell) egy `zip` fájlba tömörítve töltsd fel! A megoldást a határidő lejártáig akárhányszor fel lehet tölteni. A beküldött megoldást automata tesztelő fogja lefordítani. A fordítás eredményét komment formájában láthatod majd a Canvasen.\n\n**Fontos**: a feladatban leírt kimeneteket pontosan a megadott formátumban adjuk meg, különben az\nautomata tesztelő rossz megoldásnak fogja értékelni a programot!\n\n(_Megjegyzés_: a feladat alapja a `rev` Unix utility, amely a kapott bemenet(ek) tartalmát eredeti sorrendben, de sorszámozás nélkül és a sorokat megfordítva írja ki.)\n\n### 2. Feladat\n\nA program olvassa be az első parancssori argumentumként, hogy szeretnénk-e a sorszámokat is kiírva\nlátni a képernyőre! A paraméter két lehetséges értéke legyen “`linenums`” ´es “`nolinenums`”, más stringet\nne fogadjunk el. Második parancssori argumentumként olvassuk be egy tetszőleges sor maximális hosszát\n(a beolvasott karakterek maximális számát)! Ezt a két adatot tároljuk egy struktúrában.\n\nAmennyiben a felhasználó nem ad meg legalább két parancssori argumentumot, jelenítsük meg a\nkövetkező használati utasítást (a második sor egy tabulátorral kezdődik), majd fejeződjön be a program:\n\n```\nUsage:\n    rev [SHOW LINE NUMBERS] [MAX LINE LENGTH] files...\n```\n\nA beolvasandó fájlok nevét további parancssori argumentumokként adjuk meg a programnak, és\nolvassuk be egyenként a fájlok tartalmát. Ha az aktuális argumentum hibát okoz (a fájlt nem sikerült\nmegnyitni), írjunk hibaüzenetet a standard error outputra, és folytassuk a végrehajt´ast a következő\nargumentummal. A hibaüzenet legyen: `File opening unsuccessful: \u003cfájl neve\u003e`. Ha a fájl egy sora\nhosszabb, mint a maximális sorhossz, a fennmaradó karaktereket hagyjuk figyelmen kívül!\n\nHa a felhasználó nem adott meg egy fájlnevet sem, olvassunk be sorokat a standard inputról, amelyek\nlegfeljebb a megadott maximális számú karakterből állnak! Ebben az esetben ne írjunk a konzolra semmit,\ncsak várjunk a felhasználó inputjára.\n\n(Tipp 1: a fájl típusú pointer valójában egy stream, amely helyettesíthető a standard inputtal\n(`stdin`).)\n\n(Tipp 2: az `EOF` eseméeny Unix rendszeren a `Ctrl+D`, Windowson a `Ctrl+Z` parancssal váltható ki.)\n\nA sorok tárolásához használjunk dinamikus tömböt! A tömb létrehozásakor a mérete legyen egy előre\nrögzített érték (pl. `8`). Ha a memóriafoglalás sikertelen, írjunk ki hibaüzenetet (`Memory allocation failed!`),\nés fejezzük be valamilyen hibakóddal a végrehajtást. (Ugyanez vonatkozik a tömb méretének megváltoztatására.)\nNe száamoljuk meg előre az aktuális fájl sorait, hanem duplázzuk meg a tömb méretét, amennyiben a sorok\nszáma túllépi az aktuális méretet!\n\nA megoldást bontsd több fordítási egységre! A `main` függv´eny kerüljön a `main.c` fájlba, minden más\nfüggvényimplementáció kerüljön külön fordítási egységbe, amelyhez készüljön el egy header állomány. A\nheader állományt védd header guarddal.\n\n### 3. Elvárás a programmal szemben\n\n- A nem forduló kód automatikusan 0 pontot ér. (Természetesen ez csak a legutoljára feltöltött\nmegoldásra vonatkozik, a feladat határideje után.)\n- Ne használj globális változókat!\n- Logikusan tagold a megoldást. A megoldás részeit külön függvényekben valósítsd meg.\n- Ügyelj, hogy ne legyen a programban memóriaszivárgás!\n- Kerüld a nem definiált viselkedést okozó utasításokat!\n\n### 4. Tanácsok\n\n- Ne feledkezzünk meg a dinamikus memóriafoglalás sikerességének ellenőrzéséről, és a foglalt memória\nfelszabadításáról! Teszteld a programot `valgrind`dal, hogy felderítsd az esetleges memóriaszivárgást.\n- Amennyiben a beolvasáshoz az `fgets` függvényt használod, ne feledd, hogy ha a sor rövidebb, mint\na puffer maximális hossza, a függvény beolvassa a sortörést is, ami a kiírásnál hibás eredményhez\nvezethet.\n\n## Compilation\n\nTo compile, simply enter the following command:\n\n```bash\ngcc -W -Wall -Wextra -pedantic main.c utils.c reverse.c init.c -o rev\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkbnim%2Felte-fi-imperative-assignment","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkbnim%2Felte-fi-imperative-assignment","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkbnim%2Felte-fi-imperative-assignment/lists"}