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

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

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

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


Бывалый
***

Группа: Пользователи
Сообщений: 227
Пол: Мужской
Реальное имя: Вячеслав

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


Возможно ли разбиение строки на слова посредством массива типа string? То есть, что-то типа:
...
for i:=1 to {ne znayu}
do {zapolnit' massiv}

for i:=1 to ...
do writeln(s[i]);

{zatem soverwit' kakie to deistviya s otdelnymi slovami: tipa naxozhdeniya samogo dlinnogo slova i t. p.}

Как это будет выглядеть (хотя бы примерно) ?


--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Выбирай: Разбиение на слова. Все способы.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 227
Пол: Мужской
Реальное имя: Вячеслав

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


До того как открывать тему, я посмотрел эту ссылку (видел где-то ее в другой теме). То, что там написано, мне непонятно. Полно неизвестных функций, процедур и оператор. Я это не знаю и не понимаю. Соответственно, на моем уровне предлагаемыми вариантами воспользоваться не могу. Пытаюсь разобраться, появился вопрос этой темы - прошу ответить.


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


Гость






Ближе к концу смотрел, метод klem4, например? Куда уж проще? А писать без функций/процедур - извини, но зачем тогда учить Паскаль? Лучше вообще не писать тогда уже. С другой стороны - с чего ты решил, что если ты не понял ТАМ, то поймешь ЗДЕСЬ?

Цитата
Полно неизвестных функций, процедур и оператор.
Например? Что именно непонятно, скажем, в методе из поста №7 по ссылке?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 227
Пол: Мужской
Реальное имя: Вячеслав

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


Нда, извиняюсь, там действительно есть такая идея с массивом string. Именно от klem4. Не внимательно просматривал.

Насколько понимаю, ты счиатешь мне стоит попробовать разобраться с этим способом. Тогда вопросы:

1.
Цитата
limits = [#0..#32,'.',',',':',';','!','?','"'];
Первый раз вижу подобную строчку что это значит?

2.
Цитата
function GetWords(s : string; var w : TWords) : byte;
Что это значит?

3. Что за тип такой byte, мы такой тип не проходили (насколько я знаю)? Нельзя ли его заменит типом уже проходимым нами?

4. Что такое
Цитата
s[i] in limits
?

5.
Цитата
GetWords := n;
Это зачем?


--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Вячеслав Людской @ 26.10.2009 18:28) *
1. Первый раз вижу подобную строчку что это значит?
limits = [#0..#32,'.',',',':',';','!','?','"'];
Константe limits типа set присвоено знаение, указанное в квадратных скобках. Про set (множество) читай в учебнике.

Цитата(Вячеслав Людской @ 26.10.2009 18:28) *
2. Что это значит?
function GetWords(s : string; var w : TWords) : byte;
Заголовок функции. Тоже не проходили?..

Цитата(Вячеслав Людской @ 26.10.2009 18:28) *
3. Что за тип такой byte, мы такой тип не проходили (насколько я знаю)? Нельзя ли его заменит типом уже проходимым нами?
Целочисленный тип с диапазоном 0..255, занимает в памяти 1 байт.
"уже проходимым" lol.gif ? Можно)). Замени на integer или word (хотя это не совсем рационально).

Цитата(Вячеслав Людской @ 26.10.2009 18:28) *
4. Что такое ?
s[i] in limits
Оператор для работы с типом set (множество), проверка на содержание элемента (s[i] в данном случае) в множестве (limits в данном случае).

Цитата(Вячеслав Людской @ 26.10.2009 18:28) *
5. Это зачем?
GetWords := n;
Присвоение возвращаемого значения функции (см. 2)


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 227
Пол: Мужской
Реальное имя: Вячеслав

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


Цитата
Про set (множество) читай в учебнике
Книги по паскалю сейчас нет, учебник в самом паскале не работает (баг какой-то unsure.gif ). Хотя бы в двух словах, что это такое и пример в две строчки. В принципе, думаю, что смогу разобраться сам.

Цитата
Константe limits типа set присвоено знаение, указанное в квадратных скобках
Это типа защита от дурака, чтоб не вводил лишнее, или что-то другое?

Цитата
Заголовок функции. Тоже не проходили?..
Функции еще никоим образом не проходили, даже не касались их. Только теоретически знаю, что это такое.

Цитата
"уже проходимым" ? Можно)).
Когда писал даже не заметил, как это звучит... smile.gif

