Консультация № 190208
03.12.2016, 17:54
0.00 руб.
0 3 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
помогите пожалуйсто в паскаль абс: Имеется строка, содержащая слова из букв и цифр. Слово – последовательность символов между пробелами, не содержащая пробелы внутри себя. Преобразуйте эту строку так, чтобы сначала в каждом слове шли все буквы, встречающиеся в нем, а потом все цифры слова в прямом порядке.

Обсуждение

давно
Старший Модератор
31795
6196
10.12.2016, 02:43
общий
это ответ
Здравствуйте, roma5310!

В приложении, код, который буквы распологает в начале строки, цифры в конце строки, отсортированные по возрастанию.
Я так понял условие:
а потом все цифры слова в прямом порядке.

[code lang=pascal h=200]var
a:string;
i:integer;
{
обрабатываем слово: буквы в начало, цифры в конец строки отсортированные по возрастанию
}
function z(b:string):string;
var
c:char;
i:integer;
begin
i:=0;
repeat
inc(i);
while(b[i]in['0'..'9'])and((b[i+1]in ['A'..'Z','a'..'z'])or{сортировка буквы цифры}
((b[i+1]in['0'..'9']))and(b[i]>b[i+1]))do{сортировка по возрастанию цифр}
begin
c:=b[i];
b[i]:=b[i+1];
b[i+1]:=c;
i:=0;
end;
until i>length(b);
z:=b;
end;
{
выделяем слово рекурсивно и обрабатываем, пока длина строки не равна нулю
}
function y(b:string):string;
begin
if pos(' ',b)>0 then y:=z(copy(b,1,pos(' ',b)))+y(copy(b,pos(' ',b)+1,length(b)))
else y:=z(copy(b,1,length(b)));
end;
begin
{
вводим строку
}
repeat
write('Enter string:');
readln(a);
until length(a)>0;
{
заменяем знаки препинания на пробелы
}
i:=1;
while(pos(a[i],'.,;:^&')>0)do
begin
if pos(a[i],'.,;:^&')>0 then a[i]:=' ';
inc(i);
end;
{
удаляем начальные пробелы
}
while a[1]=' ' do delete(a,1,1);
{
удаляем двойные пробелы
}
while pos(' ',a)>0 do delete(a,pos(' ',a),1);
{
выводим результат
}
write('result:',y(a));
end.[/code]
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
400749
2
29.12.2016, 20:41
общий
программа выдает ошибку времени выполнения индекс выходит за границы массива
и вот эту строчку выделяет
while(b[i]in['0'..'9'])and((b[i+1]in ['A'..'Z','a'..'z'])or{сортировка буквы цифры}
давно
Старший Модератор
31795
6196
29.12.2016, 22:14
общий
Адресаты:

не знаю на каких данных Вы это проверяли?

Как рецепт: в условие можно добавить i<length(b)-1
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа