Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
10_программирование.doc
Скачиваний:
8
Добавлен:
09.11.2019
Размер:
1.07 Mб
Скачать

Задачи целочисленной арифметики

Пример: Дано целое число. Определить, совпадают ли первая и последняя цифра данного целого числа

Решение Последнюю цифру числа можно сразу определить как остаток от деления данного числа на 10. А вот первую мы будем определять, последовательно отбрасывая цифры путем деления на 10 до тех пор, пока не останется одна цифра. Это и будет первая цифра данного числа.

{последняя цифра}

{тело цикла}

{условие выхода из цикла}

Var N,R : longint;

BEGIN

Write('Введите целое число'); readln( N);

R:= N mod 10;

Repeat

N:=N div 10

Until N < 10;

If R=N then writeln('совпадают') else writeln('не совпадают');

Readln;

END.

  1. Подсчитать сумму и количество цифр данного натурального числа

  2. Сообщить, есть ли в данном натуральном числе N цифра A.

  3. Подсчитать количество нечетных натуральных чисел, принадлежащих интервалу ( a , b ), у которых количество четных цифр равно заданному числу.

  4. Подсчитать количество чисел Фибоначчи, принадлежащих интервалу [ a , b ), в которых младшая цифра кратна заданной

  5. Подсчитать количество четных натуральных чисел, принадлежащих интервалу [ a , b ), у которых количество четных цифр больше количества нечетных цифр

  6. Подсчитать количество натуральных чисел, принадлежащих отрезку [ a , b ], в записи которых нечетные цифры отсутствуют.

  7. Подсчитать количество n-значных натуральных чисел, в которых сумма цифр нечетная, а младшая цифра – четная

  8. Подсчитать количество двузначных и трехзначных натуральных чисел, в которых сумма цифр четная и кратна младшей цифре.

  9. Определить, есть ли среди простых чисел из интервала [ a , b ), такие, в которых младшая цифра больше старшей цифры.

Структурное программирование. Подпрограммы.

Структурное программирование подразумевает разбиение большой задачи на отдельные, логически законченные части и написание подпрограмм, реализующих каждую часть задачи. Каждая такая часть программы получает свое имя. Тогда всю большую программу мы можем написать, вызывая по именам отдельные ее части в нужной нам последовательности.

Для пояснения вышесказанного проведем аналогию, например, в кулинарии: Если мы собираемся испечь торт “Наполеон”, мы возьмем кулинарную книгу и посмотрим рецепт, который гласит, что нужно приготовить 300 г. слоеного теста, испечь из него 6 Вычислить значение функции коржей. Затем приготовить 200 г. заварного крема и смазать им коржи. Эта сложная задача имеет команды: приготовить слоеное тесто и приготовить заварной крем. В рецепте они подробно не описаны. Видимо, мы откроем раздел, где описано приготовление различного рода теста и посмотрим, как приготовить слоеное тесто. Затем в разделе “Кремы” посмотрим как приготовить заварной крем. Очевидно, что заварной крем может использоваться и в других рецептах, например, для изготовления заварных пирожных, возможно, что лишь количество его будет другим. Также и слоеное тесто. Очевидно, что было бы просто нерационально каждый раз, где потребуется в рецептах такой крем, заново описывать его приготовление- объем кулинарной книги неоправданно бы возрос.

Возвращаясь к программированию, можно сказать, что структурированная задача имеет следующие достоинства:

  • легче читается- становится понятней

  • легче отлаживается (отдельными подпрограммами)- сокращается вероятность ошибок

  • одну и ту же подпрограмму можно вызывать в программе многократно. (сокращается объем текста программы)

  • одну задачу могут разрабатывать несколько программистов одновременно (при не использовании глобальных величин)

Последнее пока непонятно, т.к. с глобальными и локальными величинами мы познакомимся позднее.

В Паскале данный механизм структурирования задач реализуется при помощи процедур и функций.

Процедура- это какая-то последовательность команд, снабженная именем и вызываемая при помощи этого имени. Процедура обычно реализует логически законченную подзадачу. Процедура должна быть описана в описательной части программы следующим образом:

procedure <имя процедуры> [(список формальных параметров)]; -{ заголовок

обязателен в отличие от

заголовка программы}

<раздел описаний > {здесь- описаны локальные величины}

Begin

<операторы> { исполняемая часть процедуры}

Еnd;

Вызывается процедура по имени в исполняемой части программы, как и любая команда Паскаля.

Процедура призвана решить какую-то небольшую задачу. В любой задаче есть результат решения, который должен после отработки процедуры быть сохранен в переменной. В задаче могут быть исходные данные (переменные или константы).

И исходные данные и результат должны быть занесены в список параметров процедуры. Параметры процедуры различаются:

Формальные

в описательной части программы

следуют за заголовком процедуры

п еречислены имена переменных с указанием типов

з адают шаблон для фактических

Фактические параметры

в исполняемой части программы

следуют за именем процедуры

перечислены только имена без указания типа

заполняют шаблон конкретными значениями

Решим задачу с использованием процедуры.

Пример Даны длины сторон двух треугольников. Определить, какой треугольник имеет большую площадь.

Решение Очевидно, что в данной задаче после ввода исходных данных необходимо будет дважды выполнять одни и те же действия: вычислять площадь треугольника (по Формуле Герона). Оформим данный алгоритм в виде подпрограммы. Тогда можно будет просто дважды вызвать эту подпрограмму по имени, указав в качестве параметров каждый раз длины сторон одного из треугольников.

Var

S1, S2: real; {площади двух треугольников}

a1,b1,c1,a2,b2,c2: real; {величины сторон}

procedure pl (a,b,c:real; var s:real);

var p:real;

begin

(p:=a+b+c)/2;

s:=sqrt(p*(p-a)*(p-b)*(p-c));

end;

BEGIN

Write('Введите длины сторон первого треугольника ');readln(a1,b1,c1);

Write('Введите длины сторон второго треугольника ');readln(a2,b2,c2);

Pl(a1,b1,c1,s1);

Pl(a2,b2,c2,s2);

If s1>s2 then writeln('площадь первого треугольника больше')

else

if s2>s1 then writeln('площадь второго треугольника больше')

else writeln ('треугольники равновелики');

END.

Использование параметров делает подпрограмму универсальной. Именно использование параметров позволило получить разный результат работы одной и той же подпрограммы (площадь) при разных исходных данных (длины сторон). Исходные данные подпрограммы передаются по значению-параметры- значения (в списке формальных параметров указываются без слова var перед именами переменных). Результат работы процедуры передается по ссылке- параметры-переменные (в списке формальных параметров перед именами переменных пишется слово var)

При вызове процедуры в программе формальные параметры заменяются фактическими, причем параметры-значения могут заменяться как переменными, так и произвольными выражениями (как частный случай числами), параметры- переменные могут заменяться при вызове только переменными соответствующего типа. Фактические и формальные параметры должны совпадать по количеству, порядку следования и типу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]