Laboratorium 6 ============== Sprawozdaniem z tego laboratorium będą kody źródłowe programów, które na nich opracujesz. Po zakończeniu laboratorium wysyłasz na adres podany na końcu tej instrukcji. Instrukcja dla wszystkich jest taka sama. Zadania wykonujesz w pojedynkę. Staraj się nie korzystać z pomocy kolegów. Rzeczy oznaczone tak, jak poniżej, dotyczą tego, co masz zawrzeć w sprawozdaniu. Na przykład: Zapisz swoje imię, nazwisko, adres e-mail, kierunek i rok studiów oraz grupę laboratoryjną i numer albumu. Podaj również numer zajęć laboratoryjnych (nr 6). # Ogłoszenia parafialne * Zaliczenie planowo **22 czerwca 2017 o 16:15** (tak, mamy wtedy tydzień A). * Na zaliczeniu nie będzie dopuszczalne korzystanie z [żadnych materiałów pomocnicznych](http://krk.prz.edu.pl/karta.pl?mk=3672&format=html&C=2017). * Zaliczenie będzie teoretyczno-praktyczne. Wynikiem pracy będzie kod komputerowy (należy pozostawić włączony komputer po zakończeniu pracy), oraz pisemna praca zaliczeniowa - odpowiedź na zadane pytania i rozwiązania zadań. * Za ściąganie od kolegów na zaliczeniu naprawdę się wkurzę. * 24 czerwca 2017 do 2 lipca 2017 nie ma mnie w kraju. **Wręcz _błagam_** o wysłanie sprawozdań **dużo** wcześniej - nie będę mógł Państwu dać inaczej zaliczenia, co może skutkować przegapieniem zerówki/pierwszego terminu, a jest to _naprawdę zły pomysł_. * Jeśli coś umknęło mi na rozpisce z ocenami, obecnościami, sprawozdaniami - proszę sprawdzić i pilnować mnie. Musicie Państwo sami sobie przypilnować porządku w papierach, a samodzielność i samosterowność to ważne cechy każdego inżyniera. Można to zrobić poprzez umieszczenie komentarza w arkuszu Google Sheets. Jeśli Państwo nie macie linka - proszę o kontakt mailowy na [piotr.maslanka@henrietta.com.pl](mailto:piotr.maslanka@henrietta.com.pl) * W razie potrzeby można przyjść na konsultacje. Terminy są podane na [stronie katedry](http://office.prz-rzeszow.pl/index.php?action=konsultacje_dknt). Pomagam [nie](https://www.linkedin.com/in/piotr-ma%C5%9Blanka-86200883/) [tylko](https://github.com/piotrmaslanka/) z _Informatyką II_. Jeśli to możliwe, proszę uprzednio uprzedzić mnie mailem o zamiarze skorzystania z konsultacji. Jeśli Państwo chcieliby skorzystać z konsultacji, ale nie pasowały terminy, proszę również o kontakt. # Szybka powtórka --- _Jeśli C daje ci dość liny, by się powiesić, to C++ daje ci dość liny by związać i zakneblować swojego sąsiada, postawić żagle na małym statku i mieć jeszcze dość liny by powiesić się na rei_ - anonimowe, [The UNIX-HATERS Handbook](http://simson.net/ref/ugh.pdf) --- Na tych zajęciach utrwalisz swoje wiadomości z zakresu programowania w języku C++, pisząc kilka prostych programów. Pamiętaj, aby każdy program umieścić w osobnym pliku. Unikniesz w ten sposób zamętu. ## Program 1: sortowanie bąbelkowe Sortowanie bąbelkowe to najprostszy algorytm sortowania. Oczywiście, nie jest on stosowany w praktyce - posortowanie nim X elementów wymaga X-kwadrat operacji. Polega ona na porównaniu ze sobą każdego elementu (każdy z każdym - stąd kwadratowa złożoność algorytmu). Jeśli algorytm ustali, że elementy nie są po kolei, po prostu zamieni je ze sobą. Ponieważ będziesz musiał porównać każdy element z każdym, potrzebne będą ci dwie pętle for - każda z osobną zmienną iteracyjną. Wystartuj od takiego kodu: ``` #include <iostream> using namespace std; int main() { int items[] = {3,7,5,4,8,2,1}; for (int i=0; i<7; i++) { for (int j=0; j<7; j++) { ... } } cout << "Posortowane elementy to" << endl; for (int i=0; i<7; i++) { cout << " " << items[i]; } cout << endl; } ``` Postaraj się go uzupełnić tak, aby program wypisał liczby w odpowiedniej kolejności. Musisz posortować tablicę `items`. Uważaj na porównywanie elementu z samym sobą - sprawdź odpowiednio `i` oraz `j` - w razie czego użyj `continue`. ## Program 2: równanie kwadratowe Napisz program, wczytujący z `cin` klawiatury współczynniki A, B, C równania kwadratowego Ax*x + Bx + C = 0 a następnie wypisujące na `cout` rozwiązania w dziedzinie liczb rzeczywistych. ## Program 3: statystyka Napisz program, który najpierw wczyta liczbę całkowitą N z `cin`. Następnie, program wczyta N liczb. Program musi wyświetlić ich sumę, średnią arytmetyczną, wariancję i odchylenie standardowe. Najpewniej wymagane będzie użycie operatorów `new` oraz `delete`. Sprawdź w sieci Web, w jaki sposób one działają. Innymi słowy, musisz utworzyć _dynamiczną tablicę_ (ang. dynamic array). Dodatkowe operacje matematyczne sprawdź [tu](http://www.cplusplus.com/reference/cmath/). # Wyślij sprawozdanie Ze względu na ćwiczeniowy charakter tego sprawozdania, wysłać proszę jedynie kompletny kod opracowanych programów. # Po godzinach - ewolucja programisty **Świeżak** ``` #include <stdio.h> int main (int argc, char **argv) { printf ("Hello World!\n"); } ``` **Weteran** ``` #include <stream.h> const int MAXLEN = 80; class outstring { private: int size; char str[MAXLEN]; public: outstring() { size=0; } ~outstring() {size=0;} void print(); void assign(char *chrs); }; void outstring::print() { int i; for (i=0 ; i< size ; i++) cout << str[i]; cout << "\n"; }; void outstring::assign(char *chrs) { int i; for (i=0; chrs[i] != '\0';i++) str[i] = chrs[i]; size=i; }; main (int argc, char **argv) { outstring string; string.assign("Hello World!"); string.print(); } ``` **Menedżer** _Stefan, potrzebuję na jutro program wypisujący "Hello World!"_