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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2020, 00:43   #1
UniHow
Новичок
Джуниор
 
Регистрация: 05.10.2020
Сообщений: 3
Печаль Не работает программа ошибка - встречено 'procedure', а ожидался оператор

Код:
program Quick_Sort;
const
  arrayLength = 1000000;
  NL = 7;
var
  inputArray : array [1..arrayLength] of integer;
  i, start, finish, N : integer;
  f : Text;
   newLeft, newRight : integer; //границы массива
  temp, pivot : integer;
  left, right: integer;
 Begin
  Assign(f,'random.txt');
 Reset(f); //Открываем файл для чтения
 Read(f,N); //Вводим количество элементов массива
 writeln (N);
 If N > arrayLength Then
 Begin
 WriteLn('N слишком велико'); //Это вывод на экран
 Halt
 End;
 
procedure QuickSort1(left, right: integer);
var
  newLeft, newRight : integer; //границы массива
  temp, pivot : integer;
begin
  start := Milliseconds;
  newLeft := left;
  newRight := right;

  {опорный элемент массива}
  pivot := inputArray[(left + right) div 2];

  repeat
    while inputArray[newLeft] < pivot do
      newLeft := newLeft + 1;

    while inputArray[newRight] > pivot do
      newRight := newRight - 1;

    if newLeft <= newRight then
      
    begin
      {обмен значений}
      temp := inputArray[newLeft];
      inputArray[newLeft] := inputArray[newRight];
      inputArray[newRight] := temp;

      newLeft := newLeft + 1;
      newRight := newRight - 1;
    end;
  until newLeft > newRight;

  {рекурсивный вызов сортировки для "меньших" элементов}
  if left < newRight then
    QuickSort1(left, newRight);

  {сортировка - для "больших" элементов}
  if newLeft < right then
    QuickSort1(newLeft, right);
end;
  
 QuickSort1(1, arrayLength);
  Assign(f,'output.txt'); //Теперь f связана с файлом output.txt
 Rewrite(f); //Файл output.txt открыт для записи
 For i:=1 To N Do
 Begin
 Write(f,inputArray[i]:10,' ');
 If i mod NL = 0
 Then WriteLn(f)
 end;
 WriteLn(f); //Переходим на новую строку
 WriteLn(f); //Бросаем пустую строку
  Close(f); //Закрываем файл
 finish := Milliseconds;
writeln('Execution time (ms): ', finish - start);
END.

Последний раз редактировалось BDA; 05.10.2020 в 01:37.
UniHow вне форума Ответить с цитированием
Старый 05.10.2020, 01:44   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Нужно вынести код процедуры из основной программы (поместить процедуру перед первым begin).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.10.2020, 20:44   #3
UniHow
Новичок
Джуниор
 
Регистрация: 05.10.2020
Сообщений: 3
По умолчанию Программа работает только не корректно выводит только нули в файле другие числа

Код:
program Quick_Sort;
const
  arrayLength = 1000000;
  NL = 7;
var
  inputArray : array [1..arrayLength] of integer;
  i, start, finish, N : integer;
  f : Text;
   newLeft, newRight : integer; //границы массива
  temp, pivot : integer;
  left, right: integer;
 procedure QuickSort1(left, right: integer);
var
  newLeft, newRight : integer; //границы массива
  temp, pivot : integer;
begin
  start := Milliseconds;
  newLeft := left;
  newRight := right;

  {опорный элемент массива}
  pivot := inputArray[(left + right) div 2];

  repeat
    while inputArray[newLeft] < pivot do
      newLeft := newLeft + 1;

    while inputArray[newRight] > pivot do
      newRight := newRight - 1;

    if newLeft <= newRight then
      
    begin
      {обмен значений}
      temp := inputArray[newLeft];
      inputArray[newLeft] := inputArray[newRight];
      inputArray[newRight] := temp;

      newLeft := newLeft + 1;
      newRight := newRight - 1;
    end;
  until newLeft > newRight;

  {рекурсивный вызов сортировки для "меньших" элементов}
  if left < newRight then
    QuickSort1(left, newRight);

  {сортировка - для "больших" элементов}
  if newLeft < right then
    QuickSort1(newLeft, right);
end;
 Begin
  Assign(f,'random.txt');
 Reset(f); //Открываем файл для чтения
 Read(f,N); //Вводим количество элементов массива
 writeln (N);
 If N > arrayLength Then
 Begin
 WriteLn('N слишком велико'); //Это вывод на экран
 Halt
 End;
 

  
 QuickSort1(1, arrayLength);
  Assign(f,'output.txt'); //Теперь f связана с файлом output.txt
 Rewrite(f); //Файл output.txt открыт для записи
 For i:=1 To N Do
 Begin
 Write(f,inputArray[i]:10,' ');
 If i mod NL = 0
 Then WriteLn(f)
 end;
 WriteLn(f); //Переходим на новую строку
 WriteLn(f); //Бросаем пустую строку
  Close(f); //Закрываем файл
 finish := Milliseconds;
writeln('Execution time (ms): ', finish - start);
END.

Последний раз редактировалось BDA; 06.10.2020 в 05:08.
UniHow вне форума Ответить с цитированием
Старый 06.10.2020, 05:11   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Так в коде нет считывания массива из файла.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 10.10.2020, 01:09   #5
UniHow
Новичок
Джуниор
 
