![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Edelana |
![]()
Сообщение
#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. Мне ничего решать не надо. Я хочу сама научиться, просто объясните, как делать(как и от чего зависит) и желательно на примерах, своих, но по теме. Только не говорите чтоб по форуму искала и факи читала. Я там была. Это так сказать основы или готовые программы в которых не могу разобраться,а мне нужна практика и принцип решения. Заранее всем огромное спасибо. Код в теги... |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата(Edelana @ 11.03.05 12:56) Только не говорите чтоб по форуму искала и факи читала. Я там была. Это так сказать основы или готовые программы в которых не могу разобраться,а мне нужна практика и принцип решения. Тогда, извините, не совсем понятно, что от нас требуется... Где именно сложности? В чем не можете разобраться? Телепатов у нас тут маловато... Кстати, Вы уверены, что "основы" Вам не нужны, и спрашиваете, как работать с диагоналями матриц? Что-то не связывается одно с другим. Или опять - очередное "изобретение велосипеда": Я не хочу, как там, я хочу по-своему? Цитата(Edelana @ 11.03.05 12:56) Я хочу сама научиться, просто объясните, как делать(как и от чего зависит) и желательно на примерах, своих, но по теме. Вот это как раз и сделано в FAQ. |
Guest |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата(volvo @ 11.03.05 14:10) Тогда, извините, не совсем понятно, что от нас требуется... Где именно сложности? В чем не можете разобраться? Телепатов у нас тут маловато... Кстати, Вы уверены, что "основы" Вам не нужны, и спрашиваете, как работать с диагоналями матриц? Что-то не связывается одно с другим. Или опять - очередное "изобретение велосипеда": Я не хочу, как там, я хочу по-своему? Вот это как раз и сделано в FAQ. я не очень понимаю как менять местами строку со столбцом, строку со стракой, диаогнали, пероворачивать. Тоесть как действовать, что делать. Что с чем менять. Если бы я не знала основы, то я бы даже задачку не написала там где находила суммы диагоналей. |
hiv |
![]()
Сообщение
#4
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Думаю здесь проблема не в матрицах и их диагоналях, а в том как обменять значениями две переменные A и B.
В общем на пальцах: Переменная - это сосуд (пусть стеклянный для наглядности) Ее значение - это сколько литров жидкости налито ( пусть в литрах измеряется) ![]() Итак: У нас два сосуда ( две переменные ) А и Б. Чтобы перелить из одного в другой что нужно сделать?... Правильно! Взять третий сосуд!!! Пусть он называется С. Тогда план действий: 1. Переливаем жидкость из сосуда А в сосуд С. 2. Переливаем жидкость из соуда Б в сосуд А. 3. Переливаем жидкость из сосуда С в сосуд Б. ВСЕ - задача выполнена! ЗЫ: Пива чето захотелось ![]() Сообщение отредактировано: hiv - 11.03.2005 17:00 -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
Altair |
![]()
Сообщение
#5
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
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. Думаю принцип ясен. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Edelana |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 5 Пол: Женский Репутация: ![]() ![]() ![]() |
Цитата(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 - 11.03.2005 18:00 |
hiv |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Так можно, но зачем использовать целый массив 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; ..... Чтобы было понятно - выполните программу пошагово... -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
volvo |
![]()
Сообщение
#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; |
hiv |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
:yes: Прошу прощения у всех! :yes: Лоханулся я однако... Старый стал...
-------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
Edelana |
![]()
Сообщение
#10
|
Группа: Пользователи Сообщений: 5 Пол: Женский Репутация: ![]() ![]() ![]() |
Цитата(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; ![]() а если 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 как тут лучше и проще поступить? |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата(Edelana @ 11.03.05 18:16) только там не просто s, а s[i,j] т.к. type mas=array[1..n,1..n] of integer; var s:mas; ![]() Вот именно это hiv и попытался объяснить ![]() Код 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] *) |
Edelana |
![]()
Сообщение
#12
|
Группа: Пользователи Сообщений: 5 Пол: Женский Репутация: ![]() ![]() ![]() |
Цитата(volvo @ 11.03.05 19:27) Вот именно это hiv и попытался объяснить ![]() а как на счет задачи от 07:16 PM ? то есть как тут переходить на следущие диагонали а менять диагонали одинаковым методом |
volvo |
![]()
Сообщение
#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. |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Ну конечно в процедуре вывода... Дело не в том, что "проще", по другому просто невозможно. Я надеюсь, Вы не собираетесь хранить вместе с матрицей еще и такую же по размеру матрицу с цветами элементов? :no:
Так что - в процедуре вывода... |
Edelana |
![]()
Сообщение
#15
|
Группа: Пользователи Сообщений: 5 Пол: Женский Репутация: ![]() ![]() ![]() |
а как работать с матрицами в файлах?
как выше или там другие методы? |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
А с матрицами в файлах работать не нужно. Нужно матрицу из файла прочитать, обработать (теми методами, что были рассмотрены выше), и вернуть назад в файл (если это необходимо)...
|
![]() ![]() |
![]() |
Текстовая версия | 21.07.2025 10:09 |