- •1. Цель курсовой работы
- •2. Командный процессор ос ms Windows cmd
- •2.1. Оболочка (интерпретатор) командной строки command.Com/cmd.Exe
- •Листинг 1. Процедура инициализации
- •2.3. Структура команд. Параметры и ключи. Вывод справочной информации
- •2.4. Команды
- •2.4.4. Команды Date и Time
- •2.4.7.2. Команда cd
- •2.4.7.3. Команда dir
- •2.4.7.4. Команды mkdir
- •2.4.7.5. Команда del или erase
- •3. Назначение ключей и параметров, описание команд
- •3.1. Команда type
- •Листинг 2. Процедура type
- •3.2. Команда time
- •Листинг 3. Процедура отображения и установки времени
- •3.3. Команда date
- •Листинг 4. Отображение и установка системного времени
- •3.4. Команда mkdir
- •Листинг 5. Процедура mkdir
- •3.5. Команда rd
- •Листинг 6. Процедура rd
- •3.6. Команда cd
- •3.7. Команда attrib
- •Листинг 7. ПроцедураAttrib
- •3.8. Команда cls
- •Листинг 8. Процедура cls
- •3.9. Команда sort
- •Листинг 9. Процедура sort
- •3.10. Команда echo
- •Листинг 10. Процедура echo
- •3.11. Команда del|erase
- •Листинг 11. Процедура del
- •3.12. Команда dir
- •Листинг 12. ПроцедураDir
- •3.13. Команда invertcolor
- •Листинг 13. Процедура invertcolor
- •3.14. Разбиение на лексемы, синтаксический анализ, регулярные выражения
- •Листинг 14. Проверка на соответстиве команд
- •3.15. Процедуры упорядочивания массива (сортировка)
- •3.17. Русификация вывода командного процессора
- •4. Примеры выполнения работы команд
- •4.1. Команда dir
- •4.2. Команда attrib
- •4.3. Команда date и time
- •4.4. Команда type и sort
- •4.5. Команда mkdir, rd, cd
- •4.7. Команда cls и echo
- •4.8. Команда del | erase
- •5. Литература
Листинг 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.