Spis treści JĘZYK C - STRUKTURY, POLA BITOWE, UNIE. Metodyki i techniki programowania. Instrukcja do pracowni specjalistycznej z przedmiotu

Podobne dokumenty
Spis treści JĘZYK C - STRUKTURY, POLA BITOWE, UNIE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Metodyki i techniki programowania

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - OPERATORY BITOWE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE. Informatyka 1

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Spis treści JĘZYK C - FUNKCJE. Metodyki i techniki programowania. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia MITP10

Spis treści JĘZYK C - TABLICE DWUWYMIAROWE, OPERACJE NA TABLICACH. Metodyki i techniki programowania

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE. Metodyki i techniki programowania

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05

BHP JĘZYK C - INSTRUKCJE ITERACYJNE

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Spis treści JĘZYK C - ŚLEDZENIE WYKONANIA PROGRAMU, DEBUGGER. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE, INSTRUKCJA WARUNKOWA IF. Informatyka 1

Spis treści JĘZYK C - TABLICE DWUWYMIAROWE, OPERACJE NA TABLICACH. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - TABLICE JEDNOWYMIAROWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05Z

Spis treści JĘZYK C - TABLICE DWU- I WIELOWYMIAROWE, OPERACJE NA TABLICACH. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - PLIKI BINARNE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF30

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści PROGRAMOWANIE OBIEKTOWE W JĘZYKU C++: FUNKCJE ZAPRZYJAŹNIONE Z KLASĄ, PRZEŁADOWANIE OPERATORÓW. Informatyka 2

Struktury Struktura polami struct struct struct struct

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE, ZAGNIEŻDŻANIE IF-ELSE.

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Metodyki i techniki programowania. Instrukcja do pracowni specjalistycznej z przedmiotu

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

13 JĘZYK C - OPERATOR WARUNKOWY,

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Język C zajęcia nr 11. Funkcje

Spis treści JĘZYK C - WSKAŹNIKI, DYNAMICZNY PRZYDZIAŁ PAMIĘCI. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

C-struktury wykład. Dorota Pylak

Spis treści JĘZYK C - INSTRUKCJE ITERACYJNE FOR, WHILE I DO WHILE, ZAGNIEŻDŻANIE PĘTLI FOR, INSTRUKCJE CONTINUE, BREAK, I GOTO.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Język C zajęcia nr 12. Struktury i unie

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Spis treści PROGRAMOWANIE OBIEKTOWE W JĘZYKU C++: KLASY I OBIEKTY, DANE I FUNKCJE SKŁADOWE, PRAWA DOSTĘPU, KONSTRUKTORY I DESTRUKTORY.

Tablicę 2-wymiarową można przedstawić jako pewien zestaw tablic 1-wymiarowych np.:

C-struktury wykład. Dorota Pylak

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Lab 9 Podstawy Programowania

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Język C++ zajęcia nr 2

Spis treści TRYB GRAFICZNY SYSTEMU WINDOWS - PODSTAWY OBSŁUGI WYBRANEGO ŚRODOWISKA PROGRAMISTYCZNEGO. Informatyka 2

Zmienne, stałe i operatory

Podstawy Programowania C++

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Wstęp do wskaźników w języku ANSI C

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF10Z

Podstawy Programowania

IX. Wskaźniki.(3 godz.)

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Argumenty wywołania programu, operacje na plikach

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF22

dr inż. Jarosław Forenc

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

BADANIE ROZKŁADU TEMPERATURY W PIECU PLANITERM

Struktury typ definiowany przez uŝytkownika.

Spis treści TRYB GRAFICZNY SYSTEMU WINDOWS - PODSTAWY OBSŁUGI WYBRANEGO ŚRODOWISKA PROGRAMISTYCZNEGO, TWORZENIE INTERFEJSU UŻYTKOWNIKA.

. Podstawy Programowania 1. Struktury i unie. Arkadiusz Chrobot. 7 grudnia 2017

1 Podstawy c++ w pigułce.

tablica: dane_liczbowe

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Informatyka 2. Informatyka 2. Wykład nr 1 ( ) Dane podstawowe. - Wydział Elektryczny. Politechnika Białostocka. Program wykładu (1/2)

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Programowanie w języku Python. Grażyna Koba

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Deklaracja struktury w C++

Wykład I. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Wykład 5: Klasy cz. 3

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

ELEMENTY RLC W OBWODACH PRĄDU SINUSOIDALNIE ZMIENNEGO

Politechnika Białostocka

METROLOGIA EZ1C

Programowanie strukturalne i obiektowe

POMIARY PARAMETRÓW PRZEPŁYWU POWIETRZA

Wstęp do programowania 1

dr inż. Jarosław Forenc

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Spis treści OPERACJE WEJŚCIA-WYJŚCIA W JĘZYKU C++. STEROWANIE FORMATEM, MANIPULATORY. Informatyka 2

Rok akademicki: 2013/2014 Kod: JFT s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

1. Wprowadzanie danych z klawiatury funkcja scanf

Spis treści. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF03Z. Autor: dr inż.

Transkrypt:

Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Metodyki i techniki programowania Kod przedmiotu: TS1C200 009 (studia stacjonarne) JĘZYK C - STRUKTURY, POLA BITOWE, UNIE Spis treści 1. Opis stanowiska... 3 1.1. Stosowana aparatura... 3 1.2. Oprogramowanie... 3 2. Wiadomości teoretyczne... 3 2.1. Struktury... 3 2.2. Odwołania do pól struktury... 6 2.3. Inicjalizacja zmiennej strukturalnej... 8 2.4. Złożone deklaracje struktur... 9 2.5. Przekazywanie struktur do funkcji... 12 2.6. Pola bitowe... 13 2.7. Unie... 14 2.8. Deklaracje typedef... 16 3. Przebieg ćwiczenia... 16 4. Literatura... 19 Numer ćwiczenia MITP12 5. Zagadnienia na zaliczenie... 19 6. Wymagania BHP... 19 Materiały dydaktyczne przeznaczone dla studentów Wydziału Elektrycznego PB. Autor: dr inż. Jarosław Forenc Białystok 2013 Wydział Elektryczny, Politechnika Białostocka, 2013 (wersja 1.4) Wszelkie prawa zastrzeżone. Żadna część tej publikacji nie może być kopiowana i odtwarzana w jakiejkolwiek formie i przy użyciu jakichkolwiek środków bez zgody posiadacza praw autorskich. Metodyki i techniki programowania 2 z 20 Instrukcja MITP12

1. Opis stanowiska 1.1. Stosowana aparatura Podczas zajęć wykorzystywany jest komputer klasy PC z systemem operacyjnym Microsoft Windows (XP/Vista/7). 1.2. Oprogramowanie Na komputerach zainstalowane jest środowisko programistyczne Microsoft Visual Studio 2008 Standard Edition lub Microsoft Visual Studio 2008 Express Edition zawierające kompilator Microsoft Visual C++ 2008. 2. Wiadomości teoretyczne 2.1. Struktury W języku C do przechowywania wielu elementów tego samego typu stosowane są tablice jedno- lub wielowymiarowe (Rys. 1). Rys. 1. Reprezentacja tablicy jednowymiarowej (wektora) i tablicy dwuwymiarowej (macierzy) w języku C W przypadku, gdy pod jedną nazwą mają być zgrupowane elementy różnych typów, stosowane są struktury. Struktury służą zatem do reprezentacji złożonych obiektów różnych danych (Rys. 2). Rys. 2. Reprezentacja struktury w języku C Ogólna postać deklaracji struktury jest następująca: struct nazwa_struktury typ nazwa_pola_1; typ nazwa_pola_2;... typ nazwa_pola_n; Deklaracja struktury rozpoczyna się od słowa kluczowego struct, po którym może występować opcjonalna nazwa struktury (etykieta). Pomiędzy nawiasami klamrowymi umieszczone są pola struktury (dane, komponenty, składowe), mające taką samą postać jak deklaracje zmiennych w programie. Deklaracja struktury kończy się średnikiem umieszczonym po nawiasie klamrowym zamykającym. Brak tego średnika jest najczęściej popełnianym błędem przy deklaracji struktury. Poniżej przedstawione są przykłady deklaracji dwóch struktur. Struktura punkt przechowuje współrzędne x i y punktu w prostokątnym układzie współrzędnych. Struktura osoba opisuje dane osobowe: imie i nazwisko w postaci tablic znaków oraz wiek, wzrost i wagę jako wartości całkowite. struct punkt float x; float y; struct osoba char imie[15]; char nazwisko[20]; int wiek; int wzrost, waga; Przy nazywaniu pól struktury obowiązują takie same zasady jak przy nadawaniu nazw innym identyfikatorom. Nazwy pól struktury mogą być takie same jak nazwy innych zmiennych w programie, a nawet takie same jak nazwa struktury. Pola jednego typu mogą być umieszczone w jednym wierszu. Deklarując strukturę wprowadzamy nowy typ danych (np. struct punkt), którym posługujemy się tak samo jak każdym innym typem standardowym. Deklaracja struktury nie tworzy obiektu (nie przydziela pamięci na pola), ale tylko Metodyki i techniki programowania 3 z 20 Instrukcja MITP12 Metodyki i techniki programowania 4 z 20 Instrukcja MITP12

określa z czego się on składa. Aby do struktury można było zapisać dane należy zdefiniować zmienną strukturalną. Definicja taka może być połączona z deklaracją struktury. W takim przypadku nazwy zmiennych strukturalnych umieszcza się bezpośrednio po klamrze kończącej listę pól struktury. struct osoba char imie[15]; char nazwisko[20]; int wiek, wzrost, waga; } Kowalski, Nowak; W powyższej deklaracji Kowalski i Nowak są zmiennymi typu struct osoba. Zmienna Kowalski może więc przechowywać imię, nazwisko, wiek, wzrost i wagę jednej osoby. Zmienna Nowak może przechowywać dane takiego samego typu, ale należące już do innej osoby (Rys. 3). taką samą postać jak deklaracje zmiennych standardowych typów (struct osoba - nazwa typu, Kowalski, Nowak - nazwy zmiennych). #include <stdio.h> struct osoba char imie[15]; char nazwisko[20]; int wiek, wzrost, waga; int main(void) struct osoba Kowalski; struct osoba Nowak; } /*... */ return 0; 2.2. Odwołania do pól struktury Dostęp do pól struktury możliwy jest dzięki konstrukcji typu: nazwa_struktury.nazwa_pola Rys. 3. Zmienne strukturalne Kowalski i Nowak Deklaracja struktury może znajdować się w dowolnym miejscu programu. Jednakże należy pamiętać o tym, że umieszczenie jej wewnątrz definicji funkcji spowoduje ograniczenie zakresu jej widzialności tylko do tej funkcji. W poniższym programie deklaracja struktury osoba znajduje się przed funkcją main(). Jest to sytuacja najczęściej spotykana w praktyce. Przykład ten pokazuje także inny sposób deklaracji zmiennych strukturalnych. Bezpośrednio po klamrze kończącej listę pól struktury znajduje się średnik, natomiast deklaracje zmiennych strukturalnych zostały umieszczone na początku funkcji main(). Deklaracje te mają W poniższym przykładzie zapisujemy wartość 25 do pola wiek zmiennej strukturalnej Kowalski. Kowalski.wiek = 25; nazwa pola kropka nazwa zmiennej typu strukturalnego Operator kropki nazywany jest operatorem bezpośredniego wyboru pola. Z wyrażenia Kowalski.wiek można korzystać dokładnie w ten sam sposób jak z każdej innej zmiennej typu int. Metodyki i techniki programowania 5 z 20 Instrukcja MITP12 Metodyki i techniki programowania 6 z 20 Instrukcja MITP12

