Jak zacząć programować w Javie. Java od zera: piszemy pierwszy program

Programowanie w języku Java

Chcesz nauczyć się programować, wybrałeś język Java i zastanawiasz się jak zacząć programować w Javie? Oto szybki sposób na start.

Java: jak zacząć?

Po pierwsze liczą się dobre chęci. Potrzebujesz tylko komputera oraz JDK. Warto też zainstalować program, w którym będziesz pisał kod w Javie.

Krok 1. Java Development Kit JDK

 

Pierwszy krok to pobranie i instalacja Java Development Kit, czyli w skrócie JDK. Pobierz go ze strony http://www.oracle.com/technetwork/java/javase/downloads/index.html

 
Pobieranie JDK
 
Akceptujemy teraz licencję i wybieramy system. Poniżej pobieranie JDK dla systemu Windows:
Akceptacja licencji i pobieranie JDK
 
Instalacja nie przysparza problemów, po prostu klikamy Next, by przechodzić Dalej.
 

Krok 2. Zintegrowane środowisko programistyczne

Gdy JDK jest już zainstalowane przechodzimy do instalacji środowiska. Kod swoich programów możesz pisać nawet w zwykłym Notatniku, tylko po co …? Możesz wykorzystać nieco bardziej rozbudowane edytory takiej jak Notepad++ czy  edytor Sublime Text.
Dużo jednak wygodniej jednak skorzystać ze zintegrowanego środowiska programistycznego, w skrócie IDE. Przykładem takiego środowiska jest Eclipse jak również NetBeans.

Eclipse
Jednym z najbardziej popularnych „programów do programowania w javie” jest Eclipse.
Program możesz pobrać darmowo ze strony eclipse.org , wystarczy kliknąć Download.

Wybierasz „Eclipse IDE for Java Developers, naciskasz przycisk Install i akceptujesz licencję klikając „Accept Now”.

Gdy instalacja dobiegła końca klikasz przycisk „Launch”, by uruchomić program. Wybierasz lub potwierdzasz też katalog workspace.

Program Eclipse uruchamia się i wita nas ekran powitalny. Ja od razu zamykam zakładkę Welcome i przechodzeę do tworzenia programu / projektu.

Krok 3. Zaczynamy pracę

Zakładam, że mamy już uruchomiony program Eclipse. Zamykamy okno powitalne.

Projekt w Javie tworzymy wybierając z górnego menu: File> New>Java Project

W otwartym oknie w polu Project Name wpisz nazwę dla tworzonego projektu. W przykładzie używam nazwy Nauka, pamiętaj by nazwa projektu rozpoczynała się wielką literą. Kliknij Finish, bu utworzyć nowy projekt (w tym momencie nie będziemy zajmować się wyjaśnianiem i omawianiem poszczególnych opcji środowiska Eclipse).

Klikamy teraz prawym klawiszem myszy na nazwie projektu (u mnie Nauka) i wybieramy
New > Class:

W otwartym oknie nadajemy nazwę, zaznaczamy

W tym momencie powinniśmy zobaczyć już kod programu:

O tym jak napisać swój pierwszy program przeczytasz w kolejnym wpisie. Zapraszam …

Uwaga. Jest to pierwszy wpis z całej serii dotyczącej nauki programowania w Javie. Seria skupia się na podstawowych, praktycznych aspektach języka. Wszystkie materiały powstały z myślą o uczniach szkoły średniej, a dokładniej liceum ogólnokształcącym z rozszerzoną informatyką. Uczniowie tej szkoły mogą zdawać maturę z informatyki, wcześniej wybierając i deklarując język programowania. Jednym z języków programowania zdawanych na maturze jest właśnie Java, a jedynym dostępnym edytorem jest Eclipse.

SQL. Grupowanie wierszy Group by, Having

Programowanie w języku Java

Tabela: pracownicy
pracownik_id
imie
nazwisko
stanowisko_id
wydzial_id
pensja
prowizja

Grupowanie wierszy

Do tego momentu funkcje agregujące wykonywały swoje operacje traktując dane jako niezróżnicowane i jednolite typy informacji. Na przykład obliczanie średniej prowizji dla wszystkich pracowników dotyczyło czytania wszystkich wierszy w kolumnie prowizja. Jednak możemy przyjąć inny scenariusz,w którym potrzebne jest obliczanie średniej  prowizji dla pracowników każdego wydziału.

Klauzula Group by

Używając klauzuli GROUP BY możemy podzielić wiersze w tabeli ma małe grupy. I wtedy użyć funkcji agregujących do uzyskana wyników dla poszczególnych grup.

Zadanie 6: rozwiązanie
Oblicz średnią prowizję dla pracowników w poszczególnych wydziałach.

SELECT wydzial_id, AVG (pensja)
FROM pracownicy
GROUP BY wydzial_id;

Ponieważ nie ma klauzuli WHERE zwracane są wszystkie wiersze z tabeli pracownicy. Następnie wiersze są grupowane według wydzial_id, więc funkcja AVG jest stosowana do kolumny pensja obliczając średnią pensję dla każdego wydziału.

Uwaga. Kiedy używasz GROUP BY upewnij się iż wszystkie kolumny, które nie mają funkcji agregujących a są wymienione w SELECT, są zawarte w klauzuli GROUP BY.

Czasami możesz potrzebować wyświetlić wyniki dla grup bez grup.

Zadanie 7
Wyświetl całkowitą sumę wynagrodzeń, które są wypłacane poszczególnym stanowisko w poszczególnych wydziałach

SELECT wydzial_id, stanowisko_id, sum(pensja)
FROM pracownicy
GROUP BY wydzial_id, job_id;

Najpierw tabela pracowników podzielona jest ze względu na id_wydziału, a następnie każda z tych grup jest pogrupowana według stanowisk.
Zauważ,  że GROUP BY grupuje wiersze lecz nie gwarantuje uporządkowania wyników. Aby posortować grupowania użyj klauzuli ORDER BY.

SELECT wydzial_id, stanowisko_id, sum(pensja)
FROM pracownicy
GROUP BY wydzial_id, job_id
ORDER BY job_id;

