![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
garry_m |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Репутация: ![]() ![]() ![]() |
Народ! Пожалуйста помогите решить задачу!
Дана непустая последовательность слов, составленных из цифр и латинских букв, разделенных произвольным числом пробелов. Написать процедуру, которая считывает слово из заданной последовательности и определяет, является ли оно синтаксически корретным идентификатором Паскаля. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
garry_m, выделить из строки очередное слово сможешь? В FAQ-е есть несколько примеров разбиения стронки на слова, в "Задачах" есть прикрепленная тема...
Теперь дальше: что является правильным идентификатором Паскаля? Слово должно начинаться на букву или символ подчеркивания, содержать ТОЛЬКО буквы, символы подчеркивания и цифры, и его длина не может превышать 63 символа (в принципе, может, но 2 идентификатора с одинаковыми 64 символами распознаются системой как одинаковые...) Что именно из этого вызывает затруднения? |
garry_m |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну я пересмотрел все... Мне не совсем ясно что такое символы подчеркивания. И надо ли мне в этой задаче использовать массив? Тогда для картина хоть как-то прояснится.
Сообщение отредактировано: garry_m - 13.12.2005 0:16 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Символы подчеркивания - это "_" (под минусом)...
Для решения этой задачи Нужно в самом крайнем случае 4 переменных типа Integer... И все, никаких массивов... Хотя, ты можешь делать так, как тебе удобно... С массивами тоже можно... |
garry_m |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Репутация: ![]() ![]() ![]() |
Поставленная задача: Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 символов; между соседними словами - произвольное число пробелов, за последним словом точка. Напечатать эту же последовательность, удалив из всех слов цифры и символы подчеркивания.
Вот мое решение: uses crt; volvo, посмотри pls, правильно ли я ее решил? А то мне кажется, что опять накосячил... |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
garry_m, программа совершенно не по заданию... При чем тут самое длинное слово?
|
garry_m |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Репутация: ![]() ![]() ![]() |
До меня доперло!
Сообщение отредактировано: garry_m - 13.12.2005 19:25 |
garry_m |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Репутация: ![]() ![]() ![]() |
Блин! Я стормозил! Я просто делал по аналогии, а то что требуют в конце - посмотрел не туда...
Сообщение отредактировано: garry_m - 13.12.2005 19:26 |
garry_m |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Репутация: ![]() ![]() ![]() |
ОК! Значит для этой задачи (из всех слов удалить цифры и символы подчеркивания) начало будет таким...
Код: Код uses crt; var txt:string; mat:array [1..31] of string; isc:string; sch,i,n:integer; begin clrscr; {Naznachenije nachalnih parametrov} for i:=1 to 31 do mat[i]:=''; i:=1;n:=0;mat[31]:='0'; repeat writeln ('Naberite posledovatelnost iz slov,'); writeln('ne previschajuschih 8-m simvolov, i ne bolee 50 slov.'); writeln ('Ili nazhmite Enter dlja vvoda posledovatelnosti po umolchaniju'); writeln ('(Sjesch eche etih mjagkih francuzkih bulok, da vipej chaju.)'); readln(txt); {Proverka na pustotu vvodimogo texta u okonchanije na tochku} if txt='' then txt:='Sjesch eche etih mjagkih francuzkih bulok, da vipej chaju.'; if pos('.',txt)=0 then writeln('Vi zabili postavit tochku.'); until pos('.',txt)<>0; sch:=1; {Udalenije lishnih probelov} repeat if (txt[sch]=' ') and (txt[sch+1]=' ') then begin delete(txt,sch,1);{Udalenije lishnego probela} end else sch:=sch+1; until txt[sch]='.'; sch:=1; {Rasstanovka slov v massiv} repeat {Poisk okonchanija slova} repeat if txt[sch]<>' ' then sch:=sch+1; until (txt[sch]=' ') or (txt[sch]='.'); {Zanesenije najdennogo slova v massiv} mat[i]:=copy(txt,n+1,sch-n-1); i:=i+1;{Nomer slova} n:=sch;{Nachalnoje polozhenije} sch:=sch+1; until (txt[sch]='.') or (i=30); {Vivod posledovatelnosti} writeln('Nabrannaja vami posledovatelnost:'); writeln (txt); {Vivod posledovatelnosti s odinochnimi probelami mezhdu slovami} writeln(''); n:=31; for sch:=2 to i-1 do if length(mat[sch])>10 then isc:=isc+mat[sch]+' '{Iskluchenije slov dlina kotorih bolee 8-mi simvolov} else {Udalenije cifr i simvolov podcherkivanija} * * *** * **** * * * * * * **** *** * **** * * * * * * * *** *** * write('Dlja prodolzhenija nazhmite ENTER...'); readln; end. Как должна выглядеть процедура, которая удаляет цифры и символы подчеркивания? |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
garry_m, я вот только одного не понял, если ты сразу после ввода строки пройдешь по ней с таким циклом:
i := 1; твое задание не будет считаться выполненным? Что, обязательно все усложнять и разбивать строку на слова? Я вижу, что в задании написано: Цитата Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 символов; между соседними словами - произвольное число пробелов, за последним словом точка. Напечатать эту же последовательность, удалив из всех слов цифры и символы подчеркивания. , а ты зачем-то пробелы удаляешь... |
garry_m |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Репутация: ![]() ![]() ![]() |
А когда я удалю пробелы он ведь мне напечатает эту же последовательность?
|
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
А у тебя в задании где-нибудь сказано, что надо удалять пробелы? Нет... Зачем удаляешь...
А даже если и нужно, это можно сделать в том же цикле, который я тебе написал... Зачем же весь тот код, который ты привел раньше? |
garry_m |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну раз пробелы не затрагиваем, то задача упрощается...
Код uses crt; var txt:string; mat:array [1..31] of string; isc:string; sch,i,n:integer; begin clrscr; {Naznachenije nachalnih parametrov} for i:=1 to 31 do mat[i]:=''; i:=1;n:=0;mat[31]:='0'; repeat writeln ('Naberite posledovatelnost iz slov,'); writeln('ne previschajuschih 8-m simvolov, i ne bolee 50 slov.'); writeln ('Ili nazhmite Enter dlja vvoda posledovatelnosti po umolchaniju'); writeln ('(Sjesch eche etih mjagkih francuzkih bulok, da vipej chaju.)'); readln(txt); {Proverka na pustotu vvodimogo texta u okonchanije na tochku} if txt='' then txt:='Sjesch eche etih mjagkih francuzkih bulok, da vipej chaju.'; if pos('.',txt)=0 then writeln('Vi zabili postavit tochku.'); until pos('.',txt)<>0; Значит сначала мы вводим текст... так? Сообщение отредактировано: garry_m - 14.12.2005 10:18 |
garry_m |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код корректно написан?
|
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Корректно? Что ты подразумеваешь под этим словом? Будет ли работать? Возможно. Оптимален ли он? Нет.
|
garry_m |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну это первая часть программы...
А что должно идти дальше? Код uses crt; var txt:string; mat:array [1..31] of string; isc:string; sch,i,n:integer; begin clrscr; {Naznachenije nachalnih parametrov} for i:=1 to 31 do mat[i]:=''; i:=1;n:=0;mat[31]:='0'; repeat writeln ('Naberite posledovatelnost iz slov,'); writeln('ne previschajuschih 8-m simvolov, i ne bolee 50 slov.'); writeln ('Ili nazhmite Enter dlja vvoda posledovatelnosti po umolchaniju'); writeln ('(Sjesch eche etih mjagkih francuzkih bulok, da vipej chaju.)'); readln(txt); {Proverka na pustotu vvodimogo texta u okonchanije na tochku} if txt='' then txt:='Sjesch eche etih mjagkih francuzkih bulok, da vipej chaju.'; if pos('.',txt)=0 then writeln('Vi zabili postavit tochku.'); until pos('.',txt)<>0; {Udalenije cifr i simvolov podcherkivanija} ??? write('Dlja prodolzhenija nazhmite ENTER...'); readln; end. Или некорретно? Я просто не понимаю. Я же не спец в программировании. Сообщение отредактировано: APAL - 14.12.2005 15:23 |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Цитата Я же не спец в программировании. В чтении по-русски тоже? Я же тебе в 10-м посте привел практически готовую программу !!! |
garry_m |
![]()
Сообщение
#18
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo, я вставил ту процедуру, которую ты привел в 10-м посте, но похоже я ее не туда вставил. Да и кстати я упростил программу, причем все стало проще во много раз.
Код: uses crt; |
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
А если так:
uses crt; ? |
garry_m |
![]()
Сообщение
#20
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo, не знаю даже как тебя благодарить! Пасиб! Все работает!
Сейчас попробую решить самую первую задачу в этом топике! |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 13:55 |