Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Бабалова Алгоритмизация задач и структурирование программ 2013

.pdf
Скачиваний:
2
Добавлен:
12.11.2022
Размер:
1.29 Mб
Скачать

ется год, который делится на 4, но не 100 и т.п.). Считаем, что первый день года – 1 января – это понедельник.

1.16.Определить значение угла в градусах между положением часовой стрелки в начале суток и ее положением в H часов, M ми-

нут и S секунд (0<=H<=11, 0<=M<=59,0<= S<=59).

1.17.Дано вещественное число. Определить первую цифру дробной части числа.

1.18.Дано целое число N. Выделить из числа все четные циф-

ры.

1.19.Найти наибольший общий делитель двух натуральных чи-

сел.

1.20.Из вводимого набора целых чисел найти числа, для которых квадрат заданного трехзначного числа равен кубу суммы его цифр.

1.21.Дано целое число. Определить количество нулей в записи

числа.

1.22.Дано вещественное число. Определить порядок числа для

записи его в форме: +/-a.bE10+/- x , где 1<=а<=9, b – дробная часть в записи числа, x – степень основания системы счисления.

1.23.Дано целое число. Определить количество цифр, стоящих на нечетных местах в записи числа.

1.24.Дано целое число. Поменять порядок цифр в записи числа на обратный.

1.25.Дано целое N – разрядное число. Поменять местами первую цифру с последней цифрой в записи числа.

1.26.Дано N – разрядное целое десятичное число. Преобразовать его в запись числа в восьмеричной системе счисления.

1.27.Дано N – разрядное целое десятичное число. Преобразовать его в запись числа в двоичной системе счисления.

1.28.Из заданного набора чисел найти числа, не имеющие общих делителей.

1.29.Дано некоторое целое число. Все нули в изображении числа заменить единицами.

1.30.Задано вещественное число. Определить порядок числа и количество цифр в изображении дробной части числа.

1.31.Написать программу, позволяющую получить все перестановки из K различных чисел и напечатать все перестановки.

21

1.32.Длина отрезка задана в дюймах (1 дюйм = 2,54 см). Перевести длину в метрическую систему – в метрах, сантиметрах и миллиметрах.

1.33.Дано целое число n. Определить сколько одинаковых цифр в записи числа.

1.34.Правительство объявляет, что инфляция в течение года составит не более P % в месяц. Какого роста цен за год можно ожидать.

1.35.Длина некоторого отрезка составляет P метров. Переведите ее в русскую, неметрическую систему измерений:

1 вершок - 44,45 мм,

1

аршин – 16 вершков,

1 сажень – 3 аршина,

1

верста – 500 саженей.

1.36.Задана дата в виде целого десятичного числа. Для этой даты записать ее эквивалент в римской системе счисления: M – 1000, D – 500, C – 100, L – 50, X – 10, V – 5, I – 1.

1.37.Дано целое число n. Определить сумму его делителей. Проверить, является ли заданное число совершенным. Например, 6=1+2+3. Найти для данного числа ближайшее совершенное число.

1.38.Дано целое число n. Найти в записи числа наибольшее количество подряд стоящих одинаковых цифр.

1.39.Для целых чисел, не превышающих заданного числа K, проверить признак делимости на 9. Сумма цифр числа, делящегося на 9 , также делится на 9. Найти числа, делящиеся на 9.

1.39.Дано целое число n. Определить разность между суммой цифр, стоящих на нечетных местах в записи числа, и суммой цифр, стоящих на четных местах в записи числа. Известно, что если эта сумма кратна 11, то и число делится на 11. Проверьте.

1.40.Дано целое число n. Найти все целые натуральные числа, не превосходящие заданное число n, которые делятся на каждую из своих цифр.

1.41.Любое целое число может быть выражено через k троек и m

пятерок: n = k 3+m 5. Найти для заданного числа n значения k и m.

1.42.Заданы три числа k, m, n, которые являются остатками от деления искомого числа x соответственно на 3, 5, 7. Найти число x.

1.43.Дано целое число n. Переставить его цифры так, чтобы его значение стало максимально возможным.

1.44.Дано целое число n. Записать его в шестнадцатеричной системе счисления.

22

1.2.Вычисление значений функций и рядов

сзаданной точностью

Алгоритмизация вычислений математических функций является очень важным разделом в освоении принципов программирования. Рассмотрим основные правила алгоритмизации процесса вычислений.

