przedmiot kończy się zaliczeniem na stopień proponowany...

33
2018-04-04 Programowanie strukturalne – W1 1 Programowanie strukturalne dr inż. Tadeusz Jeleniewski Wykład 1 Dr inż. Tadeusz Jeleniewski e-mail: [email protected] lub [email protected] Materiały – streszczenia wykładów, zadania, przykłady znajdują się pod adresem: http://tjeleniewski.ujw.edu.pl Przedmiot kończy się zaliczeniem na stopień Przedmiot kończy się zaliczeniem na stopień Proponowany termin kolokwium zaliczeniowego – ostatni wykład w semestrze letnim Formą towarzyszącą jest laboratorium Formą towarzyszącą jest laboratorium

Upload: dinhnhu

Post on 01-Mar-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

2018-04-04 Programowanie strukturalne – W1 1

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Wykład 1

Dr inż. Tadeusz Jeleniewski e-mail: [email protected]

lub [email protected]

Materiały – streszczenia wykładów, zadania, przykłady znajdują się pod adresem:

http://tjeleniewski.ujw.edu.pl

Przedmiot kończy się zaliczeniem na stopieńPrzedmiot kończy się zaliczeniem na stopieńProponowany termin kolokwium zaliczeniowego – ostatni wykład w semestrze letnimFormą towarzyszącą jest laboratoriumFormą towarzyszącą jest laboratorium

2018-04-04 Programowanie strukturalne – W1 2

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Programowanie strukturalne – program zajęć1. Wprowadzenie Algorytmiczne języki programowania. Struktura programu źródłowego w

języku C/C++. Proces kompilacji, konsolidacji i uruchamiania. Przykład prostego programu. Jednostki składniowe języka.

2. Podstawowe pojęcia Typy wartości, zmienne. Reprezentacja danych w komputerze. Typy całkowite i rzeczywiste. Inicjacja zmiennych.

3. Komunikacja programu z otoczeniem Funkcje scanf, printf, gets, puts. Podejście "obiektowe" -strumienie standardowe cin, cout

4. Wskaźniki Zmienne i ich adresy. Odwoływanie się do zmiennych przez nazwę lub adres. Zmienne wskaźnikowe - notacja, znaczenie. Arytmetyka wskaźników.

5. Operatory i wyrażenia Przypisanie proste i arytmetyczne, wyrażenia arytmetyczne, inkrementacja i dekrementacja, operatory logiczne, relacje, operatory bitowe, wyrażenie warunkowe

6. Sterowanie wykonaniem programu Instrukcja if, if ... else, else if. Zagnieżdżanie instrukcji if. Instrukcja switch ... case

7. Instrukcje iteracyjne Pojęcie pętli programowej. Pętla for, pętle z badaniem warunku na początku (while) i na końcu (do ... while). Zagnieżdżanie pętli. Instrukcje break oraz continue

8. Funkcje Pojęcie funkcji w C/C++. Deklaracja (prototyp) i definicja funkcji. Zwracanie wartości funkcji. Przekazywanie argumentów przez wartość, adres i referencję

9. Tablice i łańcuchy Typ strukturalny - tablica, deklaracja i inicjacja wartości elementów. Tablice jako argumenty funkcji. Łańcuch znaków i jego reprezentacja w postaci tablicy znakowej.

10. Struktury Pojęcie struktury, deklaracja struktury, atrybuty dostępu, możliwość definiowaniametod. Zagnieżdżanie struktur. Wskaźniki na struktury. Tablice struktur. Unie i ich zastosowanie.

2018-04-04 Programowanie strukturalne – W1 3

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

LiteraturaLiteratura

• Walter Savitch Programowanie w tonacji C++. Wydawnictwo RM, Warszawa, 2005

•Jerzy Grębosz Symfonia C++. Oficyna Kallimach, Kraków, 2010

•Jesse Liberty C++ dla każdego. Wydawnictwo HELION, 2002

I wiele innych podręczników na temat programowania w języku C/C++

2018-04-04 Programowanie strukturalne – W1 4

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

O czym będzie pierwszy wykład ?• Co to jest program komputerowy i jak powstaje

• Struktura programu źródłowego w języku C/C++

• Jednostki składniowe

• Typy i zmienne całkowite, reprezentacja danych całkowitych, stałe całkowite

• Typy rzeczywiste, inicjacja zmiennych rzeczywistych

• Typy i zmienne wskaźnikowe

2018-04-04 Programowanie strukturalne – W1 5

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Tworzenie programu komputerowego w języku C/C++ (i innych) odbywa się w dwóch etapach: - opracowanie kodu źródłowego- generowanie kodu wynikowego.

Przed rozpoczęciem opracowywania kodu źródłowego należy obmyślić algorytmrozwiązania postawionego zadania.

Algorytm to sposób rozwiązania pewnej klasy zadań.

Opracowanie kodu źródłowego czyli tzw. kodowanie to zapis wcześniej obmyślonego algorytmu w języku programowania - w naszym przypadku jest nim język C/C++.

Kod wynikowy generuje komputer.

Specjalny program - kompilator analizuje kod źródłowy programu pod względem poprawności leksykalnej, składniowej i częściowo semantycznej (znaczeniowej) i po ewentualnym usunięciu przez programistę wykrytych błędów tłumaczy na postać pośrednią, do której inny program (program łączący - linker) dołącza brakujące elementy umieszczone w bibliotekach funkcji.

2018-04-04 Programowanie strukturalne – W1 6

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Po pomyślnym zakończeniu procesu łączenia powstaje kod wynikowy - program gotowy do wykonania przez maszynę.

Jest to algorytm rozwiązania zadania zapisany w języku wewnętrznym komputera.

Algorytm nie jest na ogół pozbawiony błędów wykonania.

Są to błędy, których nie wykrywa kompilator w fazie analizy poprawności programu źródłowego.

Inna kategoria błędów, to błędy wykrywane przez program tłumaczący – kompilator. Są to tzw. błędy kompilacji. Porównać je można do błędów ortograficznych, składniowych oraz gramatycznych, które często zdarza nam się popełniać w języku naturalnym (nawet ojczystym).

Rysunek przedstawia schematycznie przebieg procesu tworzenia kodu wynikowego pewnego programu

2018-04-04 Programowanie strukturalne – W1 7

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

2018-04-04 Programowanie strukturalne – W1 8

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Charakterystyczną cechą języka C/C++ jak i wielu innych języków programowaniajest możliwość budowy programu z wielu modułów.

Modułem w języku C/C++ może być każdy plik zawierający poprawny kod źródłowy.

Program w języku C/C++ buduje się z funkcji.

Każda funkcja może (ale nie musi) posiadać parametry

i może, ale nie musi reprezentować wartość określonego typu.

Aby możliwe było wygenerowanie kodu wynikowego programu w postaciprzyjmowanej przez system operacyjny (w systemach operacyjnych DOS, Windowsjest to zbiór z rozszerzeniem .exe) w jednym (i tylko w jednym) module programumusi znaleźć się funkcja o nazwie main (lub podobnej zależnie od środowiska). Od tejfunkcji głównej system rozpoczyna wykonywanie programu.

Moduł, który zawiera tą funkcję nazywa się modułem głównym.

2018-04-04 Programowanie strukturalne – W1 9

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Najprostszy, poprawny program w C/C++ może mieć postać:

void main(void){}

Program ten składa się z bezparametrowej funkcji main.Funkcja ta nie reprezentuje żadnej wartości - powiadamy że nie "zwraca" do systemu operacyjnego żadnej wartości. Wewnątrz nawiasów klamrowych znajduje się blok, który zawiera definicję funkcji. Definicję funkcji często nazywa się jej ciałem.

Przydatność praktyczna takiego programu jest oczywiście znikoma. Wewnątrz bloku stanowiącego definicję funkcji nie umieszczono żadnego polecenia – ten program niczego nie wykonuje.

2018-04-04 Programowanie strukturalne – W1 10

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Inny, prosty program może mieć postać:

/* Program 1.2 - przykład prostego programunapisanego w języku C++.Program wyświetla na ekranie komunikatpowitalny

*/#include <iostream.h>void main(void){

cout << "\nWitaj w świecie C++";}

2018-04-04 Programowanie strukturalne – W1 11

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

W tekście tego programu można wyróżnić następujące elementy (jednostki składniowe):

· komentarz - fragment tekstu pomijany przez kompilator w procesie analizy i tłumaczenia programu źródłowego; komentarzem jest dowolny tekst pomiędzy parą symboli dwuznakowych /* (ukośnik gwiazdka) oraz */ (gwiazdka ukośnik); w wersji C++ języka znacznikiem komentarza (tzw. jednowierszowego) jest też znak // i wtedy kompilator ignoruje napis od tego znacznika do końca wiersza;

• dyrektywa preprocesora - słowo include wraz z poprzedzającym je znakiem #; jest to polecenie dla kompilatora, aby przed rozpoczęciem analizy tekstu źródłowego dołączył do niego tzw. plik nagłówkowy o nazwie iostream.h; w plikach nagłówkowych znajdują się definicje symboli użytych w programie oraz tzw. prototypy funkcji;

· deklaracja funkcji main - przykładowy program składa się z bezparametrowej funkcji głównej nie reprezentującej sobą żadnej wartości, na co wskazuje słowo kluczowe void poprzedzające nazwę funkcji głównej;

· wewnątrz nawiasów klamrowych znajduje się blok zawierający definicję (ciało) funkcji głównej;

cout jest nazwą obiektu zdefiniowanego w pliku nagłówkowym iostream.h; obiekt ten to tzw. strumień wyjściowy, do którego za pomocą operatora << (również zdefiniowanego w pliku iostream.h) program prześle tekst komunikatu do wyświetlenia na ekranie monitora.

2018-04-04 Programowanie strukturalne – W1 12

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Przykładowy program wyświetli na ekranie monitora napis (komunikat) treści:Witaj w świecie C++

oraz zakończy działanie.

Takie samo zadanie wykona program:

/* Program w1_2 - inna wersja (proceduralna)prostego programu, ktory wyswietlakomunikat powitalny

*/#include <stdio.h>void main(void){

printf("\nWitaj w swiecie C++");}

Do wyświetlenia komunikatu użyto tutaj funkcji standardowej o nazwie printf, której parametrem jest łańcuch znaków. Funkcja ta nie zwraca żadnej wartości. Warto zauważyć, że w tym przypadku do tekstu programu dołączono inny niż poprzednio plik nagłówkowy. W pliku stdio.h znajduje się prototyp funkcji standardowej użytej w naszym przykładzie. Definicja tej funkcji znajduje się w bibliotece funkcji standardowych, która jest automatycznie przeglądana przez program łączący w fazie tworzenia kodu wynikowego.

2018-04-04 Programowanie strukturalne – W1 13

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Jednostkami składniowymi języka C++ są: identyfikatory, słowa kluczowe, znakiprzestankowe, stałe, literały łańcuchowe, operatory.

Identyfikatorem (nazwą) w języku C++ może być ciąg dużych i małych liter, cyfr iznaku podkreślenia .

Identyfikator jest nazwą elementu języka (zmiennej, funkcji itp.).

Pierwszy znak identyfikatora musi być literą lub znakiem podkreślenia.

Kompilator C++ rozróżnia pierwsze 32 litery nazwy. Nazwy dłuższe są poprawne.Kompilator rozróżnia duże i małe litery nazwy.

Nazwa Yuma_15_10 jest identyfikatorem zupełnie innego elementu programu niż

np. yUMA_15_10

2018-04-04 Programowanie strukturalne – W1 14

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Słowa kluczowe są to identyfikatory zastrzeżone dla specjalnych celów. Mogą byćwykorzystywane tylko zgodnie z ich przeznaczeniem.

Zestawienie wszystkich słów kluczowych można znaleźć w wielu podręcznikach językaC/C++

Kilka przykładów słów kluczowych:

void for int short float return do while structclass continue switch case

Słowa kluczowe to instrukcje języka, nazwy typów, dyrektywy preprocesora i kompilatoraitp.

2018-04-04 Programowanie strukturalne – W1 15

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Znakami przestankowymi są:[ ] ( ) { } , ; : ... * = #

·nawiasy kwadratowe [ ] - definiowanie tablic i wskazywanie ich elementów,

·nawiasy okrągłe ( ) - grupowanie wyrażeń, wywołania funkcji, lista

parametrów,

·nawiasy klamrowe { } - początek i koniec instrukcji złożonej (bloku),

·przecinek , - oddzielanie elementów listy,

·średnik ; - zakończenie instrukcji,

