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

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

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

 
 Ответить  Открыть новую тему 
> Сортировка по неубыванию
Tribunal
сообщение 6.06.2006 4:55
Сообщение #1


Бывалый
***

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

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


нужно отсортировать нечетные элементы массива по неубыванию методом выбора...
вот получившаяся программа...но что-то не так...только что?посмотрите,пожалуйста...

var
   mas:array [1..20] of integer;
   i,n,k:byte;

function GetMin (i1,i2:integer):integer;
var
   j,min,jmin:integer;
begin
   min:=mas[i1];
   jmin:=i1;
   for j:=i1+1 to i2 do
    if mas[j]<min then begin
                       min:=mas[j];
                       jmin:=j;
                       end;
   GetMin:=jmin;
end;

procedure change (i1,i2:integer);
var
   i,t:integer;
begin
   for i:=1 to n do
    begin
      t:=mas[i1];
      mas[i1]:=mas[i2];
      mas[i2]:=t;
    end;
end;

begin
  writeln('::: Sortirovka  po neubivaniyu metodom vibora :::');
  write('Vvedite kol-vo elementov v massive ');read(n);
  writeln('Ishodniy massiv:');
  randomize;
  for i:=1 to n do
   begin
    mas[i]:=random(10)-10;
    write(mas[i],' ');
   end;
  writeln;

  for i:=1 to n-1 do
   begin
     k:=GetMin(i,n);
     if (k<>i) and ((mas[k] mod 2)<>0) then
      change(k,i);
  end;

  writeln('Otsortirovanniy massiv:');
  for i:=1 to n do
   write(mas[i],' ');
 end.


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


Бывалый
***

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

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


