• Nie Znaleziono Wyników

podstawy programowania — tablice

N/A
N/A
Protected

Academic year: 2021

Share "podstawy programowania — tablice"

Copied!
122
0
0

Pełen tekst

(1)

Podstawy

Podstawy

programowania

programowania

Tablice — koncepcja, deklaracje,

podstawowe zastosowania

Część czwarta

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. Roman Simiński

roman.siminski@us.edu.pl

www.programowanie.siminskionline.pl

Autor

(2)

Przetwarzanie ciągu liczb

Przetwarzanie ciągu liczb

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 2

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

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.

(3)

Przetwarzanie ciągu liczb

Przetwarzanie ciągu liczb

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 3

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

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?

Analiza

. . . suma = 0; nr_miesiaca = 1; while( nr_miesiaca <= 12 ) { cout << nr_miesiaca << ": "; cin >> dochod; suma += dochod; ++nr_miesiaca; } . . .

W danym przebiegu iteracji pamiętany jest

tylko dochód z bieżącego miesiąca.

(4)

Przetwarzanie ciągu liczb ― musimy pamiętać wszystkie jego elementy

Przetwarzanie ciągu liczb ― musimy pamiętać wszystkie jego elementy

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 4

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Rozwiązanie „siłowe”― niby działa ale...

double dochod1; double dochod2; . . .

double dochod11; double dochod12;

cout << ”1: ”; cin >> dochod1; cout << ”2: ”; cin >> dochod2; . . .

cout << ”12: ”; cin >> dochod12;

suma = dochod1 + dochod2 + ... + dochod11 + dochod12; . . .

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

(5)

Przetwarzanie ciągu liczb ― musimy pamiętać wszystkie jego elementy

Przetwarzanie ciągu liczb ― musimy pamiętać wszystkie jego elementy

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 5

T a b l i c e i i c h w y k o r z y s t a n i e T a b l i c e i i c h w y k o r z y s t a n i e

Świat użytkownika

Świat programisty

1 2 3 4 5 6 7 8 9 10 11 12 Dochód ze stycznia Dochód ze stycznia Dochód z lutego Dochód z lutego Dochód z grudnia Dochód z grudnia

Zsumuj, posortuj, wyświetl

(6)

Przetwarzanie ciągu liczb ― niech numeracja startuje od 0-ra

Przetwarzanie ciągu liczb ― niech numeracja startuje od 0-ra

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 6

T a b l i c e i i c h w y k o r z y s t a n i e T a b l i c e i i c h w y k o r z y s t a n i e

Świat użytkownika

Świat programisty

1 2 3 4 5 6 7 8 9 10 11

0 Dochód ze styczniaDochód ze stycznia

Dochód z lutego

Dochód z lutego

Dochód z grudnia

Dochód z grudnia

Zsumuj, posortuj, wyświetl

Zsumuj, posortuj, wyświetl

Numeracja elementów od wartości 0 Numeracja elementów od wartości 0

(7)

Tablice — zmienne do przechowywania kolekcji danych tego samego typu

Tablice — zmienne do przechowywania kolekcji danych tego samego typu

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 7

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Jak zmagazynować wiele liczb i jednocześnie wygodnie nimi manipulować?

Zmienna składająca się z 12-tu elementów

(„szufladek”). Każda z szufladek jest liczbą

rzeczywistą.

Zmienna składająca się z 12-tu elementów

(„szufladek”). Każda z szufladek jest liczbą

rzeczywistą.

dochody

dochody

1200 1000 1300 500 1500 2000 1200 1800 1000 1400 1500 2300

0 1 2 3 4 5 6 7 8 9 10 11

Każda z szufladek posiada swój unikatowy

numer — od

0

do

11

.

Każda z szufladek posiada swój unikatowy

(8)

Tablice — zmienne do przechowywania kolekcji danych tego samego typu

Tablice — zmienne do przechowywania kolekcji danych tego samego typu

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 8

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Jak zmagazynować wiele liczb i jednocześnie wygodnie nimi manipulować?

double dochody[ 12 ];

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ć:

const int LB_MIESIECY = 12; double dochody[ LB_MIESIECY ];

lub z wykorzystaniem liczby elementów określonej parametrycznie:

dochody

dochody

1200 1000 1300 500 1500 2000 1200 1800 1000 1400 1500 2300

