Zadání příkladu
Program vyzve uživatele k zadání celého čísla. Úkolem programu je sečíst cifry čísla a vypsat tento součet. Např. když uživatel zadá „4652“ program vypíše „17“, protože 4 + 6 + 5 + 2 = 17. Zpracování ciferného součtu má být úkolem funkce, které se předá zadané načtené číslo jako parametr.
Řešení ve Free Pascalu
program CifernySoucet; uses crt; var n: integer; function cifernySoucet(cislo: integer): integer; var cifra, torzo, soucet: integer; begin soucet := 0; torzo := cislo; repeat cifra := torzo mod 10; // dostanu posledni cifru cisla soucet := soucet + cifra; torzo := torzo div 10; // uriznu posledni cifru cisla until torzo = 0; cifernySoucet := soucet; end; begin clrScr; write('Zadejte cislo: '); read(n); writeln('Ciferny soucet cisla ', n, ' je ', cifernySoucet(n), '.'); repeat until keyPressed; end.
Spuštění programu
Zadejte cislo: 4652 Ciferny soucet cisla 4652 je 17.
Poznámky
Pro zpracování je použita funkce. Pro separaci čísel na jednotlivé cifry se využívá operátoru div
a mod
. Zavedená proměnná soucet je zde sice zbytečná, součet by se mohl rovnou ukládat do proměnné pro návratovou hodnotu cifernySoucet. Já už jsem ale z jiných programovacích jazyků spíše zvyklá na příkaz return, který se chová trochu jinak, a tak si návratovou hodnotu naplním až na konci funkce správnou hodnotou. Funkce by po odstranění proměnné soucet vypadala takto:
function cifernySoucet(cislo: integer): integer; var cifra, torzo: integer; begin cifernySoucet := 0; torzo := cislo; repeat cifra := torzo mod 10; // dostanu posledni cifru cisla CifernySoucet := CifernySoucet + cifra; torzo := torzo div 10; // uriznu posledni cifru cisla until torzo = 0; end;
Podobně by šel cyklus repeat until
nahradit cyklem while
, který je o něco příjemnější. Proměnnou cifra bych také nemusela používat, ale já to mám takto ráda :). Je to pak srozumitelnější. Cyklus while je použit v referencích uvedených níže.