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

Podobne dokumenty
int tab1[30]; // 30-elementowa tablica elementów typu int char tekst[10]; // 10-elementowa tablica elementów typu char (tablica tekstowa)

Algorytmy sortowania w języku C. Autor: mgr inż. Sławomir Samolej. Zagadnienie 1. (Sortowanie)

Argumenty wywołania programu, operacje na plikach

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

Programowanie systemów czasu rzeczywistego laboratorium. Ćwiczenie 1

Programowanie strukturalne język C

Struktury Struktura polami struct struct struct struct

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

Lab 9 Podstawy Programowania

Programowanie strukturalne język C

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

Część 4 życie programu

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

Stałe, tablice dynamiczne i wielowymiarowe

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

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

Język C, tablice i funkcje (laboratorium)

1 Podstawy c++ w pigułce.

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

Podstawy Programowania C++

Programowanie 3 - Funkcje, pliki i klasy

2 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

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

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

C-struktury wykład. Dorota Pylak

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

6 Przygotował: mgr inż. Maciej Lasota

do instrukcja while(wyrażenie);

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

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

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

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

Zmienne i struktury dynamiczne

IX. Wskaźniki.(3 godz.)

tablica: dane_liczbowe

Język C zajęcia nr 11. Funkcje

*W uproszczeniu: jest dziewięciu sędziów przyznających po dwie noty: za wartość techniczną i artystyczną (skala od 0.0 do 6.0)

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

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

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.

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

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

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

3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania:

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

while(wyrażenie) instrukcja

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

1 Podstawy c++ w pigułce.

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

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

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

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

Egzamin z Podstaw informatyki i programowania 2007/2008

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

C-struktury wykład. Dorota Pylak

Programowanie obiektowe W3

Język ludzki kod maszynowy

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Programowanie w języku Java

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Przeciążanie funkcji. Przykład 1: #include <iostream> using namespace std; double srednia(double n1, double n2) { return ((n1 + n2)/2.

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

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

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

Język C++ zajęcia nr 2

Ćwiczenie 1. Wprowadzenie do programu Octave

Wykład 4: Klasy i Metody

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

I - Microsoft Visual Studio C++

Aplikacje w środowisku Java

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

Deklaracja struktury w C++

Programowanie obiektowe 2005/2006. Laboratorium 1. Przeciążanie funkcji

Podstawy programowania

Funkcja (podprogram) void

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

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

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

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

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

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

Przetwarzanie sygnałów

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

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

Programowanie strukturalne i obiektowe. Funkcje

Rekurencja (rekursja)

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

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

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

Programowanie Proceduralne

Proste algorytmy w języku C

Zmienne, stałe i operatory

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

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

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 wielowymiarowe. Przykład tablica 2-wymiarowa. Przykład. Przykład 3-wymiarowy. Tak naprawdę nie istnieją w C! Rozważmy tablicę o rozmiarze 3x2

Wstęp do informatyki- wykład 11 Funkcje

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

Transkrypt:

emat zajęć: ablice wielowymiarowe i struktury w języku C Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (ablice liczbowe wielowymiarowe) ablicę 2-wymiarową można przedstawić jako pewien zestaw tablic 1-wymiarowych np.: float tab1[3][4]; tab1 można interpretować jako tablicę 3-elementową złożoną z tablic 4-elementowych. ablicę 3-wymiarową można traktować jako zestaw tablic 2-wymiarowych itd. W przypadku tablicy 2-wymiarowej indeksy można traktować jako numer wiersza i numer kolumny. Dostęp do elementów tablicy uzyskuje się najprościej przez podanie odpowiedniego zestawu indeksów np.: int a[3][2]= 2,3, 4,8, 1,4 ; int c; a[0][0]=0; // elementowi o indeksie (0,0) nadaj wartość 0; c=a[0][1]; // zmiennej c przypisz zawartość elementu tablicy a o indeksach (0,1)

