Podstawy programowania
|
|
- Halina Kubiak
- 8 lat temu
- Przeglądów:
Transkrypt
1 Podstawy programowania Część czwarta Tablice koncepcja, deklaracje, podstawowe zastosowania Autor Roman Simiński Kontakt Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa. Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne. Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.
2 Przetwarzanie ciągu liczb Problem Napisać program obliczający sumaryczny, roczny dochód. Program wczytuje dochody z kolejnych 12-stu miesięcy, następnie wyprowadza dochód sumaryczny oraz dochody z kolejnych miesięcy uporządkowane rosnąco. Copyright Roman Simiński Strona : 2
3 Przetwarzanie ciągu liczb Analiza Właściwie problem nie wydaje się trudny taki program już był omawiany. Wystarczy iteracja while, trzy zmienne..., ale jak uporządkować ciąg liczb, kiedy są one przetwarzane na bieżąco? W danym przebiegu iteracji pamiętany jest tylko dochód z bieżącego miesiąca.?... suma = 0; nr_miesiaca = 1; while( nr_miesiaca <= 12 ) { cout << nr_miesiaca << ": "; cin >> dochod; suma += dochod; ++nr_miesiaca; }... Copyright Roman Simiński Strona : 3
4 Przetwarzanie ciągu liczb musimy pamiętać wszystkie jego elementy Rozwiązanie siłowe niby działa ale... Dochód z każdego miesiąca przechowywany jest w osobnej zmiennej, w nazwach takich zmiennych występuje numer miesiąca. Obliczenie sumy polega na zsumowaniu wartości 12-stu zmiennych. double dochod1; double dochod2;... double dochod11; double dochod12; cout << 1: ; cin >> dochod1; cout << 2: ; cin >> dochod2;... cout << 12: ; cin >> dochod12; suma = dochod1 + dochod dochod11 + dochod12;... Copyright Roman Simiński Strona : 4
5 Przetwarzanie ciągu liczb musimy pamiętać wszystkie jego elementy Świat programisty Dochód ze stycznia Dochód z lutego Dochód z grudnia Zsumuj, posortuj, wyświetl Świat użytkownika Copyright Roman Simiński Strona : 5
6 Przetwarzanie ciągu liczb niech numeracja startuje od 0-ra Świat programisty Numeracja elementów od wartości 0 0 Dochód ze stycznia 1 2 Dochód z lutego Dochód z grudnia Zsumuj, posortuj, wyświetl Świat użytkownika Copyright Roman Simiński Strona : 6
7 Tablice zmienne do przechowywania kolekcji danych tego samego typu Jak zmagazynować wiele liczb i jednocześnie wygodnie nimi manipulować? Zmienna Zmienna składająca składająca się się z z 12-tu 12-tu elementów elementów ( szufladek ). ( szufladek ). Każda Każda z z szufladek szufladek jest jest liczbą liczbą rzeczywistą. rzeczywistą. dochody dochody Każda Każda z z szufladek szufladek posiada posiada swój swój unikatowy unikatowy numer numer od od 0 0 do do Copyright Roman Simiński Strona : 7
8 Tablice zmienne do przechowywania kolekcji danych tego samego typu Jak zmagazynować wiele liczb i jednocześnie wygodnie nimi manipulować? dochody dochody Taka złożona zmienna, będąca kolekcją ponumerowanych elementów takiego samego typu nazywana jest zmienną tablicą lub w skrócie tablicą. Deklaracja zmiennej będącej tablicą może mieć postać: double dochody[ 12 ]; lub z wykorzystaniem liczby elementów określonej parametrycznie: const int LB_MIESIECY = 12; double dochody[ LB_MIESIECY ]; Copyright Roman Simiński Strona : 8
9 Tablice zmienne do przechowywania kolekcji danych tego samego typu Deklaracja zmiennej tablicowej jak to czytać? const int LB_MIESIECY = 12; Typ elementów tablicy Typ elementów tablicy Liczba elementów tablicy Liczba elementów tablicy double dochody [ LB_MIESIECY ]; Nazwa zmiennej tablicowej Nazwa zmiennej tablicowej Numery elementów tablicy nazywane są indeksami. Pierwszy element tablicy w językach C/C++ ma zawsze indeks 0, drugi 1, itd.. Dla tablicy liczącej N elementów, indeks ostatniego jej elementu to N 1. Copyright Roman Simiński Strona : 9
10 Tablice a element tablicy Tablica Tablica Element Element dochody [ 1 ] Copyright Roman Simiński Strona : 10
11 Tablice a różne standardy C i C++ Według standardu C89 i C++03: tablica zawsze składa się z ustalonej, i znanej na etapie kompilacji liczby elementów, liczba elementów tablicy nie ulega zmianie w trakcie działania programu tablice są statyczne. W standardzie C99 istnieją tablice VLA (ang. variable length array): liczba elementów tablicy może być zdefiniowany w trakcie wykonania programu może być określona wartością zmiennej, ta wartość nie musi być znana na etapie kompilacji, liczba elementów tablicy nie ulega zmianie w trakcie działania programu raz stworzona tablica zachowuje swój rozmiar. Copyright Roman Simiński Strona : 11
12 Parametryzacja rozmiaru tablicy C a C++ #define LB_MIES 12 double dochody[ LB_MIES ]; #define MAKS_DL 80 char bufor[ MAKS_DL ]; C, ANSI89 const int LB_MIES = 12; double dochody[ LB_MIES ]; const int MAKS_DL = 80; char bufor[ MAKS_DL ]; C++ Parametryzacja liczby elementów tablicy pozwala na łatwiejszą modyfikację liczby przetwarzanych elementów. Jest mocno zalecana! Dlaczego? Okaże się już za parę slajdów.... Problemy z const w C dlaczego? Kwalifikator typu const może wystąpić z każdą specyfikacją typu. Zmienna z const powinna być zainicjowana a potem nie może zmieniać wartości. Zmienna z kwalifikatorem const w języku C nie jest traktowana jako wartość stała i nie może być wykorzystywana do określania rozmiaru tablicy. Zmienna z kwalifikatorem const w języku C++ może być wykorzystywana do określania rozmiaru tablicy. Copyright Roman Simiński Strona : 12
13 Odwoływanie się do elementów tablicy Przypisanie wartości do elementu tablicy Numer elementu tablicy Numer elementu tablicy Krócej: indeks Krócej: indeks dochody[ 0 ] = 0; dochody[ 2 ] = 1000; dochody[ 10 ] = 2000; Nazwa zmiennej tablicowej Nazwa zmiennej tablicowej Krócej: nazwa tablicy Krócej: nazwa tablicy Tablica Tablica Element Element dochody [ 1 ] = 0 Warto Warto ś ś ć ć wstawiana wstawiana do do elementu elementu tablicy tablicy Copyright Roman Simiński Strona : 13
14 Pojedynczy element tablicy dochody jest jak zwykła zmienna rzeczywista Można przypisywać jej wartości dochody[ 3 ] = 0; Można wstawić do niej wartość wczytaną z klawiatury cout << Podaj dochód styczniowy: ; cin >> dochody[ 0 ]; Można ją wykorzystywać w wyrażeniach dochodbrutto = dochody[ 0 ] * 1.22; Można wyprowadzić jej wartość do strumienia wyjściowego cout << 'Dochód styczniowy wynosi: << dochody[ 0 ]; Copyright Roman Simiński Strona : 14
15 Dzięki tablicom przetwarzanie ciągów liczbowych jest elastyczniejsze Załóżmy że zadeklarowaną zmienną jest to tzw. zmienna indeksowa int nr_miesiaca; Zerowanie wartości wszystkich dochodów zero do każdego elementu tablicy for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0; Rozwija się w trakcie wykonania programu w: dochody[ 0 ] := 0; dochody[ 1 ] := 0; dochody[ 2 ] := 0; dochody[ 3 ] := 0;... dochody[ 11 ] := 0; Copyright Roman Simiński Strona : 15
16 Dzięki tablicom przetwarzanie ciągów liczbowych jest elastyczniejsze Zatem jedna iteracja zeruje wszystkie elementy tablicy for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0; Dochody Dochody Zmienna nr_miesiaca Zmienna maszeruje nr_miesiaca maszeruje po po kolejnych kolejnych numerach numerach elementów elementów tablicy: tablicy: 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,...,..., dochody[ nr_miesiaca ] = 0 zeruje dochody[ nr_miesiaca ] = 0 zeruje kolejne kolejne elementy elementy tablicy. tablicy. Copyright Roman Simiński Strona : 16
17 Dzięki tablicom przetwarzanie ciągów liczbowych jest elastyczniejsze Zatem jedna iteracja zeruje wszystkie elementy tablicy for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0; Dochody Dochody Zmienna nr_miesiaca Zmienna maszeruje nr_miesiaca maszeruje po po kolejnych kolejnych numerach numerach elementów elementów tablicy: tablicy: 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,...,..., dochody[ nr_miesiaca ] = 0 zeruje dochody[ nr_miesiaca ] = 0 zeruje kolejne kolejne elementy elementy tablicy. tablicy. Copyright Roman Simiński Strona : 17
18 Wypełnienie tablicy danymi wczytanymi ze strumienia wejściowego for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) { cout << nr_miesiaca + 1 << ": "; cin >> dochody[ nr_miesiaca ]; } Rozwija się w trakcie wykonania programu w: cout << 1 << ": "; cin >> dochody[ 0 ]; cout << 2 << ": "; cin >> dochody[ 1 ]; cout << 3 << ": "; cin >> dochody[ 3 ];... cout << 12 << ": "; cin >> dochody[ 11 ]; Copyright Roman Simiński Strona : 18
19 Wyprowadzenie zawartości tablicy do strumienia wyjściowego for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) cout << endl << nr_miesiaca + 1 << : << dochody[ nr_miesiaca ]; Rozwija się w trakcie wykonania programu w: cout << endl << 1 << : << dochody[ 0 ]; cout << endl << 2 << : << dochody[ 1 ]; cout << endl << 3 << : << dochody[ 2 ];... cout << endl << 12 << : << dochody[ 11 ]; Copyright Roman Simiński Strona : 19
20 Sumowanie elementów tablicy for( suma = 0, nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) suma += dochody[ nr_miesiaca ]; Rozwija się w trakcie wykonania programu w: suma += dochody[ 0 ]; suma += dochody[ 1 ]; suma += dochody[ 2 ];... suma += dochody[ 11 ]; Copyright Roman Simiński Strona : 20
21 Ogólny schemat iteracyjnego przetwarzania tablic for( i = 0; i < LB_ELEM_TABLICY; ++i ) Jaka ś operacja na elemencie i-tym tablicy t: t[ i ] Do iteracyjnego przetwarzania tablic potrzebna jest zmienna indeksowa. Jest to zmienna całkowita, nazwa jest dowolna, najczęściej stosuje się jednak zmienne o nazwach i, j, k, l, m, n,. Najlepiej gdy rozmiar tablicy jest określony nazwaną stałą wtedy łatwiej jest modyfikować rozmiar tablicy bez potencjalnie wielu zmian w programie. Zmienna indeksowa w C++ może być deklarowana w obrębie iteracji for, uwaga wg aktualnego standardu nie jest wtedy dostępna poza iteracją: for( int i = 0; i < LB_ELEM_TABLICY; ++i ) Jaka ś operacja na elemencie i-tym tablicy t: t[ i ] i = 0; // zmienna i nie jest dost ę pna w tym zasi ę gu! Copyright Roman Simiński Strona : 21
22 Pierwsza przymiarka do programu jeszcze bez porządkowania tablicy #include <iostream> using namespace std; int main() { const int LB_MIESIECY = 12; double dochody[ LB_MIESIECY ]; double suma = 0; int nr_miesiaca; // Krotka informacja o programie cout << "\nobliczam sumaryczny dochod z 12 miesiecy"; cout << "\nwprowadz dochody z kolejnych miesiecy\n"; // Zerowanie elementow tablicy for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0; // Wczytanie danych ze strumienia wejsciowego for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) { cout << nr_miesiaca + 1 << ": "; cin >> dochody[ nr_miesiaca ]; } 1/2 Copyright Roman Simiński Strona : 22
23 Pierwsza przymiarka do programu jeszcze bez porządkowania tablicy // Sumowanie elementow tablicy for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) suma += dochody[ nr_miesiaca ]; cout << "\nsuma przychodow: " << suma; // Uwaga tutaj brakuje porzadkowania tablicy! // Wyprowadzenie elementow tablicy do strumienia wyjsciowego for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) cout << endl << dochody[ nr_miesiaca ]; cout << endl << "Nacisnij Enter by zakonczyc..." << endl; cin.ignore(); cin.get(); return EXIT_SUCCESS; } 2/2 Copyright Roman Simiński Strona : 23
24 Uwaga pierwsza optymalizacja // Zerowanie elementow tablicy for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0; // Wczytanie danych ze strumienia wejsciowego for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) { cout << nr_miesiaca + 1 << ": "; cin >> dochody[ nr_miesiaca ]; } W tym przypadku zerowanie tablicy można pominąć. Za chwilę w całości zostanie wypełniona danymi wczytanymi ze strumienia wejściowego programu. Copyright Roman Simiński Strona : 24
25 Uwaga eliminacja zbędnej iteracji // Wczytanie danych ze strumienia wejsciowego for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) { cout << nr_miesiaca + 1 << ": "; cin >> dochody[ nr_miesiaca ]; } // Sumowanie elementow tablicy for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) suma += dochody[ nr_miesiaca ]; // Wczytanie danych ze strumienia wejsciowego for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) { cout << nr_miesiaca + 1 << ": "; cin >> dochody[ nr_miesiaca ]; } suma += dochody[ nr_miesiaca ]; Copyright Roman Simiński Strona : 25
26 Jak uporządkować tablicę dochodów? dochody dochody Jak to ułożyć te liczby w kolejności rosnącej? dochody dochody Copyright Roman Simiński Strona : 26
27 Jak uporządkować tablicę dochodów sortowanie Zagadnienie porządkowania elementów tablicy wg pewnego kryterium nazywa się sortowaniem. Istnieje wiele metod sortowania zawartości tablic przyjmują postać algorytmów sortowania dobrze opisanych w literaturze związanej z programowaniem i algorytmiką. Biblia algorytmów sortowania to książka N. Wirtha: Algorytmy + struktury danych = programy Istnieją proste i intuicyjnie zrozumiałe algorytmy sortowania te nie są zwykle efektywne. Efektywne algorytmy sortowania stosują sprytne choć nie od razu zrozumiałe rozwiązania. Do sortowania niewielkich tablic wystarczą proste algorytmy sortowania nie strzelamy a armaty do wróbelka :) Copyright Roman Simiński Strona : 27
28 Sortowanie przez wybieranie koncepcja Wśród nieuporządkowanych elementów będziemy wyszukiwać najmniejszy i odkładać go do puli uporządkowanych. nieuporządkowane Copyright Roman Simiński Strona : 28
29 Sortowanie przez wybieranie koncepcja Wybieramy element minimalny nieuporządkowane Copyright Roman Simiński Strona : 29
30 Sortowanie przez wybieranie koncepcja Przenosimy do zbioru elementów uporządkowanych nieuporządkowane uporządkowane 1 Copyright Roman Simiński Strona : 30
31 Sortowanie przez wybieranie koncepcja Z pozostałych, nieuporządkowanych elementów wybieramy minimalny nieuporządkowane uporządkowane 1 Copyright Roman Simiński Strona : 31
32 Sortowanie przez wybieranie koncepcja Przenosimy do zbioru elementów uporządkowanych nieuporządkowane uporządkowane 1 4 Copyright Roman Simiński Strona : 32
33 Sortowanie przez wybieranie koncepcja Z pozostałych, nieuporządkowanych elementów wybieramy minimalny nieuporządkowane uporządkowane Copyright Roman Simiński Strona : 33
34 Sortowanie przez wybieranie koncepcja Przenosimy do zbioru elementów uporządkowanych nieuporządkowane uporządkowane 5 Copyright Roman Simiński Strona : 34
35 Sortowanie przez wybieranie koncepcja Z pozostałych, nieuporządkowanych elementów wybieramy minimalny nieuporządkowane uporządkowane Copyright Roman Simiński Strona : 35
36 Sortowanie przez wybieranie koncepcja Przenosimy do zbioru elementów uporządkowanych nieuporządkowane uporządkowane 6 Copyright Roman Simiński Strona : 36
37 Sortowanie przez wybieranie koncepcja Z pozostałych, nieuporządkowanych elementów wybieramy minimalny nieuporządkowane uporządkowane Copyright Roman Simiński Strona : 37
38 Sortowanie przez wybieranie koncepcja Przenosimy do zbioru elementów uporządkowanych nieuporządkowane uporządkowane Copyright Roman Simiński Strona : 38
39 Sortowanie przez wybieranie koncepcja Z pozostałych, nieuporządkowanych elementów wybieramy minimalny nieuporządkowane uporządkowane Copyright Roman Simiński Strona : 39
40 Sortowanie przez wybieranie koncepcja Przenosimy do zbioru elementów uporządkowanych nieuporządkowane uporządkowane Copyright Roman Simiński Strona : 40
41 Sortowanie przez wybieranie koncepcja nieuporządkowane Dwa zbiory, dwie półki na elementy uporządkowane Copyright Roman Simiński Strona : 41
42 Sortowanie przez wybieranie koncepcja nieuporządkowane A może użyć tylko jednej półki? uporządkowane Copyright Roman Simiński Strona : 42
43 Sortowanie przez wybieranie tylko jedna półka uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 43
44 Sortowanie przez wybieranie tylko jedna półka Wybieramy element minimalny uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 44
45 Sortowanie przez wybieranie tylko jedna półka... i przenosimy na początek części nieuporządkowanej uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 45
46 Sortowanie przez wybieranie tylko jedna półka ale co zrobić z elementem, który jest na początku? uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 46
47 Sortowanie przez wybieranie tylko jedna półka A może po prostu zamienić ze sobą elementy...? uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 47
48 Sortowanie przez wybieranie tylko jedna półka A może po prostu zamienić ze sobą elementy...? uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 48
49 Sortowanie przez wybieranie tylko jedna półka Teraz najmniejszy element jest na swoim miejscu. On jest już uporządkowany uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 49
50 Sortowanie przez wybieranie tylko jedna półka Z pozostałych, nieuporządkowanych elementów wybieramy minimalny uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 50
51 Sortowanie przez wybieranie tylko jedna półka Przenosimy na początek części nieuporządkowanej uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 51
52 Sortowanie przez wybieranie tylko jedna półka Teraz znaleziony element jest na swoim miejscu. Rozrasta się część uporządkowana uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 52
53 Sortowanie przez wybieranie tylko jedna półka Z pozostałych, nieuporządkowanych elementów wybieramy minimalny. W tym przypadku jest on akurat na swoim miejscu uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 53
54 Sortowanie przez wybieranie tylko jedna półka Teraz znaleziony element jest na swoim miejscu. Rozrasta się część uporządkowana uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 54
55 Sortowanie przez wybieranie tylko jedna półka Z pozostałych, nieuporządkowanych elementów wybieramy minimalny uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 55
56 Sortowanie przez wybieranie tylko jedna półka Przenosimy na początek części nieuporządkowanej uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 56
57 Sortowanie przez wybieranie tylko jedna półka Teraz znaleziony element jest na swoim miejscu. Rozrasta się część uporządkowana uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 57
58 Sortowanie przez wybieranie tylko jedna półka Z pozostałych, nieuporządkowanych elementów wybieramy minimalny uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 58
59 Sortowanie przez wybieranie tylko jedna półka Przenosimy na początek części nieuporządkowanej uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 59
60 Sortowanie przez wybieranie tylko jedna półka Wszystkie elementy za wyjątkiem ostatniego są uporządkowane... to znaczy, że i ostatni jest na swoim miejscu uporządkowane nieuporządkowane Copyright Roman Simiński Strona : 60
61 Zanim posortujemy wyszukiwanie minimum, przypomnienie double minimalny; // Minimalny int nr_minimalnego; // Indeks minimalnego elementu Ustal początkową wartość elementu minimalnego: minimalny = dochody[ 0 ] Ustal początkowy numer elementu minimalnego: nr_minimalnego = 0 // Sprawd ź kolejne elementy, wymie ń minimum gdy trzeba Dla każdego elementu tablicy począwszy od drugiego if( aktualny odwiedzony < minimalny ) { minimalny = aktualny odwiedzony; nr_minimalnego = numer aktualnie odwiedzonego; } Copyright Roman Simiński Strona : 61
62 Zanim posortujemy wyszukiwanie minimum, przypomnienie double minimalny; // Minimalny int nr_minimalnego; // Indeks minimalnego elementu // Ustalenie wartosci poczatkowych dla elementu minimalnego minimalny = dochody[ 0 ]; nr_minimalnego = 0; // Sprawdz kazdy nast ę pny i zapamietaj indeks i wartosc gdy mniejszy for( int i = 1; i < LB_MIESIECY; i++ ) if( dochody[ i ] < minimalny ) { minimalny = dochody[ i ]; nr_minimalnego = i; } Copyright Roman Simiński Strona : 62
63 Sortowanie krok pierwszy double minimalny; // Minimalny int nr_minimalnego; // Indeks minimalnego elementu // Ustalenie wartosci poczatkowych dla elementu minimalnego minimalny = dochody[? ]; nr_minimalnego =? ; // Sprawdz kazdy nast ę pny i zapamietaj indeks i wartosc gdy mniejszy for( int i = 1; i < LB_MIESIECY; i++ ) if( dochody[ i ] < minimalny ) { minimalny = dochody[ i ]; nr_minimalnego = i; } Sortowanie polega na wyznaczaniu minimum spośród jeszcze nieposortowanych. Początek części nieposortowanej się zmienia... Copyright Roman Simiński Strona : 63
64 Sortowanie krok pierwszy double minimalny; // Minimalny wsrod nieposortowanych int nr_minimalnego; // Indeks minimalnego elementu int do_posortowania; // Indeks poczatku czesci nieposortowanej for( do_posortowania = 0; do_posortowania < LB_MIESIECY-1; ++do_posortowania ) { Znajdź minimum wśród elementów od do_posortowania do końca tablicy } // Zamieniamy minimalny z pierwszym nieposortowanym dochody[ nr_minimalnego ] = dochody[ do_posortowania ]; dochody[ do_posortowania ] = minimalny; Copyright Roman Simiński Strona : 64
65 Sortowanie krok pierwszy double minimalny; // Minimalny wsrod nieposortowanych int nr_minimalnego; // Indeks minimalnego elementu int do_posortowania; // Indeks poczatku czesci nieposortowanej for( do_posortowania = 0; do_posortowania < LB_MIESIECY-1; ++do_posortowania ) { // Poczatkowe minimum -- pierwszy nieposortowany minimalny = dochody[ do_posortowania ]; nr_minimalnego = do_posortowania; // Sprawdz kazdy nast ę pny i zapamietaj indeks i wartosc gdy mniejszy for( int i = do_posortowania + 1; i < LB_MIESIECY; i++ ) if( dochody[ i ] < minimalny ) { minimalny = dochody[ i ]; nr_minimalnego = i; } } // Przepisujemy pierwszy nieposortowany w miejsce minimum dochody[ nr_minimalnego ] = dochody[ do_posortowania ]; dochody[ do_posortowania ] = minimalny; Ten fragment wstawiamy do programu ze str w miejsce czerwonego komentarza Copyright Roman Simiński Strona : 65
66 Suplement kompresja iteracji Poniższa iteracja: for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0; może być zapisana w krótszej postaci: for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; dochody[ nr_miesiaca++ ] = 0 ) ; Dlaczego? Copyright Roman Simiński Strona : 66
67 Suplement kompresja iteracji Wersja przedrostkowa zwiększa (zmniejsza) wartość argumentu przed użyciem jego wartości. Wersja przyrostkowa zwiększa (zmniejsza) wartość argumentu po użyciem jego wartości. int a = 5, b; b = ++a; a == 6, b == 6 int a = 5, b; b = a++; a == 6, b == 5 int licznik = 0; cout << Licznik: << licznik; licznik++;... licznik++; cout << Licznik: << licznik; int licznik = 0; cout << Licznik: << licznik++;... cout << Licznik: << ++licznik; Copyright Roman Simiński Strona : 67
68 Suplement kompresja iteracji Uwaga! Średnika nie można pominąć oznacza on instrukcję pustą. for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; dochody[ nr_miesiaca++ ] = 0 ) ; Inny przykład: for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; nr_miesiaca++ ) suma += dochody[ nr_miesiaca ]; for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; suma += dochody[ nr_miesiaca++ ] ) ; Copyright Roman Simiński Strona : 68
69 Suplement kompresja iteracji Gdy kolejność wykonywania operacji na tablicy nie ma znaczenia, np. iteracja while: nr_miesiaca = LB_MIESIECY; while( --nr_miesiaca >= 0 ) dochody[ nr_miesiaca ] = 0; lub z wykorzystaniem iteracji for: for( nr_miesiaca = LB_MIESIECY; --nr_miesiaca>=0 ; tab[ nr_miesiaca ] = 0 ) ; Copyright Roman Simiński Strona : 69
70 Problem do rozwiązania statystyka czasów przejazdu slalomu Napisać program rejestrujący czasy przejazdu zawodników startujących w slalomie. Wymagania dla programu: Liczba zawodników zwykle 30. Wpisywanie danych na bieżąco, wyniki po wpisaniu wszystkich czasów. Wyświetlenie czasów uporządkowanych rosnąco od najlepszego do najgorszego. Wyznaczenie i wyświetlenie statystyki czasów: czasu średniego, wartości środkowej (mediany), wariancji i odchylenia standardowego. Copyright Roman Simiński Strona : 70
71 Analiza problemu co mamy na wejściu? Na wejściu mamy 30-ci liczb rzeczywistych każdy z nich to czas przejazdu odpowiedniego zawodnika Copyright Roman Simiński Strona : 71
72 Analiza problemu jak zapamiętać dane wejściowe? Czasy przejazdów 30 zawodników startujących w slalomie można zapamiętać w 30-to elementowej tablicy. // Liczba zawodnikow const int LB_ZAWOD = 30; // Tablica do przechowywania czasow double czasy[ LB_ZAWOD ]; Copyright Roman Simiński Strona : 72
73 Analiza problemu czasy należy uporządkować narastająco Wystarczy wykorzystać dowolny z algorytmów sortowania dla 30 elementów może to być jakikolwiek z prostych algorytmów sortowania. Dane wejściowe Sortowanie Dane uporządkowane Uwaga! Aby można było posortować dane, trzeba je po wczytaniu zmagazynować w pamięci operacyjne najlepiej w tablicy. Algorytmów sortowania tablic jest wiele. Copyright Roman Simiński Strona : 73
74 Analiza problemu statystyka czasów, średnia i mediana Czasy tworzą ciąg 30-stu danych liczbowych. Załóżmy, że tych liczb jest n. Możemy wtedy powiedzieć, że mamy n danych liczbowych a 1, a 2, a 3,..., a n. Średnia arytmetyczna a śr to: a śr = a 1 + a 2 + a a n n Mediana uporządkowanego rosnąco ciągu n liczb a 1 a 2 a 3 a n : to środkowy wyraz ciągu (dla n nieparzystego), to średnia arytmetyczna środkowych wyrazów ciągu (dla n parzystego). Copyright Roman Simiński Strona : 74
75 Analiza problemu statystyka czasów, wariancja i odchylenie Wariancja n danych liczbowych a 1, a 2, a 3,..., a n o średniej arytmetycznej a śr to: σ 2 = (a 1 a śr ) 2 + (a 2 a śr ) 2 + (a 3 a śr ) 2 + ( a n a śr ) 2 n Odchylenie standardowe σ to pierwiastek kwadratowy z wariancji: σ = σ 2 Copyright Roman Simiński Strona : 75
76 Analiza problemu statystyka czasów, po co to wszystko? Wartość średniej arytmetycznej nie zawsze dobrze opisuje zbiór danych dane odstające mocno zaburzają wartość średniej. Mediana może lepiej przybliżać informację o typowych czasach przejazdów uzyskiwanych przez większość zawodników. Przykład: Czasy przejazdów: a śr = 9.1 mediana = 3 Copyright Roman Simiński Strona : 76
77 Analiza problemu statystyka czasów, po co to wszystko? Wariancja i odchylenie standardowe powie jak czasy przejazdów są rozrzucone wokół czasu średniego. Mniejsza wartość odchylenia standardowego oznacza, że więcej czasów przejazdów jest blisko średniej. Większa wartość odchylenia standardowego oznacza, że rozkład czasów jest bardziej równomierny jest więcej czasów bliskich wartości skrajnych. Przykład: Czasy przejazdów: a śr = 3 σ 1.1 Czasy przejazdów: a śr = 3 σ 1.6 Copyright Roman Simiński Strona : 77
78 Czas na program, wersja najprostsza #include <cstdlib> #include <cmath> #include <iostream> using namespace std; int main() { const int LB_ZAWOD = 30; double czasy[ LB_ZAWOD ]; // Liczba zawodnikow // Tablica do przechowywania czasow double suma, srednia, mediana; // Zmienne dla statystyki czasow double wariancja, odchylenie; int nr_min, roboczy; // Zmienne dla algorytmu sortowania double min; int i; // Zmienna robocza iteracji // Wprowadzenie wartosci poszczegolnych czasow i zapisanie w tablicy cout << "Podaj czasy przejazdow kolejnych zawodnikow:" << endl; for( i = 0; i < LB_ZAWOD; i++ ) { cout << i + 1 << ": "; cin >> czasy[ i ]; 1/4 } Copyright Roman Simiński Strona : 78
79 Czas na program, wersja najprostsza // Wyznaczenie wartosci sredniej wprowadzonych czasow for( i = 0, suma = 0; i < LB_ZAWOD; suma += czasy[ i++ ] ) ; // Sortowanie przez proste wybieranie for( roboczy = 0; roboczy < LB_ZAWOD - 1; roboczy++ ) { // Ustalamy robocze minimum min = czasy[ roboczy ]; nr_min = roboczy; // Czy wsrod kolejnych elementow jest mniejszy? for( i = roboczy + 1; i < LB_ZAWOD; i++ ) if( czasy[ i ] < min ) { min = czasy[ i ]; // Zapamietaj mniejszy nr_min = i; // Zapamietaj nr mniejszego } } // Zamien mniejszy z roboczym czasy[ nr_min ] = czasy[ roboczy ]; czasy[ roboczy ] = min; 2/4 Copyright Roman Simiński Strona : 79
80 Czas na program, wersja najprostsza // Wyznaczenie sredniej i mediany srednia = suma / LB_ZAWOD; if( LB_ZAWOD % 2!= 0 ) mediana = czasy[ LB_ZAWOD / 2 ]; // Liczba czasów jest nieparzysta else mediana = ( czasy[ LB_ZAWOD / 2-1 ] + czasy[ LB_ZAWOD / 2 ] ) / 2; // Wyznaczanie wariancji i odchylenia standartowego. Ponownie // wykorzystujemy zmienna suma -- teraz do wyznaczenia sumy kwadratów // roznic od wartosci sredniej for( i = 0, suma = 0; i < LB_ZAWOD; i++ ) suma += pow( czasy[ i ] - srednia, 2 ); // Podnies do drugiej potegi wariancja = suma / LB_ZAWOD; odchylenie = sqrt( wariancja ); // Wyprowadzenie zawartosci tablicy do strumienia wyjsciowego cout << "\nczasy uporzadkowane rosnaco:"; for( i = 0; i < LB_ZAWOD; i++ ) cout << endl << czasy[ i ]; 3/4 Copyright Roman Simiński Strona : 80
81 Czas na program, wersja najprostsza cout << fixed; // Notacja z kropka dziesietna cout.precision( 2 ); // Dwa miejsca po przecinku cout << "\nstatystyka czasow przejazdow"; cout << "\n Srednia: " << srednia; cout << "\n Srodkowa: " << mediana; cout << "\n Wariancja: " << wariancja; cout << "\nodchylenie: " << odchylenie; } cout << endl << "Nacisnij Enter by zakonczyc program"; cin.ignore(); cin.get(); return EXIT_SUCCESS; 4/4 Copyright Roman Simiński Strona : 81
82 Suplement kopiowanie tablic const int LB_ZAWOD = 30; // Liczba zawodnikow double czasy[ LB_ZAWOD ]; // Tablica do przechowywania czasow double czasy_org[ LB_ZAWOD ]; // Tablica z oryginalami czasow... Zapisz kopie danych z tablicy czasy w tablicy czasy_org... Wykonaj sortowanie... Wyprowadź dane posortowane... czasy czasy_org Copyright Roman Simiński Strona : 82
83 Suplement kopiowanie tablic Tak w języku C i C++ nie wolno: czasy_org = czasy; // Nie wolno przypisywać do siebie tablic Trzeba przepisać wartości każdego z elementów: for(i = 0; i < LB_ZAWOD; i++ ) czasy_org[ i ] = czasy[ i ]; czasy czasy_org Copyright Roman Simiński Strona : 83
84 Wyniki pięcioboju, wskazanie zwycięzcy w parze zawodników W pewnym pięcioboju zwodnicy rywalizują ze sobą parami. Punkty zdobyte w czasie każdej z pięciu konkurencji są sumowane. Zwycięża ten zawodnik, który zgromadził większą liczbę punktów. Należy napisać program, pozwalający na wczytanie punktów zgromadzonych przez każdego zawodnika, w każdej z pięciu konkurencji. Zadaniem programu jest wyznaczenie sumy punktów i wytypowanie zwycięzcy. Punkty 1-go zawodnika Suma pkt. 1-go zawodnika 20 Wygrywa drugi Punkty 2-go zawodnika ? Suma pkt. 2-go zawodnika 22 Copyright Roman Simiński Strona : 84
85 Tablica jak magazyn dla punktów każdej z konkurencji Suma pkt. 1-go zawodnika const int LB_KONK = 5; int punkty1[ LB_KONK ]; int suma1; Punkty 1-go zawodnika Punkty 2-go zawodnika ? Wygrywa drugi const int LB_KONK = 5; int punkty2[ LB_KONK ]; int suma2; Suma pkt. 2-go zawodnika Copyright Roman Simiński Strona : 85
86 Przykładowe rozwiązanie, wersja pierwsza #include <cstdlib> #include <iostream> using namespace std; int main() { const int LB_KONK = 5; // Liczba konkurencji int punkty1[ LB_KONK ]; // Punkty 1-go zawodnika int punkty2[ LB_KONK ]; // Punkty 2-go zawodnika int i, suma1, suma2; // Czytaj punkty zawodnikow cout << "Podaj punkty pierwszego zawodnika:" << endl; for( i = 0; i < LB_KONK; i++ ) { cout << ">"; cin >> punkty1[ i ]; } cout << "Podaj punkty drugiego zawodnika:" << endl; for( i = 0; i < LB_KONK; i++ ) { cout << ">"; cin >> punkty2[ i ]; } 1/2 Copyright Roman Simiński Strona : 86
87 Przykładowe rozwiązanie, wersja pierwsza // Sumuj punkty zawodnikow for( i = 0, suma1 = 0; i < LB_KONK; suma1 += punkty1[ i++ ] ) ; for( i = 0, suma2 = 0; i < LB_KONK; suma2 += punkty2[ i++ ] ) ; cout << endl << "Suma punktow pierwszego zawodnika: " << suma1; cout << endl << "Suma punktow drugiego zawodnika: " << suma2; // Wytypuj zwyciezce if( suma1 > suma2 ) cout << endl << "Wygral pierwszy zawodnik"; else if( suma1 < suma2 ) cout << endl << "Wygral drugi zawodnik"; else cout << endl << "Remis"; cout << endl << "Nacisnij Enter by zakonczyc program"; cin.ignore(); cin.get(); return EXIT_SUCCESS; } 2/2 Copyright Roman Simiński Strona : 87
88 Przykładowe rozwiązanie, wersja pierwsza poprawki, cd for( i = 0, suma1 = 0; i < LB_KONK; suma1 += punkty1[ i++ ] ) ; for( i = 0, suma2 = 0; i < LB_KONK; suma2 += punkty2[ i++ ] ) ; cout << endl << "Suma punktow pierwszego zawodnika: " << suma1; cout << endl << "Suma punktow drugiego zawodnika: " << suma2;... Sumowanie, zamiast dwóch iteracji jedna:... for( i = 0, suma1 = 0, suma2 = 0; i < LB_KONK; i++ ) { suma1 += punkty1[ i ]; suma2 += punkty2[ i ]; } cout << endl << "Suma punktow pierwszego zawodnika: " << suma1; cout << endl << "Suma punktow drugiego zawodnika: " << suma2;... Copyright Roman Simiński Strona : 88
89 Idziemy o krok dalej. A co, gdy zawodników jest np. 10-ciu? const int LB_KONK = 5; int punkty1[ LB_KONK ]; int suma1; int punkty2[ LB_KONK ]; int suma2; Punkty 1-go zawodnika Punkty 2-go zawodnika Tyle tablic...? int punkty3[ MAKS LB_KONK ]; ]; int suma3;... int punkty10[ LB_KONK ]; int suma10; Punkty 3-go zawodnika Punkty 10-go zawodnika ? Wygrywa nr 3 Copyright Roman Simiński Strona : 89
90 Idziemy o krok dalej. A co, gdy zawodników jest np. 10-ciu? A może by te tablice zapisać w tablicy?! Punkty 1-go zawodnika Punkty 2-go zawodnika Punkty 3-go zawodnika Punkty 10-go zawodnika Copyright Roman Simiński Strona : 90
91 Koncepcja tablicy dwuwymiarowej Stałe określające liczbę zawodników oraz konkurencji: const int LB_ZAWOD = 10; // Liczba zawodnikow const int LB_KONK = 5; // Liczba konkurencji Tablica dwuwymiarowa to inaczej tablica, której elementami są tablice: int punkty[ LB_ZAWOD ][ LB_KONK ]; Punkty 1-go zawodnika 0 Punkty 2-go zawodnika 1 Punkty 3-go zawodnika Punkty 10-go zawodnika Tablicy dwuwymiarowej odpowiada matematyczne pojęcie macierzy. Tablicy jednowymiarowej odpowiada wektor. Copyright Roman Simiński Strona : 91
92 Prosta tablica dwuwymiarowa deklaracja Stałe określające liczbę wierszy i kolumn: const int LB_W = 3; // Liczba wierszy const int LB_K = 4; // Liczba liczba kolumn Tablica dwuwymiarowa o rozmiarze 3x4 (LB_WxLB_K): int tablica[ LB_W ][ LB_K ]; Wiersz 1 0 Wiersz 2 1 Wiersz Kolumna 1 Kolumna 2 Kolumna 3 Kolumna 4 Copyright Roman Simiński Strona : 92
93 Prosta tablica dwuwymiarowa przykłady operacji Wstawianie liczby 0 do wszystkich elementów pierwszego wiersza: const int LB_W = 3; // Liczba wierszy const int LB_K = 4; // Liczba liczba kolumn int tablica[ LB_W ][ LB_K ]; int w, k; // Roboczy numer wiersza i kolumny for( k = 0; k < LB_K; k++ ) tablica[ 0 ][ k ] = 0; Copyright Roman Simiński Strona : 93
94 Prosta tablica dwuwymiarowa przykłady operacji Wstawianie liczby 0 do wszystkich elementów pierwszej kolumny: const int LB_W = 3; // Liczba wierszy const int LB_K = 4; // Liczba liczba kolumn int tablica[ LB_W ][ LB_K ]; int w, k; // Roboczy numer wiersza i kolumny for( w = 0; w < LB_W; w++ ) tablica[ w ][ 0 ] = 0; Copyright Roman Simiński Strona : 94
95 Prosta tablica dwuwymiarowa przykłady operacji Wstawianie liczby 0 do wszystkich elementów tablicy (wypełnianie wierszami): const int LB_W = 3; // Liczba wierszy const int LB_K = 4; // Liczba liczba kolumn int tablica[ LB_W ][ LB_K ]; int w, k; // Roboczy numer wiersza i kolumny for( w = 0; w < LB_W; w++ ) for( k = 0; k < LB_K; k++ ) tablica[ w ][ k ] = 0; Przy każdym wykonaniu iteracji wewnętrznej, nr wiersza w jest ustalony. Zmienia się dopiero po wypełnieniu wartością 0 całego wiersza. Copyright Roman Simiński Strona : 95
96 Prosta tablica dwuwymiarowa przykłady operacji Sumowanie wartości elementów w każdym wierszu const int LB_W = 3; // Liczba wierszy const int LB_K = 4; // Liczba liczba kolumn int tablica[ LB_W ][ LB_K ]; int w, k; // Roboczy numer wiersza i kolumny for( w = 0; w < LB_W; w++ ) { int suma = 0; for( k = 0; k < LB_K; k++ ) suma += tablica[ w ][ k ]; cout << endl << suma; } Copyright Roman Simiński Strona : 96
97 Prosta tablica dwuwymiarowa przykłady operacji Wprowadzanie danych do tablicy z cin wierszami. const int LB_W = 3; // Liczba wierszy const int LB_K = 4; // Liczba liczba kolumn int tablica[ LB_W ][ LB_K ]; int w, k; // Roboczy numer wiersza i kolumny for( w = 0; w < LB_W; w++ ) { for( k = 0; k < LB_K; k++ ) { cout << endl << '>'; cin >> tablica[ w ][ k ]; } } >1 >2 >3 >_ Copyright Roman Simiński Strona : 97
98 Prosta tablica dwuwymiarowa przykłady operacji Wyprowadzanie danych z tablicy do cout wierszami. const int LB_W = 3; // Liczba wierszy const int LB_K = 4; // Liczba liczba kolumn int tablica[ LB_W ][ LB_K ]; int w, k; // Roboczy numer wiersza i kolumny for( w = 0; w < LB_W; w++ ) { cout << endl; for( k = 0; k < LB_K; k++ ) cout << tablica[ w ][ k ] << ' '; } Copyright Roman Simiński Strona : 98
99 Wracamy do programu z wynikami 10-ciu zawodników Stałe określające liczbę zawodników oraz konkurencji, zmienne programu: const int LB_ZAWOD = 10; // Liczba zawodnikow const int LB_KONK = 5; // Liczba konkurencji int punkty[ LB_ZAWOD ][ LB_KONK ]; // Tablica punktów int nr_zawod, nr_konk; int maks, nr_maks; // Zmienne robocze iteracji // Minimum i nr minimum Punkty 1-go zawodnika 0 Punkty 2-go zawodnika 1 Punkty 3-go zawodnika Punkty 10-go zawodnika Copyright Roman Simiński Strona : 99
100 Tablica wyników a suma punktów zawodnika Będziemy wyznaczać sumy punktów każdego z zawodników. Sum zatem będzie tyle ile zawodników, gdzie je zapamiętać? Punkty 1-go zawodnika 0 Punkty 2-go zawodnika 1 Punkty 3-go zawodnika Punkty 10-go zawodnika Potrzebna kolejna tablica? Copyright Roman Simiński Strona : 100
101 Tablica wyników a suma punktów zawodnika Wprowadzamy dodatkową kolumnę w tablicy, będzie ona przechowywać sumę punktów każdego zawodnika: Punkty 1-go zawodnika 0 Punkty 2-go zawodnika 1 Punkty 3-go zawodnika Punkty 10-go zawodnika const int LB_ZAWOD = 10; // Liczba zawodnikow const int LB_KONK = 5; // Liczba konkurencji const int SUMA = LB_KONK; // Indeks elemementu wiersza na sume punktow int punkty[ LB_ZAWOD ][ LB_KONK + 1 ]; // Tablica punktów int nr_zawod, nr_konk; int maks, nr_maks; // Zmienne robocze iteracji // Minimum i nr minimum Copyright Roman Simiński Strona : 101
102 Odczyt danych Wczytanie punktów kolejnych zawodników // Czytaj punkty kolejnych zawodnikow for( nr_zawod = 0; nr_zawod < LB_ZAWOD; ++nr_zawod ) { cout << "Podaj punkty zawodnika nr: " << nr_zawod + 1 << endl; for( nr_konk = 0; nr_konk < LB_KONK; ++nr_konk ) { cout << '>'; cin >> punkty[ nr_zawod ][ nr_konk ]; } } Copyright Roman Simiński Strona : 102
103 Sumowanie Sumowanie punktów kolejnych zawodników // Sumuj punkty kolejnych zawodnikow for( nr_zawod = 0; nr_zawod < LB_ZAWOD; ++nr_zawod ) { punkty[ nr_zawod ][ SUMA ] = 0; for( nr_konk = 0; nr_konk < LB_KONK; ++nr_konk ) punkty[ nr_zawod ][ SUMA ] += punkty[ nr_zawod ][ nr_konk ]; } Copyright Roman Simiński Strona : 103
104 Wyprowadzanie sum Wyprowadzenie sum punktów kolejnych zawodników // Wyprowadz sumy punktów kolejnych zawodników cout << endl << "Sumy punktow zawodnikow"; for( nr_zawod = 0; nr_zawod < LB_ZAWOD; ++nr_zawod ) { cout << endl << nr_zawod + 1 << ": "; cout << punkty[ nr_zawod ][ SUMA ]; } Copyright Roman Simiński Strona : 104
105 Znajdowanie zwycięzcy Wyznaczanie maksimum wśród sum punktów // Wyznacz nalepszy wynik -- maksymalna sume maks = punkty[ nr_maks = 0 ][ SUMA ]; for( nr_zawod = 1; nr_zawod < LB_ZAWOD; ++nr_zawod ) if( punkty[ nr_zawod ][ SUMA ] > maks ) { nr_maks = nr_zawod; maks = punkty[ nr_zawod ][ SUMA ]; } cout << endl << "Wygrywa zawodnik nr : " << nr_maks + 1; cout << endl << "Jego suma punktów to: " << maks; Uwaga na mały trik: nr_maks = 0; maks = punkty[ nr_maks ][ SUMA ]; maks = punkty[ nr_maks = 0 ][ SUMA ]; Copyright Roman Simiński Strona : 105
106 Kompletny program #include <cstdlib> #include <iostream> using namespace std; int main() { const int LB_ZAWOD = 3; // Liczba zawodnikow const int LB_KONK = 5; // Liczba konkurencji const int SUMA = LB_KONK; // Indeks elem. z suma punktow // Dwuwymiarowa tablica punktów wszystkich zawodnikow int punkty[ LB_ZAWOD ][ LB_KONK + 1 ]; int nr_zawod, nr_konk; // Zmienne robocze iteracji int maks, nr_maks; // Minimum i nr minimum 1/3 Copyright Roman Simiński Strona : 106
107 Kompletny program // Czytaj i sumuj punkty kolejnych zawodnikow for( nr_zawod = 0; nr_zawod < LB_ZAWOD; ++nr_zawod ) { punkty[ nr_zawod ][ SUMA ] = 0; cout << "Podaj punkty zawodnika nr: " << nr_zawod + 1 << endl; for( nr_konk = 0; nr_konk < LB_KONK; ++nr_konk ) { cout << '>'; cin >> punkty[ nr_zawod ][ nr_konk ]; punkty[ nr_zawod ][ SUMA ] += punkty[ nr_zawod ][ nr_konk ]; }// for }// for // Wyprowadz sumy punktów kolejnych zawodników cout << endl << "Sumy punktow zawodnikow"; for( nr_zawod = 0; nr_zawod < LB_ZAWOD; ++nr_zawod ) { cout << endl << nr_zawod + 1 << ": "; cout << punkty[ nr_zawod ][ SUMA ]; } 2/3 Copyright Roman Simiński Strona : 107
108 Kompletny program // Wyznacz nalepszy wynik -- maksymalna sume maks = punkty[ nr_maks = 0 ][ SUMA ]; for( nr_zawod = 1; nr_zawod < LB_ZAWOD; ++nr_zawod ) if( punkty[ nr_zawod ][ SUMA ] > maks ) { nr_maks = nr_zawod; maks = punkty[ nr_zawod ][ SUMA ]; } cout << endl << "Wygrywa zawodnik nr : " << nr_maks + 1; cout << endl << "Jego suma punktów to: " << maks; cout << endl << "Nacisnij Enter by zakonczyc program"; } cin.ignore(); cin.get(); return EXIT_SUCCESS; 3/3 Copyright Roman Simiński Strona : 108
109 Kolejny program wytypuj szóstkę do dużego lotka Zadaniem programu jest wylosowanie sześciu liczb, pozwalających wypełnić pojedynczy typowanie tzw. dużego lotka. Losujemy liczby z przedziału , w wylosowanej szóstce nie może być powtórzeń. Copyright Roman Simiński Strona : 109
110 Wytypuj szóstkę do dużego lotka analiza + pseudokod Zdefiniuj zmienną całkowitą licznik losowanych liczb: wylosowanych Zdefiniuj zmienną całkowitą pamięta aktualnie wylosowaną liczbę: liczba Zainicjuj generator liczb pseudolosowych Wyzeruj zmienna wylosowanych Wykonuj Wylosuj wartość z przedzialu i wstaw do zmiennej liczba Wyprowadź zawartość zmiennej liczba do strumienia wyjściowego Zwiększ zmienną wylosowanych o 1 Dopóki zmienna Wylosowanych ma wartość mniejszą od 6 To ma szansę zadziałać, ale nigdy nie wiadomo, czy losując kolejną liczbę, nie otrzymamy czasem którejś z już wcześniej wylosowanych liczb..., ale umówmy się, że ten problem rozwiążemy później. Copyright Roman Simiński Strona : 110
111 Wytypuj szóstkę do dużego lotka koślawa, pierwsza wersja #include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() { const int ZAKRES = 49; // Zakres losowanych liczb int liczba; // Losowana liczba, kandydat do szostki int wylosowanych; // Licznik losowanych liczb // Inicjalizacja gneratora liczb pseudolosowych srand( ( unsigned )time( 0 ) ); cout << "\nlosuje szostke liczb z 49-ciu."; cout << "\nwylosowana szostka:\n"; Copyright Roman Simiński Strona : 111
112 Wytypuj szóstkę do dużego lotka koślawa, pierwsza wersja // Zerowanie licznika wylosowanych liczb wylosowanych = 0; do { // Losowanie liczby z zakresu liczba = rand() % ZAKRES + 1; // Wyprowadzenie wylosowanej liczby cout << liczba << ' '; ++wylosowanych; } while( wylosowanych < 6 ); } cout << "\n\nnacisnij Enter by zakonczyc program"; cin.get(); return EXIT_SUCCESS; Copyright Roman Simiński Strona : 112
113 Wytypuj szóstkę do dużego lotka jak wyeliminować duplikaty? Zdefiniuj zmienną całkowitą licznik losowanych liczb: wylosowanych Zdefiniuj zmienną całkowitą pamięta aktualnie wylosowaną liczbę: liczba Zainicjuj generator liczb pseudolosowych Wyzeruj zmienna wylosowanych Wykonuj Wylosuj wartość z przedzialu i wstaw do zmiennej liczba Jeżeli wartość zmiennej Liczba nie była jeszcze wylosowana To Wyprowadź zawartość zmiennej liczba do strumienia wyjściowego Zwiększ zmienną wylosowanych o 1 Dopóki zmienna Wylosowanych ma wartość mniejszą od 6 W jaki sposób pamiętać, jakie liczby zostały wylosowane wcześniej? Copyright Roman Simiński Strona : 113
114 Wytypuj szóstkę do dużego lotka rejestr wylosowanych liczb Każdy Każdy element element rejestru rejestru odpowiada odpowiada liczbie liczbie kandydatce kandydatce do do szóstki. szóstki. Jeżeli Jeżeli na na danej danej pozycji pozycji w rejestrze rejestrze ustawiona ustawiona jest jest wartość wartość Tak, Tak, to to dana dana liczba liczba została została już już wylosowana. wylosowana. Jeżeli Jeżeli na na zadanej zadanej pozycji pozycji jest jest wartość wartość Nie, Nie, taka taka liczba liczba jeszcze jeszcze nie nie była była wylosowana. wylosowana. juzwylosowane juzwylosowane Tak Nie Tak Nie Tak... Nie Nie Tak Tak Nie Załóżmy, Załóżmy, że że wylosowano wylosowano liczbę liczbę Na Na pozycji pozycji tej tej liczbie liczbie odpowiadającej odpowiadającej jest jest Nie, Nie, zatem zatem takiej takiej liczby liczby jeszcze jeszcze nie nie wylosowano. wylosowano. Liczba Liczba może może wejść wejść do do losowanej losowanej szóstki. szóstki. Copyright Roman Simiński Strona : 114
115 Wytypuj szóstkę do dużego lotka rejestr wylosowanych liczb Każdy Każdy element element rejestru rejestru odpowiada odpowiada liczbie liczbie kandydatce kandydatce do do szóstki. szóstki. Jeżeli Jeżeli na na danej danej pozycji pozycji w rejestrze rejestrze ustawiona ustawiona jest jest wartość wartość Tak, Tak, to to dana dana liczba liczba została została już już wylosowana. wylosowana. Jeżeli Jeżeli na na zadanej zadanej pozycji pozycji jest jest wartość wartość Nie, Nie, taka taka liczba liczba jeszcze jeszcze nie nie była była wylosowana. wylosowana. juzwylosowane juzwylosowane Tak Nie Tak Nie Tak... Tak Nie Tak Tak Nie Zaznaczamy, Zaznaczamy, że że liczba liczba została została wylosowana wylosowana wpisując wpisując do do rejestru rejestru Tak, Tak, na na pozycji pozycji odpowiadającej odpowiadającej tej tej liczbie. liczbie. Copyright Roman Simiński Strona : 115
116 Wytypuj szóstkę do dużego lotka rejestr wylosowanych liczb Każdy Każdy element element rejestru rejestru odpowiada odpowiada liczbie liczbie kandydatce kandydatce do do szóstki. szóstki. Jeżeli Jeżeli na na danej danej pozycji pozycji w rejestrze rejestrze ustawiona ustawiona jest jest wartość wartość Tak, Tak, to to dana dana liczba liczba została została już już wylosowana. wylosowana. Jeżeli Jeżeli na na zadanej zadanej pozycji pozycji jest jest wartość wartość Nie, Nie, taka taka liczba liczba jeszcze jeszcze nie nie była była wylosowana. wylosowana. juzwylosowane juzwylosowane Tak Nie Tak Nie Tak... Tak Nie Tak Tak Nie Załóżmy, Załóżmy, że że wylosowano wylosowano liczbę liczbę Na Na pozycji pozycji tej tej liczbie liczbie odpowiadającej odpowiadającej jest jest Tak, Tak, zatem zatem tę tę liczbę liczbę już już wylosowano. wylosowano. Liczba Liczba 5 5 zostaje zostaje odrzucona odrzucona jako jako dublet. dublet. Copyright Roman Simiński Strona : 116
117 Wytypuj szóstkę do dużego lotka rejestr wylosowanych liczb Każdy Każdy element element rejestru rejestru odpowiada odpowiada liczbie liczbie kandydatce kandydatce do do szóstki. szóstki. Jeżeli Jeżeli na na danej danej pozycji pozycji w rejestrze rejestrze ustawiona ustawiona jest jest wartość wartość Tak, Tak, to to dana dana liczba liczba została została już już wylosowana. wylosowana. Jeżeli Jeżeli na na zadanej zadanej pozycji pozycji jest jest wartość wartość Nie, Nie, taka taka liczba liczba jeszcze jeszcze nie nie była była wylosowana. wylosowana. juzwylosowane juzwylosowane Tak Nie Tak Nie Tak... Tak Nie Tak Tak Nie Z Z rejestru rejestru wylosowanych wylosowanych liczb liczb można można wyczytać, wyczytać, które które z z nich nich zostały zostały wylosowane: wylosowane: Copyright Roman Simiński Strona : 117
118 Rejestr wylosowanych liczb a język C++ Pierwszy problem indeksy tablic w C/C++ liczone są od zera: juzwylosowane juzwylosowane Tak Nie Tak Nie Tak... Tak Nie Tak Tak Nie juzwylosowane juzwylosowane Tak Nie Tak Nie Tak... Tak Nie Tak Tak Nie Drugi problem jak zapisać Tak/Nie w C++? W języku C++ istnieje zdefiniowany pierwotnie typ bool posiadający dwie dostepne wartości true prawda, tak oraz false fałsz, nie. const int ZAKRES = 49; // Zakres losowanych liczb bool juzwylosowane[ ZAKRES ]; // Rejestr wylosowanych liczb Copyright Roman Simiński Strona : 118
Języki programowania obiektowego Nieobiektowe elementy języka C++
Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Tablice koncepcja, deklaracje, podstawowe zastosowania Tablice
Bardziej szczegółowoPodstawy programowania w języku C i C++
Podstawy programowania w języku C i C++ Część szósta Tablice koncepcja, reprezentacja, przetwarzanie Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
Bardziej szczegółowoPodstawy programowania
Podstawy programowania Część siódma Tablice różne zastosowania Zbiory Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura
Bardziej szczegółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,
Bardziej szczegółowoTablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011
Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Załóżmy, że uprawiamy jogging i chcemy monitorować swoje postępy. W tym celu napiszemy program, który zlicza, ile czasu
Bardziej szczegółowoPodstawy programowania
Podstawy programowania Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót treści wykładu,
Bardziej szczegółowoTablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119
Tablice Tablica to struktura danych, która może przechowywać wiele wartości tego samego typu. Na przykład tablica może zawierać: 10 wartości typu int opisujących liczbę studentów przyjętych na kierunek
Bardziej szczegółowoJęzyki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część druga Przetwarzanie tablic znaków Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim
Bardziej szczegółowoJęzyki programowania obiektowego Nieobiektowe elementy języka C++
Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Przetwarzanie tablic znaków Łańcuchy znakowe jako tablice znaków
Bardziej szczegółowoPodstawy programowania w języku C i C++
Podstawy programowania w języku C i C++ Część czwarta Operatory i wyrażenia Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,
Bardziej szczegółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
Bardziej szczegółowotablica: dane_liczbowe
TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica
Bardziej szczegółowoWstęp do programowania
wykład 6 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Losowanie liczb całkowitych Dostępne biblioteki Najprostsze losowanie liczb całkowitych można wykonać za pomocą funkcji
Bardziej szczegółowoWstęp do programowania
wykład 7 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2016/2017 Losowanie liczb całkowitych Dostępne biblioteki Najprostsze losowanie liczb całkowitych można wykonać za pomocą funkcji
Bardziej szczegółowoWstęp do Informatyki
Wstęp do Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 11 1 / 52 Pętla for # i n c l u d e
Bardziej szczegółowoInformacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char
Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od
Bardziej szczegółowoProgramowanie - wykład 4
Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include
Bardziej szczegółowoJęzyki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie
Bardziej szczegółowoWstęp do programowania
wykład 4 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Pętle wykonujące się podaną liczbę razy Jeśli chcemy wykonać pewien fragment programu określoną liczbę razy, możemy użyć
Bardziej szczegółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część jedenasta Przetwarzanie plików amorficznych Konwencja języka C Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
Bardziej szczegółowoPodstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
Bardziej szczegółowoRozwiązanie. #include <cstdlib> #include <iostream> using namespace std;
Programowanie C++ Zadanie 1 Napisz program do obliczenia sumy i iloczynu ciągu liczb zakooczonego liczbą zero. Zakładamy, że ciąg zawiera co najmniej jedną liczbę (założenie to jest konieczne przy obliczeniu
Bardziej szczegółowoPodstawy programowania
Podstawy programowania Część trzecia Instrukcje sterujące wykonaniem programu Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót
Bardziej szczegółowoAlgorytmika i programowanie. Wykład 2 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 Tablice Tablica jest zbiorem elementów tego samego typu. Każdy element jest identyfikowany (numer
Bardziej szczegółowoProgramowanie w języku C++ Agnieszka Nowak Brzezińska Laboratorium nr 2
Programowanie w języku C++ Agnieszka Nowak Brzezińska Laboratorium nr 2 1 program Kontynuujemy program który wczytuje dystans i ilości paliwa zużytego na trasie, ale z kontrolą danych. A więc jeśli coś
Bardziej szczegółowoProgramowanie w języku C++
Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
Bardziej szczegółowoPodstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Bardziej szczegółowoWymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:
5 Tablice Tablica jest zestawem obiektów (zmiennych) tego samego typu, do których można się odwołać za pomocą wspólnej nazwy. Obiekty składowe tablicy noszą nazwę elementów tablicy. Dostęp do nich jest
Bardziej szczegółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót
Bardziej szczegółowoJęzyki programowania obiektowego Nieobiektowe elementy języka C++
Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Instrukcje sterujące wykonaniem programu, przykłady wykorzystania
Bardziej szczegółowoTablice deklaracja, reprezentacja wewnętrzna
Tablice deklaracja, reprezentacja wewnętrzna Tablica jest zmienną złożoną z elementów tego samego typu. Obejmuje ona ciągły obszar pamięci operacyjnej dokładnie tak duży, aby zmieścić wszystkie jej elementy.
Bardziej szczegółowoZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015
POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 4 : Napisy. Tablice dwuwymiarowe. Formaty
Bardziej szczegółowoWstęp do programowania
wykład 5 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2016/2017 Zadanie o kotach z poprzedniego wykładu # include < iostream > using namespace std ; int main (){ int rozmiar_ rodzinki,
Bardziej szczegółowo*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 Mamy napisać program obliczający średnią ocenę w łyżwiarstwie figurowym W uproszczeniu: jest dziewięciu sędziów przyznających po dwie noty: za wartość techniczną i artystyczną (skala od 0.0 do
Bardziej szczegółowoPodstawy programowania
Podstawy programowania Część ósma Tablice znaków i przetwarzanie napisów Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura
Bardziej szczegółowo> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki
> C++ dynamiczna alokacja/rezerwacja/przydział pamięci Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 1429536600 > Dzisiejsze zajęcia sponsorują słówka: new oraz delete
Bardziej szczegółowoZajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 2 Programowanie strukturalne dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Pętla while #include using namespace std; int main ()
Bardziej szczegółowoZadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.
Zadania do wykonania Rozwiązując poniższe zadania użyj pętlę for. 1. apisz program, który przesuwa w prawo o dwie pozycje zawartość tablicy 10-cio elementowej liczb całkowitych tzn. element t[i] dla i=2,..,9
Bardziej szczegółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część druga Instrukcje sterujące wykonaniem programu Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót
Bardziej szczegółowoCzęść 4 życie programu
1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część
Bardziej szczegółowo#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 ); }
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Bardziej szczegółowoAlgorytmika i programowanie. dr inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie
Algorytmika i programowanie dr inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Algorytmy i sposoby ich przedstawiania Algorytm - informatyczny opis planu rozwiązania zadania Sposoby
Bardziej szczegółowoProgramowanie i struktury danych
Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne
Bardziej szczegółowoWstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)
1 Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną) Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion,
Bardziej szczegółowoLab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
Bardziej szczegółowoZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
Bardziej szczegółowotyp 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
typy złożone- tablice wielowymiarowe, struktury Wykład 6 Deklarowanie wskaźników nazwa_typu * nazwa_wskaznika; WSKAŹNIKI: PRZYPOMNIENIE Przypisywanie wskaźnikom wartości double * pn = &zmienna_typu_double;
Bardziej szczegółowoJęzyk C, tablice i funkcje (laboratorium, EE1-DI)
Język C, tablice i funkcje (laboratorium, EE1-DI) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.
Bardziej szczegółowoTABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;
Ogólna postać definicji tablicy: TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ; np. int tablica [ 10 ]; // 10-cio elementowa tablica liczb całkowitych char tekst
Bardziej szczegółowowykł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
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i
Bardziej szczegółowoO podstawowych operacjach na tablicach. Mateusz Ziółkowski, MBiU II
Wykład Ⅴ O podstawowych operacjach na tablicach Mateusz Ziółkowski, MBiU II Czym są tablice? Tablica (ang. array) to zespół równorzędnych zmiennych, posiadających wspólną nazwę. Jego poszczególne elementy
Bardziej szczegółowoProgramowanie w języku C++
Programowanie w języku C++ Część dziewiąta Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
Bardziej szczegółowoProste programy w C++ zadania
Proste programy w C++ zadania Zbiór zadao do samodzielnego rozwiązania stanowiący powtórzenie materiału. Podstawy C++ Budowa programu w C++ Dyrektywy preprocesora Usunięcie dublujących się nazw Częśd główna
Bardziej szczegółowor. Tablice podstawowe operacje na tablicach
27.03.2014r. Tablice podstawowe operacje na tablicach Tablica - definicja Tablica (ang. array) lub wektor (ang. vector) jest złożoną strukturą danych (ang. compound data structure) zbudowaną z ciągu elementów
Bardziej szczegółowoPodstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne
1 Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion,
Bardziej szczegółowoTablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic:
Tablice TEORIA Tablica to ciąg obiektów tego samego typu, które zajmują ciągły obszar w pamięci. Dzięki stosowaniu tablic, zamiast nazywania każdej z np. stu zmiennych osobno możemy zabudować tablicę 100-elementową,
Bardziej szczegółowo1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Bardziej szczegółowoZmienne i struktury dynamiczne
Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest
Bardziej szczegółowolekcja 8a Gry komputerowe MasterMind
lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych
Bardziej szczegółowoPodstawy Programowania
Podstawy Programowania Monika Wrzosek Instytut Matematyki Uniwersytet Gdański Matematyka 2017/18 Monika Wrzosek (IM UG) Podstawy Programowania 1 / 119 Sprawy organizacyjne E-mail: mwrzosek@mat.ug.edu.pl
Bardziej szczegółowoStruktura pliku projektu Console Application
Struktura pliku projektu Console Application #include #include using namespace std; int main(int argc, char *argv[]) // to jest komentarz system("pause"); return EXIT_SUCCESS; Na początku
Bardziej szczegółowoPodstawy Programowania Podstawowa składnia języka C++
Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include
Bardziej szczegółowo4. Funkcje. Przykłady
4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni
Bardziej szczegółowoProgramowanie Proceduralne
Programowanie Proceduralne Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Bożena Woźna-Szcześniak (AJD) Programowanie Proceduralne Wykład 1 1 / 59 Cel wykładów z programowania
Bardziej szczegółowoKonstrukcje warunkowe Pętle
* Konstrukcje warunkowe Pętle *Instrukcja if sposób na sprawdzanie warunków *Konstrukcja: if(warunek) else { instrukcje gdy warunek spełniony} {instrukcje gdy warunek NIE spełniony} * 1. Wylicz całkowity
Bardziej szczegółowoINFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki
INFORMATYKA Z MERMIDONEM Programowanie Moduł 5 / Notatki Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego. Realizator projektu: Opracowano w ramach projektu
Bardziej szczegółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40
Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne
Bardziej szczegółowoLekcja : Tablice + pętle
Lekcja : Tablice + pętle Wprowadzenie Oczywiście wiesz już jak dużo można osiągnąć za pomocą tablic oraz jak dużo można osiągnąć za pomocą pętli, jednak tak naprawdę prawdziwe możliwości daje połączenie
Bardziej szczegółowo7. Pętle for. Przykłady
. Pętle for Przykłady.1. Bez użycia pętli while ani rekurencji, napisz program, który wypisze na ekran kolejne liczby naturalne od 0 do pewnego danego n. 5 int n; 6 cin >> n; 8 for (int i = 0; i
Bardziej szczegółowoPodstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia
Podstawy informatyki Elektrotechnika I rok Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH Kraków 2017 Tematyka
Bardziej szczegółowoAlgorytmy sortujące i wyszukujące
Algorytmy sortujące i wyszukujące Zadaniem algorytmów sortujących jest ułożenie elementów danego zbioru w ściśle określonej kolejności. Najczęściej wykorzystywany jest porządek numeryczny lub leksykograficzny.
Bardziej szczegółowoNiezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.
Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą
Bardziej szczegółowoProgramowanie w VB Proste algorytmy sortowania
Programowanie w VB Proste algorytmy sortowania Sortowanie bąbelkowe Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok siebie i, jeśli jest to potrzebne, zmienianiu ich
Bardziej szczegółowoutworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,
Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz
Bardziej szczegółowoProgramowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44
Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia
Bardziej szczegółowoStruktury Struktura polami struct struct struct struct
Struktury Struktura jest zbiorem zmiennych występujących pod wspólna nazwą. Zmienne wchodzące w skład struktury nazywane są polami lub elementami, a czasem członkami struktury. Struktury używamy, jeśli
Bardziej szczegółowoWstęp do programowania
wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Podprogramy Czasami wygodnie jest wyodrębnić jakiś fragment programu jako pewną odrębną całość umożliwiają to podprogramy.
Bardziej szczegółowoWstęp do programowania. Wykład 1
Wstęp do programowania Wykład 1 1 / 49 Literatura Larry Ullman, Andreas Signer. Programowanie w języku C++. Walter Savitch, Kenrick Mock. Absolute C++. Jerzy Grębosz. Symfonia C++. Standard. Stephen Prata.
Bardziej szczegółowoWprowadzenie do programowania w języku C
Wprowadzenie do programowania w języku C Część piąta Tablice koncepcja, reprezentacja, przetwarzanie Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera
Bardziej szczegółowoDla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.
Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza
Bardziej szczegółowoInicjacja tablicy jednowymiarowej
TABLICE C++ Inicjacja tablicy jednowymiarowej typ_komórek_tablicy nazwa_tablicy [ ilość elementów tablicy ] ; np.: int tablica[1000]; czyli tablica, która może przechowywać tysiąc elementów typu całkowitego,
Bardziej szczegółowoWYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński
WYKŁAD 9 Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c Tomasz Zieliński /* Przyklad 4.1 - SORTOWANIE TABLIC - metoda najprostsza */ #include #define ROZMIAR 11 void
Bardziej szczegółowoPodstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, Materiał
Bardziej szczegółowoĆwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz
Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania Zofia Kruczkiewicz Zakres Podstawowe algorytmy przetwarzania tablic (wypełnianie, porównywanie elementów,
Bardziej szczegółowoFunkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.
Funkcje Deklaracja funkcji typ funkcji identyfikator_funkcji(lista parametrów formalnych); Typ funkcji określa typ wartości zwracanej przez funkcję (typ zdefiniowany pierwotnie jak int, typ zdefiniowany
Bardziej szczegółowodo instrukcja while (wyrażenie);
Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie
Bardziej szczegółowo2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych
2. Tablice Tablica to struktura danych przechowująca elementy jednego typu (jednorodna). Dostęp do poszczególnych elementów składowych jest możliwy za pomocą indeksów. Rozróżniamy następujące typy tablic:
Bardziej szczegółowoC-struktury wykład. Dorota Pylak
C-struktury wykład Dorota Pylak C-struktury W języku C++, jak w każdym języku obiektowym, mamy możliwość definiowania własnych typów danych, wraz z określeniem operacji, jakie na tych danych można wykonywać.
Bardziej szczegółowoKontrola przebiegu programu
Kontrola przebiegu programu Wykład 9 Instrukcje sterujące: pętle rozgałęzienia skoki PRZYPOMINAJKA Zadanie : Zaprojektuj rekurencyjny przepis na wyznaczenie największej takiej liczby m, że 2 m jest podzielnikiem
Bardziej szczegółowoJęzyk C, tablice i funkcje (laboratorium)
Język C, tablice i funkcje (laboratorium) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.
Bardziej szczegółowoLaboratorium 5: Tablice. Wyszukiwanie binarne
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
Bardziej szczegółowo8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.
8. Wektory Przykłady 8.1. Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. Uwaga! Kod poniżej. To zadanie można rozwiązać przy użyciu wiedzy
Bardziej szczegółowoProgramowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41
Programowanie w C++ Wykład 2 Katarzyna Grzelak 5 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Reprezentacje liczb w komputerze K.Grzelak (Wykład 1) Programowanie w C++ 2 / 41 Reprezentacje
Bardziej szczegółowoLiczby całkowite i rzeczywiste
Wykład 4(20 marzec 2014r.) Liczby całkowite i rzeczywiste Paulina Rogowiecka Klaudia Kamińska Adrianna Znyk 1 Spis treści: Czynniki pierwsze metoda próbnych dzieleń Pierwszość liczby naturalnej algorytmy
Bardziej szczegółowoWstęp do programowania
wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych
Bardziej szczegółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski
Bardziej szczegółowoZaprojektować i zaimplementować algorytm realizujący następujące zadanie.
Lista 1 Utworzenie tablicy jest równoznaczne z alokacją pamięci na elementy tablicy (utworzeniem dynamicznej tablicy). W zadaniach należy pamiętać o zwolnieniu zasobów przydzielonych na stercie. Zabronione
Bardziej szczegółowoPodstawy programowania
Podstawy programowania Część trzecia sterujące wykonaniem programu wprowadzenie Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści
Bardziej szczegółowo