1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Задача на тему "Множества", Задан текст из маленьких латинских букв...
Задан текст из маленьких латинских букв в конце стоит точка. Напечатать в алфавитном порядке все согласные буквы которые не входят ни в одно слово с использованием процедуры.
Вот мой вариант решения: В процесе решения зашёл в тупик, нужна ваша помощь.
type mmm=set of char; var s1:string; h:set of char; procedure rasbuk(s:string); var i:integer;j,t:char;n:integer; ss, dd:mmm; begin ss:=[]; dd:=[]; for i:=1 to length(s) do while s[i] = '.' do begin while s[i] = ' ' do if s[i] in h then ss:=ss+[s[i]]; dd:=dd-ss; for j:='a' to 'z' do begin n:=0; for i:=1 to length(s) do if j=s[i] then n:=n+1; if n>=2 then writeln(j); end; writeln('Bykvi ne vhodyawie v tekst'); for t:='a' to 'z' do if t in dd then write(t); end; begin writeln('vvedite tekst'); readln(s1); h:=['a'..'z']; rasbuk(s1); readln; end; end.
В процесе решения зашёл в тупик, нужна ваша помощь.
Volvo, безусловно, прав, как всегда, по поводу алгоритма решения. Но мне кажется, что прежде, чем советовать "неповерхностные" решения, нужно помочь человеку разобраться с его собственной попыткой решить, которая вообще далека от попадения в классификацию "поверхностных/неповерхностных" решений, ибо вообще не есть решение.
2 kvadrat: Не надо думать, что структуризация кода - удел профессионалов, а новичкам только пустая трата времени. Как раз скорее наоборот: в маленькой неструктурированной проге профи, может, и разберется, а новичок - вряд ли.. Я сделал нужные отступы и пропуски в твоей программе (никаких других изменений!), результат ниже:
type mmm=set of char;
var s1:string; h:set of char;
procedure rasbuk(s:string); var i:integer; j,t:char; n:integer; ss, dd:mmm;
begin ss:=[]; dd:=[]; for i:=1 to length(s) do while s[i]='.' do begin while s[i]=' ' do if s[i] in h then ss:=ss+[s[i]]; dd:=dd-ss; for j:='a' to 'z' do begin n:=0; for i:=1 to length(s) do if j=s[i] then n:=n+1; if n>=2 then writeln(j); end; writeln('Bykvi ne vhodyawie v tekst'); for t:='a' to 'z' do if t in dd then write(t); end;
begin writeln('vvedite tekst'); readln(s1); h:=['a'..'z']; rasbuk(s1); readln; end; end.
Сразу бросаются в глаза несколько ошибок общего плана: 1. Процедура, по всей видимости, не закрыта (нижний блок явно должен быть головным, но формально входит в процедуру). 2. Параметр цикла i используется повторно внутри цикла.
Дальше пытаемся немного вникнуть в смысл: 3. Последовательность операторов:
while s[i]='.' do begin while s[i]=' '
- вызывает немалое удивление (хотя, я не утверждаю, что она не имеет право на существование).
Можно было бы продолжить и дальше, но прежде хочется знать твою реакцию..
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой