|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.10.2011, 17:31 | #1 |
Пользователь
Регистрация: 22.10.2011
Сообщений: 12
|
Паскаль: необычный цикл
Здравствуйте! Есть задача: "Определить, сколько различных символов входит в заданный текст, содержащий не более 100 символов и оканчивающийся точкой (в сам текст точка не входит)."
Я решил создать счетчик "разных символов", но столкнулся с необходимостью создать цикл, который сначала пробегает по первому элементу строки, затем по первому и второму, затем по первому, второму, третьему, и так далее. Но в паскале в цикле for число итераций задается всего один раз, и изменять его нельзя. Что делать? Заранее спасибо. |
26.10.2011, 17:36 | #2 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Есть такой фокус - карта символов. Если у нас символы однобайтовые, заводим массив из 256 переменных, изначально нулей. Читаем текст посимвольно, и для каждого символа прибавляем единичку к соответствующему элементу массива. В финале имеем полную статистику, осталось вывести ненулевые элементы с соответствующими им символами.
|
26.10.2011, 17:46 | #3 |
Пользователь
Регистрация: 22.10.2011
Сообщений: 12
|
"Читаем текст посимвольно, и для каждого символа прибавляем единичку к соответствующему элементу массива" - а как определить для каждого символа, в какой именно элемент массива плюсовать единичку?
|
26.10.2011, 17:47 | #4 |
Регистрация: 26.10.2011
Сообщений: 3
|
как решить задачу найти сумму цифр числа 5655
|
26.10.2011, 17:52 | #5 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
proser93,
Мы прочитали символ c. Эта переменная может быть рассмотрена как число (собственно, она и есть число, от 0 до 255 по всей видимости); в частности, её можно использовать как индекс в массиве - statistics[c] := statistics[c] + 1 (благо символ с кодом 0 нам вряд ли введут). Как это синтаксически проделать - увы, вопрос не ко мне, Паскаль знаю плохо. денис80, 0) Новые вопросы задаются в новых темах обычно. 1) Ответ - 21. |
26.10.2011, 17:57 | #6 |
Регистрация: 26.10.2011
Сообщений: 3
|
спасибо огромное а можно еще дну задачку задать
|
26.10.2011, 18:05 | #7 |
Пользователь
Регистрация: 22.10.2011
Сообщений: 12
|
вот, есть предположение, так пойдет?
пусть строка s, p,i,n,dif - целые тогда n:=length(s)-1; (так как точку не надо учитывать) p:=0; - переменная количества итераций в цикле dif:=0; - количество разных символов (счетчик) while p<>n do begin p:=p+1; i:=0; while i<>(p+1) do begin if s[p+1] <> s[i] then dif:=dif+1; - если последний из доступного ряда не равен ни одному из предыдущих, увеличиваем счетчик на 1 i:=i+1 end end write(dif); |
26.10.2011, 18:08 | #8 |
Пользователь
Регистрация: 22.10.2011
Сообщений: 12
|
и еще вопрос: символов в паскале не может быть больше 255?
ведь ещё мб могут вводиться русский буквы... |
27.10.2011, 12:25 | #9 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,883
|
Das русский буквы sind nicht verboten вводиться ) Но это нисколько не мешает их использовать в качестве индексов массива.
Делаем так : заведем массив на 256 элементов: Код:
Код:
Вывод количества конкретных символов стоит ограничить : во-первых убрать символы с нулевым вхождением Код:
Код:
Последний раз редактировалось phomm; 27.10.2011 в 12:29. |
27.10.2011, 17:30 | #10 |
Форумчанин
Регистрация: 15.03.2011
Сообщений: 272
|
Эм. ТС, возможно, я неправильно понял задание, но не проще ли использовать множество?
что-то типа: Код:
Последний раз редактировалось Sna1L; 27.10.2011 в 17:33. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
необычный счетчик | grom333 | Помощь студентам | 4 | 26.05.2011 21:31 |
Необычный спам | mutabor | Свободное общение | 3 | 05.02.2010 23:44 |
Немного необычный поиск в TMemo | RIO | Общие вопросы Delphi | 8 | 30.07.2009 02:12 |
необычный ProgressBar | andrey4623 | Общие вопросы Delphi | 3 | 27.12.2007 19:25 |