(9)

Tablice — zmienne do przechowywania kolekcji danych tego samego typu

Tablice — zmienne do przechowywania kolekcji danych tego samego typu

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 9

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Deklaracja zmiennej tablicowej — jak to czytać?

double dochody [

LB_MIESIECY

];

Nazwa zmiennej tablicowej

Nazwa zmiennej tablicowej

Typ elementów tablicy

Typ elementów tablicy const int LB_MIESIECY = 12;

Liczba elementów tablicy

Liczba elementów tablicy

Numery elementów tablicy nazywane są indeksami. Pierwszy element tablicy w

językach C/C++ ma zawsze indeks

0

, drugi

1

, itd. … .

(10)

Tablice a element tablicy

Tablice a element tablicy

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 10

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

dochody [ 1 ]

Tablica

Tablica

Element

Element

1 2 3 4 5 6 7 8 9 10 11 0

(11)

Tablice a różne standardy C i C++

Tablice a różne standardy C i C++

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 11

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

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.

(12)

Parametryzacja rozmiaru tablicy — C a C++

Parametryzacja rozmiaru tablicy — C a C++

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 12

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

#define LB_MIES 12

double dochody[ LB_MIES ]; #define MAKS_DL 80

char bufor[ MAKS_DL ];

const int LB_MIES = 12; double dochody[ LB_MIES ]; const int MAKS_DL = 80; char bufor[ MAKS_DL ];

C , ANSI89

C , ANSI89

C++

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... .

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.

(13)

Odwoływanie się do elementów tablicy

Odwoływanie się do elementów tablicy

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 13

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Przypisanie wartości do elementu tablicy

dochody[ 0 ] = 0; dochody[ 2 ] = 1000; dochody[ 10 ] = 2000;

dochody[ 0 ] = 0; dochody[ 2 ] = 1000; dochody[ 10 ] = 2000;

Nazwa zmiennej tablicowej Krócej: nazwa tablicy

Nazwa zmiennej tablicowej Krócej: nazwa tablicy Numer elementu tablicy

Krócej: indeks

Numer elementu tablicy Krócej: indeks

dochody [ 1 ] = 0

Tablica

Tablica

Element

Element

Warto ć wstawiana do

ś

elementu tablicy

Warto ć wstawiana do

ś

(14)

Pojedynczy element tablicy

Pojedynczy element tablicy

dochody

dochody

jest jak zwykła zmienna rzeczywista

jest jak zwykła zmienna rzeczywista

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 14

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Można przypisywać jej wartości

dochody[ 3 ] = 0;

dochody[ 3 ] = 0;

Można wstawić do niej wartość wczytaną z klawiatury

cout << ”Podaj dochód styczniowy: ”;

cin >> dochody[ 0 ];

cout << ”Podaj dochód styczniowy: ”;

cin >> dochody[ 0 ];

Można ją wykorzystywać w wyrażeniach

dochodBrutto = dochody[ 0 ] * 1.22;

dochodBrutto = dochody[ 0 ] * 1.22;

Można wyprowadzić jej wartość do strumienia wyjściowego

cout << 'Dochód styczniowy wynosi: ” << dochody[ 0 ];

cout << 'Dochód styczniowy wynosi: ” << dochody[ 0 ];

(15)

Dzięki tablicom przetwarzanie ciągów liczbowych jest elastyczniejsze

Dzięki tablicom przetwarzanie ciągów liczbowych jest elastyczniejsze

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 15

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Załóżmy że zadeklarowaną zmienną — jest to tzw. zmienna indeksowa

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0;

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0;

Zerowanie wartości wszystkich dochodów — zero do każdego elementu tablicy

int nr_miesiaca;

int nr_miesiaca;

Rozwija się w trakcie wykonania programu w:

dochody[ 0 ] := 0; dochody[ 1 ] := 0; dochody[ 2 ] := 0; dochody[ 3 ] := 0; . . . dochody[ 11 ] := 0; dochody[ 0 ] := 0; dochody[ 1 ] := 0; dochody[ 2 ] := 0; dochody[ 3 ] := 0; . . . dochody[ 11 ] := 0;

(16)

Dzięki tablicom przetwarzanie ciągów liczbowych jest elastyczniejsze