Регистрация: 05.10.2020
Сообщений: 3
Вопрос Вроде как исправил, но не поменялось

Код:
program Quick_Sort;
const
  arrayLength = 1000000;
  NL = 7;
var
  inputArray : array [1..arrayLength] of integer;
  i, start, finish,N : integer;
  f : Text;
   
 procedure QuickSort1(left, right: integer);
var
  newLeft, newRight : integer; //границы массива
  temp, pivot : integer;
begin
  start := Milliseconds;
  newLeft := left;
  newRight := right;

  {опорный элемент массива}
  pivot := inputArray[(left + right) div 2];

  repeat
    while inputArray[newLeft] < pivot do
      newLeft := newLeft + 1;

    while inputArray[newRight] > pivot do
      newRight := newRight - 1;

    if newLeft <= newRight then
      
    begin
      {обмен значений}
      temp := inputArray[newLeft];
      inputArray[newLeft] := inputArray[newRight];
      inputArray[newRight] := temp;

      newLeft := newLeft + 1;
      newRight := newRight - 1;
    end;
  until newLeft > newRight;

  {рекурсивный вызов сортировки для "меньших" элементов}
  if left < newRight then
    QuickSort1(left, newRight);

  {сортировка - для "больших" элементов}
  if newLeft < right then
    QuickSort1(newLeft, right);
end;
 Begin
  Assign(f,'random.txt');
 Reset(f); //Открываем файл для чтения
 Read(f,N); //Вводим количество элементов массива
 writeln (N);
 If N > arrayLength Then
 Begin
 WriteLn('N слишком велико'); //Это вывод на экран
 Halt
 End;
 For i:=1 To N Do
  Read(f,inputArray[i]);
  Close(f);


  Assign(f,'output.txt'); //Теперь f связана с файлом output.txt
 Rewrite(f); //Файл output.txt открыт для записи
 For i:=1 To N Do
 begin
  QuickSort1(1, arrayLength);
 Write(f,inputArray[i]:10,' ');
 If i mod NL = 0
 Then WriteLn(f)
 end;
 WriteLn(f); //Переходим на новую строку
 WriteLn(f); //Бросаем пустую строку
  Close(f); //Закрываем файл
 finish := Milliseconds;
writeln('Execution time (ms): ', finish - start);
END.

Последний раз редактировалось BDA; 10.10.2020 в 02:59.
UniHow вне форума Ответить с цитированием
Старый 10.10.2020, 03:09   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Буквально пару строк переставил и изменил аргументы первого вызова QuickSort1.
Код:
program Quick_Sort;

const
  arrayLength = 1000000;
  NL = 7;

var
  inputArray: array [1..arrayLength] of integer;
  i, start, finish, N: integer;
  f: Text;

procedure QuickSort1(left, right: integer);
var
  newLeft, newRight: integer; //границы массива
  temp, pivot: integer;
begin
  newLeft := left;
  newRight := right;
  
  {опорный элемент массива}
  pivot := inputArray[(left + right) div 2];
  
  repeat
    while inputArray[newLeft] < pivot do
      newLeft := newLeft + 1;
    
    while inputArray[newRight] > pivot do
      newRight := newRight - 1;
    
    if newLeft <= newRight then
    begin
      {обмен значений}
      temp := inputArray[newLeft];
      inputArray[newLeft] := inputArray[newRight];
      inputArray[newRight] := temp;
      
      newLeft := newLeft + 1;
      newRight := newRight - 1;
    end;
  until newLeft > newRight;
  
  {рекурсивный вызов сортировки для "меньших" элементов}
  if left < newRight then
    QuickSort1(left, newRight);
  
  {сортировка - для "больших" элементов}
  if newLeft < right then
    QuickSort1(newLeft, right);
end;

begin
  Assign(f, 'random.txt');
  Reset(f); //Открываем файл для чтения
  Read(f, N); //Вводим количество элементов массива
  writeln(N);
  if N > arrayLength Then
  begin
    WriteLn('N слишком велико'); //Это вывод на экран
    Halt
  end;
  for i := 1 To N Do
    Read(f, inputArray[i]);
  Close(f);
  start := Milliseconds;
  QuickSort1(1, N);
  finish := Milliseconds;
  Assign(f, 'output.txt'); //Теперь f связана с файлом output.txt
  Rewrite(f); //Файл output.txt открыт для записи
  for i := 1 To N Do
  begin
    Write(f, inputArray[i]:10, ' ');
    if i mod NL = 0
      Then WriteLn(f)
  end;
  WriteLn(f); //Переходим на новую строку
  WriteLn(f); //Бросаем пустую строку
  Close(f); //Закрываем файл
  writeln('Execution time (ms): ', finish - start);
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В паскале выводит ошибку "Ожидался оператор" Vladislav125 Помощь студентам 3 27.04.2017 15:46
почему выдает ошибку паскаль? Program3.pas(30) : Встречено 'and', а ожидался оператор Julia1 Паскаль, Turbo Pascal, PascalABC.NET 13 08.02.2014 21:28
на строке else "ожидался оператор" kolobok11 Паскаль, Turbo Pascal, PascalABC.NET 2 26.10.2011 12:03
не работает - программа пишет ожидался оператор Jaide Паскаль, Turbo Pascal, PascalABC.NET 1 18.05.2011 17:18
"ожидался оператор" при вводе функции на языке PascalABC Юрий_91 Помощь студентам 2 08.01.2010 20:47