ITI0011-2015:harjutus 02
Harjutuse tähtaeg on 4. praktikum (12.-13. veebruar).
Üldine informatsioon harjutuste kohta: ITI0011:harjutused.
Kirjeldus
Üks teie sõber läheb Hawaiile ja tahab seal oma firma asutada. Ta täpsemalt ei taha rääkida, millega ta seal tegelema hakkab. Kuna aga ta teab, et teil on hea kogemus programmeerimise vallas, palub ta teilt ühte väikest programmi, mis teda tema töös aitaks. Nimelt pole tal alguses raha, et palgata korralikku raamatupidajat. Seega teeb ta ise suure osa tööst ära Excelis. Küll aga on kohalik maksuamet aeg-ajalt kontrollimas, et kuidas äri edeneb. Maksuamet käib ja kontrollib ühe konkreetse päeva kohta, et kuidas selle päeva kasum/kahjum oli. Teie sõber palub teilt sellist programmi, mis maksuametile vastaks. Programm saab ette päevade kasumite ajaloo (negatiivne kasum tähendab kahjumit) kuni N päeva (N ei ole täpselt teada) ning ühe konkreetse päeva, mille kohta maksuamet tahab teada kasuminumbrit. Kasumi ajalugu võib ulatuda näiteks 20 päeva tagasi. Maksuamet võib küsida kasumit näiteks 1. päeval (kõige kaugem päev minevikus), 2. päeval jne kuni 20. päeval. Etteantud kasuminimekiri on samamoodi järjestatud, et kõige esimene element näitab 1. päeva kasumit jne.
Aga see pole veel kõik. Hawaiil on väga imelik maksusüsteem. Maksuamet võib küsida informatsiooni ka näiteks tuleviku kohta. Kuigi teie sõbra äri on töös olnud 20 päeva (ehk siis ajalugu on 20 päeva kohta), võib maksuamet küsida 21. päeva kasumit. Sealne "seadus" ütleb nii, et tulevik ennustatakse mineviku pealt. Esimene päev peale ajalugu kordub ajaloo esimene päev. Ehk siis 21. päeva kasum on täpselt sama, mis oli 1. päeva kasum. 30. päeva kasum on täpselt sama mis oli 10. päeva kasum. Sarnaselt kordub ajalugu ka edaspidi tulevikus. Näiteks 51. päeva kasum on sama mis 11. päeva kasum.
Ja ka see pole veel kõik. Kohalik kultuur võimaldab pühapäevadel pidada "kõrgema maksu päeva". See tähendab seda, et kasumliku pühapäeva puhul on tegelik kasum 20% suurem. Seega, kui muidu pühapäeva numbrid näitavad kasumiks 100 ühikut raha, siis "kõrgema maksu päeva" tõttu saab välja näidata 120 ühikut. Kahjumi korral saab kahjumit vähendada 10%. Ehk siis -100 puhul oleks näidatav tulemus -90. On teada, et teie sõber alustas oma äri esmaspäeval. Numbritega opereerimisel tuleb ümardada matemaatika reegleid kasutades (11.5 => 12, 11.49 => 11, -12.5 => -13, -12.49 => -12), tulemus on alati täisarv.
Aga ka see pole veel kõik. Nimelt ei taha teie sõber näidata välja kahjumit. Kui maksuameti küsitud päev juhtub kahjumiga olema, tahab teie sõber, et programm tagastaks kas eelmise (kui selline päev on olemas), sama või järgmise päeva kasumi - vastavalt sellele, mis annab parema tulemuse (on suurem kasum/väiksem kahjum).
Mall
<source lang="java"> /**
* Home assignment 02. * * Read more: https://courses.cs.ttu.ee/pages/ITI0011:harjutus_02 * */
public class Task02 {
/** * Your killer app, which tries to fool the tax office * that your friend is a killer businessman. * * (don't try this at home, we haven't taught you anything) * * @param whatHas An array of profits for every day. * The first element of the array indicates the profit * for the first day etc. * @param whotYouAskMon The day for which the tax officer * wants to get information. * @return The profit to be shown to the tax officer. */ public static int getMyBigMoneys(int[] whatHas, int whotYouAskMon) { // yoyo, your code here return 0; }
/** * The main method, which is the entry point of the program. * !!IMPORTANT!! You have to keep the main method in order * to get your solution tested. * @param args Arguments from the command line */ public static void main(String[] args) { System.out.println(getMyBigMoneys(new int[]{1}, 1)); // => 1 System.out.println(getMyBigMoneys(new int[]{1, -2, 3}, 2)); // => 3 System.out.println(getMyBigMoneys(new int[]{-1, 2, 3}, 4)); // => 3 System.out.println(getMyBigMoneys( new int[]{-1, 2, 3, 4, 5, -60, -70, -80}, 7)); // => -60 System.out.println(getMyBigMoneys( new int[]{-1, 2, 3, 4, -70, -60, -65, -80}, 6)); // => -59 }
}
</source>
Täiendavat infot
Teie peate kirjutama funktsiooni getMyBigMoneys sisu. Funktsioonile antakse ette kaks argumenti: täisarvude massiiv ja täisarv. Massiiv sisaldab kõiki kasumeid ajaloos. Kui massiivi pikkus on 10, siis järelikult sisaldab ta kasumeid päevast 1 kuni päevani 10 (mõlemad kaasa arvatud). Teine number on päeva järjekorranumber, mille kohta peate kasumiinfo tagastama.
Funktsioon tagastab ühe numbri - kasumiinfo vastavalt üleval kirjeldatud soovidele.
Massiivi pikkuse saate kätte:
array.length
Massiivi elemendid vastavalt indeksiga idx:
array[idx]
Jäägiga opereerimine:
5 % 3 => 2
Soovitatav on enne natuke läbi mõelda, mis reeglid ülesande tekstis kirjas on. Samuti tasub näiteid vaadata ja nendest proovida aru saada.