PP Zad6

background image

Laboratorium Podstaw Programowania

Laboratorium VI

Uwagi Wstępne

Poniżej znajdują się trzy zadania. Za każde można otrzymać do 10 pkt. Zwróć uwagę, aby Twój kod był czytelny
(np. aby nazwy zmiennych odzwierciedlały do czego służą). Uważnie czytaj treść zadań. W razie konieczności dopytaj
prowadzącego.

Zadanie 1

Celem tego zadania jest napisanie programu sprawdzającego, czy z danych trzech odcinków da się zbudować trójkąt.
Napisz funkcję, która przyjmuje trzy parametry wejściowe oraz zwraca wartość typu prawda/fałsz. Parametry wejściowe
oznaczają długości trzech odcinków (dobierz odpowiednie typy zmiennych). Wartość zwracana powinna odpowiadać na
pytanie, czy da się danych trzech odcinków zbudować trójkąt.
Wskazówka: Trójkąt da się zbudować z takich trzech odcinków, dla których długość każdego z nich nie jest większa niż
suma długości pozostałych.

Zadanie 2

Celem tego zadania jest napisanie programu analizującego dane giełdowe.
W pliku gielda.csv dostępnym na eportalu znajdują się dane giełdowe dotyczące spółki Apple. W kolejnych kolumnach
pliku można znaleźć datę, kurs maksymalny danego dnia. Zadanie polega na napisaniu funkcji przyjmującej kolekcję
zmiennych odpowiedniego typu i zwracającej indeks dnia, w którym najbardziej opłacało się kupić akcje. Przez opłacalność
rozumiemy różnicę pomiędzy kwotą zakupu a maksymalną ceną akcji w późniejszym terminie (po dniu zakupu). Skorzystaj
z poniższego szablonu dla swojej klasy (zauważ, że wczytywanie danych z pliku jest już napisane).
W funkcji main należy użyć napisanej funkcji i wypisać dzień (datę), w którym opłacało się kupić akcje.

Przykład

Dla następującego zbioru danych:

2011-11-28,372.35
2011-11-25,368.42
2011-11-23,374.51
2011-11-22,371.02
2011-11-21,370.00
2011-11-18,378.92

najbardziej opłacalnym terminem zakupu akcji jest 2011-11-21, gdyż różnica pomiędzy ceną akcji wtedy a maksylmalnym
kursem po tym dniu wynosi 4, 51 zł.

Wskazówka

Zwróć uwagę, iż dane w pliku są wpisane w odwrotnej kolejności niż możesz oczekiwać. W rozwiązaniu tego problemu
może pomóc odpowiedni sposób ładowania danych do listy. Aby dodać jakąś daną na pozycję zerową (przed wszystkie
poprzednie) należy skorzystać z lista.add(0, element).

Listing 1: Szablon rozwiązania zadania 2

i m p o r t j a v a . u t i l . L i s t ;
i m p o r t j a v a . u t i l . A r r a y L i s t ;
i m p o r t j a v a . i o . B u f f e r e d R e a d e r ;
i m p o r t j a v a . i o . F i l e R e a d e r ;
i m p o r t j a v a . i o . I O E x c e p t i o n ;
i m p o r t j a v a . u t i l . S t r i n g T o k e n i z e r ;

c l a s s A n a l i z a t o r G i e l d o w y

{

p u b l i c

s t a t i c v o i d main ( S t r i n g [ ]

a r g s )

{

Politechnika Wrocławska

Mateusz Lis

Strona 1 z ??

background image

Laboratorium Podstaw Programowania

Laboratorium VI

L i s t < S t r i n g > daty = new A r r a y L i s t < S t r i n g

> ( ) ; // daty

L i s t < Double > k u r s y = new A r r a y L i s t < Double > ( ) ; // ceny a k c j i o d p o w i a d a j a c e datom
t r y

{

B u f f e r e d R e a d e r w e j s c i e = new B u f f e r e d R e a d e r ( new F i l e R e a d e r ( ” g i e l d a . c s v ” ) ) ;
S t r i n g

l i n i a ; // dana l i n i a z p l i k u

w h i l e ( ( l i n i a = w e j s c i e . r e a d L i n e ( ) ) != n u l l )

{

S t r i n g T o k e n i z e r t o k e n = new S t r i n g T o k e n i z e r ( l i n i a , ” , ” ) ; // d z i e l i m y

l i n i e po p r z e c i n k a c h

S t r i n g d a t a =

t o k e n . nextToken ( ) ; // uzyskujemy d a t e

Double c e n a A k c j i = Double . p a r s e D o u b l e ( t o k e n . nextToken ( ) ) ; // o r a z c e n e a k c j i
// System . o u t . p r i n t l n ( d a t a + c e n a A k c j i ) ;

// w y p i s z na e k r a n

daty . add ( 0 , d a t a ) ;
k u r s y . add ( 0 , c e n a A k c j i ) ;
// t u t a j n a l e z y d o p i s a c w s t a w i a n i e danych do k o l e k c j i

}

}

c a t c h ( I O E x c e p t i o n e )

{

e . p r i n t S t a c k T r a c e ( ) ;

}
System . o ut . p r i n t l n ( daty . g e t ( z n a j d z ( k u r s y

) ) ) ;

}

p u b l i c

s t a t i c

i n t z n a j d z ( L i s t < Double > c o l l

)

{

A r r a y L i s t < Double > maks = new A r r a y L i s t < Double > ( ) ;

f o r ( i n t

i = 0 ;

i < c o l l . s i z e ( )

;

i++ )

{

maks . add ( ( znajdzMaks ( c o l l ,

i

) ) − c o l l . g e t ( i ) ) ;

}

i n t i n d e x = 0 ;
f o r ( i n t

i = 0 ;

i < c o l l . s i z e ( )

;

i++ )

{

i f

( maks . g e t ( i ) > maks . g e t ( i n d e x ) )

{

i n d e x = i ;

}

}

r e t u r n i n d e x ;

}

p u b l i c

s t a t i c Double znajdzMaks ( L i s t <Double> c o l l ,

i n t

s t a r t )

{

Double maks = c o l l . g e t ( s t a r t ) ;

f o r ( i n t

i = s t a r t ;

i < c o l l . s i z e ( ) ;

i++ )

{

i f

(

c o l l . g e t ( i ) > maks ) maks = c o l l . g e t ( i ) ;

}

r e t u r n maks ;

}

}

