ВХОД

МЕТОДИЧЕСКИЕ РАЗРАБОТКИ ПО КУРСУ ИНФОРМАТИКИ

"ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PASCAL"

Начало > Глава V. Автоморфные, Пифагоровы числа > Задачи с решениями

ГЛАВА V

ЗАДАЧИ С РЕШЕНИЯМИ

Пифагоровы числа



1. Составить программу, которая находит все пифагоровы тройки, не превышающих 20.
  Переход. Первый способ решения.
Блок-схема

Переход. Второй способ решения.
Блок-схема

Переход. Третий способ решения.
Блок-схема

2. Найти количество пифагоровых троек не превышающих числа n. n вводится с клавиатуры.
  Переход
Блок-схема

3. Вывести на экран двузначные примитивные пифагоровы тройки.
  Переход
Блок-схема

4. Найти количество трехзначных примитивных пифагоровых троек.
  Переход
Блок-схема

1(1). Составить программу, которая находит все пифагоровы тройки, не превышающих 20.

Первый способ решения. Сортировка по возрастанию первого числа.

Ответ:
3 4 5 - пифагоровы
5 12 13 - пифагоровы
6 8 10 - пифагоровы
8 15 17 - пифагоровы
9 12 15 - пифагоровы
12 16 20 - пифагоровы

program pif_01_01;
uses crt;
var
a:integer;{первое число}
b:integer ;{второе число}
c:integer;{третье число}
a1:integer;{первое число в квадрате}
b1:integer;{второе число в квадрате}
c1:integer; {третье число в квадрате}
i:integer;{счетчик цикла}

begin
clrscr;
a:=1 ;
while a<=20 do
    begin
    a1:=SQR(a); {квадрат первого числа}
    for b:=a to 20 do {от a, чтобы убрать повторяющиеся тройки чисел}
      begin
      b1:=SQR(b); {квадрат второго числа}
      for c:=1 to 20 do
        begin
        c1:=SQR(c); {квадрат третьего числа}
        if c1=a1+b1 then writeln (a:5,b:5,c:5,' - пифагоровы');
        end;
      end;
    inc(a);
    end;
end.
1(2). Составить программу, которая находит все пифагоровы тройки, не превышающих 20.

Второй способ решения. Сортировка по возрастанию первого числа.

Ответ:
3 4 5 - пифагоровы
5 12 13 - пифагоровы
6 8 10 - пифагоровы
8 15 17 - пифагоровы
9 12 15 - пифагоровы
12 16 20 - пифагоровы


program pif_01_01;
uses crt;
var a,b,c,cc: integer;
begin clrscr;
for a:=1 to n do
    for b:=a to n do
      begin
      cc:=a*a+b*b;
      c:=1;
      while (c*c<cc) and (c<20) do inc(c);
      If sqr(c)=cc then writeln(a,' ',b,' ',c,' - пифагоровы');
      end;
end.

1(3). Составить программу, которая находит все пифагоровы тройки, не превышающих 20.
Третий способ решения.
Ответ:
3 4 5
5 12 13
6 8 10
8 15 17
9 12 15
12 16 20


program z1;
uses crt;
var x, y, z:integer; {проверяемые числа}
begin
clrscr;
for x:=1 to 100 do
    for y:=x to 20 do
      for z:=y to 20 do
        if x*x+y*y=z*z then writeln(x:10,y:10,z:10);
end.

2. Найти количество пифагоровых троек не превышающих числа n. n вводится с клавиатуры.

Ответ: n=50
Количество пифагоровых троек = 20



program pif_02;
uses crt;
var

    n:integer;{максимальное число в тройке}
    kol:integer; {Количество пифагоровых троек}
    a:integer;{первое число}
    b:integer ;{второе число}
    c:integer;{третье число}
    a1:integer;{первое число в квадрате}
    b1:integer;{второе число в квадрате}
    c1:integer; {третье число в квадрате}
    i:integer;{счетчик цикла}

{(3, 4, 5), (6, 8, 10), (5, 12, 13), (9, 12, 15), (8, 15, 17), (12, 16, 20),
(15, 20, 25), (7, 24, 25), (10, 24, 26), (20, 21, 29), (18, 24, 30),
(10, 30, 34), (21, 28, 35), (12, 35, 37), (15, 36, 39), (24, 32, 40),
(9, 40, 41), (27, 35, 45), (14, 48, 50), (30, 40, 50)…}



begin
clrscr;
write('n='); readln(n);
a:=1 ;
while a<=n do
    begin
    a1:=SQR(a);
    for b:=a to n do
      begin
      b1:=SQR(b);
      for c:=1 to n do
        begin
        c1:=SQR(c);
        if c1=a1+b1 then inc(kol);
        end;

      end;

    inc(a);
    end;
writeln('Количество пифагоровых троек = ',kol)
end.



3. Вывести на экран двузначные примитивные пифагоровы тройки.
Ответ:
11 60 61
12 35 37
13 84 85
16 63 65
20 21 29
28 45 53
33 56 65
36 77 85
39 80 89
48 55 73
65 72 97

program pif_03;
uses crt;
var
    x, y, z: integer; {проверяемые числа}
    min, i, nod1, nod2, nod3: integer; {переменные для поиска НОД}

begin
clrscr;
for x:=10 to 99 do
for y:=x to 99 do
for z:=y to 99 do
    if x*x+y*y=z*z then
      begin
        if x<y then min:=x else min:=y;
        for i:=1 to min do
          if (x mod i=0) and (y mod i=0) then nod1:=i; {НОД для пары чисел x и y}

        if y <z then min:=y else min:=z;
        for i:=1 to min do
          if (y mod i=0) and (z mod i=0) then nod2:=i;{НОД для пары чисел y и z}

        if x <z then min:=x else min:=z;
        for i:=1 to min do
          if (x mod i=0) and (z mod i=0) then nod3:=i; {НОД для пары чисел x и z}

        {если НОДы тройки чисел равны 1 и сами числа пифагоровы,
        то тройка чисел - примитивная. Выводим ее на экран: }

        if (nod1=1) and (nod2=1) and (nod3=1 ) then
          writeln(x:10,y:10,z:10);

      end;
end.

4. Найти количество трехзначных примитивных пифагоровых троек.
Ответ: k=97

program pif_04;
uses crt;
var
    x, y, z: integer; {проверяемые числа}
    min, i, nod1, nod2, nod3: integer; {переменные для поиска НОД}
    k: integer; {количество трехзначных примитивных пифагоровых троек}
begin
clrscr;
for x:=100 to 999 do
for y:=x to 999 do
for z:=y to 999 do
if x*x+y*y=z*z then
    begin
      if x<y then min:=x else min:=y;
      for i:=1 to min do
        if (x mod i=0) and (y mod i=0) then nod1:=i;{НОД для пары чисел x и y}


      if y<z then min:=y else min:=z;
      for i:=1 to min do
        if (y mod i=0) and (z mod i=0) then nod2:=i;{НОД для пары чисел y и z}


      if x<z then min:=x else min:=z;
      for i:=1 to min do
        if (x mod i=0) and (z mod i=0) then nod3:=i; {НОД для пары чисел x и z}


      {если НОДы тройки чисел равны 1 и сами числа пифагоровы, то тройка чисел - примитивная. Увеличим количество примитивных троек на 1}
      if ( nod1=1) and (nod2=1) and (nod3=1) then inc(k) ;

    end;
writeln('k=',k)
end.

 

 

 

 

Copyright ©2011 Nika A.S.
Hosted by uCoz