• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Строка

Ильгиза

Новые
Регистрация
8 Окт 2011
Сообщения
49
Реакции
0
Баллы
0
Строка

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

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


Заранее большое спасибо!!!
 
Ильгиза, я, конечно, догадываюсь, что подразумевается (по всей вероятности) Паскаль, однако ЯП следует указывать. Особенно размещая запросы в этом разделе. Впрочем, я могу и ошибаться - недавно вот тоже решил, что нужен Паскаль, сочинил программку, а выяснилось, что требуется, видите ли, С++. А об сообщить эту информацию - ну никак! Имейте хоть толику уважения к тем, кто старается помочь.
 
Вычислительная часть программы на языке Pascal:
Код:
n:=0;
for i:=1 to length(s) do
if (s[i] in ['*',':',';']) then inc(n);
writeln(n);
Отальное допишите сами :))
 
Строка, паскаль

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


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

Дана строка, состоящая из символов. Определить сколько в ней символов '*',';',':'
Со строкой надо работать как с единым объектом: использовать строковые процедуры и функции.
 
А чем вам не понравилось это решение? В нем используются строковые функции length(s) - определение длины строки, и s - обращение к 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. А что вы имеете в виду под:
Со строкой надо работать как с единым объектом:
??? С точки зрения программирования, строка это своего рода массив символов, каждый из которых имеет свой порядковый номер. Строка уже по своему определению никак не может быть единым объектом. И еще, допустим, что есть возможность работать со строкой как с единым объектом, тогда возникает парадокс: разбивать строку на символы по условию мы не имеем права, а в задании нужно подсчитать количество именно символов, это взаимно исключающие действия. Как тогда, по вашему, должна решаться эта задача?
 
Назад
Сверху