Помощь - Поиск - Пользователи - Календарь
Полная версия: матрицы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Svetka
Мне нужно
1) найти центр матрицы (7,7) и посчитать сумму нижнего треугольника.....как это сделать?
2)найти центр матрицы(5,5) и посчитать произведение левого бокового треугольника а правый треугольник заменить нулями.как найти эти треугольники?
volvo
Цитата(Svetka @ 7.05.05 10:25)
1) найти центр матрицы (7,7) и посчитать сумму нижнего треугольника.....как это сделать?

middle := (n div 2) + 1;
for i := middle to n do
for j := 2 * middle - i to i do
s := s + a[i, j];

В твоем случае N = 7.
volvo
Цитата(Svetka @ 7.05.05 10:25)
2)найти центр матрицы(5,5) и посчитать произведение левого бокового треугольника а правый треугольник заменить нулями.как найти эти треугольники?

function min(a, b: integer): integer;
begin
min := a;
if b < a then min := b
end;
...
for i := 1 to n do
for j := 1 to min(i, n - i + 1) do begin
{ работаем с a[i, j] : элементами ЛЕВОГО треугольника }
end;
...
for i := 1 to 5 do
for j := n downto (n - min(i, n - i + 1)) + 1 do begin
{ работаем с a[i, j] : элементами ПРАВОГО треугольника }
end;
Svetka
Цитата(volvo @ 7.05.05 13:45)
function min(a, b: integer): integer;
begin
  min := a;
  if b < a then min := b
end;
...
for i := 1 to n do
  for j := 1 to min(i, n - i + 1) do begin
    { работаем с a[i, j] : элементами ЛЕВОГО треугольника }
  end;
...
for i := 1 to 5 do
  for j := n downto (n - min(i, n - i + 1)) + 1 do begin
    { работаем с a[i, j] : элементами ПРАВОГО треугольника }
  end;


спасибо большое,а полегче нельзя левый и правый треугольники выделить.......
просто я пишу
Код
function pr(var d:matrix:n,k:integer):integer;
var
i.j:integer;
p1:integer;
begin
p1:=1;

а дальше что б шёл сразу цикл?
также и с обнулением правого треугольника
volvo
for j := 1 to (n div 2) + 1 do
for i := j to n - j + 1 do begin
p := p * a[i, j]; { Левый треугольник }
a[i, n - j + 1] := 0; { Правый треугольник }
end;
Svetka
Цитата(volvo @ 7.05.05 18:13)
for j := 1 to (n div 2) + 1 do
  for i := j to n - j + 1 do begin
    p := p * a[i, j];    { Левый треугольник }
    a[i, n - j + 1] := 0; { Правый треугольник }
  end;


пасибо)))
и сразу потом выводиться результат?=)
volvo
Ну, да... А что еще нужно?
Только сначала матрицу не забудь заполнить
Svetka
Цитата(volvo @ 7.05.05 20:50)
Ну, да... А что еще нужно?
Только сначала матрицу не забудь заполнить

да........ я заполнила ......пасиба большое)))
а если сделать две функции
1 для произведения

Код

function pr(var d:matrix:n,k:integer):integer;
var
i.j:integer;
p1:integer;
begin
p1:=1;
for j := 1 to (n div 2) + 1 do
 for i := j to n - j + 1 do begin
   p := p * a[i, j];     { Левый треугольник }


другая для нулей
Код


function nul(var d:matrix:n,k:integer):integer;
var
i.j:integer;
n1:integer;
begin
n1:=0;
for j := 1 to (n div 2) + 1 do
 for i := j to n - j + 1 do begin
a[i, n - j + 1] := 0; { Правый треугольник }

так получается?или не так?)
volvo
Цитата(Svetka @ 7.05.05 19:55)
так получается?или не так?)

:yes: Так... Только я не понял, зачем тебе n1:=0;? Ты же его не используешь...

