школьные олимпиады по программированию.Решение и разбор задач.

var b:array[1..100] of string[70];
i,j,N,K,NN,v:INTEGER;
s:string[70];
s1,s2:string[32];

PROCEDURE REZ(S:STRING);(выделение слов из текста)
BEGIN
WHILE pos(' ',s)<>0 DO
BEGIN
INC(NN);
B[NN]:=COPY(S,1,POS(' ',S)-1);
DELETE(S,1,POS(' ',S));
END;
if pos(' ',s)=0 then
BEGIN
INC(NN);
B[NN]:=S;
END;
END;

PROCEDURE ROV(S:STRING);{ВЫРАВНИВАНИЕ УДАЛЕНИЕ ПЕРВЫХ ПУСТЫХ ПРОБЕЛОВ}
var i:integer;
BEGIN
IF S[1]=' ' THEN
BEGIN
REPEAT
DELETE(S,1,1);
UNTIL S[1]<>' ';
END;
for i:=1 to length(s) do
if (s[i]='.') or (s[i]=',') then s[i]:=' ';
rez(s);
END;

procedure GOP(s:string);(выделение слов состоящих из различных строчных и заглавных букв)
var i,j,n:integer;
begin
n:=0;
for j:=1 to length(s) do
if (pos(s[j],copy(s,j+1,length(s)))=0)
and ((pos(s1[pos(s[j],s2)],copy(s,j+1,length(s)))=0) and
(pos(s2[pos(s[j],s1)],copy(s,j+1,length(s)))=0)) then inc(n);
if (n=length(s)) and (s<>'') then
begin
writeln(s);
inc(v);
end;
end;

begin
assign(input,'input.txt');
assign(output,'output.txt');
reset(input);
rewrite(output);
s1:='абвгдежзийклмнопрстуфхцчшщъыьэюя';
s2:='АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
while not eof do
begin
READLN(s);
if s<>'' then rov(s);
end;
for i:=1 to nn do
begin
if pos('-',b[i])<>0 then {РАБОТА СО СЛОВАМИ ПЕРЕНОСА - ОБЪЕДИНЕНИЕ}
begin
b[i]:=b[i]+b[i+1];
delete(b[i],pos('-',b[i]),1);
b[i+1]:='';
end;
end;
for i:=1 to nn do
begin
if b[i]<>' ' then GOP(B[I]);
end; {ВЫЗОВ ПРОЦЕДУРЫ ОПРЕДЕЛЕНИЯ СЛОВ СОСТОЯЩИХ ИЗ РАЗНЫХ СИМВОЛОВ И ВЫВОД ИХ НА ПЕЧАТЬ}
if v=0 then write('NO');
END.

Анализ и разбор задачи.Знания и умения.
Условие задачи:

Задача 2.Текст(8 баллов)

Дан текст на русском языке.Левая и правая граница - без выравнивания.
Текст содержит только русские буквы и следующие разделители:пробел,запятая,
точка,знак переноса слова.Признаком конца текста является многоточие ( то есть ...).
В каждой строке текста имеется не более 70 символов.

Необходимо записать в файл по одному слову в строке, в написании которых нет
одинаковых букв.Слова выводить в порядке встречаемости в исходном тексте.Если
таких слов нет, то записать в выходной файл слово "NO".

Входная информация хранится в файле,который содержит ровно 5 строк.

Пример ввода:

INPUT.TXT

При-
ем.Это все Мои пРимеры.Все
потому, что все хорошо.

Заканчиваю...

OUTPUT.TXT
Прием
Это
все
Мои
Все
что
все

Алгоритм

1)из входного файла построчно считываем строки текста пока не найден конец текста

2)удаляем пустые пробелы-выравниваем по левому краю

3)заменяем все разделители на знак пробела

4)выделяем слова и сохраняем их в массиве

5)объединяем слова-переносы в слово

6)выделяем и выводим слова состоящие из различных заглавных и строчных букв

7)если таких слов нет выводим "NO"

Знать:

  • оператор выбора "if <условие> then <оператор>"
  • циклы с параметром for.., с предусловием while..., с постусловием repeat...
  • процедуры и функции обработки строк
  • обьявление процедуры в Турбо Паскале 7.0


Уметь:
  • работать с входными и выходными файлами input.txt output.txt
домой
Hosted by uCoz