Cvičení k 7. lekci Céčka

C a C++ Céčko Základní konstrukce C Cvičení k 7. lekci Céčka

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Následující 3 cvičení vám pomohou procvičit znalosti programování v Céčku z minulé lekce. Ve vlastním zájmu se je pokuste vyřešit sami. Pod článkem máte pro kontrolu řešení ke stažení. Ale pozor, jakmile se na něj podíváte bez vyřešení příkladů, ztrácí pro vás cvičení smysl a nic se nenaučíte :)

Pokud si opravdu nebudete vědět rady, podívejte se raději znovu do minulého tutoriálu a pokuste se na to přijít.

Jednoduchý příklad

Vytvořte pole o 10-ti prvcích a naplňte jej postupně čísly 10 až 1. Toto pole následně vypište. Plnění i vypsání pole bude probíhat pomocí cyklu.

Konzolová aplikace
10 9 8 7 6 5 4 3 2 1

Středně pokročilý příklad

Naprogramujte aplikaci, která se uživatele dotáže na 10 čísel. Ta uloží do pole a poté najde a vypíše jejich minimum, maximum a průměr.

Konzolová aplikace
Zadejte cislo: 1
Zadejte cislo: 3
Zadejte cislo: 5
Zadejte cislo: 7
Zadejte cislo: 9
Zadejte cislo: 11
Zadejte cislo: 13
Zadejte cislo: 15
Zadejte cislo: 17
Zadejte cislo: 19
Minimum=1.000000; Maximum=19.000000; Prumer=10.000000

Pokročilý příklad

V pokročilém příkladu naprogramujte jeden z nejzákladnějších řadících algoritmů - bubble sort. Všechny podrobnosti o tom, jak algoritmus funguje, najdete v článku o bubble sortu zde na ITnetwork. Úkolem je seřadit pole čísel od nejmenšího k největšímu.

Konzolová aplikace
Pole pred setridenim: 1 9 8 6 4 7 2 3 5 0
Pole po setrideni: 0 1 2 3 4 5 6 7 8 9

 

Stáhnout

Staženo 192x (94.55 kB)
Aplikace je včetně zdrojových kódů v jazyce c

 

 

Článek pro vás napsal patrik.valkovic
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Miniatura
Předchozí článek
Pole v jazyce C
Miniatura
Všechny články v sekci
Základní konstrukce jazyka C
Miniatura
Následující článek
Textové řetězce v jazyce C
Aktivity (6)

 

 

Komentáře

Avatar
dfdfdf
Člen
Avatar
dfdfdf:30.12.2016 11:51

Cus. Muzu se zeptat proc v stredne pokrocilem prikladu,

for(i=0;i<10;i++)
{
if(cisla[i]>max)
max = cisla[i];
estli vymenim cisla[ i ]=max
tak odpoved je nejmensi cislo

 
Odpovědět 30.12.2016 11:51
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na dfdfdf
patrik.valkovic:30.12.2016 12:38

Ne, musíš otočit tu podmínku, podle které hledáš menší číslo.

Odpovědět 30.12.2016 12:38
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
gusto
Člen
Avatar
gusto:26. srpna 11:18

Mam problem s tymto prikladom. Autor ma zaujem aby sme sa naucili sami pisat programy a ja aj ked si tento priklad otvorim a pol dna ho studujem, tak mu nerozumiem :)

#include <stdio.h>
#include <stdlib.h>

/*
 *
 */
int main(int argc, char** argv) {

    int i;
    float max, min, sum;
    float cisla[10];

    for(i=0;i<10;i++)
    {
        printf("Zadejte cislo: ");
        scanf("%f",&cisla[i]);
    }

    //pocatecni inicializace, aby byly hodnoty v rozmezi hodnot
    min = cisla[0];
    max = cisla[0];
    sum = 0;

    //vypocet
    for(i=0;i<10;i++)
    {
        if(cisla[i]>max)
            max = cisla[i];
        if(cisla[i]<min)
            min = cisla[i];
        sum = sum + cisla[i];
    }

    printf("Minimum=%f; Maximum=%f; Prumer=%f",min,max,sum/10);

    return (EXIT_SUCCESS);
}

Podme pekne od zaciatku

int i;
   float max, min, sum;
   float cisla[10];

deklaracia premennych
1x typ int i.
3x typ float max, min, sum
1x deklaracia pola typu float o velkosti 10 (10 prvkove pole)

for(i=0;i<10;i++)
{
    printf("Zadejte cislo: ");
    scanf("%f",&cisla[i]);
}

Cyklus pre nacitanie 10 cisel. Tych 10 cisel sa nam ulozi do pola cisla[i]
Dajme tomu, ze cisla budu 8,1,7,3,4,9,2­,5,4,0.
Podla toho co viem z predoslych lekcii, tak v poli je to usporiadane tak

cisla[0] = 8
cisla[1] = 1
cisla[2] = 7
...
cisla[9] = 0

dalej v programe je to vid.

//pocatecni inicializace, aby byly hodnoty v rozmezi hodnot
    min = cisla[0];
    max = cisla[0];
    sum = 0;

Takze podla toho ake cisla mame teraz v poli nacitane, tak realne sme premennej min pridelili hodnotu 8 a tak isto aj premennej max.
Dalej nasleduje vypocet s cyklom a vnorenymi podmienkami.
Tomu uz nerozumiem (cyklus for je jasne)

//vypocet
    for(i=0;i<10;i++)
    {
        if(cisla[i]>max)
            max = cisla[i];
        if(cisla[i]<min)
            min = cisla[i];
        sum = sum + cisla[i];
    }

Ale zoberme si prvy if a mechanicky budeme porovnovat prvky z pola.
Na prvom mieste v poly je ulozene cislo 8. Do min a max mame priradeny prvy prvok pola co je 8
takze

if(cisla[i]>max) //8>8 neplati

cize prikaz za if sa preskakuje a ide sa na dalsi if. Tam je to kvazy to iste 8<8.
Dalsi prikaz je

sum = sum + cisla[i];

takze do premennej suma sa priradi cislo 8 (kedze v sum je priradena 0 a k tomu pripocitame 8.
Dalej pokracuje cyklus, kde porovnavame druhy prvok pola co je realne cislo 1.
A znova prvy if neplati, lebo

1>8

ale druhy if uz plati, lebo 1<8, takze do min sa priradi cislo z pola cisla[1] co je cislo 1.
Do sum sa dalej pripocita dalsi prvok z pola a hodnota sum bude uz 9.

Dalej pokracuje cyklus, kde porovnavame treti prvok pola co je realne cislo 7.
A znova prvy if neplati, lebo

7>8

ale druhy if uz plati, lebo 7<8, takze do min sa priradi cislo z pola cisla[2] co je cislo 7.
A tu nastava problem, lebo v min uz neni cislo 1, ale cislo 7 (a 1 je predsa mensie ako 7)
Do sum sa dalej pripocita dalsi prvok z pola a hodnota sum bude uz 16.

Cize nejak mi to nepasuje, nerozumiem tomu a to su sakra len zaklady

 
Odpovědět 26. srpna 11:18
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na gusto
David Čápka:26. srpna 11:48

Mně to tedy připadá úplně jednoduché, prostě máš uložené minimum a maximum a pokud najdeš menší nebo větší číslo v poli, tak buď minimum nebo maximum aktualizuješ. Ty nerovnosti a názvy proměnných jsou tam velmi přehledně zapsané. Projeď si ty ify znovu. Předpokládám, že víš, že if spouští jen první příkaz po něm pokud tam nejsou složené závorky.

Odpovědět 26. srpna 11:48
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na gusto
patrik.valkovic:26. srpna 11:56

Ten poslední krok máš špatně. Nejdříve je v min 8, obě podmínky neplatí. Potom zpracujes číslo 1, 1<8 takže do min se uloží 1. To znamená, že v dalším cyklu (když zpracováváš 7), tak v min je 1 a v max 8. To znamena, že obě podmínky neplatí a pokračuješ.

Odpovědět  +1 26. srpna 11:56
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na gusto
David Čápka:26. srpna 11:56

Chyba ve tvém uvažování je na konci:

ale druhy if uz plati, lebo 7<8

Neplatí, protože v min už není 8, ale 1. Čili se ptáš 7 < 1. Nemyslím si, že je tu něco špatně vysvětlené.

Odpovědět 26. srpna 11:56
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
gusto
Člen
Avatar
gusto:26. srpna 14:01

David, samozrejme ze ti to pripada jednoduche, ked nejaky ten piatok programujes, ale pre nie programatora to vyzera zlozito :)
Ale po vysvetleni mi je to uz jasnejsie a rozumiem tomu.
Ja som nenapisal, ze si nieco zle vysvetlil, ale ze "JA" tomu nerozumiem. Po dokladnejsom vysvetleni, mi je to jasne
Dobre je, ze pod clankami je aj diskusia
vdaka borci

 
Odpovědět 26. srpna 14:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.