Laboratorium Podstaw Programowania
Laboratorium Poprawkowe
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żą). Wskazane jest robienie funkcji pomocniczych. Uważnie czytaj
treść zadań. W razie konieczności dopytaj prowadzącego.
1
Zadanie 1
Celem tego zadania jest napisanie programu rozwiązującego równanie kwadratowe postaci:
ax
2
+ bx + c = 0
(1)
Stwórz klasę Trojmian. Klasa powinna mieć trzy pola odpowiedzialne za każdy ze współczynników trójmianu kwadra-
towego (a, b oraz c) oraz dwa odpowiedzialne za przechowywanie jego rozwiązania. Klasa powinna mieć następujące
metody:
• Konstruktor. W konstruktorze klasa powinna przyjmować wartości współczynników trójmianu kwadratowego.
• rozwiaz - ta metoda nie powinna mieć żadnych parametrów i powinna zwracać wartość typu boolean w zależności
od tego, czy istnieją pierwiastki trójmianu o zadanych współczynnikach (true, jeśli istnieją i false w przeciwnym
przypadku). Metoda powinna ustawiać publiczne pola w klasie zawierające wartość pierwiastków trójmianu (po jego
rozwiązaniu).
Uwagi
• Aby obliczyć pierwiastek z liczby, skorzystaj z metody sqrt() klasy Math (java.lang.Math).
• Jeśli istnieje pierwiastek podwójny, obydwa rozwiązania powinny przyjąć tę samą wartość.
• Jeśli istnieje tylko jedno rozwiązanie, należy zwrócić true i ustawić tylko jedno pole.
• Jeśli istnieje nieskończenie wiele rozwiązań, należy zwrócić true nie ustawiając żadnego z pól.
• Jeśli nie istnieje żadne rozwiązanie należy zwrócić false.
2
Zadanie 2
Celem tego zadania jest napisanie prostego Translatora.
W pliku kot.txt dostępnym na eportalu znajduje się tekst napisany w języku polskim. Zadanie polega na napisaniu
programu korzystającego ze słownika w postaci java.util.Hashmap, którego zadaniem jest przetłumaczyć ten tekst na
język angielski. Algorytm tłumacza jest niezwykle prosty, iteruje on po wszystkich słowach z zadanego tekstu i jeśli
ma dane słowo w słowniku, do wyniku dodaje wartość ze słownika, jeśli zaś nie ma, do wyniku dodaj oryginalne słowo.
Program powinien wypisać tłumaczenie na ekran.
Przykład
Dla następującego zbioru danych:
Ala ma kota w głowie.
program powinien zwrócić (wypisać na ekranie) Ala has a cat in head.
Politechnika Wrocławska
Mateusz Lis
Strona 1 z 4
Laboratorium Podstaw Programowania
Laboratorium Poprawkowe
Wskazówka
Zwróć uwagę, iż słownik oraz wczytywanie danych z pliku są już zaimplementowane. Twoim zadaniem jest napisać tylko
algorytm tłumacza.
Skorzystaj z funkcji String.split(), która dzieli dany łańcuch znaków na podłańcuchy wykorzystując zadany znak.
Zwraca ona tablicę łańcuchów znaków.
Listing 1: Szablon rozwiązania zadania 2
import
j a v a
.
u t i l
.
HashMap
;
import
j a v a
.
u t i l
.
L i s t
;
import
j a v a
.
u t i l
.
A r r a y L i s t
;
import
j a v a
.
i o
.
B u f f e r e d R e a d e r
;
import
j a v a
.
i o
.
F i l e R e a d e r
;
import
j a v a
.
i o
.
I O E x c e p t i o n
;
public c l a s s
T r a n s l a t o r
{
public s t a t i c void
main
(
S t r i n g
[ ]
a r g s
)
{
// d e k l a r a c j a
s l o w n i k a
i
w y p e l n i e n i e s l o w a m i
HashMap
<
S t r i n g
,
S t r i n g
>
s l o w n i k
=
new
HashMap
<
S t r i n g
,
S t r i n g
>() ;
s l o w n i k
.
put
(
" kot "
,
" a cat "
) ;
s l o w n i k
.
put
(
" k o t a "
,
" a cat "
) ;
s l o w n i k
.
put
(
" ma "
,
" has "
) ;
s l o w n i k
.
put
(
" w "
,
" in "
) ;
s l o w n i k
.
put
(
" g
o w a "
,
" h e a d "
) ;
s l o w n i k
.
put
(
" g o w i e "
,
" h e a d "
) ;
// k o n i e c
s l o w n i k a
A r r a y L i s t
<
S t r i n g
>
s l o w a
=
new
A r r a y L i s t
<
S t r i n g
>() ;
// T u t a j n a l e z y p r z e c h o w a c s l o w a z p l i k u
try
{
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
(
" kot . txt "
) ) ;
S t r i n g
l i n i a
;
// dana
l i n i a
z p l i k u
while
( (
l i n i a
=
w e j s c i e
.
r e a d L i n e
( ) ) !=
n u l l
)
{
// T u t a j n a p i s z kod ,
k t o r y p o z w o l i w c z y t a c w s z y s t k i e s l o w a z
//
l i n i i
}
}
catch
(
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
( ) ;
}
// N a p i s z kod t l u m a c z a c y
t e k s t
w e j s c i o w y
}
}
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:
• wpłacanie pieniędzy,
• wypłacanie pieniędzy,
• udostępnianie stanu konta,
• udostępnianie numeru konta.
Napisz dwie klasy dziedziczące po klasie Konto:
Politechnika Wrocławska
Mateusz Lis
Strona 2 z 4
Laboratorium Podstaw Programowania
Laboratorium Poprawkowe
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
(2)
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). Powinien dziedziczyć po klasie Konto. 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ć listę 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
public abstract c l a s s
Konto
{
protected double
s t a n
;
// Aktualny s t a n k o n t a
private i n t
numerKonta
;
// zmienna prywatna !
public
Konto
(
i n t
numerKonta
)
{
s t a n
= 0 . 0 ;
t h i s
.
numerKonta
=
numerKonta
;
}
public void
wp l ac
(
double
kwota
)
{
i f
(
kwota
> 0 )
s t a n
+=
kwota
;
e l s e
System
.
o u t
.
p r i n t l n
(
" Nie m o z n a w p l a c i c t a k i e j k w o t y "
) ;
}
public void
wyplac
(
double
kwota
)
{
i f
(
kwota
> 0 )
s t a n
−=
kwota
;
// s t a n moze byc ujemny !
e l s e
Politechnika Wrocławska
Mateusz Lis
Strona 3 z 4
Laboratorium Podstaw Programowania
Laboratorium Poprawkowe
System
.
o u t
.
p r i n t l n
(
" Nie m o z n a w y p l a c i c t a k i e j k w o t y "
) ;
}
public double
d a j S t a n
( )
{
return
s t a n
;
}
public double
dajNumerKonta
( )
{
return
numerKonta
;
}
public abstract void
a k t u a l i z u j
( ) ;
}
Politechnika Wrocławska
Mateusz Lis
Strona 4 z 4