Курсовая работа: Работа с текстовыми строками, двумерными массивами, файловыми структурами данных
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
Задание №2
Символьный квадратный
массив заполнен случайным набором символов. Определить количество цепочек,
расположенных по вертикали и/или горизонтали и состоящих только из латинских
букв.
Вначале задаем 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
Задание №3
Соединить два файла
в третий, добавив после содержимого первого файла только те строки второго
файла, в которых имеются числа-палиндромы.
3.1
Блок-схема программы


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);
Страницы: 1, 2, 3, 4, 5, 6, 7 |