Цитата
Замени на integer или word (хотя это не совсем рационально).
И все таки я заменю на integer.

Честно, говоря, легче не стало, я так и не знаю как это делать. Жду помощи, надеюсь на вас smile.gif


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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Вячеслав Людской @ 27.10.2009 17:59) *
Книги по паскалю сейчас нет, учебник в самом паскале не работает (баг какой-то unsure.gif ). Хотя бы в двух словах, что это такое и пример в две строчки.
Тип множество похож на понятие множества, известное из математики (теория множеств), но не совсем то. Множества - это как бы признак наличия величин. Работает только для перечислисых и порядковых типов с не более, чем 256 значениями. Например, можно объявить set of char (множество ascii-символов, их как раз 256). Множества допускают операции включения/исключения элементов и объединения/вычитания. В множестве не может быть двух или более одинаковых элементов: он либо есть, либо нет его. Например:
m: set of byte;
...
m:=[1,2,3];
Include(m,8); {множество стало [1,2,3,8]}
Include(m,8); {множество не изменилось}
m:=m+[2,3]; {множество не изменилось}
m:=m+m; {множество не изменилось}
m:=m-[1,3]; {множество стало [2,8]}
m:=[1,2,3]+[1,2,5]; {множество стало [1,2,3,5]}
m:=[]; {пустое множество}


m:=['a','b'];
Допустим, ты хочешь узнать, какие символы встречаются в строке. Делаешь так:
var
s: string;
m: set of char;
...
for i:=1 to Length(s) do Include(m,s[i]);
c:='f';
Write('символ ',c);
if not (c in m) then Write('не ');
WriteLn(' присутствует в строке');

Цитата(Вячеслав Людской @ 27.10.2009 17:59) *
Это типа защита от дурака, чтоб не вводил лишнее, или что-то другое?
Нет. Это прямая функциональность кода.

Цитата(Вячеслав Людской @ 27.10.2009 17:59) *
Честно, говоря, легче не стало, я так и не знаю как это делать. Жду помощи, надеюсь на вас smile.gif
Мы, конечно, можем помочь, но только НЕ ПОТОМУ, что тебе в лом искать учебник (в Инете можно найти легко) или исправлять какой-то баг. Если есть вопрос, если что-то непонятно, если что-то не получается - пожалуйста, поможем. Но заменять тебе учебник - учти, я делал это в первый и последний раз. Будь, пожалуйста, поуважительнее, не расходуй чужое время.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 227
Пол: Мужской
Реальное имя: Вячеслав

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


Оба привиденных фрагмента программ не работают, хотя я их дополнил до целых программ как знал. В обоих случаях вылетает ошибка:
» Nepredvidennoe isklyu4enie EAccessViolation. Access violation at address 0069CADC in module 'PascalABC.exe'. Read of address 00000004. Programma zaverwena.

Сами программы вот:
var
m:set of byte;
begin

m:=[1,2,3];
Include(m,8); {ìíîæåñòâî ñòàëî [1,2,3,8]}
Include(m,8); {ìíîæåñòâî íå èçìåíèëîñü}
m:=m+[2,3]; {ìíîæåñòâî íå èçìåíèëîñü}
m:=m+m; {ìíîæåñòâî íå èçìåíèëîñü}
m:=m-[1,3]; {ìíîæåñòâî ñòàëî [2,8]}
m:=[1,2,3]+[1,2,5]; {ìíîæåñòâî ñòàëî [1,2,3,5]}
m:=[]; {ïóñòîå ìíîæåñòâî}

