Rozdział I: Typy podstawowe i złożone. Omówienie typów zmiennych oraz ich zastosowanie

/Barbara Halska/

Zacznijmy od początku, a więc od sposobu zapisywania danych. Tak jak Wy macie potrzebę zapisania jakichś wartości na kartce, w notatniku czy w telefonie, tak samo dzieje się z danymi w programie. Dane te przypisujemy do zmiennych, które to właśnie służą do przechowywania wartości.

I.1. Zmienne

Zmienna to miejsce zarezerwowane w pamięci, w którym zapisana jest jakaś dana, z której korzysta napisany program. Można przetwarzać tą zmienną, przechowywać w niej dane tymczasowe, wykonywać na niej funkcje.

Pamięć komputera możemy porównać z koszykiem na zakupy, do którego wkładamy produkty. Każdy produkt ma nazwę oraz kolor, smak czy rozmiar. Tak więc w naszym

koszyku możemy znaleźć nabiał, który raz jest mlekiem, raz jogurtem, a raz serkiem homogenizowanym, ale to zawsze będzie nabiał.

Przykład:

owoce = "jabłko" //ta instrukcja deklaruje zmienną o nazwie owoce i zapisuje w niej łańcuch znaków nabiał = "ser" pieczywo = "bułka"

I.1.1 Typy zmiennych

Każda zmienna może przechowywać określony rodzaj informacji. Informacją może być liczba (dowolnego rodzaju – naturalna, całkowita, zmiennoprzecinkowa, stałoprzecinkowa), znaki. Rodzaj informacji zwany jest typem.

Rodzaje zmiennych:

  • całkowite (int) - przechowują liczby całkowite np.: 1,10,1000;
  • zmiennoprzecinkowe (float) - przechowuje liczby ułamkowe np.: 1,00001;
  • zmiennoprzecinkowe (double) - przechowuje liczby ułamkowe o podwojonej precyzji
  • logiczne (bool) - przechowują wartość true lub false;
  • znakowe (char, string) - przechowują dowolne znaki np.: "1","r","@";

Pamiętajmy, że deklarując zmienną rezerwujemy dla niej miejsce w pamięci; to, ile tego miejsca potrzebujemy uzależnione jest od jej typu.

Deklaracja zmiennej wiąże się od razu z rezerwacją miejsca w pamięci operacyjnej, bo to właśnie tam będą przechowywane wartości. Pamięć możemy porównać do szafy z szufladami, z których każda ma swój numer, a to jakie w niej będą przechowywane elementy zależy od właściciela szuflady, a więc zmiennej, która zostanie do niej przypisana.

Wizualizacja pamięci operacyjnej, w której zmienne otrzymują miejsce na przechowywanie wartości

ile_galek owoce nr    
kod imie pieczywo ulica  
miaso nabiał nazwisko   Sma_lodow

I.1.2 Deklaracja zmiennej

Zanim skorzystamy ze zmiennej musimy ją zadeklarować, nadać jej nazwę. Bardzo dobrym rozwiązaniem jest stosowanie nazw tak, aby od razu było wiadomo, jakie wartości będą w niej przechowywane np.: "nr_domu" - taka zmienna będzie przechowywać liczbę. Nie możemy też stosować polskich znaków, ale w nazwie mogą pojawić się również cyfry. Kompilatory rozróżniają duże i małe litery dlatego zmienna „ABC” jest inną zmienną niż zmienna „abc”, musimy pamiętać o tym odwołując się do nich. No i jeszcze jedna sprawa - nie wolno tworzyć nazw zmiennych z wykorzystaniem słów kluczowych. Każdy język ma własną listę, ale jest kilka, które są uniwersalne i spotykamy je w każdym: break, case, class, do, else, if, false, for, public, private, protected, switch, true, while.

Kompilator to program, który rozumie instrukcje napisane w danym języku. Kompilacja przekształca kod źródłowy i powoduje wygenerowanie jego wydajnej, maszynowej reprezentacji, która zazwyczaj jest zoptymalizowana pod kątem wydajności działania. Wśród języków programowania są też języki skryptowe, które z natury są językami interpretowanymi, co oznacza, że przeglądarka może wykonać każdą instrukcję w kodzie.

I.1.3 Instrukcja przypisania

Deklarując zmienną możemy od razu przypisać jej wartości, ale możemy też to zrobić później. Do przypisania konkretnej wartości wykorzystujemy operatory przypisania np.: znak =

