Programovací jazyk "C".

Počítače stolní, notebooky, tablety, tiskárny, scanery a vše, co nějak souvisí s PC

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
flyingbird
Příspěvky: 54
Registrován: 09 říj 2008, 02:00
Bydliště: ValMez
Kontaktovat uživatele:

#16 Příspěvek od flyingbird »


Uživatelský avatar
Brozicek
Příspěvky: 1469
Registrován: 07 lis 2005, 01:00
Bydliště: Studénka

#17 Příspěvek od Brozicek »

Já jsem asi nějaký natvrdlý. Výše uvedený program "Házení kostkou" jako jpg mám v CodeBlocks zapsaný a funkční. Chci si proměnnou "c" jako číselnou hodnotu zobrazit před provedením operace switch (c). Čtu různé popisy jazyka Céčka, ale nemohu přijít na to, jak mám zapsat programový řádek, který zobrazí vypočtenou náhodnou aktuální hodnotu "c" před tím switch. Zápis printf (c); je blbost a nefunguje. Jak se to má správně zapsat. Ten hledaný řádek je v následujícím výpisu zvýrazněný tučně a červeně. Proti Basic a VBA je pro mne zatím jazyk C nepřehledný. Asi to chce čas a studium nějakých vzorů.

#include <stdio.h> // pro funkcnost printf(), prip. scanf()
#include <stdlib.h> // pro funkcnost srand() a rand()
#include <time.h> // pro funkcnost time()
int
main ()
{
int c;
printf ("Hazim kostkou...\n\n");
srand (time (NULL));
c = rand () % 6 + 1;

printf (c);

switch (c)
{
case 1:

printf ("Padla jednicka\n");
break;
case 2:
printf ("padla dvojka\n");
break;
case 3:
printf ("padla trojka\n");
break;
case 4:
printf ("padla ctyrka\n");
break;
case 5:
printf ("padla petka\n");
break;
case 6:
printf ("padla sestka\n");
break;
}
return 0;
}

Uživatelský avatar
samec
Příspěvky: 3692
Registrován: 19 pro 2017, 01:00

#18 Příspěvek od samec »

Nic si z toho nerob. printf nie je príkaz jazyka C. Je to funkcia knižnice stdio.h. Ak tú funkciu chceš používať, tak si musíš niekde nájsť, ako sa používa, aké má vstupné parametre, akú má návratovú hodnotu, čo tá funkcia robí, jak to s tou funkciou myslel jej autor, ktorý ju naísal... To je úplne normálne, keď používaš cudzie knižnice, že k ním potrebuješ dokumentáciu. Našťastie máme internety a stdio.h je najbežnejšie používaná knižnica. Ak by si začal s učebnicou, na ktorú som ti dal minule odkaz, tak hneď v prvej kapitole je vysvetlené použitie tejto funkcie printf. Správny zápis by mohol byť trebárs

printf("%d",c);

Alebo môžeš použiť jednoduchšiu funkciu

putc(c);

Každopádne si vyhľadaj použitie funkcie printf a putc. Nejdem tu kopírovať knihy alebo internety.

Uživatelský avatar
JoDiK
Příspěvky: 508
Registrován: 10 led 2018, 01:00
Bydliště: Olomoucký kraj

#19 Příspěvek od JoDiK »

To jsem nevěděl, že v C je takový problém vypsat číslo...
Dá se to třeba takto:
printf ("Co padlo na kostce: %d\n",c);

Uživatelský avatar
Brozicek
Příspěvky: 1469
Registrován: 07 lis 2005, 01:00
Bydliště: Studénka

#20 Příspěvek od Brozicek »

Dík. Funguje to. Musím v popisech najít co vyjadřuje a znamená to "procenta d" (v Google klávesnici jsem nenašel znak procenta) a proč to tam musí být.

Uživatelský avatar
samec
Příspěvky: 3692
Registrován: 19 pro 2017, 01:00

#21 Příspěvek od samec »

Zjednodušene, percento označuje miesto v reťazci, kam sa vloží hodnota z premennej, ktorá je za čiarkou ako ďalší parameter funkcie printf. Percent v reťazci a premenných odelených čiarkami môže byť viac. Za percentom následuje znak, ktorý definuje tvar, v ktorom sa hodnota vypíše. Napríklad d je celočíselný dekadický tvar, f je float alebo desatinný tvar, e- je exponenciálny tvar, s je reťazec, c je jeden znak, h je hexadecimálny tvar a ešte nejaké ďalšie... Potom ešte môže následovať číslo označujúce počet platných miest a za bodkou počet desatinných miest... V reťazci môžu byť aj špeciálne znaky napríklad \n je nový riadok, \t je tabelátor, \b je backspace... Áno, funkcia printf je takto zložitá, ale aj veľmi užitočná. Nuž ale už kto by si to všetko pamätal. Stačí vedieť, kde to nájsť. A na to sú internety.

Priznám sa však, že ešte stále neviem, ako môže mať funkcia printf ľubovoľný počet parametrov. Raz si na to možno nájdem čas a zistím si, jak to nakódili.

Uživatelský avatar
rnbw
Příspěvky: 32312
Registrován: 21 bře 2006, 01:00
Bydliště: Bratislava

#22 Příspěvek od rnbw »



Uživatelský avatar
RayeR
Příspěvky: 1167
Registrován: 02 srp 2009, 02:00
Bydliště: Praha
Kontaktovat uživatele:

#23 Příspěvek od RayeR »

>samec
putc(c); je blbost, to by vytisklo cislo jako znak s odpovidajicim ascii kodem, takze pro 1-6 bys toho na obrazovce moc nevidel. Kdyz uz tak putc(c+'0'); bude fungovat aspon pro cisla 0-9 :)

Jinak s printf sem mel pri prechodu z Pascalu taky velke problemy a presne sem mel tyhle remcy, na co nejaka % atd., a ted sem za mocny printf rad...

Uživatelský avatar
Brozicek
Příspěvky: 1469
Registrován: 07 lis 2005, 01:00
Bydliště: Studénka

#24 Příspěvek od Brozicek »

Stáhl jsem si toho Kremlina z internetu jako PDF soubor v EN. Musí se s tím pracovat systematicky od začátku. Skutečně tam je ten printf i s parametry vysvětlen.

Uživatelský avatar
RayeR
Příspěvky: 1167
Registrován: 02 srp 2009, 02:00
Bydliště: Praha
Kontaktovat uživatele:

#25 Příspěvek od RayeR »

V Heroutovi je to snad popsane taky dostatecne, z toho sem se ucil. Pro me byla vyhoda, ze tam uvadel srovnani s Pascalem...

Uživatelský avatar
Brozicek
Příspěvky: 1469
Registrován: 07 lis 2005, 01:00
Bydliště: Studénka

#26 Příspěvek od Brozicek »

Kamarádi, potřebuji zase radu a pomoc. Poraďte dědovi starci 77 let. V Kremlinu v EN nějak nenacházím jak na to.
Řešili jsme s vnukem toto zadání:

"Vytvořte jednoduchou kalkulačku s operacemi sčítání, odčítání, násobení a dělení. Načtěte dvě čísla x1 a x2 a zadejte aritmetickou operaci. Podle zadaného znaku aritmetické operace (+, -, *, /) program vypočítá a vypíše výsledek."

Napsali jsme funkční řešení toho zadání, ale větvení podle znaků + - * / jsme nahradili tak, že se znaky zadají číslem "z", a podle něj se provede příslušná operace.
Jak se přečte zadání znaku + - * / na klávesnici podle znaku jak se zadá ten SWITCH?
Tady je naše řešení:

#include <stdio.h>

int main()
{

int x1,x2,z;

printf ("zadej cislo x1 \n");
scanf ("%d\n", &x1);

printf ("zadej cislo x2 \n");
scanf ("%d\n", &x2);

printf ("zadej znamenko 1=+ 2=- 3=* 4=/\n");
scanf ("%d\n", &z);

if (z > 4)
printf("Neplatne znamenko");

if (z < 1)
printf("Neplatne znamenko");

switch (z)
{
case 1:

printf ("vysledek x1 + x2 je: %d\n ", x1 + x2);
break;
case 2:

printf ("vysledek x1 - x2 je: %d\n ", x1 - x2);
break;
case 3:

printf ("vysledek x1 * x2 je: %d\n ", x1 * x2);
break;
case 4:

printf ("vysledek x1 / x2 je: %d\n ", x1 / x2);
break;


}




return 0;

}

Uživatelský avatar
flyingbird
Příspěvky: 54
Registrován: 09 říj 2008, 02:00
Bydliště: ValMez
Kontaktovat uživatele:

#27 Příspěvek od flyingbird »


Uživatelský avatar
Brozicek
Příspěvky: 1469
Registrován: 07 lis 2005, 01:00
Bydliště: Studénka

#28 Příspěvek od Brozicek »

Dík za odkaz. Je tam vše potřebné, co jsem potřeboval. Některé příkazy jsem mechanicky opsal a funují. Nedokáži je však rozklíčovat, co znamenají jednotlivá "písmenka" v příkazu. V té učebnici od Kremlina v EN se nedokáži orientovat při nahodilém hledání, muselo by se to studovat systematicky stránku po stránce. Např. co mi říkají znaky "%.1lf + %.1lf = %.2lf" v tomto řádku programu pro kakulačku (x1 a x2 jsou proměnné):

case 1:
printf ("%.1lf + %.1lf = %.2lf", x1, x2, x1 + x2);
break;

Při proměnných X1=8.546 a x2=8.352 "printf" napíše 8.5 + 7.4
= 15.90 .
Ta čísla znamenají počet desetinných míst, ale nechápu, jak a proč celý tento řádek vytvoří 8.5 + 7.4 = 15.90 .

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#29 Příspěvek od MiloPS3 »

ono se to tezko vysvetluje.... ale je to jednoduchy ...
koukni sem https://www.sallyx.org/sally/c/c07.php

Uživatelský avatar
Brozicek
Příspěvky: 1469
Registrován: 07 lis 2005, 01:00
Bydliště: Studénka

#30 Příspěvek od Brozicek »

[quote="MiloPS3"]ono se to tezko vysvetluje.... ale je to jednoduchy ... /quote]
Dík, to je výborný popis.
Šíleně mi jde na nervy ta učitelka programování mého vnuka. Nutí studenty psát cvičné programy v C zcela zpaměti, klasické šprtání. Lituji vnuka, že má rozumět syntaxi a konstrukcí programu a ještě mít v hlavě ty parametry příkazů a instrukcí. Psával jsem programy v Basic a pro Excel ve VBA, a vždy jsem u toho opisoval sám od sebe co jsem napsal dříve, nebo z příruček a také podle vzorů jak co napsali jiní. Programy jsem si vytvářel jako potřebu pro vlastní technickou činnost, nejsem Ajťák.
Ne každý student bude pracovat jako programátor. Pro studenty není potřeba vše našprtat, ale měli by se v tom orientovat a vědět kde co najít a použít.
O moderní výuce jako tvůrčí činnosti se hodně mluví, ale skutek utek. Pořád vede to šprtání.

Odpovědět

Zpět na „Výpočetní technika“