Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Помогите решить задачи на Pascal (http://www.tehnari.ru/f43/t12343/)

Mystyc 19.06.2008 15:33

помогите пожалуйста решить задачи
1.В текстовом файле input.txt записан русский текст. Найти в тексте слова, начинающиеся и оканчивающиеся теми же буквами, что и последнее слово текста, записать их заглавными буквами и указать после каждого такого слова в скобках порядковый номер найденного слова. Полученный текст записать в файл output.txt. Весь текст, кроме найденных слов, должен остаться неизменным, включая и знаки препинания.
2.Дан файл, содержащий русский текст. Найти в тексте N<=2000 слов, содержащих наименьшее количество гласных. Записать найденные слова в текстовый файл в порядке неубывания количества гласных. Для каждого слова вывести также это количество. Все найденные слова должны быть разными!

bubuka 20.06.2008 11:33

1.В текстовом файле input.txt записан русский текст. Найти в тексте слова, начинающиеся и оканчивающиеся теми же буквами, что и последнее слово текста, записать их заглавными буквами и указать после каждого такого слова в скобках порядковый номер найденного слова. Полученный текст записать в файл output.txt. Весь текст, кроме найденных слов, должен остаться неизменным, включая и знаки препинания.


Program P1;

Const
Name1 = ‘c:\...адресс папки…\input.txt’;
Name2 = ‘c:\...адресс папки…\output.txt’;
N = 5000;
rusB :set of char = [‘А’,’Б’,’В’,’Г’,’Д’,’Е’,’Ё’,’Ж’,’З’,’И’,’К’,’Л’,’М ’,’Н’,’О’,’П’,’Р’,’С’,’Т’,’У’,’Ф’,’Ц’,’Ч’,’Щ’,’Ш’, ’Ь’,’Ы’,’Ъ’,’Э’,’Ю’,’Я’];
russ : set of char = [‘а’,’б’,’в’,’г’,’д’,’е’,’ё’,’ж’,’з’,’и’,’к’,’л’,’м ’,’н’,’о’,’п’,’р’,’с’,’т’,’у’,’ф’,’ц’,’ч’,’щ’,’ш’, ’ь’,’ы’,’ъ’,’э’,’ю’,’я’];

Var
Rusin,rusout:text;
M:array [1..N] of char;
I,k,j,l:integer;
Nom,simv:string;

Function UpCaseAll(Ch: Char): Char;
{Преобразует латинскую или русскую букву Ch к заглавной}
begin
case Ch of
'a'..'z': UpCase := Chr(ord('A')+ord(Ch)-ord('a'));
'a'..'n': UpCase := Chr(ord('A')+ord(Ch)-ord('a'));
'p'..'я': UpCase := Chr(ord('P')+ord(Ch)-ord('p'));
else
UpCase:= Ch
end
end;



Begin

Assign(rusin,name1);
Assign(rusout,name2);

{$I-} {Отключаем контроль ошибок ввода-вывода}
reset(rusin);
{$I+} {Включаем контроль ошибок ввода-вывода}
if IOResult <> 0 then
writeln(‘Ошибка, файла не существует’);
else
while not EOF(rusin) and (i <= N) do
begin
read(rusin ,m[i] ) ; {Записали все символы из файла инпут в массив М}
inc(i)
end;
close(rusin);
for j:= I DOWN TO 1 DO
IF and (((m[j+1] in rusB)) or ((m[j+1] in russ))) then begin
simv:=m[i-1]; break; end; {запомнили последнюю букву}

for j:=1 to to I-1 do
if ((not(m[j] in rusB)) or (not(m[j] in russ))) and (((m[j+1] in rusB)) or ((m[j+1] in russ))) then
begin
k:=k+1;
if m[j+1] = simv then { преобразуем буквы в заглавные}
begin
for l:=j+1 to I-1 do
begin
if ((not(m[l] in rusB)) or (not(m[l] in russ))) then
begin
str(k,nom);
for q:=i+length(nom) downto l do
m[q]:=m[q-length(nom)];
for q:=l to l+lentg(mon)-1 do
m[q]:=nom[l-q+1];
I:=I+length(nom);
break; end;
m[l]:=upCaseAll(m[i]);
end;
end;


rewrite(rusout);
for j:=2 to I do {записываем все обратно без первого пробела}
write(rusout,m[i]);
close(rusout);

end.

bubuka 20.06.2008 11:35

Значит так
Писалось все в ворде - следовательно мог где то напутать синтаксис
Я не очень хорошо помню конкретно эту тему так что могут гдето быть мелкие ошибки - НО они все легко находяться и исправляють при кампилировании

Со вторым задание придеться подождать так как щас надо всетаки поработать

Mystyc 20.06.2008 14:09

Function UpCaseAll(Ch: Char): Char;
{Преобразует латинскую или русскую букву Ch к заглавной}
begin
case Ch of
'a'..'z': UpCase := Chr(ord('A')+ord(Ch)-ord('a'));
'a'..'n': UpCase := Chr(ord('A')+ord(Ch)-ord('a'));
'p'..'я': UpCase := Chr(ord('P')+ord(Ch)-ord('p'));
else
UpCase:= Ch
end
end;
отказывается работать что я с ней уже не делала

bubuka 20.06.2008 14:26

где ошибку выбивает?
вставете перед фунцией эту строку:

{$Х+} {Включаем расширенный синтаксис}


а в конце функции
{$Х-}

Mystyc 20.06.2008 14:35

теперь он выделяет {$X+} и пишет invalid compiler directiv

Mystyc 20.06.2008 14:36

а еще выделяет 'a'..'ï': UpCaseAll := Chr(ord('À')+ord(Ch)-ord('à')); и пишет duplicate case lable

Mystyc 20.06.2008 14:38

теперь он не выделяет {$X}но про duplicate case lable все равно пишет

bubuka 20.06.2008 14:39

какая версия паскаля? (попробуй убрать {$Х-})

вот еще раз функция
Function UpCase(Ch: Char): Char;

{Преобразует латинскую или русскую букву Ch к заглавной}

begin

case Ch of

'a'..'z': UpCase := Chr(ord('A')+ord(Ch)-ord('a'));

'a'..'n': UpCase := Chr(ord('A')+ord(Ch)-ord('a'));

'p'..'я': UpCase := Chr(ord('P')+ord(Ch)-ord('p'));

else

UpCase:= Ch

end

end;

Mystyc 20.06.2008 14:41

оооо, теперь он пишет
variable "l" mignt have not been inicialized и про k тоже самое


Часовой пояс GMT +4, время: 04:38.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.