Poniżej przedstawiamy kilka przykładów deklaracji zmiennych:

Smak_lodow = „truskawkowe” //ta instrukcja deklaruje zmienną o nazwie smak_lodow i zapisuje w niej łańcuch znaków w tym przypadku „truskawkowe” Ile_galek = 2 //z kolei ta instrukcja zapisuje wartość liczbową.

Na pewno zauważyliście różnicę przy zapisie w zależności od tego czy wprowadzamy wartość liczbową, czy ciąg znaków. W drugim przypadku stosujemy cudzysłów. Tworząc zmienną nie musimy od razu przypisać jej wartości początkowej, zawsze możemy to zrobić później.

* Zmienna dostaje jakieś miejsce w pamięci a co za tym idzie, wartości, które tam już kiedyś nasz system operacyjny zapisał, więc dla bezpieczeństwa można ją wyzerować np. nr = 0

I.2. Tablice

Ostatnio padła wygrana w totolotka w wysokości 35 milionów, każdy chciałby taką nagrodę wygrać, udało się to jednej osobie. Szczęśliwiec wytypował 6 cyfr z przedziału od 1 do 60. Te wylosowane cyfry możemy zapisać: 1,14,23,31,33,35. Gdybyśmy chcieli zapisać je w programie, musielibyśmy użyć 6 zmiennych np. lotto1 = 1, lotto2 = 14 itd. Do tego typu zapisu przy użyciu jednej zmiennej stosujemy tablice. Tablica (ang. array) jest typem danych, który może przechowywać wiele wartości. W pamięci komputera tablica zajmuje ciągły obszar pamięci, a jej elementy, zwane komórkami, są umieszczone w tym obszarze jeden obok drugiego.

I.2.1 Tworzenie prostej tablicy

Skoro tablica również jest zmienną, to trzeba nadać jej nazwę np. lotto w której będzie przechowywała wyniki losowania.

lotto = [ 1,14,23,31,33,35]; //deklaracja tablicy lotto, która przechowuje wyniki losowania

Wszystkie wartości możemy potraktować jako jedną całość, możemy też odwoływać się do poszczególnych elementów tej tablicy.

pisz(lotto[0]); //Wyświetlony zostanie pierwszy element tablicy czyli liczba 1

Zanim przejdziemy dalej, musimy się upewnić, czy rozumiecie czym są tablice. Jak już wcześniej było to wytłumaczone, tablic używamy do przechowywania wielu wartości w odróżnieniu od zmiennych, które pozwalają zapisywać tylko jedną wartość, taką jak liczba czy słowo. Najczęściej tablice, będziemy stosować do grupowania podobnych informacji, takich jak wyniki meczów czy oceny. Zawsze wtedy, gdy będziemy chcieli zgrupować jakiś zbiór danych możemy utworzyć tablicę i w niej je zapisać. Gdy będzie to potrzebne, możemy odwołać się do całej tablicy lub do konkretnej komórki w celu skorzystania z danych.

PRZYKŁAD CHCEMY STWORZYĆ TABLICĘ, KTÓRA BĘDZIE PRZECHOWYWAĆ KOLORY

COLOR = ["NIEBIESKI", "ZIELONY", "CZERWONY", "ŻÓŁTY"];

*Czy zwróciliście uwagę, że poszczególne elementy tablicy są oddzielone przecinkami? Każdy element jest umieszczony w osobnej komórce, która ma swój indeks. Indeksowanie zaczyna się od zera.

Każdy element jest umieszczony w osobnej komórce, która ma swój indeks. Numerowanie indeksów zaczyna się od zera. Jeżeli tablica tak jak w przypadku naszej lotto jest 6 elementowa to ostatni indeks jest mniejszy o jeden a więc ma wartość 5.

PRZYKŁAD

LOTTO = [ 1,14,23,31,33,35]; //DEKLARACJA TABLICY PISZ(LOTTO[2]); //WYŚWIETLENIE TRZECIEGO ELEMENTU TABLICY

I.2.2 Ciąg znaków jako tablica

Zmienne typu string mają specyficzną budowę. Mogą zostać także zapisane tak naprawdę jak ciąg pojedynczych znaków.

name = ["a","p","k","i",".","o","r","g"] lub też name = "apki.org"