И, если можно, еще объясни, что за K ты передаешь в процедуру? Вроде по условию матрица квадратная, а не прямоугольная... unsure.gif
Svetka
Цитата(volvo @ 8.05.05 17:21)
:yes: Так... Только я не понял, зачем тебе n1:=0;? Ты же его не используешь...

И, если можно, еще объясни, что за K ты передаешь в процедуру? Вроде по условию матрица квадратная, а не прямоугольная...  unsure.gif

точно......я просто думала n это количество ненулевых а мне просто надо нулями заменить значит
Код

function nul(var d:matrix:n,k:integer):integer;
var
i.j:integer;
n1:integer;
begin
for j := 1 to (n div 2) + 1 do
for i := j to n - j + 1 do begin
a[i, n - j + 1] := 0; { Правый треугольник }
будет)
n кол-во строк а k кол-во столбцов)
volvo
Svetka,
и все-таки... По условию - матрица квадратная. Алгоритм тоже будет работать ТОЛЬКО с квадратной матрицей. А при квадратной матрице K = N... Так что придется тебе убрать K из списка параметров процедуры... Чем меньше параметров передаешь - тем лучше. Еще один вопрос: Что функция возвращает? Возможно, ее стоило бы сделать процедурой.

И убери "лишние" описания переменных...
Svetka
Цитата(volvo @ 8.05.05 18:51)
Svetka,
и все-таки... По условию - матрица квадратная. Алгоритм тоже будет работать ТОЛЬКО с квадратной матрицей. А при квадратной матрице K = N... Так что придется тебе убрать K из списка параметров процедуры... Чем меньше параметров передаешь - тем лучше. Еще один вопрос: Что функция возвращает? Возможно, ее стоило бы сделать процедурой.

И убери "лишние" описания переменных...


Код
program xxx;
uses crt;
type
matrix=array[1..5,1..5] of integer;
f:matrix;
p:integer;
procedure input(var d:matrix;n,k:integer);
var
i,j:integer;
begin
clrscr;
randomize;
for i:=1 to n do begin
for j:1 to k do
d[i,j]:=random(5);
end;
end;
procedure output(var d:matrix;n,k:integer);
var
i,j:integer;
begin
for i:=1 to n do begin
for j:1 to k do
write(d[i,j:4);
writeln;
end;
end;
function pr(var d:matrix:n,k:integer):integer;
var
i.j:integer;
p1:integer;
begin
p1:=1;
for j := 1 to (n div 2) + 1 do
for i := j to n - j + 1 do begin
  p1 := p1 * f[i, j];     { Левый треугольник }
end;
pr:=p1;
function nul(var d:matrix:n,k:integer):integer;
var
i.j:integer;
begin
for j := 1 to (n div 2) + 1 do
for i := j to n - j + 1 do begin
a[i, n - j + 1] := 0; { Правый треугольник }

у меня получилось вот так)
а когда выводишь матрицу input(f,5,5) она выводица уже заменённая нулями?
volvo
Тебя как видно мои замечания и исправления не интересуют - так вот: твоя программа даже не компилируется. Ошибки есть как синтаксические, так и логические. Но, извини, искать их придется тебе самой... <_<
Svetka
Цитата(volvo @ 8.05.05 19:12)
Тебя как видно мои замечания и исправления не интересуют - так вот: твоя программа даже не компилируется. Ошибки есть как синтаксические, так и логические. Но, извини, искать их придется тебе самой...  <_<

не.....интересуют........если ты про k говоришь......то она запускается(не именно эта-другие)......просто я так привыкла делать.....
спасибо.........за помощь))))
Svetka
я сделала программу....она запускается.....только правельно ли она считает произведение......

program xxx;
uses crt;
type
matrix= array[1..5,1..5] of integer;
var
f:matrix;
p:integer;
procedure input(var d:matrix;n,k:integer);
var
i,j:integer;
begin
clrscr;
randomize;
for i:=1 to n do begin
for j:=1 to k do
d[i,j]:=random(20);
end;
end;
procedure output(var d:matrix;n,k:integer);
var
i,j:integer;
begin
for i:=1 to n do begin
for j:=1 to k do
write(d[i,j]:4);
writeln;
end;
end;
function pr(var d:matrix;n,k:integer):integer;
var
i,j:integer;
p1:integer;
begin
p1:=1;
for j := 1 to (n div 2) + 1 do
for i := j to n - j + 1 do begin
p1 := p1 * f[i, j]; { Левый треугольник }