Пример 1.3. Известна функция для вычисления корня квадратного из числа x: y = x. Вычислить значение y c погрешностью,

не превышающей заданную величину ε.

Для определения значения y используем известную итерацион-

ную формулу:

y

= 1

(y +

x

) .В качестве начального значения y

 

 

i+1

2

i

yi

 

 

 

берем x, а i будет изменяться от 0 до любого числа n, при котором достигается требуемая точность решения задачи.

Алгоритм решения задачи: приведен на рис. 12.

Рис. 12. Алгоритм вычисления квадратного корня из числа x

23

Программа в консольном исполнении program Project_root;

{$APPTYPE CONSOLE} uses

SysUtils;

var y,x,eps,y0:real; k:integer; ch:char;

begin repeat

writein(___Enter x); readln(x); writein(___Enter eps); readln(eps);

k:=0; y0:= x;

Repeat y:=y0;

y0:= (y+x/y)/2; k:=k+1;

Until abs(y-y0)<eps; writein(Result =, Y:15:12);

writeln(‘ Count of repeat= ’, k); writein(___Repeat --- Y); Readln(ch);

until ch='y';

{ TODO -oUser -cConsole Main : Insert code here } End.

Пример решения задачи. На результирующем экране (рис. 13) видно, что число выполняемых действий зависит от заданной погрешности ε. При уменьшении погрешности для вычисления

2 число шагов до получения результата увеличилось на 1. Сами значения совпадают только до пяти знаков дроби.

Решение задачи будет завершено, если вы правильно запишите ответ. В ответе должны быть представлены только верные цифры в записи числа.

24

Рис. 13. Вычисления корня квадратного с двумя значениями погрешности ε

Количество верных цифр определяется проверкой неравенства:

Εрез <= ε.

Определим погрешность результата, предположив, что все 10 цифр в записи дроби верные. Тогда получается Εрез = 0.5*10-10.

Заданная погрешность 0.1*10-2. Следовательно, восемь цифр дроби в записи числа не верные. Погрешности округляются только в большую сторону, следовательно, ответы для двух вариантов решения задачи получаются такими:

y = 1.41 ± 0.005 и 1.41421 ± 0.000005.

Пример 1.4. Алгоритмизация вычисления многочлена.

В предложенных двух вариантах алгоритмов решения одной задачи показаны те различия в алгоритмизации, которые позволяют существенно изменить как диапазон используемых данных для решения задачи, так и количество выполняемых действий. Общая формула для записи многочлена:

n

Pn = Ai xi .

i:=0

1. Обычный вариант записи формулы для вычисления: Pn(x) = A0+A1*X+A2*X2+… +An*Xn

25

26

а

б

Рис. 14. Алгоритмы простого вычисления многочлена (а) и для схемы Горнера (б)

2. Схема Горнера

Pn(x)=(…(0+An)*X+An-1)*X+…+A1)*X+A0

На рис. 14 предлагается изображение двух способов вычисления многочлена: обычным образом, начиная с первого элемента многочлена, это вариант а) и по схеме Горнера (вариант 2).

В первом варианте алгоритма введены две переменные для сохранения степени x – переменная t и суммы S. В переменной t может получиться очень большое число, которое внесет существенную погрешность в решение задачи за счет округления промежуточных значений многочлена.

Во втором варианте потребуется только одна переменная S, которая будет накапливать требуемое значение суммы S, при этом нет накопления степени числа x.

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

Задачи для самостоятельной работы

1.46. n(1–x) = –(x+x2/ 2 + x3/3 + …+ xn/n) для х < 1.

1.47. Ln1sin(x)| = –ln2 – cos(2x) – cos(4x)/2 –…– cos(2nx)/n для 0 < х < π.

1.48.ax = 1 + xln(a)/1! + (xln(a))2/2! + … +(xln(a))n/n!