Jeżeli wcześniej zmienna name została zadeklarowana jako tablica to kompilator samodzielnie podzieli string na pojedyncze znaki.

Obraz

I.2.3 Tablica asocjacyjna

Są to tablice, gdzie indeksem może być znak lub string.

Przykład tablicy, która zawiera numery pokoi, a w rekordach zapisane są nazwiska osób, które zarezerwowały pokój.

Przykład

hotel[„pokój_1]” = „Marcin” hotel[„pokój_2]” = „Kasia” hotel[„pokój_5]” = „Basia”

I.2.4 Tablice wielowymiarowe

Możemy też tworzyć tablice wielowymiarowe - czyli tablice w tablicach. Do czego może się to przydać? Wykorzystajmy poprzedni przykład z hotelem, tworząc tablicę, której kolejna kolumna będzie przechowywać informację o tym, czy osoba wykupiła śniadanie.

Przykład

hotel[1]=[„Marcin”, „śniadanie”] hotel[2]=[„Kasia”, „bez śniadania”] hotel[3]=[„Basia”, „śniadanie”]

I.3. Podstawowe operacje na danych

Poradziliśmy sobie ze zmiennymi i przyszedł czas no wykonywanie operacji na danych, a więc przetwarzanie ich. Do tego wykorzystujemy operatory np. takie jak dodawanie czy porównywanie dwóch wartości.

I.3.1 Podstawowe operacje matematyczne

Dodawanie

Podstawowymi operacjami są głównie dodawanie, odejmowanie, mnożenie, dzielenie. Można w bardzo prosty sposób te operacje wykonywać, używając podstawowych dla każdego języka programowania znaków.

liczba = 2 + 7 //po tym działaniu w stworzonej zmiennej liczba będzie przechowywana wartość 9

W przeciwieństwie do matematyki, w programowaniu można przeprowadzać operacje, które w matematyce nie miałyby miejsca.

Kod:

liczba = liczba + 1 //po tej instrukcji w zmiennej zapisana zostanie wartość 10 (jako, że poprzednią wartością zmiennej liczba jest liczba 9

nie jest operacją matematyczną, a operacją przypisania do zmiennej "liczba" wartości o jeden większej niż wartość poprzednia.

Zapis można skrócić poprzez istnienie dodatkowego operatora dodawania:

liczba += 1

Zadaniem tego operatora jest dodanie do zmiennej dowolnej wartości.

Analogicznie można do jednej zmiennej zapisywać przetworzoną drugą liczbę, np.:

Przykład

liczba1 = 5 liczba2 = liczba1 + 20 lub liczba1 = 5 liczba2=0 liczba2+=liczba1 liczba2+=5 //Wynikiem ostatniej operacji jest zapisana w zmiennej "liczba2" wartość 25.

Odejmowanie

Drugim podstawowym znakiem jest znak minus, którego używa się w sposób analogiczny do poprzedniego:

Przykład

liczba1 = 5 liczba2 = liczba1 – 20 //wynikiem będzie wartość -15. Istnieje też możliwość wykorzystania operatora "-=": liczba1 = 5 liczba2 += liczba1 //wynikiem będzie wartość 5. liczba2 -= 20 //wynikiem będzie wartość -15.

Mnożenie

Operacja mnożenia jest reprezentowana za pomocą znaku "*". W bardzo prosty sposób można wyliczyć kwadrat danego elementu przy pomocy poniższej operacji:

Przykład

liczba = 5 liczba = liczba * liczba //w zmiennej "liczba" zostanie zapisany wynik 25

Dzielenie

Operacja dzielenia reprezentowana jest za pomocą znaku "/". W zależności od typu danych w jakim będzie zapisywany wynik działania taka będzie zwracana wartość.

Przykład

liczba = 5/10 //w przypadku gdy zmienna "liczba" jest całkowitą, wynikiem działania jest 0 liczba = 5.0/10.0 //w przypadku gdy zmienna "liczba" jest całkowitą, wynikiem działania jest 0.5 Kolejny operator związany z dzieleniem, jest zwracający resztę tej operacji. Znakiem używanym w tym wypadku jest znak "%" liczba = 2%5 //wynikiem jest 4

I.3.2 Operatory porównania

Operatory porównania służą przede wszystkim do porównania liczby:

Operator Opis
> większe od
>= większe lub równe
< mniejsze
<= mniejsze lub równe
== równe
!= różne

