4) Operacje na tablicy dwuwymiarowej bez wykorzystywania indeksów liczbowych:



Podobne dokumenty
tablica: dane_liczbowe

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

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

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

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

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

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

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

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

Lab 9 Podstawy Programowania

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

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

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

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

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

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

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

struct Student { char nazwisko[30]; int wiek; float ocena; }; #define MAX_ROZMIAR 3 Student lista_studentow[max_rozmiar];

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

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

Podstawy programowania 1

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

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

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

PODSTAW PROGRAMOWANIA WYKŁAD 6 WSKAŹNIKI

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

Techniki Programowania wskaźniki 2

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

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

IX. Wskaźniki.(3 godz.)

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

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

Wykład 3 Składnia języka C# (cz. 2)

Tablice deklaracja, reprezentacja wewnętrzna

Język C, tablice i funkcje (laboratorium)

Stałe, tablice dynamiczne i wielowymiarowe

Techniki Programowania wskaźniki

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

Laboratorium nr 10. Temat: Funkcje cz.2.

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

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

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

Szablony funkcji i szablony klas

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

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

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

Podstawy programowania

Tablice, funkcje - wprowadzenie

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

Programowanie obiektowe, wykład nr 10. Metaprogramowanie cz.2: szablony struktur i klas

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

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

Wskaźniki w C. Anna Gogolińska

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

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Języki programowania obiektowego Nieobiektowe elementy języka C++

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

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

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

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

Struktury, unie, formatowanie, wskaźniki

1 Podstawy c++ w pigułce.

Programowanie i struktury danych

Jak Windows zarządza pamięcią?

Zajęcia 6 wskaźniki i tablice dynamiczne

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

Część 4 życie programu

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Zadania z podstaw programowania obiektowego

Programowanie i struktury danych

Wskaźniki. Programowanie Proceduralne 1

C-struktury wykład. Dorota Pylak

Podstawy programowania w języku C++

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

Język ludzki kod maszynowy

Struktury Struktura polami struct struct struct struct

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

Funkcja (podprogram) void

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

Algorytmy i język C++

C-struktury wykład. Dorota Pylak

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

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

1,3,4,2,3,4,0,1,4,5,0. Wówczas największa suma trzech kolejnych liczb (zaznaczone na czerwono) wynosi:

Podstawy programowania w języku C++

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!

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

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:

Podstawy programowania w języku C++

Wykład 5. Operacje na tablicach

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

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

6 Przygotował: mgr inż. Maciej Lasota

Podstawy programowania

Transkrypt:

WSKAŹNIKI I TABLICE WIELOWYMIAROWE 1) Operacje na tablicach wielowymiarowych w zapisie indeksowym: tab[ 3 ][ 5 ] ; i, j ; for( i=0 ; i<3 ; i++ ) for( j=0 ; j<5 ; j++ ) prf( TAB[%d, %d]=, i, j ); // cout<< TAB[ << i <<, << j << ]= ; scanf( %d, &tab[ i ][ j ] ); // cin >> tab[ i ] [ j ]; 2) Reprezentacja tablicy tab[3][5] w pamięci komputera: tab tab+1 tab+2 (tab+2)+3 wiersz_0 wiersz_1 wiersz_2 3) Operacje na tablicy dwuwymiarowej w zapisie wskaźnikowym: tab[ 3 ][ 5 ] ; i, j ; for( i=0 ; i<3 ; i++ ) for( j=0 ; j<5 ; j++ ) prf( TAB[ %d, %d ]=, i, j ); scanf( %d, (tab + i) + j ); // scanf( %d, & ( (tab + i) + j) ); // cin >> ( (tab + i) + j) ; 4) Operacje na tablicy dwuwymiarowej bez wykorzystywania indeksów liczbowych: tab[ 3 ][ 5 ] ; ( wsk_w) [ 5 ] ; wsk_k ; // wskaźnik na wiersz tzn. na 5-cio elementową tablicę // wskaźnik na kolumnę tzn. na liczbę for( wsk_w = tab ; wsk_w < tab + 3 ; wsk_w++ ) for( wsk_k = wsk_w ; wsk_k < wsk_w + 5 ; wsk_k++ ) prf( TAB[ %d, %d ]=, wsk_w tab, wsk_k wsk_w ); scanf( %d, wsk_k ); M.Piasecki: PODSTAWY PROGRAMOWANIA 1 (W11) Wskaźniki i tablice wielowymiarowe

