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

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

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

 
 Ответить  Открыть новую тему 
> использование процедур
сообщение
Сообщение #1


Новичок
*

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

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


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

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

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


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

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

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


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


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


Новичок
*

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

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


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

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

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


Гость






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

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


Новичок
*

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

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


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


Гость






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

(для информации - программа давно готова, но вот тут я бы предпочел не выкладывать готовое решение, а подождать, пока ты хоть немного продвинешься дальше самостоятельно...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Хорошо... А теперь покажи, как в ЭТУ ЖЕ процедуру передать И матрицу 4*5, И матрицу 6*7, например... У тебя же матрицы РАЗНОГО размера, прочти условие внимательно!!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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) заполнить в своей процедуре!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


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

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

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


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

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



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


Новичок
*

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

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


Насчет форматирования - согласен, но для меня щас это не главное. Это не решение - это начальная часть программы, где описываются матрицы.У меня есть конкретная задача с двумя матрицами. Если бы я самостоятельно, без помощи мог все сделать я бы здесь не сидел. У нас было 4 лекции по Паскалю и понять мне особо ничего не удалось. Информатика последний семестр и не профильный предмет. На последний вопрос я думаю отвечать не надо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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, и любую другую...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

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

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


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

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

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


Новичок
*

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

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


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


Новичок
*

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

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


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

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

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

 





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