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

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

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

> сортировка матрицы
RIDDICK
сообщение 11.04.2005 18:32
Сообщение #1


Пионер
**

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

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


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

unsure.gif

помогите пожалуйста реализовать в Pascal ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 13)
klem4
сообщение 11.04.2005 18:36
Сообщение #2


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

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

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


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

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


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

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


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


Гость






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


Пионер
**

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

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


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


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

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

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


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


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


Пионер
**

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

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


"столбцы по возрастанию произведения четных элементов столбцов " - не понял
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 11.04.2005 19:02
Сообщение #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 
 К началу страницы 
+ Ответить 
RIDDICK
сообщение 16.04.2005 14:24
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.04.2005 14:41
Сообщение #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: Как задать матрицу, чтобы ..., будет НАМНОГО легче реализовать обмен столбцов...)
 К началу страницы 
+ Ответить 
RIDDICK
сообщение 16.04.2005 14:44
Сообщение #10


Пионер
**

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

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


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


Гость






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

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


Пионер
**

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

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


да, спасиб, я уже туплю совсем ))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-Smoke-
сообщение 28.12.2006 15:09
Сообщение #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;

 К началу страницы 
+ Ответить 
klem4
сообщение 28.12.2006 21:16
Сообщение #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

 



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