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

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

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

 
 Ответить  Открыть новую тему 
> переставление столбцов местами, задача
Tribunal
сообщение 29.12.2005 13:28
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


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

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

не могли бы вы помочь мне с этой задачей? unsure.gif


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.12.2005 13:35
Сообщение #2


Гость






Как задать матрицу, чтобы быстро поменять местами ее столбцы и работаешь со столбцами так же просто, как, например, с целыми числами...

Кстати, тогда именно и будет
Цитата
по образу и подобию упорядочения элементов в одномерном массиве
 К началу страницы 
+ Ответить 
Tribunal
сообщение 29.12.2005 13:41
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


эээ....а поподробнее можно...?


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.12.2005 13:44
Сообщение #4


Гость






Что именно не понятно? Там же приведен пример использования...

Вот, например, приведи промер, КАК ты пыталась решить это по подобию одномерных массивов, я покажу как это перенести на двумерные...
 К началу страницы 
+ Ответить 
Tribunal
сообщение 29.12.2005 17:33
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


ну примерно так:

Код

program swap;

const
row=4;
col=4;
r=10;

var
a:array [1..col,1..row];
s:array [1..row];
i,j,k,t,min:integer;

begin

{ввод матрицы}
randomize;
   for i:=1 to col do
   begin
      for j:=1 to row do
      begin
      a[i,j]:=random( r )+1;
      write(a[i,j]:4);
      end;
      writeln;

for j:=1 to row do
begin
   s[j]:=0;
   for i:=1 to col do
   if a[i,j]<0 then s[j]:=s[j]+a[i,j];
end;

for i:=1 to col do
for j:=1 to row-1 do
begin
min:=j;
for k:=j+1 to row do
if a[k]>a[min] then min:=k;
t:=a[k];
a[j]:=a[min];
a[min]:=t;;
end;

for i:=1 to col do
begin
for j:=1 to row do
write(a[i,j]:4);
writeln;
end;

end.


Сообщение отредактировано: Tribunal - 29.12.2005 17:34


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.12.2005 17:37
Сообщение #6


Гость






Ну, а я говорил про что-то в этом духе:
const
size_row = 10;
size_col = 10;

type
trow = array[1 .. size_row] of integer;
tmatrix = array[1 .. size_col] of trow;

function f(r: trow): integer;
var i, s: integer;
begin
s := 0;
for i := 1 to size_row do
s := s + r[i];
f := s;
end;

procedure swap_cols(var mx: tmatrix;
const i, j: integer);
var T: trow;
begin
T := mx[i]; mx[i] := mx[j]; mx[j] := T
end;

procedure print(var mx: tmatrix);
var i, j: integer;
begin
for i := 1 to size_row do
begin
for j := 1 to size_col do
write(mx[j][i]:4);
writeln
end;
end;

var
mx: tmatrix;
i, j: integer;

begin
{ инициализация матрицы }
for i := 1 to size_row do
for j := 1 to size_col do
mx[i][j] := random(50)-25;

writeln('before:'); print(mx);
for i := 1 to size_col do
for j := size_col downto i+1 do
if f(mx[j - 1]) > f(mx[j]) then
swap_cols(mx, j - 1, j);

writeln('after:'); print(mx);
end.
 К началу страницы 
+ Ответить 
Tribunal
сообщение 29.12.2005 17:47
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


а почему вот здесь:

Цитата
mx[i][j] := random(50)-25;


ошибка range check error?


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.12.2005 17:59
Сообщение #8


Гость






Не знаю... Если я выложил код, значит у меня он отработал... Никаких Range Check Error не было замечено... Да и нечему там давать такую ошибку, если только ты не меняла здесь:
trow = array[1 .. size_row] of integer;

integer на какой-нибудь беззнаковый тип, например, Byte или Word...
 К началу страницы 
+ Ответить 
Tribunal
сообщение 29.12.2005 18:02
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


я ничего не меняла.ошибка выводится.=(


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.12.2005 18:06
Сообщение #10


Гость






А присоедини-ка свой PAS-файл в аттаче... Я понимаю, что ты ничего не меняла, но там просто физически не может быть этой ошибки... (не надо копировать текст программы, мне нужен ИМЕННО PAS-файл!!!)

И заодно - напиши, какой компилятор у тебя...
 К началу страницы 
+ Ответить 
Tribunal
сообщение 29.12.2005 18:11
Сообщение #11


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


прости ламака...а где компилятор пишется? unsure.gif


Прикрепленные файлы
Прикрепленный файл  SWAP.PAS ( 988 байт ) Кол-во скачиваний: 188


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.12.2005 18:15
Сообщение #12


Гость






Меню Help -> About
 К началу страницы 
+ Ответить 
Tribunal
сообщение 29.12.2005 18:17
Сообщение #13


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


там написано только то,что паскаль версии 7.0

Сообщение отредактировано: Tribunal - 29.12.2005 18:17


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.12.2005 18:18
Сообщение #14


Гость






Все, можешь не писАть... Все ясно... Делай так:
     mx[i][j] := Integer(random(50))-25;
 К началу страницы 
+ Ответить 
Tribunal
сообщение 29.12.2005 18:20
Сообщение #15


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


а объясни,пожалуйста,философский смысл выражения mx[i][j]...
я такое впервые вижу.что это означает?


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.12.2005 18:25
Сообщение #16


Гость






mx[i, j] тебе ближе? Используй это... Я по привычке из C++ так пишу (благо, Паскаль позволяет оба варианта записи)...
 К началу страницы 
+ Ответить 
Tribunal
сообщение 29.12.2005 18:25
Сообщение #17


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


спасибо=)


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.12.2005 18:27
Сообщение #18


Гость






Хотя здесь есть еще один момент: фактически матрица описана, как массив столбцов, поэтому крайне рекомендуется запись именно mx[i][j], где mx[i] - столбец №I , а [j] - уже обращение к j-му элементу этого столбца...
 К началу страницы 
+ Ответить 

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

 



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