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

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

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

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


Гость






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

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


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

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

Репутация: -  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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


-
****

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

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


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

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


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


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

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

Репутация: -  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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






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


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

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

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


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


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


Гость






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


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

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

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


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


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


Гость






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


Гость






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


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

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

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


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

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

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

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


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


Гость






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


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


Гость






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

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

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


Гость






Да ничего я не понимаю sad.gif блин sad.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.

Разбирайся...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


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

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

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


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

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

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

----------


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

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

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

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

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


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

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

 



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