Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 1
Регистрация: 21.01.2010
Сообщений: 11
1

Внешние сортировки!!!

22.01.2010, 01:15. Показов 1985. Ответов 16
Метки нет (Все метки)

Помогите, пожалуйста!!! Очень срочно и очень нужно написать программу для внешней сортировки файла с числами методом перемешивания. Вся моя проблема в том, что я не пойму как работать именно с конкретным элементом в файле, как получить к нему доступ. Если во внешней мы можем сделать к примеру a[i]<a[j], то как это осуществить при внешней сортировке
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2010, 01:15
Ответы с готовыми решениями:

Разработайте рекурсивную процедуру сортировки последовательности методом быстрой сортировки Хоара
Помогите!!!! Дана последовательность чисел a1, a2, ... , an. Разработайте рекурсивную процедуру...

Написать комментарии, поясняющие принцип сортировки. (Метод сортировки - вставками)
Написать комментарии, поясняющие принцип сортировки. (Метод сортировки - вставками) Если вдруг...

Расставить элементы массива в порядке возрастания методом сортировки выбором и сортировки простыми вставками
Здрасьте еще раз!С прошедшим вас праздником! я глупая и бестолковая опять пришла к вам на...

Внешние файлы
Создать квадратный массив Ann в файл.txt. Потом из .txt файла считать элементы второго столбца...

16
138 / 82 / 23
Регистрация: 21.10.2009
Сообщений: 428
22.01.2010, 01:18 2
Цитата Сообщение от alzira Посмотреть сообщение
Помогите, пожалуйста!!! Очень срочно и очень нужно написать программу для внешней сортировки файла с числами методом перемешивания. Вся моя проблема в том, что я не пойму как работать именно с конкретным элементом в файле, как получить к нему доступ. Если во внешней мы можем сделать к примеру a[i]<a[j], то как это осуществить при внешней сортировке
так как ты показал сортируется массив, а для того что бы выдернуть определенный элемент из файла есть функция seek, указатель так называемый на позицию в файле и его двигаешь туда сюда и сортируешь
0
1 / 1 / 1
Регистрация: 21.01.2010
Сообщений: 11
22.01.2010, 01:41  [ТС] 3
Т.е если я напишу
Pascal
1
2
  Seek(fp, 1); 
  Read(fp,x);
то x будет равно второму элементу в файле fp?
0
138 / 82 / 23
Регистрация: 21.10.2009
Сообщений: 428
22.01.2010, 02:11 4
совершенно верно я смотрю ты быстро просек что счет идет с 0 а не с 1
1
1 / 1 / 1
Регистрация: 21.01.2010
Сообщений: 11
22.01.2010, 02:16  [ТС] 5
Pascal
1
2
3
4
Seek(fp, 1); 
Read(fp,x);
Seek(fp, 2); 
Read(fp,y);
и теперь я могу сравнить x и y?А если мне надо их поменять местами? тогда
Pascal
1
2
3
4
Seek(fp, 1); 
Write(fp,y);
Seek(fp, 2); 
Write(fp,x);
Так?
0
138 / 82 / 23
Регистрация: 21.10.2009
Сообщений: 428
22.01.2010, 03:01 6
Да
0
1 / 1 / 1
Регистрация: 21.01.2010
Сообщений: 11
22.01.2010, 03:02  [ТС] 7
спасибо. Очень помог
0
138 / 82 / 23
Регистрация: 21.10.2009
Сообщений: 428
22.01.2010, 03:15 8
Цитата Сообщение от alzira Посмотреть сообщение
спасибо. Очень помог
Не за что обращайся
0
1 / 1 / 1
Регистрация: 21.01.2010
Сообщений: 11
22.01.2010, 03:29  [ТС] 9
может подскажет кто. Пытаюсь внутреннюю сортировку выбором переделать во внешнюю. Где-то ошиблась, а где не пойму
внутренняя:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
program Celection_Sort;
uses crt;
const N=13;
var
f:text;
A:array [1..N] of integer;
i,j,t,min:integer;
BEGIN
     clrscr;
      ASSIGN(f,'d:\1.txt');
   reset(f);
   for i:=1 to n do
   begin
       Read(f,a[i]);
   end;
   Close(f);
   writeln('массив A(',N,'):');
   for i:=1 to N do write (A[i]:5);
     for i:=1 to N-1 do
     begin
          min:=i;
          for j:=i+1 to N do
              if A[min]>A[j] then
                   min:=j;
          t:=a[i];
          a[i]:=a[min];
          a[min]:=t;
 
     end;
     writeln;
     writeln(' отсортированный массив A(',N,'):');
      for i:=1 to N do write(a[i]:5);
     readkey;
