Wprowadzenie do programowania w C++

How C++ is like teenage sex:

  1. It is on everyone's mind all the time.
  2. Everyone talks about it all the time.
  3. Everyone thinks everyone else is doing it.
  4. Almost no one is really doing it.
  5. The few who are doing it are: A. Doing it poorly. B. Sure it will be better next time. C. Not practising it safely.
Ciekawostka

Nieco przewrotny Wywiad z twórcą C++ ;-)

Typy

Lista typów wbudowanych w standard C++

NazwaOpisRozmiar
char Znak, albo mała liczba całkowita 1 bajt
short int
(short)
Mała liczba całkowita 2 bajty
int Liczba całkowita 4 bajty
long int
(long)
Długa liczba całkowita 4 bajty
bool Wartość true albo false 1 bajt
float Liczba zmiennoprzecinkowa 4 bajty
double Liczba zmiennoprzecinkowa podwójnej precyzji 8 bajtów
long double Duża liczba zmiennoprzecinkowa podwójnej precyzji 12 bajtów
void Pusty typ danych

Typy char, short, int, long int posiadają warianty signed i unsigned.

Instrukcje sterujące

W C++ dostępne są następujące instrukcje sterujace:

  • instrukcja warunkowa if … else …
  • instrukcja warunkowa switch … case
  • pętla while
  • pętla do … while
  • pętla for
  • break - przerywa aktualną pętlę
  • continue - kontynuuje pętlę przechodząc do następnej iteracji
  • return

Funkcje

  1. Główną funkcją każdego programu jest funkcja main().
    • musi ona zwracać typ int
    • może przyjmować dwa parametry: int argc, char* argv[], oznaczające odpowiednio liczbę parametrów przekazanych do programu i listę tych parametrów. Zerowym parametrem jest zawsze nazwa programu.
  2. Pisanie funkcji można rozdzielić na dwie fazy:
    • opcjonalna deklarację (tworzenie tzw. prototypu funkcji):
      double potega(double);
    • definicję:
      double potega(double liczba){
        return liczba*liczba;
      }
  3. Domyślnym typem zwracanym (jeśli nie określono) jest int.
  4. Brak określenia typu zwracanego przez funkcję w jej definicji jest błędem składniowym jeśli prototyp określa typ zwracany inny niż int
  5. Zapomnienie o zwróceniu wartości z funkcji, która zadeklarowana została jako zwracająca wartość, jest błędem składniowym.
  6. Funkcje rozróżniane są po nazwie i liście parametrów, a nie po zwracanym typie. Dlatego nie można zdefiniować dwóch funkcji o takich samych nazwach i liście parametrów a innych zwracanych typach:
    // NIEPOPRAWNIE
    void foo(int a, int b){...}
    double foo(int c, int d){...}

Tablice

Tablice jednowymiarowe

Tablice jednowymiarowe w C++ można deklarować na cztery sposoby:

  1. Deklarując jedynie rozmiar tablicy, bez podawania jej elementów:
    int tab[100];
  2. Deklarując rozmiar i podając elementy tablicy:
    int tab[5] = {1,2,3,4,5};
  3. Deklarując rozmiar, ale nie podając wartości wszystkich elementów:
    int tab[10] = {1,2,3,4,5};
  4. Podając listę elementów a nie podając rozmiaru tablicy:
    int tab[] = {1,2,3,4,5};

Tablice wielowymiarowe

Tablice wielowymiarowe deklaruje się analogicznie do jednowymiarowych, jednakże podczas deklaracji tablicy wielowymiarowej konieczne jest podanie rozmiarów wymiarów, poza pierwszym:

//Poprawnie
int tab[][4] = {{1,2,3,4},{5,6,7,8}};
 
//NIEPOPRAWNIE
int tab[][] = {{1,2,3,4},{5,6,7,8}};

Definiując funkcję, której parametrem jest tablica wielowymiarowa, również konieczne jest podanie wszystkich rozmiarów wymiarów, poza pierwszym:

void foo(int tab[][10]){
...
}

Prosty program w C++

Przykład

Program ma za zadanie wczytanie imienia i wyświetlenie powitania na ekranie.

// W pliku o nazwie program.cpp 
#include <iostream> // Dołączamy bibliotekę odpowiedzialna za
                    // operacje wejścia i wyjścia
 
using namespace std;
 
int main(int argv, char* arg[]){
  char imie[20];
  cout << "Podaj swoje imie: ";
  cin >> imie;
  cout << "Witaj " << imie << endl;
  return 0;
}

Jak kompilujemy

W konsoli

g++ program.cpp -o program

Omówienie

Warto zauważyć:

  • Nie jest wymagane podanie rozszerzenia biblioteki iostream.
  • Biblioteka iostream jest ekwiwalentem znanej z C biblioteki stdio. C++ wprowadza strumienie za pomocą których odbywają się wszystkie operacje wejścia/wyjścia.
  • Przekierowanie danych do/ze strumienia możliwe jest dzięki operatorom « oraz ». Obiektem strumienia odpowiedzialnym za wyświetlanie na ekranie jest cout natomiast cin jest to strumień wejściowy.
  • using namespace std określa, że korzystamy z przestrzeni nazw std z biblioteki iostream.

Ćwiczenia

  1. Skompiluj i uruchom przykład z sekcji Prosty program w C++
  2. [1 plus] Napisz program obliczający silnię. Silnia powinna być obliczana przez funkcję
    int silnia(int);

    Wykonaj dwie wersje funkcji:

    • rekurencyjną
    • iteracyjną
  3. [2 plusy] Wyświetlanie napisu wspak. Napisz funkcję która jako parametr będzie przyjmowała tablicę znaków i wyświetlała ją wspak. Funkcja powinna być rekurencyjna! Podpowiedź: przerwij rekurencję po napotkaniu zerowego znaku końcowego \0.
  4. [2 punkty] Napisz funkcję palindrom, sprawdzającą czy podany jako parametr napis jest palindromem. Funkcja powinna zwracać true gdy napis jest palindromem, a false gdy nie jest.
    Napisz proste menu posiadające dwie opcje: Wyjście i Sprawdź palindrom. Po wybraniu Sprawdź palindrom program powinien poprosić o wpisanie słowa a następnie sprawdzić i wyświetlić na ekranie czy podane słowo jest palindromem. Po wybraniu Wyjście program powinien kończyć działanie.
  5. [2 plusy] Napisz funkcję która będzie przyjmować tablicę dwuwymiarową o rozmiarach 10 na 10 i będzie uzupełniać ją iloczynami wierszy i kolumn, tworząc tabliczkę mnożenia. Napisz osobną funkcję do wyświetlania tej tablicy.
  6. [3 punkty] Zadanie 4.24 do pobrania tutaj. Zadanie znajduje się w książce Arkana C++.
pl/dydaktyka/jimp2/2016/labs/wprowadzenie.txt · ostatnio zmienione: 2017/07/17 08:08 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0