IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Последовательность слов
garry_m
сообщение 11.12.2005 18:51
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


Народ! Пожалуйста помогите решить задачу!

Дана непустая последовательность слов, составленных из цифр и латинских букв, разделенных произвольным числом пробелов. Написать процедуру, которая считывает слово из заданной последовательности и определяет, является ли оно синтаксически корретным идентификатором Паскаля.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2005 18:58
Сообщение #2


Гость






garry_m, выделить из строки очередное слово сможешь? В FAQ-е есть несколько примеров разбиения стронки на слова, в "Задачах" есть прикрепленная тема...

Теперь дальше: что является правильным идентификатором Паскаля? Слово должно начинаться на букву или символ подчеркивания, содержать ТОЛЬКО буквы, символы подчеркивания и цифры, и его длина не может превышать 63 символа (в принципе, может, но 2 идентификатора с одинаковыми 64 символами распознаются системой как одинаковые...)

Что именно из этого вызывает затруднения?
 К началу страницы 
+ Ответить 
garry_m
сообщение 13.12.2005 0:02
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


Ну я пересмотрел все... Мне не совсем ясно что такое символы подчеркивания. И надо ли мне в этой задаче использовать массив? Тогда для картина хоть как-то прояснится.

Сообщение отредактировано: garry_m - 13.12.2005 0:16
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2005 0:14
Сообщение #4


Гость






Символы подчеркивания - это "_" (под минусом)...

Для решения этой задачи Нужно в самом крайнем случае 4 переменных типа Integer... И все, никаких массивов...

Хотя, ты можешь делать так, как тебе удобно... С массивами тоже можно...
 К началу страницы 
+ Ответить 
garry_m
сообщение 13.12.2005 17:29
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


Поставленная задача: Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 символов; между соседними словами - произвольное число пробелов, за последним словом точка. Напечатать эту же последовательность, удалив из всех слов цифры и символы подчеркивания.


Вот мое решение:
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
{Poisk samogo dlinnogo slova}
if length(mat[n])<length(mat[sch]) then n:=sch;
if mat[n]<>'0' then writeln('Samoe dlinnoje slovo: ', mat[n])
else writeln('Slovo ne previschajuchee 8-mi simvolov ne najdeno.');
if isc<>'' then writeln('Slova previschajuschije 8-m simvolov: ',isc);
writeln('');
write('Dlja prodolzhenija nazhmite ENTER...');
readln;
end.



volvo, посмотри pls, правильно ли я ее решил? А то мне кажется, что опять накосячил...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2005 17:37
Сообщение #6


Гость






garry_m, программа совершенно не по заданию... При чем тут самое длинное слово?
 К началу страницы 
+ Ответить 
garry_m
сообщение 13.12.2005 17:54
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


До меня доперло!

Сообщение отредактировано: garry_m - 13.12.2005 19:25
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
garry_m
сообщение 13.12.2005 18:32
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


Блин! Я стормозил! Я просто делал по аналогии, а то что требуют в конце - посмотрел не туда...

Сообщение отредактировано: garry_m - 13.12.2005 19:26
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
garry_m
сообщение 13.12.2005 20:58
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


ОК! Значит для этой задачи (из всех слов удалить цифры и символы подчеркивания) начало будет таким...

Код:
Код
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.


Как должна выглядеть процедура, которая удаляет цифры и символы подчеркивания?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2005 21:04
Сообщение #10


Гость






garry_m, я вот только одного не понял, если ты сразу после ввода строки пройдешь по ней с таким циклом:
i := 1;
while i <= length(txt) do
if txt[i] in ['0' .. '9', '_'] then delete(s, i, 1)
else inc(i);

твое задание не будет считаться выполненным? Что, обязательно все усложнять и разбивать строку на слова? Я вижу, что в задании написано:
Цитата
Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 символов; между соседними словами - произвольное число пробелов, за последним словом точка. Напечатать эту же последовательность, удалив из всех слов цифры и символы подчеркивания.
, а ты зачем-то пробелы удаляешь...
 К началу страницы 