Klauzula Group By:

  • wszystkie kolumny w klauzuli SELECT, które nie są użyte w funkcjach agregujących muszą być użyte w klauzuli GROUP BY
  • używając klauzuli WHERE można wyłączyć wiersze zanim przydzieli się je do grup. Nie można zatem użyć Where by ograniczyć grupy np:SELECT wydzial_id, AVG(pensja)
    FROM pracownicy
    WHERE AVG(pensja)>4000
    GROUP BY wydzial_id;
  • nie można używać aliasu kolumny w klauzuli GROUP BY np:
    SELECT wydział_id as wydz, AVG(pensja)
    FROM pracownicy
    GROUP BY wydz;

Poodbnie jak klauzuli WHERE, można użyć klauzuli having aby ograniczać grypy.

Klauzula HAVING

Zadanie 8

Wyświetl maksymalne pencsje w wydziłach, które są wyższe niż 8000.

Jak to zrobić? Należy znależć maksymalną prowizję dla każdego wydziału poprzez grupowanie według numeru wydziału. W tej systuacji nie możemy jednak zastosowac klauzuli Where (patrz punkty wyżej).

SELECT wydzial_id , MAX(pensja)
FROM pracownicy
GROUP BY wydział_id
HAVING MAX(pensja)>8000;

Jak wykonywane jest to zapytanie? Gdy używasz HAVING Serwer Oracle wykonuje następujące kroki:

  1. Najpierw wiersze są grupowane zgodnie z GROUP BY
  2. Następnie do grup zastowawna jest funkcja agregująca (MAX)
  3. Grupy, które spełniają krytera HAVING są wyświetlane

Zadanie 9
Wyświetl raport obliczający średnią pensję w każdym wydziale i wtedy wyświetlający maksymalną średnią pensję.

SELECT MAX(AVG(pensja))
FROM pracownicy
GROUP BY wydzial_id;

Zauważ, że klauzula GROUP BY jest obowiązkowa podczas zagnieżdżania funkcji grupujących.

SQL. Funkcje agregujące Avg, Count, Max, Min, Sum, Nvl

Tabela: pracownicy
pracownik_id
imie
nazwisko
stanowisko_id
wydzial_id
pensja
prowizja

Zadanie 1
Wykonaj raport dotyczący minimalnej, maksymalnej i średniej pensji oraz sumie miesięcznych zarobków hadlowców z działu sprzedaży.

 

Funkcje agregujące

Wykonanie tego raportu wymaga zastosowania operatorów matematycznych na kolumnie pensja i wybranych rekordach tabeli pracownicy.

SQL udostępnia funkcje agregujące, które operują na zbiorze wierszy i zwracają jednen wynik dla grupy.

SELECT AVG(pensja), MAX(pensja), MIN(pensja), SUM(pensja)
FROM pracownicy
WHERE stanowisko_id Like ‚%HAND%’;

AVG
COUNT – zlicza ilość wartości nie NULL
MAX – zwraca maksymalną wartość ignorując wartości NULL
MIN – zwraca minimalną wartość ignorując wartości NULL
SUM – zwraca sumę wartości ignorując wartości NULL

Zadanie 2
Wyświetl pracownika, który pracuje w firmie najdłużej i najkrócej.

SELECT MIN(data_zatrudnienia), MAX(data_zatrudnienia)
FROM pracownicy;

Zadanie 3
Wyświetl liczbę pracowników, którzy otrzymują prowizję w wydziale nr 8

SELECT COUNT (prowizja_proc)
FROM pracownicy
WHERE wydzial_id=8;

Zadanie 4
Utwórz raport, który wyświetli liczbę wydziałów, które zatrudniają pracowników (czyli nie chcesz zliczyć oddziałów, które nie mają pracowników).

SELECT COUNT (DISTINCT wydzial_id)
FROM pracownicy;

Jak pamiętasz funkcje agregujące ignorują wartości NULL.

Zadanie 5
Oblicz średnią prowizję otrzymywaną przez pracowników

SELECT AVG(prowizja_proc)
FROM employess;

Powyższe zapytanie zwróci średnią dla pracowników, którzy otrzymują prowizję, a nie dla wszystkich pracowników. Pamiętaj, że funkcje agregujące ignorują wartości NULL. Jeśli chcesz otrzymać poprawną średnią użyj funkcji Nvl.

Aby zmusić funkcje agregujące do włączenia wartości NULL należy używać funkcji NVL.

Powyższe zapytanie powinno wyglądać tak:
SELECT AVG (NVL(prowizja_proc,0))
FROM pracownicy;

W tym zapytania dla każdego pracownika, który nie otrzymuje prowizji, podstawiana jest wartość 0. Średnia jest wtedy obliczana jako całkowita prowizja wypłacana wszystkim pracownikom podzielona przez ilość wszystkich pracowników w firmie. Średnia jest obliczana na podstawie wszystkich wierszy w tabeli, niezależnie od tego czy wartości null są przechowywane w kolumnie prowizja_proc.

Zadanie 6
Oblicz średnią prowizję dla pracowników w poszczególnych wydziałach.

Aby napisać to zapytanie potrzebujemy czegoś więcej niż tylko funkcji obliczającej średnią, czyli AVG. Musimy, w jakiś sposób wyodrębnić średnią dla pracowników poszczególnych wydziałów, a nie wszystkich pracowników firmy. W tym przypadku potrzebujemy funkcji grupujących wiersze. O funkcjach tych przeczytasz we wpisie Podstawy SQL. Grupowanie wierszy

 

 

 

 

Oracle. Darmowa baza danych do nauki

Darmowa baza danych Oracle: instalacja i nauka

Darmowa baza  danych Oracle

Czy istnieje jakaś darmowa wersja bazy Oracle, którą można pobrać i używać do nauki?

Tak, jak najbardziej

Pobieranie plików

Możemy skorzystać chociażby z udostępnionej przez Oracle wersji: Oracle Database Express Edition 11g Release 2

Pamiętajmy również by pobrać Oracle SQL Developer.

Aby  pobrać plik konieczne jest zaakceptowanie licencji, czyli oznaczenie “Accept License Agreement” oraz założenie konta.

Pobieramy Oracle Database EE 11g w wersji odpowiedniej na nasz system operacyjny. W moim przypadku to Windows 64bitowy.

Pobieramy również Oracle SQL Developer. Uruchomienie programu wymaga zainstalowanej Javy, dlatego warto pobierać od razu wersję SQL Developer z Javą czyli “SQL Developer with JDK included”:

Powinniśmy mieć teraz dwa pliki, które należy rozpakować:

OracleXE112_Win64.zip

sqldeveloper-17.3.1.279.0537-x64.zip

Instalacja bazy danych Oracle 11g oraz SQL Developer

W rozpakowanym folderze znajdziemy katalog Disk 1 a w nim instalator. Po uruchomieniu pliku setup.exe możemy zmienić miejsce instalacji bazy oraz ustawiamy hasło dostępu.

Warto też spojrzeć na informacje:

Destination Folder: C:\oraclexe\

Oracle Home: C:\oraclexe\app\oracle\product\11.2.0\server\

Oracle Base:C:\oraclexe\

Port for ‘Oracle Database Listener’: 1521

Port for ‘Oracle Services for Microsoft Transaction Server’: 2030

Port for ‘Oracle HTTP Listener’: 8080

Programu SQL Developer nie instalujemy. Wystarczy rozpakować pobrany folder. Aby uruchomić program wystarczy uruchomić plik sqldeveloper.exe. Pamiętajmy również, że uruchomienie programu wymaga zainstalowania Javy.

SQL*Plus

W skrócie możemy napisać, iż SQL*Plus służy do wysyłania zapytań do bazy danych.

Jeśli oprogramowanie Oracle Database 11g zainstalowano w systemie Windows, to aby uruchomić SQL Plus należy kliknąć “Run SQL Command Line”:

Zalogujemy się do bazy jako użytkownik “system” mający uprawnienia do tworzenia nowych użytkowników, tabel i pakietów PL/SQL. Hasło dostępu dla tego użytkownika ustawialiśmy podczas instalacji. z

connection system/haslo

Sposoby zapisu algorytmu

Algorytmy powinny być tak przedstawiane, aby było możliwe ich jednoznaczne odczytanie i zastosowanie. Niektóre algorytmy można opisać słownie korzystając z języka potocznego. Jest to proste zwłaszcza wtedy, gdy wykonawcą algorytmów ma być człowiek. Pamiętajmy jednak, iż informatyka zajmuje się opracowywaniem algorytmów, których wykonanie powierzone zostaje komputerom.

Z czego składa się algorytm? 
Algorytm zawiera opis danych, opis wyników oraz plan działania, czyli przetworzenia danych. Plan ten można przedstawić w postaci ciągu czynności, które muszą być wykonane w określonej kolejności. Opis czynności występujących w algorytmie nazywamy instrukcjami.

Algorytm =  opis danych+- opis wyników+ plan działania, przetworzenia danych

Sposoby zapisu algorytmów:

  • opis słowny
  • lista kroków
  • pseudojęzyk, pseudokod
  • schemat blokowy
  • drzewo (drzewo algorytmu)
  • język programowania 

Opis słowny

Przykład. Algorytm znajdujący średnią arytmetyczną dwóch liczb rzeczywistych
Weź dwie liczby i dodaj je do siebie. Otrzymany wynik  przez 2.

Lista kroków

Lista kroków  to najprostszy i jednocześnie najbardziej naturalny  sposób zapisywania algorytmu. Polega na opisie reguł postępowania za pomocą kolejnych kroków, punktów. Sposób często stosowany chociażby na lekcjach matematyki, na których nauczyciel podaje schemat rozwiązania zadania danego typu.

Elementem charakterystycznym w tym sposobie zapisu jest numeracja poszczególnych kroków (wierszy).
 
Przykład. Algorytm znajdujący średnią arytmetyczną dwóch liczb rzeczywistych

Krok 1. Pobierz pierwszą liczbę.
Krok 2. Pobierz drugą liczbę.
Krok 3. Dodaj liczby do siebie.
Krok 4. Wynik sumowania podziel przez 2.
Krok 5. Wyświetl wynik.
Krok 6. Zakończ

Powyższy algorytm możemy zapisać również za pomocą listy kroków pomijając słowa krok:
1. Pobierz pierwszą liczbę.
2. Pobierz drugą liczbę.
3. Dodaj liczby do siebie.
4. Wynik sumowania podziel przez 2.
5. Wyświetl wynik.
6. Zakończ

Pseudojęzyk, pseudokod

Pseudojęzyk to sposób  pośredni między listą kroków a językiem programowania. Zwykle zapis podobny jest do któregoś z popularnych jezyków programowania, ale jest mniej formalny.

Schemat blokowy

Co to jest algorytm. Podstawy algorytmów

CO TO JEST ALGORYTM ?


Na lekcjach matematyki czy fizyki często słyszymy zdanie „rozwiąż zadanie”. Większość tych zadań rozwiązujemy według pewnych schematów. Najpierw wypisujemy dane i zastanawiamy się do jakiego celu dążymy, a więc jaki ma być wynik. Następnie wypisujemy wzory łączące dane z szukanymi bądź twierdzenia, które można zastosować.

Przed koniecznością rozwiązywania zadań stajemy również poza szkołą. Robimy to w każdej innej dziedzinie naszego życia, na przykład:

  • telefonując do koleżanki i zapraszając ją na ciasto
  • gotując jajko na twardo
  • kupując piłkę w sklepie
  • znajdując najniższego ucznia w klasie
  • pisząc wypracowanie

Również przy takim typie zadań musimy określić dane i warunki, które muszą one spełniać. formułujemy także wynik, który pragniemy uzyskać.

Algorytm to przepis rozwiązania zadania, zawierający opis danych wraz z opisem czynności, które należy wykonać z tymi danymi, aby osiągnąć zamierzony cel.

CECHY ALGORYTMU

Algorytm musi być:

  • poprawny, tzn. dla każdego poprawnego zestawu danych, po wykonaniu skończonej liczby czynności, prowadzi do poprawnych wyników.
  • jednoznaczny- w każdym wypadku jego zastosowania, dla tych samych danych uzyskamy ten sam wynik
  • szczegółowy, aby wykonawca algorytmu rozumiał opisane czynności i potrafił je wykonać
  • uniwersalny, aby służył do rozwiązywania pewnej grupy zadań, a nie tylko jednego konkretnego przypadku zadania.

