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.
 
Возможны варианты, конечно.