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

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

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

2 страниц V < 1 2 >  
Closed Topic Открыть новую тему 
> Строки и задачки с ними, запуталась, мож совет дадите
сообщение
Сообщение #6


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


MapЫшKa wub.gif
Pos('{',s) - вернет номер в строке в котором содержится элемент {
если ноль значит такого символа нет в строке.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Цитата
определить сколько различных русских букв содержит строка

Думаю вот красивое решение на Паскале...
Код
var
ZRus:set of char;
PRus:set of char;
a:set of char;
s:string;
i,k:byte;
begin
zRus:=['А'..'Я']; pRus:=['а'..'я'];
readln(s);
for i:=1 to length(s) do  
  If ((s[i] in ZRus) or (s[i] in PRus)) and NOT (s[i] in a) then
         begin inc(k); INCLUDE(a,s[i]) end;
writeln(k);
end.


и 3 задача - найти слово макс. длинны.
Код
const
r=' '; {разделитель междду словами (пробел)}
var
s:string;
subs:string;
max:string;
i:byte;
begin
readln(s);
{удалим лишние разделители}
while s[1]=r do delete(s,1,1);
for i:=1 to ORD(s[0]) do if (s[i]=r) and (s[succ(i)]=r) then
begin
 while s[succ(i)]=r do delete(s,succ(i),1)
end;
while pos(r,s)<>0 do
begin
 subs:=copy(s,1,pos(r,s));
 delete(s,1,pos(r,s));
 If length(subs)>length(max) then max:=subs;
end;
writeln(max);
end.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


Oleg_Z
вот так бы и расцеловала а я тут сиду с циклами мучаюсь правдами и неправдами решение нахажу.
Солнце, было бы замечательно если ты мне маленькую лекцию про пару функций рассказал:
If ((s[i] in ZRus) or (s[i] in PRus)) and NOT (s[i] in a) then
begin inc(k); INCLUDE(a,s[i]) end; :
s[i] in zRus - ето что такое
INCLUDE (a,s[i]) ?????
ORD(s[0]) ????

нуц лузер я что тут поделаешь....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


а ваще :molitva: :molitva: :molitva: Oleg_Z :flowers:
и для
volvo :flowers:

великие боги паскаля! :molitva:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






MapЫшKa
А можно я вместо Oleg_Z ? :D
Смотри, что делается...

Здесь: s[i] in zRus - в программе zRus описано как множество символов, т.е. тип переменной, который может хранить только символы (причем только по одному каждого вида, т.е. в множестве может храниться ['a', 'б', 'г'], но не может ['a', 'a', 'a'] - потому что одинаковые значения как бы "накладываются" одно на другое...). Так вот для множеств есть специальная операция In, которая проверяет есть ли элемент указанный справа от нее во множестве указанном слева... То есть та строчка просто проверяет, есть ли уже во множестве zRus очередной символ строки (s[i])...

Здесь: INCLUDE (a,s[i]) - это как раз та самая процедура, которая добавляет значение в множество, т.е. здесь символ s[i] добавляется ко множеству A.

Здесь: ORD(s[0]) - это любимый трюк ОлегаZ, который заменяет функцию Length(s)... Просто длина строки хранится в ее нулевом символе, и этим Oleg_Z пользуется.... smile.gif

А вообще, если хочешь больше узнать о множествах, прочитай здесь - все описано...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


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


Новичок
*

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

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


volvo
спасибо дорогой!
и ето все паскаль... жесть. Ужас. Ужасные задачки. А все решать и решать нада... Эх. Пойду дальше разберать и переделывать и баги искать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


и еще баг в подсчете длинного слова... жесть надо сидеть, попробовать все через циклы и обычные функции провернуть длинно за то просто
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






MapЫшKa
Я не знаю, какую строку ты вводишь, но у меня и первая и вторая программа ОлегаZ отработали без проблем...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

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

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


введи например:
сказочка была хорошая
была хорошая сказочка

в первом случае он выдаст тебе сказочка
а во втором хорошая

м?

а с длинной у меня почему то всегда 0
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






MapЫшKa
Не принимается... Ты вводишь латинскими буквами, правда? rolleyes.gif И у этих 2-х слов количество латинских букв одинаково... Так программа выдает тебе первое встреченное !!! Вводи кириллицей, все будет в порядке.

То же самое и с длинной - в программе Oleg_Z символы сравниваются с
Кириллицей а ты вводишь Латинские буквы... Я угадал?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

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

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


нет! =))) я ввожу русскими! попробуй сам.
а с длинной симоволов я разобралась,я в одном месте не правильно заменила переменную. -)
но вот длиннное слово. ето еще тот фрукт.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






MapЫшKa
Я понимаю, что алгоритм очень похож, но попробуй вот эту программу для самого длинного слова. (это немного переработанная функция из ФАКа, которая разбивала текст на слова). Единственный недостаток (его впрочем легко исправить) - это то, что исходная строка уничтожается...
Код
Var
 s, max, st: String;
 p: Byte;
begin
 ReadLn(s);
 Repeat
   p := Pos('  ', s);
   If p > 0 Then Delete(s, p, 1)
 Until p = 0;

 If s[1] = ' ' Then Delete(s, 1, 1);
 If s[Length(s)] = ' ' Then
   Delete(s, Length(s), 1);

 max := '';
 Repeat
   p := Pos(' ', s); {Inc(i);}
   If p > 0 Then
     Begin
       st := Copy(s, 1, Pred(p)); Delete(s, 1, p)
     End
   Else st := s;

   If Length(max) < Length(st) Then max := st
 Until p = 0;
 WriteLn(max);
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Цитата
Здесь: ORD(s[0]) - это любимый трюк ОлегаZ

точно smile.gif он знает, он знает :D

Цитата
че то перемудрил с разнообразностью русских символов он постоянно говорит нуль..

нееет, я все проверил парежде чем выложить.
Проверял в BP7


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Цитата
введи например:
сказочка была хорошая
была хорошая сказочка
в первом случае он выдаст тебе сказочка
а во втором хорошая

оЙ!!!!!! глюк следующий: если самое последнее слово последнее, то она не учитывается.
а все из-за этого:
Код
while pos(r,s)<>0 do

простое решение пробелммы - примисать разделитель в конец строки, что бы не пришлось переделывать алгоритм.
вот так все работает:
Код
const
r=' '; {разделитель междду словами (пробел)}
var
s:string;
subs:string;
max:string;
i:byte;
begin
readln(s);
{удалим лишние разделители}
while s[1]=r do delete(s,1,1);
for i:=1 to ORD(s[0]) do if (s[i]=r) and (s[succ(i)]=r) then
begin
while s[succ(i)]=r do delete(s,succ(i),1)
end;
s:=s+r; {!!!!!!!!!!}
while pos(r,s)<>0 do
begin
subs:=copy(s,1,pos(r,s));
delete(s,1,pos(r,s));
If length(subs)>length(max) then max:=subs;
end;
writeln(max);
end.


да, есчтиь замечание по первой задаче...
вот пример строки:
fgfg{fgfghf{fgfgfg}dgffg}fgfg
здесь скорее всего надо удалить часть строки между первым { и последним } тогда для посика } надо использовать не POS (т.к. она ищет первое вхождение) а написать функцию для поиска последнего вхождения.
MapЫшKa, переделать? wub.gif :flowers:

Сообщение отредактировано: Oleg_Z -


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #21


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Кстати вот что я нашел у меня (старая лаба еще из ФМШ) :
Код
var
s:string;
b:set of char;
c:char;
begin
readln(s); s[succ(ord(s[0]))]:=chr(0);
for c:=chr(1) to s[0] do if not(s[ord(c)] in b) then begin include(b,s[ord(c)]); inc(s[succ(ord(s[0]))]) end;
writeln(ord(s[succ(ord(s[0]))]))
end.

Программа выдает количество различных букв в строке....


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Гость






Не стал создавать ещё одну тему. Результаты поиска дали ПОЧТИ то, но не то smile.gif
Так вот: Существует фаил с текстом. Предположим, text.dat. В нём нужно найти самую длинную строку, выровнять весь текст по ней и записать в фаил, допустим, vxod.dat. Дело в том, что со строками особо не работал, а разобраться с функциями времени нет(ну как всегда у студентов "пока гром не грянет..." smile.gif ). Помогите, пожалуйста.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Гость






Цитата(Diger @ 31.01.2006 9:09)
Не стал создавать ещё одну тему. Результаты поиска дали ПОЧТИ то, но не то smile.gif

Вот и приведи ссылку на то, что ты нашел, с описанием того, ЧТО именно тебя не устроило... Или за тебя еще найти надо?

Кстати, ты думаешь в том, что кто-то из нас напишет, будет намного легче разобраться, чем в функциях/процедурах работы со строками? laugh.gif Мы не изобретаем велосипеды заново, а активно пользуется готовыми наработками, и специально для тебя разжевывать алгоритм или переписывать рабочую функцию "чтобы без <этого> и вот <этого>" (нужное подставить) никому не нужно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Гость






Цитата(volvo @ 31.01.2006 10:16) *

Вот и приведи ссылку на то, что ты нашел, с описанием того, ЧТО именно тебя не устроило... Или за тебя еще найти надо?

Кстати, ты думаешь в том, что кто-то из нас напишет, будет намного легче разобраться, чем в функциях/процедурах работы со строками? laugh.gif Мы не изобретаем велосипеды заново, а активно пользуется готовыми наработками, и специально для тебя разжевывать алгоритм или переписывать рабочую функцию "чтобы без <этого> и вот <этого>" (нужное подставить) никому не нужно...

1.) Доброе утро! smile.gif Любезно, конечно, но копировать сюда ссылки с подробными комментариями, на мой взгляд, лишнее.
2.) Век открытий закончился вместе с концом 19ого и началом 20ого=) Все остальные "конструкции", в той или иной сфере, составлены из того, что уже под рукой имеется. И я прекрасно понимаю, что ничего нового не произойдёт, если мне помогут с этой программой. Единственное, чем поможет мой случай форуму - быть может, кто то наберёт в поиске ключевые слова этой задачки, найдёт её и не создаст тему, ответом на которую будет банальный копи-паст ссылки smile.gif
3.) Я не сижу закинув ноги на стол с бутылкой пива и не жду, пока мне всё напишут. Я тоже сейчас работаю с примерами в то йили иной мере, касающихся моей задачки. Я же не потребовал, я попросил, сказал пожалуйста. Если это действительно так сложно что ты не знаешь, как сделать или так просто, что не хочется писать, я не заставляю, я прошу. Но опять таки, тебе может это и просто, а я вот не разобрался.
4.) ну и последнее: за мной не заржавеет.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Гость






Может это был намёк, на то, что такая тема есть? smile.gif Щас попробую повнимательнее посмотреть.

Diger, вместо того, чтобы умничать, ты бы лучше свой же пост ВНИМАТЕЛЬНО перечитал, и сказал, ГДЕ ты подразумевал, что
Цитата
Результаты поиска дали ПОЧТИ то, но не то
... Если у нас на форуме, то мог дать ссылку, если на чужом - почему пошел против правил и НЕ воспользовался нашим поиском, прежде чем запостить вопрос?


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 

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

 





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