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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2011, 18:01   #1
Pepsik
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 15
Вопрос обработка массивов

задание такое :
Дан массив вещественных квадратных матриц. Вывести матрицы с наименьшей нормой. В качестве нормы матрицы взять максимум абсолютных величин ее элементов.
Работать нужно именно с массивом матриц, в данном случае m=7.
Код:
Program lab5_22;
const n=3;
      m=7;
type t_matr=array[1..n,1..n]of real;
marr=array[1..m] of t_matr;
var a,b:t_matr;
i,j:integer;

procedure read_matr(var a: t_matr);
var i, j: byte;
begin
for i:=1 to m do
for j:=1 to n do
read(a[i, j]);
end;

function norma(x:t_matr):real;
var i,j:integer;  max:real;
begin
max:=abs(x[1,1]);
for i:=1 to n do
for j:=1 to n do
if abs(x[i,j])>max  then
max:=abs(x[i,j]);
norma:=max;
end;

var c:t_matr;
begin
for i:=1 to m do
read_matr(a[i]);
writeln;
writeln('Norma matricy A= ',norma(a):0:2);
writeln('Norma matricy B= ',norma(b):0:2);
end;
begin
b:=norma(a[1]);
for i:=2 to m do
begin
c:=norma(a[i]);
if b>c then
b:=c;
end;
end;
readln;
end.
помогите найти и исправить ошибки, пожалуйста
Pepsik вне форума Ответить с цитированием
Старый 11.07.2011, 18:28   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А ошибки-то в чем? В том, что код писали не вы?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.07.2011, 18:45   #3
Pepsik
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 15
По умолчанию

да нет, писал как раз я. в первой части уверен. а вот там, где по идее должно идти сравнение норм матриц, косяк. не знаю как правильно это организовать
Pepsik вне форума Ответить с цитированием
Старый 11.07.2011, 23:39   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

У Вас же программе не то, чтобы не работает.
Она же даже не компилируется.
Допущена целая куча ошибок.

из первоочередных.

1) переменные а b не того типа, что Вам нужны.
Должно быть:
var a : marr;
b : real;

2) в процедуре read_matr цикл по i должен быть от 1 до n (смотри ниже)

3) строчки
Цитата:
Код:

writeln('Norma matricy A= ',norma(a):0:2);
writeln('Norma matricy B= ',norma(b):0:2);
выкиньте напрочь. У Вас нет матрицы А и матрицы B!
Все матрицы содержатся в массиве a
(a[1] - это первая матрица, a[2] - вторая... и так до a[m] - последняя, в вашем примере седьмая матрица.

если Вы хотите вывести нормы этих матриц, то это делать надо в цикле. (смотри пример ниже)

4) у вас небаланс begin'ов и end'ов (для некоторых END отсутствует BEGIN

5) не ошибка. но я в примере заменил ввод матриц оператором на получение элементов случайным образом. Иначе замучаешься вводить семь матриц размером три на три..
Если надо всё же вводить руками - убрать randomize, убрать random и расскомментарить read(a[i,j])

Код:
Program lab5_22;
const n=3;
      m=7;
type 
  t_matr=array[1..n,1..n]of real;
  marr=array[1..m] of t_matr;


procedure read_matr(var a: t_matr);
var i, j: byte;
begin
for i:=1 to n do
for j:=1 to n do
  {read(a[i, j]);} a[i,j] := (random(1000)+1)/100;
end;

function norma(x:t_matr):real;
var i,j:integer;  max:real;
begin
  max:=abs(x[1,1]);
  for i:=1 to n do
    for j:=1 to n do
       if abs(x[i,j])>max  then
             max:=abs(x[i,j]);
  norma:=max;
end;

var
  a    : marr;
  bMin : real;
  i    : integer;

begin
  randomize;
  {ввод матриц}
  for i:=1 to m do begin
     WriteLn('Введите ',i,'-ю матрицу');
     read_matr(a[i]);
  end;

  {вывод норм всех матриц}
  for i:=1 to m do 
     WriteLn('Норма ',i,'-й матрицы равна ',norma(a[i]):0:2);

  {найти минимальное значение нормы}
  bMin := norma(a[1]);
  for i:=2 to m do
    if norma(a[i])<bMin then bMin := norma(a[i]);

  {А вот и главный ответ на вопрос задачи:
    вывести номера матриц с минимальной нормой}
  WriteLn;
  Writeln('Минимальная норма равна ',bMin:0:2);
  WriteLn('Минимальную норму имеют следующие матрицы:');
  for i:=1 to m do 
     if norma(a[i])=bMin then
         WriteLn(i,'-я матрица ');

  readln;
end.

p.s. в задаче требуется организовать вывод содержимого матрицы. Если Вы сами писали задачу, не думаю, что это составит для Вас трудность..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.07.2011, 08:33   #5
Pepsik
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 15
Радость

спасибо огромное, Serge_Bliznykov. выручил
Pepsik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка массивов VIKA1829 Помощь студентам 1 01.06.2011 16:09
Обработка массивов Юлёна Паскаль, Turbo Pascal, PascalABC.NET 1 15.03.2011 22:01
обработка массивов vvioleta Помощь студентам 1 14.11.2009 13:10