Помощь - Поиск - Пользователи - Календарь
Полная версия: дописать все гласные латинские буквы из строки S1 в конец S2
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Valkirie
Воть... решаю задачку и не могу понять где у меня ошибка... люди умные, гляньте плииз ;)

Условие задачи:
Разработать функцию Add(const S1,S2:string):string, дописывающую все гласные латинские буквы из строки S1 в конец S2 и выдающей получившуюся строку в качестве результата. С помощью данной функции в каждую строку из введенного набора дописать все гласные латинские буквы из предыдущей строки. Гласными считаются следующие буквы: aeiouyAEIOUY.

Вход
В первой строке входа дано количество строк N. Затем следуют N строк, по одной в каждой строке.
Выход
На выход напечатать строки результата, по одной в каждой строке.

Пример
Вход:
3
abc
abd
as

Выход:
abc
abda
asa


Вот мой код...
Код


 function Add(S1, S2:string):string;
var i:integer;
begin
for i:=Length(S1) downto 1 do
begin
if (S1[i]='A') or (S1[i]='E') or (S1[i]='I') or (S1[i]='U') or
(S1[i]='O') or (S1[i]='Y') or (S1[i]='a') or (S1[i]='e') or
(S1[i]='u') or (S1[i]='o') or (S1[i]='y') then Insert(S1[i],S2,Length(S2)+1);
end;
Result:=S2;
end;

 var
 S1,S2:string;
 N,i:integer;
 Mas: array [1..100] of string;
 begin
 Write('');
 ReadLn(N);
 for i:=1 to N do
 begin
 Write('');
 ReadLn(Mas[i]);
 end;
 for i:=1 to N-1 do
 begin
 S1:=Mas[i];
 S2:=Mas[i+1];
 S2:=Add(S1,S2);
 WriteLn(S2);
 ReadLn;
 end;
end.


Что-то у меня на выходе не то получается... ;(( Help !
FreeMan
попробуй в последнем цикле заменить
Код
for i:=1 to N-1 do
begin
S1:=Mas[i];
S2:=Mas[i+1];

на
Код

for i:=n-1 downto 1 do
begin
S1:=Mas[i+1];
S2:=Mas[i];
volvo
Ну, зачем же так длинно? Можно и покороче:
const
vowels = ['A', 'E', 'I', 'O', 'U', 'Y'];

function Add(const S1, S2: string): string;
var
i: byte;
s: string;
begin
s := s2;
{ Зачем здесь надо было идти от конца строки к началу? }
for i := 1 to Length(S1) do
if upcase(s1[i]) in vowels
then s := s + s1[i];
Add := s;
end;

var
N, i: integer;
Mas: array [0 .. 100] of string;
begin
mas[0] := ''; { это чтобы и первая строка распечатывалась }
Write('n = '); ReadLn(N);
for i := 1 to N do begin
Write(i, '.s = '); ReadLn(Mas[i])
end;

for i:=0 to N-1 do
begin
Writeln(add(mas[i], mas[i + 1]));
ReadLn
end;
end.
Valkirie
Спасибо...
только вот серверу не нравится это решение...видимо нужно чтобы на выходе все три строки сразу вылетали...
FreeMan
2Valkirie: какому серверу?
volvo
Опять TIMUS? :o
Valkirie
Институтскому...
Я же не от нечего делать задачки тут сижу решаю...

А что такое TIMUS ?

Есть такой "acm.timus.ru" для решения задач online smile.gif
Valkirie
нет..нет... никаких тимусов... ;(((
volvo
Цитата(Valkirie @ 26.04.05 21:03)
видимо нужно чтобы на выходе все три строки сразу вылетали...

Ну, если только убрать ReadLn из цикла...
for i:=0 to N-1 do
Writeln(add(mas[i], mas[i + 1]));


А иначе никак не получится сделать - чтоб сразу вылетали... Это ЗДЕСЬ 3 строки, а если будет 10?
FreeMan
А случайно не нужно читать все данные из файла и вывод делать в файл???? Может серверу нужна только функция..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.