Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 18.03.2013, 13:44   #1 (permalink)
maksi
Новичок
 
Регистрация: 09.03.2013
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Red face Ошибка в подпрограмме с заменой компонент матрицы

По условию: одномерный массив сформировывается из максимальных по абсолютному значению компонентов матрицы. Для наглядности: допустим если наша матрица 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.
maksi вне форума   Ответить с цитированием

Старый 18.03.2013, 13:44
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Обратите внимание на схожие темы - это должно вам помочь

Количество компонент матрицы совпадающих по абсолютному значению с максимумом
Повредил компонент LED гирлянды, нужна помощь
Проблемы с заменой HDD на ноутбуке
Проблемы с заменой памяти

Старый 18.03.2013, 14:24   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Так, ну иметь с Вами дело, похоже, смысла нет: разбирались-разбирались в теме Количество компонент матрицы совпадающих по абсолютному значению с максимумом , и всё-таки этот абсолютно бессмысленный бред

imax:=1;
...
imax:=i;
imax:=j;

который следовало просто выбросить, благополучно перекочевал в процедуру seach_abs_max (между прочим, к слову, уж если Вы пользуетесь английским языком, то делать это желательно грамотно: "поиск" по-английски будет "search").

Теперь по процедуре substitution_meaning_massif. Где, скажите пожалуйста, там вообще хоть какой-нибудь цикл по i и j?! Отсутствует напрочь. Поскольку i и j определены в теле процедуры, им по умолчанию присвоены нулевые значения, да тем дело и кончается, а дальнейшее ветвление просто "висит в воздухе". Ну-ну...
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 21:15.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.