5) Różnica pomiędzy wskaźnikiem na tablicę a wskaźnikiem na wskaźnik : tab[ 3 ][ 5 ] ; i, j ; tab[ i ][ j ] == ( (tab + i) + j) np. tab[ 0][ 0] == ( (tab+0)+0) == tab Dlaczego tab jest typu ( )[5] a nie typu? tabd To jest wskaźnik na wskaźnik na zmienną (adres adresu obiektu): tabd tabd tabd tabd lub wskaźnik na tablicę wskaźników na tablice: tabd tabd (tabd+2) tabd (tabd+1) ( (tabd+2)+3) // przykładowy program tworzący dynamiczna strukturę danych j.w. tabd = new [4]; // lub równoważnie: for( i=0; i<4; i++ ) // for( i=0; i<4; i++ ) *(tabd+i) = new [5]; // tabd[ i ] = new [5]; // zapis liczby 111 do wybranego elementu tablicy tabd ( (tabd+2) + 3) = 111 ; // tabd[ 2 ][ 3 ] = 111 ; // zamiana miejscami wierszy o indeksach 1 i 3 wsk_pom ; wsk_pom = (tabd +1) ; // wsk_pom = tabd[0]; (tabd + 1) = (tabd + 3) ; // tabd[0] = tabd[3] ; (tabd + 3) = wsk_pom ; // tabd[3] = wsk_pom ; M.Piasecki: PODSTAWY PROGRAMOWANIA 2 (W11) Wskaźniki i tablice wielowymiarowe

WSKAZANIA NA FUNKCJE nazwa funkcji jest stałą równą adresowi kodu funkcji w pamięci komputera (analogicznie jak nazwa tablicy jest stałą równą adresowi tablicy), #include <conio.h> clrscr ; // podanie samej nazwy funkcji jest równoważne podaniu adresu // i nie powoduje żadnej akcji (podobnie jak polecenie 10 ; ) clrscr() ; // nazwa funkcji z nawiasami () jest traktowana jako wywolanie // funkcji tzn. polecenie wykonania fragmentu kodu umieszczo- // nego pod podanym adresem możliwość pośredniego dostępu do funkcji (poprzez zmienną zawierającą adres / wskazanie na funkcję). Ogólna postać definicji wskaźnika funkcji: typ_zwracany_przez_funkcję ( nazwa_zmiennej ) ( parametry_funkcji ); void clrscr( void ); // prototyp funkcji clrscr() void ( nowy_clrscr) ( void ); // definicja zmiennej wskazującej na funkcję nowy_clrscr = clrscr; // przypisanie zmiennej nowy_clrscr adresu clrscr clrscr(); // bezposrednie wywołaniefunkcji clrscr() nowy_clrscr(); // wywolanie funkcji wskazywanej przez zmienną to daje możliwość napisania funkcji, których parametrami są inne funkcje! (wywoływanie funkcji, których adresy zostaną podane dopiero w trakcie wykonywania programu). // np. uniwersalna funkcja licząca sume N elementów dowolnego ciągu double Suma_Ciagu( double ( Element)( ), ilosc ) double s = 0; for( i = 0; i < ilosc; i++ ) s += Element( i ); double Nty_Element ( n ) // 1, 1/2, 1/3, 1/4, 1/5,... return( 1.0/(n+1) ); prf( Suma elementów = %lf, Suma_Ciagu( Nty_Element, 100 ); M.Piasecki: PODSTAWY PROGRAMOWANIA 3 (W11) Wskazania na funkcje

funkcja qsort <stdlib.h> implementacja algorytmu sortowania szybkiego (ang. quick sort) pozwalająca sortować tablice obiektów dowolnego typu według dowolnego zadanego kryterium (funkcji definiującej relację porządku) prototyp funkcji: void qsort( ); void base, // adres poczatku sortowanego obszaru size_t nelem, // ilosc sortowanych elementów size_t width, // rozmiar pojedynczego elementu ( fcmp)( void, void ) // adres funkcji porównująca Przykład sortowania tablicy liczb całkowitych #include <stdlib.h> #include <stdio.h> liczby_rosnaco( const void, const void ); void wyswietl( [ ], ); main( void ) tab[10] = 12, 1, 3, 0, 10, 1, 2, 6, 4, 9 ; wyswietl( tab, 10 ); qsort( tab, 10, sizeof(), liczby_rosnaco ); wyswietl( tab, 10 ); return 0; liczby_rosnaco( const void wsk_1, const void wsk_2) wsk_liczby_1, wsk_liczby_2; wsk_liczby_1 = ( )wsk_1; wsk_liczby_2 = ( )wsk_2; return( wsk_liczby_1 wsk_liczby_2 ); void wyswietl( tab[ ], ilosc ) i; for( i = 0; i<ilosc; i++ ) prf( "tab[%d]=%d\n", i, tab[i] ); M.Piasecki: PODSTAWY PROGRAMOWANIA 4 (W11) Wskazania na funkcje

