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

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

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

 
 Ответить  Открыть новую тему 
> Обработка массивов. Матрицы, помогите чуть-чуть, не понимаю про элемент матрицы
сообщение
Сообщение #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 -


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


Гуру
*****

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

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


1. Неужели трудно заглянуть в соседнюю тему и посмотреть, как принято оформлять исходик?
2. Если я правильно понял, программа делает то, чего нет в условии, а именно - запрос размеров матриц.
3. Для начала я бы попытался заменть read на readln.
4. В условии, если я его правильно понял, требуется сформировать НОВУЮ матрицу С из переставленных элементов А или В в зависимости от условия, у тебя же всегда обрабатывается А и записывается в нее же. И она же распечатывается.
5. Проверь индексацию в том месте, где ты пытаешься переставить местами элементы. Собственно, лучше сначала поправь программу в соответствии с 4, а когда распечатаешь матрицу С, сам поймешь в чем дело.
6. По поводу readln(q);{readkey ne rabotaet(( sdelal tak vihod} - оно работает, ждет от тебя ввода числа q, но т.к. ты, скорее всего, нажимаешь на ввод, ничего не вводя, то оно снова и снова просит тебя ввести число. Просто ожидание нажатия на enter - readln без параметров. Если же хочешь чтобы работало именно readkey, а не readln, нужно подключать crt.

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





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

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


Ну, во-первых, ты элементы (,0.5) матрицы В считаешь до того, как собственно задашь эти элементы!!!Так что писать нужно

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,' ');
if b[i,j]<t then l:=l+1 {s4etcik elementov<0,5 dla B}
end;
end;




--------------------
[i][b]sweet dew
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





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

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


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


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 opredeleniz <>}
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,' ');
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,' ');
if b[i,j]<t then l:=l+1 {s4etcik elementov<0,5 dla B}
end;
end;
writeln;
writeln;
writeln('oPABHO=',o);{vivod kolicestva elementov<0,5 A}
writeln('lPABHO=',l);{vivod kolicestva elementov<0,5 B}
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;
c[g,j]:=a[g,j];
c[h,j]:=s;
end;
For i:=1 to m do
begin
writeln;
For j:=1 to n do
begin
write(c[i,j] :7);{vivod matrici A s zamenoi strok}
end;
end;
end
else
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:=b[g,j];
b[g,j]:=b[h,j];
b[h,j]:=s;
c[g,j]:=b[g,j];
c[h,j]:=s;
end;
For i:=1 to m do
begin
writeln;
For j:=1 to n do
begin
write(c[i,j] :7);{vivod matrici A s zamenoi strok}
end;
end;
end;
writeln;
readln(q);{readkey ne rabotaet(( sdelal tak vihod}
end.
end.
end.



Прикрепленные файлы
Прикрепленный файл  __MAXMAT.PAS ( 2 килобайт ) Кол-во скачиваний: 153
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гуру
*****

Группа: Пользователи
Сообщений: 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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гуру
*****

Группа: Пользователи
Сообщений: 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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





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

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


я еще попробовал сделать вот так(ведь матрица 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
может эту запись можно подправить и он будет по элементно перемещать строчки?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гуру
*****

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

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


Это что, шутка такая?
В общем, соображения такие: за один проход цикла ты обрабатываешь по две строки матрицы. Значит, длина цикла должна быть в 2 раза меньше (если бы обрабатывал по 3 строки - то в 3 раза меньше).
Откуда:
  for i:=1 to m div 2 do begin {cikl zameni 4etnih strok na ne 4etnie}
g:=(i*2)-1;{ne4etnie stroki}
h:=2*i;{4etnie stroki}
c[h]:=a[g];
c[g]:=a[h];
end;

Для b, естественно, следать аналогично.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12





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

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


Цитата(andriano @ 30.12.2007 23:05) *

Это что, шутка такая?
В общем, соображения такие: за один проход цикла ты обрабатываешь по две строки матрицы. Значит, длина цикла должна быть в 2 раза меньше (если бы обрабатывал по 3 строки - то в 3 раза меньше).
Откуда:
  for i:=1 to m div 2 do begin {cikl zameni 4etnih strok na ne 4etnie}
g:=(i*2)-1;{ne4etnie stroki}
h:=2*i;{4etnie stroki}
c[h]:=a[g];
c[g]:=a[h];
end;

Для b, естественно, следать аналогично.


чего то пишет Types Mishmatch...... хотя integer с real менял и так и так.....и сяк.... все равно..

а моя фигулинка вроде считает....ненаю тока..я ошибок не нашел....


program matrix;
uses crt;
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
clrscr;
{g:=1;{ne4etnie stroki}
{h:=1;{4etnie stroki}
t:=0.5;{4islo, iz DANO dla opredeleniz <>}
textcolor(red);
Write('CTPOKI'); Readln(m);
Write('STOLBCI'); Readln(n);
textcolor(blue);
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,' ');
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);
textcolor(yellow);
write(b[i,j] :7,' ');
if b[i,j]<t then l:=l+1 {s4etcik elementov<0,5 dla B}
end;
end;
writeln;
writeln;
textcolor(blue);
writeln('elementov< 0.5 V A=',o);{vivod kolicestva elementov<0,5 A}
writeln('elementov< 0.5 V B=',l);{vivod kolicestva elementov<0,5 B}
if l>=o then
begin
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:=b[1,i];
b[1,i]:=b[2,i];
b[2,i]:=s;
c[1,i]:=b[1,i];
c[2,i]:=s;
s:=b[3,i];
b[3,i]:=b[4,i];
b[4,i]:=s;
c[3,i]:=b[3,i];
c[4,i]:=s;
s:=b[5,i];
b[5,i]:=b[6,i];
b[6,i]:=s;
c[5,i]:=b[5,i];
c[6,i]:=s;
end;
For i:=1 to m do
begin
writeln;
For j:=1 to n do
begin
textcolor(green);
write(c[i,j] :7);{vivod matrici C s zamenoi strok}
end;
end;
end
else
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[1,i];
a[1,i]:=a[2,i];
a[2,i]:=s;
c[1,i]:=a[1,i];
c[2,i]:=s;
s:=a[3,i];
a[3,i]:=a[4,i];
a[4,i]:=s;
c[3,i]:=a[3,i];
c[4,i]:=s;
s:=a[5,i];
a[5,i]:=a[6,i];
a[6,i]:=s;
c[5,i]:=a[5,i];
c[6,i]:=s;
end;
For i:=1 to m do
begin
writeln;
For j:=1 to n do
begin
textcolor(green);
write(c[i,j] :7);{vivod matrici C s zamenoi strok}
end;
end;
end;
writeln;
readkey;
end.
end.
end.



Сообщение отредактировано: maximmax -


Прикрепленные файлы
Прикрепленный файл  __MAXMAT.PAS ( 2.44 килобайт ) Кол-во скачиваний: 153
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 31.10.2020 16:04
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name