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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2015, 20:07   #1
masynye
Новичок
Джуниор
 
Регистрация: 28.11.2015
Сообщений: 3
По умолчанию помогите пожалуйста решить задачку без использования функций и подпрограмм

тема : Использование процедур при работе с двумерными массивами
Дана квадратная матрица порядка n(n=7), в которой все элементы различны. Найти скалярное произведение строки, в которой находится наибольший элемент матрицы, на столбец с наименьшим элементом. Полученным числом заменить элементы главной диагонали.
masynye вне форума Ответить с цитированием
Старый 28.11.2015, 20:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Твои попытки увидеть можно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.11.2015, 23:08   #3
masynye
Новичок
Джуниор
 
Регистрация: 28.11.2015
Сообщений: 3
По умолчанию

Код:
uses crt;

const n=7;

{
max - максмальное элемент матрицы
min - минимальный элемент матрицы
imax - индекс строки, где хранится максимальный элемент матрицы
jmin - индекс столбца, где хранится минимальный элемент матрицы
sum - скалярное произведение строки с максимальным элементом и столбца с минимальным элементом  
}

var max,min,imax,jmin,sum:integer;
    m:array[1..n,1..n] of integer;
    
//Процедура для иницализации элементов массива значениями от 1 до n*n. Все элементы различны. Причем с каждым запуском массив 
//перемешивается случайным образом
procedure initMatrix;
var i,j,k,l,temp:integer;
begin
    //инициализируем матрицу значениями от 1 до n*n
   for i:=1 to n do begin
      for j:=1 to n do begin
         k:=k+1;
         m[i,j] := k;
      end;
   end;
  
  //перемешиваем элементы матрицы
   for i:=1 to n do begin
      for j:=1 to n do begin
          k:= random(n-i+1)+i;
          l:= random(n-j+1)+j;
          if k<>i then begin
            temp:=m[i,j];
            m[i,j]:=m[k,l];
            m[k,l]:=temp;
          end;
     end;
  end;
end;


//Процедура поиска минимального элемента матрицы
procedure minArrayElement(var min,jmin:integer);
var i,j:integer;
begin
  //задаем в качестве минимального - первый элемент матрицы
  min:=m[1,1];
  jmin:=1;
  //ищем минимальный элемент
  for i:=1 to n do begin
      for j:=1 to n do begin
         if (m[i,j] < min) then begin
            min := m[i,j];
            jmin := j;
         end;
      end;
  end;
end;

//Процедура поиска максимального элемента матрицы
procedure maxArrayElement(var max,imax:integer);
var i,j:integer;
begin
//задаем в качестве максимального - первый элемент матрицы
  max:=m[1,1];
  imax:=1;
  //ищем максимальный элемент
  for i:=1 to n do begin
      for j:=1 to n do begin
         if (m[i,j] > max) then begin
            max := m[i,j];
            imax := i;
         end;
      end;
  end;
end;

//Процедура для расчёта скалярного произведения строки с максимальным элементом и столбца с минимальным элементом
procedure scalarMultiple(imax,jmin:integer);
var i:integer;
begin
  sum:=0;
   for i:=1 to n do begin
      sum:=sum+m[imax,i]*m[i,jmin];
   end;
end;

//Устанавливаем элементы главной диагонали посчитанным скалярным произведением
procedure setMainDiagonal;
var i:integer;
begin
  for i:=1 to n do begin
      m[i,i]:=sum;      
   end; 
end;


//Процедура вывода матрицы на экран
procedure showMatrix;
var i,j:integer;
begin
  for i:=1 to n do begin
      for j:=1 to n do begin
        write(m[i,j] + ' ');
      end;
      writeln;         
   end; 
end;
   
//Основной блок программы
begin
   clrscr;
   
   randomize;
   
   initMatrix;
   
   writeln('Исходная матрица:');
   showMatrix;
   
    minArrayElement(min, jmin);
    maxArrayElement(max, imax);
   
   writeln;
   writeln('min: ' + min);
   writeln('jmin: ' + jmin);
   writeln('max: ' + max);
   writeln('imax: ' + imax);
   writeln;
   
   scalarMultiple(imax, jmin);
   
   setMainDiagonal;
   
   writeln('Результирующая матрица');
   showMatrix;        
   
   readln;
end.
нужно сделать альтернативный способ заполнения массива, позволяющий пользователю самостоятельно задавать значения или это лишнее?

Последний раз редактировалось Аватар; 28.11.2015 в 23:10.
masynye вне форума Ответить с цитированием
Старый 29.11.2015, 02:11   #4
temaps
Форумчанин
 
Регистрация: 15.05.2011
Сообщений: 160
По умолчанию

Код:
uses crt;

const n=7;

{
max - максмальное элемент матрицы
min - минимальный элемент матрицы
imax - индекс строки, где хранится максимальный элемент матрицы
jmin - индекс столбца, где хранится минимальный элемент матрицы
sum - скалярное произведение строки с максимальным элементом и столбца с минимальным элементом  
}

var max,min,imax,jmin,sum:integer;
    m:array[1..n,1..n] of integer;
i,j,k,l,temp:integer;
    
//Основной блок программы
begin
   clrscr;
   
   randomize;
   k:=0;
min:=1;
jmin:=1;
max:=n*n;
imax:=n;
   //инициализируем матрицу значениями от 1 до n*n
   for i:=1 to n do begin
      for j:=1 to n do begin
         k:=k+1;
         m[i,j] := k;
      end;
   end;
  
  //перемешиваем элементы матрицы
   for i:=1 to n do begin
      for j:=1 to n do begin
          k:= random(n-i+1)+i;
          l:= random(n-j+1)+j;
          if k<>i then begin
            temp:=m[i,j];
            m[i,j]:=m[k,l];
            m[k,l]:=temp;
if m[k,l]=min then jmin:=l;
if m[k,l]=max then imax:=k;
          end;
     end;
  end;
   
   writeln('Исходная матрица:');
  for i:=1 to n do begin
      for j:=1 to n do begin
        write(m[i,j] , ' ');
      end;
      writeln;         
   end; 

   writeln;
   writeln('min: ',min);
   writeln('jmin: ',jmin);
   writeln('max: ',max);
   writeln('imax: ',imax);
   writeln;
   
  sum:=0;
   for i:=1 to n do begin
      sum:=sum+m[imax,i]*m[i,jmin];
   end;
   
  for i:=1 to n do begin
      m[i,i]:=sum;      
   end; 
   
   writeln('Результирующая матрица');
  for i:=1 to n do begin
      for j:=1 to n do begin
        write(m[i,j],' ');
      end;
      writeln;         
   end; 
   
   readln;
end.

Последний раз редактировалось temaps; 29.11.2015 в 02:13.
temaps вне форума Ответить с цитированием
Старый 29.11.2015, 16:32   #5
masynye
Новичок
Джуниор
 
Регистрация: 28.11.2015
Сообщений: 3
По умолчанию

не верно определяются строка и столбец(
masynye вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПОЖАЛУЙСТА ПОМОГИТЕ РЕШИТЬ ЗАДАЧКУ oleg_hahalev Помощь студентам 0 16.09.2013 22:02
Помогите пожалуйста задачку решить Alexandr14 Общие вопросы Delphi 2 01.07.2009 10:06
помогите, пожалуйста, решить задачку vol1 Паскаль, Turbo Pascal, PascalABC.NET 3 08.01.2008 21:09