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

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

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

 
 Ответить  Открыть новую тему 
> Все о матрице, Все о матрице
сообщение
Сообщение #1


Гость






объясните, пожалуйста, принцип перестановки и замены строки на строку, строки на столбец, как менять куски матрицы (подматрицы), как работать с диагоналями.

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

Код
program Z_8;
uses crt;
const n=10;
var a:array[1..n,1..n] of integer;
   g,p,i,j:integer;
begin
textbackground(0);
clrscr;
randomize;

for i:=1 to n do
 for j:=1 to n do
 a[i,j]:=random(2);
 for i:=1 to n do begin
 for j:=1 to n do
   begin
   if i=j then textcolor(10) else textcolor(7);
   if j=n+1-i then textcolor(12);
   write( a[i,j]:3);
   end;
   writeln;
end;

textcolor(7);
for i:=1 to n do begin p:=p+a[i,n+1-i]; end;
writeln('  summa pobochnoi diagonali= ',p);
for i:=1 to n-1 do begin g:=g+a[i,i]; end;
writeln('  summa glavnoi   daigonali= ',g);
readkey;
end.


Мне ничего решать не надо. Я хочу сама научиться, просто объясните, как делать(как и от чего зависит) и желательно на примерах, своих, но по теме.
Только не говорите чтоб по форуму искала и факи читала. Я там была. Это так сказать основы или готовые программы в которых не могу разобраться,а мне нужна практика и принцип решения.

Заранее всем огромное спасибо.
Код в теги...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата(Edelana @ 11.03.05 12:56)
Только не говорите чтоб по форуму искала и факи читала. Я там была. Это так сказать основы или готовые программы в которых не могу разобраться,а мне нужна практика и принцип решения.


Тогда, извините, не совсем понятно, что от нас требуется... Где именно сложности? В чем не можете разобраться? Телепатов у нас тут маловато...

Кстати, Вы уверены, что "основы" Вам не нужны, и спрашиваете, как работать с диагоналями матриц? Что-то не связывается одно с другим. Или опять - очередное "изобретение велосипеда": Я не хочу, как там, я хочу по-своему?

Цитата(Edelana @ 11.03.05 12:56)
Я хочу сама научиться, просто объясните, как делать(как и от чего зависит) и желательно на примерах, своих, но по теме.
Вот это как раз и сделано в FAQ.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата(volvo @ 11.03.05 14:10)
Тогда, извините, не совсем понятно, что от нас требуется... Где именно сложности? В чем не можете разобраться? Телепатов у нас тут маловато...

Кстати, Вы уверены, что "основы" Вам не нужны, и спрашиваете, как работать с диагоналями матриц? Что-то не связывается одно с другим. Или опять - очередное "изобретение велосипеда": Я не хочу, как там, я хочу по-своему?

Вот это как раз и сделано в FAQ.

я не очень понимаю как менять местами строку со столбцом, строку со стракой, диаогнали, пероворачивать. Тоесть как действовать, что делать.
Что с чем менять.

Если бы я не знала основы, то я бы даже задачку не написала там где находила суммы диагоналей.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

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

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


Думаю здесь проблема не в матрицах и их диагоналях, а в том как обменять значениями две переменные A и B.
В общем на пальцах:
Переменная - это сосуд (пусть стеклянный для наглядности)
Ее значение - это сколько литров жидкости налито ( пусть в литрах измеряется) smile.gif
Итак:
У нас два сосуда ( две переменные ) А и Б. Чтобы перелить из одного в другой что нужно сделать?... Правильно! Взять третий сосуд!!! Пусть он называется С.
Тогда план действий:
1. Переливаем жидкость из сосуда А в сосуд С.
2. Переливаем жидкость из соуда Б в сосуд А.
3. Переливаем жидкость из сосуда С в сосуд Б.
ВСЕ - задача выполнена!

ЗЫ: Пива чето захотелось smile.gif

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


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Ищущий истину
******

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

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


Edelana, ничего сложного нет, давайте вместе с вами посмотрим как это делается!
Цитата
менять местами строку со столбцом, строку со строкой, диаогнали, пероворачивать

Как было замеченно выше один из способов - использовать дополнительный массив - БУФЕР.

Хотя можно было обойтись и без дополнительного.

Итак, посмотрим как поменять местами две строки...
Код

{...}
var
a:array[1..N,1..N] of TTYPE;
buf :=array[1..N] of TTYPE;
{....}
i,j,ii:integer;
Begin
I:=2; {вторую строку меняем ...}
ii:=5 {на пятую}
For j:=1 to N do Buf[j]:=a[i,j]; {копируем строку в буфер}
For j:=1 to N do a[i,j]:=a[ii,j]; {переписывапем строку ii в i}
For j:=1 to N do a[ii,j]:=buf[j]; {переписываем из буфера в ii}

end.


Думаю принцип ясен.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





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

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


Цитата(Oleg_Z @ 11.03.05 17:50)
Edelana, ничего сложного нет, давайте вместе с вами посмотрим как это делается!
....