+ Ответить 
garry_m
сообщение 13.12.2005 21:14
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


А когда я удалю пробелы он ведь мне напечатает эту же последовательность?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2005 21:18
Сообщение #12


Гость






А у тебя в задании где-нибудь сказано, что надо удалять пробелы? Нет... Зачем удаляешь...

А даже если и нужно, это можно сделать в том же цикле, который я тебе написал... Зачем же весь тот код, который ты привел раньше?
 К началу страницы 
+ Ответить 
garry_m
сообщение 13.12.2005 21:27
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


Ну раз пробелы не затрагиваем, то задача упрощается...
Код
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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
garry_m
сообщение 14.12.2005 10:19
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


Код корректно написан?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.12.2005 10:56
Сообщение #15


Гость






Корректно? Что ты подразумеваешь под этим словом? Будет ли работать? Возможно. Оптимален ли он? Нет.
 К началу страницы 
+ Ответить 
garry_m
сообщение 14.12.2005 15:03
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


Ну это первая часть программы...
А что должно идти дальше?

Код
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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.12.2005 15:23
Сообщение #17


Гость






Цитата
Я же не спец в программировании.
В чтении по-русски тоже? Я же тебе в 10-м посте привел практически готовую программу !!!
 К началу страницы 
+ Ответить 
garry_m
сообщение 14.12.2005 17:17
Сообщение #18


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


volvo, я вставил ту процедуру, которую ты привел в 10-м посте, но похоже я ее не туда вставил. Да и кстати я упростил программу, причем все стало проще во много раз.

Код:
uses crt;
var
txt:string;
mat:array [1..31] of string;
i:integer;
n:integer;
ans:char;
begin
clrscr;
{Naznachenije nachalnih parametrov}
for i:=1 to 31 do mat[i]:='';
i:=1;n:=0;mat[31]:='0';

repeat clrscr;

repeat

writeln ('NABERITE POSLEDOVATELNOST IS SLOV,');
writeln('NE PREVISHAUSCHIH 10 SIMVOLOV, I NE BOLEE 30 SLOV.');
readln(txt);

{Proverka na pustotu vvodimogo texta u okonchanije na tochku}

if txt='' then txt:='toy21 78dog_v desk10gf.';
if pos('.',txt)=0 then writeln('VI ZABILI POSTAVIT TOCHKU!');
until pos('.',txt)<>0;


{ПРОЦЕДУРА ИЗ 10-ГО ПОСТА}
i := 1;
while i <= length(txt) do
if txt[i] in ['0' .. '9', '_'] then delete(s, i, 1)
else inc(i);




write('HOTITE LI VI POVTORIT? (Y/N)');
ans:=readkey;
until UpCase(ans) = 'N';
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.12.2005 17:39
Сообщение #19


Гость






А если так:
uses crt;
var
txt:string;
i: integer;
ans: char;
begin
repeat
clrscr;
repeat
writeln ('NABERITE POSLEDOVATELNOST IS SLOV,');
writeln('NE PREVISHAUSCHIH 10 SIMVOLOV, I NE BOLEE 30 SLOV.');
readln(txt);

if txt = '' then txt := 'toy21 78dog_v desk10gf.'
else
if txt[length(txt)] <> '.' then
writeln('VI ZABILI POSTAVIT TOCHKU!');
until txt[length(txt)] = '.';

i := 1;
while i <= length(txt) do
if txt[i] in ['0' .. '9', '_'] then delete(txt, i, 1)
else inc(i);

writeln('result = ', txt);

write('HOTITE LI VI POVTORIT? (Y/N)');
ans:=readkey;
until UpCase(ans) = 'N';
end.

?
 К началу страницы 
+ Ответить 
garry_m
сообщение 14.12.2005 17:45
Сообщение #20


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


volvo, не знаю даже как тебя благодарить! Пасиб! Все работает!
Сейчас попробую решить самую первую задачу в этом топике!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 13:55
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"