Wstęp do programowania. Dariusz Wardecki, wyk. V

Podobne dokumenty
Wstęp do programowania, część II

Programowanie. Dariusz Wardecki, wyk. II. wtorek, 26 lutego 13

Wstęp do programowania. Dariusz Wardecki, wyk. I

Wstęp do programowania. Dariusz Wardecki, wyk. III

Wstęp do programowania. Dariusz Wardecki, wyk. VI

Programowanie komputerowe. Zajęcia 4

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Wstęp do programowania. Dariusz Wardecki, wyk. X

Pracownia komputerowa. Dariusz Wardecki, wyk. VIII

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

Wstęp do programowania

DYNAMICZNE PRZYDZIELANIE PAMIECI

Wstęp do programowania

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

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

Wybrane algorytmy tablicowe

Podstawy Programowania Podstawowa składnia języka C++

Pętla for. Wynik działania programu:

Zajęcia 4 procedury i funkcje

Analiza algorytmów zadania podstawowe

Algorytmy i struktury danych. wykład 1

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

Pracownia komputerowa. Dariusz Wardecki, wyk. V

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

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

Pracownia komputerowa. Dariusz Wardecki, wyk. VI

Programowanie w VB Proste algorytmy sortowania

Liczby całkowite i rzeczywiste

im = (P )={b 2 R : 9a 2 P [b = (a)]} nazywamy obrazem homomorfizmu.

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

E S - uniwersum struktury stosu

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

Algorytm selekcji Hoare a. Łukasz Miemus

Programowanie Proceduralne

Pracownia komputerowa. Dariusz Wardecki, wyk. IV

Wstęp do programowania

Pracownia komputerowa. Dariusz Wardecki, wyk. V

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

tablica: dane_liczbowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

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

Algorytmy. 1. Sortowanie 2. Statki i okręty. programowanie cz.7. poniedziałek, 2 marca 2009

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

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

h pg fq ph gq f. IdentycznoúÊ:: dla kaødego obiektu B P C istnieje morfizm B 1 B

Java Podstawy. Michał Bereta

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Poszukiwanie liniowe wśród liczb naturalnych

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Różności w C++ Marek Pudełko

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

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

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

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

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

Podstawy programowania w języku C i C++

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

Wykład 6. Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym

Szablony funkcji i szablony klas

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

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

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

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

Typ użyty w deklaracji zmiennej decyduje o rodzaju informacji, a nazwa zmiennej symbolicznie opisuje wartość.

Zadeklarowanie tablicy przypomina analogiczną operację dla zwykłych (skalarnych) zmiennych. Może zatem wyglądać na przykład tak:

Wstęp do programowania

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Wstęp do programowania

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Język C zajęcia nr 11. Funkcje

Wrocław, Wstęp do informatyki i programowania: liczby pierwsze. Wydział Matematyki Politechniki Wrocławskiej.

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.

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Programowanie i struktury danych

Informatyka A. Algorytmy

do instrukcja while (wyrażenie);

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Wstęp do programowania, część I

C++ wprowadzanie zmiennych

Program 14. #include <iostream> #include <ctime> using namespace std;

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

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

Laboratorium nr 7 Sortowanie

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

EGZAMIN MATURALNY Z INFORMATYKI. 10 maja 2017 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I

O podstawowych operacjach na tablicach. Mateusz Ziółkowski, MBiU II

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Wstęp do programowania

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

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

Algorytmy i Struktury Danych, 2. ćwiczenia

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Języki programowania - podstawy

Podstawy programowania w języku C++

Transkrypt:

Wstęp do programowania Dariusz Wardecki, wyk. V

Tablica (ang. array) Zestaw N zmiennych tego samego typu numerowanych liczbami w zakresie od 0 do (N 1). Element tablicy Zmienna wchodzπca w sk ad tablicy, majπca przypisanπ okreúlonπ liczbí, która jπ identyfikuje. Indeks (ang. index) elmentu tablicy Liczba identyfikujπca element tablicy. D ugoúê tablicy Liczba elementów tablicy (N).