спасибо за участие, ....

Код
program Z_8;
uses crt;
const n=10;
type mas=array[1..n,1..n] of integer;
var s,a:mas;
     g,p,i,j:integer;
.....
 for i:=1 to n do
 for j:=1 to n do
   begin
   if i=j then begin
   s[i,j]:=a[i,j];
   a[i,j]:=a[i,n-i+1];
   a[i,n-i+1]:=s[i,j];
   end;
end;
.....

А как сделать то же самое только с типизированным файлом?
Что посоветуете?

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


Профи
****

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

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


Так можно, но зачем использовать целый массив s, если мы переливаем значения массива поэлементно? Ведь значение переменной s нужно сохранять только при неизменных i и j, а если они изменяются, то старое значение s просто не нужно.
Это можно сделать так:
Код
program Z_8;
uses crt;
const n=10;
type mas=array[1..n,1..n] of integer;
var a:mas;
    s,g,p,i,j:integer;
.....
for i:=1 to n do
for j:=1 to n do
  begin
  if i=j then begin
  s:=a[i,j];
  a[i,j]:=a[i,n-i+1];
  a[i,n-i+1]:=s;
  end;
end;
.....


Чтобы было понятно - выполните программу пошагово...


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Edelana
hiv
Можно маленький вопрос? зачем здесь вообще 2 вложенных цикла? Все равно что-то выполняется только если i = j ... Тогда вот так:

Код
for i:=1 to n do
 begin
   s:=a[i,i];
   a[i,i]:=a[i,n-i+1];
   a[i,n-i+1]:=s;
 end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

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

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


:yes: Прошу прощения у всех! :yes: Лоханулся я однако... Старый стал...


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





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

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


Цитата(hiv @ 11.03.05 18:33)
:yes:  Прошу прощения у всех!  :yes: Лоханулся я однако... Старый стал...

j:=2;
jj:=5;
for i:=1 to n do buf[i]:=a[i,j];
for i:=1 to n do a[i,j]:=a[i,jj];
for i:=1 to n do a[j,jj]:=buf[i];

меняю столбцы, с 5-ым что тo не то
в чем ошибка и почему?

volvo
только там не просто s, а s[i,j] т.к.
type mas=array[1..n,1..n] of integer;
var s:mas; smile.gif

а если nXm и m кратно n, то есть есть массив
1 2 3 4 5 6 7 8
2 2 2 2 6 6 6 6
3 3 3 3 7 7 7 7
4 4 4 4 8 8 8 8

нуно поменять следущие диагонали:
1 2 3 4 с 4 2 3 4
5 6 7 8 с 8 6 7 8

как тут лучше и проще поступить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Цитата(Edelana @ 11.03.05 18:16)
только там не просто s, а s[i,j] т.к.
type mas=array[1..n,1..n] of integer;
var s:mas; smile.gif

Вот именно это hiv и попытался объяснить smile.gif зачем там массив? Он просто не нужен, Вам же надо просто поменять 2 значения местами... А значит, хватит и одного числа...

Код
j:=2;
jj:=5;
for i:=1 to n do buf[i]:=a[i,j];
for i:=1 to n do a[i,j]:=a[i,jj];
for i:=1 to n do a[i,jj]:=buf[i];
(* внимательнее с индексами !!! раньше было a[J,jj]:=buf[i] *)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12





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

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


Цитата(volvo @ 11.03.05 19:27)
Вот именно это hiv и попытался объяснить smile.gif зачем там массив? Он просто не нужен, Вам же надо просто поменять 2 значения местами... А значит, хватит и одного числа...

а как на счет задачи от 07:16 PM ?

то есть как тут переходить на следущие диагонали
а менять диагонали одинаковым методом
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Цитата(Edelana @ 11.03.05 18:31)
а как на счет задачи от 07:16 PM ? то есть как тут переходить на следущие диагонали а менять диагонали одинаковым методом

Я бы делал вот так:
Код
const
 size_y = 4;
 size_x = 8;
var a: array[1..size_y, 1..size_x] of integer;
 i, j, s, _add_: integer;
begin ...
 for j := 1 to (size_x div size_y) do
   for i := 1 to size_y do
     begin
       _add_ := (j - 1) * size_y;

       s := a[i, _add_ + i];
       a[i, _add_ + i] := a[i, _add_ + (size_y - i + 1)];
       a[i, _add_ + (size_y - i + 1)] := s;
     end;
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Ну конечно в процедуре вывода... Дело не в том, что "проще", по другому просто невозможно. Я надеюсь, Вы не собираетесь хранить вместе с матрицей еще и такую же по размеру матрицу с цветами элементов? :no:
Так что - в процедуре вывода...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15





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

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


а как работать с матрицами в файлах?
как выше или там другие методы?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






А с матрицами в файлах работать не нужно. Нужно матрицу из файла прочитать, обработать (теми методами, что были рассмотрены выше), и вернуть назад в файл (если это необходимо)...
 К началу страницы 
+ Ответить 

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

 





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