OSNOVA: a) Ukazatel b) Pole a ukazatel c) Pole ukazatelů d) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro.

Slides:



Advertisements
Podobné prezentace
Tento vzdělávací materiál vznikl v rámci projektu EU – peníze školám
Advertisements

Tento výukový materiál vznikl v rámci Operačního programu Vzdělávání pro konkurenceschopnost 1. KŠPA Kladno, s. r. o., Holandská 2531, Kladno,
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
PEVNÝ DISK POČÍTAČE.
Přednáška 11 Jiří Šebesta
Ostatní vnitřní komponenty
Programování 2 Cvičení 5.
13AMT Procesory I. Lecture 2 Ing. Martin Molhanec, CSc.
Komunikace periférii.
Pole, ukazatele a odkazy
Algoritmizace a programování Datové typy v Delphi - 05
JavaScript - 5. část Pole Ústav automatizace inženýrských úloh a informatiky FAST VUT v Brně 0U2 - Základy informatiky a výpočetní techniky 2.
Kontakty Webpage přednášky: – Slajdy (MS PowerPoint): –ftp://ulita.ms.mff.cuni.cz/predn/PRG017 Technické.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Architektura a vývoj PC 2.
Algoritmy a programovací techniky
C# - pointery Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
= monolitický integrovaný obvod obsahující kompletní mikropočítač
Autor:Jiří Gregor Předmět/vzdělávací oblast: Digitální technika Tematická oblast:Digitální technika Téma:Paměti – úvod, základní pojmy Ročník:3. Datum.
Časová složitost algoritmů
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ ŘAZENÍ PRVKŮ – OPAKOVANÝM VÝBĚREM NEJVĚTŠÍHO PRVKU (SELECTSORT) Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V.
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
Název Digitální reprezentace dat Předmět, ročník ICT, sekunda
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
Informatika / …o počítači (základní pojmy, jednoduché představy) 2006.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
OSNOVA: a) Příkazy pro cykly II. b) Příkazy pro řízení přenosu c) Příkazy – příklad d) Řetězce v C e) Funkce “stdio.h“ pro řetězce f) Funkce “string.h“
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Ukazatele BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Vnitřní (operační paměť)
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Databázové systémy Přednáška č. 5 Datové typy a Fyzická organizace dat.
OSNOVA: a) Algoritmy třídění b) Třídění dynamických záznamů Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro obor EST.
David Rozlílek Me4B. ? ? ? ?? Jaká paměť tvoří paměť programu ………… ? EA … kde je logická 1 a kde logická 0 ……….? ? ….. Kde je vnější a kde vnitřní paměť……….?
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
Název školyStřední odborná škola a Gymnázium Staré Město Číslo projektuCZ.1.07/1.5.00/ AutorIng. Ivana Brhelová Název šablonyIII/2.
Základní pojmy ve výpočetní technice
Jednotky Číselné soustavy
Kontakty Webpage přednášky: – Slajdy (MS PowerPoint): –ftp://ulita.ms.mff.cuni.cz/predn/PRG017 Technické.
Reprezentace dat v počítači. základní pojmy  BIT označení b nejmenší jednotka informace v paměti počítače název vznikl z angl. BINARY DIGIT (dvojkové.
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
Název šablony: ICT2 – Inovace a zkvalitnění výuky prostřednictvím ICT Vzdělávací oblast dle RVP:Základy výpočetní techniky Okruh dle RVP:Základy informatiky.
Stránkování MATĚJ JURIČIČ 2015/2016 EP1 SPŠ A VOŠ JANA PALACHA KLADNO.
Počítače a programování 2
Síťová vrstva a vrstva síťového rozhraní v TCP/IP
Systémové oblasti disku
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Úvod do informačních technologií autor Mgr. Jana Truxová
Logická organizace paměti
Ukládání dat v paměti počítače
Programování v jazyce C++
Číselné soustavy - Opakování
Stránkování Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Správa paměti.
Jednotky a pojmy ve výpočetní technice
Typ pole (1) Proměnná typu pole představuje kolekci proměnných stejného datového typu, které mohou být označovány společným jménem (identifikátorem) Pole.
Paměť počítače.
Segmentace Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Příklad topologie sítě Adresace v internetu MAC adresa – fyzická adresa interface (rozhraní) Je zapsána v síťové kartě. Je identifikátor uzlu.
Informatika / …o počítači
Adresace paměti Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Typ ukazatel (1) Proměnné typu ukazatel (pointer) uchovávají paměťovou adresu Hodnota ukazatele říká, kde (na jaké adrese) se v paměti nachází nějaký objekt.
Paměť.
Využití ICT pro rozvoj klíčových kompetencí CZ.1.07/1.5.00/
Transkript prezentace:

OSNOVA: a) Ukazatel b) Pole a ukazatel c) Pole ukazatelů d) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro obor EST BPC1E PŘEDNÁŠKA 6

Ukazatel (1/10) Ukazatel (pointer) je datový typ sloužící k uložení adresy v paměti počítače Požadovaná velikost pro uložení ukazatele v paměti (počet bytů) je dána paměťovým prostorem, který daný počítačový systém využívá Pro malé mikrokontrolé- rové aplikace je ukazatel obvykle 16ti bitový (2 B) s adresací paměťového prostoru do 64 kB (adresa hexadecimálně 0x0000 až 0xFFFF)

Pokud je fyzický paměťový prostor větší, používá se segmentace – velký pamě- ťový prostor je rozdělen na segmenty (stránky) o veli- kosti 64 kB a ukazatel definuje adresu na dané stránce, tzv. blízký ukazatel, nebo je použit tzv. vzdálený ukazatel, který obsahuje i identifikaci příslušné pamě- ťové stránky a adresu (off- set) v rámci dané stránky Ukazatel (2/10)

U 32 bitových systémů se používá 32 bitový ukazatel, tj. 4 B a adresy v hexadecimálním rozsahu 0x do 0xFFFFFFFF, celkem 4 GB U 64 bitových systémů se používá 64 bitový ukazatel, tj. 8 B, celkem 16 HB (hexabytů) Pozn. 1 kB = 2 10 B = 1024 B 1 MB = 2 20 B = 1024 kB = B 1 GB = 2 30 B = 1024 MB, 1 TB = 2 40 B = 1024 GB 1 PB = 2 50 B = 1024 TB, 1 HB = 2 60 B = 1024 HB, atd. Ukazatel (3/10)

Ukazatelová aritmetika (Pointer aritmetics) zahrnuje výpočetní operace nad ukazateli. Adresovatelnou jednotkou může být 1 byte, 1 slovo (2 B), v jazyce C velikost datového typu (char = 1B, int = 4B, …), jenž ukazatel adresuje. int *a, *b; //pointers to integer int x; int y[5] = {1, 2, 3, 4, 5}; a = &x; //pointer a contents address of variable x *a = y[2]; //fill address defined by a by y[2], x=y[2] printf("%d\n", x); b = &(y[3]); //pointer b contents address of var. y[3] *b = *a; //content of address pointed by a is copied to content of address pointed by b printf("%d\n", y[3]); Příklad: BPC1E_Ex42.c Ukazatel (4/10)

Prvky jednorozměrného pole jsou v paměti řazeny za sebou, indexovat (ukázat na x -tý prvek) pole lze pomocí ukazatelů. int *adr; //pointer to integer int arr[50], i; adr = &(arr[49]);//pointer is set to the last element for(i=0; i<50; i++) { *adr = i;//a number is paste to the address //defined by pointer adr adr--;//pointer is shifted down (-1 element //of arr = -4 bytes due to int type } for(i=0; i<50; i++) printf("%d\n", arr[i]); Příklad: BPC1E_Ex43.c Ukazatel (5/10)

Jméno pole bez indexu je ukazatelem na první prvek pole: zápis A[0] je ekvivalentní *A zápis A[5] je ekvivalentní *(A+5) int *adr; //pointer to integer int arr[50], i; adr = arr;//pointer is set to the first element for(i=0; i<50; i++) { *adr = i;//a number is paste to the address //defined by pointer adr adr++;//pointer is shifted up (+1 element //of arr = +4 bytes due to int type } for(i=0; i<50; i++) printf("%d\n", arr[i]); Příklad: BPC1E_Ex44.c Ukazatel (6/10)

Př. Aplikace relačních operátorů na ukazatele int *a, *b, *c; // pointers to integer int arr[20], i; a = arr; for(i=0; i<20; i++) {*a = i; a++;} for(i=0; i<20; i++) printf("%3d", arr[i]); b = arr+5; c = arr+15; a = arr; for(i=0; i<20; i++) { if (b a) //address a must be between b and c *a=0; a++; } for(i=0; i<20; i++) printf("%3d", arr[i]); Příklad: BPC1E_Ex45.c Ukazatel (7/10)

Př. Integer v paměti po bytech int *a; //pointer to int char *b; //pointer to char int arr[5], i; for(i=0; i<5; i++) arr[i] = i; a=arr; for(i=0; i<5; i++) //int address and value displaying { printf("%x %3d\n", a, *a); a++; } b=arr; for(i=0; i<20; i++) //char (byte) addr. and value disp. { printf("%x %3d\n", b, *b); b++; } Příklad: BPC1E_Ex46.c Ukazatel (8/10)

Př. Float v paměti po bytech unsigned char *a; //pointer to uchar float num = 1.2; //float value in memory int i; a=&num; for(i=0; i<4; i++) //four bytes of float value in mem. { printf("%x ", a);//address printf("%x\n", *a);//content a++; } Příklad: BPC1E_Ex47.c Pro hodnotu 1,2 uloženou jako typ float je v paměti uloženo (hexa) 9A F, uspořádání je od nejméně významného bytu pro nejvíce významný Ukazatel (9/10)

1,2 ve float rozlišení má tedy tvar hexa: 0x 3 F A binárně: 0b znaménko: 0 = + exponent: 0b = 127 mantisa: 0b = Ukazatel (10/10)

int *a; //pointer to int int arr[4][5], i, j; for(i=0; i<4; i++) { for(j=0; j<5; j++) { arr[i][j]= 10*i+j;v printf("%3d", arr[i][j]); } printf("\n"); } a=arr; for(i=0; i<20; i++, a++) //20 elements of array in mem printf("%x %3d\n", a, *a); //printing Příklad: BPC1E_Ex48.c Dvourozměrné pole v paměti Pole a ukazatel (1/3)

Vícerozměrné pole v paměti int *a; //pointer to int int arr[3][3][3], i, j, k; for(i=0; i<3; i++) for(j=0; j<3; j++) for(k=0; k<3; k++) arr[i][j][k] = 100*i + 10*j + k; for(i=0; i<27; i++, a++) //27 elements of array 3x3x3 printf("%x %3d\n", a, *a); //in memory printing Příklad: BPC1E_Ex49.c Pole a ukazatel (2/3)

Vícerozměrné pole a ukládání jeho prvků v paměti: Ekvivalentní zápis: arr[i][j][k] = *(arr+i*3*3+j*3+k) Pole a ukazatel (3/3)

Pole ukazatelů (1/2) Př. Aplikace pole ukazatelů – vyhledání pozic znaků v textu char text[] = "okolo kola okolkovala koala"; char *o[10], *c; //o is array of pointers int i=0, j; printf("Original string: %s\n\n", text); printf("Addr. of the beginning of text: %x\n\n", text); o[i] = strchr(text, 'o'); while(o[i]) { c = o[i]+1; i++; o[i] = strchr(c, 'o'); //save addres of ’o’ to //array of pointers }

Pole ukazatelů (2/2) printf("Addresses of the character o:\n"); for(j=0; j<i; j++) printf("%x - position %d\n", o[j], o[j]-text); for(j=0; o[j]!=0; j++) // changing of all ’o’ by ’k’ *o[j]='k'; printf("\n\nChanged string: %s\n", text); Příklad: BPC1E_Ex50.c

Příklady (1/7) Př. Záměna znaků pomocí ukazatele char text[]="okolo kola okolkovala koala"; char *a; printf("Original string: %s\n\n", text); a=text; while(*a!=NULL) { if(*a=='o') *a='k'; else if(*a=='k') *a='o'; a++; } printf("Changed string: %s\n", text); Příklad: BPC1E_Ex51.c

Příklady (2/7) Př. Vyhledání a náhrada textu bez std. funkcí pomocí ukazatelů char text[]="sokol kolem jezdil kolem dokola"; char test[]="kol"; char ntext[]=" "; char *a, *b, *c; int tst; a=text; b=test; printf("Original string: %s\n\n", text); for(a=text; *a!=NULL; a++) { tst=1; c=a; for(b=test; *b!=NULL; b++,c++) if (*c!=*b) tst=0;

Příklady (3/7) if(tst) { c=ntext; for(b=test; *b!=NULL; b++, c++, a++) { *a=*c; } printf("Changed string: %s\n", text); Příklad: BPC1E_Ex52.c

Příklady (4/7) Př. V řetězcové proměnné wtxt a btxt ve jsou uloženy zhuštěně pozice figurek bílého, resp. černého, na šachovnici se 64 políčky (8x8) ve formě písmeno řádku (A až H) a číslo sloupce (1 až 8). Doplňte program, který postupně projde texty ve wtxt a btxt a do pole field vloží na příslušná místa znaky 'W' a 'B' označující figurku příslušného hráče a situaci vytiskněte do konzolového okna. Procházení řetězci i polem řešte pomocí ukazatelů. #include int main() { char wtxt[]="A6B8A4D7E2C3F1F2"; char btxt[]="C3A7B1D1E4E5F5H3H5"; char field[64]; char *p, *t, i, j;

Příklady (5/7) p=field; for(i=0, p=field; i<64; i++, p++) *p= ' '; p=wtxt; do { t=field+8*(*p-'A'); p++; t+=(*p-'1'); *t='W'; p++; } while(*p!='\0');

Příklady (6/7) p=btxt; do { t=field+8*(*p-'A'); p++; t+=(*p- '1' ); *t='B'; p++; } while(*p!='\0'); printf("\n |"); for(i='1'; i<='8'; i++) printf("%c|", i); printf("\n -"); for(i='1'; i<='8'; i++) printf("--");

Příklady (7/7) for(i='A', p=field; i<='H'; i++) { printf("\n%c |", i); for(j='1'; j<='8'; j++, p++) printf("%c|", *p); } return 0; } Výstup na obrazovce: Příklad: BPC1E_Ex53.c

Téma následující přednášky DĚKUJI ZA POZORNOST – Funkce - úvod – Hlavičky funkcí – Rekurze funkcí – Knihovny funkcí – Příklad