Skip to content

Latest commit

 

History

History
395 lines (303 loc) · 7.16 KB

File metadata and controls

395 lines (303 loc) · 7.16 KB

Céé plus plus

13. hodina

Práce se soubory2

void countWords()
{
	ifstream inFile;
	inFile.open("ustava.txt");   // otevřu soubor pro čtení
    
    string word;
    
    while (inFile >> word) {
        // do fancy stuff with word
    }
}

12. hodina

Práce se soubory

  1. otevření souboru pro čtení
#include <iostream>
#include <fstream>

ifstream odkazNaSoubor;
odkazNaSoubor.open("vstupniSoubor.txt");
  1. otevření souboru pro zápis
#include <iostream>
#include <fstream>

ofstream odkazNaSoubor;
odkazNaSoubor.open("vystupniSoubor.txt");
  1. zavření souboru
odkazNaSoubor.close();
  1. přepis souboru
if (inFile.is_open()) {
	    while ( getline (inFile, line) ) {
	      outFile << line;
	    }	    
}

Fce na nahrazení

string do_replace( string const & in, string const & from, string const & to )
{
  return regex_replace( in, std::regex(from), to );
}
  • použití:
danyText = do_replace(danyText, "co", "čím");

10. hodina

Opakování

  1. funkce int divide3(int a, int b, int c):
cout << divide3(25, 5, 5);
> 1
  1. funkce int sumAll(int arr[], int len), sečte všechny prvky pole:
int len = 5;
int a[len] = {2, 4, 6, 1, 4};
cout << sumAll(a, len);
> 17
  1. funkce int multiplyAll(int arr[], int len), snásobí všechny prvky pole:
int len = 5;
int a[len] = {2, 4, 6, 1, 4};
cout << multiplyAll(a, len);
> 192

9. hodina

CPU, RAM & friends

+ opakování základů:

  1. funkce int sumup3(int a, int b, int c):
cout << sumup3(4, 5, 10);
> 19
  1. funkce int multiply(int a, int b, int c):
cout << multiply(4, 5, 10);
> 200

8. hodina

Rekurze 2

Úlohy

  1. funkce, co vypíše n-té číslo z pole intů: void printVal(int arr[], int index, int arrLen)
int arr[5] = {2, 4, 12, -1, 5};

printVal(arr, 2, 5);
printVal(arr, 0, 5);
> 12
> 2
  1. uprav funkci printVal(), co vypíše celé pole OD n-tého čísla po konec: void printVal(int arr[], int index, int arrLen)
int arr[5] = {2, 4, 12, -1, 5};

printVal(arr, 2, 5);
printVal(arr, 0, 5);
> 12 -1 5
> 2 4 12 -1 5
  1. uprav fci printVal(), aby vypisovala pole v opačném pořadí

7. hodina

Rekurze

Rekurze

Skutečnější příklad rekurze: zeptám se na malinko jednodušší problém někoho jiného a pak dám dohromady odpověď

Rekurze2

Úlohy

  1. Násobení čísel přičítáním: int multiply(int multiplicand , int base)
    • Myšlenka: 4 × 6 = 6 + 6 + 6 + 6 (tzn. čtyřikrát sečteno číslo 6)
    • Obecně: 5 × 13 = 13 + 4 × 13 = 13 + 13 + 3 × 13 = ... = 13 + 13 + 13 + 13 + 13
    • Příklad:
multiply(3, 6);
> 18
  1. Sčítání přičítáním jedničky: int addBy1(int amount, int base)
    • Myšlenka: 4 + 6 = 1 + (3 + 6) = 1 + 1 + (2 + 6) = 12 (tzn. čtyřikrát přičtena jednička)
addBy1(3, 6);
> 9
  1. Faktoriál: int factorial(int base)

    • Faktorál n je součin n a všech přirozených čísel menších než n:
    • Faktoriál 7 = 7 × 6 × 5 × 4 × 3 × 2 × 1 = 7!
    • Faktoriál 10 = 10 × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 10!
  2. Najít maximum v poli: int maxArray(int arr[])

    • Zamyslet se nad rychlostí vyhledávání (kolikrát musím porovnávat?)

