• Nie Znaleziono Wyników

I. Przykład tablicowania funkcji, zapis danych do pliku tekstowego

N/A
N/A
Protected

Academic year: 2021

Share " I. Przykład tablicowania funkcji, zapis danych do pliku tekstowego "

Copied!
3
0
0

Pełen tekst

(1)

Laboratorium z informatyki sem. II/ćw. 6 Wydział Transportu PW - 2020/21

Materiały do użytku wewnętrznego strona 1

INSTRUKCJA DO ĆWICZENIA 6

I. Przykład tablicowania funkcji, zapis danych do pliku tekstowego

Program oblicza wartości funkcji y = sin(x) dla x zmieniającego się od 0 do 1.5 z krokiem 0.1 Obliczone wartości są wyświetlane na ekranie i zapisywane do pliku tekstowego "wyniki.txt”

1. Utwórz nowy projekt typu Java Application, nadaj projektowi nazwę Projekt61 a klasie głównej - nazwę

Tablicowanie.

2. W celu zapisania wyników do pliku tekstowego, wykorzystamy klasę FileWriter z pakietu java.io; parametrem jej konstruktora jest nazwa pliku. Na początku metody main() zadeklaruj obiekt klasy FileWriter o nazwie wy, piszący do pliku "wyniki.txt":

FileWriter wy = new FileWriter("wyniki.txt");

3. Zaimportuj klasę FileWriter klikając w ikonę i wybierając pierwszą pozycję z listy rozwijanej (możesz też użyć polecenia Fix Imports lub skrótu <Ctrl+Shift+I>) .

4. Sygnalizowany jest błąd IOException, tym razem umieść deklarację w bloku try catch z obsługą wyjątku ogólnej klasy

Exception. Wykorzystamy przy tym metodę getMessage(), zwracającą wiadomość o wyjątku:

try{

FileWriter wy = new FileWriter("wyniki.txt");

} catch(Exception e) {System.out.println("Błąd "+e.getMessage());}

5. W bloku try ...dopisz instrukcje obliczania wartości funkcji sinus w przedziale <0, 1.5> z krokiem 0.1, wyprowadzając wynik tej operacji jednocześnie na ekran i do pliku.

System.out.println("Tablicowanie funkcji sinus");

wy.write("Tablicowanie funkcji sinus\r\n");

for (double x = 0; x < 1.51; x += 0.1) { System.out.println(x + "\t" + Math.sin(x));

wy.write(x + "\t" + Math.sin(x) + "\r\n");

}

wy.close();

Metoda write() obiektu klasy FileWriter zapisuje do pliku łańcuch znaków podany jako parametr.

Występujące w stałych tekstowych dwuznaki \r \n oraz \t reprezentują odpowiednio powrót karetki, znak nowej linii i znak tabulacji.

6. Uruchom program; w oknie Files odszukaj i otwórz w edytorze plik z wynikami lub posłuż się w tym celu poleceniem menu File|Open File.

7. Samodzielnie zmodyfikuj program tak, aby wyniki były wyprowadzane z czterema cyframi po kropce dziesiętnej.

II. Zapis danych do pliku o nazwie podanej z klawiatury

1. Na początku metody main() zadeklaruj zmienną klasy String o nazwie nazwaPliku, która dalej posłuży do przechowywania nazwy pliku do zapisu danych. Ponadto zadeklaruj pole we reprezentujące czytnik buforowany, który będzie wczytywać dane z klawiatury:

String nazwaPliku;

BufferedReader we = new BufferedReader(new InputStreamReader(System.in));

2. Na poczatku bloku try .. wyprowadź na ekran komunikat dla użytkownika

System.out.println("Podaj nazwę pliku do zapisu :");

3. Poniżej dopisz instrukcję wczytującą z klawiatury tekst i dopisującą rozszerzenie .txt nazwy pliku

nazwaPliku = we.readLine()+".txt";

4. Zmień deklarację obiektu klasy FileWriter tak, by zapis dotyczył pliku o podanej przez użytkownika nazwie:

FileWriter wy = new FileWriter(nazwaPliku);

5. Uruchom program i obejrzyj zawartość pliku wynikowego. Sprawdź działanie programu w przypadku podania niepoprawnej nazwy pliku.

III. Czytanie nazwy pliku z klawiatury – zastosowanie klasy Scanner

1. Zastąp czytnik buforowany we obiektem klasy Scanner reprezentującym klawiaturę. W tym celu usuń deklarację

BufferedReader we = new BufferedReader(new InputStreamReader(System.in)); zastępując ją następującą:

Scanner sc = new Scanner(System.in);

2. Zastęp instrukcję nazwaPliku = we.readLine()+".txt"; następującą: nazwaPliku= sc.next()+".txt";

3. Uruchom program sprawdź jego działanie.

IV. Czytanie danych z pliku tekstowego do tablicy

1. Utwórz nowy projekt i nadaj mu nazwę Projekt62a klasę główną nazwij OdczytDanych.

(2)

Laboratorium z informatyki sem. II/ćw. 6 Wydział Transportu PW - 2020/21

Materiały do użytku wewnętrznego strona 2

2. Tak jak w p.II.1. zadeklaruj zmienne nazwaPliku i we, a następnie wpisz dwie instrukcje - jedna z nich wyświetla komunikat dla użytkownika, druga czyta wpisaną z klawiatury nazwę pliku danych i dodaje do niej rozszerzenie właściwe dla plików tekstowych. Analogicznie do p. I.4 umieść obie instrukcje w bloku try .. catch

try{

System.out.print("Podaj nazwę pliku :");

nazwaPliku = we.readLine() + ".txt";

} catch(Exception e) {System.out.println("Błąd "+e.getMessage());}

3. Z foldera do dzisiejszego ćwiczenia umieszczonego w aplikacji Teams lub ze strony przedmiotu skopiuj do foldera projektu Projekt62 plik z danymi dane1.txt i obejrzyj jego zawartość. Plik zawiera liczby całkowite oddzielone spacjami i znakami nowej linii; pierwszą daną jest wartość całkowita, oznaczająca liczbę elementów w pliku.

4. Aby wczytać dane z pliku, posłużymy się klasą Scanner z pakietu java.util; parametrem konstruktora obiektu klasy

Scanner jest obiekt klasy File, który reprezentuje plik o wcześniej podanej nazwie.

W kolejnym wierszu bloku try .. catch utwórz obiekt skanera i przypisz go do zmiennej o nazwie sc instrukcją:

Scanner sc = new Scanner(new File(nazwaPliku));

Dokonaj importu użytych klas Javy poleceniem Fix Imports lub skrótem <Ctrl+Shift+I>.

5. W pierwszym wierszu w pliku do odczytu umieszczona została liczba równa ilości elementów w pliku, dlatego odczytamy ją w pierwszej kolejności. Posłuży ona do zadeklarowania tablicy jednowymiarowej t, do której wprowadzimy pozostałe elementy pliku. Dopisz kolejne instrukcje:

int n=sc.nextInt(); //wczytanie pierwszej danej z pliku int[] t=new int[n]; //deklaracja tablicy o n elementach

6. Następnie wyzeruj zmienną i orazwpisz instrukcję iteracyjną while, a w niej użyj metody nextInt() obiektu sc klasy

Scanner do wczytania kolejnych liczb całkowitych z pliku; poniżej pętli while wywołaj metodę zamykającą przeczytany plik:

int i = 0;

while (sc.hasNextInt()) { t[i] = sc.nextInt();

System.out.print( t[i] + " " );

i++;

}

sc.close();

W powyższym fragmencie programu wykorzystaliśmy trzy metody obiektu sc klasy Scanner: Metoda hasNextInt()

zwraca logiczną wartość true , jeżeli w pliku znajduje się kolejna liczba całkowita; w przeciwnym wypadku zwracana jest wartość false. Metoda nextInt() zwraca kolejną liczbą całkowitą wczytaną z pliku. Metoda close() zamyka plik czytany przez skaner. Dane wczytane z pliku są wyświetlane w jednym wierszu, oddzielone spacjami.

7. Aby po wyświetleniu wyników przejść do nowego wiersza, poniżej zamykającego nawiasu pętli while wywołaj metodę System.out.println() bez parametru.

8. Uruchom program i sprawdź jego działanie, podając jako nazwę pliku słowo dane1

9. Ponownie uruchom program, podając niewłaściwą nazwę pliku. Wystąpi wyjątek klasy FileNotFoundException. Przetestuj obsługę tego wyjątku. Zwróć uwagę na efekt użycia metody getMessage(), która zwraca tekst komunikatu opisującego wyjątek.

V. Czytanie danych z pliku tekstowego do tablicy dynamicznej typu ArrayList

Program czyta dane tekstowe z pliku i umieszcza je w dynamicznej tablicy o elementach typu String.. Liczba danych nie jest z góry znana. Po wczytaniu danych do tablicy, wykonamy przykładowe operacje na jej elementach.

1. Skopiuj Projekt62 tworząc projekt o nazwie Projekt63. Rozwiń foldery nowego projektu i zmień nazwę klasy głównej na Lista. Do foldera projektu Projekt63 skopiuj plik dane2.txt z foldera do dzisiejszego ćwiczenia umieszczonego w aplikacji Teams lub ze strony przedmiotu .

2. Zmodyfikuj treść metody main() usuwając deklaracje i pętle czytania danych, wpisane w punkcie IV.5 i IV.6.

3. Po deklaracji obiektu skanera sc (p.IV.4) zadeklaruj tablicę dynamiczną typu ArrayList, która będzie mogła przechowywać dane w postaci tekstów. Zaimportuj klasy List i ArrayList z pakietu java.util.

List<String> LT=new ArrayList< >();

4. Dopisz pętlę czytania danych z pliku do tablicy LT:

while (sc.hasNext()) { LT.add(sc.next());

} sc.close();

5. Wyświetl tablicę LT na ekranie

for (String s : LT) {

System.out.print (s + "\t"); } System.out.println();

(3)

Laboratorium z informatyki sem. II/ćw. 6 Wydział Transportu PW - 2020/21

Materiały do użytku wewnętrznego strona 3

6. Zmień elementy tablicy LT za pomocą wybranych metod klasy String; będą to

▪ zastąpienie tekstów krótszych niż 4 znaki napisem "????"

▪ zamiana wszystkich liter tekstu na duże dla tekstów rozpoczynających się literą a

▪ zastąpienie wszystkich liter f w tekście znakiem ♥

int i=0;

for (String s : LT) {

if (s.length() < 4) s="????";

if (s.charAt(0) == 'a') s = s.toUpperCase();

s = s.replace('f', '\u2665');

LT.set(i, s);

i++;

}

7. Dopisz instrukcję wyświetlania na ekranie tytułu „Tablica po zmianie” i elementów tablicy LT, tak jak w punkcie V.5. Uruchom program podając nazwę pliku danych dane2

8. Utwórz nowy plik tekstowy zawierający przykładowe dane i wykonaj program dla tych danych.

VI. Czytanie danych różnych typów z pliku tekstowego za pomocą obiektu klasy Scanner

1. Utwórz nowy projekt i nadaj mu nazwę Projekt64 a klasę główną nazwij OdczytDanych2.

2. Tak jak w p.II.1. zadeklaruj zmienne nazwaPliku i we, a następnie wpisz dwie instrukcje: jedna z nich wyświetla komunikat dla użytkownika, druga czyta wpisaną z klawiatury nazwę pliku danych i dodaje do niej rozszerzenie właściwe dla plików tekstowych. Umieść obie instrukcje w bloku try .. catch w następujący sposób:

try{

System.out.print("Podaj nazwę pliku :");

nazwaPliku = we.readLine() + ".txt";

} catch(Exception e) {System.out.println("Błąd "+e.getMessage());}

3. Utwórz plik tekstowy o nazwie dane.txt w następujący sposób: kliknij na nazwie projektu prawym przyciskiem myszy i wybierz opcję new|Other. Z okna Categories wybierz opcję Other , natomiast z okna File Types wybierz opcję Empty file. Zapisz plik w folderze projektu pod nazwą dane.txt.

4. Do utworzonego pliku wpisz w jednym wierszu 4 dane oddzielone spacjami: liczbę całkowitą, liczbę rzeczywistą (separatorem dziesiętnym liczby rzeczywistej musi być przecinek !!!!) , dowolny tekst nie zawierający spacji oraz dowolny tekst zawierający dowolne znaki w tym spacje. Zapisz zmiany w pliku.

5. W kolejnym wierszu bloku try … catch utwórz obiekt skanera i przypisz go do zmiennej sc instrukcją:

Scanner sc = new Scanner(new File(nazwaPliku));

6. Następnie napisz instrukcje wczytujące kolejne dane z pliku jednocześnie przypisując je zmiennym odpowiednich typów:

int n=sc.nextInt(); //wczytanie pierwszej danej z pliku , która jest liczbą całkowitą

double m=sc.nextDouble(); //wczytanie drugiej danej z pliku, która jest liczbą rzeczywistą String s=sc.next (); //wczytanie trzeciej danej z pliku, która jest tekstem bez spacji

String s2=sc.nextLine (); //wczytanie czwartej danej z pliku, która jest tekstem ze spacjami sc.close();

7. Samodzielnie wyświetl na ekranie odczytane wartości, a następnie zapisz je do pliku o nazwie podanej z klawiatury.

Zadania do samodzielnego wykonania

1. Napisz program, który wczyta tekst z klawiatury do zmiennej typu String, a następnie wyświetli długość tekstu, jego pierwszy i ostatni znak oraz zamieni pierwszy znak na dużą literę bez zmiany pozostałych znaków.

2. Napisz program, który utworzy dwuwymiarową tablicę typu int o 6 wierszach i 6 kolumnach. Tablicę wypełnij losowo wartościami 0 lub 1. Wyświetl tablicę na ekranie i zapisz tablicę wierszami do pliku tekstowego o nazwie podanej z klawiatury.

3. Napisz program, który:

▪ przeczyta liczby całkowite z pliku tekstowego do tablicy dynamicznej typu ArrayList,

▪ umieści liczby dodatnie w tablicy X, a ujemne w tablicy Y,

▪ wyświetli na ekranie elementy poszczególnych tablic z odpowiednimi komentarzami Przygotuj plik z danymi do testowania programu.

Cytaty

Powiązane dokumenty

Połączenie wybranych metod geometrii fraktalnej z elementami modelowania przestrzennego jest interesujące z graficznego punktu widzenia, ale także użyteczne z uwagi na

Głównym celem ćwiczenia jest przeprowadzenie pełnej charakterystyki struktury krystalicznej przykładowego związku w oparciu o plik CIF przy wykorzystaniu programu

Utwórz zapytanie wyświetlające listę z kodami oraz nazwami ośrodków znajdujących się w miejscowościach, których nazwy zaczynają się na literę „K” lub „Z”.

Uwagę powyŜszą czynimy dlatego, Ŝe moŜna napisać aplikację, dla której wartości do wczytania z pliku znajdują się obok siebie oddzielane spacjami lub przecinkami.. Wtedy w

Przeedytujmy plik xml, korzystając z Notatnika, zmniejszając wartości właściwości o połowę. Odczytajmy serializacją plik xml po zmianie i wyświetlmy

Do wszystkich klas definiujących stopnie, czyli do klasy bazowej Stopien_walu oraz do klas pochodnych StopienFazaZLewej, StopienFazaZPrawej dodamy metodę XMLZapisz –

1, obsługującej zdarzenie btnZapisz_Click() musimy jawnie wskazać o jaki obiekt nam chodzi stąd wpisujemy nazwę obiektu, w tym przypadku

Wektory tworzymy za pomoc¡ konstruktora - funkcji c(elementy) np: wektor &lt; −c(3, 4, 2, 4, 5, 7), gdzie kolejne elementy wektora o nazwie wektor s¡ indeksowane od warto±ci 1, i