Dzięki tablicom przetwarzanie ciągów liczbowych jest elastyczniejsze

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 16

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0;

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0;

Zatem jedna iteracja zeruje wszystkie elementy tablicy

Dochody

Dochody

Zmienna

nr_miesiaca

maszeruje po kolejnych numerach

elementów tablicy:

0, 1, 2, 3, 4, ..., 11

.

dochody[ nr_miesiaca ] = 0

zeruje kolejne elementy tablicy.

Zmienna

nr_miesiaca

maszeruje po kolejnych numerach

elementów tablicy:

0, 1, 2, 3, 4, ..., 11

.

dochody[ nr_miesiaca ] = 0

zeruje kolejne elementy tablicy.

0 0 0 0 0 0 0 0 0 0 0 0

(17)

Dzięki tablicom przetwarzanie ciągów liczbowych jest elastyczniejsze

Dzięki tablicom przetwarzanie ciągów liczbowych jest elastyczniejsze

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 17

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0;

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0;

Zatem jedna iteracja zeruje wszystkie elementy tablicy

Dochody

Dochody

Zmienna

nr_miesiaca

maszeruje po kolejnych numerach

elementów tablicy:

0, 1, 2, 3, 4, ..., 11

.

dochody[ nr_miesiaca ] = 0

zeruje kolejne elementy tablicy.

Zmienna

nr_miesiaca

maszeruje po kolejnych numerach

elementów tablicy:

0, 1, 2, 3, 4, ..., 11

.

dochody[ nr_miesiaca ] = 0

zeruje kolejne elementy tablicy.

0 0 0 0 0 0 0 0 0 0 0 0

(18)

Wypełnienie tablicy danymi wczytanymi ze strumienia wejściowego

Wypełnienie tablicy danymi wczytanymi ze strumienia wejściowego

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 18

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) {

cout << nr_miesiaca + 1 << ": "; cin >> dochody[ nr_miesiaca ]; }

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) {

cout << nr_miesiaca + 1 << ": "; cin >> dochody[ nr_miesiaca ]; } cout << 1 << ": "; cin >> dochody[ 0 ]; cout << 2 << ": "; cin >> dochody[ 1 ]; cout << 3 << ": "; cin >> dochody[ 3 ]; . . . cout << 12 << ": "; cin >> dochody[ 11 ]; cout << 1 << ": "; cin >> dochody[ 0 ]; cout << 2 << ": "; cin >> dochody[ 1 ]; cout << 3 << ": "; cin >> dochody[ 3 ]; . . . cout << 12 << ": "; cin >> dochody[ 11 ];

(19)

Wyprowadzenie zawartości tablicy do strumienia wyjściowego

Wyprowadzenie zawartości tablicy do strumienia wyjściowego

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 19

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca )

cout << endl << nr_miesiaca + 1 << ”: ” << dochody[ nr_miesiaca ];

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca )

cout << endl << nr_miesiaca + 1 << ”: ” << dochody[ nr_miesiaca ];

cout << endl << 1 << ”: ” << dochody[ 0 ]; cout << endl << 2 << ”: ” << dochody[ 1 ]; cout << endl << 3 << ”: ” << dochody[ 2 ]; .

. .

cout << endl << 12 << ”: ” << dochody[ 11 ];

cout << endl << 1 << ”: ” << dochody[ 0 ]; cout << endl << 2 << ”: ” << dochody[ 1 ]; cout << endl << 3 << ”: ” << dochody[ 2 ]; .

. .

cout << endl << 12 << ”: ” << dochody[ 11 ];

(20)

Sumowanie elementów tablicy

Sumowanie elementów tablicy

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 20

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

for( suma = 0, nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) suma += dochody[ nr_miesiaca ];

for( suma = 0, nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) suma += dochody[ nr_miesiaca ];

suma += dochody[ 0 ]; suma += dochody[ 1 ]; suma += dochody[ 2 ]; . . . suma += dochody[ 11 ]; suma += dochody[ 0 ]; suma += dochody[ 1 ]; suma += dochody[ 2 ]; . . . suma += dochody[ 11 ];

(21)

Ogólny schemat iteracyjnego przetwarzania tablic

Ogólny schemat iteracyjnego przetwarzania tablic

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 21

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

for( i = 0; i < LB_ELEM_TABLICY; ++i )

Jaka operacja na elemencie i-tym tablicy t:

