Тема 1. Работа с числами разных форматов.
А) Обработка целых и вещественных чисел
Задачи этой темы позволяют рассмотреть способы обработки простых типов данных: целых или вещественных чисел. Во всех условиях предлагаемых задач вводятся только числа и обрабатываются числа. Никаких преобразований чисел в строки не производится. Всякое преобразование увеличивает время решения задач и уменьшает точность вычислений для вещественных чисел. Кроме того, арабская система счисления хорошо поддается алгоритмической обработке.
Пример 1.1 Дано натуральное число n. Удалить из записи числа все нули и единицы.
Получить число в записи без 0 и 1.
Алгоритм решения задачи приведен на рис. 7.
Рис. 7
Текст программы в консольном исполнении.
program Del_0_1;
{$APPTYPE CONSOLE}
uses
SysUtils,Windows; //Для работы со строками пришлось добавить модуль среды Windows,
// содержащий методы обработки строк.
var n,p,t,k:integer;
b:boolean;
ch:char;
function ToRus(winStr:String):string;
begin
setlength(Result,Length(WinStr));
CharToOEM(PChar(WinStr),PChar(Result));
end;// Эта функция нужна только для консольного приложения. Вы ее просто копируете в каждую новую свою программу, если хотите видеть комментарии на русском языке.
begin
Writeln(ToRus('*** Начало работы***'));
repeat
writeln(ToRus('Введите число для анализа'));
b:=false; ;// Если число состоит только из 0 и 1
p:=0;
t:=1
{$I-} // Это проверка ввода правильности записанного числа
readln(n);
{$I+}
If IOresult<>0 then // Вы видите имя стандартной переменной, которая хранит код
// ошибки ввода числа
begin
writeln(ToRus(' число записано неверно'));
readln; //
continue; // Этот оператор позволит продолжить решение задачи без перезапуска
// программы
end;
while n<>0 do
begin
k:=n mod 10;
n:=n div 10;
if (k<>1) and (k<>0) then
begin
p:=p+k*t;
t:=t*10;
b:=true;
end;
end;
if b then
writeln(ToRus('полученное число ='),p:12)
else
writeln(ToRus('число содержит только нули и единицы'));
writeln(ToRus(' введите букву n для окончания работ'));
readln(ch);
until ( ch='n');
{ TODO -oUser -cConsole Main : Insert code here }
end.
Мы договорились, что все действия будем выполнять над числом. Следовательно, надо будет выделять разряды целого числа, и проверять их на 0 или 1. Из остальных цифр будем формировать новое число. Результат решения задачи вы видите на рис. 8.
Рис.8
В окне результата решения задачи приведено решение для числа, содержащего любые цифры. Второй результат демонстрирует проверку числа из 1 и 0. Третий результат обеспечивает проверку правильности ввода числа, четвертый пример – это число без 1 и 0.
Таким образом, обеспечена проверка всех возможных вариантов вводимых целых чисел.
Пример 2. Дано целое число. Определить сумму двух
первых цифр числа и сумму двух последних цифр в записи числа.
Алгоритм решения задачи.
Рис. 9
Форма для решения задачи
Рис. 10
Текст программы:
unit Summa_1_n;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label2: TLabel;
Label3: TLabel;
Order: TButton;
Summa: TButton;
Button3: TButton;
Label4: TLabel;
Edit4: TEdit;
procedure OrderClick(Sender: TObject);
procedure SummaClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
k, n:integer; // Это глобальные переменные, значения которых будут видны во всех событиях // данного модуля
implementation
{$R *.dfm}
procedure TForm1.SummaClick(Sender: TObject);
var j,i,s1,s2:integer;
begin
s1:=0;
s2:=0;
i:=1;
While n<>0 do
begin
while i<=2 do
begin
j:=n mod 10;
n:=n div 10;
s1:=s1+j;
i:=i+1;
end ;
if i<=(k-2) then
begin
n:=n div 10;
i:=i+1;
end
else
begin
j:=n mod 10;
s2:=s2+j;
n:=n div 10;
i:=i+1;
end;
end;
Edit2.Text:=Inttostr(s1);
Edit3.Text :=Inttostr(s2);
Summa.Enabled :=false;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormCreate(Sender: TObject); .// Это событие позволяет установить свойства
// компонент, которые необходимы для решения конкретной задачи
begin
Summa.Enabled :=false;// Кнопка события для вычисления заданных сумм будет неактивна (см. // рисунок с результатами решения )
Edit1.clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
end;
procedure TForm1.OrderClick(Sender: TObject); //Этот метод вычисляет количество цифр в записи // числа
var m:integer;
begin
Edit2.Clear;
Edit3.Clear;
n:=strtoint(Edit1.Text);
m:=n; // Исходное число в памяти сохраняем , чтобы можно было его использовать без //повторного преобразования, которое выполняется всегда при чтении числа из окна компонента
k:=0;
while m<>0 do
begin
m:=m div 10;
k:=k+1;
end;
Edit4.Text :=inttostr(k);
Summa.Enabled :=true;
end;
end.
Окно работающей программы с результатами решения: представлено на рис. 11
Рис. 11
Задачи для самостоятельной работы по теме 1.
1.1.1 |
Дано вещественное число. Определить порядок числа и количество цифр в изображении числа.
|
1.1.2 |
Дано целое число N. Разложить его на простые множители. Вывести на экран исходное число и полученные множители.
|
1.1.3 |
Дано целое число с количеством цифр в его записи <= 10. Записать число в обратном порядке.
|
1.1.4. |
Дано целое число X>99. Определить число сотен в записи числа.
|
1.1.5 |
Часовая стрелка образует угол j с лучом, проходящим через центр и через точку, соответствующую 12 часам на циферблате: 0<j<2p. Определить значение угла для минутной стрелки при заданной величине угла j, а также количество полных часов и полных минут.
|
1.1.6 |
Дано целое числа n . Найти знакочередующуюся сумму цифр числа n. ( , где αi – цифры числа n, а переменная определяет количество цифр в записи числа).
|
1.1.7 |
Дано 10- разрядное число. Определить, является ли введенное число палиндромом. (Число, у которого значение при чтении справа налево и слева направо одинаково, называется палиндромом).
|
1.1.8 |
Дано некоторое натуральное число. Определить сколько и каких цифр встречается в записи числа. Результат обработки: <цифра> - <количество>.
|
1.1.9 |
Дано целое число. Найти произведение всех его цифр.
|
1.1.10 |
Дано целое натуральное число. Каждую цифру числа заменить на дополнение ее до 10. Вывести на экран исходное число и преобразованное.
|
1.1.11 |
Даны два целых числа M и N. Найти все одинаковые цифры в каждом из чисел.
|
|
|
1.1.12 |
Даны целые положительные числа k и N. Найти P=(K)N! Определить диапазон допустимых значений N.
|
1.1.13 |
Даны целые числа m, N. Определить сумму любых m цифр числа N.
|
1.1.14 |
Дано целое число N, определяющее возраст человека. Для этого числа определить наименование: год, года, лет. Например, 31 год, 32 года, 25 лет.
|
1.1.15 |
Дано целое число X. Определить сумму k младших цифр в записи числа.
|
1.1.16 |
Дано целое число K, имеющее значения в диапазоне 1..365. Определить номер дня недели(1..7), на который приходится введенный число для не високосного года ( високосным считается год, который делится на 4 , но не 100 и т.п.). Считаем, что первый день года ,1 января, это понедельник.
|
1.1.17 |
Определить значение угла в градусах между положением часовой стрелки в начале суток и ее положением в H часов, M минут и S секунд (0<=H<=11, 0<=M<=59,0<= S<=59).
|
1.1.18 |
Дано вещественное число. Определить первую цифру дробной части числа.
|
1.1.19 |
Дано целое число N. Выделить из числа все четные цифры.
|
1.1.20 |
Найти наибольший общий делитель двух натуральных чисел.
|
1.1.21 |
Из вводимого набора целых чисел найти числа, для которых квадрат заданного трехзначного числа равен кубу суммы его цифр.
|
1.1.22 |
Дано целое число. Определить количество нулей в записи числа.
|
1.1.23
|
Дано вещественное число. Определить порядок числа для записи его в форме: +/-a.bE10+/-x , где 1<=а<=9, b - дробная часть в записи числа, x- степень основания системы счисления.
|
1.1.24 |
Дано целое число. Определить количество цифр, стоящих на нечетных местах в записи числа.
|
1.1.25 |
Дано целое число. Поменять порядок цифр в записи числа на обратный.
|
1.1.26 |
Дано целое N - разрядное число. Поменять местами первую цифру с последней цифрой в записи числа.
|
1.1.27 |
Дано N - разрядное целое десятичное число. Преобразовать его в запись числа в восьмеричной системе счисления.
|
1.1.28 |
Дано N - разрядное целое десятичное число. Преобразовать его в запись числа в двоичной системе счисления.
|
1.1.29 |
Из заданного набора чисел найти числа, не имеющие общих делителей.
|
1.1.30 |
Дано некоторое целое число. Все нули в изображении числа заменить единицами.
|
1.1.31 |
Задано вещественное число. Определить порядок числа и количество цифр в изображении дробной части числа.
|
1.1.32 |
Написать программу, позволяющую получить все перестановки из К различных элементов и напечатать все перестановки.
|
1.1.33 |
Длина отрезка задана в дюймах (1 дюйм=2.54 см). Перевести длину в метрическую систему – в метрах, сантиметрах и миллиметрах.
|
1.1.34 |
Дано целое число n. Определить сколько одинаковых цифр в записи числа.
|
1.1.35 |
Правительство объявляет, что инфляция в течение года составит не более P% в месяц. Какого роста цен за год можно ожидать.
|
1.1.36 |
Длина некоторого отрезка составляет P метров. Переведите ее в русскую, неметрическую систему измерений: 1 вершок - 44,45 мм, 1 аршин – 16 вершков, 1 сажень – 3 аршина, 1 верста – 500 саженей.
|
1.1.37 |
Задана дата в виде целого десятичного числа. Для этой даты записать ее эквивалент в римской системе счисления: M - 1000, D - 500, C - 100, L - 50, X – 10, V -5, I =1
|
1.1.38
|
Дано целое число n. Определить сумму его делителей. Проверить, является ли заданное число совершенным. Например, 6=1+2+3
|
1.1.39 |
Дано целое число n. Найти в записи чисел наибольшее количество подряд стоящих одинаковых цифр.
|
1.1.40 |
Для целых чисел, не превышающих заданного числа K, проверить признак делимости на 9. Сумма цифр числа, делящегося на 9 , также делится на 9.
|
1.1.41 |
Дано целое число n. Определить разность между суммой цифр, стоящих на Нечетных местах, и суммой цифр, стоящих на четных местах в записи числа. Известно, что если эта сумма кратна 11, то и число делится на 11. Проверьте.
|
1.1.42 |
Дано целое число n. Найти все целые натуральные числа, не превосходящие заданное число n, которые делятся на каждую из своих цифр.
|
1.1.43 |
Любое целое число может быть выражено через k троек и m пятерок: n=k*3+m*5. Найти для заданного числа n значения k и m.
|
1.1 44 |
Заданы три числа k, m, n, которые являются остатками от деления искомого числа x соответственно на 3, 5, 7. Найти число x.
|
1.1.45 |
Дано целое число n. Переставить его цифры так, чтобы его значение стало максимально возможным. |
Б) Вычисление значений функций и рядов с заданной точностью.
Пример к разделу 1б.
Дана функция . Вычислить значение y c погрешностью, не превышающей заданную величину ε.
Для определения значения y используем известную итерационную формулу:
.В качестве начального значения y берем x, а i изменяется от 0 до любого числа n, при котором будет достигнута требуемая точность решения задачи.
Алгоритм решения задачи.
Рис. 12
Текст программы в консольном исполнении:
program Project_root;
{$APPTYPE CONSOLE}
uses
SysUtils;
var y,x,eps,y0:real;
k:integer;
ch:char;
begin
repeat
writeln('Enter x');
readln(x);
writeln('Enter eps');
readln(eps);
k:=0;
y0:= x;
Repeat
y:=y0;
y0:= (y+x/y)/2;
k:=k+1;
Until abs(y-y0)<eps;
writeln('Result = ', y:15:10);
writeln(‘ Count of repeat= ’, k);
writeln('Repeat ---Y');
Readln(ch);
until ch='y';
{ TODO -oUser -cConsole Main : Insert code here }
End.
Пример решения задачи:
Рис. 13
На результирующем экране показано, что количество выполняемых действий зависит от заданной погрешности ε. При уменьшении погрешности для вычисления количество шагов до получения результат увеличилось на 1.Сами значения совпадают только до 5 знаков дроби.
l n(1-x)=-(x+x2/ 2 +x3/3 + …+ xn/n) для х<1
1.1. 47 ln| sin(x)| =-ln2 –cos(2x)-cos(4x)/2 -… - cos(2nx)/n , для 0<х<p
ax= 1+xln(a)/1! + (xln(a))2/2! + …+(xln(a))n/n!
sin(x)=x-x3/3! +x5/5! +.. +(-1)(n-1)(x2n-1)/(2n-1) !
sin(x)=x(1-x2/p2) (1-x2/4p2)…(1-x2/(n-1)2p2)…
cos(x)=( 1-4x2/p2)( 1-4x2/9p2)…( 1-4x2/ (2n-1)2p2) ….
Arctg(x)=x-x3/3+x5/5 -.. +(-1)nx2n+1/(2n+1)+…
p2/8-p/4| x| =cos(3x)/32 + cos(5x)/52 + …+cos((2n+1)x)/(2n+1)2 , для |x |<1
¼*ln((1+x)/(1-x))+1/2arctg(x)=x+x5/5+…+x4n+1/(4n+1)+…, для -1<х<1
(1+2x2)e(x2)=1+3x2+…+(2n+1)/n! *x2n+…
¼ *(x2-p2/3)=-cos(x)+cos(2x)/22 -…+(-1)n*cos(nx)/n2 +…, для p/5 ³ x £ p