Podmínky
Podmínka vlastně funguje tím způsobem, že vyhodnotí výraz a když je pravdivý, provede se tělo podmínky a když nikoliv skončí a nebo veme jinou variantu.
Existují základní tři typy zápisů:
if (podmínka) {
příkazy1;
}
nebo
if (podmínka) {
příkazy1;
}
else if (další podmínka) {
příkazy2;
}
else {
příkazy3;
}
anebo
if (podmínka) {
příkazy1;
}
else {
příkazy2;
}
První možností je tzv. neúplné if, druhá jako úplné if, třetí je též úplné.
Za slovem if je v závorkách napsaná podmínka. Pak následuje skupina příkazů ve složených závorkách, zde označená příkazy1. Pak ještě
může obsahovat slovo else a za ním další skupina příkazů ve složených závorkách příkazy2.
Takže program nejprve vyhodnotí podmínku, je-li splněna provede příkazy1 a při variantě s else přeskočí variantu jedna a provede příkazy2.
Není-li podmínka splněna přeskočí příkazy1 a buď skončí a nebo jestli jsme použili variantu s else, tak použi příkazy2.
Podmínky if a else
Tento jednoduchý příklad demonstruje použití podmínečného vyhodnocování. První if nám říká, když je číslo v proměnné i rovno nule, tak se provede blok pod if.
Else if - nebo když je číslo jednička tak proveď blok kódu, který vypíše jen zadali jste jedničku.
Nebo když neplatí nic předtím, tak proveď poslední blok kódu.
using System;
class Program
{
static void Main()
{
Console.WriteLine("Zadejte číslo 0 nebo 1");
int i = int.Parse(Console.ReadLine());
if (i == 0)
{
Console.WriteLine("Zadali jste nulu");
}
else if (i == 1)
{
Console.WriteLine("Zadali jste jedničku");
}
else
{
Console.WriteLine("Zadali jste jine cislo");
}
}
}
Další příklad
Na tomto dalším příkladě je vidět vyhodnocování podmínek. Načetl jsem číslo do proměnné i.
Dále je zde metoda Main, v ní jsem použil podmínky if k tomu, abych rozlišil číslo od 0 do 100 a else if od 100 do 200 a pro ostatní než v tomto
rozsahu jsem zadal výjimku. Tento zápis říká, je i větší než nula a zároveň menší, nebo rovno stu.
Nebo je číslo větší než i a zároveň je menší než 200?
using System;
class Program
{
static void Main()
{
// konzole nám napíše, ať zadáme číslo
Console.WriteLine("Zadejte číslo v rozsahu od 0 do 100 nebo od 100 do 200");
// konzole načte číslo do proměnné i
int i = int.Parse(Console.ReadLine());
// pokud je proměnná i v rozmezí 0-100, tak to vypíše
if (i > 0 && i <= 100)
{
Console.WriteLine("Zadali jste cislo v rozahu od 0 do 100, konkretne {0}", i);
}
// pokud je proměnná i v rozmezí 100-200, tak to vypíše
else if (i > 100 && i < 200)
{
Console.WriteLine("Zadali jste cislo v rozsahu od 100 do 200, konkretne {0}", i);
}
// v posledním případě (pokud není v rozsahu), tak vyhodíme výjimku
else
{
throw new Exception("Spatne_zadani_rozsahu");
}
}
}
Další příklad je totožný s předchozím, s tím rozdílem, že jsem výjimku dal ještě před samotné rozdělení mezi 0 - 100 a 100 - 200, takže když zadám číslo v jiném rozsahu, tak
se vyhodnotí nejprve výjimka a program skončí.
using System;
class Program
{
static void Main()
{
Console.WriteLine("Zadejte číslo v rozsahu od 0 do 100 nebo od 100 do 200");
int i = int.Parse(Console.ReadLine());
if (!(i > 0 && i <= 200)) {
throw new Exception("Nezadali jste cislo v platnem rozsahu");
}
if (i > 0 && i <= 100)
{
Console.WriteLine("Zadali jste cislo v rozahu od 0 do 100, konkretne {0}", i);
}
else
{
Console.WriteLine("Zadali jste cislo v rozsahu od 100 do 200, konkretne {0}", i);
}
}
}
Zkrácené vyhodnocování podmínky (||) - NEBO
Zde vidíme zkrácené vyhodnocování podmínky NEBO. Funguje to na tomto principu: podminínka je splněna, vždy když je alespoň jedna z nich platná.
Když není ani jedna, podmínka neplatí. Takže stačí aby platila pouze jedna strana. Zde v první příkladě se porovnává proměnná i s inicializací 4, s hodnotou 5 a to jest neplatné.
V druhé části proměnná j s inicializací 1, zvýšenou však o prefix. Takže hodnota proměnné je 2, ale to pořádně nejde porovnat s číslem 3, proto je i
druhá strana neplatná.
V druhé podmínce jsou zrovna pravdivé obě proměnné. Probíhá to stejným způsobem. Myslím si, že stačí pouze vědět, že proměnná i s inicializací 5, je
v porovnání také 5 a dál to program neřeší a provede tělo podmínky. Ovšem, kdyby to nebyla pravda, tak se zkusí pravá strana a zde by to v tomto případě také byla pravda,
jelikož by j s inicializací 2, mělo v prefixu hodnotu 3 a podmínka by byla tatkéž splněna.
using System;
class vyhodnocovaniPodminkyNebo
{
static void Main()
{
int i, j;
i = 4;
j = 1;
Console.WriteLine("Podmínka : (i == 5 || ++j == 3)\n\n");
Console.WriteLine("Před podmínkou : i = {0}, j = {1}", i, j);
if (i == 5 || ++j == 3)
{
Console.WriteLine("Podmínka je platná");
}
else Console.WriteLine("Podmínka je neplatná");
Console.WriteLine("Po podmínce i = {0}, j = {1}", i, j);
i = 5;
j = 2;
Console.WriteLine("\nPřed podmínkou : i = {0}, j = {1}", i, j);
if (i == 5 || ++j == 3)
{
Console.WriteLine("Podmínka je platná");
}
else Console.WriteLine("Podmínka je neplatná");
}
Zkrácené vyhodnocování podmínky (&&) - A ZÁROVEŇ
Zde musí být splněny podmínky na obouch stranách, jinak se podmíněný příkaz if neprovede. Je to ten samý příklad, který je uveden shora u zkráceného
vyhodnocovaní podmínky nebo, takže není co vysvětlovat.
using System;
class zkraceneVyhodnocovaniPodminky_a_zaroven
{
static void Main()
{
int i, j;
i = 4;
j = 1;
Console.WriteLine("Podminka: (i == 5 && ++j == 3) \n\n");
Console.WriteLine("Před podmínkou: i = {0}, j = {1}", i, j);
if (i == 5 && ++j == 3)
{
Console.WriteLine("Podmínka je platná");
}
else Console.WriteLine("Podmínka je neplatná");
Console.WriteLine("Po podmínce: i = {0}, j = {1}\n\n", i, j);
i = 5;
j = 2;
Console.WriteLine("Před podmínkou: i = {0}, j = {1}", i, j);
if (i == 5 && ++j == 3)
{
Console.WriteLine("Podmínka je platná");
}
else Console.WriteLine("Podmínka je neplatná");
Console.WriteLine("Po podmínce: i = {0}, j = {1}\n\n", i, j);
}
}
Načtení znaku a jeho začlenění
V tomto kódu jsme opět četli ze standartního vstupu, načtený znak jsme ovšem převedli na char a pak v metodě Main jsme určili pomocí podmínek
zda se jedná o číslo, malé písmeno, velké písmeno, či ostatní.
using System;
class pracuji
{
static void Main()
{
Console.WriteLine("Zadejte jeden znak a pak stiskněte \"ENTER\" ");
char k = char.Parse(Console.ReadLine());
if (k >= '0' && k <= '9')
{
Console.WriteLine("Zadali jste číselnou hodnotu: {0}", k);
}
else if (k >= 'a' && k <= 'z')
{
Console.WriteLine("Zadali jste malé písmeno: {0}", k);
}
else if (k >= 'A' && k <= 'Z')
{
Console.WriteLine("Zadali jste velké písmeno: {0}", k);
}
else
{
Console.WriteLine("Zadali jste znak, nejspíše interpunkční: {0}", k);
}
}
}