ETAPY ROZWIĄZYWANIA PROBLEMÓW


W procesie rozwiązywania każdego zadania możemy wyróżnić pewne etapy, które nas do niego prowadzą.

Etapy rozwiązywania problemów:
Sformułowanie zadania
Określenie danych wejściowych
Określenie celu, czyli wyniku
Poszukiwanie metody rozwiązania, czyli algorytmu
Przedstawienie algorytmu w postaci:
opisu słownego
listy kroków
schematu blokowego
języka programowania
Analiza poprawności rozwiązania
Testowanie rozwiązania dla różnych danych. Ocena efektywności przyjętej metody.
DZIAŁANIA NIEALGORYTMICZNE
Zastanów się: Czy wszystkie działania są algorytmiczne ?
Czy dla każdego zadania można skonstruować algorytm? Czy rozwiązanie każdego zadania polega na wykonywaniu jednoznacznie opisanych, ściśle określonych czynności? Oczywiście, że nie. Istnieją zadania, których realizacji nie można ująć w ramy jakiegoś planu działania. Taki charakter ma np. każda twórczość artystyczna. Konieczna jest do tego wyobraźnia i twórcze działanie, a na to nie ma przepisu.

BUDOWA ALGORYTMÓW

Algorytmy powininny być tak przedstawiane, aby było możliwe ich jednoznaczne odczytanie i zastosowanie. Niektóre algorytmy można opisać w języku potocznym, zwłaszcza wtedy, gdy jego wykonawcą ma być człowiek (w informatyce zajmujemy się opracowywaniem algorytmów, których wykonanie powierzamy komputerom).

Z czego składa się algorytm?
Zawiera on opis danych, opis wyników oraz plan działania, czyli przetworzenia danych. Plan ten można przedstawić w postaci ciągu czynności, które muszą być wykonane w określonej kolejności. Opis czynności występujących w algorytmie nazywamy instrukcjami.

ALGORYTMY Z ŻYCIA CODZIENNEGO

Zastanów się jak ugotować jajko na miękko. Na początku opracowywania algorytmu przyjmijmy założenie, że używamy kuchenki gazowej, posiadamy garnek i wodę. Oczywiście niezbędne jest też samo jajko. Zakładamy również, że nic nie utrudni samej czynności, to znaczy np. w trakcie gotowania nie zostaniemy pozbawieni dopływu gazu, czy też osoba nie wie co to garnek.

Przykład 1. Przykład algorytmu z życia codziennego, przykład algorytmu liniowego
Opracuj algorytm gotowania jaja na miękko.

Algorytm ten ma postać:
Wlać do garnka zimną wodę.
Zapalić gaz.
Gotować wodę do wrzenia.
Włożyć jajko.
Odczekać trzy minuty.
Zgasić gaz.
Wyjąć jajko

ALGORYTMY LINIOWE
Spójrz na algorytm wyżej. Ma on prostą postać. Składa się z ciągu instrukcji, które są wykonywane jedna po drugiej w kolejności, jaka wynika z ich następstwa w zapisie algorytmu. Taki algorytm nosi nazwę algorytmu liniowego (sekwencyjnego) .

Przykład 2. Przykład algorytmu liniowego
Opracuj algorytm telefonicznego zaproszenia koleżanki na ciasto. Numer telefonu : 666-22-88.

Wiesz już jak wyglądał poprzedni algorytm oraz co to jest algorytm liniowy. W tym przypadku zrobimy założenie, że nic nie utrudni połączenia (a więc już za pierwszym razem zostaniemy połączeni z wybraną osobą), a wykonawca czynności zna cyfry i wie jak wybiera się je z tarczy telefonu.

Oto jak wygląda algorytm (wersja 1):
Podnieś słuchawkę.
Wybierz cyfrę 6.
Wybierz cyfrę 1.
Wybierz cyfrę 6.
Wybierz cyfrę 2.
Wybierz cyfrę 2.
Wybierz cyfrę 2.
Wybierz cyfrę 2.
Przekaż informacje.
Odłóż słuchawkę.
Algorytmy liniowe mają opisy składające się z kroków, które nie zależą od żadnych warunków i są wykonywane w zapisanej kolejności. Istnieją jednak sytuacje, w których dalsze postępowanie w algorytmie zależy od spełnienia, bądź nie, określonych warunków. Czasami musimy powtórzyć pewne kroki algorytmu kilka razy.

ALGORYTMY WARUNKOWE

W rzeczywistości, większość algorytmów ma bardziej rozbudowaną strukturę. Często występują w nich instrukcje, których wykonanie uzależnione jest od spełnienia pewnego warunku lub też spełnienie pewnego warunku powoduje wykonanie jednej instrukcji, a niespełnienie go -innej. Taką instrukcję nazywamy instrukcją warunkową. Działa ona według jednego z dwóch przedstawionych schematów:

Jeśli spełniony jest warunek W, wykonaj instrukcję A.
Jeśli spełniony jest warunek W, to wykonaj instrukcję A; w przeciwnym razie wykonaj instrukcję B.

Instrukcja A i B opisuje jedną instrukcję lub instrukcję składającą się z ciągu instrukcji wykonywanych sekwencyjnie. Instrukcja warunkowa pozwala dokonać wyboru jednej z dwóch dalszych dróg wykonania algorytmu.

Przykład 3. Przykład algorytmu warunkowego
Popraw opracowany wcześniej algorytm tak, aby uwzględniał sytuację, gdy po wybraniu numeru jest on zajęty lub połączenie okazało się błędne.

Kiedy słychać sygnał zajętości numeru, a więc nie udało się uzyskać połączenia trzeba Odłożyć słuchawkę. Tak samo postępujemy, gdy nawiązane zostało połączenie z innym Numerem.

Aby zrealizować taką sytuację zastosujemy instrukcję warunkową. Zrobimy to po to, aby opisać czynności, powinny być wykonane wtedy kiedy zostało nawiązane poprawne połączenie, jak również nie zostało nawiązane. Zauważ, że wtedy wykonawca znajdzie się w punkcie wyjścia, czyli jakby w ogóle nie podjął próby telefonowania.

