Санкт-Петербургский Государственный Электротехнический университет «ЛЭТИ»












ОТЧЕТ

По работе №1



Выполнил

Факультет КТИ

Кафедра МОЭВМ

Преподаватель Лисс А.А.























Санкт-Петербург

2009г.


Формулировка задания

Заданная строка состоит из слов, разделенных одним или несколькими пробелами. Определить: количество слов, у которых первый и последний символы совпадают.


Процедуры и их назначение

procedure inputstrl(var f:text;var str1:strltype);

входные данные:f – дескриптор входного файла

Str1 – строка с известной длиной

выходные данные: f – дескриптор входного файла

Str1 – строка с известной длиной

Назначение: Ввод строки с известной длиной


procedure inputstrm(var f:text;var str1:strmtype)

входные данные:f – дескриптор входного файла

Str1 – строка с маркером конца строки

выходные данные:f – дескриптор входного файла

Str1 – строка с маркером конца

Назначение: Ввод строки с маркером конца строки


procedure schetl(str1:strltype;var n:byte);

входные данные: Str1 – строка с известной длиной

выходные данные:N – количество слов с одинаковым первым

и последним символами

Назначение: вычисление количества слов с одинаковым

первым и последним символами для строки в форме с известной длинной


procedure schetm(str1:strmtype;var n:byte);

входные данные: Str1 – строка с маркером конца строки

выходные данные:N – Количество слов с одинаковыми первым

и последним символами

Назначение: вычисление количества слов с одинаковым

первым и последним символами для строки в форме с маркером конца строки


procedure outputstrl(var str1:strltype;var n:byte;var f:text);

входные данные: f – дескриптор выходного файла

Str1 – строка с известной длиной;

N – Количество слов с одинаковыми первым

и последним символами

выходные данные: f – дескриптор выходного файла;

Назначение: Вывод строки в форме с известной длиной на экран и в файл


procedure outputstrm(var str1:strmtype;var n:byte;var f:text);

входные данные: дескриптор выходного файла

Str1 – строка с маркером конца строки;

N – Количество слов с одинаковыми первым

и последним символами

выходные данные:f – дескриптор выходного файла;

Назначение: Вывод строки в форме с маркером конца строки на экран и в файл

Формальная постановка задачи

Исходные данные

Строка, введенная пользователем в текстовый файл

Результирующие данные

Количество слов в строке с одинаковыми первым и последним символами

Связь результатов и исходных данных

Результаты получаются из исходных данных при успешном выполнением программы










































Текст программы:


program laba;

uses crt;

const maxl=60;

type

strltype=record

l:byte;

strl:array[1..maxl] of char

end;

strmtype=record

mk:char;

strm:array[1..maxl+1] of char

end;


procedure inputstrl(var f:text;var str1:strltype);

var i:byte;

begin

i:=0;

while not eof(f) and (i<maxl) do

begin

i:=i+1;

read(f,str1.strl[i]);

end;

str1.l:=i;

end;


procedure inputstrm(var f:text;var str1:strmtype);

var i:byte;

begin

i:=1;

str1.mk:=#13;

while not eoln(f) and (i<=maxl) do

begin

read (f,str1.strm[i]);

i:=i+1;

end;

str1.strm[i]:=str1.mk;

end;


procedure schetl(str1:strltype;var n:byte);

var i:byte;

ch:char;

begin

n:=0;{kolichestvo slov}

for i:=1 to str1.l do

begin

if ((i=1)or(str1.strl[i-1]=' '))and(str1.strl[i]<>' ') then {nachalo slova}

ch:=str1.strl[i];{nachalnbi simvol}

if (str1.strl[i]<>' ')and((str1.strl[i+1]=' ')or(i=str1.l)) then {konec slova}

if str1.strl[i]=ch then {nachalnbi simvol raven kone4nomy}

inc(n)

end

end;


procedure schetm(str1:strmtype;var n:byte);

var i:byte;

ch:char;

begin

n:=0;

i:=1;

while str1.strm[i]<>str1.mk do

begin

if ((i=1)or(str1.strm[i-1]=' '))and(str1.strm[i]<>' ') then {nachalo slova}

ch:=str1.strm[i];{nachalnbi simvol}

if (str1.strm[i]<>' ')and((str1.strm[i+1]=' ')or(str1.strm[i+1]=str1.mk)) then {konec slova}

if str1.strm[i]=ch then {nachalnbi simvol raven kone4nomy}

inc(n);

inc(i);

end;


end;


procedure outputstrl(var str1:strltype;var n:byte;var f:text);

var k:byte;

begin

writeln('Ishodnaja stroka');

writeln(f,'ishodnaja stroka');

for k:=1 to str1.l do

begin

write(str1.strl[k]);

write(f,str1.strl[k]);{posimvolnbi vbvod massiva}

end;

writeln('');

writeln(f);

writeln('kolichestvo slov v stroke s odinakovbmi perv6m i poslednim simvolami:',n);

writeln(f,'kolichestvo slov v stroke s odinakovbmi perv6m i poslednim simvolami:',n);


end;



procedure outputstrm(var str1:strmtype;var n:byte;var f:text);

var k:byte;

begin

writeln('Ishodnaja stroka');

writeln(f,'Ishodnaja stroka');

k:=1;

while str1.strm[k]<>str1.mk do

begin

write(str1.strm[k]);

write(f,str1.strm[k]);{posimvolnbi vbvod massiva}

inc(k);

end;

writeln('');

writeln(f);

writeln('kolichestvo slov v stroke s odinakovbmi perv6m i poslednim simvolami:',n);

writeln(f,'kolichestvo slov v stroke s odinakovbmi perv6m i poslednim simvolami:',n);


end;


var

name_in,name_out:string;

f_in,f_out:text;

n:byte;

ch:char;

strl:strltype;

strm:strmtype;

begin{main}

clrscr;

write('vvedite imja faila s ishodnoi strokoi:');

readln(name_in);

name_in:=name_in+'.txt';

assign(f_in,name_in);

reset(f_in);

if ioresult<>0 then writeln('fail nee naiden')

else

begin

if eof(f_in) then

begin{if1}

writeln('fail pystoi');

close(f_in);

readln;

exit;

end{if1}

else

write('vvedite imja vBvodnogo faila:');

end;

readln(name_out);

name_out:=name_out+'.txt';

assign(f_out,name_out);

rewrite(f_out);

if ioresult<>0 then write('fail nensozdan')

else

begin

writeln('vbBerite tip vbvoda stroki:');

writeln('L-tip s izvestnoi dlinnoi.');

writeln('M-tip s izvestnoi dlinnoi.');

readln(ch);

end;

if (ch='L') or (ch='l') then

begin

inputstrl(f_in,strl);

schetl(strl,n);

outputstrl(strl,n,f_out);

readln;

end

else

begin

inputstrm(f_in,strm);

schetm(strm,n);

outputstrm(strm,n,f_out);

readln;

end;

close(f_in);

close(f_out);

end.


Тестирование:

Ishodnaja stroka

asda dsdfvsd sadgndndrgs ghihg l lpoi

kolichestvo slov v stroke s odinakovbmi perv6m i poslednim simvolami:5