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

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

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

> Обработка массивов. Матрицы, помогите чуть-чуть, не понимаю про элемент матрицы
maximmax
сообщение 30.12.2007 13:06
Сообщение #1





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

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


Входной массив А 6Х6
формируемый B 6Х6 где b[i,j]=i*cos(i+j) i:=1..6, j:=1..6
для каждой из матриц вычислить число элементов меньших 0.5(NA и NB) Переставить строчки местами в маттрице А, если NA>NB и в матрице B если NA<=NB(матрица C)
вывести A,B, NA, NB, C.

текст проги.

М
используй теги



program matrix;
Var a: array[1..6, 1..6] of real;
b: array[1..6, 1..6] of real;
c: array[1..6, 1..6] of real;
i, j, n, m, q, p, o, l, g, h: integer;
t, s:real;
begin
g:=1;{ne4etnie stroki}
h:=1;{4etnie stroki}
t:=0.5;{4islo, iz DANO dla opredelenia <>}
Write('CTPOKI'); Readln(m);
Write('STOLBCI'); Readln(n);
writeln('vvedite massiv A:');
o:=0;
For i:=1 to m do{Cikl zapolnenija matrici}
For j:=1 to n do
begin
write('a[',i: 2,',',j: 2,']', '=');
read(a[i, j]);
if a[i,j]<t then o:=o+1{s4etcik elementov<0,5 dla A}
end;
For i:=1 to m do {vivod matrici A}
begin
writeln;
For j:=1 to n do
begin
write(a[i,j] :7,' ');
if b[i,j]<t then l:=l+1 {s4etcik elementov<0,5 dla B}
end;
end;
writeln;
writeln;
For i:=1 to m do {vivod matrici B}
begin
writeln;
For j:=1 to n do
begin
b[i,j]:=i*cos(i+j);
write(b[i,j] :7,' ');
end;
end;
writeln;
writeln;
writeln('oPABHO=',o);{vivod kolicestva elementov<0,5 A}
writeln('lPABHO=',l);{vivod kolicestva elementov<0,5 B}
for i:=1 to m do{cikl zameni 4etnih strok na ne 4etnie}
begin
g:=(i*2)-1;{ne4etnie stroki}
h:=2*i;{4etnie stroki}
s:=a[g,i];
a[g,i]:=a[h,i];
a[h,i]:=s;
end;
For i:=1 to m do
begin
writeln;
For j:=1 to n do
begin
write(a[i,j] :7);{vivod matrici A s zamenoi strok}
end;
end;
writeln;
readln(q);{readkey ne rabotaet(( sdelal tak vihod}
end.
end.
end.


написал не правильно. т.к не считает у меня элементы матрици А и B..вот это я и не понимаю как сделать...
помогите плз!

Сообщение отредактировано: klem4 - 30.12.2007 13:56


Прикрепленные файлы
Прикрепленный файл  ___MATRIX.pas ( 1.5 килобайт ) Кол-во скачиваний: 219
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
andriano
сообщение 30.12.2007 17:40
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

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


У меня несколько вопросов по приведенному фрагменту кода:

if a[i,j]> b[i,j] then
begin
for i:=1 to m do{cikl zameni 4etnih strok na ne 4etnie}
for j:=1 to n do
begin
g:=(i*2)-1;{ne4etnie stroki}
h:=2*i;{4etnie stroki}
s:=a[g,j];
a[g,j]:=a[h,j];
a[h,j]:=s;

в первой стоке для адресации используются переменные цикла, но ВНЕ циклов. К каким элементам массивов a и b осуществляется доступ?
в 3-й строке у тебя перебор до m. Максимальное значение m, насколько понимаю, 6. Вопрос: к какому элементу массива будет обращение в 8-10 строках? Посчитай значения индексов.

Сообщение отредактировано: andriano - 30.12.2007 17:40
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
maximmax
сообщение 30.12.2007 18:31
Сообщение #3





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

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


Цитата(andriano @ 30.12.2007 17:40) *

У меня несколько вопросов по приведенному фрагменту кода:

if a[i,j]> b[i,j] then
begin
for i:=1 to m do{cikl zameni 4etnih strok na ne 4etnie}
for j:=1 to n do
begin
g:=(i*2)-1;{ne4etnie stroki}
h:=2*i;{4etnie stroki}
s:=a[g,j];
a[g,j]:=a[h,j];
a[h,j]:=s;

в первой стоке для адресации используются переменные цикла, но ВНЕ циклов. К каким элементам массивов a и b осуществляется доступ?
в 3-й строке у тебя перебор до m. Максимальное значение m, насколько понимаю, 6. Вопрос: к какому элементу массива будет обращение в 8-10 строках? Посчитай значения индексов.


так а к каким надо обращаться?
если как у меня то будет
i,j=1 => g=1 h=2
i,j=2 => g=3 h=4
i,j=3 => g=5 h=6
i,j=4 => g=7 h=8
i,j=5 => g=9 h=10
i,j=6 => g=11 h=12
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 30.12.2007 19:25
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

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


Цитата(maximmax @ 30.12.2007 18:31) *

так а к каким надо обращаться?
Сравнивать надо было КОЛИЧЕТВО элементов подсчитанное для каждой из матриц (число целое), а не величину отдельных элементов матрицы.
В условии они называются NA и NB, а у тебя в прогамме o и l.
Цитата

если как у меня то будет
i,j=1 => g=1 h=2
i,j=2 => g=3 h=4
i,j=3 => g=5 h=6
i,j=4 => g=7 h=8
i,j=5 => g=9 h=10
i,j=6 => g=11 h=12

Ну и что, в твоих матрицах есть элементы с такими индексами?
Вклюыи в компиляторе проверки выход из диапазона.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
maximmax
сообщение 30.12.2007 19:45
Сообщение #5





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

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


Цитата(andriano @ 30.12.2007 19:25) *

Сравнивать надо было КОЛИЧЕТВО элементов подсчитанное для каждой из матриц (число целое), а не величину отдельных элементов матрицы.
В условии они называются NA и NB, а у тебя в прогамме o и l.
Ну и что, в твоих матрицах есть элементы с такими индексами?
Вклюыи в компиляторе проверки выход из диапазона.

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

if o> l then
begin
for i:=1 to m do{cikl zameni 4etnih strok na ne 4etnie}
for j:=1 to n do
begin
g:=(i*2)-1;{ne4etnie stroki}
h:=2*i;{4etnie stroki}
s:=a[g,j];
a[g,j]:=a[h,j];
a[h,j]:=s;



я в паскале то первый раз и не понимаю....что за проверки выхода диапазона...
и я не понимаю вот этих строчек....я просто по подобию делал....а как что для чего что мне никто не обьяснял..


s:=a[g,j];
a[g,j]:=a[h,j];
a[h,j]:=s;


сдесь можно как нибудь сделать чтоб не по элементно было а сразу строчка.....? там например 1 я строчка со всеми элементами в s записывалась и менялась со второй....потом 3 я срочка так же с 4й...5 я с 6й...

я еще попробовал сделать вот так(ведь матрица 6Х6 так и задасть так перемену строк)

for i:=1 to m do{cikl zameni 4etnih strok na ne 4etnie}
for j:=1 to n do
begin
s:=a[1,j];
g:=a[3,j];
h:=a[5,j];
a[1,j]:=a[2,j];
a[3,j]:=a[4,j];
a[5,j]:=a[6,j];
a[2,j]:=s;
a[4,j]:=g;
a[6,j]:=h;
с[1,j]:=a[1,j];
с[3,j]:=a[3,j];
с[5,j]:=a[5,j];
с[2,j]:=s;
с[4,j]:=g;
с[6,j]:=h;



но что то не прожевал паскаль((((((((((((((((((((((((99
может эту запись можно подправить и он будет по элементно перемещать строчки?

Сообщение отредактировано: maximmax - 30.12.2007 21:05
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 30.12.2007 20:10
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

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


Цитата(maximmax @ 30.12.2007 19:45) *
я в паскале то первый раз и не понимаю....что за проверки выхода диапазона...
и я не понимаю вот этих строчек....я просто по подобию делал....а как что для чего что мне никто не обьяснял..
У тебя в массиве 6 элементов, а ты пытаешься обратиться к 12-му. Так онятнее?
Цитата


s:=a[g,j];
a[g,j]:=a[h,j];
a[h,j]:=s;


сдесь можно как нибудь сделать чтоб не по элементно было а сразу строчка.....? там например 1 я строчка со всеми элементами в s записывалась и менялась со второй....потом 3 я срочка так же с 4й...5 я с 6й...

Можно.
Двумерный массив можно представить как массив одномерных массивов. Т.е. a[i,j] то же самое, что a[i][j], т.е. строка массива записывается так: a[i].
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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