·dwukropek : - poprzedzający go ciąg znaków jest etykietą,

·wielokropek ... - deklarowanie funkcji o zmiennej liczbie parametrów,

·gwiazdka * - deklarowanie zmiennych wskaźnikowych,

·znak równości = - oddzielanie deklaracji zmiennej od części inicjującej tą zmienną,

·znak # - oznaczenie dyrektywy preprocesora.

2018-04-04 Programowanie strukturalne – W1 16

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Typ danej to zbiór wartości jakie dana może przyjmować.Typ danej determinuje również sposób jej przechowywania w pamięci komputerai obszar jaki zajmuje (liczbę jednostek pamięci - bajtów).W języku C/C++ dostępne są typy proste i strukturalne.Typy proste wykorzystuje się do tworzenia typów strukturalnych.Do kategorii prostych w języku C/C++ należą typy:- arytmetyczne całkowite i rzeczywiste,- wskaźnikowe,W języku C++ występuje ponadto typ referencyjny.

Typy strukturalne mogą składać się z danych typów prostych i innych typówstrukturalnych. Typami strukturalnymi w języku C/C++ są:- tablice,- struktury,- unie.W C++ grupę typów strukturalnych uzupełniają klasy.Typ danej jest pojęciem logicznym. Reprezentantem fizycznym typu danej jest zmienna.

2018-04-04 Programowanie strukturalne – W1 17

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Typy i zmienne całkowite.

Typy całkowite w C/C++ są skończonymi, przeliczalnymi podzbiorami zbioru liczb

całkowitych. Zmienne typów całkowitych deklaruje się w programach za pomocą

słów kluczowych (lub ich kombinacji):

char typ znakowy

int typ całkowity

long typ tzw. długich liczb całkowitych

signed liczby całkowite ze znakiem

short typ tzw. krótkich liczb całkowitych

unsigned liczby całkowite bez znaku

2018-04-04 Programowanie strukturalne – W1 18

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Wymienione słowa kluczowe można łączyć dla oznaczenia różnych kombinacji cechzmiennych.

Przykłady:char a;signed char a; - zmienna a jest wartością dziesiętną kodu ASCII

pewnego znaku – wartość kodu jest opatrzonaznakiem plus lub minus

short k, m, n;short int k, m, n;short signed k, m, n;short signed int k, m, n; - zmienne k, m, n są liczbami

całkowitymi krótkimi ze znakiemunsigned short q, ilosc;unsigned short int q, ilosc; - zmienne q, ilosc są liczbami

całkowitymi krótkimi bezznaku

int K[20]signed int K[20]; - tablica K zawiera liczby całkowite ze znakiem (dodatnie albo

ujemne)

2018-04-04 Programowanie strukturalne – W1 19

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

unsigned _jakosc;

unsigned int _jakosc; - zmienna _jakosc jest liczbą całkowitą bez znaku

long dlugosc, kat;

long int dlugosc, kat;

signed long int dlugosc, kat; - zmienne dlugosc, kat są liczbami

całkowitymi długimi ze znakiem

unsigned long szerokosc, x, y;

unsigned long int szerokosc, x, y; - zmienne szerokosc, x, y są

liczbami całkowitymi długimi bez znaku

2018-04-04 Programowanie strukturalne – W1 20

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Obszar zajmowany w pamięci oraz zakres wartości zmiennych całkowitych zależąod sprzętu, systemu operacyjnego, kompilatora, wreszcie typu wartości.

Przykładowo – w systemie programowania C/C++ Borland:

unsigned char 8 bitów 0 255

signed char 8 bitów -128 127

unsigned int 16 bitów 0 65535

short signed int 16 bitów -32768 32767

signed int 16 bitów -32768 32767

long unsigned int 32 bity 0 4.294.967.295

long signed int 32 bity -2.147.483. 648 2.147.483.647

2018-04-04 Programowanie strukturalne – W1 21

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Inicjowanie zmiennych polega na przypisaniu im początkowej wartości.

Kompilator podczas tłumaczenia programu źródłowego nadaje zmiennymwartości nieokreślone (przypadkowe). Prowadzi to często do powstaniatrudnych do wykrycia błędów wykonania. Zapobiec temu może inicjowaniezmiennych przed ich pierwszym użyciem.

W języku C/C++ można tego dokonać wraz z deklaracją zmiennej.

Ma ona następującą postać ogólną:

typ-całkowity identyfikator [=stała-odpowiedniego-typu] (1.1)

Uwaga ! Dalej w wyrażeniach przedstawiających postać ogólną składnibędziemy używać "metasymbolu" [ ] dla oznaczenia części zdania, która może,ale nie musi wystąpić. Metasymbol { } będzie oznaczać część definicji, któramoże wystąpić wiele razy.

2018-04-04 Programowanie strukturalne – W1 22

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Przykłady deklaracji i inicjacji zmiennych znakowych:char litera_A=65; wartość dziesiętna kodu znaku Achar bubel='B'; znak Bchar Nowa_Linia='\n'; znak sterujący – "przejście" do następnej liniichar odstep16='\x20'; znak o kodzie szesnastkowym 20 - odstęp (spacja)char odstep10='\32'; znak o kodzie dziesiętnym 32 – spacja

Zmiennym typu znakowego (char) nadaje się wartości (również początkowe) podając wartość dziesiętną kodu znaku lub znak ujęty w apostrofy.

Znaki sterujące oraz znaki wykorzystywane przez język C/C++ są kodowane w postaci \litera-lub-znak. Można również podać wartość szesnastkową lub ósemkową kodu ASCII znaku.

2018-04-04 Programowanie strukturalne – W1 23

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Znaki sterujące w C/C++

Sekwencja Wartość hex

Nazwa znaku Funkcja

\a 07 BEL sygnał dźwiękowy

\b 08 BS cofnięcie kursora i usunięcie znaku

\f 0C FF wysunięcie strony (ang. Form Feed)

\n 0A LF przesunięcie o 1 wiersz w dół (ang. Line Feed)

\r 0D CR przesunięcie kursora na poczatek linii (ang. Carriage Return)

\t 09 HT tabulator poziomy

\v 0B VT tabulator pionowy

\\ 5C lewy ukośnik

\' 27 apostrof

\" 22 cudzysłów

\? 3F znak zapytania

2018-04-04 Programowanie strukturalne – W1 24

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Aby zainicjować zmienne typów int i long int należy po znaku równości podać

liczbową stałą całkowitą.

Może nią być:

· stała dziesiętna,

· stała ósemkowa (rozpoczynająca się od cyfry 0),

· stała szesnastkowa (rozpoczynająca się znakami 0x).

W podanym dalej przykładzie programu występują deklaracje zmiennych całkowitych,

ich inicjacje oraz wywołania funkcji wyprowadzania do standardowego urządzenia

wyjściowego - monitora.

2018-04-04 Programowanie strukturalne – W1 25

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

/* Przyklad programu, w ktorym wystepuja inicjacje zmiennych calkowitych i wyswietlanie ich wartosci */

#include <conio.h> //Wiersze nr 3 - 5#include <stdio.h>#include <stdlib.h>using namespace std; // 6int main(void) // 7{ // 8char xA=65, mY='y'; // 9unsigned int x=12101, y=0121, z=0xfa; // 10short signed int q=-23409, r=11206; // 11unsigned long dluga=234UL; // 12signed long int po_co=-567L; // 13system("cls"); // 14printf("\n Liczby: \n wartosc xA = %c \n wartosc mY = %c",

xA, mY); // 15 i 16printf("\n wartosc x = %u \n wartosc y = %o \n wartosc z = %x",

x, y, z); // 17 i 18printf("\n wartosc q = %d \n wartosc r = %d", q, r); // 19printf("\n wartosc dluga = %lu \n po_co = %ld", dluga, po_co);

// 20system("pause"); // 21system("cls"); // 22return 0; // 23

}

2018-04-04 Programowanie strukturalne – W1 26

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

•Pierwsze 2 wiersze tekstu stanowią komentarz (łańcuch znaków pomiędzy /* i */ ).

