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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2011, 15:29   #1
Zmen
Новичок
Джуниор
 
Регистрация: 13.01.2011
Сообщений: 1
По умолчанию И снова строки в Паскале

Здравствуйте!
Знаю, что строки - избитая тема, но помогите, пожалуйста отредактировать код, т.к. мой Паскаль еще на начальном уровне.
Условие задачи: дана строка S, латиницей, слова разделены пробелами. Преобразовать в S1 и S2 в соответствии со след условиями:

S1: напечатать слова, отличные от последнего слова, если в слове встречаются подряд 2 гласные.
S2: напечатать все слова, отличные от последнего слова. Если слово четной длины, то дополнить его еще одной буквой так, чтобы слева и справа от этой буквы находилось одинаковое количество букв.
Вот что у меня получилось:

program ind;
Uses Crt;
var p,S1,S2,s,e,c,t:string;i,k,r:intege r; b:boolean;
glas:set of char;
begin
glas:=['a','e','i','o','u','y'];
c:='c';
writeln('Vvedite stroku latinicej');
readln(s);
i:=length(s);
{Ищем последнее слово}
while (i>0)and(s[i]<>' ') do begin e:=s[i]+e;dec(i);end;
p:='';dec(i);b:=false;
{Ищем остальные слова}
while (i>0) do begin
if s[i]<>' ' then begin
{Выбираем и запоминаем слова с 2мя гласными}
if (p<>'')and ((s[i] in glas) and (s[i+1] in glas)) then begin
b:=true;
end;
p:=s[i]+p
end else begin
{Записываем выбранные слова в строку S1}
if (b)and(p<>e) then begin
S1:=p+' '+S1;
end;
p:='';
b:=false;
end;
dec(i);
end;
{Перебираем все символы}
for i:=1 to length(s) do
if (s[i]=' ')and(s[i+1]<>' ')then inc(k)else if s[i]<>' ' then t:=t+s[i];

{Ищем слова с четной длиной и запоминаем нужное слово}
while (i>0) do begin
if s[i]<>' ' then begin
if (p<>'')and (length(p) mod 2=0) then begin
b:=true;
end;
p:=s[i]+p ;
{Вставляем в середину букву с}
k:=length(p) div 2;
insert (c,p,k)
end
else begin
{Добавляем слово в S2}
if (b)and(p<>e) then begin
S2:=p+' '+S2;
end;
p:='';
b:=false;
end;
dec(i);
end;
writeln(S1);
writeln(S2);
end.

В случае со строкой S1 все работает, но не учитывается первое слово, даже если в нем подряд 2 гласные и оно отлично от последнего.
В случае со строкой S2 выводятся только слова с четной длиной (знаю, нужно как-то прописать, чтобы прибавлялись еще и остальные, но не знаю, где), и вставляется в середину не одна буква с, а несколько...

Заранее спасибо за все советы и подсказки)

Последний раз редактировалось Zmen; 13.01.2011 в 16:03.
Zmen вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки в Паскале bingooo Помощь студентам 3 06.04.2010 18:18
Опять паскаль и снова строки A.S.W Помощь студентам 1 07.01.2010 15:18
MDIChild снова и снова... Siber_Dec Общие вопросы Delphi 2 13.12.2009 03:24
Строки с паскале Dog Помощь студентам 2 11.10.2009 19:49
строки в паскале Странница Паскаль, Turbo Pascal, PascalABC.NET 0 03.06.2009 20:49