Zapisanie wartości Jan do pola imie (tablicy znaków) wymaga zastosowania funkcji strcpy(). strcpy(kowalski.imie,"jan"); W przypadku posługiwania się wskaźnikiem do zmiennej strukturalnej odwołania do pól struktury wymagają użycia operatora pośredniego wyboru pola zapisywanego w postaci znaku minus i znaku większości (->), np. lub struct osoba Kowalski, *PtrKowalski; PtrKowalski = &Kowalski; PtrKowalski -> wiek = 25; strcpy(ptrkowalski -> imie,"jan"); (*PtrKowalski).wiek = 25; strcpy((*ptrkowalski).imie,"jan"); W ostatnim zapisie dodatkowe nawiasy są konieczne, gdyż operator. ma wyższy priorytet niż operator *. Zapisanie danych do zmiennej strukturalnej i wyświetlenie ich na ekranie. #include <stdio.h> struct osoba char imie[15]; char nazwisko[20]; int wiek; int main(void) struct osoba Nowak; } printf("imie: "); scanf("%s",nowak.imie); printf("nazwisko: "); scanf("%s",nowak.nazwisko); printf("wiek: "); scanf("%d",&nowak.wiek); printf("%s %s, wiek: %d\n",nowak.imie, Nowak.nazwisko,Nowak.wiek); return 0; Przykładowy wynik uruchomienia programu: Imie: Nowak Nazwisko: Jan Wiek: 25 Nowak Jan, wiek: 25 2.3. Inicjalizacja zmiennej strukturalnej W deklaracjach pól struktury nie mogą występować inicjalizacje. Można natomiast inicjalizować zmienne strukturalne, np. struct osoba Nowak = "Jan","Nowak",25 Brakujące pola w inicjalizacji są zastępowane zerami. Każda wartość początkowa musi być wyrażeniem stałym (nie może być zmienną). Do zainicjalizowania pól zmiennej strukturalnej można zastosować także oznaczone inicjalizatory struktur. Inicjalizator taki składa się z operatora kropki i nazwy pola: struct osoba Nowak =.nazwisko = "Nowak" Oznaczone inicjalizatory mogą występować w dowolnej kolejności: struct osoba Nowak =.wiek = 25,.nazwisko = "Nowak",.imie = "Jan" Metodyki i techniki programowania 7 z 20 Instrukcja MITP12 Metodyki i techniki programowania 8 z 20 Instrukcja MITP12

W jednym zapisie można zastosować oznaczone inicjalizatory i zwykłe. Zwykły inicjalizator będzie w takim przypadku odnosił się do pola występującego w strukturze bezpośrednio po oznaczonym. W poniższym przykładzie wartość 25 odnosi się do pola wiek, gdyż występuje ono w strukturze bezpośrednio po polu nazwisko. struct osoba Nowak =.nazwisko = "Nowak",25 Zmienne strukturalne tego samego typu można sobie przypisywać (nawet jeśli zawierają tablice znaków), ale nie można ich porównywać ze sobą. struct osoba Nowak = "Jan","Nowak",25 struct osoba Nowak1; Nowak1 = Nowak; 2.4. Złożone deklaracje struktur W języku C można deklarować tablice struktur. Poniższy przykład zawiera deklarację dwuelementowej tablicy S (Rys. 4) opisującej położenie odcinka w prostokątnym układzie współrzędnych (współrzędne jego początku i końca). struct punkt float x; float y; } S[2]; Odwołując się do poszczególnych pól tablicy struktur należy podać nazwę tablicy, indeks jej elementu (w nawiasach kwadratowych) oraz (po kropce) nazwę pola struktury. S[0].x = 1; S[0].y = 2; S[1].x = 5; S[1].y = 3; Jako pole struktury może występować inna struktura (jest to tzw. zagnieżdżanie struktur). W poniższym przykładzie struktura trojkat (Rys. 5) zawiera cztery pola, z czego trzy są strukturami punkt. T1.A T1.B T1.C T1 T1.nr T1.A.x T1.B.x T1.C.x T1.A.y T1.B.y T1.C.y Rys. 5. Zmienna strukturalna T1 zawierająca cztery pola Obliczenie pola trójkąta na podstawie współrzędnych jego wierzchołków. #include <stdio.h> #include <math.h> struct punkt float x; float y; Rys. 4. Tablica S zawierająca dwie struktury punkt Metodyki i techniki programowania 9 z 20 Instrukcja MITP12 Metodyki i techniki programowania 10 z 20 Instrukcja MITP12