Rozmieszczenie elementów tablicy w pamięci W C++ zak ada sií, øe elementy tablicy bídπ zawsze rozmieszczane w pamiíci jeden obok drugiego, zgodnie z kolejnoúciπ indeksów (tzn. element o najmniejszym indeksie bídzie znajdowa sií w pamiíci w lokacji o najniøszym adresie). Nazwa tablicy Jest wykorzystywana do identyfikowania tablicy oraz wszystkich jej elementów. W programie reprezentuje adres tablicy, czyli adres jej pierwszego elementu. a[j] Element tablicy o nazwie a, któremu odpowiada indeks j (w ogólnoúci j moøe byê sta π lub dowolnie skomplikowanym wyraøeniem).

Deklaracja i definicja tablicy Deklaracja tablicy Okreúlenie typu danych dla elementów tablicy, nazwy oraz (nie obowiπzkowo) liczby elementów w nawiasie kwadratowym, np. int tab[100]; int liczby[]; Definicja tablicy Deklaracja tablicy, w której jest okreúlona liczba elementów. Po zdefiniowaniu tablicy kaødy jej element moøe byê wykorzystywany jako niezaleøna zmienna.

Przykład int tab[10];... for (int j = 0; j < 10; j++) tab[j] = 0; Uwaga! 1 Kompilator C++ nie sprawdza, czy uøywane w programach wartoúci indeksów tablic sπ w aúciwe. 2 Wartoúci te równieø nie sπ kontrolowane podczas wykonywania programu. 3 Ujemne wartoúci indeksów sπ dopuszczalne (oznaczajπ hipotetyczne elementy o adresach mniejszych od adresu pierwszego elementu).

Przykład dobrze sprawdzajπ sií w zastosowaniach, w których mamy do czynienia ze stosunkowo duøπ, ustalonπ liczbπ obiektów tego samego typu. Problem Wzbiorze(N + M + 1) wylosowanych liczb mamy znaleüê takπ, dlaktórej wtymzbiorzejestn liczb nie wiíkszych i M nie mniejszych od niej. Dla N = M jest to problem wyznaczania mediany ( úrodkowego elementu ) zbioru. Metoda poszukiwania rozwiπzania Ustawimy liczby w danym zbiorze w kolejnoúci rosnπcej i wybierzemy tí, która bídzie na pozycji (N + 1).

Algorytm sortowania tablicy 1 Zapisz kaødπ wylosowanπ liczbí winnymelemencietablicya[] o d ugoúci L = N + M + 1. 2 Powtarzaj dla indeksów i od 0 do (L 2): 1 Wyznacz indeks j taki, øe elementtablicyotymindeksiejest najmniejszy spoúród elementów o indeksach od i do (L 1) w πcznie. 2 ZamieÒ miejscami element o indeksie i zelementemoindeksiej. 3 Po zakoòczeniu powyøszych czynnoúci tablica jest posortowana. Wyznaczanie najmniejszego elementu (krok 2.1) 1 Niech j = i. 2 Powtarzaj dla indeksów k od (i + 1) do (L 1): Jeúli a[k] < a[j], toniechj = k. 3 j jest poszukiwanym indeksem.