Wynikiem operacji porównania jest prawda albo fałsz, czyli warunek jest spełniony albo nie.

Operatorami logicznymi nazywamy wszystkie spójniki klasycznego rachunku zdań. Najczęstszymi są to i, lub oraz negacja. Będziesz ich używał/-a w instrukcjach warunkowych. Zwracają wartość true lub false.

Iloczyn logiczny

Znak operatora logicznego to "&&". Wszystkie wartości muszą być prawdziwe, aby została zwrócona wartość true(prawda).

wejście wejście wyjście
0 0 0
0 1 0
1 0 0
1 1 1

Suma logiczna

Znak sumy logicznej to "||". Co najmniej jedna z wartości musi być prawdziwa, aby została zwrócona prawda.

wejście wejście wyjście
0 0 0
0 1 1
1 0 1
1 1 1

Wyrażeń logicznych można używać do podejmowania decyzji przy użyciu instrukcji warunkowych if. Instrukcja ta pozwala wykonywać umieszczony w niej kod, jedynie wtedy gdy warunek jest spełniony, a więc osiąga wartość true.

I.3.3 Instrukcja warunkowa

Instrukcje warunkowe to konstrukcje, które służą do sprawdzania, czy dany warunek został spełniony. Jest to praktycznie podstawowy element języka programowania. Dzięki instrukcjom warunkowym możemy odpowiednio zareagować na istniejące sytuacje i sterować pracą programu. Przykładowo: użytkownik musi wpisać swoje imię na samym początku działania programu. Może się jednak zdarzyć, że użytkownik specjalnie lub omyłkowo wpisze liczbę. Jeżeli programista nie uwzględni tej możliwości i nie wprowadzi odpowiednich zabezpieczeń, może się to skończyć źle dla programu lub (w przypadku większych aplikacji) spowodować błędy związane z bezpieczeństwem systemu.

Konstrukcja warunku

Warunek składa się z dwóch zasadniczych części – słowa kluczowego if i głównego warunku. Instrukcja ta pozwala wykonać umieszczony w niej blok kodu, wyłącznie w przypadku, gdy warunek przyjmie wartość true. Składnia wygląda w następujący sposób:

Podstawowym warunkiem jest warunek porównujący, czy wartość dwóch zmiennych jest identyczna

Przykład

if (a==b) pisz”a = b”

Należy tutaj zwrócić uwagę, że w instrukcji warunkowej korzystamy z operatorów porównania.

Każdy warunek powinien zwracać wartość true lub false.

W programowaniu używa się czasem także operatora negacji – który zamienia wartość logiczną na przeciwną, np.

Przykład

!(a>b) //sprawdź, czy nieprawdą jest, że a jest większe od b

//operacja ta jest równoważna z !(a<=b)

Bardzo ważne jest też łączenie warunków ze sobą – służą do tego operatory logiczne.

Pole tekstowe A co jeżeli warunek nie został spełniony? Możemy również wykonać instrukcję, kiedy warunek nie jest spełniony - do tego służy „else".

Pole tekstowe Warunki można też zagnieżdżać tzn, jeżeli instrukcja “else” nie wystarczy, a istnieje potrzeba sprawdzenia kolejnego warunku, jeżeli pierwszy nie został spełniony. Możemy połączyć dowolnie wiele instrukcji if/else. Za pomocą else if można dodawać dowolnie wiele warunków, przy czym każdy będzie mieć własny blok kodu, który będzie wykonany, jeżeli warunek zostanie spełniony.

Przykład

Sprawdź czy podana przez użytkownika liczba jest dodatnia, ujemna czy zero. Założenie wprowadzane liczby są całkowite liczba = 3 if ( liczba > 0 ) pisz("Liczba jest dodatnia") //spełniony warunek - zostanie wyświetlony komunikat else if ( liczba < 0 ) pisz ("Liczba jest ujemna ") //nie spełniony warunek - nie zostanie wyświetlony komunikat else if ( liczba == 0 ) pisz ("Liczba jest dodatnia") //nie spełniony warunek - nie zostanie wyświetlony komunikat

I.4. Optymalizacja kodu

Projektując kod, zawsze staraj się zoptymalizować go tak, aby był jak najmniej narażony na błędy oraz nie zawierał niepotrzebnych instrukcji i tak przykład powyższy zostanie zoptymalizowany.

Obraz

Przykład

