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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2013, 18:34   #1
Servin
 
Аватар для Servin
 
Регистрация: 28.04.2010
Сообщений: 6
По умолчанию Работа со строками Код рабочий но нужно исправить ошибки но у меня ни чего не получается

Код рабочий но нужно исправить ошибки но у меня ни чего не получается[CODE]

Ошибки:
-Программа работает не корректно при наличии пробелов за последним словом
-Программа не отбрасывает слова, равные последнему, в первом пункте задания

Задание:
п.1. – Напечатать те слова, отличные от последнего слова, которые имеют максимальное количество гласных букв. Если таких слов несколько, печатать первое по порядку.
п.2. –Напечатать все слова, отличные от последнего слова, заменив все вхождения ed на ing, если такие имеются.

Код:
program labrab2p1p2;

{291003-75 ПОИТ 1-й курс Хомич С.С
Вариант 16}

var predl: string; {наше предложение}
  wordp1: string; {слово п1}
  wordp2: string; {слово п2}
  maxword: string; {искомое слово}
  ing: string; {искомое вхождения ed заменив на ing}
  percent: real; {процент гласных в текущем}
  maxpercent: real; {процент гласных в искомом}
  glasn: set of char; {множество гласных букв}
  letters: set of char; {множество всех букв}
  ch: char; {очередной символ}
  i,x,n,m: integer;
  wln, gcount: integer; {длина и колво гласных в текущем}
  stroka,pslword,rez,st1:string; {строка, последнее солово}
begin
  glasn := ['A', 'E', 'I', 'U', 'O', 'a', 'e', 'i', 'u', 'o'];
  letters := ['A'..'Z', 'a'..'z'];
  {заполняем множества}
  readln(predl);
  wln := 0;
  gcount := 0;
  maxpercent := 0;
  maxword := '';
  wordp1 := '';
for i := 1 to length(predl) do
  {пробегаем по всем символам}
 begin
  ch := predl[i];
if ch in letters then
 {если очередной символ буква}
 begin
  wordp1:= wordp1 + ch;
  {дописываем сивол к текущему слову}
  wln := wln + 1;
if ch in glasn then
  gcount := gcount + 1;
  {увелчиваем колво букв и гласных в текущем}
end
  else
  {если нет то это какой-то разделитель слов}
 begin
if wln > 0 then
  {проверяем не будет ли деления на 0
  такая ситуация может возникнуть если у нас 2 разделителя подряд}
 begin
  percent := gcount / wln;
  {вычисляем процент}
if (percent > maxpercent) then
 begin
  maxword := wordp1;
  maxpercent := percent;
end;
  {сравниваем}
  wln := 0;
  gcount := 0;
  wordp1:= '';
  {начинаем обработку нового слова}
end;
end;
end;
  pslword:=predl;   {последнее слово}
  n:=length(predl);   {длина начальной строки}
  i:=1;
while i>0 do   {определение последнего слова}
 begin
  i:=Pos(' ',pslword);
  pslword:=copy(pslword,i+1,n);
end;
  i:=1;
  stroka:=predl;
  
while i>0 do    {деление строки на слова и формирование конечных строк}
 begin
  i:=pos(' ',stroka);    {вычисление номера позиции пробела}
if i>1 then
 begin
  wordp2:=copy(stroka,1,i-1);  {выделение части строки до пробела в отдельное слово}
  x:=length(wordp2);   {вычисление длины слова}
if (pos(wordp2,pslword)<>1) or (x<>(length(pslword))) then {сравнение слова с последним}

 begin
  m:=1;
  {проверяем слово на присутствие сочетания ed}
while m>0 do  {на случай, что сочетание встречается в слове не один раз}
 begin
  m:=pos('ed',wordp2);   {вычисление позиции сочетания ed}
if m>0 then    {если оно есть, то делим слово на части до ed и после}
 begin
  st1:=copy(wordp2,1,m-1);
  wordp2:=copy(wordp2,m+2,x);
  rez:=concat(rez,st1,'ing')  {собираем слово}
 end;
end;
  ing:=concat(ing,rez,wordp2,' ');   {добавляем в строку слово}
  rez:='';
end;
  stroka:=copy(stroka,i+1,n);   {уменьшаем строку на проверенное слово}
end;
end;
  writeln('Введённое предложение: ',predl);   {вывод результатов}
if length(ing)>0 then
  writeln('Слова в которых есть все вхождения ed на ing изменены: ',ing) else writeln('Строка пустая');
if length(maxword)>0 then
  writeln('Максимальное количество гласных букв в слове: ',maxword) else writeln('Строка пустая');
end.
Результат работы программы:

Ввод данных:
edivsf fsdeds odf

Ввывод результата:
Слова в которых есть все вхождения ed на ing изменены: ingivsf fsdeds

Максимальное количество гласных букв в слове: edivsf

Последний раз редактировалось Servin; 24.02.2013 в 23:48.
Servin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно исправить ошибки ДмитрийРэй Помощь студентам 0 22.05.2011 16:37
Нужно исправить ошибки в С+ Ximik28 Общие вопросы C/C++ 12 11.01.2011 04:14
нужно исправить ошибки( basav1k Помощь студентам 3 17.05.2010 22:46
C++. Есть код нужно исправить ошибки megavolt91 Общие вопросы C/C++ 6 06.06.2009 19:27
C++. Есть код нужно исправить ошибки megavolt91 Помощь студентам 1 01.06.2009 18:38