C++ - 3. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

C++ - 3. lekceC++ - 3. lekce

 

C++ - 3. lekce

Google       Google       13. 4. 2005       133 906×

  • řetězce - char
  • cykly a podmínky - for, while, do while, podmínka if else
  • logické výrazy
  • úkol č. 3

Reklama
Reklama

Řetězce

Takže, začneme se učit o ukládání textu (znaků) do proměnných.

Pamatujete, jak jsme se učili o typech a zazněl tam char?

Vytváří se stejně jako typ int, ale má jinou inicializaci.


char prom[10];  // vytvoří proměnnou prom jako typ 
                // char o maximální délce 9 znaků

Obecně:


char jméno_proměnné[max_počet_znaků];

Trošku se zmíním o maximální délce znaků, protože se jistě ptáte, proč, když jsme dali maximální počet znaků 10, je jich jen 9.. Později se budeme učit o řetězcích string ale nyní o char ;) :

Styl řetězců má jednu zvláštnost: Poslednim znakem každého řetězce je \0 - tzv. prázdný znak. Tento znak je ASCII kódem 0 a slouží pro označení konce řetězce (0 = nula).

Abyste tedy mohli vytvořit proměnnou typu char, nesmíte zapomenout započítat poslední znak \0.

Chceme vytvořit proměnnou jmeno, která bude mít maximální možnou délku 7 znaků.

Napíšeme tedy:


char jmeno[8];

Musíme totiž započítat onen prázdný znak (proto 8).

Teď vám ukážu dva možné způsoby inicializace, doporučuju používat ten druhý, uvidíte ;)


char jmeno[8] = { 'b', 'e', 'r', 'u', 's', 'k', 'a', '\0' };

a druhý způsob:


char jmeno[8]="Beruska";  // znak \0 se už přidá sám

Jinak když vyvoláte jmeno[3], tak se vám vyvolá 4. písmeno (musíte počítat i tu nulu), tedy u.

Tak, jaký způsob zápisu si vyberte? Myslím, že to vím ;)

Ještě vám ukážu jeden způsob:


char jmeno[]="Beruska"; // nechá kompilator počítat a sám
                        // zakomponuje prázdný znak \0

Pokud nevyplníte max. počet znaků a necháte tedy kompilátor počítat, MUSÍTE již rovnou inicializovat.

Nemůžete tedy udělat toto:


char jmeno[]; // toto nemůžete napsat a až poté inicializovat

Takže nyní byste měli dokázat stvořit program, který se zeptá na jméno, vek apod.

A teď ještě ukážu, nač se dále používá char.

Na ASCII systému je 'S' jiným způsobem zápisu 83.

Proto příkaz...


char pismeno=64;  // ...je @, tedy když vyvoláme 
                  // pismeno, dostaneme @

Díky tomu můžeme vložit češtinu do našeho programu.


char ch=159;  // 159 == č
cout << ch << "tverec"; // výsledek : čtverec

Cykly

Počítače provádějí více než jen ukládání dat. Analyzují, spojují, přeskupují a jiným způsobem manipulují s daty. Na provádění svých manipulačních zázraků potřebují nástroje na vykonávání opakovatelných činností a na učinění rozhodnutí. C++ je samozřejmě poskytuje.

Jsou to: for, while, do while, if else a switch.

Používá je i C, takže pokud je znáte, máte plus.

a) for

Pokud chcete něco poslat na výstup vícekrát, než jednou, for vám pomůže.

Nejprve příklad:


int i;
for (i=0; i<5; i++) //1.řádek
   cout << "Zde je ten text.\n";  //2.řádek
cout << "konec";  //3.řádek

V prvním řádku píšeme samotnou podmínku, ve druhém příkaz, který se provede, pokud je výsledek pravdivý a ve třetím příkaz, který se provede, pokud je podmínka nepravdivá.

Výsledek by tedy byl:


Zde je ten text.
Zde je ten text.
Zde je ten text.
Zde je ten text.
Zde je ten text.
konec

Druhou část jistě chápete (2. řádek), proto si vysvětlíme první:

Čtěte for jako "pokud", ulehčí vám to práci.

cyklus začíná nastavením proměnné i (vytvořené před cyklem) na nulu.


i = 0;  // pozor, musí být středník!

Toto byla inicializační část cyklu.

Dále se testuje podmínka:


i < 5;

zda-li je i menší, než 5. Je-li tomu tak, program provede následující příkaz:


cout << "Zde je ten text.\n";

Potom cyklus použije změnovou část cyklu, aby zvýšil i o 1:


i++ //vysvětlení v minulé lekci

Jak tedy probíhá děj step-by-step? ;)


i=0, 0<5 a tak vytiskne text Zde je ten text.
i=1, 1<5 a tak vytiskne text Zde je ten text.
i=2, 2<5 a tak vytiskne text Zde je ten text.
i=3, 3<5 a tak vytiskne text Zde je ten text.
i=4, 4<5 a tak vytiskne text Zde je ten text.
i=5, 5<5 
neplatí, a tudíž se cyklus opouští a následuje další, na cyklu nezávislý příkaz: konec

For tedy probíhá jen tehdy, dokud je děj pravdivý.

Obecně:


for (inicializace; testovací_výraz; změnový_výraz)
   příkaz
další příkazy

Inicializace se provádí pouze jednou, jinak by neměl cyklus smysl. Při dalším úkonu tedy není i znovu 0, ale nabývá hodnoty dle změnového výrazu.

Vytvořit i inicializovat proměnnou můžete přímo v cyklu for, ale poté již není možné proměnnou vyvolat (Proměnná bude existovat jen v cyklu, mimo něj neexistuje!).


for (int i=0; i<5; i++)                      
   cout << "Zde je ten text.\n";   
cout << "Konec, protoze hodnota i je " << i; // NELZE!

Proměnná i je viditelná jen v tučné části textu! (v cyklu)

* * * Nyní prosím přejděte úplně nakonec této lekce a přečtěte si text pod čarou, poté se sem opět vraťte.

b) WHILE

Cyklud while je cyklus for zbavený inicializační a změnové části, má pouze jednu testovací podmínku a příkaz.

while (testovací_podmínka)

   příkaz
Zde také platí, že se cyklus stále opakuje, pokud je podmínka pravdivá. Jakmile je nepravdivá, opouští se cyklus.

int i=0;
while (i<5)
{
   cout << "ahoj\n";
   i++;
}
Díky while můžeme vytvořit časovou prodlevu :

long cekej=0;
while (cekej < 10000)
   cekej++;                    // počítá potichu
Problém nastává, že na každém PC je jiný procesor a tudíž jiná rychlost :(
Proto se používá jiný (lepší) způsob, ale o něm později ;)

c) do while

Třetím cyklem je do while. Liší se od obou předchozích, ptž je cyklem se vstupní podmínkou. Tzn, že cyklus nejprve provede tělo cyklu, a potom teprve vyhodnotí výraz, aby věděl, zda by měl pokračovat dalším průběhem. Když se podmínka ukáže nepravdivým, cyklus končí.

V jako jediném se tedy příkazy provedou minimálně jednou.

do
   příkaz(y)/blok             // nebo-li tělo
while (testovací_podmínka)
Může být použitelný např. při hádání čísla :

#include <iostream>
using namespace std;
int main()
{
   int n;
   cout << "Zdej cislo od 1 do 10 pro nalezeni ";
   cout << "meho oblibeneho cisla\n";
   do
      {
        cin >> n;                                         // provádí tělo
     } while (n != 7);                                 // potom testuje
   cout << "Ano, 7 je me oblibene cislo.\n" ;
   return 0;
}
Cyklus skončí až tehdy, kdy uživatel uhodne číslo /v tomto případě 7/.

d) if else

Čtěte if jako jestliže. A to přesně dělá, vyhodnotí podmínku a je-li pravdivá, provede ji, v opačném případě ji prostě přeskočí.

if (testovací_podmínka)
   příkaz1
else
   příkaz2
není na tom nic složitého.
Nejprve se testuje podmínka. je-li pravdivá provede se příkaz1 (a příkaz2 již NE) , nebo, pokud podmínka není pravdivá, je proveden příkaz2 (příkaz jeden nebude proveden). else vlastně nám jen říká, že i v případě nepravdivé podmínky se má něco udělat.
I zde platí že můžeme použít bloky.
else a příkaz2 můžeme vynechat :

if (testovací_podmínka)

   příkaz1
To způsobí, že není-li podmínka pravdivá, pokračuje program dále.. nic se neprovede.. např :

int heslo;
cout << "Zadejte heslo : ";
cin >> heslo;
if (heslo == 1892)
   cout << "Spravne, vase heslo je v poradku.";
else
   cout << "Vase heslo je spatne.";
Co možná děláte za chybu?
Nesmíte použít operátor přiřazení "=" ale podmínky rovnosti "==" //lekce 2
Podmínky lze samozřejmě stupňovat.

int n;
int Fave = 27;
cout << "Zadejte cislo v rozsahu 1-100 ke zjisteni ";
cout << "mého oblibeneho cisla: ";
cin >> n;
if (n < Fave)
  cout << "Prilis nizke -- hadejte znovu: ";
  else if (n > Fave)
    cout << "Prilis vysoke -- hadejte znovu: ";
  else
    cout << Fave << " je spravne!\n";

Logické výrazy

Často musíte testovat jednu, či více podmínek.

Logický operátor NEBO ||

-znamená, že je-li alespoň jeden výraz pravdivý, je podmínka pravdivá. 5 ==5 || 5==9 // pravdivá, protože 1. výraz je pravdivý 5 > 8 || 5 < 2 // nepravdivá, oba jsou nepravdivé tyto výrazy můžete použít např v cyklech

cin >> heslo;
if (heslo==1892 || heslo==2981)
   cout << "Spravne";
else
   cout << "Spatne";
Pravdivá jen tehdy, pokud uživatel zadal heslo 1892 nebo 2981.

Logický operátor A &&

-znamená, že jsou li oba výrazy pravdivé, je podmínka pravdivá.

5 == 5 && 4 == 4        // pravdivá, oba jsou pravdivé
5 == 3 && 4 == 4        // nepravdivá, jeden je nepravdivý
5  >  6 && 8  <  7        //  nepravdivá, oba jsou nepravdivé
tyto výrazy můžete použít např v cyklech:

int vek;
cin >> vek;
int heslo=1892;
if (heslo==1892 && vek>=18)
   cout << "Spravne";
else
   cout << "Spatne";
Pravdivá jen tehdy, pokud uživatel zadal dobré heslo a je mu více než 18 let.

Logický operátor NE !

-obrací pravdivostní hodnotu výrazu
Pokud je tedy vyraz pravdivý, !vyraz je nepravdivý a naopak.

if  ( ! ( x > 5 ) )            // if (x <= 5)

Úkol

Na začátek Vás program 10x uvítá(10x se vypíše ta samá hláška pomocí některého cyklu.
Poté se zeptá na Váše jméno a uloží jej, a poté Vám vypíše první písmeno ve jméně.
Vše musí být přehledné,odřádkované apod.
Dále vytvoříte proměnnou (typ char ktera bude mit místo na 5 čísel ) a řeknete uživateli, ať zadá 1. jednociferné číslo, až ho zadá, uloží se jako 1.znak v proměnné typu char , zeptá se znova a uloží až do té doby, až uživatel zadá všech 5 čísel. (Řešte pomocí cyklu)
Nyní Vypíše program první 2 písmena vašeho jména a za ně s mezerami hodnoty, které jste zadali.
Nakonec poděkuje a seznámí uživatele se stránkami www.programujte.com o čem jsou a jak mohou pomoci. (na 3 řádky, ne obecně, ale vaše názory na ně)
Tak, doufám, že máte co dělat ;))

* * *
Zápis příkazů:
Jak můžete například u for, while apod. zapisovat

for (i=0; i<5; i++)

   cout << "ahoj.";
tak můžete použít i více příkazů. A to tak, že je dáte do tzv. BLOKU.

for (i=0; i<5; i++)

   {
      cout << "ahoj.";
      cout << "ahoj.";
    }
Vše, co je v závorkách { } je tělo f-ce, a všechny se provedou je-li podmínka pravdivá.
Více v dodatku, který vyjde. (spíše jen o možnostech tohoto vyžití)

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Lukáš ChurýLukáš je šéfredaktorem Programujte, vyvíjí webové aplikace, fascinuje ho umělá inteligence a je lektorem na FI MUNI, kde učí navrhovat studenty GUI. Poslední dobou se snaží posunout Laser Game o stupeň výše a vyvíjí pro něj nové herní aplikace a elektroniku.
Web     Twitter     Facebook     LinkedIn    

Nové články

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

Reklama
Reklama
Obrázek ke článku ICT PRO školení zaměřené nejenom na ICT

ICT PRO školení zaměřené nejenom na ICT

Dovolte, abychom se představili. Jsme zaměstnanci společnosti ICT Pro, profesionálové v oblasti poskytování komplexních ICT služeb. Neboli služeb spojených s informačními a komunikačními technologiemi, které dnes - ve 21. století - tvoří  nedílnou součást běžného provozu všech moderních firem.

Reklama autora

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý