Задача 1. Составить программу, которая бы проверяла, являются ли три числа взаимно простыми. — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

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

2020-12-06 239
Задача 1. Составить программу, которая бы проверяла, являются ли три числа взаимно простыми. 0.00 из 5.00 0 оценок
Заказать работу

Решение

Program Problem1;

uses WinCrt;

var

   a, b, c, k: integer;

{----------------------------------------------------------------------------------------}

Procedure nod(a, b: integer; var n: integer);

    var

       r: integer;

begin

    repeat

      r:= a mod b;

      a:= b; b:= r

    until b = 0;

    n:= a

end;

{---------------------------------------------------------------------------------------}

begin

write(' Введите три натуральных числа '); readln(a, b, c);

nod(a, b, k);

a:= k; b:= c;

nod(a, b, k);

   if k = 1 then writeln(' Числа взаимно простые ')

                else writeln('Числа не взаимно простые')

end.

Задача 2. Составить программу, которая устанавливает, какие числа из заданного промежутка [a; b] можно представить в виде суммы двух квадратов целых чисел?

Решение

Program Problem2;

uses WinCrt;

var

   a, b, i: integer;

{---------------------------------------------------------------------------------------}

Procedure to_square(n: integer);

    label 1;

    var

        a, b, k: integer;

    begin

       a:= 1; k:= 1;

       while a*a + 1 <= n do

           begin

             k:= k + 1;

             a:= a + 1

          end;

       for a:= 1 to k do

         for b:= 1 to a do

           if a*a + b*b = n

             then

                begin

                   writeln(n, '=', a, '*', a, '+', b,'*', b); goto 1

                end;

1: end;

{----------------------------------------------------------------------------------------}

begin

write(' Введите начало промежутка '); readln(a);

write('Введите конец промежутка '); readln(b);

write('Числа, которые можно представить в виде суммы ');

writeln(' квадратов следующих чисел ');

for i:= a to b do to_square(i);

end.

Задача 3. Составить программу нахождения и вывода на экран всех простых чисел из заданного промежутка [n; m]. (Массивы не использовать.)

Решение

Program Problem3; { Простые числа из промежутка [n; m] }

uses WinCrt;

var

   n, m, i: integer;

{----------------------------------------------------------------------------------------}

Procedure probleme_number(p: integer);

   var

       i, k: integer;

   begin

      if p=2 then write(p, ' ')

                 else if p mod 2 <> 0

                        then

                         begin

                            i:= 3; k:= 0;

                            while i <= trunc(sqrt(p)) do

                               begin

                                  if p mod i = 0 then k:= k + 1;

                                  i:= i + 2

                               end;

                            if k = 0 then write(p, ' ')

                         end

   end;

{----------------------------------------------------------------------------------------}

begin

write(' Введите левую границу промежутка > 1 '); readln(n);

write('Введите правую границу промежутка '); readln(m);

writeln('Простые числа из промежутка [', n, ' ', m, ']');

for i:= n to m do probleme_number(i);

writeln

end.

Задача 4. Французский физик М. Мерсен (1588 - 1648) заметил, что многие простые числа имеют вид

P - 1, где p также простое число. Все числа такого вида называются числами Мерсена. Соста-вить программу, которая находит числа Мерсена на заданном промежутке.

Решение

Program Problem4; { Числа Мерсена }

uses WinCrt;

var

   b, p, p1, m, m1, n, n1, i: longint;

{----------------------------------------------------------------------------------------}

Procedure Probleme_number(p: longint; var v: longint);

   var

       i, k: longint;

   begin

      if p = 2 then v:= p

                   else if p mod 2 <> 0

                           then

                              begin

                                 i:= 3; k:= 0;

                                 while i <= trunc(sqrt(p)) do

                                    begin

                                       if p mod i = 0 then k:= k + 1;

                                       i:= i + 2

                                    end;

                                 if k = 0 then v:= p

                              end

   end;

{----------------------------------------------------------------------------------------}

Procedure extent(a, n: integer; var s: longint);

   var

       i: integer;

   begin

      s:= 1;

      for i:= 1 to n do s:= s*a

   end;

{---------------------------------------------------------------------------------------}

begin

write('Введите правую гран. знач. показ. степ. '); readln(b);

write ('Числа Мерсена: ');

for i:= 2 to b do

   begin

      probleme_number(i, p);

      if p <> p1 then extent(2, p, m);

      if m <> m1 then probleme_number(m - 1, n);

      if n <> n1 then write(n,'; ');

      n1:= n; p1:= p; m1:= m

   end;

writeln

end.

Задача 5. Напишите программу, которая для каждого из целых чисел от 1 до n напечатает все его делители. Например, 1 5 7 35 являются делителями числа 35. Аналогичный список делителей должен быть напечатан для каждого из чисел от 1 до заданного числа n.

Решение

Program Problem 5;

uses WinCrt;

var

   i, n: integer;

{----------------------------------------------------------------------------------------}

Procedure math_divisor(n: integer);

   var

       d: integer;

   begin

      for d:= 1 to n div 2 do

         if n mod d=0 then write(d, ' ');

      writeln(n)

   end;

{----------------------------------------------------------------------------------------}

begin

  write(' Введите правую границу промежутка '); readln(n);

  for i:= 1 to n do

    begin

       write('Делители числа ', i, ' следующие: ');

       math_divisor(i)

    end

end.

Задача 6. Нумерация книжных страниц. В книге n страниц. Составим программу, которая будет находить, сколько цифр понадобится для того, чтобы занумеровать все страницы книги.

Решение

Математическое решение рассмотрим на частном примере, а потом сделаем общий вывод.

Пусть нам требуется определить число цифр для нумерации 357 страниц.

Естественными рассуждения будут такими: однозначных цифр 9, значит они пронумеруют 9 страниц; двузначных чисел 90 - они нумеруют 90 страниц и используют 90 . 2 = 180 цифр; трехзначных чисел 900 - они пронумеруют 900 страниц и используют 2700 цифр. Следовательно, для нумерации данных 357 страниц потребуются все однозначные и двузначные числа и часть трехзначных. Чтобы узнать, сколько трехзначных чисел потребуется для нумерации, надо из заданного числа вычесть " использованные " однозначные и двузначные числа: 357 - (9 + 90) = 258.

Итак, всего потребуется цифр:

...........

Итого: 9 + 180 + 774 = 963 цифры.

Теперь обобщим наши соображения. Пусть задано число страниц n, которое имеет c цифр. Тогда для нумерации потребуются цифры:

1 - значные; потребуется: 9   1 = 9 цифр;

2 - значные;                 90 2 = 180 цифр;

3х - значные;               900 3 = 2700 цифр;

...................................

c-1 -значные;              9....0 . (c-1)... цифр,

а c-значных полностью не хватит, также, как не хватило полностью трехзначных для нумерации 357 страниц.

Чтобы узнать сколько потребуется c-значных цифр, надо из данного числа вычесть все число одно, -дву, -трех,- и т. д., c-1 значные, которые уже использованы:  а затем полученный результат умножить на c - значность числа. Сложив израсходованные цифры, мы получим окончательный результат.

Попробуем на основе этих рассуждений составить программу.

Program Problem6; { Число цифр для нумерации страниц }

uses WinCrt;

var

   n, c: integer;

{----------------------------------------------------------------------------------------}

Procedure number(n: integer; var k: integer);

   begin

      k:= 0;

      repeat

         k:= k + 1; n:= n div 10

      until n = 0

   end;

{----------------------------------------------------------------------------------------}

Procedure Page(n: integer; var z: integer);

   var

       i, m, c, s: integer;

   begin

      m:= 9; number(n, c); z:= 0; s:= 0;

      for i:= 1 to c - 1 do

         begin

            z:= z + m*i; { Сумма цифр }

            s:= s + m; m:= m*10

         end;

      z:= z + (n - s)*c {n - s оставшиеся страницы c-значными цифрами}

   end;

{----------------------------------------------------------------------------------------}

begin

  write('Введите число страниц '); readln(n);

  page(n, c);

  writeln('Число цифр, необходимых для нумерации ', c)

end.

Задача 7. Счастливые автобусные билеты. Номера автобусных билетов представляют собой шестизначные числа. Счастливым считается тот билет, у которого сумма первых трех цифр равна сумме последних трех цифр. Например, билет 356428 считается счастливым, так как:

3 + 5 + 6 = 4 + 2 + 8 =14.


Поделиться с друзьями:

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.058 с.