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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2015, 22:16   #1
agrestid
Пользователь
 
Регистрация: 11.11.2015
Сообщений: 20
По умолчанию Проверка кода Делфи. Динамический кольцевой список

Помогите пожалуйста - проверьте код следующей программы. Выдает ошибку 105. Программа должна обеспечивать ввод строкового массива либо путем чтения из файла либо ручным вводом. сортировать этотт массив по алфавиту двумя сортировками и записывать в новый файл
Вложения
Тип файла: txt 1.txt (3.3 Кб, 122 просмотров)
agrestid вне форума Ответить с цитированием
Старый 11.11.2015, 22:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
while (ch <> V) and (ch <> Q) do
Что такое "V"?
Надеюсь "V" - не значит Вендета?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2015, 22:30   #3
agrestid
Пользователь
 
Регистрация: 11.11.2015
Сообщений: 20
По умолчанию

Это символ,который предлагается ввести,чтобы введенный массив отсортировался сортировкой простого выбора
agrestid вне форума Ответить с цитированием
Старый 11.11.2015, 23:02   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

а где кавычки, если это символ?
p51x вне форума Ответить с цитированием
Старый 11.11.2015, 23:03   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
agrestid
Пора тебе озвучить задание препода
Твой код увы никуда не годен.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2015, 23:06   #6
agrestid
Пользователь
 
Регистрация: 11.11.2015
Сообщений: 20
По умолчанию

Так задание я написал в первом сообщении.
Я не мог его нормально отладить из-за этой 105-ой ошибки. Я не владею всеми тонкостями работы с файлами. Буду рад объяснениям)
agrestid вне форума Ответить с цитированием
Старый 11.11.2015, 23:18   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а... Ну если будет завтра время, попробую твой код перестроить по правильному, если кто-то раньше этого не сделает )
Сегодня уже зазь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2015, 23:20   #8
agrestid
Пользователь
 
Регистрация: 11.11.2015
Сообщений: 20
По умолчанию

Вот в том-то и дело,что сдача завтра:D
Что в нем конструктивно неправильного?(исключая мелкие синтаксические ошибки)
agrestid вне форума Ответить с цитированием
Старый 12.11.2015, 06:07   #9
temaps
Форумчанин
 
Регистрация: 15.05.2011
Сообщений: 160
По умолчанию

Глупые ошибки убрал. В логике кода не разбирался. Если будут ошибки в логике пиши какие
Код:
uses
  SysUtils;

type
  stroki = array of string;

var
  a, o: Integer;
  F: TextFile;
  g: string;
  ch:char;
  arr: stroki;

  //////////////////////////////////

procedure Vvod;
var
  i: Integer;
  S: string;

begin

  Writeln('vvedite stroki');

  i := 0;
  repeat
    Readln(S);
    if S <> '' then
    begin
      SetLength(arr, i + 1);
      arr[i] := S;
      i := i + 1;
    end;
  until
    S = '';

end;
///////////////////////////////////////////////////




procedure WriteToFile;
var
  Len: LongInt;
  h, i: Integer;
begin
Len := Length(arr[h]);
AssignFile(f, 'out.txt');
rewrite(f);
for i:=0 to Len-1 do begin
writeln(f,arr[i]);
 end;
 CloseFile(f);


end;

///////////////////////////////////////////////////

procedure chtenie;
var

  //ar: array  of string;
  i, j, w: integer;
begin
  AssignFile(f, '1.txt'); // назначаем имя f файлу по адресу
  Reset(f); //открываем файл для чтения
  i := -1;
  while not Eof(f) do
  begin //пока не окончился файл
    Inc(i); //увеличиваем i на один
    SetLength(arr, i + 1);
    ReadLn(f);
  end;
  CloseFile(f);
end;
////////////////////////////////////

procedure qSort;
// Если раскомментировать строки кода, начинающиеся с "//",
// то получится реализация с одной рекурсивной ветвью, в которой
// меньшая часть разделённого массива сортируется рекурсивным вызовом,
// а бо'льшая - в цикле, что гарантирует глубину рекурсии не более lg(N)
// Вложенная функция сортировки для рекурсивного вызова
// Нужна, чтобы не передавать в вызов основной функции границы массива
  procedure sort(low, high: integer);
  var
    i, j: integer;

    m, B: string;
  begin
    // repeat
     i:=low;
     j:=high;
    m := arr[(i + j) div 2]; // Взятие среднего опорного элемента
    repeat
      while arr[i] < m do
        Inc(i); // изменить порядок сортировки можно
      while arr[j] > m do
        Dec(j); // поменяв >< в этих двух строках
      if i <= j then
      begin
        B := arr[i];
        arr[i] := arr[j];
        arr[j] := B;
        Inc(i);
        Dec(j);
      end;
    until i > j;
    // if (j - low) < (high - i) then begin
    if low < j then
      sort(low, j);
    // low := i;
    //   end
    // else begin
    if i < high then
      sort(i, high);
    // high := j;
    // end;
    //until low = high;
  end;
begin
  sort(0, High(arr));
end;
//////////////////////////////////////////

procedure Vsort;
var
  i, j, min: integer;
  t: string;

begin
  for i := 0 to high(arr) - 2 do
  begin
    min := i;
    for j := i + 1 to high(arr) - 1 do
      if arr[min] > arr[j] then
        min := j;
    if min <> i then
    begin
      t := arr[i];
      arr[i] := arr[min];
      arr[min] := t;
    end;
  end;
end;

begin

  Writeln('viberite');
  Writeln('0-ruchoi vvod');
  Writeln('1-chtenie iz gotovogo faila');
  Readln(o);
  while (o <> 1) and (o <> 0) do
  begin
    Writeln('Comand not found');
  end;
  if o = 0 then
    Vvod;
  if o = 1 then
    chtenie;
      writeln('viberite metod sortirovki');
      writeln('V-sortirovka viborom');
      writeln('Q-bistraya sortirovka');
      readln(ch);
      while (ch <> 'V') and (ch <> 'Q') do
  begin
    Writeln('Comand not found');
  end;
  if ch = 'V' then
    Vsort;
  if ch = 'Q' then
    qSort;
  WriteToFile;



end.
temaps вне форума Ответить с цитированием
Старый 12.11.2015, 23:02   #10
agrestid
Пользователь
 
Регистрация: 11.11.2015
Сообщений: 20
По умолчанию

Сдача состоялась
Но дали дом задание-померить время выполнения каждой процедуры сортировки.
agrestid вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кольцевой список Good_Luck Помощь студентам 2 29.10.2015 19:08
[РЕШЕНО] Динамический список на Делфи/Паскаль. Требуется консультации Вадим Мошев Помощь студентам 2 18.04.2011 19:37
Кольцевой список counter Общие вопросы C/C++ 4 20.10.2008 08:09