1 Podstawy programowania w języku C i C++Podstawy programowania w języku C i C++. Tematy: Makrodefinicje, operacje na znakach. Instrukcje warunkowe if … else; switch. Instrukcje iteracji: while, do…while, for. Cele nauczania: Podstawowe zasady programowania. Praktyczna znajomość elementów programowania w języku C/C++ Docelowo : Opracowanie algorytmu wybranego zadania geodezyjnego i przedstawienie go w postaci schematu blokowego. Opracowanie programu w wybranym języku programowania Wykonanie dokumentacji programu . Szczegółowe dla lekcji: Zapoznanie się z makrodefinicjami, podstawowymi operacjami na znakach, instrukcjami warunkowymi i instrukcjami iteracji. Praktyczne wprowadzanie, uruchamianie i kompilacja programów z tymi instrukcjami. Cele operacyjne lub szczegółowe cele kształcenia Po zakończeniu lekcji uczeń będzie umiał: stosować podstawowe proste makrodefinicje i operacje na znakach w C oraz instrukcje warunkowe i iteracje.
2 Część merytoryczna Część wstępnaCzęść wstępna - organizacyjna: przywitanie, sprawdzenie obecności, wpisanie tematu lekcji. - Część merytoryczna Ogniwo 1. Uświadomienie uczniom celów – pogadanka Celem zajęć jest zapoznanie się z pojęciem makrodefinicji, podstawowymi operacjami na znakach i łańcuchach znaków oraz instrukcjami warunkowymi if…else, switch i iteracyjnymi: while, do…while, for. Po 2 lekcjach : wpisuje i uruchamia programy, stosując proste makrodefinicje, operacje na znakach i instrukcje warunkowe oraz iteracyjne.
3 Ogniwo 2 Poznanie nowych faktów – pogadankaW języku C i C++ można stosować dyrektywy preprocesora #define - tzw. makrodefinicje – stałe symboliczne i makrorozwiniecia. Stała symboliczna jest nazwą zastępującą łańcuch znaków. Może być stała numeryczna, znakowa lub tekstowa. Np. #define PI= Do podejmowania decyzji w programie służą instrukcje warunkowe if, if…else oraz instrukcja wyboru switch…case. Do organizacji obliczeń cyklicznych stosuje się pętle while, do…while, for, instrukcję zaniechania break, kontynuowania continue.
4 Ogniwo 3. Kształtowanie pojęć, poznawanie, systematyzowanie wiedzy -Przypomnienie podstawowych elementów języka C: Programy w C mają rozszerzenia plików C a w C++ rozszerzenie CPP. Po skompilowaniu program ma rozszerzenie EXE. Polecenia kończymy średnikiem. Kod funkcji umieszcza się w nawiasach klamrowych. Rozróżniane są w C duże i małe litery. Stałe oznaczamy zwykle dużymi literami. W definicji poprzedzone słowem const Komentarze typu /* … */ w C i C++ mogą być wielo-liniowe oraz typu // w jednej linii w C++ Program zawiera zawsze: funkcję main(). Na końcu funkcji main jest zwykle return 0;. Zwykle program zawiera nagłówek jako komentarz,, dyrektywy preprocesora , zwłaszcza #include, czasem #define – stałe i makroinstrukcje. Przed funkcją główną mogą być zadeklarowane lub zdefiniowane stałe, zmienne globalne oraz funkcje. Zmienna musi być zadeklarowana prze użyciem. Aby zatrzymać program, używamy funkcji getch();. Do czyszczenia ekranu służy funkcja clrscr();. W tekście możemy używać tzw. znaków specjalnych, np. przejście do następnej linii \n. Program składa się z ciągu instrukcji rozdzielonych średnikami Instrukcje położone są pomiędzy słowami kluczowymi { i } Instrukcje mogą zawierać wyrażenia oraz wywołania funkcji. Wyrażenia składają się ze stałych, operatorów i identyfikatorów (nazwa stałych, zmiennych, funkcji). Identyfikatory są nazwami obiektów składających się na program. Mogą one zawierać litery, cyfry i znaki podkreślenia, nie mogą jednak zaczynać się od cyfr. Mogą zaczynać się od liter lub znaku _
5 Podstawowe typy danych w jezyku CW języku C każda zmienna ma swój typ, który musi być określony przed pierwszym użyciem. Istnieją wbudowane i zdefiniowane przez użytkownika typy danych. W języku C wyróżniamy następujące podstawowe wbudowane typy zmiennych. char – typ znakowy - jednobajtowe liczby całkowite, służy do przechowywania znaków (1 Bajt); int- liczby całkowite - typ całkowity, o długości domyślnej dla danej architektury komputera (2 B); float – liczby rzeczywiste - typ zmiennopozycyjny (zwany również zmiennoprzecinkowym), reprezentujący liczby rzeczywiste (4 Bajty); double – liczby rzeczywiste - typ zmiennopozycyjny podwójnej precyzji (8 B); Specyfikatory – signed, unsigned, short, long - słowa kluczowe, które zmieniają znaczenie short - liczby całkowite krótkie long - liczby całkowite długie long double - liczby zmiennoprzecinkowe podwójnej precyzji długie
6 Typy zmiennych, zakresy, rozmiar, zapisZapis liczb: dziesiętne, z kropką dziesiętną i ewentualnie E (postać m*10^c) ósemkowe z 0 na początku, szesnastkowe z 0x na początku.
7 Operatory można pogrupować wg cech funkcjonalnych na grupy:operatory arytmetyczne: +, -, *, /, % (dzielenie modulo - reszta) operatory porównania – relacyjne: ==, !=, <, >, <=. >+ operatory logiczne: && (and), || (or), ! (not) operatory bitowe operatory przypisania: =, += (a=+b a=a+b), -=, *=, /+, %=… operatory unarne inkrementacji i dekrementacji: ++, -- np. x++; x--; ++x; --x; operatory rozmiaru: sizeof(obiekt) operatory konwersji: (nazwa typu) wyrażenie operator warunkowy: Op1 ? Op2: Op3; operator przecinkowy: Op1, Op2, ..., Opn operatory wskazywania ->
8 Najczęściej używane operatory:
9
10 Inne operatory: Operator przecinkowy (,), stosowany w instrukcjach cyklu for a także w wywołaniach funkcji. Para wyrażeń oddzielonych operatorem obliczana jest od lewej do prawej. Rezultatem jest wyrażenie po prawej stronie. Ogólny zapis: wyrażenie po lewej, wyrażenie po prawej Instrukcja for z operatorem przecinkowym: for (wyr1; wyr2; wyr3a; wyr3b) { instrukcje} np. int i, j; for(i=0; j=10; j>=0; i++; j--) {printf(„\n %2i %2i %6.3f %6.3f, i, j, sqrt((double) i), sin((double) j)); } Przykład wywołania funkcji: f(a, b, (k=2, k+7), d) – wywołanie funkcji z 4 argumentami, trzeci ma wartość 9. Operatory wskazywania: & operator adresu, - adres zmiennej np. &count – adres zmiennej count * operator adresowania pośredniego, . operator składowej, -> operator wskaźnikowy składowej Operatory wejścia >> i wyjścia << w C++
11 Priorytety operatorów, kolejność wykonywania działań:Nawiasy mają najwyższy priorytet. Mnożenie i dzielenie mają pierwszeństwo przed dodawaniem i odejmowaniem. Dzielenie jest równoprawne z mnożeniem. W przypadku jednakowego priorytetu operatorów o priorytecie decyduje kolejność ich występowania w wyrażeniu – od lewej do prawej strony.
12 Instrukcje wejścia i wyjścia w języku C:Wejście i wyjście programu Do podstawowych funkcji języka C, umożliwiających komunikację z otoczeniem należą: dla operacji wyjścia: putchar, puts, printf; dla operacji wejścia: getchar, gets, scanf; W DOS, wyniki wysyłane na ekran mogą być przy pomocy znaku potoku wysłane do pliku lub na drukarkę. Np. program.exe > Wynik.txt do pliku, usunięcie istniejącego program.exe >> wyniki.txt do pliku – dopisanie do istniejącego program.exe > PRN na drukarkę
13 Kody sterujące Kody sterujące: Znaki specjalne:kod nowego wiersza: \n np. puchar(‘\n’); kod tabulacji: \t kod powrotu karetki \r Kod cofania \b kod wysunięcia strony \f kod dzwonka \a putchar(‘\a’); lub \007 Znaki specjalne: \’ – wyświetla apostrof, \” – cudzysłów, \\ - backslash, \007 – dzwonek /* Program dzwonki.c */ #include
14 Funkcja printf() - uniwersalnaFunkcje puts() i puchar() mogą wyświetlić tylko jedną rzecz: łańcuch znaków lub znak i nie mogą wyświetlić wartości liczbowych. Funkcja printf() jest bardziej uniwersalna. Może wyświetlić dane dowolnego typu i współpracować z wieloma argumentami. Wyprowadza wynik przetwarzania w różnych formatach. printf (łańcuch_sterujący, lista _danych_argumentów); lub inaczej printf(ciag_formatujący, lista parametrów); Ciąg formatujący jest zwykłym ciągiem znaków do wyświetlenia na ekranie. Jednak niektóre znaki mają funkcję specjalną i nie zostaną one po prostu wyświetlone. Takim właśnie znakiem jest znak % . Gdy funkcja printf() go napotka to wie, że po nim wystąpi określenie rodzaju argumentu i formatu jego wyświetlenia na ekranie. /* Przykład: getchar1.c */ #include
15 Formaty realizowane przez funkcję printf() (znaki typu w łańcuchach formatujących)
16 Wyprowadzanie danych w języku C++: cout <<Polecenie cout z operatorem wyjścia << , czyli cout << W C++ poza powyższymi istnieje dodatkowy sposób wyprowadzania informacji wszystkich typów: Instrukcja cout << wyświetla wartości literałów, stałych i zmiennych bez konieczności korzystania ze specyfikatorów formatowania. Do wykorzystania polecenia cout należy w dyrektywie #include wyspecyfikować plik iostream.h Polecenie cout języka C++ #include
17 Operacje wejścia wprowadzanie danych w C i C++Do wczytywania danych stosuje się instrukcje getchar(), gets(), scanf() w C i C++ oraz cin >> w C++ Funkcja gets() służy do wczytania pojedynczej linii. Np. char linia[80]; gets(linia); getchar umożliwia wprowadzenie pojedynczego znaku Np. char znak; znak=getchar(); putchar(znak); scanf() to uniwersalna funkcja do wprowadzania wszelkiego typu informacji. Składa się z łańcucha sterującego i listy danych. scanf(„lancuch_sterujacy”,lista_danych); Np. float ilosc; scanf(„%f”,&ilosc); Łańcuch sterujący zawiera specyfikatory formatowania – jak będą interpretowane dane wejściowe. Specyfikatory formatowania: %d – wprowadza liczbę całkowitą, %u – liczba bez znaku, %f – liczba float, %e – liczba w systemie wykładniczym, %g – liczba dziesiętna w najkrótszym zapisie, %c – dana znakowa char, %s – łańcuch znaków, %o – liczba ósemkowa, %x – liczba szesnastkowa
18 Specyfikatory formatowania%d – wprowadza liczbę całkowitą, %u – liczbę całkowitą bez znaku, %f – liczba rzeczywista typu float, %c – znak, %s – łańcuch, %o - liczba ósemkowa, %x – liczba szesnastkowa, %e – liczba w zapisie wykładniczym, %g – liczba dziesiętna w najkrótszym zapisie. Wzorzec konwersji określa typ zmiennej, którą wpiszemy z klawiatury lub wypiszemy na ekranie.
19 Tabela: deklaracje zmiennych określonego typu, wzorce konwersji, przykładyTyp zmiennej Deklaracja Wzorzec Postać funkcji scanf() Postać funkcji printf() liczba całkowita int A %d scanf("%d",&A); printf("Liczba A wynosi: %d",A); liczba rzeczywista float B %f scanf("%f",&B); printf("Liczba B wynosi: %f",B); ciąg znaków char *C %s scanf("%s",&C); printf("Łańcuch ma postać: %s",C); pojedynczy znak char D %c scanf("%c",&D); printf("Znak D to: %c",D); /* Program kalk1.c – prosty kalkulator, dane liczby całkowite*/ #include
20 Podsumowanie: operatory, instrukcje wejścia, wyjściaPodstawowe typy danych: char, int, float, long double specyfikatory long, signed, unsigned, short, long. Zapis liczb dziesiętnych, ósemkowych, szesnastkowych, znaków, kody sterujące (\n, \t, \f, \a – BEL, \r, \0 – nul, \’ itd.) Operatory: arytmetyczne, zwiększania i zmniejszania ++, --, relacyjne : <, <=, >, >=, ==, !=, logiczne (!, && - and, || - lub), przypisania =, wieloznakowe operatory przypisania (a#=b; czyli a=a#b; np. a+=b; a=a+b:), operator rozmiaru sizeof, operator konwersji (typ) wyrażenie, np. (float) (21/10); operator warunkowy wyr_warunkowe ? wyr_na_tak: wyr_na_nie (np. z = (a>b)? a:b; /* z=max(a,b) */ Instrukcje wejścia wyjścia: Wyświetlenie na ekranie: puchar(znak) – znak, puts(napis) - łańcuch znaków, printf(„łańcuch formatu”, argumenty); Wyprowadzanie wyników w C++: cout << lista, np. cout << „Wynik: „ << cout a << endl; Wprowadzanie danych: znak=getchar() – pojedynczy znak; gets(zmienna_łańcuchowa); - napis (do klawisza Enter), scanf(„łańcuch sterujący”, lista_danych) – uniwersalna funkcja do wprowadzania informacji wszelkiego typu. Wprowadzanie danych w C++: cin >> zmienna
21 Podsumowanie – wejście, wyjście, liczby, zmienne, wzorce konwersjiAby wczytać liczbę należy użyć funkcji scanf w postaci: scanf("wzorzec",&zmienna); Aby wypisać wczytaną w ten sposób liczbę należy użyć funkcji printf, która służy do wypisywania komunikatów. Postać funkcji: printf("Komunikat wzorzec",zmienna); W funkcji scanf zawsze przed nazwą zmiennej używamy znaku &, a nie robimy tego przy używaniu funkcji printf. Zmienna służy do przechowania danych, których wartość ustala się w trakcie działania programu i może być zmieniana. Każda zmienna musi być zadeklarowana przed jej użyciem jako zmienna odpowiedniego typu: int, float, char itp. Do wypisywania komunikatów służy funkcja printf, lub puts a do wczytywania zmiennych funkcja scanf. Do poprawnego użycia obu funkcji należy znać podstawowe wzorce konwersji: %d, %f, %s.
22 Preprocesor, dyrektywy, funkcje biblioteczne CPreprocesor przetwarza wiersze programu rozpoczynające się znakiem #. Taki wiersz nazywamy dyrektywą preprocesora. Podstawową dyrektywą jest #include, umożliwiająca dołączenie do programu pliku o podanej nazwie. Ma 2 postacie: #include
23 Stałe symboliczne Stała symboliczna jest nazwą zastępującą ciąg znaków #define NAZWA tekst Np. #define PI #define MIEJSCOWOSC Sosnowiec #define WYNIK printf(("Pole=%d\f %”,pole1) #define WZOR1 (a*b)
24 Stałe symboliczne - makrodefinicjeStała symboliczna jest nazwą przedstawiającą inną stałą - numeryczną, znakową lub tekstową. Definicję stałej symbolicznej umożliwia instrukcja #define: #define NAZWA tekst gdzie NAZWA jest nazwą stałej symbolicznej, a tekst jest związanym z tą nazwą łańcuchem znaków Przykłady: Makrodefinicje proste: #define identyfikator
25 Makrodefinicje parametryczne#define identyfikator(idPar1, idPar2,...) ciąg_jedn_leksykalnych Np. #define ILORAZ(a,b) ((a)/(b)) //- makrodefinicja ILORAZ – parametry a i b w nawiasach! #define SUMA(a,b) ((a)+(b)) W trakcie kompilacji nazwy stałych symbolicznych są zastąpione przez odpowiadające im łańcuchy znaków. Ułatwia to parametryzację programu, a także umożliwia zastępowanie często niewygodnych w pisaniu sekwencji programu, tworzenie makrodefinicji
26 Szablony programu dla ucznia – dane wpisane w #define/* Program Szablon1.c */ /* #include - włączenia tekstowe bibliotek */ #include
27 Szablon programu do obliczeń geodezyjnych/* zmienne globalne - stale, zmienne */ const double pi= ; const double rograd= , rostop= ; /* Ro[grad]=200/PI, Ro[stopn]=180/PO const char szkola[]="Sztygarka"; /* Przykladowa funkcja - deklaracja */ float suma1(float l1, float l2); /* ========== Funkcja glowna * ======== */ int main() { clrscr(); printf("Program: %s \n",PROGRAM); KRESKA2; puts(NAZWISKO); puts(KLASA); puts(SZKOLA); KRESKA; printf(" [grad]=%f[rad]",KATRAD(rograd)); /* -- dalszy kod programu, głównego */ KONIEC; getch(); return 0; } /* =========== Funkcje - definicje ======= */ float suma1(float l1, float l2) /* Definicja funkcji */ return(l1+l2); /* Schemat programu do obliczeń geodezyjnych */ /* Program Szablgeo.c */ /* preprocesor: #include - wlaczenia tekstowe bibliotek */ #include
28 Stałe wyliczeniowe (enumeration constant)Stałe wyliczeniowe tworzą zbiór stałych o określonym zakresie wartości. Wyliczenie jest listą wartości całkowitych, np. enum boolean {NO, YES}; Pierwsza nazwa na liście wyliczenia ma wartość 0, następna 1 itd., chyba że nastąpi jawnie podana wartość. Przykłady: enum KOLOR {CZERWONY, NIEBIESKI, ZIELONY, BIAŁY, CZARNY} enum KOLOR {red=100, blue, green=500, white, black=700}; red przyjmie wartość 100, blue 101, green 500, white 501, black 700
29 Operacje na znakach i łańcuchach znakówTypy znakowe: - deklaracja: char zmienna; pojedynczy znak: char znak; np. char zn1=‘a’; char litera; litera = ‘F’; łańcuch znaków (napis, słowo) char *napis; np. char *str1=„Programowanie”; char napis[n]; np. char linia[80]; gets(linia); char imie[20]; scanf("%s",imie); np.char napis[]="Tekst”, np. char pozdrowienie="Jak się masz” Wzorzec konwersji przy wyświetleniu lub wczytywaniu zmiennej typu char %c dla pojedynczego znaku (łańcucha jednoznakowego) np. char znak1; scanf("%c",&znak1); %s dla łańcucha dłuższego niż 1 znak np. char slowo2[20]; scanf("%s",slowo2);
30 /* Program znaki1.c */ #include
31 Przypisanie wartość zmiennej znakowej i napisomPrzypisać wartość zmiennej jednoznakowej możemy na kilka sposobów: w apostrofach: zmienna='a'; poprzez przypisanie kodu znaku: zmienna=97; poprzez wczytanie znaku z klawiatury funkcją scanf(): scanf("%c",&zmienna); Przypisanie wartości do zmiennej dla łańcucha znaków dłuższego niż jeden znak odbywa się podobnie jak w pierwszym przypadku, z tą jednak różnicą, że zamiast apostrofów ' należy używać cudzysłowia " char slowo3[]="Adam"; // definicja
32 Odczytanie długości łańcucha znaków – strlen(lancuch)/* dluglanc.c */ #include
33 Inne funkcje operujące na łańcuchach: strlwr, strupr, strcat, strrv, streset – z biblioteki string.hstrcat() - łączy dwa łańcuchy, strcmp() - porównuje dwa łańcuchy rozróżniając małe i duże litery, strlwr() i strupr() - zamienia w danym łańcuchu duże litery na małe i odwrotnie, strrev() - odwraca kolejność znaków w łańcuchu, strset() - wypełnia łańcuch danym znakiem. /* znaki5.c - operacje na tekstach */ #include
34 Podsumowanie – znaki, łańcuchy znakówZmienne liczbowe mogą zawierać się w pewnych zakresach, których nie można przekraczać. Deklaracja zmiennej znakowej: char znak; a zmiennej łańcuchowej: char *slowo; Wartość zmiennej znakowej można przypisać w programie poprzez umieszczenie znaku w apostrofach lub przez napisanie jego kodu. Wartość zmiennej łańcuchowej można przypisać w programie poprzez umieszczenie napisu w cudzysłowie. Zmienne znakowe i łańcuchowe można wczytywać z klawiatury używając funkcji scanf() i odpowiednich wzorców konwersji: %s dla ciągu znaków i %c dla pojedynczego znaku. Każdy znak posiada swój kod ASCII. Kod ASCII mają również znaki nie przedstawione na klawiaturze komputera. np. ß, ö. Łańcuch, który wygląda jak liczba nie jest liczbą. Istnieją funkcje, które potrafią przekonwertować łańcuch liczbowy do postaci liczby. Mając dany łańcuch, możemy odczytać dowolny jego znak używając nawiasów kwadratowych. Pierwszy wpisany znak ma numer 0, a nie 1. Każdy ciąg kończy znak '\0'. Długość łańcucha można ograniczyć przy deklaracji, np.: char slowo[10]; Łańcuchy można ze sobą porównywać, łączyć, odwracać w nich kolejność liter, zmieniać małe litery na duże i odwrotnie, a także przeszukiwać, kopiować na siebie itp. Nazwy funkcji, które to wykonują zawsze zaczynają się na 'str' (z angielskiego: string).
35 Zasięg zmiennej Zmienne globalne - obejmujące zasięgiem cały program – mogą być dostępne dla wszystkich funkcji programu. Deklaruje się je przed wszystkimi funkcjami programu: Zmienne globalne, jeśli programista nie przypisze im innej wartości podczas definiowania, są inicjalizowane wartością 0. Zmienne lokalne – o zasięgu obejmującym pewien blok. Zmienne, które funkcja deklaruje do “własnych potrzeb” nazywamy zmiennymi lokalnymi. Pytanie: Czy jest błędem nazwanie tą samą nazwą zmiennej globalnej i lokalnej?. Nie. Natomiast w danej funkcji da się używać tylko jej zmiennej lokalnej. Tej konstrukcji należy, unikać. int a=1; /* zmienna globalna */ int main() { int a=2; /* to już zmienna lokalna – gdyby nie ta definicja to a =1 */ printf("%d", a); /* wypisze 2 (gdyby nie było powyższej instrukcji to 1)*/ }
36 Biblioteki, procedura, funkcjaBiblioteki (moduły) - zapisane są w nich różne funkcje i procedury do użycia w programie. Funkcja - jest to podobnie jak procedura, pewien wyraz, który nie dość że coś wykona to również zwróci nam rezultat tego co zrobił, przykładowymi funkcjami są: pierwiastkowanie, sinus, cosinus. Zwracaną wartością niekoniecznie musi być liczba może to być również inny rodzaj zmiennych.
37 Typy char (C) bool, string (C++)TYP ZNAKOWY - CHAR - typ ten przyjmuje dowolny pojedynczy znak o kodach ASCII (0..255) np. znak ‘A’ czy ‘!’ W C łańcuchy reprezentuje się jako tablice znaków char slowo[dlug] a operacje na nich wykonuje z użyciem wskaźników. TYP LOGICZNY - bool- typ ten może przyjmować jedynie dwie wartości: true (prawda) – 1 lub false (fałsz) - 0 #include
38 INSTRUKCJE STERUJĄCE PODEJMOWANIE DECYZJI W PROGRAMIEInstrukcja warunkowa if…else; Instrukcja wyboru switch ORGANIZACJA OBLICZEŃ CYKLICZNYCH - INSTRUKCJE PĘTLI: Instrukcja pętli while Instrukcja pętli do … while Instrukcja pętli for
39 Instrukcja warunkowa if… [else...]Pozwala na wykonanie lub zaniechanie wykonania pewnych czynności, w zależności od konkretnego warunku logicznego. Instrukcja ma następującą składnię: if (warunek) instrukcja; np. if (x>30) y=20; If (warunek) {instrukcja_1; instrukcja_2; … instrukcja_N;} np. if (min
40 jesli Warunek to Instrukcja; if (W) I;// if1a.c – instrukcja if #include
41 jeśli W to Instrukcja1 w przeciwnym przypadku Instrukcja2; if (W) I1; else I2; // program if1.c #include
42 Przykłady programów z if/* Program if1c.c język C */ #include
43 Ogólna składnia if.. elseif (warunek_logiczny) { instrukcje_do_wykonania } else if (inny_warunek_logiczny) { instrukcje_do_wykonania } else { instrukcje_do_wykonania } Po słowie kluczowym if, w nawiasie umieszcza się warunek. Jeśli jest prawdziwy, program przechodzi do wykonywania kodu w klamrach. Co jeśli warunek jest fałszywy? Wtedy program sprawdza kolejne warunki (każdy następny to już nie if, lecz else if) aż do napotkania wartości prawdziwej, po której wykonywany jest kod w klamrach. Jeśli wszystkie wartości będą fałszywe, program wykona kod umieszczony w klamrach po instrukcji else.
44 // Program if2. cpp C++ #include
45 Przykładowy program - zagnieżdżone instrukcje if - obliczenie podatku/* Program podatek.c */ #include
46 Instrukcja if i operatory logiczne: && (and), || (or), ! (not)Mogą one przyjmować wartości true czyli 1 lub 0 czyli false Za ich pomocą możemy skonkretyzować nasz warunek. Np. if (warunek1) && (warunek2) instrukcja; Operator &&(koniunkcja) sprawia, że instrukcja zostanie wykonana tylko w przypadku gdy spełnione są oba warunki. Gdybyśmy zastąpili go operatorem || (alternatywa), to wystarczyłby tylko jeden spełniony. Drugi przypadek if (! Warunek) instrukcja; W tym przypadku instrukcja będzie wykonana jeśli warunek nie jest spełniony (ma wartość false). Do tego właśnie służy operator ! (czyli negacja).
47 if (a !=0) if (delta==0 … else Równanie kwadratowe if (a !=0)a*x2 + b*x +c = 0 Instrukcje: if (a !=0) if (delta==0 … else if ((a==0) && (b==0)) … if ((a==0) && (b!=0)) /* program rowkwadr.cpp */ #include
48 If - podsumowanie Jeżeli do rozpatrzenia mamy kilka przypadków, stosujemy instrukcję warunkową if. Instrukcję zapisujemy: if (warunek) instrukcja1; else instrukcja2; Dla więcej niż jednej instrukcji należy zgrupować je za pomocą nawiasów klamrowych. W warunku logicznym instrukcji if zawsze stosujemy operator porównania ==, a nie przypisania =. Jeśli jednocześnie powinno być sprawdzone kilka warunków, łączymy je za pomocą operatorów logicznych && (and) , || (or) lub ! (nie)
49 Instrukcja switch - instrukcja wyboruInstrukcja switch jest wykorzystywana kiedy zachodzi konieczność podjęcia kilku decyzji, gdy wykonanie różnych części programu jest uzależnione od stanu pewnej zmiennej. Podstawą podjęcia decyzji jest wyrażenie typu całkowitego, znakowego lub logicznego Instrukcja switch ma postać: switch (zmienna lub wyrażenie) { case wartosc_1: Instrukcje_1; break; // break nie musi być case wartosc_N: Instrukcje_N; break; default Instrukcje_domyslne; }
50 Instrukcja wyboru switch dla wielu warunków switch – case – przypadek W spośród (I1, I2, … In)
51 Instrukcja wyboru switch (przełącznik) to tzwInstrukcja wyboru switch (przełącznik) to tzw. zwrotnica wielokierunkowa. Instrukcja ta pozwala na zdefiniowanie działań dla różnych wyników jednego wyrażenia. Jej konstrukcja pozwala na łatwiejsze od zwykłej pętli definiowanie przypadków (większej ich liczby). Instrukcją decyzyjną switch zastąpić można wielokrotne wywoływanie instrukcji warunkowej if np. dla różnych wartości tej samej zmiennej – przykładowo, gdy zmienna może przyjąć 10 różnych wartości, a dla każdej z nich należy podjąć inne działanie. Składnia: Wyrażenie najczęściej jest zmienną o określonej wartości. Jeśli tą wartością jest wartość 1, wykonywane są instrukcje następujące po odpowiedniej etykiecie case, aż do następnej instrukcji przerywającej, z reguły break (instrukcja opuszczenia nie musi występować na zakończenie każdego bloku rozpoczętego przez case – wykonany zostanie wtedy kod następnych przypadków). Przypadek default jest opcjonalny, określa instrukcje wykonywane, gdy wartość zmiennej nie jest równa żadnemu z wyszczególnionych przypadków. switch (wyrażenie_kluczowe) { case wartosc_1: instrukcje; break; case wartosc_2: instrukcje; break; // ... default: cout << "Błąd"; }
52 /* Przykład programu ze switch case *//* case_2. c */ #include
53 Przykład: Wydruk w postaci słownej wczytanej oceny/* program oceny.c */ include
54 Instrukcja wyboru switch .. case – przykłady programów// Program Miesiace.cpp - //podaje nazwe miesiaca na podstawie jego numeru #include
55 switch … case i instrukcja skoku gotoPrzy omawianiu instrukcji switch-case należy wspomnieć również o instrukcji skoku: goto. Jest to bardzo przydatna instrukcja przy skomplikowanych programach. W programach z instrukcją case, po naciśnięciu odpowiedniego klawisza zostaje wykonana odpowiednia instrukcja. A gdybyśmy chcieli, żeby wykonana została nie jedna czy dwie instrukcje, a więcej? Można wypisywać instrukcje jedna po drugiej, ale kod szybko straciłby na czytelności. Można się więc posłużyć instrukcją skoku, aby program na chwilę przeszedł do innego miejsca kodu, wykonał to co jest tam napisane i z powrotem powrócił do miejsca początkowego. Jak oznaczyć miejsce, do którego program ma wyskoczyć? Służą do tego etykiety.
56 Instrukcje switch case , goto - etykiety/* Program goto1.c - switch..case z etykietami*/ #include
57 Działanie programu goto1.c – switch…case z etykietamiDziałanie tego programu wciśnij klawisz => jaki klawisz został wciśnięty? => jeśli 0 => idź do etykiety 'koniec' i zacznij wykonywać wszystko od tego miejsca; jeśli 1 => idź do etykiety 'jeden' i zacznij wykonywać wszystko od tego miejsca; jeśli 2 => napisz komunikat a potem idź do etykiety 'koniec' i zacznij wykonywać wszystko od tego miejsca; jeśli 3 => napisz komunikat a potem idź do etykiety 'koniec' i zacznij wykonywać wszystko od tego miejsca; jeśli 4 => napisz komunikat a potem idź do etykiety 'koniec' i zacznij wykonywać wszystko od tego miejsca; jeśli 5 => idź do etykiety 'jeszcze_raz' i zacznij wykonywać wszystko od tego miejsca;
58 Podsumowanie: instrukcje warunkowe if, switch, skoku gotoInstrukcję if stosujemy dla mniejszej ilości warunków do sprawdzenia, lub dla bardziej skomplikowanych warunków - wtedy stosujemy operatory logiczne np. && lub ||. Instrukcję case stosujemy dla dużej ilości prostych warunków. Określenia else w instrukcji if i default w instrukcji case znaczą: "dla pozostałych przypadków" Instrukcja goto jest to instrukcja skoku do pewnego miejsca w kodzie programu. Miejsce skoku należy oznaczyć odpowiednią etykietą. Za pomocą goto można robić pętle programowe lub szybko skończyć działanie.
59 Instrukcje iteracyjne. Organizacja obliczeń cyklicznychInstrukcje iteracyjne służą do wielokrotnego wykonywania pewnych sekwencji instrukcji i zazwyczaj są one nazywane po prostu pętlami. Instrukcja while - dopóki Warunek wykonuj Instrukcję; Składnia: while (wyrazenie) instrukcja; Instrukcja do while – powtarzaj Instrukcję dopóki Warunek Składnia: do instrukcja while (wyrazenie); Instrukcja for: np. dla i od 1 do N lub dla i=W1 do W2 wykonuj Instrukcję for (i=W1; i
60 Instrukcja while Instrukcja ma postać: while (warunek) instrukcja;Powoduje wykonywanie instrukcji tak długo, dopóki spełniony jest warunek Warunek jest najczęściej dowolnym wyrażeniem porównania, które powinno w wyniku dać wartość logiczną (true lub false). Można posłużyć się tutaj operatorami relacyjnymi: ==, !=, <, >, <=, >= Instrukcja wykonywana jest tak długo, dopóki warunek ma wartość true.
61 Pętla while (warunek) // dopóki warunek prawdziwy { instrukcja_1; instrukcja_2; ... Instrukcja_N;}; // wykonuj te instrukcje (listę instrukcji lub jedną instrukcję) while (wyrażenie) instrukcja; // instrukcja pojedyncza (lub złożona) while (wyrażenie) { lista instrukcji // instrukcja złożona (lista instrukcji) }
62 Z pętli while korzystamy, kiedy nie znana jest liczba powtórzeń i być może pętla ta wcale nie będzie wykonana. Warunek jest testowany przed każdym, nawet pierwszym wykonaniem pętli, Najpierw jest obliczana wartość wyrażenia (wyrażenie) i jeżeli ma ono wartość różną od zera (prawda), to jest wykonywana instrukcja, która może być instrukcją złożoną. Instrukcja może nie być nigdy wykonana, jeżeli przy pierwszym obliczeniu wartości wyrażenia (wyrażenie) będzie ono miało wartość zero (fałsz).
63 Przykłady programów z while/* Program NWD-dev.c Najwieksza wspolna wielokrotnosc */ #include
64 Przykład programu z while – suma 6 podanych liczb// Program Suma6.cpp; Oblicza sumę 6 podanych liczb #include
65 Przykład - obliczenie sumy i iloczynu ciągu liczb zakończonych liczbą zero./* Program sumilocz.c * - while / #include
66 Przykład 2 - wyprowadzenie kilku znaków (cyfry i kody ASCII):/* while_3.c - cyfry kody */ #include
67 /* Przykład 3 - program zamlit.c -zamiana liter małych na duże */#include
68 Pole prostokąta – schemat blokowy
69 ** Pole prostokąta – while – wersja C **/* polpr1a.c Pole prostokąta - while */ /* Dyrektywy */ #include
70 ** Pole prostokąta – while - wersja C++ Dev C++**// polpr1.cpp Pole prostokata CPP Dev C++ #include
71 /** Pole prostokąta – obliczenia w pętli while, zapis wyników do pliku pprost.txt **//* polpr1a.c Obliczenie pola prostokąta, zapis do pliku */ #include
72 Programy z do … while // Program ilosc.cpp wyznacza długość ciągu liczb zakończonych 0 #include
73 Wyświetlenie czasu C++ - program w Dev C++// Program czas.cpp w jezyku C++ - wyświetlenie czasu - komentarz w C++ // instrukcja do…while #include
74 Instrukcja for Instrukcja jest wygodna, gdy z góry można określić liczbę powtórzeń. Postać instrukcji: Dla zmienna=wart_pocz do wart_konc do instrukcja; W zapisie w C najczęściej for (wart_pocz; zmienna
75 Programy z for /* Program for1.cpp Wydruk cyfr od 1 do 5 */#include
76 Przykład programu z instrukcją for -tabliczka mnożenia/* tablmnoz.c */ #include
77 Opis przykładowego zapisu forPrzykład: for (licznik=0; licznik<=10; licznik++) { instrukcje... } Wytłumaczenie dosłownie zapisu : zmienna sterująca użyta przez nas do zliczania wykonań pętli ma nazwę licznik licznik zaczyna zliczać od wartości 0 pętla ma się wykonywać, kiedy licznik pokazuje wartość mniejsza lub równa 10 licznik ma się zwiększać o 1 po każdorazowym wykonaniu pętli instrukcje, które mają się powtarzać, ujęte są w nawias klamrowy { } jeżeli byłaby to jedna instrukcja, nawias można by pominąć.
78 Podsumowanie: for for(licznik=StanPocz; licznik<=WartKonc; licznik++) {instrukcje...}; Instrukcji for używamy, jeżeli chcemy wykonać kilka instrukcji określoną ilość razy. Przy użyciu instrukcji for należy ustawić warunki na licznik: stan początkowy, warunek wykonywania pętli i wartość o jaką zmienia się wartość licznika po wykonaniu pętli. Licznik jest to dodatkowa zmienna typu int. Licznik nie musi być zwiększany, równie dobrze może liczyć w odwrotną stronę. Licznik nie musi zmieniać się o 1, lecz o dowolną wartość, aczkolwiek pierwszy przypadek jest częściej wykorzystywany w praktyce
79 Podsumowanie instrukcji pętli: while , do while, forPętle while i do-while stosujemy, gdy powtarzanie pętli chcemy uzależnić od spełnienia pewnego warunku i nie wiemy ile razy będzie trzeba ja powtórzyć. Pętla while najpierw sprawdza warunek, instrukcje w niej zawarte mogą nigdy nie zostać wykonane. Pętla do-while najpierw wykonuje instrukcje, a potem sprawdza warunek, więc instrukcje zostaną wykonane co najmniej raz. Pętlę for stosujemy, gdy wiemy ile razy ma się ona powtórzyć.
80 Instrukcja break Pozwala na opuszczenie aktualnie wykonywanej pętli for, while oraz do i przejście do instrukcji znajdującej się po zakończonej pętli. Daje możliwość wcześniejszego opuszczenia pętli. //* Program break1.c - wyjście z pętli for gdy wprowadzono 0 */ #include
81 #include
82 Instrukcja kontynuowania - continueInstrukcja powoduje zakończenie bieżącej iteracji aktualnie wykonywanej pętli for, while oraz do. Powoduje wykonanie od początku następnego kroku pętli, w której się znajduje. Instrukcja break kończy wykonywanie pętli, a instrukcja continue kończy jedynie bieżącą iterację. Przykład fragmentu programu: for (i=0; i
83 Przykłady z continue - program continue1.c/* continue1.c */ #include
84 Prz. 2 z continue. Wyświetlenie liczb, które nie są podzielne przez 4 i przez 5/* continue2.c */ #include
85 Instrukcja wywołania funkcjiPostacie wywołania funkcji: w instrukcji przypisania, np. c=getchar(); y=sin(x); samodzielnie, np. printf(...), scanf(...), puts(...); itd..
86 Instrukcja powrotu - return i skoku gotoInstrukcja powrotu return ma 2 postacie: return; // nie wyprowadza wyniku funkcji return wyrazenie; // udostępnia rezultat funkcji o wartości jaką ma wyrażenie (po ewentualnej konwersji) Instrukcja skoku - goto - skok bezwarunkowy Instrukcja skoku ma postać: goto etykieta; Etykieta jest ciągiem znaków, zakończonych dwukropkiem. Zakresem widzialności etykiety jest blok instrukcji, w którym została zadeklarowana. Instrukcja może być używana sporadycznie (awaryjnie). Są języki, które jej nie posiadają.
87 return - objaśnienie return zmienna Wynik funkcji musi być tego samego typu co funkcja, czyli: int funkcja() { int a = 5; return a; } W przypadku próby zwrócenia wyniku innego typu niż funkcja kompilator zgłosi błąd: int funkcja() { char a[] = "abcdefg"; return a; /* powinien być zwrócony wynik typu int, więc kompilator pokaże błąd */ } Możliwe jest także zwrócenie wyniku w postaci innej niż zmienna, np.: int funkcja() { return 5; } return przydaje się też do zakończenia wykonywania dowolnej procedury (funkcji, która zwraca void) #include
88 Przykład programu z return – w funkcji pomocniczej dodaj() i funkcji głównej main()/* return1. c*/ #include
89 /* Program goto1.c - instrukcja skoku goto *//* Program goto1.c ( instrukcja goto ) */ #include
90 Podsumowanie: return i gotoreturn to instrukcja powrotu - return - słowo kluczowe; zwraca się za jego pomocą wartość funkcji. Instrukcja powrotu return ma 2 postacie: return; // nie wyprowadza wyniku funkcji return wyrazenie; // udostępnia rezultat funkcji o wartości jaką ma wyrażenie (po ewentualnej konwersji) Instrukcja goto jest to instrukcja skoku – skok bezwarunkowy do pewnego miejsca w kodzie programu. Instrukcja skoku ma postać: goto etykieta; Miejsce skoku należy oznaczyć odpowiednią etykietą. Etykieta jest ciągiem znaków, zakończonych dwukropkiem Za pomocą goto można robić pętle programowe lub szybko skończyć jego działanie. Zakresem widzialności etykiety jest blok instrukcji, w którym została zadeklarowana. Instrukcja może być używana sporadycznie (awaryjnie). Są języki, które jej nie posiadają.