pr:=p1;
end; end;
begin
i nput(f,5,5);
writeln('matrix f');
output(f,5,5);
p:=pr(f,5,5);
writeln(p);
readln;
end.
klem4
ты когда-нибудь слашала о контрольных примерах ? рисуешь на бумажке матрицу, считаешь произведение, затем вводишь туже матрицу в программу и сравниваешь результат, если не сошлось значит ошибка angry.gif
volvo
Однозначно сказать нельзя. Для данного примера она может отработать правильно, но в ней содержится одна очень нехорошая ошибка...

klem4 - не раскрывай сразу...
Svetka
Цитата(volvo @ 8.05.05 20:52)
в ней содержится одна очень нехорошая ошибка...

я не могу найти ошибку.......программа не правельно считает произведение....других ошибок я не могу найти.....
я не прошу её искать........всё-таки я сама должна её найти......
Svetka
Цитата(Svetka @ 8.05.05 21:18)
я не могу найти ошибку.......программа не правельно считает произведение....других ошибок я не могу найти.....
я не прошу её искать........всё-таки я сама должна её найти......

а может поможете найти ошибку если не трудно.......я не могу её найти....... :p2: rolleyes.gif unsure.gif
volvo
function pr(var d:matrix;n,k:integer):integer;
var
i, j:integer;
p1:integer;
begin
p1:=1;
for j := 1 to (n div 2) + 1 do
for i := j to n - j + 1 do begin
p1 := p1 * f[i, j]; { <--- обращение к F здесь - первая ошибка }
pr:=p1; { <--- это вторая ошибка }
end;
end;


А теперь, Svetka, подумай, почему то что я отметил не есть хорошо?
Svetka
Цитата(volvo @ 11.05.05 20:11)
почему то что я отметил не есть хорошо?

я про f понЯла....там должно быть
Код
p1 := p1 * d[i, j];

а почему
Код
pr:=p1;
тут ошибка?
volvo
Потому что присваивать функции окончательное значение принято (то есть, строго говоря это не ошибка, а недочет) перед выходом из функции, но никак не в цикле...
Svetka
Цитата(volvo @ 11.05.05 21:20)
Потому что присваивать функции окончательное значение принято (то есть, строго говоря это не ошибка, а недочет) перед выходом из функции, но никак не в цикле...

пасиба за помощь.......а там ещё один треугольник надо нулями заменить.......это можно в тойже ф-ции сделать....или в другой?
klem4
а это не про то ?

http://forum.pascal.net.ru/index.php?showt...indpost&p=40586
volvo
Svetka,
Посмотри 5-ый пост, я сразу именно так сделал...
Svetka
Цитата(volvo @ 11.05.05 21:47)
Svetka,
Посмотри 5-ый пост, я сразу именно так сделал...

он не обнуляет..........
volvo
blink.gif У меня обнулял ...

Функция такая получилась?
function pr(var d:matrix;n,k:integer):integer;
var
i, j:integer;
p1:integer;
begin
p1:=1;
for j := 1 to (n div 2) + 1 do
for i := j to n - j + 1 do begin
p1 := p1 * d[i, j];
d[i, n - j + 1] := 0;
end;
pr:=p1;
end;
Svetka
Цитата(volvo @ 11.05.05 21:55)
Функция такая получилась?

точно такая же
volvo
Ну и объясни мне, ЧТО здесь может не работать?
Вот мой файл:
Svetka
Цитата(volvo @ 11.05.05 23:08)
Ну и объясни мне, ЧТО здесь может не работать?
Вот мой файл:

всё......получается..............пасибо большое rolleyes.gif :yes:
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.