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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2009, 15:51   #1
LIARH
 
Регистрация: 09.07.2009
Сообщений: 7
По умолчанию Паскаль. Строки. Помогите

Из заданной строки удалить слово, содержащее наименьшее число гласных.
Решите кто-нибудь, а то я уже запутался.
LIARH вне форума Ответить с цитированием
Старый 11.07.2009, 17:07   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код:
uses crt;
const lg=['A','a','E','e','I','i','O','o','U','u','Y','y'];{латинские гласные}
      rg=['А','а','Е','е','Ё','ё','И','и','О','о','У','у','ы',{русские гласные}
          'Э','э','Ю','ю','Я','я'];

var i,j,k,l,mn,imn:byte;
    s,s1,s2:string;
begin
clrscr;
writeln('Введите строку:');
readln(s);
s:=s+' ';{добавим для удобства пробел в конец}
i:=1;{начало строки}
mn:=255;imn:=1;{начальное значение минимума и его начала}
while i<=length(s) do{пока не конец строки}
if s[i] <> ' 'then{если не пробел}
 begin
  j:=i;s1:='';{начинаем составлять слово}
  while s[j] <> ' 'do{пока не следующий пробел}
    begin
     s1:=s1+s[j];{составляем}
     j:=j+1;{идем дальше}
    end;
  k:=0;{пока гласных нет}
  for l:=1 to length(s1) do{идем по слову}
  if (s1[l] in lg)or(s1[l] in rg) then{если гласная}
  k:=k+1;{считаем}
  if k<mn then{если меньше чем в предыдущем минимуме}
   begin
    mn:=k;{это минимум}
    imn:=i;{позиция начала слова}
    s2:=s1;{само слово}
   end;
  i:=i+length(s1);{перепрыгиваем через него}
 end
else i:=i+1;{если пробел, идем дальше}
writeln('Меньше всего гласных в слове ',s2,' = ',mn);
delete(s,imn,length(s2));{удаляем слово}
delete(s,length(s),1);{удаляем пробел, который добавили}
writeln('Измененная строка:');
write(s);
readln
end.
puporev вне форума Ответить с цитированием
Старый 13.07.2009, 13:39   #3
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Попробуй так
Код:
uses crt;
const lg=['A','a','E','e','I','i','O','o','U','u','Y','y'];{латинские гласные}
      rg=['А','а','Е','е','Ё','ё','И','и','О','о','У','у','ы',{русские гласные}
          'Э','э','Ю','ю','Я','я'];

var i,j,k,l,mn,imn:byte;
    s,s1,s2:string;
begin
clrscr;
writeln('Введите строку:');
readln(s);
s:=s+' ';{добавим для удобства пробел в конец}
i:=1;{начало строки}
mn:=255;imn:=1;{начальное значение минимума и его начала}
while i<=length(s) do{пока не конец строки}
begin
 while s[i] = ' ' do inc(i);{пробел может быть не один}
 j:=i;s1:='';{начинаем составлять слово}
 k:=0;{обнуляем счетчик гласных}
 while s[j] <> ' ' do{пока не следующий пробел}
    begin
     s1:=s1+s[j];{составляем}
     if (s1[j] in lg)or(s1[j] in rg) then{если гласная}  k:=k+1;{считаем}
     j:=j+1;{идем дальше}
    end;
  if k<mn then{если меньше чем в предыдущем минимуме}
   begin
    mn:=k;{это минимум}
    imn:=i;{позиция начала слова}
    s2:=s1;{само слово}
   end;
 i := i+j;   
 end
writeln('Меньше всего гласных в слове ',s2,' = ',mn);
delete(s,imn,length(s2));{удаляем слово}
dec(s[0]);{удаляем пробел, который добавили}
writeln('Измененная строка:');
write(s);
readln
end.
так немного проще
Всякое безобразие должно быть единообразным. Тогда это называется порядком.

Последний раз редактировалось Anatole; 13.07.2009 в 14:05.
Anatole вне форума Ответить с цитированием
Старый 13.07.2009, 15:26   #4
LIARH
 
Регистрация: 09.07.2009
Сообщений: 7
По умолчанию

Огромное спасибо, все работает, все понятно.

Токо щас заметил - программа всегда удаляет только ПЕРВОЕ слово, вне зависимости от того, сколько гласных в нем содержится

Пример: Первая Мировая война началась...

Прогр. удаляет слово "Первая"(3 гласные), хотя дожна удалить слово "война"(2 гласные)

Последний раз редактировалось Stilet; 14.07.2009 в 09:41.
LIARH вне форума Ответить с цитированием
Старый 13.07.2009, 19:51   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Ну видать программа букву `й` принимает за гласную.
MaTBeu вне форума Ответить с цитированием
Старый 13.07.2009, 20:05   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Не надо лапшу на уши вешать. Видно что-то отремонтировал в программе, типа знак меньше на знак больше заменил или еще чего.
Вот скрин.
Изображения
Тип файла: jpg Capture_3.jpg (12.1 Кб, 139 просмотров)
puporev вне форума Ответить с цитированием
Старый 13.07.2009, 20:08   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не подверждаю!
Программа от puporev
для строки "Первая Мировая война началась..."

Код:
Меньше всего гласных в слове война = 2
Измененная строка:
Первая Мировая  началась...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.07.2009, 20:27   #8
LIARH
 
Регистрация: 09.07.2009
Сообщений: 7
По умолчанию

Все, извиняюсь, нашел у себя ошибку.

Сейчас все считает так, как надо
LIARH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
паскаль. строки. помогите решить, пожалуйста. tanuschka Помощь студентам 8 05.10.2009 23:52
помогите плз с задачой (строки на яз.Паскаль) Saken Паскаль, Turbo Pascal, PascalABC.NET 5 30.11.2008 14:26
3 задачки на Паскаль. Массив,строки. помогите решить до завтра! meds Паскаль, Turbo Pascal, PascalABC.NET 2 29.05.2008 08:29
Помогите решить задачу на строки (паскаль) mpegable Помощь студентам 1 27.05.2008 09:08
Паскаль, строки, помогите zaraza21 Помощь студентам 4 23.11.2007 14:01