ś

t[ i ]

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!

ę

ę

for(

int i = 0

; i < LB_ELEM_TABLICY; ++i )

Jaka operacja na elemencie i-tym tablicy t: t[ i ]

ś

(22)

Pierwsza przymiarka do programu — jeszcze bez porządkowania tablicy

Pierwsza przymiarka do programu — jeszcze bez porządkowania tablicy

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 22

T a b l i c e i i c h w y k o r z y s t a n i e T a b l i c e i i c h w y k o r z y s t a n i e #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 ]; }

#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

(23)

Pierwsza przymiarka do programu — jeszcze bez porządkowania tablicy

Pierwsza przymiarka do programu — jeszcze bez porządkowania tablicy

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 23

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

// 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; }

// 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/22/2

(24)

Uwaga — pierwsza optymalizacja

Uwaga — pierwsza optymalizacja

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 24

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

// 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 ]; }

// 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.

W tym przypadku zerowanie tablicy można pominąć. Za chwilę w całości zostanie wypełniona danymi wczytanymi ze strumienia wejściowego programu.

(25)

Uwaga — eliminacja zbędnej iteracji

Uwaga — eliminacja zbędnej iteracji

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 25

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

// 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 ]; }

// 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 ]; }

// 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 ]; }

(26)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 26

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Jak uporządkować tablicę dochodów?

Jak uporządkować tablicę dochodów?

Jak to ułożyć te liczby

w kolejności

rosnącej?

dochody

dochody

500 1000 1000 1200 1200 1300 1400 1500 1500 1800 2000 2300 0 1 2 3 4 5 6 7 8 9 10 11

dochody

dochody

1200 1000 1300 500 1500 2000 1200 1800 1000 1400 1500 2300 0 1 2 3 4 5 6 7 8 9 10 11

(27)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 27

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Jak uporządkować tablicę dochodów — sortowanie

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

(28)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 28

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

Wśród nieuporządkowanych elementów będziemy wyszukiwać najmniejszy i

odkładać go do puli uporządkowanych.

(29)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 29

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

Wybieramy element minimalny

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

(30)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 30

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

Przenosimy do zbioru elementów uporządkowanych

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

(31)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 31

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

Z pozostałych, nieuporządkowanych elementów wybieramy minimalny

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

(32)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 32

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

Przenosimy do zbioru elementów uporządkowanych

4

(33)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 33

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

4

4

(34)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 34

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

4

4

Przenosimy do zbioru elementów uporządkowanych

5

(35)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 35

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

4

4

5

5

(36)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 36

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

4

4

5

5

Przenosimy do zbioru elementów uporządkowanych

6

(37)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 37

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

4

4

5

5

6

6

(38)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 38

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

4

4

5

5

6

6

8

8

(39)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 39

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

4

4

5

5

6

6

8

8

(40)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 40

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

4

4

5

5

6

6

8

8

9

9

(41)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 41

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

4

4

5

5

6

6

8

8

9

9

Dwa zbiory, dwie

„półki” na elementy...

(42)

Podstawy programowania

Podstawy programowania

Copyright © Roman Simiński Strona : 42

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Sortowanie przez wybieranie — koncepcja

Sortowanie przez wybieranie — koncepcja

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane

1

1

Elementy uporządkowane

4

4

5

5

6

6

8

8

9

9

A może użyć tylko

jednej „półki”?

(43)

Copyright © Roman Simiński Strona : 43 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane T a b l i c e i i c h w y k o r z y s t a n i e T a b l i c e i i c h w y k o r z y s t a n i e

(44)

Copyright © Roman Simiński Strona : 44 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

Wybieramy element minimalny...

1

1

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane T a b l i c e i i c h w y k o r z y s t a n i e T a b l i c e i i c h w y k o r z y s t a n i e

(45)

Copyright © Roman Simiński Strona : 45 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

... i przenosimy na początek części nieuporządkowanej...

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane

1

1

T a b l i c e i i c h w y k o r z y s t a n i e T a b l i c e i i c h w y k o r z y s t a n i e

(46)

Copyright © Roman Simiński Strona : 46 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

… ale co zrobić z elementem, który jest na początku?

4

4

8

8

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane

1

1

T a b l i c e i i c h w y k o r z y s t a n i e T a b l i c e i i c h w y k o r z y s t a n i e

