/>Оглавление
1 Задание №1.
1.1 Блок-схема программы.
1.2 Работа программы
2 Задание №2.
2.1 Блок-схема программы
2.2 Работа программы.
3 Задание №3.
3.1 Блок-схема программы
3.2 Работа программы
4 Задание №4.
4.1 Работа программы
5 Задание №5.
5.1 Блок-схема программы
5.2 Работа программы
6 Заключение.
7 Список используемойлитературы.
8 Приложения А
9 Приложение Б
10 Приложение В
11 Приложение Г
12 Приложение Д
1 Задание №1
Подсчитатьколичество слов последовательности, начинающихся с большой буквы иоканчивающихся цифрой. Напечатать слова, содержащие задаваемую цепочку символови хотя бы один знак.1.1 />Блок-схема программы
/>
/>/>/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />
Работа программы
Основное телопрограммы.
Begin
Задаем переменные,которая будет обозначать о наличии введенного текста и признака продолженияработы программы.
Vvod:=False;
Cont:=True;
whileCont do
Begin
Очмщаем экран дляудобства ввода и вывода информации.
clrscr;
Выводим меню сномерами команд, которое можно увидеть на рисунке 1.
/>
Рисунок 1 – главноеменю первой программы.
menu;
write('Vveditekomandu: ');
Считываем команду впеременную Rem.
readln(Rem);
Распознаем командуи выберем необходимые функции для выполнения в соответствии с введенном знаком.
caseRem of
'0':Cont:=False;
'1': begin
Считываем введеннуюстроку в переменную Txt и присваиваем Vvodзначение True, показывая, что текст введен.
writeln('Text:');
readln(Txt);
Vvod:=True;
end;
'2': begin
Если текст невведен то выводится соответствующее сообщение, в противном случае запускаетсяфункция вывода слова с максимальным количеством букв, расположенных валфавитном порядке.
ifNot Vvod then
writeln('Nevveden text')
else
alfslovo(Txt);
end;
'3':begin
Аналогичнопредыдущему, только запускается функция подсчета количества симметричных словбольше чем два знака.
ifNot Vvod then
writeln('Nevveden text')
else
colsimmslovo(Txt);
end;
'4':begin
Вывод на экранвведенной строки, если же она не введены, выводится соответствующее сообщение.
ifNot Vvod then
writeln('Nevveden text')
else
writeln(Txt);
end
else
Если переменная Rem не удовлетворяет предыдущим условиям, то выводитсясообщение о том что введена неизвестная команда.
writeln('Neizvestnaya komanda');
end;
Если программа всееще работает, то выводится предупреждающее сообщение о том что после нажатияклавиши ENTER необходимо будет ввести следующуюкоманду.
ifCont then
begin
write('NagmiteENTER dlya vvoda sleduyuschei komandy… ');
readln;
end
else
clrscr;
end;
end.
Процедура для нахожденияслова с максимальным количеством букв, находящихся в алфавитном порядке.
Она получает вкачестве параметра строку S и считает в ней слова, вкоторых латинские буквы расположены по алфавиту и печатает такое слово, вкотором максимально количество букв.
procedure alfslovo(S: Stroka250);
var
Если переменная F становится True, то это показываетчто найдено новое слово.
F:boolean;
Len:Byte;
I:Byte;
Counter:Byte;
FSlovo,Buf: Slovo;
Index,L: Byte;
MaxCol:Byte;
begin
Len:=Length(S);
Вставляем в конецстроки пробел, если его там нет.
ifS[Len]' ' then
begin
S:=S+'';
Inc(Len);
end;
F:=False;
MaxCol:=0;
forI:=1 to Len do
ifS[I]' ' then
begin
Если находим началонового слова, тогда устанавливаем признак нового слова, запоминаем номерсимвола начала слова в строке в переменную Index ивводим начальную длину слова в L.
if F=False then
begin
F:=True;
Index:=I;
L:=1;
end
else
Увеличиваем длинудо тех пор, пока не находим пробел.
Inc(L);
end
else
Если i-й символ пробел, то сбрасываем признак слова, копируемслово в переменную Buf и длину строки в нулевую ячейку.
if F=True then
begin
F:=False;
Buf:=Copy1(S,Index, L);
Buf[0]:=char(L);
Следующая процедурапроверяет слово. Если буквы расположены в алфавитном порядке, то возвращает True иначе False.
ifalforder(Buf, Counter) then
begin
Если в слове большесимволов, чем в максимальном, то заносим слово в Fslovoи колличество букв в MaxCol.
ifCounter>MaxCol then
begin
FSlovo:=Copy1(S,Index, L);
FSlovo[0]:=char(L);
MaxCol:=Counter;
end;
end;
end;
Если таких слов нетто выводим сообщение об этом, иначе выводим слово.
ifMaxCol=0 then
writeln('Netpodhodyaschi slov v texte')
else
writeln(FSlovo,' kol-vo bukv: ', MaxCol);
end;
Функция alforder получает в качестве параметров строку S1, если в строке латинские буквы расположены по алфавиту, тофункция вернет True иначе False.Count – количество латинских букв в строке.
function alforder(Sl:Slovo; var Count: Byte): Boolean;
var
I,L: Byte;
F:Boolean;
Buf:Char;
begin
L:=Length(Sl);
Сбрасываемначальное количество букв в строке.
Count:=0;
Находим в циклеколичество латинских букв в строке и приводим все заглавные буквы к строчномувиду.
forI:=1 to L do
begin
if(isletter(Sl[I])) then
Inc(Count);
if(Sl[I]>='A') and (Sl[I]
Sl[I]:=char(byte(Sl[I])+32);
end;
ifCount=0 then
alforder:=False
else
ifCount=1 then
alforder:=True
else
begin
F:=True;
Перемещаем всебуквы строки в начало строки.
WhileF do
begin
F:=False;
for I:=1 to L-1 do
Если i-й символ не буква, а его сосед справа – буква, то меняемэти символы местами.
if(Not isletter(Sl[I])) And (isletter(Sl[I+1])) then
begin
F:=True;
Buf:=Sl[I];
Sl[I]:=Sl[I+1];
Sl[I+1]:=Buf;
end;
end;
F:=true;
Далее проверяемрасположения букв по алфавиту.
forI:=1 to Count-1 do
ifSl[I]>Sl[I+1] then
begin
F:=False;
break;
end;
alforder:=F;
end;
end;
Процедура colsimmsolvo получает в качестве параметра строку S, и считает в ней симметричные слова, выводит их на экран ивыводит количество найденных симметричных слов.
procedurecolsimmslovo(S: Stroka250);
var
F:boolean;
Len:Byte;
I:Byte;
Counter:Byte;
Buf:Slovo;
Index,L: Byte;
MaxCol:Byte;
begin
Len:=Length(S);
Заносим в конецстроки пробел, если его там нет.
ifS[Len]' ' then
begin
S:=S+'';
Inc(Len);
end;
За F обозначаем флаг нахождения слова, F=true –найдено новое слово. И сбрасываем начальное значение количествасимметричных слов.
F:=False;
Counter:=0;
writeln('Spisoksimmetrichnyh slov iz bolshe chem 2 znaka:');
Начинаем поисксимметричных слов в строке.
for I:=1 to Len do
В случае, если i-й символ не пробел, устанавливаем флаг нового слова,запоминаем начало нового слова, и сбрасываем начальное значение длинны.
ifS[I]' ' then
begin
ifF=False then
begin
F:=True;
Index:=I;
L:=1;
end
else
Inc(L);
end
else
Иначе, еслиустановлен признак нового слова, то сбрасываем его. Если длинна слова большедвух символов, то копируем слово в буффер.
ifF=True then
begin
F:=False;
ifL>2 then
begin
Buf:=Copy(S,Index, L); {kopiruem slovo v Buf}
Buf[0]:=char(L);
Далее функциейпроверяем слово на симметрию, и если оно симметрично, то увеличиваем счетчик наединицу, и выводим это слово на экран.
ifsimmetr(Buf) then
begin
Inc(Counter);
writeln(Buf);
end;
end;
end;
writeln('Kol-vonaidennyh slov: ', Counter);
end;
Процедура проверкисловва на симметричность.
functionsimmetr(S: Slovo):boolean;
var
L,I, R: Byte;
F:Boolean;
Begin
Начинаем проверятьсимметричные относительно центра символы. Если они совпадают, то функцииприсваивается True. Если хоть один символ не сходится,то программа выходит из цикла и функции присваивается значение False.
L:=Length(S);
R:=Ldiv 2;
F:=True;
forI:=1 to R do
ifS[I]S[L-I+1] then
begin
F:=False;
break;
end;
simmetr:=F;
end;