END.
Внешняя:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uses crt;
var
f:file of integer;
i,j,s,min:integer;
a:array [1..1000]of integer;
BEGIN
     clrscr;
     assign (f,'d:\1.txt');
     reset (f);
     {for i:=0 to 10 do}
     WHILE not eof(f) do
     begin
          seek(f,i); read(f,min);
          WHILE not eof(f) do
          seek(f,j); read(f,s);
          if min>s then
          seek (f,i); write(f,s);
          seek (f,j); write(f,min);
     end;
     close(f);
     readkey;
END.
0
138 / 82 / 23
Регистрация: 21.10.2009
Сообщений: 428
22.01.2010, 11:12 10
у тебя i и j никак не изменяются, они все время имеют одно и тоже значение, напиши везде в конце каждого вайла i = i+1 и j=j+1; только в самом начале программы обнули их
1
1 / 1 / 1
Регистрация: 21.01.2010
Сообщений: 11
23.01.2010, 23:52  [ТС] 11
внесла некоторые изменения. Теперь
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uses crt;
var
f:file of integer;
i,j,a,b,min:integer;
BEGIN
     clrscr;
     assign (f,'k:\1.txt');
     reset (f);
     for i:=0 to 9 do
     begin
          min:=i;
          for j:=i+1 to 10 do
          seek(f,min); read(f,a);
          seek(f,j); read(f,b);
          if a>b then
          min:=j;
          seek (f,i); write(f,b);
          seek (f,j); write(f,a);
     end;
     close(f);
     readkey;
END.
Но выполняется опять не то, что хотелось бы.
содержание исходного файла : 78 7 2 10 98 5 6 25 61 54 5, а выдает 698 7 5 2615 0 1 2 5784 5. Подскажите, в чем загвоздка
0
3065 / 725 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
24.01.2010, 00:38 12
alzira, эхх, Вам бы понять где следует ставить связку begin end; а уже только потом писать какие либо сортировки...
0
1 / 1 / 1
Регистрация: 21.01.2010
Сообщений: 11
24.01.2010, 00:45  [ТС] 13
А что не так с моим begin end? Судя по алгоритму внутренней сортировки выбором, он на месте и больше нигде стоять не должен
0
3065 / 725 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
24.01.2010, 00:53 14
Вот расставил отступы, как они должны были быть (так виднее что выполняется в каком цикле):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
uses crt;
var
f:file of integer;
i,j,a,b,min:integer;
begin
  clrscr;
  assign (f,'k:\1.txt');
  reset (f);
  for i:=0 to 9 do
  begin
    min:=i;
    for j:=i+1 to 10 do
      seek(f,min);  {от i+1 до 10 раз считываем одни и теже данные}
    read(f,a);   {все остальные моменты объяснять не буду}
    seek(f,j); 
    read(f,b);
    if a>b then
      min:=j;
    seek (f,i); 
    write(f,b);
    seek (f,j); 
    write(f,a);
  end;
  close(f);
  readkey
END.
Надеюсь Вам всё стало понятно...
0
1 / 1 / 1
Регистрация: 21.01.2010
Сообщений: 11
24.01.2010, 01:18  [ТС] 15
lexus_ilia, если я правильно поняла вас, то мне нужно взять в рамки begin...end seek(f,min) и min:=j?
0
3065 / 725 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
24.01.2010, 01:23 16
alzira, нет, не правильно, советую подучить теорию внешних сортировок, а потом хорошенько построить в голове алгоритм, а уже только потом писать саму сортировку.
0
1 / 1 / 1
Регистрация: 21.01.2010
Сообщений: 11
24.01.2010, 02:57  [ТС] 17
lexus_ilia, может хотя бы на словах что скажете, что не так. Какое именно место нужно изменить. Ей богу, бьюсь-бьюсь никак не могу сообразить, что и как
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2010, 02:57

Внешние файлы
Как и что нужно прописать в программе для того, чтоб она считывала начальные данные для матрицы ( а...

Внешние файлы
Дана матрица целого типа nxn. Записать ее в файл, потом прочитать из него главную и побочную...

Внешние подпрограммы
Напишите пожалуйста программу Дан массив А - массив обыкновенных дробей.Вычислить произведение...

Задача на внешние файлы
Считать матрицу А из текстового файла,в котором записана матрица B.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru