IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> матрицы, выделение треугольника матрицы
Svetka
сообщение 7.05.2005 10:25
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


Мне нужно
1) найти центр матрицы (7,7) и посчитать сумму нижнего треугольника.....как это сделать?
2)найти центр матрицы(5,5) и посчитать произведение левого бокового треугольника а правый треугольник заменить нулями.как найти эти треугольники?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.05.2005 10:45
Сообщение #2


Гость






Цитата(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
сообщение 7.05.2005 12:45
Сообщение #3


Гость






Цитата(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
сообщение 7.05.2005 15:57
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


Цитата(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;

а дальше что б шёл сразу цикл?
также и с обнулением правого треугольника
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.05.2005 17:13
Сообщение #5


Гость






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
сообщение 7.05.2005 19:38
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


Цитата(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;


пасибо)))
и сразу потом выводиться результат?=)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.05.2005 19:50
Сообщение #7


Гость






Ну, да... А что еще нужно?
Только сначала матрицу не забудь заполнить
 К началу страницы 
+ Ответить 
Svetka
сообщение 7.05.2005 19:55
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


Цитата(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; { Правый треугольник }

так получается?или не так?)

Сообщение отредактировано: Svetka - 8.05.2005 13:44
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.05.2005 16:21
Сообщение #9


Гость






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

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

И, если можно, еще объясни, что за K ты передаешь в процедуру? Вроде по условию матрица квадратная, а не прямоугольная... unsure.gif
 К началу страницы 
+ Ответить 
Svetka
сообщение 8.05.2005 17:32
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


Цитата(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 кол-во столбцов)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.05.2005 17:51
Сообщение #11


Гость






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

И убери "лишние" описания переменных...
 К началу страницы 
+ Ответить 
Svetka
сообщение 8.05.2005 18:04
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


Цитата(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) она выводица уже заменённая нулями?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.05.2005 18:12
Сообщение #13


Гость






Тебя как видно мои замечания и исправления не интересуют - так вот: твоя программа даже не компилируется. Ошибки есть как синтаксические, так и логические. Но, извини, искать их придется тебе самой... <_<
 К началу страницы 
+ Ответить 
Svetka
сообщение 8.05.2005 18:17
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


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

не.....интересуют........если ты про k говоришь......то она запускается(не именно эта-другие)......просто я так привыкла делать.....
спасибо.........за помощь))))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Svetka
сообщение 8.05.2005 18:36
Сообщение #15


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


я сделала программу....она запускается.....только правельно ли она считает произведение......

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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 8.05.2005 19:48
Сообщение #16


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


ты когда-нибудь слашала о контрольных примерах ? рисуешь на бумажке матрицу, считаешь произведение, затем вводишь туже матрицу в программу и сравниваешь результат, если не сошлось значит ошибка angry.gif

Сообщение отредактировано: klem4 - 8.05.2005 19:49


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.05.2005 19:52
Сообщение #17


Гость






Однозначно сказать нельзя. Для данного примера она может отработать правильно, но в ней содержится одна очень нехорошая ошибка...

klem4 - не раскрывай сразу...
 К началу страницы 
+ Ответить 
Svetka
сообщение 8.05.2005 20:18
Сообщение #18


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


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

я не могу найти ошибку.......программа не правельно считает произведение....других ошибок я не могу найти.....
я не прошу её искать........всё-таки я сама должна её найти......
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Svetka
сообщение 11.05.2005 19:05
Сообщение #19


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


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

а может поможете найти ошибку если не трудно.......я не могу её найти....... :p2: rolleyes.gif unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.05.2005 19:11
Сообщение #20


Гость






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, подумай, почему то что я отметил не есть хорошо?
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 24.09.2024 18:20
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"