Algorytm może mieć postać taką (wersja 2):
Podnieś słuchawkę.
Wybierz cyfrę 6.
Wybierz cyfrę 1.
Wybierz cyfrę 6.
Wybierz cyfrę 2.
Wybierz cyfrę 2.
Wybierz cyfrę 2.
Wybierz cyfrę 2.
Czy połączyłeś się z koleżanką ?
Jeśli TAK, to przejdź do kroku 10.
Jeśli NIE, to przejdź do kroku 11.
Zaproś koleżankę.
Odłóż słuchawkę.

ALGORYTMY ITERACYJNE

Instrukcja iteracyjna – ze znaną ilością powtórzeń
Przyjrzyj się uważnie algorytmowi. Zauważyłeś, że istnieją tu powtarzające się instrukcje, aż czterokrotnie występuje „Wybierz cyfrę 2”.
Takie wielokrotne powtarzanie niektórych instrukcji jest cechą charakterystyczną wielu algorytmów, jednak nie zawsze (tak jak w tym algorytmie) możemy określić dokładnie liczbę powtórzeń. Może ona zależeć od spełnienia pewnych warunków. Wielokrotne powtarzanie instrukcji umożliwiają instrukcje iteracyjne (pętle) . Działa ona według schematu:

Wykonuj instrukcję A dokładnie n razy.

Przykład 4. Przykład algorytmu iteracyjnego.
Popraw opracowany wcześniej algorytm tak, aby sekwencję jednakowych czynności zastąpić pętlą.

Oto algorytm (wersja 3):
Podnieś słuchawkę.
Wybierz cyfrę 6.
Wybierz cyfrę 1.
Wybierz cyfrę 6.
Wykonaj czynność cztery razy
Wybierz cyfrę 2.
Czy połączyłeś się z koleżanką ?
Jeśli tak, to przejdź do kroku 7.
Jeśli nie, to przejdź do kroku 8.
Zaproś koleżankę.
Odłóż słuchawkę.
Działanie algorytmu może zakończyć się na dwa różne sposoby, albo uzyskamy połączenie z koleżanką i zaprosimy ją na ciasto, albo nie połączymy się i wykonanie algorytmu ograniczy się tylko do wykręcenia numeru.
Jak widzisz zastosowanie pętli zmienia sposób zapisu algorytmu, nie zmienia się jednak jego działanie.

Instrukcja iteracyjna – ze spełnieniem warunku
Przykład 5. Przykład algorytmu iteracyjnego warunkowego.
Uwzględnij w opracowanym wcześniej algorytmie przypadek braku połączenia lub nawiązanie nieprawidłowego połączenia.

W poprzednim algorytmie w przypadku uzyskania nieprawidłowego połączenia bądź jego braku, przechodziliśmy do ostatniego kroku , w którym odkładaliśmy słuchawkę. Kończyło się Działanie algorytmu. W tej sytuacji powinniśmy rozpocząć raz jeszcze jego wykonywanie, nie zostało to jednak opisane w konstrukcji.
Rozbudujemy teraz algorytm, tak by powtarzano wybieranie numeru aż do uzyskania połączenia. Dopiszemy w tym celu polecenie będące drugim rodzajem instrukcji iteracyjnej:

Powtarzaj wykonywanie instrukcji A aż do spełnienia warunku W.

Czym jest instrukcja A, czym warunek W ?
Instrukcja A – podniesienie słuchawki, wybranie numeru
Warunek W – uzyskanie połączenia z wybranym numerem

Algorytm (wersja 4):
Czy słuchawka jest odłożona ?
Jeśli tak, to przejdź do kroku 2.
Jeśli nie, to odłóż słuchawkę.
Podnieś słuchawkę.
Wybierz cyfrę 6.
Wybierz cyfrę 1.
Wybierz cyfrę 6.
Wykonaj czynność cztery razy
Wybierz cyfrę 2.
Czy połączyłeś się z koleżanką ?
Jeśli tak, to przejdź do kroku 8.
Jeśli nie, to przejdź do kroku 9.
Zaproś koleżankę.
Odłóż słuchawkę.
W algorytmie telefonicznego zaproszenia koleżanki dodaliśmy instrukcję, która uwzględniła, że po nieudanej próbie uzyskanie połączenia należy odłożyć słuchawkę, a dopiero później ponownie ją podnieść i spróbować raz jeszcze. W przypadku pierwszej próby nawiązania połączenia również sprawdzamy odłożenie słuchawki.

W naszym algorytmie sprawdzamy warunek uzyskania połączenia z koleżanką (krok 4). Czasami zdarza się jednak, że już po podniesieniu słuchawki słychać, że linia jest zajęta. Należałoby wtedy odłożyć słuchawkę i ponownie ją podnieść. Jeśli okazałoby się, że nadal słychać w niej sygnał zajętości linii czynność należałoby powtórzyć. Musielibyśmy wykonywać te czynności dopóki linia nie byłaby „czysta”. W takim przypadku stosujemy instrukcję, która działa według schematu:

Dopóki warunek W jest spełniony, wykonuj instrukcję A.

Algorytm (w wersji 5) wygląda tak :
Czy słuchawka jest odłożona ?
Jeśli tak, to przejdź do kroku 2.
Jeśli nie, to odłóż słuchawkę.
Podnieś słuchawkę.
Czy linia jest zajęta ?
Jeśli Tak, to:
Odłóż słuchawkę.
Podnieś słuchawkę.
Przejdź do kroku 3.
Jeśli Nie, to przejdź do kroku 4.
Wybierz cyfrę 6.
Wybierz cyfrę 1.
Wybierz cyfrę 6.
Wykonaj czynność cztery razy
Wybierz cyfrę 2.
Czy połączyłeś się z koleżanką ?
Jeśli tak, to przejdź do kroku 9.
Jeśli nie, to przejdź do kroku 1.
Zaproś koleżankę.
Odłóż słuchawkę.
Jak widzimy w kroku 3 występuje pętla, w której sprawdzamy najpierw warunek, a dopiero potem wykonywana jest instrukcja opisana przez kroki a, b. Jeśli warunek nie jest spełniony, to instrukcja nie zostanie wykonana ani razu.

W informatyce możemy realizować również szczególny rodzaj powtórzeń bez konieczności stosowania pętli. Jest to technika rekurencji. Nie będziemy się nią tutaj zajmować.

Schematy blokowe algorytmów

Do tej pory do opisu algorytmów używaliśmy języka potocznego. Były to jednak algorytmy proste, które ma wykonywać człowiek. W przypadku algorytmów skomplikowanych ten zapis będzie nieczytelny, nie sprawdzi się.

Dlatego teraz poznamy nowy, bardziej przejrzysty sposób – schematy blokowe.

Schemat blokowy to graficzny zapis sposobu rozwiązania zadania, przedstawiający opis i kolejność wykonywania czynności realizujących dany algorytm.

W schemacie blokowym poszczególne operacje przedstawione są za pomocą odpowiednio połączonych skrzynek (klocków, bloków). Połączenia określają kolejność i sposób wykonywania operacji realizujących dany algorytm.
W literaturze informatycznej przyjęto pewne standardowe oznaczenia poszczególnych działań (są to figury geometryczne), ale można również używać innych oznaczeń (muszą one jednak być takie same dla określonego typu operacji).

Przykłady skrzynek (bloków) do prezentacji algorytmu w postaci graficznej:

Elementy schematu blokowego

Elementy schematu blokowego
Symbol graficzny Nazwa skrzynki (bloku) Funkcja Opis
Skrzynki graniczne Skrzynka graniczna Początek algorytmu lub koniec mają kształt owalu. Ze skrzynki START wychodzi tylko jedno połączenie, skrzynka STOP nie ma połączenia wychodzącego
Skrzynka graniczna
Skrzynka operacyjna Skrzynka operacyjna Wykonywanie różnych działań, np. sumowania ma kształt prostokąta
Skrzynka wejścia / wyjścia Skrzynka wejścia / wyjścia Wprowadzanie (czytanie) danych lub wyprowadzanie (drukowanie, pisanie) wyników jest równoległobokiem, wchodzi i wychodzi z niej jedno połączenie
Skrzynka graniczna
Skrzynka warunkowa
Skrzynka warunkowa
Skrzynka warunkowa Sprawdzanie warunku, np. czy N > 0 mają kształt rombu. Ze skrzynki wychodzą tylko dwa połączenia: jedno oznaczone TAK, a drugie NIE


ZASADY BUDOWANIA SCHEMATU BLOKOWEGO

Każda operacja powinna być umieszczona w skrzynce (bloku).

Schemat powinien posiadać tylko jedną skrzynkę „Start” i przynajmniej jedną skrzynkę „Stop”.

Skrzynki powinny być ze sobą połączone.

Ze skrzynki powinno wychodzić jedno połączenie; wyjątek stanowią skrzynki „Stop” (z której nie wychodzą już żadne połączenia) oraz „warunkowa” (z której wychodzą dwa połączenia opisane Tak i Nie – w zależności od tego czy warunek jest spełniony czy też nie; można wyjść jedną z dwóch dróg).

ALGORYTMY WARUNKOWE

Przypomnij: co to jest instrukcja warunkowa ?
Z sytuacjami warunkowymi stykamy się w każdej dziedzinie życia codziennego. Na pytanie „Czy pada deszcz ?” odpowiedź może brzmieć „tak” lub „nie”. W zależności od tego, czy warunek jest spełniony, czy nie, wybieramy inne rozwiązanie.

Przykład sytuacji warunkowej:

Algorytm warunkowy

Przykład 1. Schemat algorytmu warunkowego
Podaj przykłady sytuacji warunkowych. Przedstaw je graficznie.

Wiesz już, że z sytuacją warunkową mamy do czynienia wówczas, gdy wynik lub dalsze działanie zależy od spełnienia warunku. Na schemacie blokowym sytuacje warunkowe realizujemy przez skrzynkę (blok) warunkową. Jak dotąd rozważane przez nas algorytmy przedstawiały problemy z życia. Teraz zajmiemy się rozwiązywaniem prostych zadań obliczeniowych, przy czym algorytm opracowany dla każdego z nich będzie miał postać schematu blokowego.
W skrzynce wpisujemy warunek logiczny, stosując znaki „=” równy,”<>” różny, „<” mniejszy, „>” większy,”<=” mniejszy lub równy, „>=” większy lub równy, np: (a > 5) lub (a <= 20), (a < 5)OR (a <= 20)
Z systemami warunkowymi spotykamy się m.in. w matematyce i fizyce, wtedy gdy wykonywanie działań jest uzależnione od warunku, jakie muszą spełniać liczby, np. mają być nieujemne albo parzyste.

Przykład 2. Schemat algorytmu warunkowego
Przestaw schemat blokowy algorytmu obliczania wartości bezwzględnej.

Najpierw oczywiście musimy wiedzieć co to jest wartość bezwzględna. Bez tej informacji nie jesteśmy w stanie napisać żadnego algorytmu (narysować schematu blokowego, czy też napisać programu).

Wartością bezwzględną liczby nieujemnej jest ta sama liczba, a wartością bezwzględną liczby ujemnej jest liczba do niej przeciwna.

Np wartość bezwzględna liczby 5, to liczba 5.
Wartość bezględna liczby -5, to liczba 5.
Wartość bezwzględna liczby 0, to 0.
W schemacie więc musimy użyć jakiejś skrzynki, która pozwoli nam na sprawdzenie tego warunku. Potrzebna jest więc nam skrzynka warunkowa. Umieścimy w niej napis „czy liczba >=0?”. Oznacza on: „czy liczba jest większa lub równa zero”.

Algorytm – schemat blokowy, wartość bezwzględna
Zadanie do samodzielnego wykonania
Wprowadź dwie liczby a i b. Przedstaw w postaci ciągu kroków i graficznie algorytm porównania tych liczb i wyprowadzania na wyjściu większej z nich. W przypadku liczb równych wyprowadź napis „liczby równe”.

ALGORYTMY ITERACYJNE

Przypomnij : co to są instrukcje iteracyjne ?
Czasami trzeba wykonać te same operacje na wielu liczbach. W takich przypadkach nie jest konieczne wielokrotne opisywanie działań lub rysowanie takich samych skrzynek. Stosujemy wówczas iterację. Mówimy także, że działania te wykonywane są w pętli. Liczba powtórzeń tych działań może być z góry określona lub zależeć od spełnienia warunku. Iteracja to najczęściej spotykana technika algorytmiczna.

