Paster Fob писал(а):Возник вопрос,почему если не инициализировать переменные sa,sb,sc,то программа выдаёт абру-кадабру для 1-го состава.
Тут всё очевидно. Ведь пока переменные не инициализированы, там валяется "мусор", вот вы его и получаете.
А вообще программка сильно накручена, я подразумевал нечто попроще: очищаем тупики (глобальные переменные), загоняем туда в цикле составы, пока не пустая строка, затем освобождаем тупики и печатаем результат. Без всяких там массивов (или вы их для тренировки туда вставили?). Вот так примерно.
- Код: Выделить всё
procedure push(var stack:string;ch:char);
begin
// тра-ля-ля
end;
function pop(var stack:string;var ch:char):boolean;
begin
// тра-ля-ля
end;
var sa,sb,sc:string; // тупики
procedure Sort(var arg: string);
var c: char;
begin
while pop(arg,c) do
case c of
'A'..'Z' : push(sa,c);
'a'..'z' : push(sb,c);
'0'..'9' : push(sc,c);
end;
end;
procedure PrintResult(const aText: string; var aTupik: string);
var s: string; c: char;
begin
s:='';
while pop(aTupik,c) do push(s,c);
writeln(aText,s); writeln;
end;
var s:string;
begin
// Очищаем тупики
sa:=''; sb:=''; sc:='';
// Обработка вводимых строк
repeat
Write('Состав: '); Readln(s);
if Length(s)=0 then Break;
Sort(s);
until false;
// Освобождение тупиков и формирование отправляемых составов
PrintResult('состав А: ',sa);
PrintResult('состав B: ',sb);
PrintResult('состав C: ',sc);
Readln;
end.
Возможны варианты, конечно.