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

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

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

Tablice deklaracja, reprezentacja wewnętrzna

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

Tablice, funkcje - wprowadzenie

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

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

Podstawy programowania 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

Podstawy programowania

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

ŁAŃCUCHY W JĘZYKU C/C++

Argumenty wywołania programu, operacje na plikach

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

Podstawy programowania 1

Wprowadzenie do programowania w języku C

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Wstęp do Programowania, laboratorium 02

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

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak

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

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

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

Języki i metodyka programowania. Wprowadzenie do języka C

Język C, tablice i funkcje (laboratorium)

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

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

tablica: dane_liczbowe

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

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

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

C-struktury wykład. Dorota Pylak

Programowanie Proceduralne

Struktury Struktura polami struct struct struct struct

Podstawy Programowania C++

Funkcja (podprogram) void

Operacje na łańcuchach znaków

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

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

Programowanie Proceduralne

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

Metody Metody, parametry, zwracanie wartości

Wskaźniki. Informatyka

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

Język C zajęcia nr 11. Funkcje

Wyklad 7 Funkcje (c.d.). Tablice jednowymiarowe znaków

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak

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

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

C-struktury wykład. Dorota Pylak

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 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

2 Przygotował: mgr inż. Maciej Lasota

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

dr inż. Jarosław Forenc

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

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

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

Część 4 życie programu

Wstęp do programowania 1

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

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

Java Podstawy. Michał Bereta

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

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

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

Wskaźniki w C. Anna Gogolińska

scanf( %s,tekst); //znaki podane z klawiatury (do pierwszego białego znaku ) //s kopiowane do zmiennej tekst i dostawiany jest znak \0

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

Projektowanie klas c.d. Projektowanie klas przykład

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

Język C++ zajęcia nr 2

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

Wskaźniki. Programowanie Proceduralne 1

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

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

MATERIAŁY DO ZAJĘĆ II

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

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

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

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

Szablony klas, zastosowanie szablonów w programach

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

PARADYGMATY PROGRAMOWANIA Wykład 3

Zmienne, stałe i operatory

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

Wykład 8: klasy cz. 4

Programowanie w C Typ wskaźnikowy do typu znakowego i operacje na łańcuchach

Transkrypt:

Tablice wielowymiarowe Przykład tablica 2-wymiarowa Tak naprawdę nie istnieją w C! Tak naprawdę C i Java dopuszczają tworzenie tablic tablic tablica 2-wymiarowa = tablica (zwykłych) tablic tablica 3-wymiarowa = tablica tablic wymiaru 2 tablica (n+1)-wymiarowa = tablica tablic wymiaru n Każdy wymiar oznaczamy parą nawiasów ([]( []) int a[][][]; 3-wymiarowa tablica liczb całkowitych Inicjalizując używamy zagnieżdżonych list wartości Inicjalizując używamy Rozważmy tablicę o rozmiarze 3x2 1 2 4 6 C pamięta ją w sposób liniowy: 1 2 3 4 5 6 Kompilator zinterpretuje ją jako 3-elementową tablicę tablic 2-elementowych 3 1 2 3 4 5 6 a[1][0] 5 156 157 Przykład /* wypisz.c */ Przykład 3-wymiarowy Program na następnym slajdzie tworzy i przegląda następującą tablicę 3-wymiarową Program na następnym slajdzie tworzy i przegląda int a[][2] = {{1,2, {3,4, {5,6; int i,j; for (i = 0; i < 3; ++i) { printf("* "); for (j = 0; j < 2; ++j) printf("%d ", a[i][j]); putchar('*'); putchar('\n'); * 1 2 ** 3 4 ** 5 6 * a[0] == a[1] == 1 3 5 2 4 6 7 8 9 0 1 2 158 159

Przykład 3D c.d. /* wypisz3d.c */ int a[][3][2] = {{{1,2, {3,4, {5,6, {{7,8, {9,0, {1,2; int i, j, k; for (i = 0; i < 2; ++i) { printf("* "); for (j = 0; j < 3; ++j) { for (k = 0; k <2; ++k) printf("%d ", a[i][j][k]); putchar('*'); putchar('\n'); * 1 2 *3 4 *5 6 ** 7 8 *9 0 *1 2 * 160 Napisy to Napisy łańcuchy znaków Napisy to tablice znaków W języku Java występuje osobny typ/klasa String o większych możliwościach W języku Java występuje osobny typ/klasa String Ostatnim elementem w tablicy reprezentującej napis jest zawsze znak o kodzie 0 null null Ostatnim elementem w tablicy reprezentującej napis Literały napisowe automatycznie uzupełniają napis o terminator w postaci znaku null "Ahoj!" 'A' 'h' 'o' 'j' '!' '\0' 161 Napisy przykład Nagłówek <string.h> /* napisy.c */ #include <string.h> char imie[] = {'R', 'o', 'm', 'a', 'n', '\0'; char nazw[] = "Nowakowski"; printf("imię: %s\n", imie); printf("nazwisko: %s\n", nazw); printf("imię ma: %d znaków\n", strlen(imie)); printf("nazwisko ma: %d znaków\n", strlen(nazw)); Imię: Roman Nazwisko: Nowakowski Imię ma: 5 znaków Nazwisko ma: 10 znaków 162 Zawiera dwie grupy funkcji pozwalające na analizowanie i manipulowanie ciągami znaków funkcje o nazwach str wykonujące operacje na pamięci w bardziej ogólny sposób funkcje o nazwach mem Dostępne grupy operacji kopiowanie i łączenie: strcpy, strcat, memcpy,, porównywanie strcmp, memcmp,, wyszukiwanie strchr, memchr, strrchr, strstr, strtok,, inne: np. strlen, strerror,, 163

Formatowane przetwarzanie napisów /* ilustracja funkcji sprintf/sscanf */ int n = 1; float x = 2.0; char s[] = "ahoj"; char lancuch[bufsiz]; sprintf(lancuch,"%d %f A%s!", n+1, x+2, s+1); puts(lancuch); sscanf(lancuch,"%d %f %s", &n, &x, s); printf("n: %d, x: %f, s: %s\n", n, x, s); 2 4.000000 Ahoj! n: 2, x: 4.000000, s: Ahoj! Formatowane przetwarzanie napisów /* ilustracja funkcji sprintf/sscanf */ int n = 1; Błąd chociaż zadziałało! float x = 2.0; char s[] = "ahoj"; char lancuch[bufsiz]; sprintf(lancuch,"%d %f A%s!", n+1, x+2, s+1); puts(lancuch); sscanf(lancuch,"%d %f %s", &n, &x, s); printf("n: %d, x: %f, s: %s\n", n, x, s); 2 4.000000 Ahoj! n: 2, x: 4.000000, s: Ahoj! 164 165 Tablice mają statyczny rozmiar /* ilustracja funkcji sprintf/sscanf */ int n = 1; 'a' 'h' 'o' 'j' '\0' float x = 2.0; char s[] = "ahoj"; s[5]='x'; char lancuch[bufsiz]; printf("%db, %x, %x\n",sizeof(s),s[4],s[5]); sprintf(lancuch,"%d %f A%s!", n+1, x+2, s+1); sscanf(lancuch,"%d %f %s", &n, &x, s); printf("%db, %x, %x\n",sizeof(s),s[4],s[5]); 'A' 'h' 'o' 'j' '!' '\0' 5B, 0, 58 5B, 21, 0 Struktura Struktury w ANSI C uporządkowany zbiór zmiennych składowych składowych składowe mogą mieć różne typy Do definiowania służy słowo kluczowe struct Do odwoływania się do składowych struktury służy operator. Do odwoływania się do składowych struktury służy Struktury to punkt wyjścia dla pojęcia obiektu składowe to atrybuty obiektu 166 167

Struktury przykład #include <string.h> struct Towar { char nazwa[20]; float cena; ; // Średnik jest tu niezbędny!!! struct Towar t1 = {"Rower", 799.99; struct Towar t2; t2 = t1; t2.cena += 200.0; strcat(t2.nazwa, " Wagant"); printf("%s: %f.2\n", t1.nazwa, t1.cena); printf("%s: %f.2\n", t2.nazwa, t2.cena); Struktury przykład 2 #include <string.h> #define MAX 10 struct Towar { char nazwa[20]; float cena; ; struct Oferta { struct Towar lista[max]; int liczba; ; Rower: 799.99 zł Rower Wagant: 999.99 zł 168 169 Struktury przykład 2 c.d. struct Oferta mo; int i; mo.liczba = 0; /* wstaw pierwszy towar */ strcpy(mo.lista[mo.liczba].nazwa, "Rower"); mo.lista[mo.liczba++].cena = 799.99; /* wstaw drugi towar */ strcpy(mo.lista[mo.liczba].nazwa, "Torba"); mo.lista[mo.liczba++].cena = 29.99; /* wydrukuj listę towarów */ for (i = 0; i < mo.liczba; ++i) printf("%s: %.2f\n", mo.lista[i].nazwa, mo.lista[i].cena); Rower: 799.99 Torba: 29.99 170 Łańcuchy i przypisanie Język C dopuszcza inicjalizację char a[] = "Ahoj przygodo!"; W sytuacji char a[14]; a = "Ahoj przygodo!"; kompilator sygnalizuje błąd.. Dlaczego? Łańcuchy znaków to tablice, a język C nie dopuszcza bezpośredniego przypisywania wartości tablicowych. Należy w takiej sytuacji użyć funkcji strcpy char a[14]; strcpy(a, "Ahoj przygodo!"); 171

Złożone typy danych podsumowanie ANSI C funkcje Deklaracja/inicjalizacja tablicy ustala jednolity typ wszystkich jej elementów oraz niezmienny rozmiar Deklaracja/inicjalizacja tablicy ustala Indeksowanie tablic rozpoczyna się od zera Tablice wielowymiarowe to tablice tablic Napisy (łańcuchy) to tablice znaków; koniec łańcucha wyznacza znak null (o kodzie 0) Do tablic nie można stosować operatora przypisania Struktury pozwalają na łączenie danych różnych typów w całość Do struktur można stosować operator przypisania Struktury i tablice mogą być inicjalizowane za pomocą list elementów ujętych w nawiasy klamrowe Wprowadzenie programowanie proceduralne argumenty i wynik funkcji prototypy funkcji zasięg zmienne automatyczne, statyczne i globalne 172 173 Funkcje w ANSI C wprowadzenie Przykład Rola funkcji pomagają podzielić kod programu na mniejsze, logicznie wydzielone zadania ukrywają szczegóły pewnych operacji tam, gdzie ich znajomość nie jest niezbędna zwiększają przejrzystość kodu programu i ułatwiają wprowadzanie w nim zmian Funkcja podstawowe cechy posiada unikatową nazwę składa się z ciągu instrukcji implementującego dobrze określoną operację/zadanie może być zależna od argumentów i zwracać wynik /* Prosty przykład wykorzystania funkcji */ float avg(int n, int m) { return (n + m) / 2.0; int x,y; printf("podaj pierwszą liczbę: "); scanf("%d", &x); printf("podaj drugą liczbę: "); scanf("%d", &y); printf("średnia: %.2f\n", avg(x,y)); 174 175

Definicja funkcji postać ogólna typ_wyniku nazwa ( lista_parametrów ) { deklaracje instrukcje Lista parametrów jest listą par postaci typ nazwa_parametru oddzielonych przecinkami Jeśli funkcja ma zwracać pewną wartość, to musi ona być zgodna z zadeklarowanym typem_wyniku Uwagi Parametry funkcji pełnią rolę zmiennych lokalnych w kodzie funkcji Parametry funkcji pełnią rolę zmiennych lokalnych Wartość parametrów ustalana jest w momencie wywołania funkcji Wartość parametrów ustalana jest w momencie Do zwracania wyniku funkcji służy instrukcja postaci: return wyrażenie; Do zwracania wyniku funkcji służy instrukcja wyrażenie może być ujęte w nawiasy jeśli funkcja nie ma zwracać wyniku, to aby przekazać sterowanie z powrotem do programu wywołującego można użyć pustego wyrażenia, tzn. instrukcji return ; jeśli w funkcji nie występuje instrukcja return,, to sterowanie wraca do programu wywołującego po napotkaniu zamykającego nawiasu 176 177 Słowo kluczowe void Funkcja main,, ANSI C i void Użyte jako typ wyniku funkcji wskazuje, że funkcja nie zwraca żadnej wartości void f(int x, float y) { Użyte w miejscu listy parametrów funkcji mówi, że funkcja nie akceptuje żadnych argumentów void komunikat(void) { puts("witaj w "); komunikat(); 178 W tradycyjnym C można było napisać: main() { W języku ANSI C powyższe należy zamienić na: int main(void) { ANSI C dopuszcza jeszcze inny formę main: int main(int argc, char *argv[]) { 179