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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2012, 22:23   #1
Nerotim
Пользователь
 
Регистрация: 28.10.2012
Сообщений: 16
Восклицание не могу понятьпроцедуры

Задача
Найти наименьший элемент в каждой четной строке матрицы A и из этих элементов создать одномерный массив.Матрицу и сформированный массив на печать. Сделать процедурами.

Выдает ошибку переменных, не могу понять как исправить.

И вообще верный ли алгоритм?

Код:
  program Project3;

{$APPTYPE CONSOLE}

uses
  SysUtils, math;
  Type Tmatr = array[1..10, 1..5] of integer; Tmas=array[1..10] of integer;
  //------------------------------------------------------
  Procedure vvod (var a:Tmatr; ni,nj:integer);
  var i,j:integer;
begin
  for i := 1 to ni  do
    begin
      for j := 1 to nj do
      read(a[i,j]);
      readln;
    end;
end;
//====================================================
Procedure vivod( a:Tmatr; b:Tmas; var ni,nj,nk:integer);
var i,j,k:integer;
begin
  writeln ('ishodnaya matriza');
  for i := 1 to ni do
  begin
    for j := 1 to nj do
      writeln(a[i,j]);
      writeln ;
  end;

writeln('polychenyi massiv');
for k := 1 to nk do
  write (b[k]);
writeln;
end;
//==========================================
Procedure alg(var a:Tmatr; var b:Tmas; nk,ni,nj:integer    );
var i,k,j,min: integer;
begin

  for i := 1 to ni do
    if i mod 2 = 0  then
    begin
      min:=a[i,1];
      for j := 2 to nj do
        if a[i,j]<min  then
   min:=a[i,j];

    end;
    for k := 1 to nk  do
      b[k]:=min;
end;
//================================================
var a1:Tmatr; b1:Tmas;
l,m,n: integer;
begin
writeln('vvedite razmer');
readln (m,n);
writeln('vvedite matricy');
vvod(a1,m,n);
alg (a1,m,n,b1,l);
vivod(a1,m,n,b1,l);
readln;
end.
Заранее спасибо.
Nerotim вне форума Ответить с цитированием
Старый 28.10.2012, 22:39   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Код:
 program Project3;

{$APPTYPE CONSOLE}

uses
  SysUtils, math;
  Type Tmatr = array[1..10, 1..5] of integer;
  Tmas=array[1..10] of integer;
  //------------------------------------------------------
  Procedure vvod (var a:Tmatr; ni,nj:integer);
  var i,j:integer;
begin
  for i := 1 to ni  do
    begin
      for j := 1 to nj do
      readln(a[i,j]);
//      readln; //зачем?
    end;
end;
//====================================================
Procedure vivod( a:Tmatr; b:Tmas; var ni,nj,nk:integer);
var i,j,k:integer;
begin
  writeln ('ishodnaya matriza');
  for i := 1 to ni do
  begin
    for j := 1 to nj do
      write{ln}(a[i,j]:5);   //!!!
      writeln ;
  end;

writeln('polychenyi massiv');
for k := 1 to nk do
  write (b[k]:5);
writeln;
end;
//==========================================
Procedure alg(var a:Tmatr; var b:Tmas; VAR nk,ni,nj:integer    );
var i,k,j,min: integer;
begin
  NK:=1;
  for i := 1 to ni do
    if i mod 2 = 0  then
      begin
        min:=a[i,1];
        for j := 2 to nj do
          if a[i,j]<min then
            min:=a[i,j];
        B[NK]:=MIN;
        NK:=NK+1;
      end;
end;
//================================================


var a1:Tmatr; b1:Tmas;
l,m,n: integer;
begin
  writeln('vvedite razmer');
  readln (m,n);
  writeln('vvedite matricy');
  vvod(a1,m,n);
  alg(a1,b1,l,m,n);//!!!
  vivod(a1,b1,m,n,l);
  readln;
end.
Обрати внимание на комментарии, и то, что написано КАПСОМ. И всякие ni, nj и nk лучше делать глобальными переменными. А еще лучше использовать динамические массивы
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 29.10.2012, 20:19   #3
Nerotim
Пользователь
 
Регистрация: 28.10.2012
Сообщений: 16
По умолчанию

Огромное спасибо
Nerotim вне форума Ответить с цитированием
Старый 29.10.2012, 20:50   #4
Nerotim
Пользователь
 
Регистрация: 28.10.2012
Сообщений: 16
По умолчанию

А откуда берется ноль в конце выводимого массива?
Nerotim вне форума Ответить с цитированием
Старый 29.10.2012, 20:55   #5
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Nerotim Посмотреть сообщение
А откуда берется ноль в конце выводимого массива?
Код:
Procedure alg(var a:Tmatr; var b:Tmas; VAR nk,ni,nj:integer    );
var i,k,j,min: integer;
begin
  NK:=0;
  for i := 1 to ni do
    if i mod 2 = 0  then
      begin
        min:=a[i,1];
        for j := 2 to nj do
          if a[i,j]<min then
            min:=a[i,j];
        NK:=NK+1;
        B[NK]:=MIN;
//        NK:=NK+1;
      end;
end;
Так правильнее будет
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 29.10.2012, 20:59   #6
Nerotim
Пользователь
 
Регистрация: 28.10.2012
Сообщений: 16
По умолчанию

Код:
Procedure alg(var a:Tmatr; var b:Tmas; VAR nk,ni,nj:integer    );
var i,k,j,min: integer;
begin
  NK:=1;
  for i := 1 to ni do
    if i mod 2 = 0  then
      begin
        min:=a[i,1];
        for j := 2 to nj do
          if a[i,j]<min then
            min:=a[i,j];
       //   for k := 1 to nk do
     //       b[k]:=min;

Я просто задал массив и вроде все стало ок, ноль пропал)
Спасибо за помощь)
Nerotim вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу переписать на с++ Хорёк C++ Builder 0 12.06.2012 20:30
Не могу разобраться Lokin Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 22.03.2010 22:45
С++ не могу дописать kolashik Помощь студентам 1 31.10.2009 17:40
Не могу всё никак не могу эту лабораторку сдать помогите плиз Dimon.ru Паскаль, Turbo Pascal, PascalABC.NET 2 16.06.2009 20:53