50096 (609919)
Текст из файла
Оглавление
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
Подсчитать количество слов последовательности, начинающихся с большой буквы и оканчивающихся цифрой. Напечатать слова, содержащие задаваемую цепочку символов и хотя бы один знак.
-
Б
лок-схема программы
clrscr











writln






readln(s)







exit




vvod(s)


f := 0
readln(s1)
inc(f)
inc(f)
readln(menu)

1
2
3

menu1(s)
menu2(s,s1)
exit
Работа программы
Основное тело программы.
Begin
Задаем переменные, которая будет обозначать о наличии введенного текста и признака продолжения работы программы.
Vvod:=False;
Cont:=True;
while Cont do
Begin
Очмщаем экран для удобства ввода и вывода информации.
clrscr;
Выводим меню с номерами команд, которое можно увидеть на рисунке 1.
Рисунок 1 – главное меню первой программы.
menu;
write('Vvedite komandu: ');
Считываем команду в переменную Rem.
readln(Rem);
Распознаем команду и выберем необходимые функции для выполнения в соответствии с введенном знаком.
case Rem of
'0': Cont:=False;
'1': begin
Считываем введенную строку в переменную Txt и присваиваем Vvod значение True, показывая, что текст введен.
writeln('Text:');
readln(Txt);
Vvod:=True;
end;
'2': begin
Если текст не введен то выводится соответствующее сообщение, в противном случае запускается функция вывода слова с максимальным количеством букв, расположенных в алфавитном порядке.
if Not Vvod then
writeln('Ne vveden text')
else
alfslovo(Txt);
end;
'3': begin
Аналогично предыдущему, только запускается функция подсчета количества симметричных слов больше чем два знака.
if Not Vvod then
writeln('Ne vveden text')
else
colsimmslovo(Txt);
end;
'4': begin
Вывод на экран введенной строки, если же она не введены, выводится соответствующее сообщение.
if Not Vvod then
writeln('Ne vveden text')
else
writeln(Txt);
end
else
Если переменная Rem не удовлетворяет предыдущим условиям, то выводится сообщение о том что введена неизвестная команда.
writeln('Neizvestnaya komanda');
end;
Если программа все еще работает, то выводится предупреждающее сообщение о том что после нажатия клавиши ENTER необходимо будет ввести следующую команду.
if Cont then
begin
write('Nagmite ENTER 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);
Вставляем в конец строки пробел, если его там нет.
if S[Len]<>' ' then
begin
S:=S+' ';
Inc(Len);
end;
F:=False;
MaxCol:=0;
for I:=1 to Len do
if S[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.
if alforder(Buf, Counter) then
begin
Если в слове больше символов, чем в максимальном, то заносим слово в Fslovo и колличество букв в MaxCol.
if Counter>MaxCol then
begin
FSlovo:=Copy1(S, Index, L);
FSlovo[0]:=char(L);
MaxCol:=Counter;
end;
end;
end;
Если таких слов нет то выводим сообщение об этом, иначе выводим слово.
if MaxCol=0 then
writeln('Net podhodyaschi 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;
Находим в цикле количество латинских букв в строке и приводим все заглавные буквы к строчному виду.
for I:=1 to L do
begin
if (isletter(Sl[I])) then
Inc(Count);
if (Sl[I]>='A') and (Sl[I]<='Z') then
Sl[I]:=char(byte(Sl[I])+32);
end;
if Count=0 then
alforder:=False
else
if Count=1 then
alforder:=True
else
begin
F:=True;
Перемещаем все буквы строки в начало строки.
While F 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;
Далее проверяем расположения букв по алфавиту.
for I:=1 to Count-1 do
if Sl[I]>Sl[I+1] then
begin
F:=False;
break;
end;
alforder:=F;
end;
end;
Процедура colsimmsolvo получает в качестве параметра строку S, и считает в ней симметричные слова, выводит их на экран и выводит количество найденных симметричных слов.
procedure colsimmslovo(S: Stroka250);
var
F: boolean;
Len: Byte;
I: Byte;
Counter: Byte;
Buf: Slovo;
Index, L: Byte;
MaxCol: Byte;
begin
Len:=Length(S);
Заносим в конец строки пробел, если его там нет.
if S[Len]<>' ' then
begin
S:=S+' ';
Inc(Len);
end;
За F обозначаем флаг нахождения слова, F=true –найдено новое слово. И сбрасываем начальное значение количества симметричных слов.
F:=False;
Counter:=0;
writeln('Spisok simmetrichnyh slov iz bolshe chem 2 znaka:');
Начинаем поиск симметричных слов в строке.
for I:=1 to Len do
В случае, если i-й символ не пробел, устанавливаем флаг нового слова, запоминаем начало нового слова, и сбрасываем начальное значение длинны.
if S[I]<>' ' then
begin
if F=False then
begin
F:=True;
Index:=I;
L:=1;
end
else
Inc(L);
end
else
Иначе, если установлен признак нового слова, то сбрасываем его. Если длинна слова больше двух символов, то копируем слово в буффер.
if F=True then
begin
F:=False;
if L>2 then
begin
Buf:=Copy(S, Index, L); {kopiruem slovo v Buf}
Buf[0]:=char(L);
Далее функцией проверяем слово на симметрию, и если оно симметрично, то увеличиваем счетчик на единицу, и выводим это слово на экран.
if simmetr(Buf) then
begin
Inc(Counter);
writeln(Buf);
end;
end;
end;
writeln('Kol-vo naidennyh slov: ', Counter);
end;
Процедура проверки словва на симметричность.
function simmetr(S: Slovo):boolean;
var
L, I, R: Byte;
F: Boolean;
Begin
Начинаем проверять симметричные относительно центра символы. Если они совпадают, то функции присваивается True. Если хоть один символ не сходится, то программа выходит из цикла и функции присваивается значение False.
L:=Length(S);
R:=L div 2;
F:=True;
for I:=1 to R do
if S[I]<>S[L-I+1] then
begin
F:=False;
break;
end;
simmetr:=F;
end;
-
Задание №2
Символьный квадратный массив заполнен случайным набором символов. Определить количество цепочек, расположенных по вертикали и/или горизонтали и состоящих только из латинских букв.
-
Блок-схема программы
clrscr






readln(n)







kol
vvod


-
Работа программы
Вначале задаем 2 типа: самой матрицы и буффера.
type
Matrix=array[1..20,1..20] of Integer;
type
Vector=array[1..80] of Integer;
Begin
Делаем очистку экрана для удобного ввода и вывода информации и делаем запрос на ввод размера массива, согласно положению.
clrscr;
Повторяем ввод до тех пор, пока не будет введено число от 12 до 22.
repeat
write('Razmer matricy (12..20): ');
readln(N);
until (N>=12) and (N<=20);
Используем процедуру для формирования матрицы Matr размером N на N ячеек. Затем выводим ее на экран.
FormMatrix(Matr, N, N);
writeln('Sformirovana matrica:');
PrintMatrix(Matr, N, N);
Используем процедуру поворота матрицы и выводим матрицу на экран.
TurnMatrix(Matr, N);
writeln('Matrica posle povorota');
PrintMatrix(Matr, N, N);
readln;
end.
Процедура FormMatrix
Данная процедура присваивает значения от -99 до 99 элементам матрицы.
procedure FormMatrix(var A: Matrix; N, M: Integer);
var
I, J: Integer;
D: Integer;
R: Integer;
begin
randomize;
for I:=1 to N do
for J:=1 to M do
begin
Присваиваем элементу любое значение от 0 до 99.
A[I,J]:=random(100);
Если случайное число от 0 до 999 четное, данный элемент становится отрицательным, иначе знак не изменяется.
if (random(1000) mod 2)=0 then
A[I,J]:=0-A[I,J];
end;
end;
Процедура вывода матрицы на экран.
procedure PrintMatrix(var A: Matrix; N, M: Integer);
var
I, J: Integer;
Begin
Задаем два цикла, один для столбцов, второй для строк и поочередно выводим все элементы строки. После чего выводим следующую строку.
for I:=1 to N do
begin
for J:=1 to M do
write(A[I,J]:4);
writeln;
end;
end;
Процедура поворота матрицы на 90 градусов направо.
procedure TurnMatrix(var A: Matrix; N: Integer);
var
Arr: Vector;
I, J, K, Ot, L: Integer;
R: Integer;
Revers: Integer;
Buf1, Buf2: Integer;
begin
R:=N div 2;
Ставим начальное значение отступа Ot равным нулю.
Ot:=0;
for K:=1 to R do
begin
Переменная L отвечает за количество элементов в массиве Arr. Ставим начальное значение равное нулю, а затем заносим в массив Arr элементы матрицы.
L:=0;
for J:=1+Ot to N-Ot do
begin
Inc(L);
Arr[L]:=A[1+Ot, J];
end;
for I:=2+Ot to N-1-Ot do
begin
Inc(L);
Arr[L]:=A[I, N-Ot];
end;
for J:=N-Ot downto 1+Ot do
begin
Inc(L);
Arr[L]:=A[N-Ot, J];
end;
for I:=N-1-Ot downto 2+Ot do
begin
Inc(L);
Arr[L]:=A[I, 1+Ot];
end;
Находим на сколько элементов нужно сдвинуть массив Arr.
Revers:=N-2*Ot-1;
Далее, с помощью процедуры, циклически сдвигаем массив Arr из L элементов на Revers позиций вправо. И записываем получившийся массив обратно в матрицу.
TurnArray(Arr, L, Revers);
L:=0;
for J:=1+Ot to N-Ot do
begin
Inc(L);
A[1+Ot, J]:=Arr[L];
end;
for I:=2+Ot to N-1-Ot do
begin
Inc(L);
A[I, N-Ot]:=Arr[L];
end;
for J:=N-Ot downto 1+Ot do
begin
Inc(L);
A[N-Ot, J]:=Arr[L];
end;
for I:=N-1-Ot downto 2+Ot do
begin
Inc(L);
A[I, 1+Ot]:=Arr[L];
end;
Увеличиваем значение отступа.
Inc(Ot);
end;
Процедура циклического сдвига массива.
procedure TurnArray(var V: Vector; NN: Integer; Rev: Integer);
var
Buf: Integer;
I, J: Integer;
Begin
for J:=1 to Rev do
begin
Сохраняем значение элемента V[NN] в Buf, а затем сдвигаем элементы массива на 1 позицию.
Buf:=V[NN];
for I:=NN downto 2 do
V[I]:=V[I-1];
V[1]:=Buf;
end;
end;
-
Задание №3
Соединить два файла в третий, добавив после содержимого первого файла только те строки второго файла, в которых имеются числа-палиндромы.
-
Блок-схема программы
ff := 0



readln(name1)

name1 := name1+'.txt'






inc(ff)











ff := 0
readln(name2)
name2 := name2+'.txt'

inc(ff)


inc(ff)













res3in1
res3in2
-
Работа программы
Begin
Выводим на экран меню, представленное на рисунке 2.
Рисунок 2 – главное меню третьей программы.
menu;
Задаем три переменных, которые будут отвечать за информацию о вводе имени для трех файлов. И еще одну, которая будет отвечать за работу программы.
pf:=false;
vf:=false;
tf:=false;
cont:=true;
В будущем нам понадобится еще 2 переменных, flag1 и flag1, которые будут отвечать за наличие информации в файлах.
flag1:=false;
flag2:=false;
while cont do
begin
writeln;
write('Vvedite komandu: ');
Считываем команду и запускаем одну из процедур.
readln(command);
case command of
'0': cont:=false;
'1': begin
write('Vvedite imja pervogo faila: ');
readln(p);
Запускаем проверку правильности ввода имени файла, и если она проходит, то флаг ввода принимает значение True. Иначе будет выведено сообщение о неправильном вводе.
if check1(p)=true then
begin
pf:=true;
clrscr;
menu;
end
else
begin
clrscr;
menu;
writeln('Error input');
end;
end;
'2': begin
write('Vvedite imja vtorogo faila: ');
readln(v);
Запускаем проверку правильности ввода имени файла, и если она проходит, то флаг ввода принимает значение True. Иначе будет выведено сообщение о неправильном вводе.
if check1(v)=true then
begin;
vf:=true;
clrscr;
menu;
end
else
begin
clrscr;
menu;
writeln('Error input');
end;
end;
'3': begin
write('Vvedite imja tretego faila: ');
readln(t);
Запускаем проверку правильности ввода имени файла, и если она проходит, то флаг ввода принимает значение True. Иначе будет выведено сообщение о неправильном вводе.
if check1(t)=true then
begin
tf:=true;
clrscr;
menu;
end
else
begin
clrscr;
menu;
writeln('Error input');
end;
end;
'4': begin
Если все три имени файла введены верно, то запускается ряд процедур по составлению третьего файла.
if (pf=true)and(vf=true)and(tf=true) then
begin
filepr;
Данная процедура смотрит количество строк в файлах и выбирает максимальное и минимальное.
chmax;
Если оба файлы не пустые, то программа приступает к образованием слов и записи их в третий файл.
if check2=false then
begin
Ставим цикл до минимального числа строк.
for l:=1 to m do
begin
slv;
obrslov(slova1,slova2,k1,k2,slova,k);
for g:=1 to k do
begin
write(third,slova[g]);
if g end; Здесь осуществляется переход на следующую строчку. writeln(third,''); end; Выбираем в каком из файлов больше строк и переписываем оставшиеся без изменений. if m1<>m2 then begin if m1>m2 then for L:=m to m1 do begin readln(first,S1); writeln(third,S1); end else for L:=m to m2 do begin readln(second,S2); Writeln(third,S2); end; end; closing; writeln('Operacia zavershena'); end else Если первые два файла не прошли проверку, то программа скажет, какой именно из файлов пустой. begin if flag1=true then writeln('Pervii fail pustoi'); if flag2=true then writeln('Vtoroi fail pustoi'); end; end else begin Если файл не прошел первую проверку, то программа скажет, имя какого из файлов введено неверно или совсем не было введено. if pf=false then writeln('Ne vvedeno imja pervogo faila'); if vf=false then writeln('Ne vvedeno imja vtorogo faila'); if tf=false then writeln('Ne vvedeno imja tretego faila'); end; end; else writeln('Neizvestnaya komanda'); end; end; end. Процедура правильности проверки ввода имени файлов. function check1(x:string):boolean; begin В данном случае проверяется пустой ввод, и имя файла, начинающееся с пробела. if length(x)>0 then begin if x[1]<>' ' then check1:=true; end; end; Процедура привязки и открытия файлов. procedure filepr; begin assign(first,p); assign(second,v); assign(third,t); reset(first); reset(second); rewrite(third); end; Процедура проверки количества строк в файлах. procedure chmax; begin Сбрасываем счетчик строк. m1:=0; m2:=0; И пока не конец файла перебираем строки и прибавляем по единице к счетчику. while not eof(first) do
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.