Разделы
  Delphi
  C++
  PHP
  Windows
  Linux
 

Практика 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





Copyright (C) ZasKok S.M.S., 2009-2010
Hosted by uCoz