struct trojkat int nr; struct punkt A; struct punkt B; struct punkt C; int main(void) struct trojkat T1; float pole; T1.nr = 1; T1.A.x = 1; T1.A.y = 2; T1.B.x = 5; T1.B.y = 3; T1.C.x = 2; T1.C.y = 4; pole = fabs(t1.a.x*t1.b.y + T1.B.x*T1.C.y + T1.C.x*T1.B.y - T1.C.x*T1.B.y - T1.A.x*T1.C.y - T1.B.x*T1.A.y) / 2; printf("a(%g,%g)\n",t1.a.x,t1.a.y); printf("b(%g,%g)\n",t1.b.x,t1.b.y); printf("c(%g,%g)\n",t1.c.x,t1.c.y); printf("pole trojkata = %g\n",pole); 2.5. Przekazywanie struktur do funkcji Domyślnie struktury przekazywane są do funkcji tak samo jak każde inne zmienne podstawowych typów, czyli przez wartość. Program zawierający funkcję obliczającą odległość dwóch punktów. #include <stdio.h> #include <math.h> struct punkt float x; float y; float odleglosc(struct punkt pkt1, struct punkt pkt2) return sqrt(pow(pkt2.x-pkt1.x,2)+ pow(pkt2.y-pkt1.y,2)); } int main(void) struct punkt p1 = 2,3 struct punkt p2 = -2,1 float odl; odl = odleglosc(p1,p2); } return 0; printf("punkt nr 1: (%g,%g)\n",p1.x,p1.y); printf("punkt nr 2: (%g,%g)\n",p2.x,p2.y); printf("odleglosc = %g\n",odl); Wynik działania programu: A(1,2) B(5,3) C(2,4) Pole trojkata = 4.5 W odwołaniach do pól zagnieżdżonych struktur operator kropki występuje wielokrotnie. Zapis T1.A.x jest interpretowany od strony lewej do prawej, a zatem odpowiada zapisowi (T1.A).x. } return 0; Wynik uruchomienia programu będzie następujący: Punkt nr 1: (2,3) Punkt nr 2: (-2,1) Odleglosc = 4.47214 Metodyki i techniki programowania 11 z 20 Instrukcja MITP12 Metodyki i techniki programowania 12 z 20 Instrukcja MITP12

2.6. Pola bitowe Pola bitowe umożliwiają dostęp do pojedynczych bitów oraz przechowywanie małych wartości zajmujących pojedyncze bity bez zbędnych strat pamięci. Pola bitowe deklaruje się wewnątrz struktur w następujący sposób: typ id_pola : wielkość_pola obszar zajmowany przez pole, w bitach opcjonalny identyfikator (nazwa) pola typ (int, unsigned int, signed int) Pola zajmują tyle bitów, ile podano jako wielkość_pola. Wartości zapisane w polach traktowane są jak liczby całkowite. Zakres wartości pól wynika z wielkości_pola. struct Flags_8086 unsigned int CF : 1; /* Carry Flag */ unsigned int : 1; unsigned int PF : 1; /* Parity Flag */ unsigned int : 1; unsigned int AF : 1; /* Auxiliary - Carry Flag */ unsigned int : 1; unsigned int ZF : 1; /* Zero Flag */ unsigned int SF : 1; /* Signum Flag */ unsigned int TF : 1; /* Trap Flag */ unsigned int IF : 1; /* Interrupt Flag */ unsigned int DF : 1; /* Direction Flag */ unsigned int OF : 1; /* Overflow Flag */ struct Bits unsigned int a : 4; unsigned int b : 2; unsigned int : 4; unsigned int c : 6; Dostęp do pól bitowych odbywa się na takiej samej zasadzie jak do normalnych pól struktury. struct Bits Word; Word.a = 10; Word.b = 3; Poniższe przypisanie jest niepoprawne, gdyż pole b zajmuje 2 bity, a do zapisania liczby 4 potrzebne są trzy bity (410 = 1002). Word.b = 4; Jeśli pole nie ma podanej nazwy, to nie można się do niego odwoływać. Tego typu pola stosuje się w sytuacji, gdy określone bity pomiędzy polami nie są używane. Pola bitowe nie posiadają adresów. Wobec pola bitowego nie można więc stosować operatora pobierania adresu &. Konsekwencją tego jest brak możliwości nadania wartości polu bitowemu funkcją scanf(). 2.7. Unie Unia jest specjalnym rodzajem struktury umożliwiającym przechowywanie danych różnych typów w tym samym obszarze pamięci. Unię deklaruje się w podobny sposób jak strukturę: union zbior char znak; int liczba1; double liczba2; Do przechowywania wartości w unii konieczne jest zadeklarowanie odpowiedniej zmiennej. Można deklarować pojedyncze zmienne, tablice unii i wskaźniki do unii. Metodyki i techniki programowania 13 z 20 Instrukcja MITP12 Metodyki i techniki programowania 14 z 20 Instrukcja MITP12

union zbior x; union zbior tab[5]; union zbior *ptr; Zmienna x z powyższego przykładu może przechowywać wartość typu char lub wartość typu int lub wartość typu double, ale tylko jedną z nich w danym momencie (Rys. 6). Rozmiar unii wyznaczany jest przez rozmiar największego jej pola. W przypadku unii zbior wynosi on 8 bajtów, gdyż taki jest rozmiar pola liczba2 (typ double). x.liczba2 2.8. Deklaracje typedef Deklaracja typdef służy do tworzenia nowych nazw typów danych. Poniższa deklaracja tworzy dla typu int synonim CALKOWITA, którym można posługiwać się dokładnie tak samo, jak typem int. typedef int CALKOWITA; nowa nazwa typu stara nazwa typu słowo kluczowe typedef x.znak x.liczba1 typedef int CALKOWITA; CALKOWITA x, *ptr; x = 10; ptr = &x; printf("%d %d\n",x,*ptr); Rys. 6. Interpretacja graficzna unii Dostęp do pól unii jest taki sam jak do pól struktury, np. Instrukcja typedef może być również stosowana do struktur. Pozwala to na tworzenie prostych i wygodnych w użyciu nazw typów. x.znak = 'a'; x.liczba2 = 12.15; ptr = &x; ptr->liczba1 = -25; Unię można zainicjować jedynie wartością o typie jej pierwszej składowej. Unie tego samego typu można sobie przypisywać. union zbior y1 = 'a' union zbior y2; y2 = y1; typedef struct zesp float Re; float Im; } MYCOMPLEX; MYCOMPLEX Z1; 3. Przebieg ćwiczenia Na pracowni specjalistycznej należy wykonać wybrane zadania wskazane przez prowadzącego zajęcia. W różnych grupach mogą być wykonywane różne zadania. Metodyki i techniki programowania 15 z 20 Instrukcja MITP12 Metodyki i techniki programowania 16 z 20 Instrukcja MITP12

1. Napisz program zawierający funkcje realizujące podstawowe operacje arytmetyczne na liczbach zespolonych (+, -, *, /) oraz funkcję wyświetlającą liczbę zespoloną w postaci: 2+3j. Liczbę zespoloną zdefiniuj jako strukturę: struct zesp float Re, Im; Nagłówki pozostałych funkcji powinny mieć postać: struct zesp dodaj (struct zesp x, struct zesp y); struct zesp odejmij (struct zesp x, struct zesp y); struct zesp pomnoz (struct zesp x, struct zesp y); struct zesp podziel (struct zesp x, struct zesp y); void drukuj (struct zesp x); Wywołaj zdefiniowane funkcje dla podanych liczb zespolonych: z1 = 2 + j4 z2 = 6 - j8 Sprawdź poprawność otrzymanych wyników z tabelą 1. Tabela 1. Poprawne wyniki do zadania 1 Operacja z1 + z2 z1 - z2 z1 * z2 Wynik 8 - j4-4 + j12 44 + j8 z1 / z2-0,2 + j0,4 2. Zdefiniuj strukturę paszport zawierającą następujące pola: nazwisko, imię, obywatelstwo, seria, numer, płeć. Następnie zadeklaruj dwie zmienne strukturalne. Pierwszą z nich zainicjalizuj wartościami, natomiast wartości do drugiej wczytaj w klawiatury. Wyświetl na ekranie zawartość obu zmiennych. 3. Struktura rezonans przechowuje informacje o szeregowym obwodzie rezonansowym: rezystancja, indukcyjność, pojemność, częstotliwość rezonansowa, impedancja falowa, dobroć. Napisz program, w którym użytkownik wprowadza parametry obwodu (R, L, C), a program oblicza i wyświetla pozostałe wielkości charakteryzujące stan rezonansu. Wszystkie wielkości i parametry muszą być przechowywane w strukturze. Dodatkowo program powinien sprawdzić poprawność wprowadzonych danych (R>0, L>0, C>0). W przypadku błędu program wyświetla odpowiedni komunikat i prosi jeszcze raz o wprowadzenie danych, itd., aż do momentu, gdy dane będą prawidłowe. częstotliwość: impedancja falowa: dobroć: Przykład działania programu: Podaj R: -5 Podaj L: 0.01 Podaj C: 2.5e-4 Bledne dane. Podaj dane jeszcze raz. Podaj R: 10 Podaj L: 0.01 Podaj C: 2.5e-4 Czestotliwosc rezonansowa: 100.65842 Impedancja falowa: 6.32455 Dobroc: 0.63246 1 f = (1) 2π LC L ρ = (2) C Q = ρ (3) R 4. N - elementowa tablica zawiera struktury punkt opisujące współrzędne punktów (x, y) w prostokątnym układzie współrzędnych. Napisz program, który odnajdzie i wyświetli numer oraz współrzędne punktu, którego odległość od początku układu współrzędnych jest: a) największa; b) najmniejsza. Współrzędne punktów wygeneruj pseudolosowo z zakresu 9, -9. Metodyki i techniki programowania 17 z 20 Instrukcja MITP12 Metodyki i techniki programowania 18 z 20 Instrukcja MITP12

struct punkt int nr, x, y; 4. Literatura [1] Kernighan B.W., Ritchie D.M.: Język ANSI C. Programowanie. Wydanie II. Helion, Gliwice, 2010. [2] Prata S.: Język C. Szkoła programowania. Wydanie V. Helion, Gliwice, 2006. [3] King K.N.: Język C. Nowoczesne programowanie. Wydanie II. Helion, Gliwice, 2011. [4] Summit S.: Programowanie w języku C. FAQ. Helion, Gliwice, 2003. [5] Wileczek R.: Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows. Helion, Gliwice, 2009. 5. Zagadnienia na zaliczenie 1. Omów sposób deklarowania struktur w języku C. 2. W jaki sposób można odwoływać się do pól struktury? 3. Opisz inicjalizację zmiennych strukturalnych. 4. Opisz sposób przekazywania struktur do funkcji. 5. Omów sposób deklarowania oraz zastosowanie pól bitowych i unii. 6. Wymagania BHP Warunkiem przystąpienia do praktycznej realizacji ćwiczenia jest zapoznanie się z instrukcją BHP i instrukcją przeciw pożarową oraz przestrzeganie zasad w nich zawartych. W trakcie zajęć laboratoryjnych należy przestrzegać następujących zasad. - Sprawdzić, czy urządzenia dostępne na stanowisku laboratoryjnym są w stanie kompletnym, nie wskazującym na fizyczne uszkodzenie. - Jeżeli istnieje taka możliwość, należy dostosować warunki stanowiska do własnych potrzeb, ze względu na ergonomię. Monitor komputera ustawić w sposób zapewniający stałą i wygodną obserwację dla wszystkich członków zespołu. - Sprawdzić prawidłowość połączeń urządzeń. - Załączenie komputera może nastąpić po wyrażeniu zgody przez prowadzącego. - W trakcie pracy z komputerem zabronione jest spożywanie posiłków i picie napojów. - W przypadku zakończenia pracy należy zakończyć sesję przez wydanie polecenia wylogowania. Zamknięcie systemu operacyjnego może się odbywać tylko na wyraźne polecenie prowadzącego. - Zabronione jest dokonywanie jakichkolwiek przełączeń oraz wymiana elementów składowych stanowiska. - Zabroniona jest zmiana konfiguracji komputera, w tym systemu operacyjnego i programów użytkowych, która nie wynika z programu zajęć i nie jest wykonywana w porozumieniu z prowadzącym zajęcia. - W przypadku zaniku napięcia zasilającego należy niezwłocznie wyłączyć wszystkie urządzenia. - Stwierdzone wszelkie braki w wyposażeniu stanowiska oraz nieprawidłowości w funkcjonowaniu sprzętu należy przekazywać prowadzącemu zajęcia. - Zabrania się samodzielnego włączania, manipulowania i korzystania z urządzeń nie należących do danego ćwiczenia. - W przypadku wystąpienia porażenia prądem elektrycznym należy niezwłocznie wyłączyć zasilanie stanowiska. Przed odłączeniem napięcia nie dotykać porażonego. Metodyki i techniki programowania 19 z 20 Instrukcja MITP12 Metodyki i techniki programowania 20 z 20 Instrukcja MITP12