Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2014, 16:48   #1
Marksman_SwAt
Пользователь
 
Аватар для Marksman_SwAt
 
Регистрация: 01.05.2014
Сообщений: 19
По умолчанию Сортировка методом прямого включения ( исправление метода сортировки ) Turbo Pascal

Условие:
Сгенерируйте случайным образом 20 целых чисел и поместите их в типизированный файл. Содержимое исходного файла вывести на экран. Отсортируйте первую половину файла по возрастанию, а вторую по убыванию (использовать сортировку файла прямым включением). Содержимое отсортированного файла вывести на экран. Введите контрольное число и определите его наличие. В положительном случае выведите найденное число и его индекс на экран.

Вот мое решение:
Код:
Program n_6;
const n=20;
var f:file of integer;
    a,b,x,i,j,k:integer;
begin
randomize;
assign(f,'file');
rewrite(f);
for i:=1 to n do
 begin
  a:=random(50);
  write(f,a);
 end;
reset(f);
writeln('Ishodniy fail:');
while not eof(f) do
 begin
  read(f,a);
  write(a:4);
 end;
writeln;
writeln;
seek(f,0);
for i:=0 to filesize(f)-2 do
 begin
  k:=i;
  for j:=i+1 to filesize(f)-1 do
   begin
    seek(f,k);
    read(f,a);
    seek(f,j);
    read(f,b);
    if b<a then k:=j;
    seek(f,i);
    read(f,x);
    seek(f,k);
    read(f,b);
    seek(f,i);
    write(f,b);
    seek(f,k);
    write(f,x);
   end;
 end;
seek(f,0);
writeln('Otsortirovaniy fail:');
for i:=0 to filesize(f)-1 do
 begin
  seek(f,i);
  read(f,a);
  write(a:4);
 end;
close(f);
writeln;
writeln;
readln
end.

Но я использовал сортировку методом прямого выбора, а надо прямым включением. И еще нужно отсортировать первых 10-й по возростанию, а остольные по убыванию. И я еще не доделал ввод контрольного числа и определение его наличия. Помогите изменить метод сортировки.
Очень нужно.
Marksman_SwAt вне форума Ответить с цитированием
Старый 06.05.2014, 20:45   #2
Marksman_SwAt
Пользователь
 
Аватар для Marksman_SwAt
 
Регистрация: 01.05.2014
Сообщений: 19
По умолчанию

Вот, пытался переделать, вышло это:
Код:
uses crt;
const n=20;
var f:file of integer;
    a,b:integer;
    p,l,r,m:integer;
    i,j,ip:integer;
begin
randomize;
assign(f,'file');
rewrite(f);
for i:=1 to n do
 begin
  a:=random(100);
  write(f,a);
 end;
writeln('Исходный файл:');
reset(f);
for i:=0 to filesize(f)-1 do
 begin
  read(f,a);
  write(a:4);
 end;
writeln;
writeln;
seek(f,0);
{отсортируем первых 10 по возрастанию}
for i:=0 to filesize(f)-2 do
for j:=filesize(f)-11 downto i+1 do
 begin
  seek(f,j-1);
  read(f,a);
  seek(f,j);
  read(f,b);
  if a>b then
  begin
   seek(f,j-1);
   write(f,b);
   seek(f,j);
   write(f,a);
  end;
 end;
 {отсортируем последних 10 по убыванию}
 for i:=10 to filesize(f)-2 do
for j:=filesize(f)-1 downto i+1 do
 begin
  seek(f,j-1);
  read(f,a);
  seek(f,j);
  read(f,b);
  if a<b then
  begin
   seek(f,j-1);
   write(f,b);
   seek(f,j);
   write(f,a);
  end;
 end;
seek(f,0);
writeln('Отсортированный файл:');
for i:=0 to filesize(f)-1 do
 begin
  read(f,a);
  write(a:4);
 end;
writeln;
write('Введите число для поиска =');
read(p);
l:=0;
r:=filesize(f)-1;
ip:=-1;
seek(f,0);
while(l<=r)and(ip=-1) do
 begin
  m:=(l+r)div 2;
  seek(f,m);
  read(f,a);
  if p<a then r:=m-1
   else if p>a then l:=m+1
  else ip:=m;
 end;
close(f);
if ip=-1 then write('Числа ',p,' в файле нет')
else write('Индекс числа ',p,' = ',ip+1);
end.
Получилось отсортировать первых 10 по возростанию, а остольные по убыванию. Но метод сортировки я так и не исправил, в этот раз сделал "пузырьком", а надо прямым включением.
И еще возникла проблема по поиску индекса элемента, ищет в первых 10. Я исользовал бинарный поиск. Помогите пожалуйста исправить эти ошибки.
Marksman_SwAt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива (Exel, метод прямого включения) esage Microsoft Office Excel 5 14.01.2014 18:48
Упорядочить строки двумерного массива элементов типа Char по возрастанию их ординальных номеров методом прямого включения. Alesia_Lesia Помощь студентам 4 27.11.2013 16:51
C# сортировка методом прямого включения Numphaulia Помощь студентам 1 29.11.2012 21:49
Сортировка методом прямого включения(паскаль) Cas01 Помощь студентам 1 17.03.2011 08:37
[pascal]Сортировка массива методом прямого выбора, работает неадекватно. fatoldsun Помощь студентам 7 22.04.2009 19:42