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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Строки, Подсчитать....
сообщение
Сообщение #1


Пионер
**

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

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


Строка символов представляет собой предложение,написанное на русском языке.Предложение имеет длину не более 100 символов и заканчивается точкой.Подсчитать количество различных букв,которые входят в это предложение.

Вот есть подобная задача.только с повторением слов.Что там надо исправить,чтобы всё работало?

помогите.Со строками у меня проблемы(

program k_3;
var
a:array [1..20] of string;{массив слов}
b:array [1..20] of byte;{Массив счетчиков появления слов}
r,i,j,k:byte;
st,st1:string;
Begin
WriteLn('Введите строку слов');
ReadLn(st);
k:=0;{индекс для перемещения по массиву слов и массиву счётчиков}
r:=1;
while r<= length(st) do
begin
while(st[r]='') and (i<=length(st)) do
r:=r+1;
j:=r; {Левая граница слова}
while (st[r]<>'') and (r<=length(st)) do
r:=r+1; {Правая граница слова}
st1:=copy(st,j,r-j);

{Поиск слова в массиве слов - а}
i:=1;
while (i<=20) and (a[i]<>st1) do
i:=i+1;

{Анализируем значение индекса i}
if i>20 then
begin
k:=k+1;
b[k]:=b[k]+1;
a[k]:=st1;
end
else
b[i]:=b[i]+1;
end;
WriteLn('В массиве (а) ',k,' различных слов ');
writeln('Частота появления каждого слова ');
for i:=1 to k do
writeln(a[i],' ',b[i]);
END.

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


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


С буквами намного проще smile.gif
По условию можно пользоваться множествами?
К=к? или это разные буквы?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


нет там берется строка слов.
проверяются слова,буквы заносяся в массив слов,если буква присутствует,то её больше не надо заносить в массив.К=к одинаковые буквы.кароче надо только подсчитать кол-во различных букв,которые входят в предложение.А предложение заканчивается точкой.т. наверное надо делать до точки!

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


Пионер
**

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

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


ээээм....Никто не знает?!?!?!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

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

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


Цитата(Rom1k @ 6.05.2007 15:20) *

ээээм....Никто не знает?!?!?!

Чтобы исправить твою программу достаточно убрать while, который ищет правую границу слова, т.е.
   j:=r; {Левая граница слова}
while (st[r]<>'') and (r<=length(st)) do
r:=r+1; {Правая граница слова}
st1:=copy(st,j,r-j);

заменить на:
   j:=r; {Левая граница слова}
r:=r+1; {Правая граница слова}
st1:=copy(st,j,r-j);

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


Пионер
**

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

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


А можешь помочь сделать с помощью множества или хотя-бы объяснить,как это делается?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

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

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


Цитата(Rom1k @ 6.05.2007 15:40) *

А можешь помочь сделать с помощью множества или хотя-бы объяснить,как это делается?


Объявляешь множества, b-для проверки, al - весь алфавит:
b,al: set of char;


дальше:


i:=1; count:=0; b:=[];
al:=[алфавит заносишь сюда];
repeat
if (s[i] in al) and not(s[i] in b) then begin
inc (count); b:=b+[s[i]];
end;
inc (i);
until (i>length(s)) or (s[i]='.');
..


и все.. К<>к пока, немного доработать надо будет.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

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

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


щас попробую сделать,не получится,напишу.спасибо заранее

Добавлено через 8 мин.
не могу все это реализовать в программе.куда это надо вставить в моей программе,скажите пожалуйста!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

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

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


Это практически вся программа, нужно только добавить описания переменных, ввод строки (readln (s)) и вывод результата (writeln (count)).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

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

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


Цитата
b:=[];
al:=[алфавит заносишь сюда];

вот это не могу понять??? blink.gif wacko.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Помощник капитана
****

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

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


Ну я так понял,что:
al:=['a'..'z'];

И так у тебя в множестве весь алфавит будет...

2 volvo успел отредоктировать! smile.gif

Сообщение отредактировано: Артемий -


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Артемий
Не будет... То, что сделал ты - не заполнение множества...

AL := ['а' .. 'п', 'р' .. 'я', 'А' .. 'Я'];
Вот это - заполнение... При том, что алфавит должен быть русским, как следует из условия...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

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

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


вот то,что я написал.Что там может быть не правильно?

что-то я вообще не могу понять,что к чему( mega_chok.gif

program k_3;
var
a:array [1..20] of string;
n,al:set of char;
r,i,j,k,count,b:byte;
st,st1:string;
Begin
WriteLn('введите строку слов,признак окончания-точка');
ReadLn(st);

i:=1; count:=0; b:=0;
al:=[];
repeat
if (st[i] in al) and not(st[i] in b) then begin
inc(count);
b:=b+[s[i]];
end;
inc(i);
until(i>length(s)) or (s[i]:='.');
writeln(count)
END.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Помощник капитана
****

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

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


А так?
program ad;
uses crt;
var
b,al:set of char;
r,i,j,k,count: integer;
st,st1:string;
Begin
WriteLn('введите строку слов,признак окончания-точка');
ReadLn(st);
i:=1; count:=0; b:=[];
al:=['а' .. 'п', 'р' .. 'я', 'А' .. 'Я'];
repeat
if (st[i] in al) and not(st[i] in b) then begin
inc(count);
b:=b+[st[i]];
end;
inc(i);
until(i>length(st)) or (st[i]='.');
writeln(count)
END.


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Пионер
**

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

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


он мне выводит 14,а задание было подсчитать количество различных букв,которые входят в это предложение.
т.е,если я ввожу :

"Привет, как дела."

он мне должен говорить,что:

Букв "о" - 5, Букв "н" - 3 и т.д....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Помощник капитана
****

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

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


Кстати воспользуйся поиском,подобная задача уже была.


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Пионер
**

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

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


искал я...что-то ничего похожего.А вы не можете помочь мне её решить,очень надо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Помощник капитана
****

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

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


Например,мой рейтинг,ссылка Текстовый файл.


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Профи
****

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

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


Тогда чуть иначе:
var 
al:set of char;
i: integer;
st:string;
c:char;
b:array [char] of byte;
Begin
fillchar (b,sizeof (b),0);
WriteLn('введите строку слов,признак окончания-точка');
ReadLn(st);
i:=1; al:=['а' .. 'п', 'р' .. 'я', 'А' .. 'Я'];
repeat
if (st[i] in al) then inc(b[st[i]]);
inc(i);
until(i>length(st)) or (st[i]='.');
for c:=#0 to #255 do if b[c]>0 then writeln (c,'-',b[c]);
end.

Двоякое условие, пояснять надо..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Пионер
**

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

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


спасибо тебе огромное!!!!! Сейчас буду разбираться,как работает! rolleyes.gif

Добавлено через 2 мин.
ой...А он мне и большие буквы считывает как за отдельные символы.Как сделать,чтобы и большая и маленькая буква были одинаковы???


Добавлено через 2 мин.
да,ещё вопрос.ЧТо значит fillchar (b,sizeof (b),0); ???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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