end.


var
s: string;
m: set of char;
i:integer;
begin
readln(s);
for i:=1 to Length(s) do Include(m,s[i]);
c:='f';
Write('ñèìâîë ',c);
if not (c in m) then Write('íå ');
WriteLn(' ïðèñóòñòâóåò â ñòðîêå');
end.
Возникает вопрос: правильно ли я их дополнил?

Цитата
Мы, конечно, можем помочь, но только НЕ ПОТОМУ, что тебе в лом искать учебник (в Инете можно найти легко) или исправлять какой-то баг. Если есть вопрос, если что-то непонятно, если что-то не получается - пожалуйста, поможем. Но заменять тебе учебник - учти, я делал это в первый и последний раз. Будь, пожалуйста, поуважительнее, не расходуй чужое время
Несколько учебников, я скачал сегодня, как исправить баг я не знаю. По теории больше обращаться не буду. Действительно не стоит, прочитать это я могу сам. Сглупил, простите.

Что касается разбиения строки - буду искать более простой способ. С данными здесь способами я так и не разобрался.


--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата
Возникает вопрос: правильно ли я их дополнил?
Первую - правильно, она должна отработать (хотя ничего тебе не выведет, но в отладчике посмотреть значения переменных можно). Вторую - не совсем, ты забыл описать переменную C: char. После добавления ее программа тоже должна отработать.

Теперь - о грустном. Я бы не рекомендовал тебе начинать работу с PascalABC, по собственному опыту знаю, иногда, чтобы заставить его выполнять простейшие для Turbo Pascal/FPC действия, надо очень сильно извращаться. Сейчас посмотрю, что там они опять нахимичили со множествами (я об авторах этой поделки - PascalABC)...

Добавлено через 11 мин.
Update
В PascalABC.NET отрабатывают обе программы...

Старую версию (которая без .NET) уж извини, ставить не буду, она в прошлый раз мне самовольно перековеркала все ассоциации файлов и так нагадила на диске, что я ее замучался потом выкорчевывать.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Бывалый
***

Группа: Пользователи
Сообщений: 227
Пол: Мужской
Реальное имя: Вячеслав

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


Цитата
но в отладчике посмотреть значения переменных можно
Как это сделать?

Цитата
ты забыл описать переменную C: char.
Аааа, да, забыл.

Цитата
я об авторах этой поделки - PascalABC
Какого ты о них невысокого мнения... smile.gif

Цитата
Я бы не рекомендовал тебе начинать работу с PascalABC,
Да, я уже об этом думал. Скорее всего, правда, надо скачать ТурбоПаскаль, а то у меня уже давно возникали проблемы в ABC с метками и бесило, то, что переменной нельзя присваивать тип longint, а только integer. Например в проге вычисления факториала это имеет значение. Имхо, косячный это маленько компиллятор.

Цитата
она в прошлый раз мне самовольно перековеркала все ассоциации файлов и так нагадила на диске, что я ее замучался потом выкорчевывать.
Нда не завидую тебе nea.gif


--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Бывалый
***

Группа: Пользователи
Сообщений: 227
Пол: Мужской
Реальное имя: Вячеслав

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


Все, взял программу, приведенную klem4, переделал ее на свой вкус. Кажется, разобрался с ней. Про множества, функции и процедуры прочитал в учебнике.

Цитата
Цитата
но в отладчике посмотреть значения переменных можно
Как это сделать?
уже, догадался.

Спасибо всем за советы.

Сообщение отредактировано: Вячеслав Людской -


--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Вячеслав Людской @ 29.10.2009 14:24) *
уже, догадался.
Вот и хорошо. Боюсь, я бы не сказал с ходу, как это делать в АВС.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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