Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Ошибка с заменой компонент матрицы

Ответить
Настройки темы
Разное - Ошибка с заменой компонент матрицы

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


По условию: одномерный массив сформировывается из максимальных по абсолютному значению компонентов матрицы. Для наглядности: допустим если наша матрица m[i,j] имеет пять максимумов с индексами [1,1],[1,3],[2,1],[2,3],[2,4] то одномерный массив должен выглядеть вот так v[i]=1 1 -1 -1 1
Помогите с исправлением ошибки в подпрограмме procedure substitution_meaning_massif;
Код: Выделить весь код
Program zadanie;
Uses crt;
const
     digits=1;
Type matrix = Array [1..10, 1..10] of real;
     massiv = Array [1..100] of Integer;
Var m: matrix;
     tmp, max:real;
     v: massiv;
     s,imax,n,k: Integer;
     procedure input_matrix;
          var  n,k,i,j,a,b,p1,p2: Integer;
          begin
               Write ('Введите количество строк матрицы n');
               WriteLN (' не менее 2 и не более 10');
               ReadLN (n);
               If (n<2) Or (n>10) Then
                    Begin
                    Write ('Вы ввели неправильное количество строк меньше 2 или');
                    Write (' больше 10, поэтому принят');
                    WriteLN (' максимальный размер, т.е. n=10');
                    n:=10;
                    End;
               Write ('Введите количество столбцов матрицы k');
               WriteLN (' не менее 2 и не более 10');
               ReadLN (k);
               If (k<2) Or (k>10) Then
                    Begin
                    Write ('Вы ввели неправильное количество столбцов меньше 2 или');
                    Write (' больше 10, поэтому принят');
                    WriteLN (' максимальный размер, т.е. k=10');
                    k:=10;
                    End;
               Write ('Введите левую а и правую b границы диапазона');
               WriteLN (' значений компонент матрицы');
               Write ('a='); ReadLN (a);
               Write ('b='); ReadLN (b);
               If a>b Then
                    Begin
                    p1:=a; a:=b; b:=p1;
                    End;
               If a=b Then
                    Begin
                    p1:=0; p2:=b;
                    End
               Else
                    If b=0 Then
                         Begin
                         p1:=a; p2:=0;
                         End
                    Else
                         Begin
                         p1:=b-a; p2:=a;
                         End;
               Randomize;
               For j:=1 To k Do
                    begin For i:=1 To n Do
                         Begin
                         m[i,j]:=p2+random(p1+1);
                         end end;
          end;
     procedure output_matrix;
          var i,j,n ,k: integer;
          begin
               writeln ('Исходная матрица');
               For i:=1 To n Do
                    begin
                    For j:=1 To k Do
                         begin Write (m[i,j]:6:digits) end;
                    write(' ');
                    writeln;
                    end;
          End;
     procedure seach_abs_max;
          var i,j,n ,k: integer;
          begin
               imax:=1;
               max :=m[i,j];
               for i:=1 to N do
                    begin for j:=1 to k do
                         begin if max<abs(m[i,j]) then
                              begin
                              max:=abs(m[i,j]);
                              imax:=i;
                              imax:=j;
                              end;
                         end;
                    end;
               writeln('Максимальное абсолютное значение: max=',max:5:digits);
          end;
     procedure seach_quantum_abs_max;
          var i,j,n ,k: integer;
          begin
               For i:=1 to n do
                    begin For j:=1 to k do
                         begin If abs(m[i,j])=max then
                              begin s:=s+1 end end end;
               Writeln('Количество совпадений max= ',s);
          end;
     procedure substitution_meaning_massif;
          var i,j,n ,k: integer;
          begin
               write('Одномерный массив');
               if ((i+j) mod 2)=0 then
                    begin v[s]:=1 end
               else
                    begin v[s]:=-1 end;
               For i:=1 to s do
                    begin write(v[i]:3) end;
          end;
     procedure output_regenerate_matrix;
          var i,j,n ,k: integer;
          begin
               Writeln;
               Write('Измененная матрица');
               for i:= 1 to n do
                    begin
                    tmp:= m[1,i];
                    m[1,i]:= m[n,i];
                    m[n,i]:= tmp;
                    end;
               for i:= 1 to n do
                    begin
                    writeln;
                    for j:= 1 to k do

                         begin write(m[i,j]:6:digits) end;
                    end;
          end;
begin
     input_matrix;
     output_matrix;
     seach_abs_max;
     seach_quantum_abs_max;
     substitution_meaning_massif;
     output_regenerate_matrix;
END.

Отправлено: 10:37, 18-03-2013

 

Ветеран


Сообщения: 1810
Благодарности: 146

Профиль | Отправить PM | Цитировать


Пример абсолютно не понятен. Да и задание сформировать массив из максимальных элементов матрицы - тоже. Ежели матрица - это массив Array of real, как у Вас написано. Действительные числа отображаются в памяти компьютера только приближенно. Если вы сравниваете два действительных числа, вроде

if max<abs(m[i,j])

то и погрешность отображения этих чисел компьютером тоже должна учитываться.

Отправлено: 13:52, 18-03-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Tau_0

Ветеран


Сообщения: 6211
Благодарности: 1393

Профиль | Отправить PM | Цитировать


Цитата XPEHOMETP:
Если вы сравниваете два действительных числа, вроде
if max<abs(m[i,j])
то и погрешность отображения этих чисел компьютером тоже должна учитываться. »
Ну, больше/меньше, --- это ещё куда ни шло... Но вот такаое сравнение на равенство двух вещественных чисел (чисел с плавающей точкой)
Цитата:
begin If abs(m[i,j])=max
ни в какие ворота не лезет. Ни в жисть там равенства не будет.

Надо вводить Epsilon > 0, и считать равными m[i,j]) и max, если abs( abs( m[i,j]) ) - max ) < Epsilon.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:01, 18-03-2013 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Ошибка с заменой компонент матрицы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Количество компонент матрицы совпадающих по абсолютному значению с максимумом MAKS-I Программирование и базы данных 0 07-03-2013 20:34
CMD/BAT - Копирование файла с заменой Meloslavsky Скриптовые языки администрирования Windows 3 31-01-2013 11:39
C/C++ - [решено] Нахождение обратной матрицы методом Гаусса и рассширенной матрицы D.Y. Программирование и базы данных 64 06-05-2011 22:59
Разное - Проблемы с заменой иконок DimonV Оформление Windows XP 7 05-01-2009 18:50
C/C++ | Матрицы Kuron Программирование и базы данных 2 21-01-2007 10:09




 
Переход