1.49.sin(x) = x–x3/3! + x5/5! + ... + (–1)(n–1)(x2n-/(2n-1)!

1.50.sin(x) = x(1–x2/π2)(1–x2/4π2)…(1–x2/(n–1)2π2)…

1.51.cos(x) = (1–4x2/π2)(1–4x2/9π2)…(1–4x2/(2n–1)2π2) …

1.52.Arctg(x) = x – x3/3 + x5/5 -... + (–1)nx2n+1/(2n+1) +…

1.53.π2/8 – π/4|x| = cos(3x)/32 + cos(5x)/52 +…

+ cos((2n+1)x) / /(2n+1)2 для |x| < 1.

1.54.1/4ln((1+x)/(1–x)) + 1/2arctg(x) = x + x5/5 +…+ x4n+1/(4n+1) +… для –1 < х < 1.

1.55.(1 + 2x2)e(x2) = 1 + 3x2 +…+ (2n + 1)/n! x2n +…

1.56.1/4(x2 π2/3) = –cos(–) + cos(2x)/22 -…+(–1)n cos(nx)/n2 +…

для π/5 x ≤ π.

27

1.57. Для заданного значения погрешности ε найти такое наименьшее значение n, для которого будет выполняться соотношение 2n/n! <ε. Вывести все значения от 1 до n.

1.58. Для заданных значений n и x вычислить выражение

S = sin(x) + sin(sin(x)) +sin(sin sin(x))+…+ sin(sin sin...sin (x)) .

n

n

i

1.59. y = (1)i1 * x j / j для |x| < 1.

i=1

j=1

n

 

1.60. y = (1)k * k!*(x / 2)(n+k ) для |x| < 1.

k =0

 

n

i

1.61. y = (x)2i

/ 2i *(1)k (x +1)k .

i=1

k =1

n

1.62. y = x2k *(2k / k!) .

k=1 n

1.63.y = (1)k xk / (k *2k ) .

k=1

ni

1.64.y = (1)i * (x / ( j +1)) .

i=1

 

j

 

 

 

 

n

 

 

 

 

 

 

1.65. y = 2(1)i x2i+1 / (2i +1) .

 

i=1

 

 

 

 

 

 

n

 

 

 

 

 

 

1.66. y = (1)k (n k +1) / (2k +1)! .

k =1

 

 

 

 

 

 

n

 

 

 

 

 

 

1.67. y = (1)i / x(2 x

+1)i для x < 1.

i=1

 

 

 

 

 

 

n

1

+ 1

 

1

 

 

1.68. y = k!/ (

+... +

 

) .

2

k +

1

k =1

3

 

 

n

 

 

 

 

 

 

1.69. y = (1)i+1 ln(x +i) / i!.

 

 

i=1

 

 

 

 

 

 

m

 

 

 

k

 

 

1.70. y = (1)k *(2k

/ k!*1/ ( j +1)) .

k =1

 

 

 

j=1

 

 

28

n

1.71. y = (1)k *(k +1)!/ xnk +1 .

k =1

n

1.72. y = (1)k +1 * 2nk / (k *(k +1)) .

k=1 n

1.73.y = (1)k *(2k +1) / (2k +1)!! .

k=1

n

i

1.74. y = (xi +(′−1) j + j)) .

i=1

j=1

29

Тема 2. РАБОТА СО СТРОКАМИ И ТЕКСТОМ

Работа с текстовыми данными предполагает использование типа данных CHAR или типа STRING соответствующей длины.

Алгоритмы для работы со строками нацелены на поиск заданного образца P в тексте T. Формально задача называется задачей поиска подстрок. Алгоритм должен определить позицию s подстроки в тексте T. Позиция может быть допустимой, если:

0 ≤ s ≤ n-m и T[s+1..s+m] = P[1..m]

В неравенствах n – длина строки, а m – длина подстроки.

Для обработки данных типа строк в языках предлагается, кроме обычных операций, набор функций и процедур, позволяющих ускорить работу над строками.

1. Предопределенные типы символов в языке:

Ansichar

Кодировка

Ansi

Длина 0–255 символов

WideChar

Кодировка

Unicode

Длина 0–65535 символов

Тип Char оставлен в языке для совместимости версий языка. Стандартные функции для работы с символами:

Ord(ch)

Ord(‘’) =32

это код пробела.

Chr(x)

Chr(65) =’A’

это заглавная бук-

ва латинского алфавита A.

2. Предопределенные типы строк в языке:

Type

 

Длина

Наличие нулевого символа

Shortstring

255

байт

нет

Ansisting

4 байта – 2 Гб

есть

String

255

байт/2 Гб

нет/есть

Widestring

4 байта – 2 Гб

есть

3. Функции для работы со строками:

Сравнение строк

Function CompareStr(const s1,s2:string):

integer;

 

 

 

Операция

Результат

 

 

s1 >s2

Положительное число

 

 

s1 <s2

Отрицательное число

 

 

s1 =s2

0

 

30