Zadania: Zadanie 1 Dany jest program: #include <stdio.h> #define LW 3 #define LK 4 int tab[lw][lk]= 23,45,33,15, 1,-23,32,2, -22,-24,56,5 ; int max(int t[][lk], int l_wierszy, int l_kolumn); void main(void) int i,j; int max_el; printf("analizowana tablica:\n"); for(i=0;i<lw;i++) for(j=0;j<lk;j++) printf("%6d",tab[i][j]); putchar('\n'); max_el=max(tab,lw,lk); printf("ajwiekszy element analizowanej tablicy: %d\n",max_el); int max(int t[][lk], int l_wierszy, int l_kolumn) int m_el; return m_el; Uzupełnić funkcję max w taki sposób, aby przeszukała ona tablicę dwuwymiarową t o wymiarach l_wierszy, l_kolumn, znalazła największy element tej tablicy, a następnie zwróciła go. Proponowany algorytm działania funkcji:

SAR t,l_wierszy, l_kolumn max_el=t[0][0] i=0 i<l_wierszy max_el j=0 SOP j<l_kolumn i++ t[i][j]>max_el max_el=t[i][j] j++

Zadanie 2 Dany jest program: #include <stdio.h> int A[3][4]= 1,2,3,4, ; int B[4][2]= 1,2, ; int C[3][2]; 5,6,7,8, 9,10,11,12 3,4, 5,6, 7,8 void iloczynab(int A[3][4],int B[4][2], int C[3][2], int m, int n, int p); void main(void) int i,j; printf("ablica A:\n"); for(i=0;i<3;i++) for(j=0;j<4;j++) printf("%6d",a[i][j]); putchar('\n'); printf("ablica B:\n"); for(i=0;i<4;i++) for(j=0;j<2;j++) printf("%6d",b[i][j]); putchar('\n'); iloczynab(a,b,c,3,4,2); printf("wynik mnozenia A*B:\n"); for(i=0;i<3;i++) for(j=0;j<2;j++) printf("%6d",c[i][j]); putchar('\n');

void iloczynab(int A[3][4],int B[4][2], int C[3][2], int m, int n, int p) apisać funkcję iloczynab, która oblicza iloczyn macierzy A(m,n) i B(n,p) i wynik mnożenia zapisuje w macierzy C(m,p). Litery m,n,p oznaczają odpowiednie wymiary macierzy. Iloczyn macierzy oblicza się zgodnie z zależnością: C i, k gdzie : n 1 = = j 0 a i, j b j, k i = 0,1,2,..., m 1; j = 0,1,2,..., p 1; Schemat blokowy obliczania iloczynu macierzy może wyglądać następująco: SAR i=0 i<m SOP k=0 k<p i++ suma=0 j=0 j<n C[i][k]=suma k++ suma=suma+a[i][j]*b[j][k] j++

Zagadnienie 2. (Struktury) Struktura jest obiektem złożonym z jednej lub kilku zmiennych, być może różnych typów. Struktury można deklarować w następujący sposób: a) przez zastosowanie słowa kluczowego struct : struct point // deklaracja struktury ; int x; int y; struct point pt; // utworzenie obiektu typu struct point b) przez zastosowanie słowa struct i metody definiowania nowych typów danych przy pomocy słowa kluczowego typedef : typedef struct point int x; int y; PUK; PUK pt; // deklaracja struktury // utworzenie obiektu typu PUK Elementom struktury można przypisać początkowe wartości w momencie inicjalizacji: struct point int x; int y; ; struct point pt=10,20; // deklaracja struktury // utworzenie i inicjalizacja obiektu typu struct point Poza inicjalizacją do pól struktury można odwołać się przy pomocy operatora. : struct point // deklaracja struktury int x; int y; ; struct point pt; pt.x=10; pt.y=20; // utworzenie obiektu typu struct point // nadanie wartości 10 polu x struktury pt.

Dopuszczalne jest zagnieżdżanie struktur, np.: struct point int x; int y; struct rectstruct point pt1; struct point pt2; Aby uzyskać dostęp do odpowiednich pól danych należy posłużyć się kilkakrotnie operatorem. : struct point int x; int y; struct rectstruct point pt1; struct point pt2; struct rect screen; screen.pt1.x=5; Można zdefiniować wskaźnik na strukturę i przy jego pomocy odwoływać się do elementów struktury: struct point int x; int y; struct point *point_ptr; struct point p1; int a,b; point_ptr=&p1; point_ptr->x=12; b= p1.y; a= point_ptr->y; // definicja struktury // definicja wskaźnika // utworzenie obiektu typu struct point // przypisanie wskaźnikowi point_ptr adresu struktury p1 // zastosowanie operatora -> do uzyskania dostępu do pola // struktury W języku C dopuszczalne jest tworzenie funkcji działających w następujący sposób na strukturach: a) funkcja może zwracać strukturę w całości np.: struct point makepoint(int x, int y); b) struktura może być argumentem wywołania funkcji: struct point addpoint(struct point p1, struct point p2); c) argumentem wywołania funkcji może być wskaźnik na strukturę: struct point addpoint(struct point *p1_ptr, struct point *p2_ptr);

