Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 05.11.2016, 18:09   #1 (permalink)
АсяЯ
Member
 
Регистрация: 05.11.2016
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Двумерные массивы

Помогите пожалуйста решить 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]
АсяЯ вне форума   Ответить с цитированием

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

Эти топики должны помочь вам решить проблему

C++. Двумерные массивы
Двумерные массивы

Старый 05.11.2016, 19:00   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,298
Сказал(а) спасибо: 287
Поблагодарили 506 раз(а) в 164 сообщениях
Репутация: 91675
По умолчанию

Цитата:
Сообщение от АсяЯ Посмотреть сообщение
Модифицировать программу так, чтобы она осуществляла поиск подматрицы 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];
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 05.11.2016, 19:21   #3 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,298
Сказал(а) спасибо: 287
Поблагодарили 506 раз(а) в 164 сообщениях
Репутация: 91675
По умолчанию

Цитата:
Сообщение от АсяЯ Посмотреть сообщение
Модифицировать программу так, чтобы она находила решение системы алгебраических уравнений 4 порядка с любыми вещественными коэффициентами
Свою программу решения систем линейных уравнений методом Гаусса я уже несколько раз выкладывал. Например, здесь: Метода Гаусса на Паскале в виде подпрограммы
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 05.11.2016, 19:30   #4 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,298
Сказал(а) спасибо: 287
Поблагодарили 506 раз(а) в 164 сообщениях
Репутация: 91675
По умолчанию

Цитата:
Сообщение от АсяЯ Посмотреть сообщение
write('Введите размер матрицы:'); read(n);
if(n<10)or (n>-10) then
АсяЯ, ну что, ей Богу, за бредятина?! Где Вы видели матрицу ОТРИЦАТЕЛЬНОЙ размерности?! Ну не бывает такого! Не бывает, да и всё тут! Совсем. Абсолютно. И потом, АБСОЛЮТНО ЛЮБОЕ число либо меньше 10, либо больше -10. Так что условный оператор бессмыслен.
По всей вероятности, речь в задаче идёт о диапазоне значений элементов матрицы.
Кроме того, ну что это за метка vozvrat? Зачем? К чему? Вообще я настоятельно рекомендую Вам ЗАБЫТЬ об этих гнусных Label и Goto: они должны применяться в абсолютно исключительных случаях, к каковым Ваш не относится.
Вообще же последняя задачка столь проста, что Вы, я уверен, сможете грамотно написать программу самостоятельно.
Конечно, поможем, если что.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 05.11.2016, 23:57   #5 (permalink)
АсяЯ
Member
 
Регистрация: 05.11.2016
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Я вас конечно понимаю,что проще написать.но это паскаль..((((и задание именно модифицировать.у меня не выходит..сами видите.
помогите пожалуйста
АсяЯ вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 06.11.2016, 00:02   #6 (permalink)
АсяЯ
Member
 
Регистрация: 05.11.2016
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

id377261884
можете вк написать мне
АсяЯ вне форума   Ответить с цитированием
Старый 06.11.2016, 08:33   #7 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,298
Сказал(а) спасибо: 287
Поблагодарили 506 раз(а) в 164 сообщениях
Репутация: 91675
По умолчанию

Цитата:
Сообщение от АсяЯ Посмотреть сообщение
но это паскаль..((((
А у меня что - Фортран что ли? Паскаль и есть.
Цитата:
Сообщение от АсяЯ Посмотреть сообщение
и задание именно модифицировать.
Всё, что можно было сохранить из Вашей программы, я сохранил. Так что считайте, что "модифицировал".
Цитата:
Сообщение от АсяЯ Посмотреть сообщение
можете вк написать мне
Не... давайте здесь.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 06.11.2016, 08:44   #8 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,298
Сказал(а) спасибо: 287
Поблагодарили 506 раз(а) в 164 сообщениях
Репутация: 91675
По умолчанию

Ух, только что рассмотрел: Вам решение системы линейных уравнений нужно ЧЕРЕЗ ОПРЕДЕЛИТЕЛИ? Четвертого порядка?!! Ну уж нет, увольте: тут надо либо выписывать на целую страницу компоненты-произведения, причем ни разу не наврать, что почти невозможно, либо клепать процедуру, лучше рекурсивную, позволяющую вычислить определитель любого порядка через разложение по минорам с учётом алгебраических дополнений.
И то, и другое - дурная, муторная и тяжелая работа. А главное, ненужная: метод Гаусса гораздо проще и эффективней. Хотя, конечно, исследовать систему на совместимость с определителями легче. Но вот считать их...
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 06.11.2016, 11:29   #9 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,298
Сказал(а) спасибо: 287
Поблагодарили 506 раз(а) в 164 сообщениях
Репутация: 91675
По умолчанию

Ладно, нарисовал всё-таки решение последней задачи. Обратите внимание на тип произведения: это очень большое число, поэтому никакое 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.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 06.11.2016, 12:49   #10 (permalink)
АсяЯ
Member
 
Регистрация: 05.11.2016
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо огромное.
АсяЯ вне форума   Ответить с цитированием
Ads

Яндекс

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

Опции темы
Опции просмотра

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

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




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

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