Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Строки

Автор: False 12.05.2007 1:13

Есть код программы, которая выводит

1) Слова состоящие только из латинских гласных букв(a,i,e,u,o);
2) Слова состоящие только из латинских согласных букв.

Нужно преобразовать код так, чтобы программа выводила

1) Слова, в которых первая буква присутствует только один раз;
2) Слова, в которых присутствуют только заглавные латинские буквы.

Я написал код так, что операция обработки текста выполняется с помощью точки, которая ставится в конце строки. Нужно сделать так, чтобы при вводе точка в конце текста не запрашивалась. Сколько не пробовал её убрать - не удалось. Лимит символов - 200. После окончания ввода программа выполняет необходимые операции только после нажатия на "Enter". Вводтятся только заглавные/строчные латинские буквы и пробелы.

program stranalyze;
uses crt;
var
str,str1,str2:string;
Arr,Arr1,Arr2:array [1..30] of string;
ch,ch1:char;
i,j,k,m,y:integer;
osh,osh1,osh2:boolean;
begin
clrscr;

{---Ввод(начало)---}
writeln('Введите предложение. Между словами минимум один пробел');
writeln('В конце предложения точка.');
read(str);
osh:=false;
k:=0;
if str[length(str)]<>'.' then
begin
osh:=True;
end;
{---Ввод(конец)---}

{---Удаление_лишних_пробелов(начало)---}
for i:=1 to Length(str) do
begin
if ((str[i]=' ') and (str[i+1]=' ')) or ((str[i]=' ') and (str[i+1]='.')) then
begin
Delete(str,i,1);
i:=1;
end;
end;
{---Удаление_лишних_пробелов(конец)---}

{---Деление_строки_на_слова(начало)---}
k:=0;
str1:=str;
m:=0;
j:=1;
for i:=1 to Length(str) do
begin
if (str[i]=' ') or (str[i]='.') then
begin
str2:=str1;
delete(str2,i,length(str2)-i+1);
delete(str2,1,m);
arr[j]:=str2;
j:=j+1;
k:=k+1;
m:=i;
end;
end;
{---Деление_строки_на_слова(конец)---}

{---Проверка_правильности_ввода(начало)---}
m:=1;
j:=1;
y:=1;
while m<=k do
begin
osh1:=true;
str1:=arr[m];
for i:=1 to Length(str1) do
begin
ch1:=str1[i];
if not((ch1='a') or(ch1='A') or(ch1='i') or
(ch1='I') or (ch1='o') or (ch1='O') or
(ch1='u') or (ch1='U') or
(ch1='e') or (ch1='E')) then osh1:=false;
end;
if osh1 then
begin
arr1[j]:=str1;
inc(j);
end
else
begin
osh2:=true;
for i:=1 to Length(str1) do
begin
ch1:=str1[i];
if ((ch1='a') or(ch1='A') or(ch1='i') or
(ch1='I') or (ch1='o') or (ch1='O') or
(ch1='U') or (ch1='u') or
(ch1='e') or (ch1='E')) then osh2:=false;
end;
if osh2 then
arr2[y]:=str1;
inc(y);
end;
m:=m+1;
end;
{---Проверка_правильности_ввода(конец)---}

{---Вывод(начало)---}
m:=1;
if not osh then
begin
writeln;
writeln('Слова состоящие только из латинских гласных букв(a,i,e,u,o)');
writeln;
while (m<=j) do
begin
writeln(arr1[m],' ');
m:=m+1;
end;
m:=1;
writeln('Слова состоящие только из латинских согласных букв');
writeln;
while (m<=y) do
begin
writeln(arr2[m],' ');
m:=m+1;
end;
end
else writeln('Неверный ввод');
{---Вывод(конец)---}
readln;
readln;
end.


Если кто-то сможет помочь, буду очень благодарен.