Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2010, 08:27   #1
Defender42
Пользователь
 
Регистрация: 27.12.2008
Сообщений: 89
По умолчанию ошибка,паскаль

Код:
PROGRAM PRIM;
var s:string;
    b:string;
    n,i,j,k:integer;
begin
writeln('vvedute text');
readln(s);
n:=length(s);
for j:= 1 to n do
begin
b:=s[j];
begin
k:=0;
for i:= 1 to n do
if s[i]=b then
k:=k+1;
writeln(' ',b,'=',k);
readln;
end;
end;
end.
Прога считает сколько букв в данном тексте,текст вводим с клавиатуры,
Например:
Вводим текст "qtwteqtye
при выводе будет писать
q=2
t=3
w=1
t=3
e=2
q=2
t=3
y=1
e=2
как сделать что бы при выводе ответа буквы не повторялись?
Defender42 вне форума Ответить с цитированием
Старый 23.05.2010, 09:57   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так не проще?
Код:
var CntArr : array[0..255] of integer;
  s:string;
  i : integer;
begin
  {обнулим массив с счётчиками букв}
  for i:=0 to 255 do CntArr[i]:=0;

  writeln('vvedute text');
  readln(s);

  {подсчёт количества букв}
  for i:= 1 to length(s) do
     CntArr[ord(s[i])] := CntArr[ord(s[i])] + 1;

  {вывод результатов подсчёта}
  for i:=0 to 255 do
    if CntArr[i]>0 then WriteLn('Буква ',chr(i), ' встречается ', CntArr[i]:1,' раз.' )

  Readln;
end.
________________
Добавлено

В принципе, нет ничего сложного, чтобы чуток доделать Ваш код, чтобы он проверял, была ли такая буква раньше..
Это можно сделать множеством способов.
например,
— через использование множества
Код:
var sDone : set of char;
... 
  sDone := [];
  ...
  в цикле, 
    if b[1] not in sDone then .... считаем и выводим букву, потом Include(sDone, b[1])
— можно через функцию Pos проверять наличие анализируемой буквы в строке s, если её позиция меньше, чем текущая позиция (у Вас текущая позиция в переменной j), то значит буква была ранее и выводить её не надо.

— можно все обработанные буквы "складывать" в отдельную переменную типа string и проверять наличие очередной буквы в этой строке.

p.s. Лучше всего использовать однопроходный вариант с массивом счётчиком (мой первый пример выше).
Но, если Вам вдруг, по какой-то причине, всё же нужно свой вариант доделать, тогда используйте множество, это самый эффективный способ в Вашем случае.

Последний раз редактировалось Serge_Bliznykov; 23.05.2010 в 10:13.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.05.2010, 10:34   #3
Defender42
Пользователь
 
Регистрация: 27.12.2008
Сообщений: 89
По умолчанию

т.е. получится:
PROGRAM PRIM;
var s:string;
b:string;
sDone : set of char;

n,i,j,k:integer;
begin
writeln('vvedute text');
readln(s);
n:=length(s);
for j:= 1 to n do
begin
b:=s[j];
begin
sDone := [];
k:=0;
if b[1] not in sDone the
for i:= 1 to n do
if s[i]=b then
k:=k+1;
writeln(' ',b,'=',k);
readln;
Include(sDone, b[1])
end;
end;
end.

И еще вопрос в твоем коде CntArr это оператор или переменная?
Defender42 вне форума Ответить с цитированием
Старый 23.05.2010, 12:15   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
И еще вопрос в твоем коде CntArr это оператор или переменная?
В коде приведённом выше это переменная.
Код:
var CntArr : array[0..255] of integer;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
паскаль, ошибка wrmarw Помощь студентам 5 10.05.2010 20:45
Паскаль. Оператор FOR. ошибка!!! Viktory.nvrn Помощь студентам 3 29.03.2010 16:31
Ошибка ввода записи. Паскаль Базиля Помощь студентам 10 10.01.2010 21:53
Ошибка в программе с процедурами. Паскаль rooman90 Помощь студентам 1 03.04.2009 00:37
Вчем ошибка?(Паскаль) NTFS Помощь студентам 1 03.04.2008 08:58