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

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

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

> использование процедур
infiniti
сообщение 19.05.2007 10:13
Сообщение #1


Новичок
*

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

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


Люди, помогите, пожалуйста, написать программу! Очень надо! mega_chok.gif

Даны две действительные матрицы разной размерности. Используя процедуры реорганизовать массивы следующим образом: каждый столбец массива упорядочить по невозрастанию, если его предпоследний элемент отличается более чем на 15% от среднего арифметического элементов столбца, находящихся в нечетных строках, в противном случае столбец упорядочить по неубыванию. Использование вспомогательных рабочих массивов допускается.

Сообщение отредактировано: infiniti - 19.05.2007 10:25
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 17)
мисс_граффити
сообщение 19.05.2007 11:17
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Сам пробовал что-то делать?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
infiniti
сообщение 19.05.2007 12:13
Сообщение #3


Новичок
*

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

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


Цитата(мисс_граффити @ 19.05.2007 12:17) *

Сам пробовал что-то делать?

Пробовал. Как я понял процедура должна считать среднее арифметическое элементов нечетных строк каждого столбца, а затем нужно в другой процедуре сравнивать 0.15 от среднего с последним элементом столбца. Но я не шарю в Паскале, и как это в нем организовать не понимаю. wacko.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2007 12:23
Сообщение #4


Гость






Процедур на самом деле лучше сделать 3, а не одну: первая будет печатать матрицу (потому как тебе придется ее печатать как минимум 2 раза, ДО и ПОСЛЕ преобразования), вторая - считать среднее арифметическое и определять направление сортировки, а третья - собственно сортировать данные...

Подумай, для начала, как ты представляешь себе передачу матрицы любого размера в процедуру... Если ты сделаешь это правильно - вся остальная задача решается элементарно...
 К началу страницы 
+ Ответить 
infiniti
сообщение 19.05.2007 12:36
Сообщение #5


Новичок
*

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

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


Мне, в принципе не нужно брать матрицы любого размера, можно взять две конкретные, но разной размерности.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2007 12:43
Сообщение #6


Гость






Ну, а я про что?... Они же
Цитата
две конкретные, но разной размерности.
, и просто так ты их в процедуру не передашь... Надо придумать, как ДА можно передать 2 разноразмерные матрицы...

(для информации - программа давно готова, но вот тут я бы предпочел не выкладывать готовое решение, а подождать, пока ты хоть немного продвинешься дальше самостоятельно...)
 К началу страницы 
+ Ответить 
infiniti
сообщение 19.05.2007 12:56
Сообщение #7


Новичок
*

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

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


Я думаю так
 
Type matr = Array[1..4,1..5] of integer; Var A,B: matr;
Procedure VVOD(Var X: matr;k,r: integer; e: char);
Var I,J: integer;
Begin
Writeln('Matrica',e);
For I:= 1 to k do
Begin
For J:= 1 to r do
Begin
Write('X[',I,J,']='); Readln(X[I,J]);
End;
End;
End;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2007 12:58
Сообщение #8


Гость






Хорошо... А теперь покажи, как в ЭТУ ЖЕ процедуру передать И матрицу 4*5, И матрицу 6*7, например... У тебя же матрицы РАЗНОГО размера, прочти условие внимательно!!!
 К началу страницы 
+ Ответить 
infiniti
сообщение 19.05.2007 13:06
Сообщение #9


Новичок
*

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

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


Может так
Type matr = Array[1..4,1..5] of integer; Var A,B: matr; 
Procedure VVOD(Var X,Y: matr;k,r,m,n: integer; e,l: char);
Var I,J,D,C: integer;
Begin
Writeln('Matrica',e);
For I:= 1 to k do
Begin
For J:= 1 to r do
Begin
Write('X[',I,J,']='); Readln(X[I,J]);
Begin
Writeln('Matrica',l);
For D:= 1 to m do
Begin
For C:= 1 to n do
Begin
Write('Y[',D,C,']='); Readln(Y[D,C]);
End;
End;
End;
End;
End;
End;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2007 13:10
Сообщение #10


Гость






Да не так... Я больше очевидного говорить не буду... Ты ОПИСЫВАЕШЬ уже матрицы одинаковыми!!!

Type
matrix1 = array[1 .. 5, 1 .. 7] of integer;
matrix2 = array[1 .. 4, 1 .. 8] of integer;

var
m1: matrix1;
m2: matrix2;


А вот теперь попробуй ОБЕ матрицы (и m1, и m2) заполнить в своей процедуре!
 К началу страницы 
+ Ответить 
infiniti
сообщение 19.05.2007 13:22
Сообщение #11


Новичок
*

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

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


Type matr1 = Array[1..4,1..5]; matr2 = Array[1..6,1..7]of integer; Var m1: matr1; m2:matr2;
Procedure VVOD(Var m1,m2: matr;k,r,m,n: integer; e,l: char);
Var I,J,D,C: integer;
Begin
Writeln('Matrica',e);
For I:= 1 to k do
Begin
For J:= 1 to r do
Begin
Write('m1[',I,J,']='); Readln(m1[I,J]);
Begin
Writeln('Matrica',l);
For D:= 1 to m do
Begin
For C:= 1 to n do
Begin
Write('m2[',D,C,']='); Readln(m2[D,C]);
End;
End;
End;
End;
End;
End;


Так?

Сообщение отредактировано: infiniti - 19.05.2007 13:32
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 19.05.2007 14:09
Сообщение #12


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Во-первых, не стоит забывать про форматирование текста программ.
Во-вторых... Нет, это не решение.
А если нам нужно 3 матрицы? А если 10?

Я бы вот в какую сторону посмотрела: у нас нигде нет работы с матрицей целиком. Все задания идут по отдельному столбцу... Это первый вариант.
Второй... Работу с динамической памятью вы еще не проходили?



--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
infiniti
сообщение 19.05.2007 14:27
Сообщение #13


Новичок
*

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

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


Насчет форматирования - согласен, но для меня щас это не главное. Это не решение - это начальная часть программы, где описываются матрицы.У меня есть конкретная задача с двумя матрицами. Если бы я самостоятельно, без помощи мог все сделать я бы здесь не сидел. У нас было 4 лекции по Паскалю и понять мне особо ничего не удалось. Информатика последний семестр и не профильный предмет. На последний вопрос я думаю отвечать не надо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2007 15:07
Сообщение #14


Гость






Ну вот посмотри, как я бы делал печать матрицы:

procedure print(const mx: array of real;
m, n: integer);
var i, j: integer;
begin
for i := 0 to pred(m) do begin
for j := 0 to pred(n) do
write(mx[i * n + j]:5 :2);
writeln;
end;
end;

const
a: array[1 .. 5, 1 .. 5] of real = (
(1.0, 2.0, 3.0, 4.0, 5.0),
(2.5, 7.3, 4.8, 5.8, 2.9),
(3.5, 6.7, 8.2, 9.5, 2.6),
(5.5, 6.7, 3.8, 4.65, 9.4),
(1.1, 2.7, 7.3, 0.5, 0.8)
);

begin
print(a[1], 5, 5);
end.


Посмотри, как организована работа с матрицей... В эту процедуру можно передать как матрицу 5x5, так и 10x8, и любую другую...
 К началу страницы 
+ Ответить 
infiniti
сообщение 19.05.2007 15:49
Сообщение #15


Новичок
*

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

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


С печатью матрицы понятно. Мне нужно составить программу для двух конкретных матриц, каких я хочу сам, например 2*3 и 3*4, данные тоже выбираю я, т.е. мне нужна конкретно эта задача с моими данными. Задача мне понятна, просто я слабо представляю как реализовать ее в Паскале. Например как считать среднее значение элементов нечетных строк и затем упорядочивать столбцы. Моему преподу нужно будет лишь объяснить где какие переменные и какие операторы и процедуры что делают.

Сообщение отредактировано: infiniti - 19.05.2007 15:52
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2007 16:01
Сообщение #16


Гость






Ну, я смотрю, сам ты ничего делать не хочешь... Как хочешь... Держи:

const
a: array[1 .. 5, 1 .. 5] of real = (
(1.0, 2.0, 3.0, 4.0, 5.0),
(2.5, 7.3, 4.8, 5.8, 2.9),
(3.5, 6.7, 8.2, 9.5, 2.6),
(5.5, 6.7, 3.8, 4.65, 9.4),
(1.1, 2.7, 7.3, 0.5, 0.8)
);

procedure print(const mx: array of real;
m, n: integer);
var i, j: integer;
begin
for i := 0 to pred(m) do begin
for j := 0 to pred(n) do
write(mx[i * n + j]:5:2);
writeln;
end;
end;

procedure sort(var mx: array of real;
m, n: integer; in_col: integer; by: boolean);
var
T: real;
i, j: integer;
begin
for i := 1 to m do
for j := m downto i + 1 Do
if (mx[(in_col) + pred(j - 1) * n] >
mx[(in_col) + pred(j) * n]) = by then
begin
T := mx[(in_col) + pred(j - 1) * n];
mx[(in_col) + pred(j - 1) * n] := mx[(in_col) + pred(j) * n];
mx[(in_col) + pred(j) * n] := T;
end;
end;

procedure convert(var mx: array of real;
m, n: integer);
var
rows, cols, count: integer;
before_last, s: real;
begin
for cols := 0 to pred(n) do begin
s := 0; count := 0;
for rows := 0 to pred(m) do
if odd(rows + 1) then begin
s := s + mx[rows * n + cols];
inc(count);
end;
s := s / count;

before_last := mx[(m - 2)*n + 0];
sort(mx, m, n, cols, abs(before_last - s) / s > 0.15);

writeln('col = ', cols, '; sum = ', s:6:2);
end;
end;

begin
print(a[1], 5, 5);
convert(a[1], 5, 5);
print(a[1], 5, 5);
end.

Добавишь еще одну матрицу - отработает и на ней тоже... Успехов...
 К началу страницы 
+ Ответить 
infiniti
сообщение 19.05.2007 16:14
Сообщение #17


Новичок
*

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

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


Огромное спасибо!!! good.gif Потараюсь до конца разобраться.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
infiniti
сообщение 20.05.2007 18:20
Сообщение #18


Новичок
*

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

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


VOLVO!
Cпасибо огромное!!! Вчера добавил еще одну матрицу, все работает. Но не все понятно.
С процедурой принт все ясно, а вот дальше dry.gif Что обозначено за in_col? Что такое by: boolean? Нам такое не давали. rows - ряды, cols-столбцы,count-счетчик - так? И напишите, пожалуйста где что считается unsure.gif

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

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

 



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