Wstęp do programowania

Podobne dokumenty
Wstęp do programowania

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

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wskaźniki w C. Anna Gogolińska

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Podstawy programowania komputerów

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

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

Argumenty wywołania programu, operacje na plikach

Wskaźniki. Informatyka

Struktury czyli rekordy w C/C++

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Język C zajęcia nr 11. Funkcje

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Tablice, funkcje - wprowadzenie

Powyższe wyrażenie alokuje 200 lub 400 w zależności od rozmiaru int w danym systemie. Wskaźnik wskazuje na adres pierwszego bajtu pamięci.

Zmienne i struktury dynamiczne

Wskaźniki. Programowanie Proceduralne 1

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

Stałe, tablice dynamiczne i wielowymiarowe

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Lab 9 Podstawy Programowania

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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Wstęp do programowania 1

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Język ANSI C tablice wielowymiarowe

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

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

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

ZASADY PROGRAMOWANIA KOMPUTERÓW

Podstawy programowania w języku C++

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

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

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

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

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

Pola i metody statyczne

Język C, tablice i funkcje (laboratorium)

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

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

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Deklaracja struktury w C++

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Tablice wielowymiarowe. Przykład tablica 2-wymiarowa. Przykład. Przykład 3-wymiarowy. Tak naprawdę nie istnieją w C! Rozważmy tablicę o rozmiarze 3x2

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

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

Struktury - wprowadzenie

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

Struktury Struktura polami struct struct struct struct

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

nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof

2 Przygotował: mgr inż. Maciej Lasota

Programowanie Proceduralne

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

Zmienne, stałe i operatory

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

x szereg(x)

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

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Etap 2 - Budowa interfejsu. typedef struct ELEMENT* stos; struct ELEMENT { dane Dane; stos Nastepny; }; struct kolejka { stos Poczatek, Koniec; };

Języki i metodyka programowania. Wskaźniki i tablice.

Dynamiczne struktury danych

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

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

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

C-struktury wykład. Dorota Pylak

Wstęp do Programowania, laboratorium 02

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Semafor ustaw_semafor(key_t nazwa, int start); Semafor usun_semafor(semafor sem); void signal(semafor sem); void wait(semafor sem);

Wykład 8: klasy cz. 4

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Wykład 4: Klasy i Metody

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

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

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

Programowanie Proceduralne

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Programowanie w języku C++

KURS C/C++ WYKŁAD 6. Wskaźniki

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

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

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Dariusz Chaberski. UMK Toruń

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

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

Co nie powinno być umieszczane w plikach nagłówkowych:

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

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

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

Egzamin z Podstaw informatyki i programowania 2007/2008

Proste algorytmy w języku C

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Transkrypt:

Wieczorowe Studia Licencjackie Wrocław, 12.12.2006 Wstęp do programowania Wykład nr 11 Struktury Podstawowe pojęcia Struktura pozwala na zebranie razem danych różnych typów (np. danych osobowych). Definicja określa elementy zwane polami. Poniżej przykładowa definicja struktury: struct dana{ int wiek; ; Definiuje ona nowy typ danych, do którego odwoływać się będziemy poprzez struct dana Na przykład deklaracje struct dana x, y; struct dana tab[100]; tworzą zmienne x i y składające się z jednego elementu typu struct dana oraz tablicę tab składającą się ze 100 takich elementów. Każdy element typu struct dana składa się z pól nazw i wiek. Dostęp do tych elementów uzyskujemy w sposób przedstawiony na poniższych przykładach: x.nazw tab[15].nazw x.wiek tab[15].wiek Elementy te jak i całe struktury mogą być wykorzystywane w podstawieniach, porównaniach, wyrażeniach, itp., np.: tab[10]=x; y=tab[i]; x.nazw=z; tab[j].wiek=j; gdzie z jest typu char nazw[dlnazw], i, j są typu int. Przykład program wykorzystujący tablicę struktur #include <stdio.h> #define dlnazw 10 #define lnazw 100 /* sortowanie tablicy struktur */ struct dana { int wiek; ; struct dana tab[lnazw]; //tablica struktur int n; FILE *fi, *fo;

void czytslowo(char *slowo) // czyta slowo az do napotkania spacji { int i=0; char ch; while (i<dlnazw && (ch=fgetc(fi))!=' ') //getc czyta jeden znak slowo[i++]=ch; void czyt(void) fscanf(fi, "%d\n", &n);//pierwszy wiersz pliku oznacza liczbe osob { //jeden wiersz pliku to nazwisko i wiek jednej osoby czytslowo(tab[i].nazw); fscanf(fi, "%d\n",&tab[i].wiek); void insertsort() { int i,j; struct dana x; for (i=1; i<n; i++) {x=tab[i]; j=i-1; while (x.wiek < tab[j].wiek && j>=0) //sortujemy według wieku tab[j+1]=tab[j--]; tab[j+1]=x; void pisz(void) { //jeden wiersz pliku to nazwisko i wiek jednej osoby fprintf(fo, "%s %d\n", tab[i].nazw, tab[i].wiek); main() { fi=fopen("dane.txt","r"); fo=fopen("wynik.txt","w"); czyt(); insertsort(); pisz() fclose(fi); fclose(fo); Listy Załóżmy, że chcemy przechowywać dane (np. osobowe), przy czym: - nie jest z góry znany rozmiar danych (np. liczba osób) - dość często niektóre informacje są usuwane i dodawane są nowe. Wówczas, zastosowanie tablic pociąga za sobą następujące problemy: - konieczne jest zadeklarowanie ( zajęcie ) rozmiaru tablicy odpowiadającego maksymalnemu przewidywanemu rozmiarowi danych;

- każda operacja wstawiania i usuwania wymaga przemieszczania znacznej części danych. W takich sytuacjach (i innych), stosujemy listy. Z punktu widzenia typów danych, możliwość utworzenia listy wymaga jedynie utworzenia typu struktur zawierających (oprócz danych właściwych ) jednego specyficznego pola oznaczającego wskaźnik na następny element listy. Na przykład struct elem { //dane wlasciwe int wiek struct elem *nast; // wskaznik na nastepny element ; Przypomnijmy, że deklaracja TYP *ZMIENNA; tworzy zmienną, która jest wskaźnikiem na element typu TYP. A zatem int *i; oznacza, że zmienna i jest wskaźnikiem na element typu int, a struct elem *nast; // wskaznik na nastepny element oznacza, że zmienna nast jest wskaźnikiem na element typu struct elem. Natomiast zadeklarowanie nast jako pola struktury typu struct elem pozwoli nam tworzyć listy. Dostęp do listy uzyskujemy poprzez wskaźnik na jej pierwszy element: struct elem *lis; Zauważmy, zadeklarowana powyżej zmienna lis ma taki sam typ jak pole nast w strukturze struct elem. Przykład lis nazw Kowal nazw Nowak nazw Smith nazw Ondracek wiek 25 wiek 17 wiek 44 wiek 17 nast. nast. nast nast. NULL Jak powstaje lista... Zadeklarowanie zmiennej struct elem *lis; nie powoduje utworzenia struktury typu struct elem a jedynie zmiennej, która jest wskaźnikiem na taką strukturę. Utworzenie struktury wymaga zaalokowania pamięci: lis = (struct elem *) malloc(sizeof(struct elem)); gdzie: - malloc(i) rezerwuje pamięć o rozmiarze i jednostek pamięci - sizeof(typ) podaje liczbę jednostek pamięci zajmowanych przez elementy typu TYP - (struct elem *) to rzutowanie typu, które powoduje, że wynik funkcji malloc(...) traktowany będzie jako wskaźnik na element typu struct elem.

Odwołania do pól struktur raz jeszcze... Mamy następujące deklaracje: struct elem x; struct elem *y; A zatem odwołania do pól wyglądają następująco: x.nazw *y.nazw x.wiek *y.wiek x.nast *y.nast operator * przy y jest konieczny, ponieważ y nie jest strukturą lecz jedynie wskaźnikiem na nią. Jednak zapis ten ma inną, bardziej intuicyjną alternatywę: *y.nazw y->nazw *y.wiek y->wiek *y.nast y->nast

Przykład program umieszczający dane o osobach na liście W pliku dane.txt umieszczamy informacje o osobach w nastepujacym formacie: - pierwszy wiersz pliku zawiera jedną liczbę liczbę osób - każdy kolejny wiersz pliku zawiera nazwisko o osoby i jej wiek, oddzielone spacją. Poniżej prezentujemy program, który dane z pliku umieszcza w liscie i wypisuje je na ekran. #include <stdio.h> #include <stdlib.h> #define dlnazw 10 #define llat 100 /* lista nazwisk osob i ich wiek */ struct dana { int wiek; struct dana *nast; ; struct dana *lis;//lis oznacza poczatek listy int n; void czyt(void) {int i,wiek; char nazwisko[dlnazw]; struct dana *x; lis=null; //na poczatku lista jest pusta printf("ile osob : "); scanf("%d\n", &n); { x=(struct dana *) malloc(sizeof(struct dana)); printf("podaj nazwisko : "); scanf("%s", x->nazw); //bez kontroli dlugosci!!! printf("podaj wiek : "); scanf("%d", &x->wiek); x->nast=lis; // podpinamy liste do nowego elementu lis=x; //zmieniamy wskaznik na poczatek listy void druk(void) struct dana *x, *pom; x=lis; printf("\n"); while (x!=null) { printf("%s %d\n",x->nazw,x->wiek); pom=x; x=x->nast; //przesuwamy się na nastepny element listy free(pom); // zwalniamy pamiec main() { czyt(); druk();