Другие языки программирования и технологии

Помогите решить задачу на Pascal!)

Дана последовательность n строк(n<= 100) 1)создать массив D ,элементами которого являются длины строк и номера строк(то есть записи) 2)Найти самую длинную строку (вывести ее индекс,а не длину) 3)Для самой длиннойстроки выполнить операцию"реверс" 4) отсортировать массив D, переставив одновременно с длинами строк(по возрастанию) еще и номера строк.
const Name = 'MyFile.txt';
Size = 100;
type RType = record L, N : Byte end;
var D : array [1..Size] of RType; S : String; T, R : Text; N, i, K, Max, Min : Byte; C : Char;
begin
{ 1) читаем и считаем }
Assign(T, Name); Reset(T); N := 0; while Not EOF(T) do begin ReadLn(T, S); Inc(N); D[N].L := Length(S); D[N].N := N; WriteLn('строка N ', N, ' длины ', D[N].L); end; Close(T);
{ 2) ищем самую длинную }
Max := 1; for i := 2 to N do if D[Max].L < D[ i ].L then Max := i; WriteLn('самая длинная строка N = ', Max, ' L = ', D[Max].L);
{ 3) делаем реверс для самой длинной строки }
Assgn(T, Name); Reset(T); Assign(R, 'temp.txt'); Rewrite(R); i := 0; while Not EOF(T) do begin ReadLn(T, S); Inc(i); if i = Max then begin WriteLn('исходная строка: ', S); for K := 1 to D[Max].L div 2 do begin C := S[K]; S[K] := S[D[Max].L + 1 - K]; S[D[Max].L + 1 - K] := C; end; WriteLn('инвертированная строка: ', S); end; WriteLn(R, S); end; Close(T); Close(R); Delete(T); Rename(R, Name);
{ 4) сортируем массив по длинам }
for i := 1 to N - 1 do
begin
Min := i; for K := i + 1 to N do if D[K].L < D[Min].L then Min := K; if K <> i then begin Max := D[ i ].N; D[ i ].N := D[Min].N; D[Min].N := Max; Max := D[ i ].L; D[ i ].L := D[Min].L; D[Min].L := Max; end;
WriteLn('строка N ', D[ i ].N, ' длины ', D[ i ].L);
end;
WriteLn('строка N ', D[N].N, ' длины ', D[N].L);
end.
Сергей Ббббб
Сергей Ббббб
78 390
Лучший ответ