Przykład sortowania tablicy tekstów #include <stdio.h> #include <stdlib.h> #include <string.h> teksty_rosnaco( const void wsk_1, const void wsk_2) return( strcmp( (char ) wsk_1, (char ) wsk_2) ); main( ) char tab_tekstow[5][10] = "Opel", "Audi", "Ford", "Trabant", "Fiat" ; qsort( tab_tekstow, 5, sizeof( tab_tekstow[0] ), teksty_rosnaco ); return 0; Przykład sortowania bazy danych (tablicy struktur) #include <stdio.h> #include <stdlib.h> #include <string.h> struct student char nazwisko[31]; char imie[16]; wiek; char plec; float stypendium; ; wedlug_nazwisk( const void wsk_1, const void wsk_2) struct student osoba_1 = (struct student ) wsk_1; struct student osoba_2 = (struct student ) wsk_2; return( strcmp( osoba_1 >nazwisko, osoba_2 >nazwisko ); main( void ) #define MAX_IL 100 struct student baza[ MAX_IL ]; qsort( baza, MAX_IL, sizeof( struct student ), wedlug_nazwisk ); return 0; M.Piasecki: PODSTAWY PROGRAMOWANIA 5 (W11) Wskazania na funkcje

PRZYKŁADY RÓŻNYCH KOMBINACJI WSKAŹNIKÓW Przykładowe elementy: float LICZBA; TAB_INT [ 5 ]; // liczba rzeczywista float // 5-cio elementowa tablica liczb double FUNKCJA ( x ) // funkcja z parametrem zwracająca // wartość double return x+0.1; Wskaźniki na w/w elementy: float wsk_liczby ; wsk_liczby = & LICZBA ; ( wsk_tab ) [ 5 ] ; wsk_tab = & TAB_INT ; // wskaźnik na liczbę float // wskaźnik na 5-cio elementowa tablicę double ( wsk_fun ) ( ) ; // wskaźnik na funkcję wsk_fun = FUNKCJA ; Tablice elementów: float tab_liczb [ 10 ] ; tab_tab [ 10 ] [ 5 ] ; // tablica liczb float // tablica tablic // // nie ma tablicy funkcji! Tablice wskaźników na elementy: float tab_wsk_liczb [ 10 ] ; tab_wsk_liczb [ 2 ] = & LICZBA ; ( tab_wsk_tab [ 10 ] ) [ 5 ] ; tab_wsk_tab [ 2 ] = & TAB_INT ; // tablica wskaźników na liczby // tablica wskaźników na tablice double ( tab_wsk_fun [ 10 ] ) ( ) ; // tablica wskaźników na funkcje tab_wsk_fun [ 2 ] = FUNKCJA ; Funkcje zwracające elementy: float FUNKCJA_E1 ( void ) // funkcja zwracająca liczbę float return 0.1; // // nie ma funkcji zwracającej tablicę! // // nie ma funkcji zwracającej funkcję! M.Piasecki: PODSTAWY PROGRAMOWANIA 6 (W11) Różne kombinacje wskaźników

Funkcje zwracające wskaźniki elementów: float FUNKCJA_W1( void ) // funkcja (void) zwracająca // wskaźnik na liczbę float float wsk_liczby ; wsk_liczby = &LICZBA ; return wsk_liczby ; ( FUNKCJA_W2( void ) ) [ 5 ] // funkcja (void) zwracająca // wskaźnik na tablicę ( wsk_tab)[ 5 ] ; // pięciu liczb wsk_tab = &TAB_INT ; return wsk_tab ; double ( FUNKCJA_W3( void ) ) ( ) // funkcja (void) zwracająca // wskaźnik na funkcję double ( wsk_fun)( ); // double () wsk_fun = FUNKCJA ; return wsk_fun ; Tylko dla koneserów Tablica wskaźników na funkcje double ( ) double ( tab_wsk_fun[ 10 ] ) ( ) ; Wskaźnik tablicy wskaźników na funkcje double ( ) double ( ( wsk_tab_wsk_fun) [ 10 ] ) ( ) ; Funkcja (void) zwracająca wskaźnik tablicy wskaźników na funkcje double() double ( ( fun_wsk_tab_wsk_fun( void ) ) [ 10 ] ) ( ) return wsk_tab_wsk_fun ; M.Piasecki: PODSTAWY PROGRAMOWANIA 7 (W11) Różne kombinacje wskaźników