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

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

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

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





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

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


Дано условие:
Вводится последовательность слов. Определите, какое количество слов потребуется, чтобы задействовать все буквы английского (русского) алфавита. Ввод слов оканчивается, когда задействованы все буквы.

Я только не могу понять - Вводится последовательность слов - это кем должно вводиться последовательность, мной в самом коде или пользователем? Помогите разобраться
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

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

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


Да уж наверное пользователем
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Цитата
Да уж наверное пользователем

Я тоже так думаю...
Цитата
Вводится последовательность слов. Определите, какое количество слов потребуется, чтобы задействовать все буквы английского (русского) алфавита. Ввод слов оканчивается, когда задействованы все буквы.

Что такое слово и как оно вводится?

Вот решения (для английского алфавита), но оно имеет глюк: без этой строки

alph[0]:=chr(26);

переменной alph не присваивается значений wacko.gif
Почему?
uses crt;
var alph:string; s:string;
i,j,n:byte;
f: set of 'a'..'z';
begin
clrscr;
f:=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
n:=0;
alph:='';
j:=0;
writeln('Enter the words');
s:='';
alph[0]:=chr(26);
repeat
readln(s);
for i:=1 to length(s) do
begin
if (s[i] in f) and (pos(s[i],alph)=0) then
begin
inc(j);
alph[j]:=s[i];
end;
end;
inc(n);
until j>=26;
writeln('Number : ',n);
readln;
end.


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
переменной alph не присваивается значений
Вот тебе еще одна причина не пользоваться грязным хаком smile.gif

При работе со строками никогда не прикасайся к нулевому символу !!! В FPC, например, такая программа откажется компилироваться...

Покажи мне в своей программе, где ты заполняешь строку alph значениями? Вот это:
alph[j]:=s[i];
- не в счет, здесь ты меняешь какой-то определенный символ, а это не совсем корректно (с учетом того, КАК ты в начале изменил длину строки)...

Насколько я вижу, правильным вариантом будет такой:
uses crt;
var
alph:string; s:string;
i,j,n:byte;
f: set of 'a'..'z';
begin
clrscr;
f:=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
n:=0;
alph:='';
j:=0;
writeln('Enter the words');
s:='';
// alph[0]:=chr(26);
repeat
readln(s);
for i:=1 to length(s) do begin
if (s[i] in f) and (pos(s[i],alph)=0) then begin
// inc(j);
// alph[j]:=s[i];
alph := alph + s[i]; // Эквивалентная замена, но корректная !!!
end;
end;
inc(n);
until j>=26;
writeln('Number : ',n);
readln;
end.


(Не тестировал, но по-моему, должно работать)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Большое спасибо за объяснение good.gif Не первый раз делаю такую ошибку, теперь
наконец-то понял из-за чего она возникает... yes2.gif

Цитата
(Не тестировал, но по-моему, должно работать)

until j>=26;

Так как убрана переменная j, то надо поминять и цикл...
until length(alph)>=26;


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

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

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


По идее, раз задание на множества, то и делать надо через множества, примерно вот так:
type sett=set of 'a'..'z';
var f,z:sett;
i:integer;
c:char;
s:string;
begin
for c:='a' to 'z' do f:=f+[c];
repeat
readln(s);
for i:=1 to length(s) do z:=z+[s[i]];
until f-z=[];
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 




- Текстовая версия 18.12.2017 21:50
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"