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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2008, 12:52   #1
MyVLink
Пользователь Подтвердите свой е-майл
 
Регистрация: 12.05.2008
Сообщений: 13
По умолчанию !Помогите с Курсовым!

Помогите пожалуйста! Не получается задача на паскале! Нужно отсортировать массив методом слияния, но он не очень правильно сортируется и в файлы ерунда записывается, помогите пожалуйста, очень прошу, вот что получилось http://forum.s-c.ru/download/326069_...pas_s-c.ru.mid
MyVLink вне форума Ответить с цитированием
Старый 03.06.2008, 13:18   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Сортировка одного массива или простое слияние двух уже отсортированых массивов ?

Если как у Вас в вопросе "отсортировать массив методом слияния", то то, что Вы написали не имеет с этим ничего общего.
Перечитайте еще раз теорию.

Например:
Бакнелл Джулиан М. «Фундаментальные алгоритмы и структуры данных в Delphi»

// В следующий раз код программы включайте в сообщение
// не такой он у Вас огромный, чтобы размещать ссылку на него
alexBlack вне форума Ответить с цитированием
Старый 03.06.2008, 14:37   #3
MyVLink
Пользователь Подтвердите свой е-майл
 
Регистрация: 12.05.2008
Сообщений: 13
По умолчанию

Что же мне делать, завтра это нужно уже будет сдавать:'( Да, нужно отсортировать последовательность методом деления на две части, их сортировки, а потом получить массив методом слияния эти двух частей Помогите пожалуйста
MyVLink вне форума Ответить с цитированием
Старый 03.06.2008, 15:43   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от MyVLink Посмотреть сообщение
Что же мне делать
1. Пока уберите из Вашего кода все, что касается файлов.

2. У Вас есть три массива, заполнение одного из них (G) и деление на две части. Сделайте нормальную сортировку обеих частей (A, B) - у Вас они не сортируются. Если уж используете метод "пузырька", то делайте это правильно.

После того, как сделаете, выведите массивы на экран, убедитесь, что они отсортированы.

Только после этого можно делать слияние и запись полученного массива в файл.
alexBlack вне форума Ответить с цитированием
Старый 03.06.2008, 19:00   #5
MyVLink
Пользователь Подтвердите свой е-майл
 
Регистрация: 12.05.2008
Сообщений: 13
По умолчанию

А как правильно реализовать разделение и сортировку? Ведрус, не дофигали?=))))
MyVLink вне форума Ответить с цитированием
Старый 03.06.2008, 19:22   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от MyVLink Посмотреть сообщение
А как правильно реализовать разделение и сортировку?
С разделением у Вас все в порядке (как я уже говорил). Четные элементы в один, нечетные в другой массив - нормальное деление.

Сортировку доделайте. Вы же начали писать метод "пузырька". Так доведите его до ума. Примеров на форуме очень много.
alexBlack вне форума Ответить с цитированием
Старый 03.06.2008, 22:03   #7
MyVLink
Пользователь Подтвердите свой е-майл
 
Регистрация: 12.05.2008
Сообщений: 13
По умолчанию

я не знаю как
MyVLink вне форума Ответить с цитированием
Старый 03.06.2008, 22:22   #8
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Что не знаете, метод "пузырька" ? Неужели так трудно найти на форуме ?
Вот для массива A с Вашими переменными и с выводом массива до и после.
Код:
   write('A:'); for i:=1 to k_a do write(A[i]:5); writeln;

   repeat
      change := false;
      for i:=1 to k_a-1 do begin
        if a[i] > a[i+1] then begin
           C := a[i+1]; a[i+1] := a[i]; a[i]:=c;
           change := true;
        end;
      end;
   until not change;

   write('A:'); for i:=1 to k_a do write(A[i]:5); writeln;
Сортировка массива B по аналогии.
И само слияние:

Код:
   k1 := 1; k2 := 1;
   for i:=1 to m do begin
      if k1 > k_a then begin
         G[i] := B[k2]; inc(k2);
      end else
      if k2 > k_b then begin
         G[i] := A[k1]; inc(k1);
      end else
      if A[k1] < B[k2] then begin
         G[i] := A[k1]; inc(k1);
      end else begin
         G[i] := B[k2]; inc(k2);
      end;
   end;
   write('G:'); for i:=1 to m do write(G[i]:5); writeln;
   Readln;

Последний раз редактировалось alexBlack; 03.06.2008 в 22:34.
alexBlack вне форума Ответить с цитированием
Старый 03.06.2008, 23:43   #9
MyVLink
Пользователь Подтвердите свой е-майл
 
Регистрация: 12.05.2008
Сообщений: 13
По умолчанию

Что означает эта Change? Паскаль говорит что не известная переменная.
MyVLink вне форума Ответить с цитированием
Старый 03.06.2008, 23:47   #10
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Судя по всему это переменая типа Boolean и хранит статус "изменён/неизменён"
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плиз, помогите с курсовым в Паскале!!!!СРОЧНО!!!! ~Brilliant~ Помощь студентам 2 21.02.2009 21:15
Помогите с курсовым на С++ Solovei_MC Помощь студентам 2 14.06.2008 15:10