Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Obrazets.doc
Скачиваний:
21
Добавлен:
10.06.2015
Размер:
3.99 Mб
Скачать

Листинг 14. Проверка на соответстиве команд

Параметр – одна строка.

Ключи – список строк, начинающихся с / и разделенных пробелами, задают режим выполнения команды. В данной курсовой работе ключи используются в командах dir, sort, attrib, rd, del|erase.

Символ > обозначает перенаправление вывода в файл в команде dir

Алгоритм разбиения командной строки на лексемы (поля).

Содержимое введенной с клавиатуры (командного файла) командной строки читать по одному символу. Первые один или несколько символов – пробелы, их следует пропустить. Первый отличный от пробела символ задает начало названия команды, символы названия команды нужно прочитать до появления пробела и объединить в строку с помощью конкатенации (соединения) символов.

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

Если команда введена правильно, проверяется, должна ли она иметь параметр. Если параметр нужен, выделяются параметры и в зависимости от параметров, и ключей выполняется различные действия.

Если параметр не нужен, то выполняется действия предусмотренные алгоритмом и задачей.

Если символ / найден, прочитать название ключа (a или o, или r для sort) и его значение – n, d, r, h, e, -d, s – и использовать название и значение как параметры при выполнении команд.

Eсли ключ или его значение не соответствуют возможным значениям, вывести сообщение "Не заданы ключи".

После проверки правильности названия введенной команды, ее параметра и ключей команда должна быть выполнена. Для этого рекомендуется использовать функции или процедуры с параметром или без параметра.

3.15. Процедуры упорядочивания массива (сортировка)

Упорядочивание (сортировка) массива строк необходимо:

  • для реализации команды Sort

  • для реализации ключа /o в команде dir

Сортировка небольшого (50-100 строк) массива обычно выполняется методом пузырька. Ниже приведен пример процедуры на языке Free Pascal, выполняющей сортировку массива arr из 5 строк.

var arr: array[1..5] of string;

k,n: word; s:string;

begin

arr[1]:='zx';arr[2]:='sd';arr[3]:='pr';arr[4]:='mm';arr[5]:='bf';

for k:=1 to 5 do

for n:=1 to 4 do

if arr[n] > arr[n+1] then

begin

s:=arr[n]; arr[n]:=arr[n+1];arr[n+1]:=s

end;

for n:=1 to 5 do writeln (arr[n],' ');

readln;

end.

Однако данный метод не является эффективным так как, время сортировки равно квадрату входных данных.

Наиболее эффективным считается метод "быстрой" рекурсивной сортировки часто называемый qsort по имени реализации в стандартной библиотеке языка Си — широко известный алгоритм сортировки, разработанный английским ученым Чарльзом Хоаром в 1960 году. Один из быстрых известных универсальных алгоритмов сортировки массивов (в среднем O(n log n) обменов при упорядочении n элементов), хотя и имеющий ряд недостатков.

procedure qSort(var ar:array of real; low,high:integer);

var i,j:integer;

m,wsp:real;

begin

i:=low;

j:=high;

m:=ar[(i+j) div 2];

repeat

while(ar[i]<m) do i:=i+1;

while(ar[j]>m) do j:=j-1;

if(i<=j) then begin

wsp:=ar[i];

ar[i]:=ar[j];

ar[j]:=wsp;

i:=i+1;

j:=j-1;

end;

until (i > j);

if(low<j) then qSort(ar,low,j);

if(i<high) then qSort(ar,i,high);

end;

Данный алгоритм использовался при написании сортировки в стандартных компонентов хранения табличных данных TVirtualTable, TStringList, TStrings в Borland Delphi 7.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]