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

Podobne dokumenty
Struktury Struktura polami struct struct struct struct

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

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

C-struktury wykład. Dorota Pylak

Język C zajęcia nr 11. Funkcje

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

C-struktury wykład. Dorota Pylak

Język C++ zajęcia nr 2

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

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

tablica: dane_liczbowe

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

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

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

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

Deklaracja struktury w C++

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Lab 9 Podstawy Programowania

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

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

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

Wykład 5: Klasy cz. 3

Struktury - wprowadzenie

Podstawy programowania skrót z wykładów:

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,

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

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Struktury typ definiowany przez uŝytkownika.

W dowolnym momencie można zmienić typ wskaźnika.

Zmienne, stałe i operatory

Język C, tablice i funkcje (laboratorium, EE1-DI)

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Zmienne i struktury dynamiczne

Część 4 życie programu

Wskaźniki w C. Anna Gogolińska

6 Przygotował: mgr inż. Maciej Lasota

Język C, tablice i funkcje (laboratorium)

1. Wprowadzanie danych z klawiatury funkcja scanf

IX. Wskaźniki.(3 godz.)

Struktury czyli rekordy w C/C++

Rozdział 4 KLASY, OBIEKTY, METODY

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

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

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

Struktury, unie, formatowanie, wskaźniki

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

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

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

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

I. Podstawy języka C powtórka

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

*W uproszczeniu: jest dziewięciu sędziów przyznających po dwie noty: za wartość techniczną i artystyczną (skala od 0.0 do 6.0)

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

Programowanie strukturalne i obiektowe

Typy danych, zmienne i tablice. Tomasz Borzyszkowski

W języku C/C++ pomiędzy wskaźnikami a tablicami istnieje bardzo ścisły związek. Do onumerowania elementów w tablicy służą tzw. INDEKSY.

Tablice i funkcje. Marcin Makowski. 26 listopada Zak lad Chemii Teoretycznej UJ

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Inicjacja tablicy jednowymiarowej

2 Przygotował: mgr inż. Maciej Lasota

Język ANSI C-struktury

Podstawy programowania w języku C++

Pliki. Informacje ogólne. Obsługa plików w języku C

KURS C/C++ WYKŁAD 2. char znak; znak = a ; Program 2 #include<stdio.h> void main() { char znak; while( (znak = getchar() )!= t ) putchar(znak); }

DYNAMICZNE PRZYDZIELANIE PAMIECI

Stałe, tablice dynamiczne i wielowymiarowe

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

MATERIAŁY DO ZAJĘĆ II

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

ZASADY PROGRAMOWANIA KOMPUTERÓW

Wykład 8: klasy cz. 4

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Szablony klas, zastosowanie szablonów w programach

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

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

Wykład Struktury i unie Deklarowanie i definiowanie struktur Dostęp do pól struktur Pola bitowe

Wskaźniki, funkcje i tablice

Podstawy Programowania C++

KURS C/C++ WYKŁAD 7. struct Punkt { int x, y; int kolor; };

Wskaźniki. Informatyka

Techniki Programowania wskaźniki

C++ wprowadzanie zmiennych

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

Transkrypt:

Język C zajęcia nr 12 Struktury i unie Struktura jest zgromadzonym pod jedną nazwą zbiorem elementów nazywanych polami lub składowymi. Pola mają swoje odrębne nazwy (podobnie jak zmienne) i mogą przechowywać dane różnych typów. Definicja struktury służy wprowadzeniu nowego typu danych: struct nazwa lista_deklaracji_pól } ; gdzie nazwa (opcjonalna) jest nazwą struktury jako nowego typu danych (nie mylić z nazwą danych), a lista_deklaracji_pól jest ciągiem deklaracji określających typy poszczególnych pól struktury. Deklaracja pola ma składniowo identyczną formę jak definicja zmiennej. Każde pole w oddzielnej deklaracji: struct kartoteka char imie[20]; char nazwisko[40]; int rok_ur; int mies_ur; int dz_ur; char miejsce_ur[30]; char adres[50];

Wiele pól w jednej deklaracji: struct kartoteka char imie[20], nazwisko[40]; int rok_ur, mies_ur, dz_ur; char miejsce_ur[30]; char adres[50]; Definicja struktury wprowadza jedynie nowy typ danych bez tworzenia obiektu tego typu w pamięci komputera. Definicja obiektu typu strukturalnego ma formę: lub: struct nazwa lista_deklaracji_pól } lista_deklaratorów ; struct typ_str lista_deklaratorów ; W pierwszym przypadku definiowany jest typ strukturalny i równocześnie definiowane są obiekty tego typu. Drugi przypadek przedstawia zwykłą definicję lub deklarację obiektu pod warunkiem, że wcześniej zdefiniowano strukturę o nazwie typ_str. Pola struktury mogą być również typu strukturalnego, co pozwala na konstruowanie złożonych zagnieżdżonych struktur danych.

Struktura zagnieżdżona: struct data int rok; int mies; int dzien; struct nazw char imie[20]; char nazwisko[40]; char pseudonim[25]; struct pracownik struct nazw nazwisko; struct data urodzenia; struct data przyjecia; struct data zwolnienia; char adres[50]; } pr1; //Definicja struktury i jednoczesnie //definicja jednego obiektu struct pracownik pr2, pr3; //Definicja dwóch obiektów

Definicji obiektu strukturalnego może towarzyszyć jego inicjalizowanie. Inicjalizator ma postać ujętej w nawiasy klamrowe } listy wartości oddzielonych przecinkami. Inicjalizowanie pól będących strukturami wymaga dodatkowych wewnętrznych par nawiasów }. struct data int rok, mies, dzien; struct nazw char imie[20], nazwisko[40], pseudonim[25]; struct pracownik struct nazw nazwisko; struct data urodz, przyjecia, zwolnienia; char adres[50]; struct pracownik k = "Jan","Kowalski","Puchatek"}, 1950,12,28}, 1990,4,12}, 1994,10,7},"Krakow, ul. Sowia 4" Ograniczenie: Typem pola definiowanej struktury nie może być ta struktura. Zabronione są definicje postaci: struct alfa int k; struct alfa x; //Blad! pole x nie może byc typu alfa Natomiast typem pola definiowanej struktury może być wskaźnik do tej struktury.

Unia jest specyficznym rodzajem struktury o podobnej do niej deklaracji: union nazwa lista_deklaracji_pól } ; Pola (składowe) unii w odróżnieniu od struktury lokowane są w pamięci komputera w tym samym obszarze. To powoduje, że wszystkie pola unii nałożone są jedno na drugie i każdorazowo tylko zawartość jednego z nich jest dostępna. Wykorzystanie unii daje możliwość oszczędności pamięci w przypadku, gdy nie wszystkie dane muszą być przechowywane podczas całego wykonania programu. Unie podobnie jak struktury mogą tworzyć zagnieżdżone konstrukcje. Podobnie jak w przypadku struktur nazwa w definicji unii jest opcjonalna. Uwaga: Rozmiar unii jest równy największemu rozmiarowi wśród pól tej unii. Dostęp do składowych struktur i unii. Operator składowej. Do poszczególnych składowych struktury i unii można uzyskać dostęp za pomocą dwóch operatorów:. operator składowej -> operator wskaźnikowy składowej Jeżeli x jest obiektem typu strukturalnego, a n jest nazwą pola tej struktury, to wyrażenie x.n ma wartość pola n obiektu x. Jeżeli p jest wskaźnikiem na obiekt typu strukturalnego, a n jest nazwą pola tej struktury, to wyrażenie p->n ma wartość pola o nazwie n tego obiektu. W podobny sposób uzyskiwany jest dostęp do pól unii. W przypadku zagnieżdżonych struktur lub unii wykorzystuje się złożenie operatorów składowej i wskaźnikowy składowej.

x.a.n p->b.k t.c->m->y Uwaga: Jak łatwo zauważyć, wyrażenie: p->a jest jedynie skrótowym zapisem równoważnego wyrażenia: (*p).a Dokonaj analizy programu: #include <stdio.h> int main() union uu float f; long int i; }x; scanf("%f",&(x.f)); printf("%8.8lx",x.i); //Wczytanie liczby rzeczywistej i //wyswietlenie szesnastkowe jej //obrazu w pamieci komputera getch(); } 174.37 KLAWIATURA 174.37 432E5EB8

Deklaracje i definicja struktury Podstawową zasadą dotyczącą struktur jest zakaz definiowania obiektu typu strukturalnego przed osiągnięciem końca definicji danej struktury. Wynika z tego, że typem pola definiowanej struktury nie może być ona sama, natomiast może tym typem być wskaźnik na deklarowaną strukturę, co jest często wykorzystywane przy tworzeniu listowych typów danych. Element dwukierunkowej listy struktur: struct element } char *dane; struct element *poprzedni; //Wskaznik na poprzedni element //listy struct element *nastepny; //Wskaznik na nastepny element //listy Istnieje zasadnicza różnica pomiędzy definicją i deklaracją struktury: Definicja struktury precyzuje układ i typ jej poszczególnych pól, Deklaracja struktury ustala jedynie nazwę typu danej struktury. Wykorzystanie deklaracji struktury staje się konieczne przy definiowaniu układu dwóch wzajemnie związanych struktur, z których każda zawiera pole będące wskaźnikiem na pozostałą strukturę. Deklaracja jednej ze struktur nie pozwala na definicję pola takiego typu, ale pozwala na definicję wskaźnika do zadeklarowanej struktury.

Deklaracja i definicja struktury: struct alfa; //Deklaracja struktury typu alfa struct beta //Definicja struktury typu beta struct alfa* p; //Wskaznik na strukture typu alfa struct alfa //Definicja struktuty typu alfa struct beta* q; //Wskaznik na strukture typu beta Deklaracja typedef W języku C można przypisać nową (alternatywną) nazwę istniejącemu typowi danych. Deklaracja poprzedzona słowem kluczowym typedef przekształca się ze zwykłej deklaracji zmiennej w deklarację typu. Identyfikator występujący w takiej deklaracji staje się nazwą użytego typu (a nie nazwą zmiennej tego typu). typedef char ASCII; typedef char znak, *wskznak, tabznak[80]; // ASCII zastepuje typ char // znak zastepuje typ char // wskznak zastepuje typ char* // tabznak zastepuje typ char[80] // Faktyczne typy zmiennych: ASCII a,b; // a oraz b sa typ char znak c,d[12]; // c jest typu char // d jest tablica 12 elementow typu char wskznak p,*q,s[8]; // p jest wskaznikiem na char // q jest wskaznikiem na wskaznik na char // s jest tablica 8 wskaznikow na char tabznak t,m[20]; // t jest tablica 80 elementow typu char // m jest 20 elementowa tablica tablic // 80 elementow typu char

Wykorzystanie deklaracji typedef jest szczególnie przydatne przy operowaniu złożonymi składniowo wyrażeniami określającymi typ. Deklaracja typu strukturalnego: typedef struct char imie[20]; char nazwisko[40]; int rok_ur; int mies_ur; int dz_ur; char miejsce_ur[30]; char adres[50]; }pracownik; // zadeklarowano typ pracownik jako // strukture odpowiednich pol struct pracownik prac; // definicja zmiennej strukturalnej struct pracownik tablprac[120]; // definicja tablicy 120 // elementow typu strukturalnego Przykład definicji tablicy struktur: struct data int rok; int mies; int dzien; } tab[100]; // albo Tablice struktur struct data tab[100]; // jeśli wcześniej zdefiniowano // strukturę data Zdefiniowana jest 100-elementowa tablica struktur (elementy tej tablicy są zdefiniowanymi wcześniej obiektami strukturalnymi).

Zadanie do wykonania w trakcie zajęć: Napisz program pozwalający na wczytanie danych (imię i 9-cyfrowy numer telefonu) dla n telefonujących osób (zakładamy n<=100, n podane przez użytkownika), po czym program losuje i wyświetla jednego zwycięzcę spośród wczytanych n osób. W celu rozwiązania zadania: - zdefiniuj strukturę zawierającą składowe: imie, nr_telefonu, wygrywa - zdefiniuj 100-elementową tablicę tych struktur - zdefiniuj funkcję służącą do wprowadzenia danych kolejnej osoby, - zdefiniuj funkcję losującą zwycięzcę, - zdefiniuj i dopracuj funkcję main(). Zadanie dodatkowe (nadobowiązkowe) dla zainteresowanych (dostarczenie zadania możliwe wyłącznie na kolejnych zajęciach w formie wydruku tekst źródłowy + okno z wynikami wykonania, wraz z ustnym zaliczeniem) Napisz program pozwalający na wczytanie danych (imię i 9-cyfrowy numer telefonu) dla n telefonujących osób (zakładamy n<=100) i wyłonienie zwycięzców w następujący sposób: program losuje liczbę całkowitą z przedziału [0, 99], po czym wygrywają te osoby, których numer telefonu kończy się na wylosowaną liczbę (dwie cyfry); jeśli nikt nie wygrał losowanie i procedura wyłaniania zwycięzców są powtarzane. W celu rozwiązania zadania: - zdefiniuj strukturę zawierającą składowe: imie, nr_telefonu, wygrywa - zdefiniuj tablicę tych struktur - zdefiniuj funkcję służącą do wprowadzenia danych kolejnej osoby, - zdefiniuj funkcję losującą dwucyfrową liczbę, - zdefiniuj funkcję wypełniającą składowe wygrywa dla wszystkich osób; funkcja zwraca liczbę wygrywających osób, - zdefiniuj funkcję drukującą imiona wygrywających osób, - zdefiniuj i dopracuj funkcję main().