(47)

Copyright © Roman Simiński Strona : 47 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

A może po prostu zamienić ze sobą elementy... ?

4

4

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane

1

1

8

8

T a b l i c e i i c h w y k o r z y s t a n i e T a b l i c e i i c h w y k o r z y s t a n i e

(48)

Copyright © Roman Simiński Strona : 48 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

A może po prostu zamienić ze sobą elementy... ?

4

4

1

1

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane

8

8

T a b l i c e i i c h w y k o r z y s t a n i e T a b l i c e i i c h w y k o r z y s t a n i e

(49)

Copyright © Roman Simiński Strona : 49 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

Teraz najmniejszy element jest na swoim miejscu. On jest już „uporządkowany”.

4

4

1

1

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane

8

8

T a b l i c e i i c h w y k o r z y s t a n i e T a b l i c e i i c h w y k o r z y s t a n i e

(50)

Copyright © Roman Simiński Strona : 50 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

4

4

1

1

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane

8

8

Z pozostałych, nieuporządkowanych elementów wybieramy minimalny.

T a b l i c e i i c h w y k o r z y s t a n i e

(51)

Copyright © Roman Simiński Strona : 51 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

4

4

1

1

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane

8

8

Przenosimy na początek części nieuporządkowanej.

T a b l i c e i i c h w y k o r z y s t a n i e

(52)

Copyright © Roman Simiński Strona : 52 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

8

8

1

1

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane

4

4

Teraz znaleziony element jest na swoim miejscu. Rozrasta się część uporządkowana.

T a b l i c e i i c h w y k o r z y s t a n i e

(53)

Copyright © Roman Simiński Strona : 53 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

8

8

1

1

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane

4

4

Z pozostałych, nieuporządkowanych elementów wybieramy minimalny. W tym

przypadku jest on akurat na swoim miejscu.

T a b l i c e i i c h w y k o r z y s t a n i e

(54)

Copyright © Roman Simiński Strona : 54 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

8

8

1

1

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane

4

4

Teraz znaleziony element jest na swoim miejscu. Rozrasta się część uporządkowana.

T a b l i c e i i c h w y k o r z y s t a n i e

(55)

Copyright © Roman Simiński Strona : 55 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

8

8

1

1

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane

4

4

Z pozostałych, nieuporządkowanych elementów wybieramy minimalny.

T a b l i c e i i c h w y k o r z y s t a n i e

(56)

Copyright © Roman Simiński Strona : 56 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

8

8

1

1

5

5

9

9

6

6

Elementy nieuporządkowane Elementy uporządkowane

4

4

Przenosimy na początek części nieuporządkowanej.

T a b l i c e i i c h w y k o r z y s t a n i e

(57)

Copyright © Roman Simiński Strona : 57 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

8

8

1

1

5

5

6

6

9

9

Elementy nieuporządkowane Elementy uporządkowane

4

4

Teraz znaleziony element jest na swoim miejscu. Rozrasta się część uporządkowana.

T a b l i c e i i c h w y k o r z y s t a n i e

(58)

Copyright © Roman Simiński Strona : 58 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

8

8

1

1

5

5

6

6

9

9

Elementy nieuporządkowane Elementy uporządkowane

4

4

Z pozostałych, nieuporządkowanych elementów wybieramy minimalny.

T a b l i c e i i c h w y k o r z y s t a n i e

(59)

Copyright © Roman Simiński Strona : 59 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

8

8

1

1

5

5

6

6

9

9

Elementy nieuporządkowane Elementy uporządkowane

4

4

Przenosimy na początek części nieuporządkowanej.

T a b l i c e i i c h w y k o r z y s t a n i e

(60)

Copyright © Roman Simiński Strona : 60 Podstawy programowania

Podstawy programowania

Sortowanie przez wybieranie — tylko jedna „półka”

Sortowanie przez wybieranie — tylko jedna „półka”

9

9

1

1

5

5

6

6

8

8

Elementy nieuporządkowane Elementy uporządkowane

4

4

Wszystkie elementy — za wyjątkiem ostatniego — są uporządkowane... to znaczy, że

i ostatni jest na swoim miejscu.

T a b l i c e i i c h w y k o r z y s t a n i e

(61)

