Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть_1_1.doc
Скачиваний:
27
Добавлен:
11.07.2019
Размер:
866.82 Кб
Скачать

Тема 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 знаков дроби.

      1. 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

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

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

      1. sin(x)=x(1-x2/p2) (1-x2/4p2)…(1-x2/(n-1)2p2)…

      1. cos(x)=( 1-4x2/p2)( 1-4x2/9p2)…( 1-4x2/ (2n-1)2p2) ….

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

      1. p2/8-p/4| x| =cos(3x)/32 + cos(5x)/52 + …+cos((2n+1)x)/(2n+1)2 , для |x |<1

      1. ¼*ln((1+x)/(1-x))+1/2arctg(x)=x+x5/5+…+x4n+1/(4n+1)+…, для -1<х<1

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

      1. ¼ *(x2-p2/3)=-cos(x)+cos(2x)/22 -…+(-1)n*cos(nx)/n2 +…, для p/5 ³ x £ p

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