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

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

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

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


Новичок
*

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

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


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

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


Гость






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

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

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


Новичок
*

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

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


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

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


Гость






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

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

Хотя, ты можешь делать так, как тебе удобно... С массивами тоже можно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






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


Новичок
*

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

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


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

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


Новичок
*

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

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


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

Сообщение отредактировано: garry_m -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 символов; между соседними словами - произвольное число пробелов, за последним словом точка. Напечатать эту же последовательность, удалив из всех слов цифры и символы подчеркивания.
, а ты зачем-то пробелы удаляешь...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


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


Гость






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

А даже если и нужно, это можно сделать в том же цикле, который я тебе написал... Зачем же весь тот код, который ты привел раньше?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

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

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


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


Гость






Корректно? Что ты подразумеваешь под этим словом? Будет ли работать? Возможно. Оптимален ли он? Нет.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Цитата
Я же не спец в программировании.
В чтении по-русски тоже? Я же тебе в 10-м посте привел практически готовую программу !!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.

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


Новичок
*

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

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


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

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

 





- Текстовая версия 9.09.2025 7:31
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name