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