Labori sisu
- Slaidid: Käsurea argumendid
- Näidisprogramm [windows] [linux]
- Koodinäidis: Käsurea argumentide poole pöördumine
Esitamisele kuuluvad ülesanded
Selles tunnis on üks ülesanne ning edasijõudnute ülesanded, mis lisavad algsele lahendusele funktsionaalsust juurde.
Tunnitöö: kalkulaator
Selle tunnitöö raames ehitad kalkulaatori mis töötab kasutades käsurea argumente.
Nõuded
- Loodavaks programmiks on lihtne kalkulaator, mis
- teostab liitmist, lahutamist, korrutamist ja jagamist
- toetab positiivseid täisarvulisi operande
- teeb vaid ühe tehte korraga (nt 3 + 6)
- Tehte vastus antakse 2 komakohaga
- Nii operandid kui operaator loetakse käsurea argumentidena
- Näide liitmistehtest: ./calculator 3 + 6
- Programm ei tohi pärast käivitumist kasutajalt sisestust küsida
- Programm tuvastab ära järgnevad veaolukorrad
- Vale käsurealt loetud argumentide arv
- Tundmatu operaator (tehe)
- Mittenumbriline operand (arv)
- Nulliga jagamine
- Vea tekkides kuvatakse kasutajale mis viga tehti ning seejärel programmi kasutusjuhend
Soovituslik loetelu funktsioonidest
- Abiinfo kuvamine
- Kuvab juhised kuidas programmi kasutada
- Argumentide kontroll
- Kontrollib mitu argumenti programmile anti
- Edasijõudnute versioonis tuvastab --help argumendi.
- Veahalduse funktsioon
- Kuvab mis vea kasutaja tegi
- Kutsub abiinfo kuvamise funktsiooni
- Operandi kontroll
- Kontrollib, kas operand on numbriline
- Tagastab operandi, mis on teisendatud arvulisele kujule (nt int)
- Arvutamine
- Tuvastab kasutaja poolt soovitatud tehte ja arvutab välja vastuse
- Tagastab vastuse
Lisaks võib olla kasulik luua ka funktsioonid operaatori kontrollimiseks ja tuvastamiseks.
Näidis
Valmislahenduse testimiseks omal käel soovitame alla laadida näidisprogrammi ja katsetada kuidas see töötab.
Kõikide testjuhtudega mida programm toetama peab vaata järgmist peatükki.
Näide 1: Programmi sisend OK, programm annab vastuse
1 2 |
risto@risto-lt3-tux:~$ ./calculator 1 / 4 > 0.25 |
Näide 2: programm käivitatakse vale sisendiga ning kuvatakse veateade ja kasutamisjuhend
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
risto@risto-lt3-tux:~/Desktop$ ./calculator Error 0! Invalid argument count or unknown argument(s) Usage: ./calculator operand operation operand Possible operations: + add - subtract * multiply / divide Note, that due to how shell works, the multiplication operator has to be encased in quotes e.g. 2 "*" 3.5 |
Testimine
Järgnevalt olen välja toonud peamised testjuhud kalkulaatorile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# ilma ühegi argumendita ei tohiks programm kokku joosta ./kalkulaator # baasjuhu kontrollid, korrektne ./kalkulaator 1 + 1 ./kalkulaator 7 / 5 # baasjuhu kontrollid, veaolukorrad ./kalkulaator # vale argumentide arv ./kalkulaator 1 2 3 4 5 # vale argumentide arv ./kalkulaator 6 + a # mittenumbriline operand ./kalkulaator 6 +- 5 # tundmatu operatsioon ./kalkulaator 6 + 6a # mittenumbriline operand ./kalkulaator 6 n 6 # tundmatu operatsioon ./kalkulaator 6 / 0 # nulliga jagamine # edasijõudnute kontrollid, OK ./kalkulaator 3.0 / 5.0 ./kalkulaator -3.0 / 5.0 # edasijõudnute kontrollid, vead ./kalkulaator 5.5.5 / 5 ./kalkulaator -5-5 / 5 ./kalkulaator 5-5 / 5 |
Edasijõudnute ülesanne 1: reaalarvud
Muuda oma programmi sedasi, et sisendina oleksid toetatud reaalarvud. St pead toetama negatiivseid ja murdosaga arve.
Testi järgnevate sisenditega
- -3.3
- 3-3
- -3-3
- 3.3.3
Edasijõudnute ülesanne 2: laiendatud funktsionaalsus
Lisa oma programmi järgnevad funktsioonid:
- Ruutjuure võtmine
- Astendamine
- Abiinfo kuvamine argumendiga --help . Abiinfo kuvades ei tohi tekkida veaolukord.
Kõik lisatud funktsioonid peaksid olema kajastatud ka abiinfos!
Pärast tundi peaksid
- Saama aru mis asi on käsurea argument
- Teadma näiteid teistest programmidest mis kasutavad käsurea argumente ja kuidas
- Oskama ise programmile käsurea argumente anda
- Oskama C koodis käsurea argumente vastu võtta
- Teadma, et main() funktsioonil on mitu kuju
- Mõistma mis asi on argumentide arv (argc, argument count)
- Mõistma mis asi on argumentide vektor (argv, argument vector)
- Teadma mis on tavaliselt esimene kaasa antav argument
- Mõistma kuidas argumentide hulk muutub vastavalt palju argumente programmi käivitades kaasa antakse
- Mõistma, et * ja [] tähistavad sisuliselt sama asja
- Mõistma mida * tähistab käsurealt programmi käivitades ja kuidas on seda sümbolit võimalik programmile anda argumendina
- Oskama anda edasi mitmest sõnast koosnevat argumenti ühe argumendina
- Oskama teisendada sõnesid täisarvudeks, murdarvudeks