6. hodina

  1. vytvořit fci na vypsání pole void printArr(int arr[])

5. hodina

  1. dodělat fce z minulé hodiny alespoň po 4. (void drawTriangle(int smallSide))
  2. ??? MYSTERY ???

4. hodina

  1. naprogramovat void drawLine(int length)
drawLine(5);
> #####
  1. naprogramovat void drawSquare(int side)
drawSquare(3);
> ###
> ###
> ###
  1. naprogramovat void drawRectangle(int a, int b)
drawRectangle(2, 4);
> ##
> ##
> ##
> ##
  1. naprogramovat void drawTriangle(int smallSide)
drawTriangle(4);
> #
> ##
> ###
> ####
  1. naprogramovat void drawTriangle2(int smallSide)
drawTriangle2(4);
> ####
>  ###
>   ##
>    #
  1. naprogramovat void drawCross(int size)
drawCross(5);
> #   #
>  # #
>   #
>  # #
> #   #
  1. naprogramovat void drawCircle(int radius)
drawRadius(5);
>   ##
> ######
> ######
>   ##

3. hodina

C++ Cheatsheet

Proměnné

Vytvoření proměnných celeCislo, desCislo, vDesCislo, znak a retezec:

int celeCislo = 5;		    // datovy typ int znaci cele cislo
float desCislo = 3.141592;	// datovy typ float znaci desetinne cislo
double vDesCislo = 2.718281;  // dat. typ double pojme velmi male i velmi velka cisla
char znak = 'r';
string retezec = "Klidne cela veta."; // dat. typ na mnoho znaku, potreba #include <string>

Podmínky

Slouží k větvení kódu ‒ když chci, aby se kus kódu spustil v závislosti na proměnných | obecně:

if (podmínka1) {
	když *platí* podmína1 ‒> proveď tento blok
} else if (podmínka2) {
	když *platí* podmínka2 ‒> proveď tento blok
} else {
	když *neplatí* ani jedna podmínla ‒> proveď tento blok
}

Konkrétní příkaz 'if' pro rozhodnutí, jestli je číslo kladné, nebo záporné:

if (a > 0) {
	cout << "Číslo je kladné." << endl;
} else if (a < 0) {
	cout << "Číslo je záporné." << endl;
} else {
	cout << "Číslo je nula." << endl;
}

Cykly

Když chci něco dělat opakovaně (a dokonce s různými čísly), použiji for | obecně:

for (ridici promenna; podminka; zmena) {
	co se ma delat;
}

Konkrétní příklad for pro vypsání i začínající na hodnotě zacatek a končící před hodnotou konec:

for (int i = zacatek; i < konec; i++) {
	cout << i << endl;
}

Funkce

Funkce slouží k osamostatnění kódu. Je to krabička, která dostane 0 až mnoho proměnných jako vstup a nevrátí nic, nebo jednu proměnnou (výstup).

Musime předem říct, jakého datového typu co bude. Obecně:

typ_co_fce_vraci jmenoFce (typProm1 vstupniPromenna1, typProm2 vstupniPromenna...)
{
	co se ma delat;
	return vysledekFce;
}

Konkrétní příklad funkce soucin co na vstupu dostane 2 celá čísla (typ int) a vrátí na výstupu jejich součin (typ int):

int soucin (int cislo1, cislo2)
{
	int vysledek = cislo1 * cislo2;
	return vysledek;
}

Čtení a výpis z konzole

Slouží pro primitivní načítání vstupu od uživatele a výpis dat skrze konzoli | obecně:

#include <stdio>
using namespace std;

cin >> prměnná; // načtení hodnoty z konzole do proměnné

cout << co vypsat << co dál vypsat << ... << vypiš si toho kolik chceš; // výpis textu, i proměnných

Konkrétně příklad načtení čísla a písmena a jehich následné vypsání:

int cislo;
char znak;
cin >> cislo;
cin >> znak;
cout << "Načten znak " << znak << " a číslo " << cislo << endl; // endl odřádkuje ("ENTER")