Zadanie 3

Celem tego zadania jest implementacja programu obsługi kont bankowych.
Na listingu na końcu tego zadania znajduje się implementacja klasy konto. Konto umożliwia następujące operacje:

Politechnika Wrocławska

Mateusz Lis

Strona 2 z ??

background image

Laboratorium Podstaw Programowania

Laboratorium VI

• wpłacanie pieniędzy,

• wypłacanie pieniędzy,

• udostępnianie stanu konta,

• udostępnianie numeru konta.

Napisz dwie klasy dziedziczące po klasie Konto:

Klasa KontoOszczedzaj

Klasa KontoOszczedzaj powinna dziedziczyć po klasie abstrakcyjnej Konto. Dodatkowe funkcjonalności klasy:

• konto oszczędnościowe ma oprocentowanie, które powinno zostać przyjęte jako argument konstruktora,

• metoda aktualizuj dla konta oszczędnościowego kapitalizuje odsetki do konta, doliczając oprocentowanie do aktual-

nego stanu (możesz pominąć podatek „Belki”). Doliczanie odsetek powinno odbywać się wg następującego wzoru:

S

n+1

= S

n

+ S

n

· k

(1)

gdzie:

S

n+1

to nowy stan konta,

S

n

to poprzedni stan konta,

k to wartość oprocentowania (k ∈ [0, 1]).

Klasa ROR

Klasa ROR (rachunek rozliczeniowo-oszczędnościowy). Dodatkowe funkcjonalności:

• ROR powinien mieć pole minimalnyStan (wartość określana w konstruktorze, po przekroczeniu którego, klient otrzy-

muje informację zwrotną,

• metoda aktualizuj klasy ROR powinna wyświetlać na ekranie powiadomienie, jeśli przekroczony został minimalny

stan.

Klasa Bank

Ostatnim krokiem realizacji zadania jest implementacja klasy Bank. Klasa powinna zawierać kolekcję Kont. Napisz dwie
metody:

• ZalozKonto() przyjmującą obiekt klasy konto i dodającą dane konto do banku.

• aktualizujKonta(), która dla każdego z dostępnych kont wywoła metodę aktualizuj() oraz wypisze stan każdego

z kont.

Na końcu w metodzie main() stwórz obiekt klasy Bank oraz dodaj kilka kont danego rodzaju (na konta powinny zostać
wpłacone i wypłacone jakieś kwoty). Wywołaj metodę aktualizujKonta().

Listing 2: Klasa Konto

p u b l i c a b s t r a c t

c l a s s Konto

{

p r o t e c t e d d o u b l e s t a n ;

// Aktualny s t a n konta

p r o t e c t e d i n t numerKonta ;

p u b l i c Konto ( i n t numerKonta )

{

s t a n = 0 . 0 ;

t h i s . numerKonta = numerKonta ;

}

Politechnika Wrocławska

Mateusz Lis

Strona 3 z ??

background image

Laboratorium Podstaw Programowania

Laboratorium VI

p u b l i c v o i d wplac ( d o u b l e kwota )

{

i f

( kwota > 0 )

s t a n += kwota ;

e l s e

System . o ut . p r i n t l n ( ” Nie mozna w p l a c i c

t a k i e j kwoty ” ) ;

}

p u b l i c v o i d wyplac ( d o u b l e kwota )

{

i f

( kwota > 0 )

s t a n −= kwota ;

// s t a n moze byc ujemny !

e l s e

System . o ut . p r i n t l n ( ” Nie mozna w y p l a c i c t a k i e j kwoty ” ) ;

}

p u b l i c d o u b l e d a j S t a n ( )

{

r e t u r n s t a n ;

}

p u b l i c d o u b l e dajNumerKonta ( )

{

r e t u r n numerKonta ;

}

p u b l i c a b s t r a c t v o i d a k t u a l i z u j ( ) ;

}

Politechnika Wrocławska

Mateusz Lis

Strona 4 z ??


Wyszukiwarka

Podobne podstrony:
PP Zad6-Poprawa
ZHP PP 1
Firma PP
Zagrożenia powodziowe zachowanie podczas powodzi PP
Lasery pp
Nawigacja fragmenty wykładu 4 ( PP 2003 )
osobowosc wyklad 4 pp
FM zaocz W7 8 pp
Psychologia Medyczna 1 pp
osobowosc wyklad 8 pp
Odpowiedzi Przykladowy arkusz PP Fizyka (2)
Matematyka PG PP kl2 MPZ sprawdzian 04A instrukcja
PP wykład w pigułce
2 BO 2 1 PP Przykłady Segregator [v1]
pp 1

więcej podobnych podstron