Напечатать все простые несократимые дроби, заключенные между 0 и 1, знаменатели которых не превышают 7, в порядке возрастания. - Pascal
Формулировка задачи:
Напечатать все простые несократимые дроби, заключенные между 0 и 1, знаменатели которых не превышают 7, в порядке возрастания.
Решение задачи: «Напечатать все простые несократимые дроби, заключенные между 0 и 1, знаменатели которых не превышают 7, в порядке возрастания.»
textual
Листинг программы
uses crt;
const n=7;
type
frac=record
p,q:1..n;
end;
function Nod(m,n:byte):byte;{функция определения наибольшекго общего делителя
один из алгоритмов}
begin
while m<>n do
if m>n then m:=m-n else n:=n-m;
Nod:=m;
end;
var
m:array[1..(n*n+n) div 2] of frac;{максимльный размер массива=сумме прогрессии 1,2,3...n}
k,i,j:byte;
x:frac;{переменная-буфер для сортировки}
begin
clrscr;
k:=0;
for i:=1 to n do{перебираем все числа от 1 до 7}
for j:=1 to n do
if(i<j)and (Nod(j,i)=1)then{если первое число меньше второго и они несократимы}
begin
k:=k+1;{cчитаем}
m[k].p:=i;{меньше в числитель}
m[k].q:=j;{больше в знаменатель}
end;
for i:=1 to k-1 do{сортируем обменом по возрастанию}
for j:=i+1 to k do
if m[i].p/m[i].q> m[j].p/m[j].q then
begin
x:=m[i];
m[i]:=m[j];
m[j]:=x;
end;
for i:=1 to k do{выводим}
write(m[i].p,'/',m[i].q,' ');
readln
end.
Объяснение кода листинга программы
Этот код написан на языке Pascal и выполняет следующие действия:
- Создает переменную
nсо значением 7, которое представляет верхнюю границу для дробей в числителе и знаменателе. - Определяет тип
frac, который представляет структуру для хранения дробей в виде записиp, q: 1..n. - Определяет функцию
Nod, которая реализует алгоритм наибольшего общего делителя (НОД) двух чисел. - Объявляет переменные
m,k,iиjдля хранения массива дробей, индексов и чисел соответственно. - Инициализирует переменную
kзначением 0 и начинает циклfor, который перебирает числа от 1 до 7 (т.е. от 1 доn). - Внутри цикла
forпроверяет условиеif(i<j)and (Nod(j,i)=1), что означает, что текущее числоiменьше текущего числаjи они являются несократимыми. Если это условие истинно, то увеличивает значениеkна 1 и присваивает соответствующие элементы массиваmтекущим числомiи знаменателюj. - После завершения внутреннего цикла
for, происходит внешний циклfor, который сортирует массивmпо возрастанию. Для этого используется алгоритм сортировки обменом. - После завершения внешнего цикла
for, происходит еще один циклfor, который выводит каждую дробь из массиваmв консоль. - В конце кода происходит вызов функции
readln, чтобы ожидать ввода пользователя перед завершением программы.