Algorytm sortowania tablicy for (int i = 0; i < L-1; i++) { // Poszukiwanie indeksu j int j = i; for (int k = i + 1; k < L; k++) if (a[k] < a[j]) j = k; } // Zamiana miejscami a[i] z a[j] if (j > i) { double m = a[j]; a[j] = a[i]; a[i] = m; }

Algorytm sortowania tablicy Wype nianie tablicy W powyøszym kodzie üród owym pominiíto wype nianie tablicy: srandom(time(null)); for (int i = 0; i < L; i++) a[i] = 1.0 / (1.0 + random()); Funkcja random() generuje liczby pseudolosowe w zakresie od 0 do RAND_MAX. Do tablicy wstawiane sπ liczby pseudolosowe z przedzia u (0, 1]. Wynik obliczeò Po przeprowadzeniu sortowania tablicy wystarczy wydrukowaê a[n] jako wynik.

Sito Eratostenesa Poszukujemy liczb pierwszych nie wiíkszych od N Niech A = {2, 3,...,N} bídzie zbiorem liczb, natomiast k i m miejscami do przechowywania poúrednich wyników. 1 Niech k = 2. 2 Jeúli k 2 > N, zbiórazawieratylkoliczbypierwsze. 3 Usuwamy z A wszystkie wielokrotnoúci k, poczπwszy od k 2. 4 W m zapisz najmniejszπ liczbπ ze zbioru A wiíkszπ od k. 5 Niech k = m. 6 Przejdü do kroku 2. Zbiór A w powyøszym algorytmie moøna zastπpiê tablicπ.

Sito Eratostenesa Poszukujemy liczb pierwszych nie wiíkszych od N Niech a[] bídzie tablicπ o(n + 1) elementach typu bool. 1 Niech wszystkie elementy a[j] dla j > 1 majπ wartoúê true. 2 Niech k = 2 3 Wstaw false do wszystkich elementów a[j], dla których j jest wielokrotnoúciπ k, poczπwszy od k 2. 4 Powtarzaj: k = k + 1 Jeúli k 2 > N, przejdü do kroku 5. Jeúli a[k] ma wartoúê true, przejdü do kroku 3. 5 Wydrukuj indeksy j, dlaktórychelementya[j] majπ wartoúê true.

Sito Eratostenesa

Sito Eratostenesa - usprawnione W poprzednim programie nie wykorzystujemy elementów a[0] i a[1]. Poszukujemy liczb pierwszych nie wiíkszych od N Niech a[] bídzie tablicπ o(n 1) elementach typu bool. 1 Niech wszystkie elementy a[j] majπ wartoúê true. 2 Niech k = 2 3 Wstaw false do wszystkich elementów a[j], dla których(j + 2) jest wielokrotnoúciπ k, poczπwszy od k 2. 4 Powtarzaj: k = k + 1 Jeúli k 2 > N, przejdü do kroku 5. Jeúli a[k 2] ma wartoúê true, przejdü do kroku 3. 5 Wydrukuj liczby j, dlaktórychelementya[j 2] majπ wartoúê true.

Sito Eratostenesa - usprawnione bool a[n-1]; int j; for (j = 0; j < N-1; j++) a[j] = true; for (int k = 2; k*k <= N; k++) if (a[k-2]) { for (j = k*k - 2; j < N-1; j += k) a[j] = false; } for (j = 0; j < N-1; j++) if (a[j]) cout << (j + 2) << endl;

Sito Eratostenesa - z użyciem wzorów bitowych Poszukujemy liczb pierwszych nie wiíkszych od N Niech a[] bídzie tablicπ o (N + 6)/8 elementach typu unsigned char. 1 Niech wszystkie elementy a[j] majπ wartoúê 0 (wszystkie bity sπ zerami). 2 Niech k = 2 3 Wstaw 1 do wszystkich bitów w a[] odpowiadajπcych wielokrotnoúciom k, poczπwszy od k 2. 4 Powtarzaj: k = k + 1 Jeúli k 2 > N, przejdü do kroku 5. Jeúli bit w a[] odpowiadajπcy k jest zerem, przejdü do kroku 3. 5 Wydrukuj liczby j, dlaktórychodpowiadajπce im bity w a[] sπ zerami.

Sito Eratostenesa - z użyciem wzorów bitowych Obserwacja Wynik wyraøenia (N + 7)/8 jest równy wynikowi dzielenia N przez 8 z zaokrgleniem w górí. Poniewaø pierwszy bit w tablicy ma odpowiadaê liczbie 2, a kaødy element zawiera 8 bitów, liczba elementów a[] musi byê równa wynikowi dzielenia (N 1) przez 8 z zaokrπgleniem w górí. LiczbÍ elementów a[] moøna obliczyê tak: (N 1 + 7)/8 =(N + 6)/8

Sito Eratostenesa - z użyciem wzorów bitowych Bit w a[] odpowiadajπcy liczbie k 1 Pierwszy bit odpowiada liczbie 2. 2 Kaødy element a[] odpowiada 8 bitom. 3 Indeks: i =(k 2)/8 (dzielenie z pominiíciem reszty). 4 Pozycja bitowa: b =(k 2)%8. Sprawdzanie wartoúci bitu (a[(k-2)/8] & (1 << ((k-2) % 8)) == 0 Wstawianie jedynki a[(k-2)/8] = 1 << ((k-2) % 8)

Sito Eratostenesa - z użyciem wzorów bitowych unsigned char a[(n+6)/8]; int j; for (j = 0; j < (N+6)/8; j++) a[j] = 0; for (int k = 2; k*k <= N; k++) if ((a[(k-2)/8] & (1 << ((k-2) % 8))) == 0) { for (j = k*k; j <= N; j += k) a[(j-2)/8] = 1 << ((j-2) % 8); } for (j = 2; j <= N; j++) if ((a[(j-2)/8] & (1 << ((j-2) % 8))) == 0) cout << j << endl;