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

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

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

 
 Ответить  Открыть новую тему 
> сложная задача на подпрограмму, используется символьный массив
сообщение
Сообщение #1


Гость






Требуется ваша помощь в решении этой задачи:

Дан символьный массив. Определить , используя подпрограмму , какие символы встречаются 2 раза , 3 раза , к раз. Повторяющиеся символы и количество их повторений вывести на экран.

Немогу составить процедуру , возникает проблема с символами которые повторяются больше 2 - ух раз , незнаю как реализовать ... требуется ваша помощь , спасибо тому кто поможет в решении

 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

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

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


http://forum.sources.ru/index.php?showtopic=211946
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
Немогу составить процедуру , возникает проблема с символами которые повторяются больше 2 - ух раз , незнаю как реализовать
Просто:

var
counts: array[char] of integer;

procedure print_chars(k: integer);
var i: char;
begin
for i := #0 to #255 do
if counts[i] = k then write(i);
end;

begin
{ здесь - заполнение массива counts ... }
...
print_chars(2);
print_chars(3);
print_chars(4);
...
end.


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

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Массив из символов , запоняться должен с клавиатуры ... допустим массив "a a gh pg g p p p g b" из 10 элеметнов , после выполнения программы должно выводиться на экран "a - 2 раза" , "p - 3 раза" ну и соответсвенное если бы был символ повторяющийся 4 раза, то воводился бы и он.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гуру
*****

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

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


Цитата(Гость @ 8.12.2007 20:12) *

Массив из символов , запоняться должен с клавиатуры ... допустим массив "a a gh pg g p p p g b" из 10 элеметнов , после выполнения программы должно выводиться на экран "a - 2 раза" , "p - 3 раза" ну и соответсвенное если бы был символ повторяющийся 4 раза, то воводился бы и он.

Нет, тебя не об этом спросили.
Попросили привести фрагмент программы заполнения символьного массива, написанного тобой.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






извиняюсь , не понял вопроса сразу smile.gif



program abc;
var a:array [1..10] of string;
...
for i:=1 to 10 do
readln(a[i]);

 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Volvo , объесни пожалуйста как нужно заполнять массив для нахождения в нём символов
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Ты сам-то понял, что у тебя написано: В задании сказано, что есть символьный массив, ты показываешь код с массивом строк... И как это понимать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






извиняюсь , ошибочка вышла ... писал ночью , попутал чтото ... массив должен быть и в правду Char
Расскажи как нужно его заполнить и в чём суть вот этой строки в процедуре
Код
  for i := #0 to #255 do
if counts[i] = k then write(i);


 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Мне надоело бороться с тобой. Поскольку я так и не увидел, как именно ты хотел заполнять массив - напишу свой вариант:
var
counts: array[char] of integer;

procedure print_chars(k: integer);
var i: char;
begin
{ этой строкой перебираем все символы алфавита }
for i := #0 to #255 do
if counts[i] = k then write(i);
writeln; { добавлено... Чтоб красивее было... }
end;

var
a: array [1..10] of char;
i: integer;

begin
i := 0;
{ ввод строки - постарайся не вводить больше 10 символов, а то будут проблемы }
while not eoln do begin
inc(i);
read(a[i]);
end;
readln;

{ вот так заполняем массив-счетчик }
for i := 1 to 10 do inc(counts[a[i]]);

write('2: '); print_chars(2);
write('3: '); print_chars(3);
write('4: '); print_chars(4);
end.

Суть в том, что массив counts индексируется не числом, а символом, то есть, count['a'] после заполнения будет содержать количество символов 'a' в массиве, и т.д.

В процедуре - пробегаем по всем символам таблицы ASCII, начиная от #0 (символа с кодом 0), заканчивая #255 (соответственно, символом с кодом 255), и проверяем, равен ли счетчик повторений очередного символа переданному в процедуру значению. Если равен - то печатаем символ... Поскольку символы (в стандартной кодировке 866) расположены по алфавиту в порядке возрастания кодов, и пробегаем мы по всем символам тоже в порядке возрастания их кодов, то и выведенные символы будут упорядочены по алфавиту...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Volvo , спасибо за помощь , но твоя программа ищет в массиве только повторения символа "k" , а в условие нужно найти повторение любых символов введённых с клавиатуры , т.е. вводим 10 любых символов (какие символы в условие не оговоренно) и программы выдаёт какие символы повторяются 2 и т.д. раз например
вводим с клавиатуры массив "a b a d a b d i d d" на экране выдаётся "2: b" "3: a" "4: d" , вот в этом и проблема ... как реализовать это я даже не представляю , учусь только первый семестр ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

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


посмотри здесь, мож поможет Помогите решить, я что-то туплю
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Цитата
программа ищет в массиве только повторения символа "k" , а в условие нужно найти повторение любых символов введённых с клавиатуры
Да ты что? "А мужики-то не знают" (С) blink.gif Моя программа ищет в массиве (который ты, кстати, заполняешь неправильно! У тебя 10 символов - максимально, ты же вводишь 19!!! Теперь ты понимаешь, ПОЧЕМУ я все время добивался от тебя информации, КАК ты наконец заполняешь массив? Чтоб ты потом не сказал, что моя же программа неправильно работает!) все символы, которые встречаются К раз, а не все символы "К". Это во-первых. А во-вторых, никто не мешает вызвать процедуру в цикле:
  for i := 2 to 10 do begin { Ну, можно и не до 10, а до скольки нужно... }
write(i, ': '); print_chars(i);
end;

 К началу страницы 
+ Ответить 

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

 





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