Помощь - Поиск - Пользователи - Календарь
Полная версия: задача на совершенные числа
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Анжелика
Привет всем. У меня есть вопрос по задаче, которая приведена ниже, скажите, правильно ли я осуществила алгоритм и вообще я правильно решила задачу? Вот задача: "Вводятся размеры двумерного массива, состоящего из целых чисел, и его элементы. Действия: найти строку с минимальным количеством совершенных чисел."
Код

Uses crt;

Var
  a:array [1..100,1..100] of integer;
  i,l,n,k,s,c,m,j,ns:integer;
  f:boolean;
Begin
     clrscr;
     writeln('vvedite n');
                      readln(n);
     writeln('vvedite m');
                      readln(m);
     writeln('vvedite matrizy');
     for i:=1 to n do
     begin
         for j:=1 to m do
         begin
              write('a[',i,',',j,']');
              readln(a[i,j]);
         end;
         writeln;
     end;

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

     l:=n; f:=false;
     for i:=1 to n do
     begin
          c:=0;
               for j:=1 to m do
               begin
                    S:=0;
                    for k:=1 to (a[i,j]-1) do if a[i,j]mod k=0 then s:=s+k;
                    if a[i,j]=s then c:=c+1;
               end;
          if (c<=l) and (c<>0) then
             begin
                  l:=c;
                  ns:=i;
                  f:=true
             end;
     end;

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

     if f then
              begin
                   writeln('pechat stroki');
                   for j:=1 to m do
                       write (a[ns,j]:5);
              end
          else write('takih net');
     readln;
end.

klem4
Посмотри вот эту прогу, если что не понятноб спаршивай, ps всегда лучше использовать подпрограммы, легче разбираться потом будет и ошибки искать ...

uses crt;
const
n=4;
type
TMatrix = array[1..n,1..n] of integer;

procedure Input(var mx : TMatrix);
var
i,j : byte;
begin
for i := 1 to n do
for j := 1 to n do begin
write('m[',i,',',j,']=');
readln(mx[i,j]);
end;
writeln;
end;

procedure Print(mx : TMatrix);
var
i,j : byte;
begin
for i := 1 to n do begin
writeln;
for j := 1 to n do write(mx[i,j]:3,' ');
end;
writeln;
end;

function IsPerfect(k : integer) : boolean;
var
s,i : integer;
begin
IsPerfect := false;
s := 0;
for i := 1 to k div 2 do
if k mod i = 0 then
s := s + i;
IsPerfect := (k=s);
end;

function PerfectInRow(mx : TMatrix; row : byte) : byte;
var
count,j : byte;
begin
count := 0;
for j := 1 to n do
if IsPerfect(mx[row,j]) then inc(count);
PerfectInRow := count;
end;

function GetMinRow(mx : TMatrix) : byte;
var
min,i : byte;
begin
min := 1;
for i := 2 to n do
if PerfectInRow(mx, i) < PerfectInRow(mx, min) then
min := i;
GetMinRow := min;
end;

var
m : TMatrix;
i : byte;
begin

clrscr;

Input(m);
Print(m);
writeln;
writeln(GetMinRow(m));


readln
end.
Анжелика
Очень признательна за вариант, но у меня вопрос почему нет ввода размера матрицы и почему она квадратная?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.