Możliwe jest tworzenie tablic struktur: struct klucz char litera; int licznik; ; struct klucz statystyka[]= a,0, b,0, c,0 ; Zadania: Zadanie 3 Dany jest program: #include <stdio.h> struct s_punktchar c; int x, y;; void wyswietl1(struct s_punkt punkt); void wyswietl2(struct s_punkt *ptr); void main(void) struct s_punkt p1; p1.c='a'; p1.x=10; p1.y=20; wyswietl1(p1); wyswietl2(&p1); void wyswietl1(struct s_punkt punkt) void wyswietl2(struct s_punkt *ptr) Uzupełnić zawartość funkcji wyswietl1 i wyswietl2 w taki sposób, aby wypisywały one na ekranie zawartość struktury do nich przekazanej. Zadanie 4 Uzupełnić wcześniejszy program o funkcję o prototypie: void init(struct s_punkt *ptr, char c, int x, int y);

która wypełnia pola struktury typu struct s_punkt wartościami przekazanymi odpowiednio w parametrach c, x, y. Przykładowo: struct s_punkt p2= x,23,45; init(&p2, z, 10, 10); // deklaracja i inicjalizacja pewnej struktury // wywołanie funkcji init // po wykonaniu funkcji struktura p2 powinna być postaci: // z,10,10 Zadanie 5 Uzupełnić wcześniejszy program o funkcję o prototypie: struct s_punkt sym(struct s_punkt *ptr); która pobiera dane od struktury typu s_punkt i zwraca strukturę typu s_punkt, ale współrzędne zwracanego punktu są przeciwne do współrzędnych punktu wejściowego. Przykładowo: struct s_punkt p2; struct s_punkt p3; init(&p2, x,23,-45); p3=sym(&p2); 23,45; // deklaracja i inicjalizacja pewnej struktury // wywołanie funkcji init // zawartość struktury p3 powinna wynosić: x,- Zadanie 6 Podczas łamania szyfrów, częstym zabiegiem jest dokonanie analizy częstotliwości występowania poszczególnych liter w tekście. Do zapamiętania ilości występowania liter może posłużyć tablica struktur zaproponowana poniżej (pierwsze pole struktury to kod znaku, drugie ilość wystąpień w tekście): struct kluczchar litera; int licznik;; struct klucz statystyka[]= 'a',0, 'b',0, 'c',0, 'd',0, 'e',0, 'f',0, 'g',0, 'h',0, 'i',0,

; 'j',0, 'k',0, 'l',0, 'm',0, 'n',0, 'o',0, 'p',0, 'r',0, 's',0, 't',0, 'u',0, 'w',0, 'x',0, 'y',0, 'z',0, Zadanie polega na napisaniu programu, który dokona analizy jednej linii tekstu pod względem częstotliwości występowania poszczególnych liter. Ilość wystąpień poszczególnych liter powinna być zapisana w tablicy struktur statystyka. W przyszłości program będzie zastosowany do analizy całych plików tekstowych. Program wypisujący zawartość struktury może mieć postać: #include <stdio.h> struct kluczchar litera; int licznik;; struct klucz statystyka[]= 'a',0, 'b',0, 'c',0, 'd',0, 'e',0, 'f',0, 'g',0, 'h',0, 'i',0, 'j',0, 'k',0, 'l',0, 'm',0, 'n',0, 'o',0, 'p',0, 'r',0, 's',0, 't',0,

; 'u',0, 'w',0, 'x',0, 'y',0, 'z',0, void main(void) int i; for(i=0;i<24;i++) printf("%4c,%5d\n",statystyka[i].litera, statystyka[i].licznik);