Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 28.06.2011, 20:17   #11 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S
Буду крайне признательна.
Severina вне форума   Ответить с цитированием

Старый 28.06.2011, 20:17
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Уделите пожалуйста некоторое время на прочтение аналогичных тем

Решить задачу о строках в С++
Помогите решить задачу в Паскале
Помогите решить задачу на Паскале
Помогите решить задачу в паскале
Срочно решить задачу!
Не могу решить задачу

Старый 28.06.2011, 20:43   #12 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Severina Посмотреть сообщение
Vladimir_S
Буду крайне признательна.
Добавил в #10.
Vladimir_S вне форума   Ответить с цитированием
Старый 28.06.2011, 20:45   #13 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S
Большое спасибо!
Буду вникать в суть.
Severina вне форума   Ответить с цитированием
Старый 28.06.2011, 20:55   #14 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Severina Посмотреть сообщение
Vladimir_S
Большое спасибо!
Буду вникать в суть.
Между прочим, суть почти точно соответствует Вашему алгоритму (#1).
Различия:
1. Чем разделены слова - точками, пробелами, многоточиями, знаками вопроса и т.п. - несущественно: "обрываем" слово, когда следующий символ - НЕ буква. Дальше продолжаем перебор, пока символ не станет буквой или файл не кончится.
2. Если слово соответствует условию, счетчик увеличиваем на 1, в противном случае не делаем ничего, т.е. прибавка 0 не предусмотрена.
Vladimir_S вне форума   Ответить с цитированием
Старый 28.06.2011, 21:16   #15 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Действительно, так получается проще, если не брать во внимание, чем разделены слова.
Потихоньку разбираю, вот только что делается здесь:
Until NOT (Ch in Lit);
If fl1 and fl2 then Inc(N);
fl1:=false;
UNTIL EoF(f);
Severina вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 28.06.2011, 21:38   #16 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Severina Посмотреть сообщение
Действительно, так получается проще, если не брать во внимание, чем разделены слова.
Потихоньку разбираю, вот только что делается здесь:
Until NOT (Ch in Lit);
Это когда мы "въехали" в очередное слово, перебираем символы до тех пор, пока не встретим такого, который НЕ является буквой, то есть НЕ входит в множество Lit.
Цитата:
If fl1 and fl2 then Inc(N);
Если fl1 и fl2 оба истинны, то увеличиваем значение N на 1. Поскольку я не понял, что именно вызвало затруднение, поясню всё.
1. Если b - булева переменная, то условие "if b then" полностью эквивалентно "if b=true then". Просто сокращенная запись.
2. Inc(N) полностью эквивалентно N:=N+1.
Цитата:
fl1:=false;
Это исходное значение флажка при переходе к обработке комбинации (символы между словами)+(следующее слово). В принципе, эту строчку можно убрать, но тогда строку
If Ch in Vow then fl1:=true;
нужно заменить на
If Ch in Vow then fl1:=true else fl1:=false;
Цитата:
UNTIL EoF(f);
Что же тут непонятного? Глобальный цикл перебора символов будет продолжаться, пока не возникнет атрибут конца файла, т.е. булев параметр (элемент Паскаля) EoF ("End of File", конец файла) не примет значение TRUE.
Vladimir_S вне форума   Ответить с цитированием
Старый 28.06.2011, 21:45   #17 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вот теперь все понятно, просто я не знала, про сокращенную запись. Спасибо за объяснение.
И еще вопрос:
Чтобы вывести результат в отдельный файл, надо добавить assign(res,'F:\pask\bin\pr5.res'); rewrite(res) ?
Severina вне форума   Ответить с цитированием
Старый 28.06.2011, 21:51   #18 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Severina Посмотреть сообщение
Вот теперь все понятно, просто я не знала, про сокращенную запись. Спасибо за объяснение.
И еще вопрос:
Чтобы вывести результат в отдельный файл, надо добавить assign(res,'F:\pask\bin\pr5.res'); rewrite(res) ?
А что надо выводить? Количество слов? Или сами слова? В принципе да, открытие файла на запись делается так. Только по окончании вывода надо не забыть команду Close(res);
А вот если надо выводить сами слова, начинающиеся и оканчивающиеся гласными, то программа существенно усложняется. Хотя и это решаемо.
Vladimir_S вне форума   Ответить с цитированием
Старый 28.06.2011, 21:55   #19 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Нет, сами слова выводить не надо, просто результат выводить в файл. Когда вставила, программа оставила файл результата пустым
Severina вне форума   Ответить с цитированием
Старый 28.06.2011, 22:22   #20 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Severina Посмотреть сообщение
Нет, сами слова выводить не надо, просто результат выводить в файл. Когда вставила, программа оставила файл результата пустым
А Вы ничего не забыли? В частности, заменить строку
Writeln('The number of words beginning and ending with vowels is ',N);
строкой
Writeln(res,'The number of words beginning and ending with vowels is ',N);
и только после этого вставить Close(res); ?
Между прочим, если вывод - файловый, то останов Readln перед финальным END следует убрать - он не нужен.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 06:27.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.