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

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

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

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


Пионер
**

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

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


Дана матрица Х[9,10]. Упорядочить элементы столбцов матрицы по возрастанию, а сами столбцы по возрастанию произведения четных элементов столбцов (использовать сортировку ”пузырек с флажком”).

unsure.gif

помогите пожалуйста реализовать в Pascal ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

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

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


goto FAQ http://forum.pascal.net.ru/index.php?showtopic=3065

http://forum.pascal.net.ru/index.php?showt...indpost&p=34991


http://forum.pascal.net.ru/index.php?showtopic=2694

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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






А что именно не получается? Не может же быть, что ВСЁ ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

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

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


пузырек с флажком - это че ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

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

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


а кто его знает :D может это есть пузырек с просеиванием ? я ссылку дал.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

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

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


"столбцы по возрастанию произведения четных элементов столбцов " - не понял
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

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

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


нужно посчитать произведение ЧЕТНЫХ элементов в столбце
те
1 2
2 3
3 5
5 1
6 7
7 2

1)2*6=12
2)2*2=4
не упорядочены -> меняешь местами

2 1
3 2
5 3
1 5
7 6
2 7


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

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

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


так, я сделал сортировку элементов столбца по возрастанию... а как теперь сделать сортировку столбцов " по возрастанию произведения четных элементов столбцов " ?

Uses
crt;

const
NN = 9;
MM = 10;

Type
 Matrix =
  array [1..NN, 1..MM] of Integer;

var
A : Matrix;

(* заполнение массива случайными элементами *)
Procedure RandMatr (var tmp: Matrix; r: integer);
Var
n,m : word;
begin
randomize;
For n:=1 to NN do
  For m:=1 to MM do
    tmp[n,m]:=random®
end;

(* вывод массива *)
Procedure PrintMatr (var tmp: Matrix);
Var
n,m : word;
begin
For n:=1 to NN do
 begin
 For m:=1 to MM do
   write(tmp[n,m]:2,'  ');
   writeln
 end
end;

(* сортировка *)
Procedure BubbleMatr (var tmp: Matrix);
var
   i,j,t,m :word;
   flagsort:boolean;

begin
 for m:= 1 to MM do
 begin
   repeat
     flagsort:=true;
     for i:=1 to NN-1 do
      if (tmp[i,m]>tmp[i+1,m]) then
       begin
          t:=tmp[i,m];
          tmp[i,m]:=tmp[i+1,m];
          tmp[i+1,m]:=t;
          j:=i;

          while (j>1)and (tmp[j-1,m]>tmp[j,m]) do
           begin
              t:=tmp[j,m];
              tmp[j,m]:=tmp[j-1,m];
              tmp[j-1,m]:=t;
              dec(j);
           end;
           flagsort:=false
       end;
  until flagsort
end
end;

(* основная программа *)
begin
Clrscr;
RandMatr (A, 50);
PrintMatr (A);
writeln;
BubbleMatr (A);
PrintMatr (A);
Readkey
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Читай пост №7, klem4 написал, что надо сделать...
Допустим, есть матрица:
Цитата
1 2 3 4
5 6 7 8
2 3 4 5
3 4 5 6

запоминаешь произведения четных элементов для КАЖДОГО столбца в отдельном массиве (в приведенном примере массив будет таким: <2, 48, 4, 192>), вводишь индексный массив (изначально <1, 2, 3, 4>), и сортируешь тот массив, который содержит произведения, параллельно с этим ТОЧНО так же переставляя и соответствующие элементы индексного массива. В результате получаешь, что массив произведений равен <2, 4, 48, 192>, а индексный = <1, 3, 2, 4>, то есть, чтобы матрица была отсортирована, столбцы должны располагаться именно в таком порядке...

Все, что останется - только поменять нужные столбцы местами (для этого можно воспользоваться советом, приведенным здесь: FAQ: Как задать матрицу, чтобы ..., будет НАМНОГО легче реализовать обмен столбцов...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

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

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


блин как найти четные элементы я не понял ) функция какая ?smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Odd(x) = True - значит элемент НЕчетный, в противном случае - четный...
Ну, или по-старинке:
if x mod 2 = 0 then {четный} else {нечетный}

:P
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

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

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


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


Гость






Ммм.. Вот это пузырёк с флажком если кому то надо чёткий исходик.
Написал сам по теории, по мне этот проще чем указаный раньше.
Тип (Type Xmas = Array[1 .. n] Of Integer;) для этого случая.


Procedure Swap(var a,b: integer);
var tmp: integer;
begin tmp:=a; a:=b; b:=tmp end;

Procedure Bubble_flag(Var a: xmas; n: Integer);
Var i,j: integer; F: boolean;
Begin
i:=2;
F:=True;
while (i<=N) and F do
begin
F:=False;
J:=n;
while j>=i do
begin
if a[j-1]>a[j] then
begin
Swap(a[j-1],a[j]);
f:=True;
end;
dec(j);
end;
inc(i);
end;
End;

 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Perl. Just code it!
******

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

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


1) Некрофилия это плохо
2) В Паскале есть цикл for
3)

Это выглядит так:

repeat
flag := true;
for i := 1 to n - 1 do
if not (x[i] <= x[i + 1]) then begin
T := x[i]; x[i] := x[i + 1]; x[i + 1] := T; flag := false;
end;
until flag;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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