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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2010, 20:05   #1
pasha1993
 
Регистрация: 09.09.2010
Сообщений: 7
По умолчанию Задача с символами

Народ, помогите подправить программу. Пишет ошибку на 25 строчке.
Код:
uses crt;
const sg=['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z'];{soglasnie}
ds=['a'..'z',','];{dopystimie dl'a vvoda}
type mnoz=set of char;
{procedyra sozndania mnochestva iz stroki simvolov}
procedure Mnozhestvo(s:string;var m:mnoz);
var i:byte;
begin
m:=[];
for i:=1 to length(s) do
if s[i] in sg then m:=m+[s[i]];
end;
var s,s1:string;
c:char;
m,m1,mi:mnoz;
i,j,k,z:byte;
begin
clrscr;
writeln('Vvedite posledovatelnost slov iz strochnih latinskih');
writeln('Razdelennih zapatimi, vkonce tochka');
{Vvodim simvoli, dopystimie zapisivaem v stroky}
s:='';
repeat
read(c)
until c in ds then s:=s+c;
until c='.';
readln ('Posle vvoda schmem enter');
writeln(s);{Vivodim stroky dl'a proverki}
s:=s+','; {dobavim zap'atyu v konec}
{ydalim lishnie zap'atie, esli vveli dve podr'at}
while pos(',,',s)>0 do
delete(s, pos(',,',s),1);
{sozdadim mnochestvo vseh soglasnih, kotorie est' v stroke}
m:=[];
for i:=1 to length(s) do
if s[i] in sg then m:=m+[s[i]];
{sozdadim mnochestvo soglasnih v pervom (nechetnov) slove}
s1:=copy(s,1,pos(',',s));
Mnochestvo(s1,m1);
delete(s,1,pos(',',s));
i:=1
while pos(',',s)>0 do {poka est' zap'atie}
 begin
  s1:=copy(s,1,pos(',',s));{kopiryem ocherednoe pervoe chislo}
  i:=i+1; {schitaem}
  Mnozestvo(s1,mi);{sozdaem mnochestvo}
  if i mod 2<>0 then m1:=m1*mi;{esli nechetnoe slovo, delaem peresechenie mnochestv - obshie bykvi}
  delete(s,1,pos(',',s));{Ydal'aem proverennoe slovo, sledyushee slovo}
 end;
if m1=[] then
 begin
 write('Ykazanih po ysloviu bykv net!');
   readln;
  exit;
 end;
 writeln('Mnochestvo ykazanih po ysloviu bykv:');
for c:='b' to 'z' do {kodi}
if c in m1 then write(c,' ');
readln
  exit;
 end.
Изображения
Тип файла: jpg Безымянный.JPG (12.1 Кб, 65 просмотров)

Последний раз редактировалось Stilet; 13.10.2010 в 13:35.
pasha1993 вне форума Ответить с цитированием
Старый 12.10.2010, 20:22   #2
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

вы бы хоть написали, что она делать должна.
А вообще у цикла
repeat
read(c)
until c in ds then s:=s+c;
ветки then не бывает.

m:=[]; - ?????

Ее проще заново написать, чем подправлять.
ICQ: 593-013-807

Последний раз редактировалось Don Karleone; 12.10.2010 в 20:26.
Don Karleone вне форума Ответить с цитированием
Старый 12.10.2010, 20:23   #3
pasha1993
 
Регистрация: 09.09.2010
Сообщений: 7
По умолчанию

Дана непустая последовательность слов из строчных латинских букв; между соседними словами - запятая, за последним словом - точка. Напечатать в алфавитном порядке все согласные буквы, которые входят в каждое нечетное слово.
pasha1993 вне форума Ответить с цитированием
Старый 12.10.2010, 20:53   #4
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Код:
readln(str);
  Count:=0;
  while pos(',',str) <> 0 do
      begin
          s:=copy(str,1,pos(',',str) - 1);
          Inc(Count);
          if odd(Count) then // ищем согласные в слове
          Delete(str,1,pos(',',str));
      end;
  Inc(Count);
  if odd(Count) then  // ищем согласные в слове
согласные можно наращивать во вспомогательной строке, например ST. Как-то так, или можно придумать что-нибудь по оригенальнее (или по проще):
Код:
for i:=1 to Length(s) do
    if (s[i]<>'a')and(s[i]<>'e')and(s[i]<>'i')
       and(s[i]<>'j')and(s[i]<>'o')and(s[i]<>'u') then ST:=ST + s[i];
потом эту строку надо отсортировать по алфавиту.
ICQ: 593-013-807

Последний раз редактировалось Don Karleone; 12.10.2010 в 21:12.
Don Karleone вне форума Ответить с цитированием
Старый 13.10.2010, 05:52   #5
pasha1993
 
Регистрация: 09.09.2010
Сообщений: 7
По умолчанию

Да реально придется переписывать
pasha1993 вне форума Ответить с цитированием
Старый 13.10.2010, 12:15   #6
WhiteSpirit
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 82
По умолчанию

Попробуй вот так:
Код:
var
  nc: Boolean;
  Letters: set of Char;
  str: String;
  p: Integer;
  c: Char;

begin
ReadLn(str);
p:=1;
nc:=True;
while p < Length(str) + 1 do begin
    Letters:=[];
    while (str[p] <> ',') and (p < Length(str) + 1) do begin
        if nc then
            if [str[p]] * ['a'..'z'] - ['e', 'y', 'u', 'i', 'o', 'a'] <> [] then Include(Letters, str[p]);
        Inc(p);
        end;
    Inc(p);
    nc:=not nc;
    if not nc then WriteLn;
    for c:='a' to 'z' do if c in Letters then Write(c);
    end;
Readln;

end.
Только это написано в Delphi, будет ли работать в турбо паскале - неизвестно
WhiteSpirit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача с символами с++ kate311893 Помощь студентам 6 19.09.2010 20:11
Работа с символами.Паскаль Андрюха74 Помощь студентам 2 10.06.2010 16:08
Расстояние между символами. Meridian Помощь студентам 0 05.06.2010 15:58
Рисование символами. (*_*) Общие вопросы C/C++ 2 04.03.2009 23:03