Условие задачи : Написать программу, которая после введённого с клавиатуры числа (от 1 до 999), обозначающего денежную единицу, дописывает слово «рубль» в правильной форме. Например, 12 рублей, 21 рубль и т.д.
Сложность : легкая .
Довольно интересная задача на мой взгляд, хоть и легкая. Для начала стоит подумать как вообще правильно формируется слово рубль в зависимости от цифры.
Давайте сначала : 1 рубль , 2 — 4 рубля, 5 — 20 рублей , 21 рубль, 22 — 24 рубля, 25 — 30 рублей.
Думаю что вы увидели как это всё меняется. Теперь давайте напишем эту программу.
Первым делом создадим каркас и объявим переменные под числа.
uses crt ; var number, ost : integer ; begin end.
Дальше давайте попросим пользователя ввести число от 1 до 999 :
write('Введите число от 1 до 999 : '); readln(number); if (number < 1) or (number > 999) then Halt ;
Тут же я прописал условие на тот случай если пользователь введет число больше чем 999 или меньше чем 1.
Halt у нас завершает программу досрочно.
И сразу же давайте нашей переменной ost присвоим остаток от деления, т.к. именно по остатку мы будем определять какое слово добавлять, но есть и исключение дальше вы увидите какое :
ost := number mod 10 ;
И теперь пишем основное условие :
if (number >= 5) and (number <= 20) or (ost >= 5) and (ost <= 9) then writeln(number, ' рублей') else if ost = 1 then writeln(number, ' рубль') else writeln(number, ' рубля');
Может есть и какой-то другой способ записи этого условия но я сделал такой. Что мы тут делаем ?
Для начала мы проверяем числа от 5 до 20 ( именно сами числа ) так как только у этого промежутка будут одинаковые слова т.е. слово «рублей», а дальше нам уже будут встречаться такие слова только у тех цифр которые кончаются на 5 .. 9 вот их мы в первое условие и добавляем.
Дальше если первое условие у нас не прошло , т.е. значит что у нас число не от 5 до 20 и не кончается на цифру от 5 .. 9 , мы проверяем кончается ли оно на 1 , если да то выводим слово рубль, если нет то добавляем уже слово «рубля».
Вот и всё . Весь код программы :
uses crt ; var ost,number : integer ; begin clrscr; {очищаем экран} write('Введите число от 1 до 999 : '); readln(number); if (number < 1) or (number > 999) then Halt ; ost := number mod 10 ; if (number >= 5) and (number <= 20) or (ost >= 5) and (ost <= 9) then writeln(number, ' рублей') else if ost = 1 then writeln(number, ' рубль') else writeln(number, ' рубля'); readln; {чтобы программа не закрывалась} end.