Copyright © Roman Simiński Strona : 61 Podstawy programowania

Podstawy programowania

Zanim posortujemy — wyszukiwanie minimum, przypomnienie

Zanim posortujemy — wyszukiwanie minimum, przypomnienie

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

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; }

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; }

(62)

Copyright © Roman Simiński Strona : 62 Podstawy programowania

Podstawy programowania

Zanim posortujemy — wyszukiwanie minimum, przypomnienie

Zanim posortujemy — wyszukiwanie minimum, przypomnienie

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

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;

}

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;

(63)

Copyright © Roman Simiński Strona : 63 Podstawy programowania

Podstawy programowania

Sortowanie — krok pierwszy

Sortowanie — krok pierwszy

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

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;

}

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...

Sortowanie polega na wyznaczaniu minimum spośród jeszcze nieposortowanych. Początek części

(64)

Copyright © Roman Simiński Strona : 64 Podstawy programowania

Podstawy programowania

Sortowanie — krok pierwszy

Sortowanie — krok pierwszy

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

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;

}

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;

(65)

Copyright © Roman Simiński Strona : 65 Podstawy programowania

Podstawy programowania

Sortowanie — krok pierwszy

Sortowanie — krok pierwszy

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

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;

}

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. 22-23 w miejsce czerwonego komentarza

(66)

Copyright © Roman Simiński Strona : 66 Podstawy programowania

Podstawy programowania

Suplement — „kompresja” iteracji

Suplement — „kompresja” iteracji

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Poniższa iteracja:

może być zapisana w krótszej postaci:

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0;

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; ++nr_miesiaca ) dochody[ nr_miesiaca ] = 0;

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; dochody[ nr_miesiaca++ ] = 0 ) ;

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; dochody[ nr_miesiaca++ ] = 0 ) ;

(67)

Copyright © Roman Simiński Strona : 67 Podstawy programowania

Podstawy programowania

Suplement — „kompresja” iteracji

Suplement — „kompresja” iteracji

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

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++; ...

(68)

Copyright © Roman Simiński Strona : 68 Podstawy programowania

Podstawy programowania

Suplement — „kompresja” iteracji

Suplement — „kompresja” iteracji

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

Uwaga! Średnika nie można pominąć — oznacza on instrukcję pustą.

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; dochody[ nr_miesiaca++ ] = 0 ) ;

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; dochody[ nr_miesiaca++ ] = 0 ) ;

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; nr_miesiaca++ ) suma += dochody[ nr_miesiaca ];

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; nr_miesiaca++ ) suma += dochody[ nr_miesiaca ];

Inny przykład:

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; suma += dochody[ nr_miesiaca++ ] ) ;

for( nr_miesiaca = 0; nr_miesiaca < LB_MIESIECY; suma += dochody[ nr_miesiaca++ ] ) ;

(69)

Copyright © Roman Simiński Strona : 69 Podstawy programowania

Podstawy programowania

Suplement — „kompresja” iteracji

Suplement — „kompresja” iteracji

T a b l i c e i i c h w y k o r z y s t a n i e

T a b l i c e i i c h w y k o r z y s t a n i e

nr_miesiaca = LB_MIESIECY; while( --nr_miesiaca >= 0 ) dochody[ nr_miesiaca ] = 0;

Gdy kolejność wykonywania operacji na tablicy nie ma znaczenia, np. iteracja while:

for( nr_miesiaca = LB_MIESIECY; --nr_miesiaca>=0 ; tab[ nr_miesiaca ] = 0 ) ;

(70)

Copyright © Roman Simiński Strona : 70

Napisać program rejestrujący czasy przejazdu

zawodników startujących w slalomie.

Wymagania dla programu:

Liczba zawodników — zwykle 30.

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.

Wpisywanie danych na bieżąco, wyniki po

wpisaniu wszystkich czasów.

Podstawy programowania

Podstawy programowania T a b l i c e i i c h w y k o r z y s t a n i eT a b l i c e i i c h w y k o r z y s t a n i e

Problem do rozwiązania — statystyka czasów przejazdu slalomu

Problem do rozwiązania — statystyka czasów przejazdu slalomu

(71)

Copyright © Roman Simiński Strona : 71

Na wejściu mamy

30

-ci liczb rzeczywistych — każdy z nich to czas

przejazdu odpowiedniego zawodnika.

• • • 1 2 3 30 14.5 14.8 13.5 • • • 16 1 2 3 30 Podstawy programowania Podstawy programowania T a b l i c e i i c h w y k o r z y s t a n i eT a b l i c e i i c h w y k o r z y s t a n i e

Analiza problemu — co mamy na wejściu?

Analiza problemu — co mamy na wejściu?

(72)

Copyright © Roman Simiński Strona : 72

Czasy przejazdów

30

zawodników startujących w slalomie można zapamiętać

w

30

-to elementowej tablicy.

• • • 1 2 3 30 14.5 14.8 13.5 • • • 16 // Liczba zawodnikow

const int LB_ZAWOD = 30;

// Tablica do przechowywania czasow

double czasy[ LB_ZAWOD ];

0 1 2 29

Podstawy programowania

Podstawy programowania T a b l i c e i i c h w y k o r z y s t a n i eT a b l i c e i i c h w y k o r z y s t a n i e

Analiza problemu — jak zapamiętać dane wejściowe?

Analiza problemu — jak zapamiętać dane wejściowe?

(73)

Copyright © Roman Simiński Strona : 73 14.5 14.8 13.5 • • • 16 0 1 2 29 13.5 14.5 14.8 • • • 16 Dane wejściowe Dane wejściowe Dane uporządkowane Dane uporządkowane

Sortowanie

Sortowanie

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.

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.

Wystarczy wykorzystać dowolny z algorytmów sortowania — dla

30

elementów może

to być jakikolwiek z prostych algorytmów sortowania.

0 1 2 29

Podstawy programowania

Podstawy programowania T a b l i c e i i c h w y k o r z y s t a n i eT a b l i c e i i c h w y k o r z y s t a n i e

Analiza problemu — czasy należy uporządkować narastająco

Analiza problemu — czasy należy uporządkować narastająco

(74)

Copyright © Roman Simiński Strona : 74

Czasy tworzą ciąg

30

-stu danych liczbowych. Załóżmy, że tych liczb jest n.

a

śr

=

a

1

+ a

2

+ a

3

+ … + a

n

n

to środkowy wyraz ciągu (dla n nieparzystego),

to średnia arytmetyczna środkowych wyrazów ciągu (dla n parzystego).

Mediana uporządkowanego rosnąco ciągu n liczb a

1

a

2

a

3

a

n

:

Średnia arytmetyczna a

śr

to:

Możemy wtedy powiedzieć, że mamy n danych liczbowych

a

1

, a

2

, a

3

, ..., a

n

.

Podstawy programowania

Podstawy programowania T a b l i c e i i c h w y k o r z y s t a n i eT a b l i c e i i c h w y k o r z y s t a n i e

Analiza problemu — statystyka czasów, średnia i mediana

Analiza problemu — statystyka czasów, średnia i mediana

Obraz

Tablica Element Element
Tablica Element Element
Tablica jak magazyn dla punktów każdej z konkurencjiTablica jak magazyn dla punktów każdej z konkurencji
Tablica dwuwymiarowa to inaczej tablica, której elementami są tablice:
+2

Cytaty

Powiązane dokumenty

[r]

23. Dana jest liczba rzeczywista a. Niech P będzie dowolnym punktem wewnątrz czworokąta wypukłego ABCD. Udowod- nij, że środki ciężkości trójkątów 4P AB, 4P BC, 4P CD, 4P

, n} tak, by dla każdych trzech wierzchołków A, B, C, dla których |AB| = |AC|, liczba przy wierzchołku A była albo mniejsza, albo wi e , ksza od jednocześnie obu liczb

Zadanie 13. Oba gazy przereagowały całkowicie. Napisz równanie reakcji i oblicz liczbę cząsteczek otrzymanego produktu z dokładnością do drugiego miejsca po

Tolerancja jest logicznym następstwem przyjętego stanowiska normatywnego, jeśli to stanowisko obejmuje jedno z poniższych przekonań: (1) co najmniej dwa systemy wartości

[r]

Dobrze – gdyż przy okazji nauczyłeś się zapewne używania prostych funkcji (np. matematycznych) czy używania układu współrzędnych. Źle – bo programowanie może ci się

Podlaski Konkurs Matematyczny 2006 Zadania przygotowawcze - klasy drugie..