Iteracja to technika algorytmiczna polegająca na wykonaniu tej samej instrukcji dla n zmiennych.
Iteracja oszczędza czas programisty, który ten musiałby spędzić wpisując instrukcję n razy, zależnie od liczby zmiennych. Liczba powtórzeń w iteracji jest zwykle z góry określona lub zależy od spełnienia określonego warunku.

Przykład Analiza schematu algorytmu.
Przeanalizuj poniższy schemat blokowy i odpowiedz na pytania:

Jakie są dane wejściowe do zadania i jakich użyto zmiennych pomocniczych?
Jaki cel chcesz osiągnąć (wynik)?
Jaki algorytm zastosowano w operacji dodawania liczb ?
W którym miejscu wykonywane są dzivałania w pętli ?
Które operacje powtarzają się wielokrotnie ?
Co określa liczbę powtórzeń ?
Kiedy kończy się działanie w pętli ?
Iteracja

W analizowanym algorytmie występuje przypisanie typu S:=S + L. Oznacza ono przypisanie zmiennej „s” (sumie) poprzedniej wartości pamiętanej w zmiennej „s” (poprzedniej sumie) zwiększonej o wartość pamiętaną w zmiennej „l” (kolejną liczbę) – w ten sposób powtarzanie operacji przypisania, realizowane jest dodawanie kolejnych liczb naturalnych. Przypisania l:=l-1 ma tu bardzo istotne znaczenie. Jest to tzw. licznik, w którym następuje obliczanie, ile zostało jeszcze powtórzeń do wykonania. W tym algorytmie liczba powtórzeń została określona na początku instrukcją l:=n.

Gdyby nie umieszczono tego działania nastąpiło by tzw. zapętlenie algorytmu, czyli po sprawdzeniu warunku l>0 działanie w schemacie przebiegałoby zawsze drogą TAK. W realizacji algorytmów iteracyjnych ważne jest prawidłowe określenie sposobu zakończenia działań. Można to zrobić za pomocą licznika, który odlicza kolejne kroki iteracji (liczbę powtórzeń).


Przykład Schemat blokowy, algorytm z życia codziennego
Narysuj schemat blokowy algorytmu telefonicznego zaproszenia koleżanki w wersji pierwszej

Aplet Java. Schemat blokowy algorytmu z życia codziennego. Algorytm liniowy
Przykład Schemat blokowy, algorytm z życia codziennego
Narysuj schemat blokowy algorytmu telefonicznego zaproszenia koleżanki w wersji drugiej

Aplet Java. Schemat blokowy algorytmu z życia codziennego. Algorytm warunkowy
Przykład Schemat blokowy, algorytm z życia codziennego
Narysuj schemat blokowy algorytmu telefonicznego zaproszenia koleżanki w wersji piątej

Schemat blokowy, algorytm warunkowy iteracyjny (technika algorytmiczna. z życia codziennego).

Podsumujmy:
Sposób rozwiązania zadania, czyli algorytm, można podać w kilku punktach. Mówimy wówczas, że algorytm jest opisany za pomocą listy kroków (ciągu kroków). Zapis taki polega na podaniu kolejnych wykonywanych operacji, składających się na całe rozwiązanie.

Algorytm można przedstawić również w postaci graficznej, za pomocą schematu blokowego. Schemat blokowy to graficzne przedstawienie ciągu kroków algorytmu, często stosowane jako ideowy rysunek poprzedzający tworzenie programu. Sposób i kolejność działań programu określane są przez wzajemny układ i sposób łączenia bloków (skrzynek) ze sobą. Każde działanie (krok) ma w schemacie blokowym swoje standardowe oznaczenie (patrz tabela wyżej).

Algorytmy: ciągi liczb. Schematy blokowe algorytmów

Ciągi w algorytmach. Przykłady schematów blokowych

Przykład 1
Dany jest ciąg liczb o nieznanej długości. Ostatnia liczba w ciągu równa się zero. Oblicz sumę elementów tego ciągu.

Schemat blokowy algorytmu suma ciągu liczb
Schemat blokowy algorytmu

Przykład 2
Oblicz sumę n – kolejnych liczb naturalnych. Pierwsza z liczb wprowadzona z klawiatury i równa się b.

Przykład 3
Dany jest ciąg n-elementowy. Elementy tego ciągu są różne. Wskaż największy element ciągu.

Zadanie
Dany jest ciąg liczb o nieznanej długości. Ostatnia liczba w ciągu równa się zero. Oblicz średnią arytmetyczną elementów ciągu.

Rozwiązanie: schemat blokowy algorytmu

   

Algorytmy sortowania

ALGORYTMY SORTOWANIA (PORZĄDKOWANIA)

Sortowanie (porządkowanie) – proces ustawienia zbioru obiektów w określonym porządku

Metody sortowania:
przez zamianę (sortowanie bąbelkowe)
przez wybieranie
przez wstawianie
ALGORYTM SORTOWANIA BĄBELKOWEGO
Jedną z popularnych metod sortowania jest sortowanie przez prostą zamianę (sortowanie bąbelkowe). W metodzie tej porównujemy sąsiednie elementy. W celu uporządkowania elementów od najmniejszego do największego, jeśli drugi element jest mniejszy od poprzedniego, to zamieniamy go miejscami. Następnie element, który stał się drugim, porównujemy z trzecim i przestawiamy, jeśli jest mniejszy itd.

Sortowanie bąbelkowe polega na porównywaniu parami kolejnych liczb i przestawianiu, jeśli są ustawione w niewłaściwej kolejności.

Zadanie. Sortowanie bąbelkowe

