Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2010, 20:06   #1
Macmeprag
Пользователь
 
Аватар для Macmeprag
 
Регистрация: 07.10.2010
Сообщений: 43
По умолчанию Задача

Дана целочисленная матрица {Aij}i=1...n;j=1..n , n<=100.
Если в матрице есть два столбца с одинаковой суммой элементов, упорядочить столбцы матрицы по неубыванию количества простых чисел
в столбце.
Язык сейчас учим паскаль, но пишем в среде делфи..
То что я накатал работает отлично и выполняет поставленную задачу, но требует преподаватель основную программу свести к виду:
Код:
Begin
       Read_Data(n,A);
       Solve(n,A);
       Print_Result(n,A);
End.
Накатал вот это вот:
Код:

{$APPTYPE CONSOLE}
{$I+,R+,Q+}

uses
  SysUtils;
const
  NMax=100;
type
  matrix=array[1..NMax,1..NMax] of integer;
var
  condition       : boolean;
  a               : matrix;
  i,j,n,k,l,sum,z : integer;
  b,c             : array[1..NMax] of integer;

procedure SwapColumn(var a:matrix; x,y,n:integer);
var
  i,t:integer;
begin
  for i:=1 to n do begin
    t:=a[i,x];
    a[i,x]:=a[i,y];
    a[i,y]:=t
  end;
end;

function IsPrime(x:integer):boolean;
var
  i : integer;
begin
  If x<2 then IsPrime:=false
  Else begin
  IsPrime:=true;
  for i:=2 to round(sqrt(x)) do
    if x mod i = 0 then begin
      IsPrime:=false;
      Break;
    end;
  end;
end;

begin
  assign(input,'input.txt');
  reset(input);
  assign(output,'output.txt');
  rewrite(output);
  Read(n);
  WriteLn('Изначальный массив:');
  for i:=1 to n do
    for j:=1 to n do Read(a[i,j]);
  for i:=1 to n do begin
    for j:=1 to n do Write(a[i,j]:5);
  WriteLn;
  end;
  WriteLn;
  WriteLn('Суммы элементов столбцов:');
  for j:=1 to n do begin
    sum:=0;
    for i:=1 to n do sum:=sum+a[i,j];
      for l:=j to j do begin
      c[l]:=sum;
      Write(c[l]:5);
      end;
  end;
  for l:=1 to n-1 do             //Проверка есть ли 2 столбца с одинаковыми суммами
    for i:=l+1 to n do
      if c[l]=c[i] then begin
        condition:=true;
        break
      end;
  j:=0;
  repeat                     //Подсчет кол-ва простых эл-тов в столбцах и вывод их в отд. массив
    inc(j);
    k:=0;
      for i:=1 to n do
        if IsPrime(a[i,j]) then inc(k);
    if k=0 then
      for l:=j to j do b[l]:=0
    else
      for l:=j to j do b[l]:=k;
  until j=n;
  WriteLn;
  WriteLn('Количество простых чисел в каждом столбце:');
  for l:=1 to n do Write(b[l]:5);
  WriteLn;
  for j:=1 to n do
    if Condition(c[j]) then begin
      for z:=1 to n-1 do begin
        for l:=z+1 to n do
          if b[l]<b[z] then SwapColumn(a,z,l,n);
    end;
  end
  else begin
  WriteLn('Условие не выполнено, работа программы завершена.');
  halt;
  end;
  WriteLn('Отсортированный массив:');
  for i:=1 to n do begin
    for j:=1 to n do Write(a[i,j]:5);
  WriteLn;
  end;
end.
Помогите пожааалуйста

Последний раз редактировалось Macmeprag; 07.10.2010 в 22:07.
Macmeprag вне форума Ответить с цитированием
Старый 08.10.2010, 19:29   #2
Macmeprag
Пользователь
 
Аватар для Macmeprag
 
Регистрация: 07.10.2010
Сообщений: 43
По умолчанию

Помогите пожалуйста, я не знаю как этот код занести в процедуры/функции
А сдать надо уже завтра
Macmeprag вне форума Ответить с цитированием
Старый 08.10.2010, 20:12   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
{$APPTYPE CONSOLE}
{$I+,R+,Q+}
...
aMat               : matrix;

procedure SwapColumn(var a:matrix; x,y,n:integer);
var
  i,t:integer;
begin
...
end;

function IsPrime(x:integer):boolean;
var
  i : integer;
begin
...
end;

Procedure Solve(n:integer,A:matrix);
begin
  assign(input,'input.txt');
  reset(input);
  assign(output,'output.txt');
  rewrite(output);
  Read(n);
...
  WriteLn('Отсортированный массив:');
  for i:=1 to n do begin
    for j:=1 to n do Write(a[i,j]:5);
  WriteLn;
  end;
end;

Begin
       Read_Data(n,aMat);
       Solve(n,aMat);
       Print_Result(n,aMat);
End.
Увидел что нужно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.10.2010, 11:23   #4
Macmeprag
Пользователь
 
Аватар для Macmeprag
 
Регистрация: 07.10.2010
Сообщений: 43
По умолчанию

Да, понял, закинул все в процедуру солв - работает
попробовал из нее вытащить в readdata и в printresult - выдает ошибку на полпути процедуры solve..
Код:
procedure ReadData(var n:integer; a:matrix);
var
  i,j : integer;
begin
  assign(input,'input.txt');
  reset(input);
  Read(n);
  for i:=1 to n do
    for j:=1 to n do Read(a[i,j]);
end;

procedure WriteData(n:integer; a:matrix);
var
  i,j : integer;
begin
  assign(output,'output.txt');
  rewrite(output);
  WriteLn('Отсортированный массив:');
  for i:=1 to n do begin
    for j:=1 to n do Write(a[i,j]:5);
  WriteLn;
  end;
end;
Macmeprag вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на С++ morindos Помощь студентам 3 15.10.2009 18:22
Задача на C mirawoo Общие вопросы C/C++ 5 18.08.2009 17:31
Задача на VB 6.0 Maxs Помощь студентам 3 27.05.2009 16:57