{"id":8096,"date":"2023-02-04T22:38:46","date_gmt":"2023-02-04T20:38:46","guid":{"rendered":"https:\/\/blue.pri.ee\/ttu\/?p=8096"},"modified":"2026-02-09T08:14:41","modified_gmt":"2026-02-09T06:14:41","slug":"pr2et2-loendid","status":"publish","type":"post","link":"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/","title":{"rendered":"PR2ET2: Loendid"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Praktikumi_materjal\" >Praktikumi materjal<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Praktikumi_ulesanded\" >Praktikumi \u00fclesanded<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Ulesanne_1_W02-1_Failide_kategooriad\" >\u00dclesanne 1 [W02-1]: Failide kategooriad<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Nouded\" >N\u00f5uded<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Kategooriad_ja_laiendid\" >Kategooriad ja laiendid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Koodi_mall\" >Koodi mall<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Soovituslikud_sammud_ulesande_lahendamisel\" >Soovituslikud sammud \u00fclesande lahendamisel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Vihjeid_ja_hoiatusi\" >Vihjeid ja hoiatusi<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Kasitsi_testimine\" >K\u00e4sitsi testimine<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Terviklik_testimine\" >Terviklik testimine<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Ulesanne_2_W02-2_Pikkuste_teisendaja\" >\u00dclesanne 2 [W02-2]: Pikkuste teisendaja<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Nouded-2\" >N\u00f5uded<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Andmefailid\" >Andmefailid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Vihjeid\" >Vihjeid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Testimine\" >Testimine<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Lisaulesanne_W02-3_laiendatud_teisendaja\" >Lisa\u00fclesanne [W02-3]: laiendatud teisendaja<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Nouded-3\" >N\u00f5uded<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Parast_seda_tundi_peaksid\" >P\u00e4rast seda tundi peaksid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/#Taiendav_materjal\" >T\u00e4iendav materjal<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Praktikumi_materjal\"><\/span><strong>Praktikumi materjal<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Slaidid: <a href=\"https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/slaidid-et\/02_loendid.pdf\"><strong>Loendid<\/strong><\/a><\/li>\n<li>T\u00e4iendav koodin\u00e4ide: <strong><a href=\"https:\/\/blue.pri.ee\/ttu\/programmeerimine-ii\/koodinaited\/loendite-naide-kasurea-kalkulaatori-pohjal\/\">loenditega kalkulaator<\/a><\/strong><\/li>\n<li>T\u00e4iendav koodin\u00e4ide: <a href=\"https:\/\/blue.pri.ee\/ttu\/programmeerimine-ii\/koodinaited\/lendava-objekti-tuvastamine-loendi-naide\/\"><b>objekti tuvastamine ja loendite kasutamine<\/b><\/a><\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Praktikumi_ulesanded\"><\/span><span id=\"Tasks\" class=\"ez-toc-section\"><\/span>Praktikumi \u00fclesanded<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Selles praktikumis on kaks \u00fclesannet. Enamjaolt on tegu kordamis\u00fclesannetega meenutamaks Programmeerimine 1 l\u00e4bitut, kuid \u00fclesandeid on rikastatud loendite kasutamisega ning m\u00f5lema \u00fclesande puhul saame juba kasutada eelmise n\u00e4dala viitade teemat enda elu lihtsustamiseks.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Ulesanne_1_W02-1_Failide_kategooriad\"><\/span>\u00dclesanne 1 [W02-1]: Failide kategooriad<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Selles \u00fclesandes loome t\u00f6\u00f6riista, mis suudab kategoriseerida ja loendada faile vastavalt faili nime l\u00f5pus paiknevale faili laiendile. N\u00e4iteks saame leida, mitu dokumendifaili asub m\u00e4\u00e4ratud kaustas ja selle alamkaustades. \u00dclesande raames loome vaid osa programmist, mis tegeleb laiendite tuvastamise ja loendamisega.<\/p>\n<p>Failide nimede leidmiseks kasutame Programmeerimine 1 Linuxi praktikumis \u00f5pitut. Kasutades t\u00f6\u00f6riista <span class=\"lang:c highlight:0 decode:true crayon-inline\">find<\/span>\u00a0 otsime rekursiivselt \u00fcles k\u00f5ik failid ning kasutades toru (<em>pipe<\/em>) kahe rakenduse standard sisend-v\u00e4ljundvoogude sidumiseks suuname otsingu tulemused enda loodud programmi anal\u00fc\u00fcsimiseks.<\/p>\n<p><strong>NB! Lahenduse potentsiaali testimiseks on vaja Bash keskkonda. Lihtsaim on testida seda kooli keskkonnast (st kasutades kooliarvutit, kaughaldust kooliarvutisse v\u00f5i luues SSH tunneli kooli serveritesse \/ arvutitesse).\u00a0<\/strong><\/p>\n<h5><span class=\"ez-toc-section\" id=\"Nouded\"><\/span>N\u00f5uded<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Loo programm, mis t\u00e4idab j\u00e4rgmised n\u00f5uded<\/p>\n<ul>\n<li>Programm v\u00f5tab vastu teadmata arvu faili nimesid standard sisendvoost (<span class=\"lang:c highlight:0 decode:true crayon-inline \">stdin<\/span>\u00a0)\n<ul>\n<li>Eelnevalt sisendite arvu k\u00fcsimine ega erilise sisuga s\u00f5ne kasutamine lugemise peatamiseks pole lubatud<\/li>\n<li>Lugemine tuleb peatada ja statistika kuvada p\u00e4rast seda, kui programm saab <span class=\"lang:c highlight:0 decode:true crayon-inline \">EOF<\/span>\u00a0 (<em>end of file<\/em>, faili l\u00f5pp) signaali.<\/li>\n<\/ul>\n<\/li>\n<li>Kategoriseeri failid vastavalt faililaiendile etteantud laiendite loetelu ja kategooriate p\u00f5hjal. Loetelu leiad kohe p\u00e4rast n\u00f5udeid.<\/li>\n<li>N\u00e4ita mitu faili igasse kategooriasse kuulub<\/li>\n<li>Kategooriate tuvastamiseks koodis pead kasutama loendi andmet\u00fc\u00fcpi (enum)<\/li>\n<li>\u00dcks funktsioon on juba ette m\u00e4\u00e4ratud. Funktsioon saab parameetrina kaasa faili laiendi s\u00f5nena ning tagastab vastava loendi v\u00e4\u00e4rtuse millisesse kategooriasse fail kuulub. Kasuta j\u00e4rgnevat protot\u00fc\u00fcpi:<br \/>\n<span class=\"lang:default decode:true crayon-inline\">enum FileCategory GetFileCategory(char *extension);<\/span><\/li>\n<li>Programm tohib kasutajale anda informatsiooni programmi kohta (nt mida teha tuleb) p\u00e4rast k\u00e4ivitamist. Programm\u00a0<strong>ei tohi<\/strong> sisendite vahel ekraanile teksti v\u00e4ljastada (st nt kahe faili nime sisestamise vahel).<\/li>\n<\/ul>\n<h5><span class=\"ez-toc-section\" id=\"Kategooriad_ja_laiendid\"><\/span>Kategooriad ja laiendid<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Arhiivid: zip, rar, 7z, tar, gz<\/li>\n<li>Andmed: csv, xls, xlsx, ods<\/li>\n<li>Dokumendid: pdf, doc, docx, rtf, odt<\/li>\n<li>Programmikood: c, h, cpp, hpp, py<\/li>\n<li>Tekst: txt<\/li>\n<li>Pildid: jpg, jpeg, png, svg,<\/li>\n<li>Muu: K\u00f5ik teised failid, millel on laiend, kuid ei olnud eelnevas loetelus.<\/li>\n<li>Laiend puudub<\/li>\n<\/ul>\n<h5><span class=\"ez-toc-section\" id=\"Koodi_mall\"><\/span>Koodi mall<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Selleks, et veidi lihtsustada, kuidas ja mis j\u00e4rjekorras lugemine ja t\u00f6\u00f6tlemine v\u00f5iks v\u00e4lja n\u00e4ha, pakun v\u00e4lja \u00fclesande lahendamiseks sobiliku malli.<\/p>\n<pre class=\"toolbar:2 lang:default decode:true \">#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n\r\n\/\/ Maximum file name length in modern systems\r\n#define MAX_FILE_LEN 256\r\n\r\n\/\/ TODO: Define the number of categories for array declaration \r\n\/\/ (alternatively, use the enum count method instead)\r\n\r\n\r\n\/\/ TODO: Add enum declaration\r\n\r\n\r\nint main(void)\r\n{\r\n    \/\/ Stores the name of the file\r\n    char name[MAX_FILE_LEN];\r\n    \r\n    \/\/ TODO: Declare the array to hold a counter for each file category\r\n    \r\n\r\n    \/\/ Read in the name of a file with the extension until EOF occurs\r\n    while (fgets(name, MAX_FILE_LEN, stdin) != NULL)\r\n    {\r\n        \/\/ TODO: Call a function to fix the trailing newline\r\n\r\n        \r\n        \/\/ TODO: Call a function to find the position of the last point\r\n        \/\/ Hint: think of what no point symbol in the string means!\r\n\r\n        \r\n        \/\/ TODO: Call a function that returns the category type and store it.\r\n        \/\/ This is the predefined function from the requirements!\r\n\r\n\r\n        \/\/ TODO: Increase the appropriate category counter value\r\n    }\r\n    \r\n    \/\/ TODO: Call a function to print the results\r\n    \r\n    \r\n    return EXIT_SUCCESS;\r\n}\r\n<\/pre>\n<h5><span class=\"ez-toc-section\" id=\"Soovituslikud_sammud_ulesande_lahendamisel\"><\/span>Soovituslikud sammud \u00fclesande lahendamisel<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ol>\n<li>Lisa koodi funktsioon, mis parandab s\u00f5ne l\u00f5pus oleva reavahetuse.<br \/>\nN\u00e4iteks <span class=\"lang:c decode:true crayon-inline\">void FixTrailingNewline(char *str);<\/span><\/li>\n<li>Lisa koodi funktsioon, mis leiab viimase punkti (<span class=\"lang:c highlight:0 decode:true crayon-inline \">.<\/span> ) asukoha s\u00f5nes, et seej\u00e4rel selle alusel m\u00e4\u00e4rata faili laiendi alguse (esimese t\u00e4he) m\u00e4luaadress.<br \/>\nN\u00e4iteks: <span class=\"lang:c decode:true crayon-inline \">int GetLastPointPos(char *str);<\/span><\/li>\n<li>Lisa koodi failikategooria loend ning loo vastav algv\u00e4\u00e4rtustatud loendurite massiiv.<\/li>\n<li>Lisa koodi funktsioon loendurite massiivi v\u00e4ljastamiseks<br \/>\nN\u00e4iteks\u00a0 <span class=\"lang:c decode:true crayon-inline\">void PrintFileCntPerCategory(int *categoryCounters, int numOfCategories);<\/span><\/li>\n<li>Lisa koodi funktsioon, mis leiab laiendile vastava loendi v\u00e4\u00e4rtuse.<br \/>\n<strong>NB! Inspiratsiooniks vaata koodin\u00e4idet lendava objekti tuvastamise kohta.<\/strong><br \/>\nN\u00e4iteks:\u00a0 <span class=\"lang:c decode:true crayon-inline \">enum FileCategory GetFileCategory(char *extension);<\/span><\/li>\n<\/ol>\n<h5><span class=\"ez-toc-section\" id=\"Vihjeid_ja_hoiatusi\"><\/span>Vihjeid ja hoiatusi<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Vaata l\u00e4bi t\u00e4iendav loendite n\u00e4ide (lehek\u00fclje alguses viide koodin\u00e4idetele). See on \u00fcsna sarnane praegusele \u00fclesandele ja peaks sulle andma hea idee struktuurist ja kasutusest.<\/li>\n<li>\u00dclesandes peaksid \u00e4ra tundma t\u00fckke eelmisest semestrist &#8211; nt s\u00f5nede esimene ja teine tunnit\u00f6\u00f6, samuti vanuselise grupeerimise kodut\u00f6\u00f6.<\/li>\n<li>Kui kasutad loendi elementide v\u00e4\u00e4rtusteks automaatset numeratsiooni ja lisad soovitud elementide l\u00f5ppu veel \u00fche elemendi, siis selle v\u00e4\u00e4rtuseks saab elementide arv loendis ilma selle viimase elemendita.\n<pre class=\"toolbar:2 lang:default decode:true\">enum FileCategory \r\n{\r\n    CAT_DATA,\r\n    CAT_DOCUMENTS,\r\n    CAT_IMAGES, \r\n    CAT_CODE, \r\n    CAT_ARCHIVE, \r\n    CAT_TEXT, \r\n    CAT_OTHER, \r\n    CAT_NO_EXT, \r\n    CAT_COUNT\r\n};<\/pre>\n<p>Sedasi saad lihtsustada n\u00e4iteks massiivide deklareerimist mille pikkus on vastavate loendurite arv.<\/li>\n<li>Kasutades viitade omadusi (nt viidaaritmeetika), saad punkti asukoha p\u00f5hjal lihtsasti leida punktile j\u00e4rgneva t\u00e4hem\u00e4rgi aadressi, mis on samuti s\u00f5ne ning saab olema olemuselt viit faili laiendile.<\/li>\n<li>Lugemists\u00fckli pikkus ei ole m\u00e4\u00e4ratud. Saad n\u00e4iteks kasutada funktsiooni <span class=\"lang:default highlight:0 decode:true crayon-inline\">fgets()<\/span>\u00a0 &#8211; see funktsioon tagastab\u00a0 <span class=\"lang:default highlight:0 decode:true crayon-inline\">NULL<\/span> -viida kui tuvastab faili l\u00f5ppu t\u00e4histava\u00a0 <span class=\"lang:default highlight:0 decode:true crayon-inline\">EOF<\/span>\u00a0 (<em>end of file<\/em>) signaali.<\/li>\n<li>Meeldetuletuseks! <span class=\"lang:default highlight:0 decode:true crayon-inline\">fgets()<\/span>\u00a0 salvestab reavahetuse s\u00fcmboli s\u00f5nesse. Selle pead likvideerima!<\/li>\n<li>Kogu programmi sisend tuleb sulle l\u00e4bi toru sinu programmi <span class=\"lang:default highlight:0 decode:true crayon-inline \">stdin<\/span>\u00a0standardvoogu.<\/li>\n<li>Kiireks testimiseks saad klaviatuurilt saata <span class=\"lang:default highlight:0 decode:true crayon-inline \">EOF<\/span>\u00a0 signaali kasutades klahvikombinatsiooni\u00a0<span class=\"lang:default highlight:0 decode:true crayon-inline\">ctrl+d<\/span> .<\/li>\n<\/ul>\n<h5><span class=\"ez-toc-section\" id=\"Kasitsi_testimine\"><\/span>K\u00e4sitsi testimine<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Programmi k\u00e4sitsi testimiseks k\u00e4ivitame programmi tavap\u00e4raselt ja tr\u00fckime seej\u00e4rel failide nimesid, vajutades iga nime j\u00e4rel enter klahvi. Kui soovime sisestust l\u00f5petada, vajutame klahvikombinatsiooni\u00a0 <span class=\"lang:default highlight:0 decode:true crayon-inline \">ctrl+d<\/span>\u00a0 &#8211; see saadab <span class=\"lang:default highlight:0 decode:true crayon-inline \">EOF<\/span>\u00a0i ehk faili l\u00f5pu signaali.<\/p>\n<pre class=\"theme:cisco-router toolbar:2 nums:false lang:default highlight:0 decode:true\">risto.heinsar@lx9:~\/P&gt; .\/task1_category\r\na.zip\r\nb.zip\r\na.png\r\n\r\n    Archives        2\r\n  Code files        0\r\n        Data        0\r\n   Documents        0\r\n      Images        1\r\n  Text files        0\r\n       Other        0\r\nNo extension        0<\/pre>\n<h5><span class=\"ez-toc-section\" id=\"Terviklik_testimine\"><\/span><strong>Terviklik testimine<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Selleks, et testida su programmi t\u00f6\u00f6d kui terviklikult olen ette valmistanud \u00fche v\u00f5rgukettal paikneva kausta. Kasutades kooliarvutit v\u00f5i kaughaldust saad k\u00e4ivitada k\u00e4su 1:1. Kui kasutad enda arvutit, lae alla testimiseks m\u00f5eldud arhiiv ja m\u00e4\u00e4ra otsingu asukohaks lahtipakitud arhiivi asukoht. Sinu tulemused peaksid vastama 1:1 n\u00e4itega.<\/p>\n<p>Faili nimede saamiseks kasutame sisseehitatud t\u00f6\u00f6riista <span class=\"lang:c highlight:0 decode:true crayon-inline \">find<\/span> , mida kasutatakse kaustade ja failide otsimiseks. Esmalt m\u00e4\u00e4rame kust otsime, seej\u00e4rel t\u00fc\u00fcbiks failid (v\u00e4ltimaks kaustade nimesid) ning tr\u00fckime v\u00e4lja vaid faili nimetuse ilma asukohata. find v\u00e4ljastab otsingutulemused oma standard v\u00e4ljundvoogu (<span class=\"lang:c highlight:0 decode:true crayon-inline \">stdout<\/span> ), mille suuname \u00fcmber kasutades toru (<em>pipe<\/em>) meie loodud rakenduse standard sisendvoogu (<span class=\"lang:c highlight:0 decode:true crayon-inline \">stdin<\/span>\u00a0).<\/p>\n<p>N\u00e4ide on k\u00e4ivitatud k\u00e4suga: <span class=\"lang:default highlight:0 decode:true crayon-inline\">find ~\/M\/risto.heinsar\/lab_cat\/ -type f -printf &#8216;%f\\n&#8217; | .\/task1_category<\/span><\/p>\n<pre class=\"theme:cisco-router toolbar:2 nums:false lang:default highlight:0 decode:true\">risto.heinsar@lx9:~\/P&gt; find ~\/M\/risto.heinsar\/lab_cat\/ -type f -printf '%f\\n' | .\/task1_category\r\n    Archives        2\r\n  Code files        7\r\n        Data        2\r\n   Documents        3\r\n      Images        0\r\n  Text files        6\r\n       Other        1\r\nNo extension        5<\/pre>\n<p>Vihje: M\u00e4ngi sellega &#8211; vaata n\u00e4iteks kuidas jaotuvad failid sinu P kettal, lisa t\u00e4iendavaid kategooriaid, failit\u00fc\u00fcpe.<\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-chevron su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Varukoopia testfailidest<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<p>Juhul kui sa ei saa demonstreerida \u00fclesande toimivust v\u00f5rguprobleemide t\u00f5ttu v\u00f5i soovid testida seda enda arvutil, saad selleks kasutada j\u00e4rgnevat arhiivi. Tegu on t\u00e4pse koopiaga M kettal asuvatest failidest ja kaustadest.<\/p>\n<p><strong><a href=\"https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/andmefailid\/2_1_file_cat_directory_structure.zip\">https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/andmefailid\/2_1_file_cat_directory_structure.zip<\/a><\/strong><\/p>\n<\/div><\/div>\n<h4><span class=\"ez-toc-section\" id=\"Ulesanne_2_W02-2_Pikkuste_teisendaja\"><\/span>\u00dclesanne 2 [W02-2]: Pikkuste teisendaja<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Sulle on edastatud andmed rahvusvahelise ettev\u00f5tte t\u00f6\u00f6tajate liikumisaktiivsuse kohta. Andmefailid leiad kohe p\u00e4rast n\u00f5uete peat\u00fckki. Sinu \u00fclesandeks on teisendada erinevatest pikkus\u00fchikutest koosnevas failis olevad andmed \u00fchte, kasutaja poolt m\u00e4\u00e4ratud, m\u00f5\u00f5t\u00fchikusse. Selle k\u00e4igus tuleb n\u00e4idata nii teisenduse tulemused kui ka lihtne statistika kogu faili kohta.<\/p>\n<h5><span class=\"ez-toc-section\" id=\"Nouded-2\"><\/span>N\u00f5uded<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Programm v\u00f5tab k\u00e4surealt 2 argumenti\n<ul>\n<li>Esimene argument on faili nimi<\/li>\n<li>Teine argument on soovitud \u00fchik milles v\u00e4ljundit n\u00e4idata (sobilikud v\u00e4ljundid on\u00a0 <span class=\"lang:default highlight:0 decode:true crayon-inline\">m<\/span>\u00a0 meetrites, <span class=\"lang:default highlight:0 decode:true crayon-inline\">ft<\/span>\u00a0 jalgades ja\u00a0 <span class=\"lang:default highlight:0 decode:true crayon-inline\">km<\/span>\u00a0 kilomeetrites)<\/li>\n<\/ul>\n<\/li>\n<li>Sisendfail on lihtne tekstifail (antakse esimese k\u00e4surea argumendina)\n<ul>\n<li>Iga rida failis on \u00fcks kirje<\/li>\n<li>Iga kirje koosneb kahest v\u00e4ljast, mis on t\u00fchikuga eraldatud:<span class=\"lang:default highlight:0 decode:true crayon-inline\">&lt;distants&gt; &lt;\u00fchik&gt;<\/span><\/li>\n<\/ul>\n<ul>\n<li>Distantsid on antud reaalarvuna<\/li>\n<li>\u00dchikud on antud s\u00f5nena. Sisendfailis on distantsid antud ainult meetrites v\u00f5i jalgades.<\/li>\n<\/ul>\n<\/li>\n<li>Leia ja kuva \u00fchel real algne distants ja distants mis on teisendatud soovitud \u00fchikusse (antud k\u00e4surea teise argumendina)<\/li>\n<li>Leia ja kuva kogu l\u00e4bitud distants ja keskmine l\u00e4bitud distants.<\/li>\n<li>K\u00f5ik pikkused kuva kahe komakohaga.<\/li>\n<li>\u00dchikud tuleb programmis kodeerida loendina (enum). Soovituslik loendi deklaratsioon on j\u00e4rgmine:<\/li>\n<li>\n<pre class=\"toolbar:2 lang:default decode:true\">enum Unit {UNIT_M, UNIT_FT, UNIT_KM, UNIT_UNKNOWN};<\/pre>\n<\/li>\n<li>Teisenduse konstandid, mida saad kasutada oma koodis:\n<pre class=\"toolbar:2 lang:default decode:true\">#define FT_IN_M 0.3048f\r\n#define FT_IN_MI 5280.00f\r\n#define M_IN_KM 1000.00f<\/pre>\n<\/li>\n<li>Soovitusi funktsiooni kujude kohta leiad vihjete alt<\/li>\n<\/ul>\n<h5><span class=\"ez-toc-section\" id=\"Andmefailid\"><\/span>Andmefailid<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Selle \u00fclesande testimiseks on kolm andmefaili. Loe t\u00e4psemalt <strong><a href=\"#Testimine\">Testimine<\/a><\/strong> peat\u00fcki alt, mida t\u00e4hele panna ning veendu tulemuste korrektsuses.<\/p>\n<p>Lae andmefailid alla siit: <strong><a href=\"https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/andmefailid\/2_2_converter_data.zip\">https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/andmefailid\/2_2_converter_data.zip<\/a><\/strong><\/p>\n<h5><span class=\"ez-toc-section\" id=\"Vihjeid\"><\/span>Vihjeid<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<h6>Vihje 1: Teisenduse funktsioon<\/h6>\n<p>Meenuta, et funktsioonid pidid olema l\u00fchikesed ja tegema vaid \u00fchte asja ning seda h\u00e4sti. Teisendamise funktsioon peaks tegelema ainult pikkuse teisendamisega \u00fchest andmet\u00fc\u00fcbist teise,\u00a0<strong>mitte\u00a0<\/strong>\u00fcritama samal ajal ka teisendada s\u00f5nest andmet\u00fc\u00fcpi. Edasta teisenduse funktsiooni juba dekodeeritud andmet\u00fc\u00fcbid koos teisendatava pikkusega.<\/p>\n<p>N\u00e4iteks v\u00f5iks kaaluda j\u00e4rgneivad ideid funktsiooni kujule.<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">\/\/ Conversion using doubles\r\ndouble GetConvertedDistance(double value, enum Unit inputUnit, enum Unit destUnit);\r\n \r\n\/\/ Conversion using floats\r\nfloat GetConvertedDistance(float value, enum Unit inputUnit, enum Unit destUnit);<\/pre>\n<h6>Vihje 2: Pikkus\u00fchiku dekodeerimine<\/h6>\n<p>Nii failist tulevad sisend\u00fchikud kui k\u00e4surea argumendina tulev v\u00e4ljund\u00fchik on m\u00f5lemad s\u00f5ne kujul. Seega selle teisendamiseks piisab \u00fchest funktsioonist, mis tagastab t\u00fc\u00fcbi.<\/p>\n<p>Nt: <span class=\"lang:c decode:true crayon-inline \">enum Unit GetDistanceUnitType(char *unit);<\/span><\/p>\n<h6>Vihje 3: \u00dchikute v\u00e4ljastamine teksti kujul<\/h6>\n<p>Selles \u00fclesandes on korraga kolm erinevat \u00fchikut (v\u00f5iks olla ka rohkem!) ning nende tr\u00fckkimine sedasi, et kood loetavaks j\u00e4\u00e4b v\u00f5ib muutuda keerukaks. Kaks ideed kuidas seda lahendada.<\/p>\n<p><strong>Valik 1:\u00a0<\/strong>Loo funktsioon ning kutsu see v\u00e4lja iga kord, kui on vaja \u00fchikut tr\u00fckkida ekraanile. \u00dchik anna kaasa loendi v\u00e4\u00e4rtusena.<\/p>\n<pre class=\"toolbar:2 lang:default decode:true\">void PrintUnit(enum Unit unit)\r\n{\r\n    switch (unit)\r\n    {\r\n        case UNIT_FT:\r\n            printf(\"ft\");\r\n            break;\r\n    }\r\n}\r\n<\/pre>\n<p><strong>Valik 2:\u00a0<\/strong>Loo funktsioon, mis tagastab viite s\u00f5nele, mis omakorda sisaldab sobilikku \u00fchikut. Kuna \u00fchik on kirjutatud funktsioonis konstandina, siis funktsiooni eluiga probleemiks ei osutu. Sellise funktsiooni eelis on see, et saad v\u00e4ga mugavalt printida \u00fchikut keerulisema printf lause sees &#8211; nt\u00a0<span class=\"lang:default decode:true crayon-inline\">printf(&#8220;%.2f %s\\n, distance, ReturnPrintableUnit(unit));<\/span><\/p>\n<pre class=\"toolbar:2 lang:default decode:true \">char * ReturnPrintableUnit(enum Unit unit)\r\n{\r\n    switch (unit)\r\n    {\r\n        case UNIT_FT:\r\n            return \"ft\";\r\n    }\r\n}\r\n<\/pre>\n<h5><span class=\"ez-toc-section\" id=\"Testimine\"><\/span>Testimine<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Selle programmiga on palju erinevaid asju mis v\u00f5ivad valesti minna. Testi k\u00f5iki j\u00e4rgnevaid olukordi!<\/p>\n<h6>Testid 1 &#8211; 3: Vale argumentide arv<\/h6>\n<p>Siin on kombineerituna n\u00e4ha kolm erinevat testi, k\u00f5igi nende k\u00e4igus testime probleeme k\u00e4ivitamisel (vale argumentide arv)<\/p>\n<pre class=\"theme:cisco-router toolbar:2 nums:false nums-toggle:false lang:default highlight:0 decode:true\">risto@risto-wk-tux:~\/Nextcloud\/work\/ttu\/teaching\/_generic\/prog2\/lab\/wk1_enum$ .\/task2 \r\nInvalid arguments!\r\nUsage: .\/task2 data_file output_unit\r\nristo@risto-wk-tux:~\/Nextcloud\/work\/ttu\/teaching\/_generic\/prog2\/lab\/wk1_enum$ .\/task2 data.txt\r\nInvalid arguments!\r\nUsage: .\/task2 data_file output_unit\r\nristo@risto-wk-tux:~\/Nextcloud\/work\/ttu\/teaching\/_generic\/prog2\/lab\/wk1_enum$ .\/task2 data.txt m ft\r\nInvalid arguments!\r\nUsage: .\/task2 data_file output_unit\r\n<\/pre>\n<h6>Testid 4, 5: Probleemsed argumendid<\/h6>\n<p>J\u00e4rgneva kahe testi v\u00e4ltel vaatame antud argumentide sisse. Veendume, et \u00fchik on toetatud ning fail eksisteerib.<\/p>\n<pre class=\"theme:cisco-router toolbar:2 nums:false nums-toggle:false lang:default highlight:0 decode:true\">risto@risto-wk-tux:~\/Nextcloud\/work\/ttu\/teaching\/_generic\/prog2\/lab\/wk1_enum$ .\/task2 data.txt mm\r\nError: Unknown unit!\r\nristo@risto-wk-tux:~\/Nextcloud\/work\/ttu\/teaching\/_generic\/prog2\/lab\/wk1_enum$ .\/task2 data.txt m\r\nError opening input file: No such file or directory\r\n<\/pre>\n<h6>Test 6: t\u00fchi fail<\/h6>\n<p>Olukorras, kus sisendfail on t\u00fchi, on meie programmis samuti ohukohti. Veendume, et programm ei jookseks kokku t\u00fchja faili puhul!<\/p>\n<p>task2_data1.txt sisu:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\"><\/pre>\n<p>V\u00f5imalik v\u00e4ljund:<\/p>\n<pre class=\"theme:cisco-router toolbar:2 nums:false nums-toggle:false lang:default highlight:0 decode:true\">risto@risto-wk-tux:~\/Nextcloud\/work\/ttu\/teaching\/_generic\/prog2\/lab\/wk1_enum$ .\/task2 task2_data1.txt m\r\nTotal: 0.00 m\r\n<\/pre>\n<h6>Testid 7 &#8211; 9: Teisendused<\/h6>\n<p>Selles testis k\u00e4ime l\u00e4bi k\u00f5ik v\u00f5imalikud sisendi ja v\u00e4ljundi kombinatsioonid, mis on meil toetatud. Kasutame lihtsat andmefaili, et vastuseid parem j\u00e4lgida oleks.<\/p>\n<p>task2_data2.txt sisu:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">500 m\r\n500 ft<\/pre>\n<p>Oodatav v\u00e4ljund:<\/p>\n<pre class=\"theme:cisco-router toolbar:2 nums:false nums-toggle:false lang:default highlight:0 decode:true\">risto@risto-wk-tux:~\/Nextcloud\/work\/ttu\/teaching\/_generic\/prog2\/lab\/wk1_enum$ .\/task2 task2_data2.txt ft\r\n500.00 m -&gt; 1640.42 ft\r\n500.00 ft -&gt; 500.00 ft\r\n\r\nTotal: 2140.42 ft\r\nAverage: 1070.21 ft\r\nristo@risto-wk-tux:~\/Nextcloud\/work\/ttu\/teaching\/_generic\/prog2\/lab\/wk1_enum$ .\/task2 task2_data2.txt m\r\n500.00 m -&gt; 500.00 m\r\n500.00 ft -&gt; 152.40 m\r\n\r\nTotal: 652.40 m\r\nAverage: 326.20 m\r\nristo@risto-wk-tux:~\/Nextcloud\/work\/ttu\/teaching\/_generic\/prog2\/lab\/wk1_enum$ .\/task2 task2_data2.txt km\r\n500.00 m -&gt; 0.50 km\r\n500.00 ft -&gt; 0.15 km\r\n\r\nTotal: 0.65 km\r\nAverage: 0.33 km\r\n<\/pre>\n<h6>Test 10: Pikem fail<\/h6>\n<p>Selle testi puhul on peamiseks eesm\u00e4rgiks proovida tulemusi pikema andmefaili korral ja veenduda, et midagi kahe silma vahele ei j\u00e4\u00e4nud.<\/p>\n<p>task2_data3.txt sisu:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">1000 m\r\n5400 m\r\n12010 ft\r\n850 m\r\n4626 m\r\n9603 ft\r\n11215 ft\r\n10242 m\r\n<\/pre>\n<p>Oodatav v\u00e4ljund:<\/p>\n<pre class=\"theme:cisco-router toolbar:2 nums:false nums-toggle:false lang:default highlight:0 decode:true\">risto@risto-wk-tux:~\/Nextcloud\/work\/ttu\/teaching\/_generic\/prog2\/lab\/wk1_enum$ .\/task2 task2_data3.txt km\r\n1000.00 m -&gt; 1.00 km\r\n5400.00 m -&gt; 5.40 km\r\n12010.00 ft -&gt; 3.66 km\r\n850.00 m -&gt; 0.85 km\r\n4626.00 m -&gt; 4.63 km\r\n9603.00 ft -&gt; 2.93 km\r\n11215.00 ft -&gt; 3.42 km\r\n10242.00 m -&gt; 10.24 km\r\n\r\nTotal: 32.12 km\r\nAverage: 4.02 km\r\n<\/pre>\n<p><span style=\"color: #ff0000;\"><strong>M\u00e4rkus! Kas panid t\u00e4hele mida me ei testinud?<\/strong><\/span><\/p>\n<h4><span class=\"ez-toc-section\" id=\"Lisaulesanne_W02-3_laiendatud_teisendaja\"><\/span>Lisa\u00fclesanne [W02-3]: laiendatud teisendaja<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Lisa\u00fclesandeks on teise praktikumi\u00fclesande laiendus. M\u00f5tle \u00fclesandest kui pikkuste teisendajast, mis v\u00e4ljastab ka lihtlabase statistika<\/p>\n<h5><span class=\"ez-toc-section\" id=\"Nouded-3\"><\/span>N\u00f5uded<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Lisa tugi t\u00e4iendavatele \u00fchikutele\n<ul>\n<li>Jard (yard, yd)<\/li>\n<li>Toll (inch, in)<\/li>\n<li>Detsimeetrid (dm, decimeter)<\/li>\n<\/ul>\n<\/li>\n<li>Teisendused kuue toetatud \u00fchiku vahel peavad olema toetatud m\u00f5lemas suunas (st m\u00f5lemad k\u00f5ik nendest v\u00f5ivad olla nii sisendiks kui v\u00e4ljundiks)<\/li>\n<li>Lahenduse disain peab olema lihtsasti laiendatav. St t\u00e4iendavate \u00fchikute lisamine ei tohiks vajada suuremahulisi koodi \u00fcmberkirjutamisi. Teisenduse kood t\u00e4iendavate \u00fchikute lisamisel ei tohi kasvada eksponentsiaalselt!<\/li>\n<\/ul>\n<p>Hoiatus: Kuigi antud \u00fclesande oodatav lahendus on lihtsasti hallatav, tekitab see t\u00e4iendavaid vigu \u00fchikute teisenduskordajate \u00fcmardamise t\u00f5ttu. Ole sellega ettevaatlik suurt t\u00e4psust n\u00f5udvates probleemides.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Parast_seda_tundi_peaksid\"><\/span><span id=\"After_the_class_you_should\" class=\"ez-toc-section\"><\/span><strong>P\u00e4rast seda tundi peaksid<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Oskama t\u00f6\u00f6tada loenditega, sh\n<ul>\n<li>Deklareerida uusi loendi t\u00fc\u00fcpe<\/li>\n<li>M\u00f5istma, kuidas k\u00e4ib automaatne numbrite andmine loendi elementidele<\/li>\n<li>Deklareerida loendi t\u00fc\u00fcpi muutujaid<\/li>\n<li>Edastada funktsiooni ja tagastada funktsioonist loendeid.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Taiendav_materjal\"><\/span><span id=\"Additional_content\" class=\"ez-toc-section\"><\/span><strong>T\u00e4iendav materjal<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>NB! Ettevaatust koodimisstiiliga j\u00e4rgnevate viidete puhul. Mitte \u00fckski neist ei suuda isegi \u00fchel lehek\u00fcljel sama koodimisstiili reegleid j\u00e4lgida!<\/p>\n<ul>\n<li>BeeJ&#8217;s guide to Enums<br \/>\n<strong><a href=\"https:\/\/beej.us\/guide\/bgc\/html\/split\/enumerated-types-enum.html#enumerated-types-enum\">https:\/\/beej.us\/guide\/bgc\/html\/split\/enumerated-types-enum.html#enumerated-types-enum<\/a><\/strong><\/li>\n<li>Enumeration (or enum) in C<br \/>\n<strong><a href=\"https:\/\/www.geeksforgeeks.org\/enumeration-enum-c\/\">https:\/\/www.geeksforgeeks.org\/enumeration-enum-c\/<\/a><\/strong><\/li>\n<li>Enumerations<br \/>\n<strong><a href=\"https:\/\/en.cppreference.com\/w\/c\/language\/enum\">https:\/\/en.cppreference.com\/w\/c\/language\/enum<\/a><\/strong><\/li>\n<li>C enums<br \/>\n<strong><a href=\"https:\/\/www.programiz.com\/c-programming\/c-enumeration\">https:\/\/www.programiz.com\/c-programming\/c-enumeration<\/a><\/strong><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Praktikumi materjal Slaidid: Loendid T\u00e4iendav koodin\u00e4ide: loenditega kalkulaator T\u00e4iendav koodin\u00e4ide: objekti tuvastamine ja loendite kasutamine Praktikumi \u00fclesanded Selles praktikumis on kaks \u00fclesannet. Enamjaolt on tegu kordamis\u00fclesannetega meenutamaks Programmeerimine 1 l\u00e4bitut, kuid \u00fclesandeid on rikastatud loendite kasutamisega ning m\u00f5lema \u00fclesande puhul saame juba kasutada eelmise n\u00e4dala viitade teemat enda elu lihtsustamiseks. \u00dclesanne 1 [W02-1]: Failide kategooriad &hellip; <a href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2-et\/pr2et2-loendid\/\" class=\"more-link\">Loe edasi <span class=\"screen-reader-text\">PR2ET2: Loendid<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[176],"tags":[],"class_list":["post-8096","post","type-post","status-publish","format-standard","hentry","category-pr2-et"],"_links":{"self":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts\/8096","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/comments?post=8096"}],"version-history":[{"count":31,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts\/8096\/revisions"}],"predecessor-version":[{"id":11210,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts\/8096\/revisions\/11210"}],"wp:attachment":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/media?parent=8096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/categories?post=8096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/tags?post=8096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}