Uporządkuj liczby: 7 6 1 9 5 w kolejności od najmniejszej do największej.

                    Przebieg pierwszy:
                        7 6 1 9 5    – porównujemy 7 i 6  ( przestawiamy, bo 6 < 7) 
                        6 7 1 9 5    – porównujemy 7 i 1  ( przestawiamy, bo 1 < 7)  
                        6 1 7 9 5    – porównujemy 7 i 9 ( nie przestawiamy, bo 10 > 7) 
                        6 1 7 9 5    – porównujemy 9 i 5 ( przestawiamy, bo 5 < 10)  
                        6 1 7 5 9         – 9 na właściwym miejscu
                   
                    Przebieg drugi:
                        6 1 7 5 9    – porównujemy 6 i 1 ( przestawiamy, bo 1 < 6)  
                        1 6 7 5 9    – porównujemy 6 i 7 ( nie przestawiamy, bo 7 > 6)  
                        1 6 7 5 9   – porównujemy 7 i 5 ( przestawiamy, bo 5 < 7) 
                        1 6 7 5 9    – porównujemy 7 i 5 ( przestawiamy, bo 5 < 7)
                        1 6 5 7 9         – 7 i 9 na właściwym miejscu    

                    Przebieg trzeci:
                        1 6 5 7 9    – porównujemy 1 i 6 ( nie przestawiamy, bo 6 > 1)
                        1 6 5 7 9    – porównujemy 6 i 5 ( przestawiamy, bo 5 < 6)
                        1 5 6 7 9         –  6, 7, 9 na właściwym miejscu
       
                    Przebieg czwarty:
                        1 5 6 7 9    – porównujemy 1 i 5 nie przestawiamy, bo 5 > 1
                        …       
                   
Spójrz wyżej. Czy ciąg po pierwszym przebiegu jest już uporządkowany? Ponieważ nie jest, należy wykonywać kolejne przebiegi. Powinniśmy to robić, aż liczby zostaną uporządkowane, a więc do momentu, aż nie trzeba będzie przestawiać miejscami żadnego elementu.

w czwartym przebiegu nie są zamieniane żadne elementy, czyli nie ma potrzeby dalszego porównywania. Można zakończyć algorytm, liczby są uporządkowane w żądanej kolejności

Zadanie do samodzielnego wykonania
Ułóż 5 książek w przypadkowej kolejności na stole. Uporządkuj je według wysokości (od najwyższej do najniższej), stosując algorytm sortowania bąbelkowego.

ALGORYTM SORTOWANIA PRZEZ WYBIERANIE
Jeśli chcemy uporządkować elementy jakiegoś zbioru np. w kolejności od najmniejszego do największego to możemy wybrać najmniejszy element i umieścić go na początku. Następnie wybieramy najmniejszy element z pozostałego zbioru i umieszczamy go po poprzednio wybranym elemencie (czyli jako drugi) itd.Taka metoda porządkowania nazywa się sortowaniem przez wybór. Polega na wyszukaniu największej liczby, przestawieniu jej na początek ciągu elementów (czyli zamienieniu jej z pierwszą liczbą ciągu) i takim samym postępowaniu dalszym z pominięciem pierwszego elementu.

Zadanie. Sortowanie bąbelkowe

Uporządkuj liczby: 7 6 1 9 5 w kolejności od najmniejszej do największej.

                    7 6 1 9 5    – 1 na pierwszą pozycję, 7 w miejsce 1
                    1 6 7 9 5    – 5 na drugą pozycję, 6 w miejsce 5
                    1 5 7 9 6    – 6 na trzecią pozycję, 7 w miejsce 6
                    1 5 6 9 7    – 7 na czwartą pozycję, 9 w miejsce 7
                    1 5 6 7 9    – 9 na właściwym miejscu (piątym)  
                   
Zadanie do samodzielnego wykonania
Wykonaj zadanie z ćwiczenia drugiego, stosując algorytm sortowania przez wstawianie.

ALGORYTM SORTOWANIA PRZEZ WSTAWIANIE
Metoda porządkowania przez wybór polega na wstawianiu elementu we właściwe miejsce, jest ona powszechnie stosowana przez osoby grające w karty.

                    7| 6  1  9  5 
                    6  7| 1  9  5 
                    1  6  7| 9  5 
                    1  6  7  9| 5 
                    1  6  7  5  9|

                   
Na schemacie kreska odziela posortowaną lewą część liczb od nieposortowanej prawej części.

Jeśli pragniemy ustawić liczby w kolejności od najmniejszego do największego, to bierzemy element drugi i jeśli jest on mniejszy od pierwszego to wstawiamy przed nim. Następnie bierzemy element trzeci i wstawiamy również w odpowiednie miejsce, a więc jeśli jest mniejszy od pierwszego to przed pierwszy, jeśli mniejszy od drugiego to przed drugi.

ALGORYTM SORTOWANIA TABLICY
Przykład
Schemat blokowy algorytmu sortowania bąbelkowego elementów tablicy jednowymiarowej

schemat blokowy

Algorytm. Gra Papier Kamień Nożyce

Grę „Papier Kamień Nożyce” znają chyba wszyscy. Tym razem naszym zadaniem jest stworzenie algorytmu wskazującego zwycięzcę tej gry.

Zakładamy, że w grze uczestniczą dwaj gracze. Każdy z graczy może wybrać (pokazać) jedną z trzech wartości: papier albo kamień albo nożyce. Możemy więc przystąpić do tworzenia specyfikacji algorytmu:


Dane wejściowe:
g1: pierwszy gracz – ciąg znaków zawierający jedną z wartości: {papier, kamień, nożyce}
g2: drugi gracz – ciąg znaków zawierający jedną z wartości: {papier, kamień, nożyce}

Naszym zadaniem jest wskazanie zwycięzcy. Jak może zakończyć się starcie? Mamy trzy możliwości:albo wygrał gracz pierwszy albo gracz drugi albo też gracze pokazali tą samą rzecz i gra zakończyła się remisem. Zatem możemy zdefiniować:

Dane wyjściowe (wynik):
wynik: wynik gry – napis (ciąg znaków) zawierający jedną z wartości {„Wygrał gracz 1”, „Wygrał gracz 2″,”Remis”}

 Metoda wskazania zwycięzcy

Ciąg dalszy już niedługo …

Algorytm przedstawiony w języku programowania

Przykładowy fragment kodu programu w języku C#:

 if (p1 == p2)
      return „Remis!”;

    if (((p1 == „kamień”) && (p2 == „nożyce”)) ||
        ((p1 == „nożyce”) && (p2 == „papier”)) ||
        ((p1 == „papier”) && (p2 == „kamień”)))
    {
      return „Wygrał gracz 1!”;
    }
    else
    {
      return „Wygrał gracz 2!”;
    }