Помощь - Поиск - Пользователи - Календарь
Полная версия: Сумма элементов массива
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Legolas
Всем привет!
Кто знает, может поможет решить вот такую задачу:

Дан двумерный действительный массив А[n, n]. Найти сумму элементов заштрихованной области массива А, предварительно записав их в массив В[k].

Всем заренее благодарен smile.gif
hiv
Поможем! Только что вам не ясно? Покажите что сделано...
klem4
1 наверно по короче можно,а вот в третьем на диоганалях надо или нет ?? я вот не пойму (у меня без).

1)

i:=0;j:=1;s:=0;
while i<n do
begin
inc(i);
inc(s,x[i,j]);
end;
j:=1;
while j<n do
begin
inc(j);
inc(s,x[i,j]);
end;
while i<>1 do
begin
dec(i);
inc(s,x[i,j]);
end;
while j<>2 do
begin
dec(j);
inc(s,x[i,j]);
end;


2)

s:=0;
for i:=1 to n do
begin
inc(s,x[i,i]);
inc(s,x[i,n-i+1]);
end;
dec(s,x[(n+1) div 2,(n+1) div 2]);


3)
s:=0;
for i:=1 to n div 2 do
for j:=i+1 to n-i do
inc(s,x[i,j]);
for i:=n downto n div 2 do
for j:=n-i+2 to i-1 do
inc(s,x[i,j]);


4)
s:=0;
for i:=2 to n-1 do
for j:=2 to n-1 do
inc(s,x[i,j]);


бгы)

в первом можно посчетать полную сумму и вычесть сумму, которая считается в номере 4). :D
Legolas
Вот исходники:

program z16a;
Код
uses crt;
type mas=array[0..5,0..5] of real;
var i,j,n,m,i1,j1,k,l:integer;s:real;
a,b:mas;
label q,q1;
begin
clrscr;
writeln('vvedite razmernost');
readln(n,m);

writeln('vvedite elementi');
for i:=1 to n do
for j:=1 to m do read(a[i,j]);

write('i=');readln(i1);
write('j=');readln(j1);
k:=1;l:=1;
for i:=1 to n do begin
for j:=1 to m do begin
                if i=i1 then goto q;
                if j=j1 then goto q1;
                s:=s+a[i,j];
                {for l:=1 to 1 do}
                b[k,l]:=s;
                inc(l);
                q1:end;inc(k);
                q:s:=0;
                  l:=1;

                  end;
for k:=1 to n-1 do begin writeln;
for l:=1 to m-1 do write(b[k,l]:2:2,' ');end;writeln;
readkey
end.



program z16b;
Код
uses crt;
type mas=array[0..5,0..5] of real;
var i,j,n,m,i1,j1,k,l,x,y:integer;s:real;
a,b:mas;

begin
clrscr;
writeln('vvedite razmernost');
readln(n,m);

writeln('vvedite elementi');
for i:=1 to n do
for j:=1 to m do read(a[i,j]);

write('i=');readln(i1);
write('j=');readln(j1);

for i:=1 to i1-1 do begin
for j:=j1+1 to m do begin
                s:=s+a[i,j];
                b[i,j]:=s;
                end;
                s:=0;end;
for i:=1 to i1-1 do begin writeln;
for j:=j1+1 to m do write(b[i,j]:2:2,' ');end;writeln;
readkey
end.


program z16c;
Код
uses crt;
type mas=array[0..5,0..5] of real;
var i,j,n,m,i1,j1,k:integer;s:real;
a,b:mas;
label q,q1;
begin
clrscr;
writeln('vvedite razmernost');
readln(n,m);

writeln('vvedite elementi');
for i:=1 to n do
for j:=1 to m do read(a[i,j]);

write('i=');readln(i1);
write('j=');readln(j1);

for i:=i1+1 to n do begin
for j:=1 to j1-1 do begin
                s:=s+a[i,j];
                b[i,j]:=s;
                end;q:s:=0;end;
for i:=i1+1 to n do begin writeln;
for j:=1 to j1-1 do write(b[i,j]:2:2,' ');end;writeln;
readkey
end.



program z16d;
Код
uses crt;
type mas=array[0..5,0..5] of real;
var i,j,n,m,i1,j1,k,l,x,y:integer;s:real;
a,b:mas;
label q,q1;
begin
clrscr;
writeln('vvedite razmernost');
readln(n,m);

writeln('vvedite elementi');
for i:=1 to n do
for j:=1 to m do read(a[i,j]);

for i:=2 to n-1 do begin
for j:=2 to m-1 do begin
                s:=s+a[i,j];
                b[i,j]:=s;
                end;
                s:=0;end;
for i:=2 to n-1 do begin writeln;
for j:=2 to m-1 do write(b[i,j]:2:2,' ');end;writeln;
readkey
end.



только надо доделать.

Тегами CODE пользуемся...
volvo
Цитата(Legolas @ 12.05.05 9:33)
Найти сумму элементов заштрихованной области массива А, предварительно записав их в массив В[k].

Возникает вопрос, почему массив B у тебя тоже объявлен двумерным? Он должен быть одномерным, не так ли?

Второе - почему ты делаешь
for ...
 s:=s+a[i,j];
 b[i,j]:=s;

если тебе надо предварительно записать элементы для суммирования в массив B?

И посмотри на пост №3, там кое-что есть...
Legolas
Цитата(volvo @ 13.05.05 9:09)
Возникает вопрос, почему массив B у тебя тоже объявлен двумерным? Он должен быть одномерным, не так ли?
Задача на преобразование и построение матриц, а одномерный массив - это вектор. Может мой ход мыслей и не правильный ;-)
volvo
Хорошо... Я переформулирую вопрос. Ты можешь к МАТРИЦЕ обращаться с одним индексом? Или все-таки только к ВЕКТОРУ? В задании у тебя как раз один индекс при обращении к B...
Legolas
Всем привет.
Сейчас решаю вот такие задачи, сам пока еще не сделал, но думаю вы мне поможете. Заранее благодарен за ответы.

Задачи:

1. Дана действительная квадратная матрица порядка п. найти наибольшее из значений элементов, расположенных в заштрихованной области матрицы. (см. присодиненное изображение)

2. Дана действительная квадратная матрица порядка 2п. получить новую матрицу, переставляя ее блоки размера п х п: (см. рисунок)

3. Имеется таблица Т результатов некоторого шахматного турнира, в котором участвовало n (n>2) шахматистов:
T: array [1..n, 1..n] of (V, N, P, X),
где T[i, j] = V, если i-ый участник выиграл у j-го ( при этом T[j, i] = P),
T[i, j] = N, если i-ый и j-ый участники сыграли вничью. В противном случае T[i, j] = Х.

При n = 3 возможет следующий вид таблицы: (см. рисунок)
За выигрыш дается 1 очко, за ничью – 0,5 очка, за проигрыш – 0 очков. Вывести номера участников в порядке невозрастания набранных ими очков.

Однотипные задачи объединены...
Legolas
Цитата(volvo @ 13.05.05 9:36)
Хорошо... Я переформулирую вопрос. Ты можешь к МАТРИЦЕ обращаться с одним индексом? Или все-таки только к ВЕКТОРУ? В задании у тебя как раз один индекс при обращении к B...

Преподаватель не очень корректно объяснил...
Кажется надо вывести еще и матрицу B ;-)
hiv
Может массив B действительно двумерный, но в него должны вводиться (задаваться) заштрихованные области?

Не используй конструкции GOTO. В крайнем случае заменяй их на BREAK и CONTINUE.

Объясни смысл переменных i1 и j1 в программе z16a
klem4
сократил задание N1
s:=0;
for i:=1 to n do
if (i<>1)and(i<>n) then
begin
inc(s,x[i,1]);
inc(s,x[i,n]);
end
else
for j:=1 to n do
inc(s,x[i,j]);


ps
inc(s,x[i,j])
естественно только в случае, если матрица из целых чисел, иначе просто
s:=s+x[i,j];
klem4
ха-ха ты в FAQ заглядывал ?))) http://forum.pascal.net.ru/index.php?showt...indpost&p=23247 там же все есть! новое прикрепленное задание давай-ка сам ;) :yes:
Legolas
Ну, может кто-нибудь всё-таки поможет сделать приклепленные задачи ;-)
А я параллельно буду делать сам, потом посмотрим, у кого что вышло.
Всем заранее благодарен. Goodbye.
hiv
Цитата(Legolas @ 14.05.05 2:51)
Ну, может кто-нибудь всё-таки поможет сделать приклепленные задачи ;-)

Мы здесь именно помогаем решать задачи и отвечаем на конкретные вопросы, а решать вместо вас здесь никто не будет. Это ваша задача, а не наша, вам нужно решение, а не нам. Есть вопросы - мы на них ответим. А требования решений будут проигнорированы.
Legolas
Вот застрял на задаче "Г", вот ее код:

program z18d;
uses crt;
type mas=array[0..5,0..5] of integer;
var i,j,n,m,i1,j1,k,s:integer;
a:mas;
b:array [1..20] of integer;
begin
clrscr;
writeln('vvedite razmernost');
readln(n,m);

writeln('vvedite elementi');
for i:=1 to n do
for j:=1 to m do read(a[i,j]);

write('i=');readln(i1);
write('j=');readln(j1);
k:=1;
for i:=i1+1 to n-i1 do begin
for j:=j1+1 to m-j1 do begin
                s:=s;
                s:=s+a[i,j];
                b[k]:=a[i,j];inc(k);
                end;
                end;
writeln('s=',s);
{for i:=2 to n-1 do begin writeln;}
for i:=1 to k-1 do write(b[i],' ');
readkey
end.

Может что не так, не пойму...Надо как-то по-другому конец проги написать...
klem4
for i:=n downto n div 2 do
for j:=n-i+2 to i-1 do
inc(s,x[i,j]);
Legolas
Цитата(klem4 @ 25.05.05 15:19)
for i:=n downto n div 2 do
    for j:=n-i+2 to i-1 do
      inc(s,x[i,j]);


К сожалению, я не понял, в какое место проги вставить этот кусок...
volvo
Цитата(Legolas @ 25.05.05 3:13)
Может что не так, не пойму...Надо как-то по-другому конец проги написать...

Что значит "может"? Ты программу запускал? Она отработала? Решение совпало с тем, которое ДОЛЖНО получиться (на бумаге)? У нас тут проблемы с телепатией в последнее время.

Если есть ошибка - так и говори, если ты не уверен в правильности - тебе уже говорили как это проверяется...
Legolas
Цитата(volvo @ 25.05.05 16:08)
Если есть ошибка - так и говори, если ты не уверен в правильности - тебе уже говорили как это проверяется...

Да вот при разных значениях i и j s почему-то всегда равен нулю, не пойму, что не так...
volvo
Контрольный пример приведи... На какой матрице, и с какими значениями M, N, I и J ты это проверял ?
Legolas
Цитата(volvo @ 26.05.05 16:04)
Контрольный пример приведи... На какой матрице, и с какими значениями M, N, I и J ты это проверял ?

Да, уже спасибо...
Нашёл баг, исправил. Работает нормально.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.