Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Орловский Дмитрий
Статус: Профессор
Рейтинг: 4261
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2652
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2380
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Pascal (Паскаль)

Номер выпуска:1167
Дата выхода:26.03.2011, 10:30
Администратор рассылки:Boriss (Академик)
Подписчиков / экспертов:179 / 182
Вопросов / ответов:1 / 3

Вопрос № 182575: Здравствуйте! Прошу помощи в следующем вопросе: Дана строка.Преобразовать строку удалив из неё все символы,не являющиеся латинскими буквами.Если преобразование строки невозможно,выдать об этом сообщение с указанием причины.


Вопрос № 182575:

Здравствуйте! Прошу помощи в следующем вопросе:
Дана строка.Преобразовать строку удалив из неё все символы,не являющиеся латинскими буквами.Если преобразование строки невозможно,выдать об этом сообщение с указанием причины.
Буду очень благодарен за помощь!)

Отправлен: 21.03.2011, 10:07
Вопрос задал: angel.nero (Посетитель)
Всего ответов: 3
Страница вопроса »


Отвечает Andrew Kovalchuk (Профессионал) :
Здравствуйте, angel.nero!

Ниже представлен вариант решения (Turbo Pascal 7.0)
Код:
{
Дана строка.
Преобразовать строку удалив из неё все символы, не являющиеся латинскими буквами.
Если преобразование строки невозможно, выдать об этом сообщение с указанием причины.
}
uses
crt;
const
latins: set of char = ['A'..'Z', 'a'..'z'];
var
st: string;
i, l: byte;
begin
clrscr;
writeln('Type string wih latin chars.');
readln(st);
l := length(st);
if (st = '') then
writeln('Conversion can not: Empty string.')
else begin
i : = 1;
while (i <= length(st)) do begin
if not (st[i] in latins) then
delete(st, i, 1)
else
inc(i);
end;
if l = length(st) then
writeln('Conversion can not: Not latin chars not found.')
else
if (st = '') then
writeln ('Result string: <Empty>')
else
writeln ('Result string: ', st);
end;
writeln('Done. Press any key...');
readkey;
end.


А еще ниже для затребованного ABCPascal:
Код:
uses
crt;
const
latins: set of char = ['A'..'Z', 'a'..'z'];
var< br /> st: string;
i, l: byte;
begin
clrscr;
writeln('Type string wih latin chars.');
readln(st);
l := length(st);
i := 1;
while (i <= length(st)) do begin
if not (st[i] in latins) then
delete(st, i, 1)
else
inc(i);
end;
if l = length(st) then
writeln('Conversion can not: Not latin chars not found.')
else
if (st = '') then
writeln ('Result string: <Empty>')
else
writeln ('Result string: ', st);
writeln('Done. Press any key...');
readkey;
end.


Разница в коде лишь в том, что в ABC версии посредством readln() не удается в качестве значения задаваемого с клавиатуры ввести пустое значение строки.


-----
Временная неудача лучше временной удачи

Ответ отправил: Andrew Kovalchuk (Профессионал)
Ответ отправлен: 21.03.2011, 12:14
Номер ответа: 266341
Украина, Киев

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 266341 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Отвечает Boriss (Академик) :
    Здравствуйте, angel.nero!
    Да, жалко, что Вы не написали, в каком Паскале... Сделал, как и в предыдущем ответе, в 7-м, но чуть по-иному

    Приложение:

    -----
    Вывод - то место в тексте, где вы устали думать

    Ответ отправил: Boriss (Академик)
    Ответ отправлен: 21.03.2011, 12:49
    Номер ответа: 266343
    Россия, Саранск
    Организация: Мордовский госуниверситет, Саранск, Факультет Электронной Техники
    Адрес сайта: Программирование на Паскале
    ICQ # 320096696

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 266343 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Отвечает lamed (Профессор) :
    Здравствуйте, angel.nero! ABC
    Код:
    // Дана строка.Преобразовать строку удалив из неё все символы,не являющиеся
    // латинскими буквами. Если преобразование строки невозможно,выдать об этом
    // сообщение с указанием причины.
    program p182575;
    var
    s: string;
    ErrLevel:integer;
    procedure DeleteNonLatins(var s: string; var ErrLevel: integer);
    const
    ABC = ['A'..'Z','a'..'z'];
    var
    i,j,len, nDeleted: integer;
    begin
    len:= length(s);
    nDeleted:= 0;
    j:= 1;
    for i:= 1 to len do
    begin
    if (s[i] in ABC) then
    begin
    if i<>j then< br /> s[j] := s[i];
    inc(j);
    end
    else
    inc(nDeleted);
    end;
    if nDeleted=len then
    ErrLevel := 1
    else if nDeleted=0 then
    ErrLevel := 2
    else
    begin
    s[0]:= chr(len-nDeleted);
    Errlevel := 0;
    end;
    end;

    begin
    write('s=');
    readln(s);

    DeleteNonLatins(s, Errlevel);
    case ErrLevel of
    0: writeln('после преобразования s=', s);
    1: writeln('Ошибка: после преобразования пустая строка');
    2: writeln('Ошибка: строка содержит только латинские буквы');
    else
    writeln('Неизвестная ошибка');
    end;
    end.

    Пример работы
    Код:
    s=Учим Pascal Учим Pascal Учим Pascal
    после преобразования s=PascalPascalPascal
    s=
    Ошибка: после преобразования пустая строка
    s=abcdefghijklmn
    Ошибка: строка содержит только латинские буквы

    Если требуются комментарии, задавайте вопросы в мини-форуме.
    Удачи!

    Ответ отправил: lamed (Профессор)
    Ответ отправлен: 21.03.2011, 21:28
    Номер ответа: 266347
    Россия, Ковров
    Тел.: +79107793141
    Организация: КГТА

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 266347 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное