Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод_указ_программирование_вариант_2014.doc
Скачиваний:
26
Добавлен:
12.05.2015
Размер:
982.53 Кб
Скачать

6.6. Пример программы

Приведенный ниже пример демонстрирует программу для упорядочивания по алфавиту ФИО, заданных в строке S:

programSortFIO;

type{Объявлям пользовательские типы TFIOElem и TFIOArray}

TFIOElem = string[40];{Элемент массива с Ф.И.О.}

{Тип - массив из 10 строк, каждая длиной до 40 символов: }

TFIOArray = array[1..10]ofTFIOElem;

{Сортировка строковых элементов массива самым простым способом}

{Используется алгоритм "Сортировка выбором"}

procedureDoSortArray(FioCount: Integer;varFioArray: TFIOArray);

var

I, J: Integer;

STmp: TFIOElem;

MinStrIdx: Integer;

begin

forI:= 1toFioCount- 1do{Внешний цикл перебора слева-направо}

begin

MinStrIdx := I; {Пока считаем i-ый элемент минимальным}

{Отыскиваем строку, которая должна располагаться раньше по алфавиту}

for J := I + 1 to FioCount do {Внутренний цикл перебора}

if FioArray[J] < FioArray[MinStrIdx] then

MinStrIdx := J; {Запоминаем индекс найденной строки}

{Если такая строка найдена, то меняем ее с i-ым элементом}

if MinStrIdx <> I then

begin

STmp:=FioArray[I];{Запоминаем i-ый элемент}

{Записываем в него новое значение}

FioArray[I] := FioArray[MinStrIdx];

FioArray[MinStrIdx] := STmp;

end;

end;

end; {END of DoSortArray}

{Процедура MakeSort осуществляет сортировку строки с Ф.И.О.,

заданной с помощью аргумента St }

procedure MakeSort(var St: string);

var

{Объявляем массив из 10 строк, каждая длиной до 40 символов}

StrAr: TFIOArray;

I, Len, CurArIdx: Integer;

begin

{Заменяем все последовательности ", " на ","}

while Pos(', ', St) > 0 do

Delete(St, Pos(', ', St) + 1, 1);

Len := Length(St); {Запоминаем длину строки}

I := 1; {Инициализируем счетчик цикла WHILE}

CurArIdx := 1; {Инициализируем счетчик текущего элемента массива}

StrAr[CurArIdx] := '';{Предварительная очистка строки}

{В цикле осуществляем разбивку исходной строки. В результате этого

каждое Ф.И.О. будет храниться в отдельном элементе массива StrAr,

а в переменную CurArIdx будет записано общее количество Ф.И.О.}

whileI <= Lendo{Пока не достигнут конец строки}

begin

if St[I] = ',' then {Если встретили запятую}

begin

Inc(CurArIdx); {Делаем текущим следующий элемент массива}

StrAr[CurArIdx] := '';{Предварительная очистка строки}

end

else{Добавляем символ к текущему строковому элементу массива}

StrAr[CurArIdx] := StrAr[CurArIdx] + St[I];

Inc(I); {Увеличиваем счетчик цикла на единицу}

end;{Конец цикла WHILE}

{Выводим на экран промежуточные результаты работы программы

- список всех найденных Ф.И.О., каждое на отдельной строке}

for I := 1 to CurArIdx do

Writeln('FIO ', I, ': ', StrAr[I]);

{Сортировка элементов строкового массива}

DoSortArray(CurArIdx, StrAr);

St := ''; {Очищаем строку St}

{Записываем в var-параметр St отсортированный список Ф.И.О.}

for I := 1 to CurArIdx do

begin

St := St + StrAr[I]; {Выполняем "сцепление" строк}

if I < CurArIdx then {Если Ф.И.О. не последнее}

St := St + ', '; {то добавляем после него ", "}

end;

end; {END of MakeSort}

var

S: string;

begin{Начало основной программы}

Writeln('Введите несколько Ф.И.О. через запятую:');

Readln(S); {Ввод строки}

MakeSort(S); {Обработка строки (сортировка Ф.И.О.)}

Writeln('Список Ф.И.О. после сортировки:');

Writeln(S); {Вывод результатов на экран}

Readln;

end.