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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2009, 21:46   #1
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию Сортировка массива методом вставок Pascal

Задание:
Дан файл содержащий 100 целых чисел от -1000 до 1000. Считать файл в массив. Отсортировать методом вставки. Вывести в файл.


Код:
program metod_01;
uses crt;
const n=100;
type
 matr = array[1..n] of integer;
 
procedure formir(var a:matr;k:integer);
var
 i:integer;
begin
 randomize; 
 for i:=1 to k do 
   a[i]:=Random(2001)-1000;
end;

procedure vivod(a,b:matr;k:integer);
var
 i,j:integer;
 InFile:text;
begin
assign (InFile, 'In.txt');
rewrite (InFile);
 for i:=1 to k do
  b[i]:=a[i];
 for i:=1 to k do
  begin
    write(InFile,b[i]:5);
    writeln;
  end;
 close(InFile);
end;

procedure InsertSort(a:matr);
var
  i, j, buf:integer;
begin
  for i:=2 to N do
  begin
    buf:=a[i];
    j:=i-1;
    while (j>=1) and (a[j]>buf) do
    begin
      a[j+1]:=a[j];
      j:=j-1;
    end;
    a[j+1]:=buf;
  end;
end;

procedure SortVivod(a:matr;k:integer);
var
   i,j:integer;
   OutFile:text;
begin
 assign (OutFile, 'Out.txt');
 rewrite (OutFile);
 for i:=1 to k do
  begin
    write(OutFile,a[i]:5);
    writeln;
  end;
 close(OutFile);
end;
var
 a,b:matr;
 
begin
 clrscr;
 formir(a,n);
 vivod(a,b,n);
 InsertSort(a);
 SortVivod(a,n);
end.
Правильно ли я сортирую методом вставки?
Проблема в то что в обоих файлах "Out" и "In" получаются одинаковые массивы.
Помогите доработать,заранее спасибо.
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 21.04.2009, 22:12   #2
AlexanderKs
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 60
По умолчанию

Попробуй изменить условие в цикле:
Код:
procedure TForm1.InsertSort(a:matr);
var
  i, j, buf:integer;
begin
  for i:=2 to N do
  begin
    buf:=a[i];
    j:=i-1;
    while (j>0) and (buf<a[j]) do //другое условие
    begin
      a[j+1]:=a[j];
      j:=j-1;
    end;
    a[j+1]:=buf;
  end;
end;
AlexanderKs вне форума Ответить с цитированием
Старый 21.04.2009, 22:22   #3
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Не помогает
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 21.04.2009, 23:10   #4
AlexanderKs
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 60
По умолчанию

Похоже вы где то напутали с передачей массивов. Введите глобальные переменные (массивы), и программа будет работать
AlexanderKs вне форума Ответить с цитированием
Старый 21.04.2009, 23:13   #5
AlexanderKs
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 60
По умолчанию

Вот код работающей программы (с глобальными переменными):

Код:
program metod_01;
uses crt;
const n=100;
type matr=array[1..n] of integer;
var a,b:matr;

procedure formir(k:integer);
var
 i:integer;
begin
 randomize; 
 for i:=1 to k do 
   a[i]:=Random(2001)-1000;
end;

procedure vivod(k:integer);
var
 i,j:integer;
 InFile:text;
begin
assign (InFile, 'In.txt');
rewrite (InFile);
 for i:=1 to k do
  b[i]:=a[i];
 for i:=1 to k do
  begin
    write(InFile,b[i]:5);
    writeln;
  end;
 close(InFile);
end;

procedure InsertSort;
var
  i, j, buf:integer;
begin
  for i:=2 to N do
  begin
    buf:=a[i];
    j:=i-1;
    while (j>0) and (buf<a[j]) do
    begin
      a[j+1]:=a[j];
      j:=j-1;
    end;
      a[j+1]:=buf;
  end;
end;

procedure SortVivod(k:integer);
var
   i,j:integer;
   OutFile:text;
begin
 assign (OutFile, 'Out.txt');
 rewrite (OutFile);
 for i:=1 to k do
  begin
    write(OutFile,a[i]:5);
    writeln;
  end;
 close(OutFile);
end;
 
begin
 clrscr;
 formir(n);
 vivod(n);
 InsertSort;
 SortVivod(n);
end.
AlexanderKs вне форума Ответить с цитированием
Старый 22.04.2009, 01:13   #6
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Спасибо всё работает! Я только правда не понял, почему надо именно с глобальными перемыенными, почему когда я вводил их просто они программа не работала?
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка методом выбора на С++, возможно ошибка Graf Xandr Помощь студентам 4 09.05.2009 15:06
Сортировка массива методом прямого выбора(Дельфи) Onza Помощь студентам 20 25.01.2009 12:05
Pascal - сортировка массива(файла?) kossner Помощь студентам 14 05.12.2008 14:57
Помогите отсортировать массив методом бинарных вставок zhorzh2407 Помощь студентам 1 19.11.2008 17:19
сортировка методом двухпроходного пузырька. Net* Общие вопросы C/C++ 3 26.05.2008 07:17