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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2013, 23:07   #1
Язуджи
 
Регистрация: 22.12.2013
Сообщений: 7
По умолчанию Программирование с использованием процедур

Срочно нужно помощь! В основном написал программу, но она работает не корректно(думаю, что ошибки в процедуре "ChangeAfterMin"). Суть задачки заключается в том, что в каждую из двух матриц вставить заданные числа (которые задаёт пользователь) после минимального элемента каждого столбца.
Вот, что я смог накалякать:

Код:
type
  MatrA = Array[1..10, 1..5] of real;

type
  MatrB = Array[1..7, 1..6] of real;

var
  A: MatrA;
  B: MatrB;
  Z, N, M, K, L: integer;

procedure fillMatr(var A: MatrA; var B: MatrB);
var
  i, j: integer;
begin
  write('Введите число Z = ');
  read(Z);
  writeln('Заполнение матрицы А[N,M] ');
  write('Введите количество строк N = ');
  readln(N);
  write('Введите количество строк M = ');
  readln(M);
  for i := 1 to N do
    for j := 1 to M do
    begin
      write('A[', i, '][', j, '] = ');
      read(A[i, j]); 
    end;
  writeln('Заполнения матрицы B[K,L]');
  write('Введите количество строк K = ');
  readln(K);
  write('Введите количество строк L = ');
  readln(L);
  for i := 1 to K do
    for j := 1 to L do
    begin
      write('B[', i, '][', j, '] = ');
      read(B[i, j]); 
    end;
  writeln('Исходная матрица A :');
  for i := 1 to N do
  begin
    for j := 1 to  M do
    begin
      write(A[i][j]:5, '     ');
    end;
    writeln('  ');
  end;
  writeln('Исходная матрица B :');
  for i := 1 to K do
  begin
    for j := 1 to  L do
    begin
      write(A[i][j]:5, '     ');
    end;
    writeln('  ');
  end;
end;

procedure ChangeAfterMin(var A: MatrA; var B: MatrB; Z: real);
var
  i, j, minj: integer;
  min: real;
begin
  for i := 1 to N do
  begin
    min := A[1, 1];
    minj := 1;
    for j := 2 to M do
    begin
      if (min > A[j, i]) then
      begin
        min := A[j, i];
        minj := j;
      end;
    end;
    for j := minj + 1 to M do 
    begin
      A[j, i] := Z;
    end;
  end;
  begin
    for i := 1 to K do
    begin
      min := B[1, 1];
      minj := 1;
      for j := 2 to L do
      begin
        if (min > B[j, i]) then
        begin
          min := B[j, i];
          minj := j;
        end;
      end;
      for j := minj + 1 to L do 
      begin
        B[j, i] := Z;
      end
    end;
  end;
end;

procedure outputA(A: MatrA);
var
  i, j: integer;
begin
  for i := 1 to N do 
  begin
    for j := 1 to M do 
    begin
      write(A[i][j]:5, '     ');
    end;
    writeln('  ');
  end;  
end;

procedure outputB(B: MatrB );
var
  i, j: integer;
begin
  for i := 1 to K do 
  begin
    for j := 1 to L do 
    begin
      write(A[i][j]:5, '     ');
    end;
    writeln('  ');
  end;  
end;

begin
  fillMatr(A, B);
  changeAfterMin(A, B, Z);
  writeln('Mатрица A после обработки :');
  outputA(A);
  writeln('Mатрица B после обработки :');
  outputB(B);
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 23.12.2013 в 08:34.
Язуджи вне форума Ответить с цитированием
Старый 23.12.2013, 01:38   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Я не проверял весь код, может быть и работает. Но тут нарушена сама идеология использования процедур (и вообще подпрограмм). Процедуры - они для того, чтобы не городить огород по нескольку раз.
А тут в ChangeAfterMin - поиск и замена в одной матрице, потом то же для другой матрицы.
Лучше сделать процедуру для поиска и замены для любой матрицы, то есть динамического массива.
Код:
 type  Matr2 = array of array of Real; // динамический 2-мерный массив
 var A,B:Matr2;
И потом вызвать ее 2 раза - для A и для B . То же и для других процедур.
PS Кстати, K,L,N,M чему равны ?

Последний раз редактировалось type_Oleg; 23.12.2013 в 01:41.
type_Oleg вне форума Ответить с цитированием
Старый 23.12.2013, 08:49   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, согласен с мнением type_Oleg
Цитата:
Сообщение от type_Oleg
Процедуры - они для того, чтобы не городить огород по нескольку раз.
во-вторых, насчёт динамических массивов всё не так однозначно.
Язуджи, какой у Вас Паскаль?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.12.2013, 14:08   #4
Язуджи
 
Регистрация: 22.12.2013
Сообщений: 7
По умолчанию

По условию N <=10; M<=5; K<=7; L<=6. Но по сути это предельные значения матриц, их границы, т.е. не обязательно задавать матрицу 10x5 и заполнять её, можно и 3х3... Кстати, не удивлён, что вы нашли ошибки в процедурах, т.к. сам вот-вот их изучил и что-то пытаюсь сотворить с ними. Опыта работы с процедурами нет совсем.
Язуджи вне форума Ответить с цитированием
Старый 23.12.2013, 14:09   #5
Язуджи
 
Регистрация: 22.12.2013
Сообщений: 7
По умолчанию

Pascal ABC.net
Язуджи вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 6 02.11.2012 21:46
программирование с использованием процедур Forest21 Помощь студентам 1 16.04.2012 19:33
Программирование с использованием процедур и функций vampir3001 Помощь студентам 2 14.12.2011 01:05
Программирование с использованием процедур и функций...на Паскале Лизонька Помощь студентам 1 25.02.2010 23:29
Программирование с использованием процедур и функций Лизонька Помощь студентам 2 25.02.2010 22:50