Laboratorium 5: Tablice. Wyszukiwanie binarne

Podobne dokumenty
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

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

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

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

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

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

W języku C/C++ pomiędzy wskaźnikami a tablicami istnieje bardzo ścisły związek. Do onumerowania elementów w tablicy służą tzw. INDEKSY.

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

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

Wskaźniki. Informatyka

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

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

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

1 Podstawy c++ w pigułce.

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

Warsztaty dla nauczycieli

Laboratorium 10: Maszyna stanów

Wstęp do Programowania, laboratorium 02

Tablice, funkcje - wprowadzenie

Wykład 1: Wskaźniki i zmienne dynamiczne

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

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

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

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

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

IX. Wskaźniki.(3 godz.)

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

Podstawy Programowania

Lab 9 Podstawy Programowania

Programowanie - wykład 4

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

Wykład 4. Tablice. Pliki

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wskaźniki w C. Anna Gogolińska

Pytania sprawdzające wiedzę z programowania C++

Argumenty wywołania programu, operacje na plikach

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

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

Algorytm selekcji Hoare a. Łukasz Miemus

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

Język ludzki kod maszynowy

Szablony funkcji i klas (templates)

EGZAMIN MATURALNY 2011 INFORMATYKA

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

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

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

Część 4 życie programu

*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)

Programowanie w C Wartości pseudolosowe i pomiar czasu

Informatyka I: Instrukcja 4.2

Zmienne i struktury dynamiczne

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

XV. Wskaźniki Odczytywanie adresu pamięci istniejących zmiennych Wskaźniki pierwsze spojrzenie.

Język C, tablice i funkcje (laboratorium)

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

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

1 Powtórzenie wiadomości

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Laboratorium nr 10. Temat: Funkcje cz.2.

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

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

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

5. Rozwiązywanie układów równań liniowych

Algorytmy i język C++

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

1 Wskaźniki i listy jednokierunkowe

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Podstawy Programowania C++

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

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

Aplikacje w środowisku Java

Język C zajęcia nr 11. Funkcje

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

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

Wykład 5: Klasy cz. 3

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

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

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie)

1 Podstawy c++ w pigułce.

Rekurencja (rekursja)

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

x szereg(x)

5 Przygotował: mgr inż. Maciej Lasota

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

lekcja 8a Gry komputerowe MasterMind

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

Wykład 8: klasy cz. 4

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

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.

Akademia ETI Marcin Jurkiewicz

tablica: dane_liczbowe

Transkrypt:

Wojciech Myszka Laboratorium 5: Tablice. Wyszukiwanie binarne 2016-05-07 09:02:17 +0200 1. Tablice Do tej pory nie było potrzeby odwoływać się do zmiennych złożonych. Programy były bardzo proste i korzystały z niewielkiej liczby zmiennych prostych. Dziś pierwszy raz potrzebować będziemy tablic. Tablice w języku C to też zmienne, tylko złożone (to znaczy mogą służyć do przechowywania więcej niż jednej wartości). Wszystkie przechowywane wartości muszą być tego samego typu. 1.1. Deklaracja tablicy Tablice, podobnie jak wszystkie zmienne, muszą być deklarowane przed pierwszym użyciem (również inne ograniczenia, na przykład, co do nazwy są identyczne). Deklaracja wygląda tak: typ nazwa [ rozmiar ] ; gdzie typ to dowolny ze zdefiniowanych w języku C typów zmiennych (char, int, ), a rozmiar to długość tablicy (czyli, najczęściej, stała) wartość mówiąca ile elementarnych (prostych) danych określonego typu tablica jest w stanie przechować. Zatem int a [ 1 0 ] ; to tablica o dziesięciu elementach typu int nazywająca się a. Aby uzyskać dostęp do elementu numer k tablicy a używamy zapisu a[k] (co jest odpowiednikiem matematycznego zapisu a k ). Numer elementu k nazywany jest indeksem tablicy. Indeks musi być stałą, zmienną lub wyrażeniem typu całkowitego. Wpisanie wartości do tablicy: a [ 3 ] = 5 ; 1

Wybranie elementu tabicy: k = 3 ; u = a [ k ] ; Dziesięcioelementowa tablica ma elementy ponumerowane indeksami o wartościach 0, 1,, 9. Nie ma możliwości tworzenia tablic o zadanych granicach indeksów (jak, na przykład, w języku Pascal). Schematycznie przedstawia to rysunek 1. 0 1 2 3 4 5 6 7 8 9 Rysunek 1. Schematyczny obraz tablicy o 10 elementach: dziesięć pudełeczek ponumerowanych liczbami od 0 do 9 Język C zupełnie nie przejmuje się czy programista dba o to aby używany indeks tablicy mieścił się w jej granicach. I całą odpowiedzialność za złe działanie programu gdy, ewentualnie, indeksy przekraczają granice tablicy spada na programistę. Przekonać się o tym można uruchamiając poniższy program: Listing 1. Program generujący błąd przekroczenia dostępnej pamięci #include <s t d i o. h> int main ( int argc, char argv ) { int a [ 1 0 ] ; int i = 0 ; while ( ++i > 0 ) { a [ i ] = 0 ; p r i n t f ( "a[%d ] = %d\n", i, a [ i ] ) ; } return 0 ; } Błąd programu polega na niewłaściwym warunku while ( ++i > 0 ): nie ogranicza on w żaden sposób zakresu indeksów. Komunikat, który pojawia się na zakończenie działania programu: Segmentation f a u l t 2

oznacza, że program przekroczył przyznany obszar (segment) pamięci. I to system operacyjny dba, żeby działania programu nie miały wpływ na inne programy. A próba zerowania pamięci poza obszarem działania programu mogłaby mieć wpływ na inne programy znajdujące się w pamięci operacyjnej komputera. Stąd interwencja systemu operacyjnego, który w trybie awaryjnym zatrzymuje program. 1.2. Nadawanie wartości tablicy (inicjalizacja) Deklarując tablicę nie można mieć pewności, jakie wartości zostaną nadane poszczególnym jej komórkom. Stąd, podobnie jak zwykłe zmienne, tablice mogą być inicjalizowane podczas deklarowania: int a [ 1 0 ] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; Powyższa instrukcja deklaruje tablicę o nazwie a i w kolejnych jej komórkach wpisuje wartości: 1 do a[0], 2 do a[1], itd. Wartosci na liście może być mniej niż elementów tablicy int a [ 1 0 ] = {1, 2, 3, } ; wówczas kolejne komórki przyjmą wartość zero. Na liście nie można podać więcej wartości niż jest elementów tablicy. Dopuszczalna jest jeszcze jedna forma deklaracji tablicy, bez podawania explicite jej długości: int a [ ] = {1, 2, 3, 4, } ; W ty przypadku zadeklarowana zostanie tablica o czterech elementach i zostanie wypełniona kolejnymi wartościami startując od jedynki. Polecenie sizeof() potrafi podać ilość pamięci jaką zajmuje obiekt. Więc sizeof( a ) poda liczbę bajtów, które zajmuje tablica a. Każdy element tablicy a jest typu int i zajmuje sizeof( int ) bajtów. Pozwala to wyliczyć liczbę elementów tablicy: int a [ ] = {1, 2, 3, 4, } ; int N; N = sizeof ( a ) / sizeof ( int ) ; 1.3. Tablica jako parametr funkcji Tablica może być parametrem funkcji. Tablica (raczej) nie może być wynikiem funkcji. Przekazując tablicę do funkcji pamiętac należy również o przekazaniu jako kolejnego parametru jej długości. Poniżej deklaracje dwu funkcji srednia1, srednia2 zawierające dwa możliwe warianty. 3

double s r e d n i a 1 ( int N, double t [N ] ) ; double s r e d n i a 2 ( int N, double t [ ] ) ; Nie różnią się one niczym (z formalnego punktu widzenia). Użycie tych funkcji jest następujące: int M = 1 0 ; double dane [M] ; double s ; s = s r e d n i a 1 (M, dane ) ; s = s r e d n i a 2 (M, dane ) ; Do programisty należy zadbanie o to, żeby parametry aktualne (prametry wywołania funkcji) były odpowiedniego typu. 2. Wyszukiwanie binarne Mamy tablicę zawierającą ułożone w kolejności malejącej 1 liczby (przyjmijmy, dla skupienia uwagi całkowite). Należy stworzyć algorytm, stosując metodę wyszukiwania binarnego 2, sprawdzający czy zadana liczba X znajduje się w tablicy. Jeżeli tak algorytm zwraca numer pozycji, na której znajduje się liczba. Ogólny schemat blokowy algorytmu znaleźć można wśród slajdów wykładu Technologie Informacyjne Złożoność obliczeniowa. Trudne zadania. (slajd 33 i następne). Działanie algorytmu będzie mniej-więcej takie (D to nazwa tablicy z danymi): 1. Pierwszy element ma indeks 0, zatem A 0. 2. Jeżeli tablica ma N elementów to ostatni element ma numer N 1, czyli B N 1. 3. Środkowy 3 element tablicy to C = A+B. 2 4. Jeżeli X < D[C] wówczas dalsze poszukiwania prowadzić trzeba w pierwszej (dolnej) połówce tablicy, gdy X > D[C] to w górnej. Gdy uda nam się trafić to mieliśmy szczęście. 1 Metoda działa tylko wtedy, gdy dane są ułożone w kolejności: rosnącej lub malejącej. 2 Analogiczną do metody połowienia z poprzednich zajęć. 3 Cudzysłów jest niezbędny, gdyż dzielenie odbywa się w sposób całkowitoliczbowy, więc nie zawsze będzie dzieleniem na pół! 4

5. Teraz trzeba tylko odpowiednio zmodyfikować A i B (podobnie jak w poprzednim laboratorium). Całą trudność algorytmu polega na tym, że w dziedzinie liczb całkowitych trudno w ten sposób przejrzeć wszystkie wartości tablicy. Przedział [A, C] nie chce robić się krótszy i krótszy. Co gorsza, sporo algorytmów dostępnych w internecie nie uwzględnia tego faktu 3. Zadania do wykonania Po zaprogramowaniu algorytmu należy go bardzo dokładnie sprawdzić wybierając liczby z zakresu danych w tabeli (znajdujące się w tabeli i nie występujące w tabeli), spoza tego zakresu. Algorytm powinien działać dla tabeli o długości jeden element, dwa elementy, więcej 4. Wersja PDF tego dokumentu pod adresem. Wersja: 50 z drobnymi modyfikacjami! data ostatniej modyfikacji 2016-05-07 09:02:17 +0200 5