вооот...алгоритм сортировки по-другому соорудила...
только всё равно не работает=(((

  {сортируем нечетные элементы массива}
  i:=1;
  repeat
    m:=mas[i];
    k:=i; j:=i;
    repeat
      if m>mas[j] then begin
                       m:=mas[j];
                       k:=j;
                       end;
      inc(j);
    until j<=n;
    if ((mas[k] mod 2)<>0) then begin
                                mas[k]:=mas[i];
                                mas[i]:=m;
                                inc(i);
                                end;
  until i<=n;


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


Бывалый
***

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

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


=( ну в чем же ошибка?
помогите...никак не разберусь


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


Бывалый
***

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

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


нечетность теперь проверяю в другом месте....
алгоритм не работает....

i:=1;
  repeat
    min:=m[i];
    k:=i; j:=i;
    repeat
      if min>m[j] then begin
                       min:=m[j];
                       k:=j;
                       end;
      inc(j);
    until j<=t;
    m[k]:=m[i];
    m[i]:=min;
    inc(i);
    until i<=t;


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


Знаток
****

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

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


Ты сначала покажи сортировку массива выборомдля всех чисел, а для нечётных добавить будет легко. По-моему, у тебя вообще не сортировка...


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tribunal
сообщение 6.06.2006 12:18
Сообщение #6


Бывалый
***

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

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


Цитата(Romtek @ 6.06.2006 19:16) *

Ты сначала покажи сортировку массива выборомдля всех чисел, а для нечётных добавить будет легко. По-моему, у тебя вообще не сортировка...

ну вот...смотрите выше....


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


Профи
****

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

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


Цитата(Tribunal @ 6.06.2006 12:15) *


until j<=t;
until i<=t;

В until ставится условие выхода из цикла, в связи с чем цикы не работают.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.06.2006 12:23
Сообщение #8


Гость






Tribunal,
Нет... Так не пойдет. Ты приведи ПОЛНУЮ, компилирующуюся программу, а не эти обрывки... Легче написать заново, чем заставить работать то, что ты привела...
 К началу страницы 
+ Ответить 
Tribunal
сообщение 6.06.2006 12:27
Сообщение #9


Бывалый
***

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

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


Цитата(Malice @ 6.06.2006 19:20)
В until ставится условие выхода из цикла, в связи с чем цикы не работают.

какая глупая ошибка...
большое спасибо за помощь)

Цитата(volvo @ 6.06.2006 19:23)
Tribunal,
Нет... Так не пойдет. Ты приведи ПОЛНУЮ, компилирующуюся программу, а не эти обрывки... Легче написать заново, чем заставить работать то, что ты привела...

вот)...
var
   mas,m:array [1..20] of integer;
   i,n,k,j,t:byte;
   min:integer;
begin
  writeln('::: Sortirovka  massiva po neubivaniyu :::');
  write('Vvedite kol-vo elementov v massive do 20 :');read(n);

  writeln('Ishodniy massiv:');
  randomize;
  for i:=1 to n do
   begin
    mas[i]:=random(10)-10;
    write(mas[i],' ');
   end;
  writeln;

  writeln('Massiv nechetnix chisel:');
  j:=0;
  for i:=1 to n do
   if (mas[i] mod 2)<>0
    then begin
         inc(j);
         m[j]:=mas[i];
         write(m[j],' ');
         end;
  t:=j;
  writeln;

  i:=1;
  repeat
    min:=m[i];
    k:=i; j:=i;
    repeat
      if min>m[j] then begin
                       min:=m[j];
                       k:=j;
                       end;
      inc(j);
    until j>t;
    m[k]:=m[i];
    m[i]:=min;
    inc(i);
    until i>t;


  writeln('Otsortirovanniy massiv:');
  for i:=1 to t do write(m[i],' ');
  writeln; readln;


кстати....
у меня вопрос:как заставить затормозить выход из программы,
если readln не срабатывает?

кстати....
у меня вопрос:как затормозить выход из программы,
если readln не срабатывает?


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


Знаток
****

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

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


Теперь сортирует.
Выставь ещё readln; smile.gif

Только не пойму куда делись чётные элементы. Их в расчёт не надо брать?


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.06.2006 12:41
Сообщение #11


Гость






Цитата
если readln не срабатывает?
Задаться вопросом "А почему он не срабатывает?" Возможно, потому, что лучше делать:
  write('Vvedite kol-vo elementov v massive do 20 :');readLN(n);

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


Бывалый
***

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

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


Цитата(Romtek @ 6.06.2006 19:38) *

Теперь сортирует.
Выставь ещё readln; smile.gif

Только не пойму куда делись чётные элементы. Их в расчёт не надо брать?

=)

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

Сообщение отредактировано: Tribunal - 6.06.2006 12:52


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


Знаток
****

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

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


При сортировке всё равно надо их учитывать, а сортировать только *нечётные*. То есть при сравнении нужно проверять на нечётность.


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.06.2006 16:14
Сообщение #14


Гость






Цитата(Tribunal @ 6.06.2006 12:48)
в задании сказано:отсортировать по неубыванию нечетные элементы массива

yes2.gif А четные должны остаться на местах... Вот так, например (я оставил твой вывод ТОЛЬКО нечетных элементов, чтоб было легче контролировать результаты, хотя в принципе массив M здесь вообще не нужен...)
var
   mas,m:array [1..20] of integer;
   i,n,k,j,t:byte;
   min:integer;
begin
  writeln('::: Sortirovka  massiva po neubivaniyu :::');
  write('Vvedite kol-vo elementov v massive do 20 :');read(n);

  writeln('Ishodniy massiv:');
  randomize;
  for i:=1 to n do
   begin
    mas[i]:=random(10)-10;
    write(mas[i],' ');
   end;
  writeln;

  writeln('Massiv nechetnix chisel:');
  j:=0;
  for i:=1 to n do
   if (mas[i] mod 2)<>0
    then begin
         inc(j);
         m[j]:=mas[i];
         write(m[j],' ');
         end;
  t:=j;
  writeln;

  i:=1;
  repeat
    if odd(abs(mas[i])) then begin
      min:=mas[i];
      k:=i; j:=i;
      repeat
        if odd(abs(mas[j])) and (min>mas[j]) then begin
          min:=mas[j]; k:=j;
        end;
        inc(j);
      until j>n;
      mas[k]:=mas[i];
      mas[i]:=min;
    end;
    inc(i);
  until i>n;


  writeln('Otsortirovanniy massiv:');
  for i:=1 to n do write(mas[i],' ');
  writeln; readln;
end.
 К началу страницы 
+ Ответить 
Tribunal
сообщение 7.06.2006 15:47
Сообщение #15


Бывалый
***

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

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


логично)...
спасибо... smile.gif


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 

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