Помощь - Поиск - Пользователи - Календарь
Полная версия: Строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
alexey13
программа, данная ниже, позволяет ввести и отсортировать только одну строку, а нужно несколько! help me)

прога сортирует слова по возрастанию! =)

program z14;
uses crt;
var a,d,sl1,sl2 : string;
i,l,k,j : longint;
b : array [1..50] of string;
begin
clrscr;
write('input s: ');readln(a);
l:=length(a);
if a=''then halt;
if a[l]<>' ' then begin inc(l);a[l]:=' '; end;
for i:=1 to l do
if a[i]=' 'then begin
inc(j);b[j]:=d;d:='';
end
else d:=d+a[i];
for i:=1 to j-1 do
for k:=i+1 to j do
begin
sl1:=b[i];
sl2:=b[k];
if length(sl1)>length(sl2) then begin
b[i]:=sl2;
b[k]:=sl1;
end;
end;
for i:=1 to j do write(' ',b[i]);
readln;
end.

IUnknown
Не по возрастанию, а по количеству букв в слове smile.gif

Оберни это все циклом repeat/until - будет несколько строк обрабатывать:
   repeat
write('input s: ');readln(a);
l:=length(a);
if a <> '' then
begin
j := 0; d := '';
if a[l]<> ' ' then
begin
inc(l); a[l]:=' ';
end;

for i:=1 to l do
if a[i]=' 'then
begin
inc(j);b[j]:=d;d:='';
end
else d:=d+a[i];

for i:=1 to j-1 do
for k:=i+1 to j do
begin
sl1:=b[i];
sl2:=b[k];
if length(sl1)>length(sl2) then
begin
b[i]:=sl2;
b[k]:=sl1;
end;
end;
for i:=1 to j do
write(' ',b[i]);
writeln;
end;
until a = '';

Я заодно инициализацию переменных j и d добавил, нехорошо это, использовать неинициализированные переменные. На одном проходе может и отработает, а вот зациклил - и уже надо добавлять присвоение начальных значений, без этого будет выдавать неправильные результаты...
alexey13
Спасибо большое)))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.