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

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

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

 
 Ответить  Открыть новую тему 
> Задачка на строки, :(
-Виктория-
сообщение 17.10.2005 15:44
Сообщение #1


Гость






Код
В строке посчитать по отдельности кол-во входящих в неё символов "а", "б" и "в" за менить на символ "?".
Результирующую строку и кол-во символов вывести на экран.

В программе использвать строковые переменные строкового типа.
 К началу страницы 
+ Ответить 
Altair
сообщение 17.10.2005 16:48
Сообщение #2


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

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

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


Var
s:string;
a,b,v,i:byte;
begin
write('Enter string: '); readln(s);
for i:=1 to ord(s[0]) do begin
case s[i] of
'а':begin inc(a); s[i]:='?' end;
'б':begin inc(B); s[i]:='?' end;
'в':begin inc(v); s[i]:='?' end;
end
end;
writeln(s,' ',a,' ',b,' ',v);
end.


после выполнения программы, в a,b,v соответсвенно хранится число встретившихся символов "а", "б" и "в".
Все они были заменены в строке символом "?".

Виктория, если что непонятно, спрашивайте! И вообще, почему у вас не получилось сделать? Если вы не будете стараться сделать сами, вы не научитесь! :rose:
:flowers:


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


Гость






А можно вас поправить? :D

 ...
case s[i] of
'а':begin inc( a ); s[i]:='?' end;
'б':begin inc( B ); s[i]:='?' end;
'в':begin inc( v ); s[i]:='?' end;
...

Торопились наверное smile.gif.

А ещё вопросик: почему после выполнения программы, после знаков вопроса выводит "1 1 0" и т.п.? huh.gif

И если вам нетрудно, можете подробно описать что выполняет каждая из строк sad.gif

Сообщение отредактировано: volvo - 17.10.2005 19:36
 К началу страницы 
+ Ответить 
FreeMan
сообщение 17.10.2005 17:15
Сообщение #4


-
****

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

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


Цитата
после знаков вопроса выводит "1 1 0"

сложный вопрос. могу предположить, что это кол-во "а","б" и "в" в строке


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-Виктория-
сообщение 17.10.2005 17:21
Сообщение #5


Гость






Немного изменила программу:

program vika

Var
s:string;
a,b,v,i:byte;
begin
write('Enter string: '); readln(s);
for i:=1 to ord(s[0]) do begin
case s[i] of
'а':begin inc(a); s[i]:='?' end;
'б':begin inc (Ь); s[i]:='?' end
'в':begin inc(v); s[i]:='?' end;

end
end;
writeln(s,' ',a,'а ',b,'б ',v);
end.



А вот как записать что сколько будет v затрудняюсь sad.gif.
 К началу страницы 
+ Ответить 
klem4
сообщение 17.10.2005 17:24
Сообщение #6


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Код
writeln(s, ' ', a, 'а  ' , b, 'б  ' ,v , 'в ');
? huh.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 17.10.2005 17:37
Сообщение #7


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

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

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


Вика,вы просили коментировать..


program vika
Var
s:string; {строкавая переменная}
a,b,v,i:byte; {счетчики для подсчета и счетчки для прохода построке}
begin
write('Enter string: '); readln(s); {запрос и ввод строки}
for i:=1 to ord(s[0]) do begin {проходим от 1 элепетна до длинны строки}
case s[i] of {смотрим i символ строки}
'а':begin inc(a); s[i]:='?' end; {если а, то УВЕЛИЧИВАЕМ на 1 счетчик a, ставим ?}
'б':begin inc (Ь); s[i]:='?' end;{если б, то УВЕЛИЧИВАЕМ на 1 счетчик б, ставим ?}
'в':begin inc(v); s[i]:='?' end;{если в, то УВЕЛИЧИВАЕМ на 1 счетчик в, ставим ?}
end
end;
writeln(s,' ',a,'а ',b,'б ',v,' в'); {выод результата}
end.

Думаю вопросов больше нет....


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


Гость






Altair
Спасибо! :thanks: Если что, можно я ещё буду задавать вопросики? :yes:
 К началу страницы 
+ Ответить 
Altair
сообщение 17.10.2005 18:49
Сообщение #9


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

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

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


Конечно можно, для этого мы здесь smile.gif :flowers:


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


Гость






Приветики smile.gif
Пожалуйста, объсните что значит "ord(s[0])" sad.gif
 К началу страницы 
+ Ответить 
Altair
сообщение 22.10.2005 18:36
Сообщение #11


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

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

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


можно заменить на length(s)
это выражение возвращает длинну строки текущую.
Так строка утроенна - в 0 позиции храниться длинна.
ord возвращает код символа.
так что код 0 символа это длинна...


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


Гость






Нет, заменить нельзя, тогда программа работает некорректно.
зы а всегда "0" - длина строки?
 К началу страницы 
+ Ответить 
volvo
сообщение 22.10.2005 19:29
Сообщение #13


Гость






-Виктория-, а вот с этого места, пожалуйста, поподробнее: в чем именно программа начинает вести себя некорректно?
 К началу страницы 
+ Ответить 
Altair
сообщение 22.10.2005 19:29
Сообщение #14


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

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

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


Цитата
Нет, заменить нельзя, тогда программа работает некорректно.

чего?....
я сказал -
ORD(s[0]) РАВНОСИЛЬНО выражению
length(s)
причем второе логичнее и правильнее!

и вообще вопросы пошли несущественные...
про строки читаем здесь:
http://forum.pascalnet.ru/index.php?showtopic=2361

Сообщение отредактировано: Altair - 22.10.2005 19:29


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


Гость






А как решить следующую задачу:
Код
Определить сколько раз в строке встречается определённое слово, определить номера позиций вхождения в исходную строку и вывести их на экран.


Пыталась решить её подобным способом, но ничего не получилось sad.gif
 К началу страницы 
+ Ответить 
volvo
сообщение 23.10.2005 18:09
Сообщение #16


Гость






Эта задача не должна решаться "подобным способом"... Используй Pos(subs, s) для поиска заданного слова в строке (возвращает позицию подстроки subs в строке s). Как только Pos вернет 0, значит нет больше вхождений.

Но для того, чтобы не зациклить программу нужно принимать определенные меры... smile.gif

P.S. В поиске по форуму посмотри, там было что-то ОЧЕНЬ похожее...
 К началу страницы 
+ Ответить 
-Виктория-
сообщение 23.10.2005 18:26
Сообщение #17


Гость






Да ничего я не понимаю sad.gif блин sad.gif
 К началу страницы 
+ Ответить 
volvo
сообщение 23.10.2005 18:48
Сообщение #18


Гость






Цитата(-Виктория- @ 23.10.2005 17:26)
Да ничего я не понимаю sad.gif блин  sad.gif

А как ты думаешь, если я тебе дам готовое решение, ты будешь понимать больше? Ну, посмотрим:
var
s, wrd: string;
first, p: integer;
begin
s := 'start finish start start end begin';
wrd := 'start';
first := 0;
repeat
p := pos(wrd, copy(s, first + 1, 255));
if p > 0 then begin
writeln('position ', first + p);
inc(first, p + length(wrd));
end;
until p = 0;
end.

Разбирайся...
 К началу страницы 
+ Ответить 
-Виктория-
сообщение 23.10.2005 19:52
Сообщение #19


Гость






Вот как я поняла:

var
s, wrd: string;
first, p: integer; {описания переменных}
begin
s := 'start finish start start end begin'; {строка откуда берётся слово}
wrd := 'start'; {само слово}
first := 0; {начальному значению присваиваем 0}
repeat {цикл с постусловием, операторы повторяются, пока выражение ложное, если становится истинным - цикл завершается}
p := pos(wrd, copy(s, first + 1, 255)); {мда ... споткнулась :(}
if p > 0 then begin
writeln('position ', first + p);
inc(first, p + length(wrd));
end;
until p = 0;
end.
 К началу страницы 
+ Ответить 
Altair
сообщение 23.10.2005 21:13
Сообщение #20


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

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

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


Цитата
Вот как я поняла:

я это понимаю так - ты ничего не поняла.. потом учто совсем не обязательно писать что repeat это
Цитата
цикл с постусловием, операторы повторяются, пока выражение ложное, если становится истинным - цикл завершается

то что ты написала в данном случае полнейший бред, который можно было заменить на одну фразу
Цитата
повторять пока находятся вхождения

----------


Цитата
{мда ... споткнулась :  ( }

на
записать в p позицию с которйо начинется вхождение wrd в строку s , обрезанную спереди на first символов...

а логика программы - урезая строку спереди, путем копирвоания, подситываем кол-во вхождений (пос возвращет номер 1 вхождения, поэтому обрезаем спереди), в строку...
вот и все.

тебя прежупреждали что не поймешь.. все от лени делать что либо самой..

ЗЫ: попала под мою горячую руку и плохое настроение! angry.gif


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

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

 



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