Erinevus lehekülje "ITI0011:harjutus 18" redaktsioonide vahel

Allikas: Kursused
Mine navigeerimisribale Mine otsikasti
11. rida: 11. rida:
 
EX18 tarvis tuleb realiseerida 2 funktsiooni:
 
EX18 tarvis tuleb realiseerida 2 funktsiooni:
  
* maxAbsoluteValueInArray(int[], arrLength)
+
* <code>'''maxAbsoluteValueInArray(int[], arrLength)'''</code>
Näiteks [4,-5,1,-2] tagastab 5. Lahendus peaks kasutama rekursiivset loogikat, st funktsioon peab tagastama isennast. <code>for</code> ja <code>while</code> tsüklid pole lubatud.
+
: Näiteks [4,-5,1,-2] tagastab 5. Lahendus peaks kasutama rekursiivset loogikat, st funktsioon peab tagastama isennast. <code>for</code> ja <code>while</code> tsüklid pole lubatud.
Näpunäiteid:
+
: Näpunäiteid:
  
Oletame, et rivis on 4 inimest. Igaüks mõtleb ühe arvu, me tahame teada, kes mõtles kõige suurema arvu (ilma sohki tegemata).
+
: Oletame, et rivis on 4 inimest. Igaüks mõtleb ühe arvu, me tahame teada, kes mõtles kõige suurema arvu (ilma sohki tegemata).
Info edastamiseks sosistatakse üksteisele kõrva.
+
: Info edastamiseks sosistatakse üksteisele kõrva.
Saame kasutada järgnevat loogikat:
+
: Saame kasutada järgnevat loogikat:
  
Esimene inimene rivis sosistab teisele, maksimaalne arv on <code>max(1_inimese_arv, ülejäänud_rivi_max)</code>
+
: Esimene inimene rivis sosistab teisele, maksimaalne arv on <code>max(1_inimese_arv, ülejäänud_rivi_max)</code>
Teine inimene, saab seda loogikat täiendada oma numbriga järgnevalt <code>max(1_inimese_arv, max(2_inimese_arv,ülejäänud_rivi_max))</code>
+
: Teine inimene, saab seda loogikat täiendada oma numbriga järgnevalt <code>max(1_inimese_arv, max(2_inimese_arv,ülejäänud_rivi_max))</code>
Kolmas inimene omakorda <code>max(1_inimese_arv,max(2_inimese_arv,max(3_inimse_arv, ülejäänud_rivi_max)))</code>
+
: Kolmas inimene omakorda <code>max(1_inimese_arv,max(2_inimese_arv,max(3_inimse_arv, ülejäänud_rivi_max)))</code>
Viimane teab, et ta on viimane ja tema ülesandeks on arvutada <code>max(1_inimese_arv,max(2_inimese_arv,max(3_inimse_arv, 4_inimes_arv)))</code>
+
: Viimane teab, et ta on viimane ja tema ülesandeks on arvutada <code>max(1_inimese_arv,max(2_inimese_arv,max(3_inimse_arv, 4_inimes_arv)))</code>
  
Kui viimane saab arvutatud, siis ta saab sosistada eelviimasele vastuse, eelviimane üle-eelviimasele ja nii alguseni välja.
+
: Kui viimane saab arvutatud, siis ta saab sosistada eelviimasele vastuse, eelviimane üle-eelviimasele ja nii alguseni välja.
  
Arvudega  
+
: Arvudega  
<pre>
+
:
max(4, ülejäänud_rivi_max)
+
max(4, ülejäänud_rivi_max)
max(4, max(-5, ülejäänud_rivi_max))
+
max(4, max(-5, ülejäänud_rivi_max))
max(4, max(-5, max(1, ülejäänud_rivi_max)))
+
max(4, max(-5, max(1, ülejäänud_rivi_max)))
max(4, max(-5, max(1, -2))) = 4
+
max(4, max(-5, max(1, -2))) = 4
</pre>
 
  
Absoluutväärtustega toimub analoogliselt.
 
  
* maxElementInArray(int[]), tagastab massiivi maksimaalse elemendi.  
+
: Absoluutväärtustega toimub analoogliselt.
 +
 
 +
* <code>'''maxElementInArray(int[])'''</code>, tagastab massiivi maksimaalse elemendi.  
  
 
Tehke kindlasti esimesena maxABsoluteValueInArray, selle lahendamiseks mõelge loovalt ja kasutage array enda ruumi ajutiste väärtuste hoidmiseks
 
Tehke kindlasti esimesena maxABsoluteValueInArray, selle lahendamiseks mõelge loovalt ja kasutage array enda ruumi ajutiste väärtuste hoidmiseks

Redaktsioon: 29. aprill 2015, kell 08:04

Kirjeldus

Rekursiooniga tutvumiseks on soovitatav uurida:

EX18 tarvis tuleb realiseerida 2 funktsiooni:

  • maxAbsoluteValueInArray(int[], arrLength)
Näiteks [4,-5,1,-2] tagastab 5. Lahendus peaks kasutama rekursiivset loogikat, st funktsioon peab tagastama isennast. for ja while tsüklid pole lubatud.
Näpunäiteid:
Oletame, et rivis on 4 inimest. Igaüks mõtleb ühe arvu, me tahame teada, kes mõtles kõige suurema arvu (ilma sohki tegemata).
Info edastamiseks sosistatakse üksteisele kõrva.
Saame kasutada järgnevat loogikat:
Esimene inimene rivis sosistab teisele, maksimaalne arv on max(1_inimese_arv, ülejäänud_rivi_max)
Teine inimene, saab seda loogikat täiendada oma numbriga järgnevalt max(1_inimese_arv, max(2_inimese_arv,ülejäänud_rivi_max))
Kolmas inimene omakorda max(1_inimese_arv,max(2_inimese_arv,max(3_inimse_arv, ülejäänud_rivi_max)))
Viimane teab, et ta on viimane ja tema ülesandeks on arvutada max(1_inimese_arv,max(2_inimese_arv,max(3_inimse_arv, 4_inimes_arv)))
Kui viimane saab arvutatud, siis ta saab sosistada eelviimasele vastuse, eelviimane üle-eelviimasele ja nii alguseni välja.
Arvudega
max(4, ülejäänud_rivi_max)
max(4, max(-5, ülejäänud_rivi_max))
max(4, max(-5, max(1, ülejäänud_rivi_max)))
max(4, max(-5, max(1, -2))) = 4


Absoluutväärtustega toimub analoogliselt.
  • maxElementInArray(int[]), tagastab massiivi maksimaalse elemendi.

Tehke kindlasti esimesena maxABsoluteValueInArray, selle lahendamiseks mõelge loovalt ja kasutage array enda ruumi ajutiste väärtuste hoidmiseks

Mall

<source lang="java">


/**

* EX 18 Solution.
* @author <Your Name>
*/

public class EX18 {

public static void main(String[] args) { // Test here

System.out.println(maxElementInArray(new int[] { 12,4,2,1,9,11})); System.out.println(maxAbsoluteValueInArray(new int[] { 12,4,2,1,9,11, -14}, 7));

}


/** * * Returns absolute maximum (Distance from 0) value of an array RECURSIVELY. * Example * [4,2,1-5,-1] => 5 * @param arr * @param arrLength - array length when initialized * @throws IllegalArgumentException if arr is null or arrLength is negative * @return valueOfMaximumAbsoluteElement */ public static int maxAbsoluteValueInArray(int[] arr, int arrLength) throws IllegalArgumentException { // TODO: Implement return 0; }

/** * Returns maximum element of an array RECURSIVELY. * Example * [4,2,1-5-1] -> 4 * @param arr * @throws IllegalArgumentException if arr is null * @return valueOfMaximumElement */ public static int maxElementInArray(int[] arr) throws IllegalArgumentException { // TODO: Implement return 0; }

}

</source>