Stałe, tablice dynamiczne i wielowymiarowe

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

Podstawy programowania komputerów

DYNAMICZNE PRZYDZIELANIE PAMIECI

Lab 9 Podstawy Programowania

Język ANSI C tablice wielowymiarowe

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

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

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

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

//zmienne globalne int *pa, *pb; //wskaźniki globalne void main(void) { clrscr(); printf("\n podaj wartosc liczby a\n"); scanf("%d",&a); pa=&a;

Wskaźniki. Informatyka

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

tablica: dane_liczbowe

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

Programowanie w języku C++

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

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

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

Wskaźniki w C. Anna Gogolińska

dr inż. Jarosław Forenc

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

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

Tablice, funkcje - wprowadzenie

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

Język ANSI C. część 11. Jarosław Gramacki Instytut Informatyki i Elektroniki

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

Programowanie obiektowe W3

Język C zajęcia nr 11. Funkcje

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

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

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

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

Wstęp do wskaźników i dynamicznej alokacji pamięci w językach ANSI C i C++

Uzupełnienie dot. przekazywania argumentów

6 Przygotował: mgr inż. Maciej Lasota

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

Język C, tablice i funkcje (laboratorium)

ZASADY PROGRAMOWANIA KOMPUTERÓW

2 Przygotował: mgr inż. Maciej Lasota

Wykład 1: Wskaźniki i zmienne dynamiczne

Podstawy informatyki. Wykład nr 1 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

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

Wskaźniki. Programowanie Proceduralne 1

Podstawy Programowania C++

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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

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.

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

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

Tablice w argumentach funkcji. Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku

Podstawy Programowania. Zmienne dynamiczne, struktury, moduły programowe

Stałe i zmienne znakowe. Stała znakowa: znak

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

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

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

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

x szereg(x)

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

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:

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

Struktury czyli rekordy w C/C++

Wstęp do Programowania, laboratorium 02

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.

Wykład 4: Klasy i Metody

Wstęp do wskaźników w języku ANSI 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

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

Podstawy programowania w języku C++

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

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

Podstawy algorytmiki i programowania - wykład 1 Tablice powtórzenie Tablice znaków Tablice dwuwymiarowe

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

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Zmienne, stałe i operatory

Wprowadzenie do programowania w języku C

Podstawy programowania w języku C++

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

Zmienne i struktury dynamiczne

Tablice, funkcje, wskaźniki - wprowadzenie

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

Podstawy Programowania 2 Wskaźniki i zmienne dynamiczne. Plan. Wskaźniki - krótka powtórka. Wskaźniki - krótka powtórka Wartości wskaźników.

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

Podstawy Programowania. Zmienne dynamiczne, struktury, moduły programowe

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 - TABLICE DWUWYMIAROWE, OPERACJE NA TABLICACH. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Funkcja (podprogram) void

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

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

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

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

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

Wstęp do programowania 1

Podstawy Programowania

Podstawy Programowania

Podstawy programowania w języku C++

Część 4 życie programu

Transkrypt:

Stałe, tablice dynamiczne i wielowymiarowe

tylko do odczytu STAŁE - CONST

tablice: const int dni_miesiaca[12]=31,28,31,30,31,30,31,31,30,31,30,31; const słowo kluczowe const sprawia, że wartość zmiennej nie może zostać zmodyfikowana za pomocą przypisania, inkrementacji, dekrementacji. const int zmienna=12; //dobrze const int zmienna; zmienna= 12; //źle Zmienna staje się tylko do odczytu. wskaźniki: const float *ptr; //lub float const *ptr; //ptr wskazuje na stałą wartość float(wartość stała a wskaźnik może ulec zmianie float *const ptr; //ptr jest stałym wskaźnikiem(wskaźnik będzie wskazywał zawsze na to samo miejsce) const float * const *ptr; // wskaźnikiem(wskaźnik będzie wskazywał zawsze na to samo miejsce i wartość tam przechowywana nie może się zmienić w funkcjach: void wyswietl(const int tab[], int ROZMIAR); // lub void wyswietl(const int *tab, int ROZMIAR); // przekazuje tablicę do funkcji uniemożliwiając jej ingerencję w dane

dynamiczna alokacja pamięci TABLICE DYNAMICZNE

tablice dynamiczne do tej pory zawsze definiowaliśmy rozmiar tablicy przed kompilacją programu. Dynamiczne alokowanie pamięci pozwala nam ustalić rozmiar tablicy w trakcie działania programu. Może być tak, iż malloc nie znajdzie odpowiedniej ilości miejsca w pamięci wtedy zwróci wskaźnik zerowy(null) if (ptr==null) printf( Za mało dostępnej pamięci ); exit(exit_failure); double *ptr; ptr=(double *) malloc (30*sizeof(double)); funkcja malloc szuka bloków wolnej pamięci o odpowiedniej wielkości i zwraca adres pierwszego bajtu przydzielonego bloku. double tablica[n]; //gdzie n jest zmienną ptr=(double *)malloc(n*sizeof(double)); malloc rezerwuje tylko pamięć nie ingerując w jej zawartość. Po zarezerwowaniu pamięci i skorzystaniu z niej należy ją zwolnić funkcją free(); free(ptr); Innym sposobem dynamicznego przydziału pamięci jest funkcja calloc(). Różni się ona tym, że ingeruje w zarezerwowaną pamięć przypisując wszystkim bitom bloku wartość 0. int *ptr; ptr=(int *)calloc(n, sizeof(int)); Pamięć przydzieloną w powyższy sposób również zwalniamy funkcją free().

wstęp TABLICE WIELOWYMIAROWE

tablice wielowymiarowe inaczej tablice tablic deklaracja: float deszcz[5][12]; //jest to tablica 5 tablic 12 elementowych typu float. Widok jak na rysunku jest tylko wygodnym sposobem przedstawienia tablicy w rzeczywistości jest to ciągły obszar pamięci przechowujący kolejno pierwszą 12-el. tablicę, następnie kolejną, itd. Więcej wymiarów: tablica 3D: int pudelko[10][20][30]; Inicjalizacja tablicy: #define MIESIACE 12 #define LATA 5... const float deszcz[lata][miesiace] = 4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6, 8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3, 9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4, 7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2, 7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2 ;

operowanie na tablicach do przemieszczania się po tablicach 2D należy użyć dwóch pętli for pierwsza do poruszania się po wierszach, druga zaś do poruszania się po kolumnach. Do przetwarzania danych w tablicach 3D używa się 3 zagnieżdżonych pętli, dla 4D czterech itd. for (rok = 0; rok < LATA; rok++) for (miesiac = 0; miesiac < MIESIACE; miesiac++) printf( %f \t,deszcz[rok][miesiac]); printf( \n );

WSKAŹNIKI A TABLICE WIELOWYMIAROWE

int tablica[4][2]; tablica[2][1] *(*(tablica+2)+1) tablica adres pierwszego elementu złożonego z 2 liczb całkowitych tablica+2 adres trzeciego elementu złożonego z 2 liczb całkowitych *(tablica+2) trzeci element tablicy złożony z 2 liczb całkowitych(adres pierwszego el. tej podtablicy)(wartość int) *(tablica+2)+1 adres drugiego elementu tej podtablicy(wartość int) *(*(tablica+2)+1) druga wartość int w trzecim rzędzie.

FUNKCJE A TABLICE WIELOWYMIAROWE

#include <stdio.h> #define WIERSZE 3 #define KOLUMNY 4 void sumuj_wiersze(int tab[][kolumny], int wiersze); void sumuj_kolumny(int [][KOLUMNY], int ); // ok, mozna pominac nazwe int sumuj2d(int (*tab)[kolumny], int wiersze); // jeszcze inna skladnia int main(void) int graty[wiersze][kolumny] = 2,4,6,8, 3,5,7,9, 12,10,8,6 ; sumuj_wiersze(graty, WIERSZE); sumuj_kolumny(graty, WIERSZE); printf("suma wszystkich elementow = %d\n", sumuj2d(graty, WIERSZE)); return 0; void sumuj_wiersze(int tab[][kolumny], int wiersze) int w; int k; int suma; for (w = 0; w < wiersze; w++) suma = 0; for (k = 0; k < KOLUMNY; k++) suma += tab[w][k]; printf("wiersz %d: suma = %d\n", w, suma); void sumuj_kolumny(int tab[][kolumny], int wiersze) int w; int k; int suma; for (k = 0; k < KOLUMNY; k++) suma = 0; for (w = 0; w < wiersze; w++) suma += tab[w][k]; printf("kolumna %d: suma = %d\n", k, suma); int sumuj2d(int tab[][kolumny], int wiersze) int w; int k; int suma = 0; for (w = 0; w < wiersze; w++) for (k = 0; k < KOLUMNY; k++) suma += tab[w][k]; return suma;

tablice N-wymiarowe Aby zadeklarować wskaźnik odpowiadający N-wymiarowej tablicy musimy określić wartości dla wszystkich par nawiasów, poza skrajnie lewą. int sumuj4d( int tab[][10][20][30], int wiersze); int sumuj4d( int (*tab)[10][20][30], int wiersze);