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.

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** (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 i obecnościami - 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)

# 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żo po uczelni**

```
#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!"_