• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Двумерные массивы

  • Автор темы Автор темы АсяЯ
  • Дата начала Дата начала

АсяЯ

Новые
Регистрация
5 Ноя 2016
Сообщения
14
Реакции
0
Баллы
0
Двумерные массивы

Помогите пожалуйста решить 3 задачи
Модифицировать программу так, чтобы она осуществляла поиск подматрицы n,в которой сумма элементов главной диагонали наибольшая
writeln('Введите размер подматрицы:');readln(m);
randomize;
for i:=1 to n do
for j:=1 to n do
a[i,j]:=trunc(random*50) ;
writeln('Сформированная матрица');
for i:= 1 to n do
begin
for j:=1 to n do
write(a[i,j],' ');
writeln;
end;
for i:=1 to m do
for j:=1 to m do
if i=j then s:=s+a[i,j];
for l:=1 to n-m+1 do
for k:=1 to n-m+1 do
begin
for i:=1 to m do
for j:=1 to m do
b[i,j]:=a[l+i-1,k+j-1];
s:=0;
for i:=1 to m do
for j:=1 to m do
if i=j then s:=s+b[i,j];
if s>max then
begin
end;
end;
writeln('Сумма элементов=',s);
end.
Модифицировать программу так, чтобы она находила решение системы алгебраических уравнений 4 порядка с любыми вещественными коэффициентами
program zadazna_5;
const
a:array[1..3,1..3] of integer=((2,1,1),(1,2,1),(1,1,2));
b:array[1..3] of integer=(7,8,9);
var
i,j:integer;
delta,delta1,delta2,delta3,x1,x2,x3:real;
begin
delta:=a[1,1]*a[2,2]*a[3,3]+a[1,2]*a[2,3]*a[3,1]+a[1,3]*a[2,1]*a[3,2]-a[3,1]*a[2,2]*a[1,3]-a[3,2]*a[2,3]*a[1,1]-a[3,3]*a[2,1]*a[1,2];
delta1:=b[1]*a[2,2]*a[3,3]+a[1,2]*a[2,3]*b[3]+a[1,3]*b[2]*a[3,2]-b[3]*a[2,2]*a[1,3]-a[3,2]*a[2,3]*b[1]-a[3,3]*b[2]*a[1,2];
delta2:=a[1,1]*b[2]*a[3,3]+b[1]*a[2,3]*a[3,1]+a[1,3]*a[2,1]*b[3]-a[3,1]*b[2]*a[1,3]-b[3]*a[2,3]*a[1,1]-a[3,3]*a[2,1]*b[1];
delta3:=a[1,1]*a[2,2]*b[3]+a[1,2]*b[2]*a[3,1]+b[1]*a[2,1]*a[3,2]-a[3,1]*a[2,2]*b[1]-a[3,2]*b[2]*a[1,1]-b[3]*a[2,1]*a[1,2];
x1:=delta1/delta;
x2:=delta2/delta;
x3:=delta3/delta;
writeln('Найденное решение:');
writeln('x1=',x1,'x2=',x2,'x3=',x3);
end.
program zadazna_3;
label vozvrat;
var
i,j,k,n,m,s:integer;
c:array[1..100,1..100] of integer;
begin
vozvrat:
write('Введите размер матрицы:'); read(n);
if(n<10)or (n>-10) then
begin
writeln
randomize;
k:=0;
m:=0;
for i:=1 to n do
for j:=1 to n do
begin
c[i,j]:=random(10);
if c[i,j]>0 then
if j0 then inc(s);
m:=s*k;
end;
end;
for i:=1 to n do
begin
for j:=1 to n do
writeln('*****************************************');
end;
writeln('Количество нулевых=',k);
writeln('Произведение положительных чисел=',m);
end;
end.

Модифицировать программу так, чтобы она находила произведение положительных и количество нулевых элементов матрицы, расположенных под главной диагональю. Все элементы матрицы должны принадлежать диапозону [-10;`10]
 
Модифицировать программу так, чтобы она осуществляла поиск подматрицы n,в которой сумма элементов главной диагонали наибольшая
Простите, но модифицировать Ваши программы я не буду - проще написать свою. Например, так:
Код:
Const
 n=10;

Var
 m,i,j,p,q,r,Pmax,Qmax:byte;
 S,Smax:Word;
 a,b:Array[1..n,1..n] of Byte;

Begin
 Smax:=0;
 writeln('Enter the submatrix dimention (<',n,'):');
 readln(m);
 randomize;
 for i:=1 to n do
  for j:=1 to n do
   a[i,j]:=random(50);

 writeln('Formed matrix:');
 for i:=1 to n do
  begin
   for j:=1 to n do
    write(a[i,j]:4);
   writeln;
  end;
 Writeln('Press "Enter" to continue');
 Readln;

 for p:=0 to n-m do
  for q:=0 to n-m do
   begin
    for i:=1 to m do
     for j:=1 to m do
      b[i,j]:=a[p+i,q+j];
    S:=0;
    for r:=1 to m do
     S:=S+b[r,r];
    if S>Smax then
     begin
      Pmax:=p;
      Qmax:=q;
      Smax:=S;
     end;
   end;

 writeln('Submatrix with largest sum of diagonal elements:');
 for i:=1 to m do
  begin
   for j:=1 to m do
    write(a[Pmax+i,Qmax+j]:4);
   writeln;
  end;

 Readln
End.
Парочка ремарок общего плана.
1. Если Вам нужно получать ЦЕЛЫЕ случайные числа, то это делается с помощью оператора Random(N), т.е. С АРГУМЕНТОМ. Например, Random(50) возвращает ЦЕЛЫЕ числа в диапазоне от 0 до 49 включительно. Действительные числа от 0 до 1 возвращает оператор Random БЕЗ АРГУМЕНТА. Здесь его использовать не надо.
2. При поиске суммы диагональных элементов квадратной матрицы двойной цикл с отбором по i=j НЕ НУЖЕН. Гораздо проще так:
for i:=1 to n do S:=S+a[i,i];
 
Модифицировать программу так, чтобы она находила решение системы алгебраических уравнений 4 порядка с любыми вещественными коэффициентами
Свою программу решения систем линейных уравнений методом Гаусса я уже несколько раз выкладывал. Например, здесь: http://www.tehnari.ru/f41/t93745/#post991548
 
write('Введите размер матрицы:'); read(n);
if(n<10)or (n>-10) then
АсяЯ, ну что, ей Богу, за бредятина?! Где Вы видели матрицу ОТРИЦАТЕЛЬНОЙ размерности?! Ну не бывает такого! Не бывает, да и всё тут! Совсем. Абсолютно. И потом, АБСОЛЮТНО ЛЮБОЕ число либо меньше 10, либо больше -10. Так что условный оператор бессмыслен.
По всей вероятности, речь в задаче идёт о диапазоне значений элементов матрицы.
Кроме того, ну что это за метка vozvrat? Зачем? К чему? Вообще я настоятельно рекомендую Вам ЗАБЫТЬ об этих гнусных Label и Goto: они должны применяться в абсолютно исключительных случаях, к каковым Ваш не относится.
Вообще же последняя задачка столь проста, что Вы, я уверен, сможете грамотно написать программу самостоятельно.
Конечно, поможем, если что.
 
Я вас конечно понимаю,что проще написать.но это паскаль..((((и задание именно модифицировать.у меня не выходит..сами видите.
помогите пожалуйста
 
id377261884
можете вк написать мне
 
но это паскаль..((((
А у меня что - Фортран что ли? Паскаль и есть.
и задание именно модифицировать.
Всё, что можно было сохранить из Вашей программы, я сохранил. Так что считайте, что "модифицировал".
можете вк написать мне
Не... давайте здесь.
 
Ух, только что рассмотрел: Вам решение системы линейных уравнений нужно ЧЕРЕЗ ОПРЕДЕЛИТЕЛИ? Четвертого порядка?!! Ну уж нет, увольте: тут надо либо выписывать на целую страницу компоненты-произведения, причем ни разу не наврать, что почти невозможно, либо клепать процедуру, лучше рекурсивную, позволяющую вычислить определитель любого порядка через разложение по минорам с учётом алгебраических дополнений.
И то, и другое - дурная, муторная и тяжелая работа. А главное, ненужная: метод Гаусса гораздо проще и эффективней. Хотя, конечно, исследовать систему на совместимость с определителями легче. Но вот считать их...
 
Ладно, нарисовал всё-таки решение последней задачи. Обратите внимание на тип произведения: это очень большое число, поэтому никакое Integer тут не годится.
Код:
Const
 Nmax=12;

var
 i,j,k,n:integer;
 m:Extended;
 c:array[1..Nmax,1..Nmax] of integer;

begin
 write('Enter the matrix dimension (n<=',Nmax,'): ');
 readln(n);
 randomize;
 for i:=1 to n do
  begin
   for j:=1 to n do
    begin
     c[i,j]:=-10+random(21);
     Write(c[i,j]:5);
    end;
   writeln;
  end;

 k:=0;
 m:=1;
 for i:=2 to n do
  for j:=1 to i-1 do
   begin
    if c[i,j]=0 then Inc(k);
    if c[i,j]>0 then m:=m*c[i,j];
   end;

 writeln('***************************************** ');
 writeln('Number of zero elements = ',k);
 writeln('Product of positive elements = ',m:0:0);
 Readln
end.
 
Назад
Сверху