liczba = 3 if ( liczba > 0 ) pisz("Liczba jest dodatnia") //spełniony warunek zostanie wyświetlony komunikat else if ( liczba < 0 ) pisz ("Liczba jest ujemna ") //nie spełniony warunek nie zostanie wyświetlony komunikat else pisz ("Liczba jest dodatnia") //wyświetli się tylko wtedy kiedy powyższe warunki nie zostaną spełnione

*Jeżeli zmienna jest jest typu logicznego to nie musi sprawdzać czy jest true, wystarczy ją tylko umieścić w warunku

Przykład

sunny_day = true if(sunny_day) pisz(“Idziemy na spacer”) else pisze(“Zostajemy w domu”)

I.5. Konstrukcje pętli

Jest wiele czynności, które wykonujemy więcej niż jeden raz, to może być pojedyncza instrukcja lub zbiór np. Wstajemy rano, myjemy zęby.

Oczywiście, także w kodzie często musimy wykonywać czynności więcej niż jeden raz i właśnie do tego możemy wykorzystać pętle.

Wcześniej zostały już omówione wyrażenia, które zwracają wartość logiczna np a>0. Właśnie takie wyrażenia, mają duże znaczenie w działaniu pętli.

Pętla to chyba najważniejszy składnik programowania w dowolnym języku. Umożliwia odciążenie programisty od decydowania, ile razy dana operacja ma się wykonać – komputer sam określa ile razy wykonuje się dana operacja.

I.5.1 Pętla while

Działa nieco podobnie do instrukcji warunkowej, z tą różnicą, że wykonuje kod nie jednokrotnie, a wielokrotnie.

Obraz

Przykład

Tworzymy maszynę losującą liczby z dużego LOTTO. Jak wiemy trzeba ich wylosować aż 6 a więc będzie powtarzalność działania Lotto = 1 while (lotto < 7) lub (lott<=6) // w obu przypadkach pętla wykona się 6 razy { Losowanie liczby lotto; Lotto = lotto + 1; }

*instrukcja while rozpoczyna się od słowa kluczowego while

*petla while używa wyrażenia logicznego, w skrócie zwanego – warunkiem

*jeżeli warunek jest spełniony, czyli przyjmuje wartość true, cała zawartość bloku kodu zostanie wykonana

*co to takiego blok kodu? Jest to zbiór instrukcji, które w naszym przykładzie zostały zawarte w nawiasach klamrowych

*jeżeli warunek będzie spełniony, po wykonaniu bloku kodu, wracamy na początek pętli i realizujemy go ponownie. Jeżeli natomiast warunek będzie false to pętla zostanie zakończona i nie wykona się instrukcja.

Na początku programu tworzona jest zmienna lotto, która przyjmuje wartość 1. Następnie dodano do kodu pętlę, która sprawdza, jaka jest wartość ww. zmiennej. Jeżeli zmienna lotto jest mniejsza od 7 to następuje losowanie liczby oraz zwiększenie wartości zmiennej lotto. Zmienna stanu jest modyfikowana tylko i wyłącznie w przypadku, gdy zostało wpisane poprawne hasło. Po modyfikacji wartości zmiennej stanu na True, program przechodzi do końca pętli i kończy jej działanie – a także programu – dalej nie ma instrukcji.

I.5.2 Pętla do while

Ta pętla różni się od poprzedniej przede wszystkim tym, że zostanie przynajmniej raz wykonana nawet, jeżeli nie zostanie spełniony warunek.

W przypadku tych dwóch powyższych pętli nie wiemy ile razy zostaną wykonane - jest to uzależnione jedynie od warunku, który został przez Was określony.

Przykład

Lotto = 6 do { Losowanie liczby lotto; Lotto = lotto + 1; } while (lotto < 7) lub (lott<=6) // w obu przypadkach pętla wykona się 6 razy

I.5.3 Pętla for

Ta pętla charakteryzuje się tym, że możemy przy jej deklaracji ustalić, ile razy zostanie wykonana i najczęściej stosowana jest przy operacjach na tablicach takich jak wypełnianie tablic, wyświetlanie oraz dokonywanie operacji na tablicach.

Przykład

Maszyna do losowanie liczb lotto tym razem przy wykorzystaniu pętli for for( lotto=1; lotto<=6; lotto=lotto+1) Losowanie liczby lotto. Poprzedni rozdział Następny rozdział