Programowanie 2 - Ćwiczenia 5


Poprzednie Następne
Temat: Podstawy programowania (zajęcia nieobowiązkowe).

Typy zmiennych

int
long
short
float
double
long double
char
deklaracje zmiennych, kwestia wskaźnika
zakres życia zmiennej

Instrukcje warunkowe

Konstrukcja instrukcji warunkowej w Java/C/C++ jest następująca:
if (wyrażenie) operacja_prawda
else operacja_fałsz;


Każda operacja (operacja_prawda lub operacja_fałsz) może być równie dobrze blokiem operacji rozpoczynającym się od znaku { a kończącym znakiem }.

Jeśli wyrażenie jest prawdziwe wykonana zostanie operacja_prawda.
Jeśli wyrażenie jest fałszywe wykonana zostanie operacja _fałsz.

Problem rozróżniania prawdy od fałszu w Java/C/C++ sprowadza się do sprawdzania, czy coś ma wartość 0, czy też ma inną wartość.
0 (zero) zawsze oznacza fałsz
Każda inna wartość oznacza prawdę.
Każde sprawdzenie wartości logicznej odbywa się poprzez umieszczenie pewnego wyrażenia w nawiasach.
I tak np. fragment kodu:

i = 1;
if (i) System.out.println("Prawda");
else System.out.println("Fałsz");
Wypisze nam na ekranie słowo "Prawda". Gdyby jednak zrobić:
i = 0;
if (i) System.out.println("Prawda");
else System.out.println("Fałsz");
wówczas na ekranie pojawi się słowo "Fałsz".

W nawiasach można też umieszczać dowolne operacje arytmetyczne, a do określenia prawdy lub fałszu wzięty zostanie wynik działań. Np:
i = 1;
if (2*i-3+1/i) System.out.println("Prawda");
else System.out.println("Fałsz");
Na ekranie pojawi się słowo "Fałsz".

Oczywiście w nawiasach mogą się pojawiać standardowe operacje porównania takie jak:
równe: ==
nierówne: !=
mniejsze: <
mniejsze-równe: <=
większe: >
więsze-równe: >=

Wyrażenie umieszczone w nawiasie zwraca zawsze wartość 1 lub 0, w zależności od tego, czy dane porównanie jest prawdą, czy też fałszem.
Np:
i = 1;
if (i==1) System.out.println("Prawda");
else System.out.println("Fałsz");
Na ekranie pojawi się słowo "Prawda".

UWAGA:
Z tego, co pojawiło się wcześniej wynika, ze można robić tak:
int x,i;
i = 1;
x = (i==1)
System.out.println(x);
Na ekranie pojawi się liczba 1, gdyż i==1 było prawdą, czyli wartość logiczna wyrażenia wyniosła 1.

Operatory logiczne

Wartości logiczne można oczywiście ze sobą łączyć używając odpowiednich operatorów logicznych. Najważniejsze z nich to:
Koniunkcja: &&
Alternatywa: ||
Negacja: !
Oczywiście można je dowolnie łączyć, używając odpowiedniego ponawiasowania. Np:
i = 1;
if ((i>=0) && (i<=10) && !(i==5)) System.out.println("Prawda"); //Prawda, jeśli i jest w przedziale od 1 do 10, ale nie jest 5
else System.out.println("Fałsz");

Pętle

While

while (warunek) operacja
Tak długo jak warunek jest prawdziwy, wykonywana jest operacja. (Operacja może być oczywiście równie dobrze blokiem operacji rozpoczynającym się od znaku { a kończącym znakiem }).

do while

do operacja while (warunek)
Operacja zostanie wykonana raz, a następnie, tak długo jak warunek jest prawdziwy, będzie powtarzana. (Operacja może być oczywiście równie dobrze blokiem operacji rozpoczynającym się od znaku { a kończącym znakiem })

For

for (wartość_początkowa; warunek_konca; modyfikacja_zmiennej_sterującej) operacja;

Wartość_początkowa - ciąg instrukcji, które są wykonywane na początku, przy inicjalizacji pętli. Najczęściej jest to nadanie wartości początkowych zmiennej sterującej.
Modyfikacja_zmiennej_sterującej - ciąg instrukcji, które są wykonywane natychmiast, po zakończeniu jednego obiegu pętli. Najczęściej jest to modyfikacja zmiennej sterującej, np. zwiększenie jej wartości.
Warunek_konca - warunek sprawdzany przed rozpoczęciem wykonania każdego obrotu pętli. Jeśli warunek nie jest prawdziwy, wówczas pętla kończy swoje działanie.
(Operacja może być oczywiście równie dobrze blokiem operacji rozpoczynającym się od znaku { a kończącym znakiem })

Np:
for (int i=0; i<5; i++) operacja;
Ta pętla na początku zainicjuje zmienną i i przypisze jej wartość jeden. Następnie operacja wykona się 5 razy. Będzie tak, gdyż 5 razy zwiększymy wartość zmiennej i o jeden i dopiero za 6 razem warunek i<5 nie będzie prawdziwy.

Aby wykonać pewne operacje w nieskończoność można użyć następujących pętli:
while (1)
{
}

for (;;)
{
}

Operacje zakłócające przebieg pętli

Aby zmienić bieg działania pętli można użyć jedngo z dwóch poleceń zakłócających przebieg pętli:
continue - przerywa działanie pętli i przechodzi do jej następnej iteracji
break- opuszcza pętle i kończy jej działanie

Tablice

Tablica to struktura danych, dzięki której można w programach przetrzymywać ciągi liczb. Są to takie ciągi, w których do każdego indeksu przypisane są odpowiednie wartości. Indeksy w języku Java/C/C++ są zawsze liczbami całkowitymi od 0 do ustalonej wartości. I tak np. ciąg 3,2,56,3,4 zapisany w tablicy będzie miał w pozycji o indeksie 0 wartość 3, w pozycji 1 wartość 2 itd.

Tablice w Java/C/C++ deklaruje i używa się w następujący sposób:
int tablica[liczba_elementow];
scanf("%d",&tablica[1]);
tablica[2] = 2*tablica[1];
W ten sposób w pamięci zostanie stworzna tablica, w której będziemy mogli umieszczać elementy w miejscach o indeksach od 0 do liczba_elementow-1. (UWAGA! Ten -1 jest bardzo ważny i trzeba o nim pamiętać. Np. zrobienie tablicy Tab[3], a następnie odwołanie się do Tab[3] spowoduje błąd wykonania programu, gdyż w tej tablicy będą dostępne tylko wartości Tab[0], Tab[1] i Tab[2].)

Procedury i funkcje

Procedury i funkcje to takie kawałki programów, które mogą być wywoływane z innych miejsc w programie dowolną liczbę razy. Czasem są nazywane po prostu podprogramami.
Kształt ich zostanie omówiony dokładnie na zajęciach