•Wiersze 3 - 5 - dyrektywy include preprocesora (poprzedza je znak #); polecają dołączyć w tymmiejscu do tekstu programu pliki nagłówkowe conio.h oraz stdio.h. W plikach tych znajdująsię definicje stałych i symboli oraz prototypy funkcji odpowiedzialnych za obsługę konsoli (plikconio.h) oraz standardowego wejścia-wyjścia (plik stdio.h). Znaki < > ograniczające nazwy tychplików oznaczają, że kompilator powinien szukać tych zbiorów w specjalnym katalogu o nazwieINCLUDE stanowiącym podkatalog katalogu, gdzie zlokalizowane są wszystkie elementy językaC/C++. Ograniczniki " " nazw plików nagłówkowych polecają kompilatorowi szukać tych zbiorów wbieżącej kartotece (tzw. katalogu roboczym).

• Wiersz 6 informuje o tym, że do poprawnego skompilowania i uruchomienia programu niezbędnajest tzw. "przestrzeń nazw" (biblioteka) std

•Wiersz 7 zawiera deklarację (nagłówek) funkcji głównej main.

•Wiersz 8 - nawias klamrowy otwierający blok, który stanowi "ciało" funkcji głównej

•W wierszu 9 znajdują się deklaracje i inicjacje zmiennych całkowitych typu char. Zmienną xAzainicjowano wartością dziesiętną kodu dużej litery A (wartość 65), a zmienną mY - znakiem y(wewnątrz maszyny jest on przechowywany jako liczba o wartości dziesiętnej 121).

•W wierszu 10 zadeklarowano i nadano wartości początkowe zmiennym x, y, z typucałkowitego bez znaku; zmiennej x nadano wartość dziesiętna 12101, zmiennej y - wartość 81zapisaną w postaci ósemkowej jako 0121; zmienna z będzie mieć wartość odpowiadającą liczbiedziesiętnej 250; w wyrażeniu inicjującym wartość tą zapisano w postaci stałej szesnastkowej jako0xfa.

2018-04-04 Programowanie strukturalne – W1 27

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Wiersz 11 - deklaracja i inicjacja zmiennych q oraz r typu całkowitego krótkiego ze znakiem. Nadanoim wartości początkowe właściwe dla ich typów.

W wierszu 12 znajduje się deklaracja i inicjator zmiennej całkowitej długiej bez znaku dluga -nadano jej wartość początkową 234. Litery UL sygnalizują kompilatorowi, że powinien on zapisać tądaną w pamięci w postaci właściwej dla typu unsigned long. Zapobiega to ewentualnej zmianiesposobu zapisu w czasie wykonywania programu.

W wierszu 13 zadeklarowano i zainicjowano zmienną całkowitą po_co typu signed long int.

W wierszu 14 znajduje się wywołanie funkcji standardowej system("cls"); jej prototyp znajdujesię w pliku nagłówkowym stdlib.h, a jej zadaniem jest wykonanie polecenia systemuoperacyjnego, którego nazwa jest argumentem funkcji - będzie to "oczyszczenie" ekranu monitora zezbędnych napisów pochodzących np. z poprzednio wykonywanego programu i ustawienie kursora wlewym górnym rogu ekranu.

Wiersze 15 - 20 zawierają wywołania funkcji standardowej printf odpowiedzialnej za obsługęwyjścia z programu.

Funkcja printf obsługuje tzw. wyjście formatowane. Jest to funkcja o zmiennej liczbieargumentów. Pierwszym jej argumentem musi być łańcuch znaków zawierający znaki wyświetlane naekranie oraz tzw. kody formatujące, które określają sposób przedstawiania danych (sposóbtłumaczenia wyświetlanych danych z zapisu wewnętrznego, zero-jedynkowego, na postać czytelnądla człowieka). Kolejne argumenty tej funkcji to nazwy wyprowadzanych zmiennych.

2018-04-04 Programowanie strukturalne – W1 28

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Wywołanie funkcji printf w wierszu 15 i 16 spowoduje wyświetlenie napisu Liczby:.

W następnym wierszu pojawią się nazwy zmiennych xA oraz mY i ich wartości (znaki A oraz y). Kody formatujące są zastępowane wartościami zmiennych użytych jako kolejne argumenty funkcji. Kod formatujący %c jest właściwy dla danych typu char.

Kod %u oznacza konwersję na postać zewnętrzną liczby całkowitej bez znaku.

Kod %o jest właściwy dla wartości w postaci ósemkowej, a kod %x odpowiada zmiennym o wartościach w postaci szesnastkowej (wiersz numer 17).

Ciąg znaków %d wykonuje konwersję na postać zewnętrzną liczb dziesiętnych (w tym przypadku chodzi o liczby całkowite krótkie ze znakiem).

Prototyp funkcji printf znajduje się w pliku nagłówkowym stdio.h.

Wiersz 20 wyświetla wartości zmiennych dluga oraz po_co; na ekranie będą poprzedzone napisami odpowiednio wartosc dluga = oraz po_co = . Kod formatujący %luodpowiada konwersji liczby całkowitej długiej bez znaku, a łańcuch %ld oznacza polecenie konwersji liczby całkowitej ze znakiem

W wierszu 21 ponownie wywołano funkcję system, tym razem z argumentem pause, która wyświetla komunikat "Aby kontynuować naciśnij dowolny klawisz…" i "czeka" na wpisanie do bufora klawiatury dowolnego znaku, a następnie wraca do wykonywania programu. Efektem jest "zatrzymanie" działania komputera do momentu naciśnięcia dowolnego klawisza. W ten sposób możemy odczytać z ekranu wyniki działania.

Instrukcja return 0 kończy działanie programu i powoduje powrót do systemu operacyjnego z kodem błędu o wartości 0.

2018-04-04 Programowanie strukturalne – W1 29

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

2018-04-04 Programowanie strukturalne – W1 30

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Typy rzeczywiste są nieciągłymi podzbiorami zbioru liczb rzeczywistych. Ich rodzaje i zakresy wartości są następujące:

Typ/słowo kluczowe Rozmiar w bitach

Zakres od Zakres do

float 32 3,4*10­­38 3,4*1038

double 64 1,7*10­308 1,7*10308

long double 80 3,4*10­4932 1,1*104932

Kilka przykładów deklaracji i inicjacji zmiennych rzeczywistych:

float blad = -12.3e-2; zmienna blad ma wartośćpoczątkową 0,123

double x, y = 18., z = .11e11; x ­ nieokreślona, y ­ wartość 18, z ­wartość 0,11*1011

long double r_dluga = -0.304e-607L; r_dluga ­ wartość ­0,304*10­607 typu long double

float xc = 16.099e+32F; xc ­ wartość 16,099*1032

2018-04-04 Programowanie strukturalne – W1 31

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

Wartości zmiennych rzeczywistych są standardowo przechowywane w postaciwłaściwej dla typu double - podobnie jak w przypadku liczb całkowitych,litery F, f, L, l umieszczane po liczbie w miejscu jej inicjacji zapobiegająwykonywaniu konwersji.

W języku C/C++ można deklarować i używać zmienne, które zamiast właściwej danejzawierają adres obszaru pamięci - miejsca przechowywania właściwej danej.

Obszar ten może być interpretowany jako zmienna określonego typu.

Zmienna zawierająca adres innej zmiennej nosi nazwę zmiennej wskaźnikowej lub krócejwskaźnika.

Zmienna, której adres zapisany jest w zmiennej wskaźnikowej to zmienna wskazywana.

Wskaźniki w języku C/C++ są wygodnym i często używanym mechanizmem; umożliwiają:• tworzenie i przetwarzanie tzw. dynamicznych struktur danych,• zarządzanie blokami pamięci, łańcuchami znaków i tablicami,• przekazywanie parametrów do i z funkcji.

2018-04-04 Programowanie strukturalne – W1 32

Programowanie strukturalne dr inż. Tadeusz Jeleniewski

/* Przyklad uzycia i dzialania zmiennych wskaznikowych */#include <stdio.h>#include <conio.h>#include <stdlib.h>using namespace std;int main(void){char znak = 'y', *w_znak = &znak;

// w_znak - wskaznik, adres zmiennej znakint numer = 113, *w_numer = &numer;

// w_numer - adres zmiennej numerdouble rzecz = 13.077e21, *w_rzecz = &rzecz;

// w_rzecz - adres zmiennej rzeczsystem("cls");printf("\n Wartosci zmiennych wskazywanych: \n %c, %d, %f",

znak, numer, rzecz);*w_znak = 'A';*w_numer = 251;*w_rzecz = -11.11e2;printf("\nNowe wartosci zmiennych wskazywanych:\n %c, %d, %f",

znak, numer, rzecz);system("pause");system("cls");return 0;

}

2018-04-04 Programowanie strukturalne – W1 33

Programowanie strukturalne dr inż. Tadeusz Jeleniewski