05.11.2016, 18:09 | #1 (permalink) |
Member
Регистрация: 05.11.2016
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Двумерные массивы
Модифицировать программу так, чтобы она осуществляла поиск подматрицы 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
Регистрация: 08.03.2016
Сообщений: 0
|
Эти топики должны помочь вам решить проблему C++. Двумерные массивы Двумерные массивы |
05.11.2016, 19:00 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
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]; |
|
05.11.2016, 19:21 | #3 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
|
|
05.11.2016, 19:30 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
АсяЯ, ну что, ей Богу, за бредятина?! Где Вы видели матрицу ОТРИЦАТЕЛЬНОЙ размерности?! Ну не бывает такого! Не бывает, да и всё тут! Совсем. Абсолютно. И потом, АБСОЛЮТНО ЛЮБОЕ число либо меньше 10, либо больше -10. Так что условный оператор бессмыслен.
По всей вероятности, речь в задаче идёт о диапазоне значений элементов матрицы. Кроме того, ну что это за метка vozvrat? Зачем? К чему? Вообще я настоятельно рекомендую Вам ЗАБЫТЬ об этих гнусных Label и Goto: они должны применяться в абсолютно исключительных случаях, к каковым Ваш не относится. Вообще же последняя задачка столь проста, что Вы, я уверен, сможете грамотно написать программу самостоятельно. Конечно, поможем, если что. |
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, 08:33 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
А у меня что - Фортран что ли? Паскаль и есть.Всё, что можно было сохранить из Вашей программы, я сохранил. Так что считайте, что "модифицировал".Не... давайте здесь.
|
06.11.2016, 08:44 | #8 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ух, только что рассмотрел: Вам решение системы линейных уравнений нужно ЧЕРЕЗ ОПРЕДЕЛИТЕЛИ? Четвертого порядка?!! Ну уж нет, увольте: тут надо либо выписывать на целую страницу компоненты-произведения, причем ни разу не наврать, что почти невозможно, либо клепать процедуру, лучше рекурсивную, позволяющую вычислить определитель любого порядка через разложение по минорам с учётом алгебраических дополнений.
И то, и другое - дурная, муторная и тяжелая работа. А главное, ненужная: метод Гаусса гораздо проще и эффективней. Хотя, конечно, исследовать систему на совместимость с определителями легче. Но вот считать их... |
06.11.2016, 11:29 | #9 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ладно, нарисовал всё-таки решение последней задачи. Обратите внимание на тип произведения: это очень большое число, поэтому никакое 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. |
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
|
Опции темы | |
Опции просмотра | |
|
|