Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите сделать программу на Паскале.  (Прочитано 9340 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eduard
Гость
« : 31-01-2010 17:02 » 

Надо написать программу: вводим слово, затем пробел, затем какие-то цифры, затем снова слово и надо, чтобы слова вместе с пробелами удалялись и оставались только цифры. В словах тоже могут содержаться цифры, но они не должны входить в результат. Заранее спасибо.
Записан
Sel
Злобный
Администратор

ru
Offline Offline

« Ответ #1 : 31-01-2010 17:49 » 

eduard, что уже сделано? Где возникла проблема? Показывай.
На халяву готовый код - это не к нам.
Записан

Слово не воробей. Всё не воробей, кроме воробья.
eduard
Гость
« Ответ #2 : 01-02-2010 04:23 » 

Я смог написатьпрограмму выделяющую числа из текста, но это не совсем то.
Код:
const Digits : set of char=['0'..'9'];
var s,d:string;
    i:integer;
begin
     writeln('Введите текст, в котором есть и цифры:'); readln(s);
     writeln('Список чисел в тексте:');
     i:=1;
     Repeat
        while NOT(s[i] in Digits) and (i <= length(s)) do inc(i);
        d:='';
        while (s[i] in Digits) and (i <= length(s)) do begin
              d:=d+s[i];
              inc(i);
        end;
        if length(d) <> 0 then writeln(d);
     Until (i > length(s));
end.
« Последнее редактирование: 01-02-2010 04:47 от Алексей1153++ » Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 01-02-2010 06:43 » 

Начало хорошее Улыбаюсь Теперь осталось дело за малым - учесть 2 условия:
1. числу может предшествовать только пробел
2. после числа тоже должен быть пробел (или конец строки), иначе это не число

Поэтому, выделяя число, нужно знать, стоял ли перед ним не-пробел - если стоял, то мы можем смело пропускать до следующего пробела, т.к. это уже не число. И, соответственно, наткнувшись на первый символ, не являющийся цифрой (у тебя - на выходе из второго цикла while), нужно убедиться, что это пробел или конец строки - иначе накопленный результат можно выбрасывать, т.к. это слово, а не число.
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 01-02-2010 11:11 » 

Улыбаюсь

Если предположить что исходная строка содержит следующий текст "Абонент № 9281234567 имеет задолженность 750 руб. 30 коп.", то "d" будет содержать 30.  Написав строку [d:='';]  перед операторной скобкой [repeat] получим "d" содержащее все цифры строки "928123456775030". Как надо?
Записан

С уважением, Oldy.
eduard
Гость
« Ответ #5 : 01-02-2010 15:37 » 

Вот, например, дано сидоро4в 123 пе5тя. Надо,  чтобы программа выводила 123
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 01-02-2010 16:05 » 

Давай упростим задачу
дана строка "абв 123"
Задача найти число.
Покажи код.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #7 : 01-02-2010 16:11 » 

я бы решал это поэтапно.

1) из входящей строки получить массив слов
2) найти в массиве слова, состоящие только из цифр.

вопрос: какой паскаль используется? TP 7.0? объектный паскаль? FreePascal?
Записан

eduard
Гость
« Ответ #8 : 01-02-2010 16:15 » 

TP 7.0
Записан
x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #9 : 01-02-2010 16:42 » 

ну, придётся парсить строку ручками Улыбаюсь

можно всё сднелать без массивов и в один цикл.

смысл очень простой: бежим по строке, "запоминая" встречающиеся буквы, если запомненная буква не является цифрой, то взводим флаг (типа, NotADigit := TRUE). тогда запомненные буквы считаем словом. если буква является разделителем - проверяем флаг, если текущее слово состоит только из цифр - выводим его в результат, обнуляем строку - "запоминалку", сбрасываем флаг, и бежим дальше. и так до конца строки.
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines