Результирующую строку и кол-во символов вывести на экран.
В программе использвать строковые переменные строкового типа.
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
-Виктория- |
![]() ![]()
Сообщение
#1
|
Гость ![]() |
Код В строке посчитать по отдельности кол-во входящих в неё символов "а", "б" и "в" за менить на символ "?". Результирующую строку и кол-во символов вывести на экран. В программе использвать строковые переменные строкового типа. |
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
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: -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
-Виктория- |
![]()
Сообщение
#3
|
Гость ![]() |
А можно вас поправить? :D
...
case s[i] of
'а':begin inc( a ); s[i]:='?' end;
'б':begin inc( B ); s[i]:='?' end;
'в':begin inc( v ); s[i]:='?' end;
...
Торопились наверное ![]() А ещё вопросик: почему после выполнения программы, после знаков вопроса выводит "1 1 0" и т.п.? ![]() И если вам нетрудно, можете подробно описать что выполняет каждая из строк ![]() Сообщение отредактировано: volvo - |
FreeMan |
![]()
Сообщение
#4
|
- ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата после знаков вопроса выводит "1 1 0" сложный вопрос. могу предположить, что это кол-во "а","б" и "в" в строке -------------------- бб
|
-Виктория- |
![]()
Сообщение
#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 затрудняюсь ![]() |
klem4 |
![]()
Сообщение
#6
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Код writeln(s, ' ', a, 'а ' , b, 'б ' ,v , 'в '); ? ![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Altair |
![]() ![]()
Сообщение
#7
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Вика,вы просили коментировать..
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.
Думаю вопросов больше нет.... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
-Виктория- |
![]()
Сообщение
#8
|
Гость ![]() |
Altair
Спасибо! :thanks: Если что, можно я ещё буду задавать вопросики? :yes: |
Altair |
![]()
Сообщение
#9
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Конечно можно, для этого мы здесь
![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
-Виктория- |
![]()
Сообщение
#10
|
Гость ![]() |
Приветики
![]() Пожалуйста, объсните что значит "ord(s[0])" ![]() |
Altair |
![]()
Сообщение
#11
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
можно заменить на length(s)
это выражение возвращает длинну строки текущую. Так строка утроенна - в 0 позиции храниться длинна. ord возвращает код символа. так что код 0 символа это длинна... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
-Виктория- |
![]()
Сообщение
#12
|
Гость ![]() |
Нет, заменить нельзя, тогда программа работает некорректно.
зы а всегда "0" - длина строки? |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
-Виктория-, а вот с этого места, пожалуйста, поподробнее: в чем именно программа начинает вести себя некорректно?
|
Altair |
![]() ![]()
Сообщение
#14
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата Нет, заменить нельзя, тогда программа работает некорректно. чего?.... я сказал - ORD(s[0]) РАВНОСИЛЬНО выражению length(s) причем второе логичнее и правильнее! и вообще вопросы пошли несущественные... про строки читаем здесь: http://forum.pascal.net.ru/index.php?showtopic=2361 Сообщение отредактировано: Altair - -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
-Виктория- |
![]()
Сообщение
#15
|
Гость ![]() |
А как решить следующую задачу:
Код Определить сколько раз в строке встречается определённое слово, определить номера позиций вхождения в исходную строку и вывести их на экран. Пыталась решить её подобным способом, но ничего не получилось ![]() |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Эта задача не должна решаться "подобным способом"... Используй Pos(subs, s) для поиска заданного слова в строке (возвращает позицию подстроки subs в строке s). Как только Pos вернет 0, значит нет больше вхождений.
Но для того, чтобы не зациклить программу нужно принимать определенные меры... ![]() P.S. В поиске по форуму посмотри, там было что-то ОЧЕНЬ похожее... |
-Виктория- |
![]()
Сообщение
#17
|
Гость ![]() |
Да ничего я не понимаю
![]() ![]() |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Цитата(-Виктория- @ 23.10.2005 17:26) Да ничего я не понимаю ![]() ![]() А как ты думаешь, если я тебе дам готовое решение, ты будешь понимать больше? Ну, посмотрим: 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.
Разбирайся... |
-Виктория- |
![]()
Сообщение
#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 |
![]() ![]()
Сообщение
#20
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата Вот как я поняла: я это понимаю так - ты ничего не поняла.. потом учто совсем не обязательно писать что repeat это Цитата цикл с постусловием, операторы повторяются, пока выражение ложное, если становится истинным - цикл завершается то что ты написала в данном случае полнейший бред, который можно было заменить на одну фразу Цитата повторять пока находятся вхождения ---------- Цитата {мда ... споткнулась : ( } на записать в p позицию с которйо начинется вхождение wrd в строку s , обрезанную спереди на first символов... а логика программы - урезая строку спереди, путем копирвоания, подситываем кол-во вхождений (пос возвращет номер 1 вхождения, поэтому обрезаем спереди), в строку... вот и все. тебя прежупреждали что не поймешь.. все от лени делать что либо самой.. ЗЫ: попала под мою горячую руку и плохое настроение! ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
![]() |
Текстовая версия | 22.04.2025 16:52 |