Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 29.10.2011, 15:23   #1 (permalink)
Ильгиза
Member
 
Регистрация: 08.10.2011
Сообщений: 49
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Строка

Здравствуйте!!!Помогите пожалуйста решить!(((

Дана строка, состоящая из символов. Определить сколько в ней символов '*',';',':'
Со строкой надо работать как с единым объектом: использовать строковые процедуры и функции.


Заранее большое спасибо!!!
Ильгиза вне форума   Ответить с цитированием

Старый 29.10.2011, 15:23
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Возможно, что проблема уже решена кем то из пользователей

Командная строка Bash
Призрак - бегущая строка
Бегущая строка в воздухе. Призрак

Старый 29.10.2011, 15:57   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ильгиза, я, конечно, догадываюсь, что подразумевается (по всей вероятности) Паскаль, однако ЯП следует указывать. Особенно размещая запросы в этом разделе. Впрочем, я могу и ошибаться - недавно вот тоже решил, что нужен Паскаль, сочинил программку, а выяснилось, что требуется, видите ли, С++. А об сообщить эту информацию - ну никак! Имейте хоть толику уважения к тем, кто старается помочь.
Vladimir_S вне форума   Ответить с цитированием
Старый 29.10.2011, 16:43   #3 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Вычислительная часть программы на языке Pascal:
Код:
n:=0;
for i:=1 to length(s) do
if (s[i] in ['*',':',';']) then inc(n);
writeln(n);
Отальное допишите сами
AlexZir вне форума   Ответить с цитированием
Старый 06.11.2011, 17:05   #4 (permalink)
Ильгиза
Member
 
Регистрация: 08.10.2011
Сообщений: 49
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Строка, паскаль

Здравствуйте! Не можете ли вы предложить иной вариант решения данной задачи, кроме этой:


n:=0;
for i:=1 to length(s) do
if (s[i] in ['*',':',';']) then inc(n);
writeln(n);

Дана строка, состоящая из символов. Определить сколько в ней символов '*',';',':'
Со строкой надо работать как с единым объектом: использовать строковые процедуры и функции.
Ильгиза вне форума   Ответить с цитированием
Старый 06.11.2011, 17:41   #5 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

А чем вам не понравилось это решение? В нем используются строковые функции length(s) - определение длины строки, и s[i] - обращение к i-ому символу строки. Если i-тый символ строки равен одному из символов, принадлежащих указанному в условии множеству, то счетчик числа символов увеличивается на 1. Полный вариант решения следующий:
Код:
var i,n:integer;
s:string;
begin
writeln('Enter string');
readln(s);
n:=0;
for i:=1 to length(s) do
if (s[i] in ['*',':',';']) then inc(n);
writeln('Char *,:,; in string ', n);
readln
end.
Как гласит программистская мудрость, у каждой задачи есть минимум два решения, на мой взгляд, вышеприведенное является оптимальным. Но можно это дело представить и по-другому:
Код:
var i,n:integer;
s:string;
begin
writeln('Enter string');
readln(s);
n:=0;
for i:=1 to length(s) do
if (s[i]='*') or (s[i]=';') or (s[i]=':') then inc(n);
 writeln('Chars *:; in string ', n);
readln
end.
Как видите, разница не сильно большая, но в первом случае обращение к строке производится только 1 раз, а во втором случае - трижды считывается i-ый элемент, что немного замедляет выполнение программы. Первый вариант решения более гибкий, во множество легко добавить или из него удалить символы, которые нужно анализировать. Плюс во втором листинге использованы логические операторы, каждый из которых также замедляет программу. Ну и если нужно будет добавить новые символы для анализа, то условие будет слишком длинным, что просто неудобочитаемо и некрасиво

P.S. А что вы имеете в виду под:
Цитата:
Сообщение от Ильгиза Посмотреть сообщение
Со строкой надо работать как с единым объектом:
??? С точки зрения программирования, строка это своего рода массив символов, каждый из которых имеет свой порядковый номер. Строка уже по своему определению никак не может быть единым объектом. И еще, допустим, что есть возможность работать со строкой как с единым объектом, тогда возникает парадокс: разбивать строку на символы по условию мы не имеем права, а в задании нужно подсчитать количество именно символов, это взаимно исключающие действия. Как тогда, по вашему, должна решаться эта задача?
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 13:40.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.