|
||||||||
|
|
Практика Delphi: 1. Свойства чисел Предварительно рекомендуется прочитать следующие статьи: Задание 1: Определение цифр числа Определить каждую цифру натурального числа N и вывести на экран. Для данной задачи можно поставить два условия: вывести цифры в прямом порядке или в обратном. Второй случай реализуется довольно легко: пока число N больше нуля, выводить остаток его деления на 10, а затем уменьшать само N в 10 раз. Далее следует код программы: program Numbers1;
{$APPTYPE CONSOLE} var N: integer; begin Write('N = '); ReadLn(N); while N > 0 do begin WriteLn(N mod 10); N := N div 10; end; ReadLn; end. N = 194766583
3 8 5 6 6 7 4 9 1 Для вывода чисел в прямом порядке без использования массивов необходимо узнать количество цифр в числе. Разумеется, самый простой способ - взять логарифм числа по основанию 10. Далее будет составлять степень числа 10, постепенно уменьшая ее показатель, и делить на нее число N. Прочем, в виде исходного кода будет понятнее: program Numbers1_1;
{$APPTYPE CONSOLE} uses Math; var N, c, i, j, P: integer; begin Write('N = '); ReadLn(N); c := Trunc( Log10(N) ) + 1; WriteLn('Digit count = ',c); for i:=c-1 downto 0 do begin P := 1; // составляем степень for j:=1 to i do P := P * 10; WriteLn(N div P mod 10); // выводим i-ю справа цифру end; ReadLn; end. N = 194766583
Digit count = 9 1 9 4 7 6 6 5 8 3 Здесь используется функция log10 из модуля Math, которая, фактически, определяет количество разрядов числа в виде вещественного числа. Для получения точного значения (т.е. минимального целого, но не меньше этого вещественного числа) используется функция trunc плюс 1. Задание 2: Делители числа. Определить все делители натурального числа N. Для решения задачи можно перебрать все числа от 2 до (N/2), и проверить делимость на них числа N. program Divisors;
{$APPTYPE CONSOLE} var N, i: integer; begin Write('N = '); ReadLn(N); WriteLn('1':10,' is the divisor of ',N); for i:=2 to N div 2 do if N mod i = 0 then WriteLn(i:10,' is the divisor of ',N); if N <> 1 then WriteLn(N:10,' is the divisor of ',N); ReadLn; end. N = 60
1 is the divisor of 60 2 is the divisor of 60 3 is the divisor of 60 4 is the divisor of 60 5 is the divisor of 60 6 is the divisor of 60 10 is the divisor of 60 12 is the divisor of 60 15 is the divisor of 60 20 is the divisor of 60 30 is the divisor of 60 60 is the divisor of 60 Если у числа только два делителя: 1 и само это число, то оно является простым. С помощью этой программы можно определить простоту числа. Задание 3: НОД и НОК. Определить наибольший общий делитель и наименьшее общее кратное натуральных чисел N и M. Для определения НОД можно пробежаться от минимального из чисел N и M до 2, и проверять, является ли это число общим делителем N и М. Первое попавшееся число и будет НОД. В крайнем случае НОД будет равно 1, что означает, что N и M - взаимно простые числа. Для нахождения НОК можно воспользоваться следующим свойством: НОД(N,M) * НОК(N,M) = N * M program NOD_NOK;
{$APPTYPE CONSOLE} var N, M, min, i, NOD: integer; NOK: int64; begin Write('N = '); ReadLn(N); Write('M = '); ReadLn(M); if N = M then begin NOD := N; NOK := N; end else begin if N < M then min := N else min := M; NOD := 1; for i:=min downto 2 do if (N mod i = 0)and(M mod i = 0) then begin NOD := i; break; end; NOK := int64(N) * M div NOD; end; WriteLn; WriteLn('NOD = ',NOD); WriteLn('NOK = ',NOK); ReadLn; end. N = 36
M = 48 NOD = 12 NOK = 144 |
||||||
|