
- •Введение
- •Лабораторная работа №1
- •Лабораторная работа №2 Задача 1
- •Лабораторная работа №3 Задача 1
- •Лабораторная работа №4
- •Задача 3
- •Лабораторная работа №5
- •Лабораторная работа №6
- •Лабораторная работа №7
- •Лабораторная работа №8-10
- •Лабораторная работа №11 Задача 1
- •Лабораторная работа №12
- •Лабораторная работа №14
- •Лабораторная работа №15
- •Лабораторная работа №16
- •Лабораторная работа №17
- •Заключение:
Задача 3
Постановка задачи: Дана строка-предложение на русском языке. Вывести самое длинное слово в предложении. Если таких слов несколько, то вывести первое из них. Словом считать набор символов, не содержащий пробелов, знаков препинания и ограниченный пробелами, знаками препинания или началом/концом строки.
Тест:
Входные данные: |
Выходные данные: |
Строка из русских букв |
Самое длинное слово в строке |
Блок-схема:
Начало
Конец
max_len
:= length(t);
last:=t;
max_len
< length(t)
t := t + s[i]
t := ' '
(s[i]<>'
') (s[i]<>',') (s[i]<>'.') (i<=len)
(s[i]='
') or (s[i]=',') do Inc(i)
(i<len)
(i<>len-1)
(s[i]<>'.')
S
Листинг программы:
uses CRT;
var s,t,last:string;
max_len,len,i:integer;
begin
write('введите строку из русских букв : ');
readln(s);
max_len:=1;
len:=length(s);
i:=1;
while (i<len) and (i<>len-1) and (s[i]<>'.') do
begin
while (s[i]=' ') or (s[i]=',') do Inc(i);
t := '';
while (s[i]<>' ') and (s[i]<>',') and (s[i]<>'.') and (i<=len) do
begin
t := t + s[i];
Inc(i);
end;
if max_len < length(t) then
begin
max_len := length(t);
last:=t;
end;
end;
WriteLn('Самое длинное слово слово : ',last);
end.
Скриншот:
Рис 8.
Лабораторная работа №5
Задача 1
Постановка задачи: Создать массив и вставить нули перед числом на выбор пользователя.
Тест:
Входные данные: |
Выходные данные: |
Массив |
Массив |
Блок-схема:
I<=N
I:=1
I:=I+1
i
MASS[I]
I<=N
I:=1
N
Начало
(n>=1)
and (n<=20)
I:=I-1
MASS[I]:=MASS[I-M]
INC(N,M)
I:=N
I>=K+M
Ввод М
(k>=1)and(k<=n)
Ввод K
I:=I+1
MASS[I]:4
(M>=1)and(M<=10)
I:=1
Конец
I:=I+1
Вывод MASS[I]:4
I<=N
I:=1
I:=I+1
MASS[K+I-1]:=0
I<=M
Листинг программы:
program zadacha_2;
uses crt;
var
mass: array [1..20] of integer;
k,N,i,m:integer;
begin
repeat
write('Ddtlbnt n');
readln(n);
until (n>=1) and (n<=20);
writeln('Введите элементы массива: ');
for i:=1 to n do
begin
write('[',i,']=');
readln(mass[i]);
end;
writeln;
writeln('Исходный массив');
for i:=1 to n do
write(mass[i]:4);
writeln;
repeat
write('Введите номер элемента, перед кот. вставлять K=');
readln(k);
until (k>=1) and (k<=n);
repeat
write('Введите кол-во чисел для вставки M=');
readln(m);
until (m>=1) and (m<=10);
inc(n,m);
for i:=n downto k+m do
mass[i]:=mass[i-m];
for i:=1 to m do
mass[k+i-1]:=0;
writeln('Полученный массив');
for i:=1 to n do
write(mass[i]:4);
writeln;
readln;
end.
Скриншот:
Рис 9.
Задача 2
Постановка задачи: Программа должна создавать матрицу и должна удалять столбы в матрице на выбор.
Тест:
Входные данные: |
Выходные данные: |
Матрица |
Измененная матрица |
Блок-схема:
(m>=1)and(m<=10)
m
Кол-во столбцов
(n>=1)and(n<=10)
n
Кол-во строк
Начало
a[i,j]:4
i:=1 to m
i:=1 to n
k
a[i,j]:=4
a[i,j]:=random(10)
i:=1 to m
I:=1 to n
Конец
Листинг программы:
uses CRT;
type
matrix=array[1..10,1..10] of integer;
var
n,i,m,j,k:integer;
a:matrix;
begin
repeat
write('Введите количество строк матрицы' );
readln(n);
until (n>=1) and (n<=10);
repeat
write('Введите количество столбцов матрицы' );
readln(m);
until (m>=1) and (m<=10);
writeln('Исходная матрица');
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=1+random(10);
write(a[i,j]:4);
end;
writeln;
end;
writeln;
repeat
write('Введите номер столбца для удаления K=');
readln(k);
until (k>=1) and (k<=m);
for j:=k to m-1 do
for i:=1 to n do
a[i,j]:=a[i,j+1];
dec(m);
writeln('Полученная матрица');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
writeln;
readln;
end.
Скриншот:
Рис 10.
Задача 3
Постановка задачи: Сортировка массива.
Тест:
Входные данные: |
Выходные данные: |
Массив |
Отсортированный массив |
Блок-схема:
N:=3
N:=2
N:=1
N
Начало
heisenberg1
Heisenberg2
Heisenberg3
Конец
Heisenberg9
N:=9
Листинг программы:
program starfenix;
uses crt;
var me:integer;
procedure heisenberg1;
VAR
I,J,N,X:INTEGER;
A:ARRAY[0..50] OF INTEGER;
BEGIN
WRITELN('Введите длину массива');
READ(N);
WRITELN('Введите массив');
FOR I:=1 TO N DO READ(A[I]);
FOR I:=2 TO N DO
BEGIN
X:=A[I];
A[0]:=X;
J:=I;
WHILE X<A[J-1] DO
BEGIN
A[J]:=A[J-1];
DEC(J)
END;
A[J]:=X
END;
WRITELN('Результат:');
FOR I:=1 TO N DO WRITE(A[I],' ')
END;
procedure heisenberg2;
VAR I,J,M,L,R,X,N:INTEGER;
A:ARRAY[0..50] OF INTEGER;
BEGIN
WRITELN('Введи длину массива');
READ(N);
WRITELN('Введи массив');
FOR I:=1 TO N DO READ(A[I]);
FOR I:=2 TO N DO
BEGIN
X:=A[I];L:=1;R:=I;
WHILE L<R DO
BEGIN
M:=(L+R) DIV 2;
IF A[M]<=X THEN
L:=M+1
ELSE R:=M
END;
FOR J:=I DOWNTO R+1 DO
A[J]:=A[J-1];
A[R]:=X
END;
WRITELN('Результат:');
FOR I:=1 TO N DO WRITE(A[I],' ')
END;
procedure heisenberg3;
VAR I,J,R,X,N:INTEGER;
A:ARRAY[0..50] OF INTEGER;
BEGIN
WRITELN('Введи длину массива');
READ(N);
WRITELN('Введи массив');
FOR I:=1 TO N DO READ(A[I]);
FOR I:=1 TO N-1 DO
BEGIN
R:=I;
X:=A[I];
FOR J:=I+1 TO N DO
IF A[J]<X THEN
BEGIN
R:=J;
X:=A[R]
END;
A[R]:=A[I];
A[I]:=X
END;
WRITELN('Результат:');
FOR I:=1 TO N DO WRITE(A[I],' ')
END;
procedure heisenberg4;
VAR I,J,X,N:INTEGER;
A:ARRAY[0..50] OF INTEGER;
BEGIN
WRITELN('Введи длину массива');
READ(N);
WRITELN('Введи массив');
FOR I:=1 TO N DO READ(A[I]);
FOR I:=2 TO N DO
FOR J:=N DOWNTO I DO
IF A[J-1]>A[J] THEN
BEGIN
X:=A[J-1];
A[J-1]:=A[J];
A[J]:=X
END;
WRITELN('Результат:');
FOR I:=1 TO N DO WRITE(A[I],' ')
END;
procedure heisenberg5;
VAR
J,L,K,R,X,N,I:INTEGER;
A:ARRAY[0..50] OF INTEGER;
BEGIN
WRITELN('Введи длину массива');
READ(N);
WRITELN('Введи массив');
FOR I:=1 TO N DO READ(A[I]);
L:=2;
R:=N;
K:=N;
REPEAT
FOR J:=R DOWNTO L DO
IF A[J-1]>A[J] THEN
BEGIN
X:=A[J-1];
A[J-1]:=A[J];
A[J]:=X;
K:=J
END;
L:=K+1;
FOR J:=L TO R DO
IF A[J-1]>A[J] THEN
BEGIN
X:=A[J-1];
A[J-1]:=A[J];
A[J]:=X;
K:=J
END;
R:=K-1
UNTIL L>R;
WRITELN('Результат:');
FOR I:=1 TO N DO WRITE(A[I],' ')
END;
procedure heisenberg6;
CONST T=4;
H: ARRAY[1..4] OF INTEGER = (15,7,3,1);
VAR
I,J,K,S,X,N,M:INTEGER;
A:ARRAY[-16..50] OF INTEGER;
BEGIN
WRITELN('Введи длину массива');
READ(N);
WRITELN('Введи массив');
FOR I:=1 TO N DO READ(A[I]);
FOR M:=1 TO T DO
BEGIN
K:=H[M];
S:=-K;
FOR I:=K+1 TO N DO
BEGIN
X:=A[I];
J:=I-K;
IF S=0 THEN S:=-K;
INC(S);
A[S]:=X;
WHILE X<A[J] DO
BEGIN
A[J+K]:=A[J];
J:=J-K
END;
A[J+K]:=X
END;
END;
WRITELN('Результат:');
FOR I:=1 TO N DO WRITE(A[I],' ')
END;
procedure heisenberg7;
VAR I,X,L,N,R:INTEGER;
A:ARRAY[0..50] OF INTEGER;
PROCEDURE SIFT(L,R: INTEGER);
VAR
I,J,X: INTEGER;
BEGIN
I:=L;
J:=2*L;
X:=A[L];
IF (J<R)AND(A[J]<A[J+1]) THEN INC(J);
WHILE (J<=R)AND(X<A[J]) DO
BEGIN
A[I]:=A[J];
A[J]:=X;
I:=J;
J:=2*J;
IF (J<R)AND(A[J]<A[J+1]) THEN INC(J);
END
END;
BEGIN
WRITELN('Введи длину массива');
READ(N);
WRITELN('Введи массив');
FOR I:=1 TO N DO READ(A[I]);
L:=(N DIV 2)+1;
R:=N;
WHILE L>1 DO
BEGIN
DEC(L);
SIFT(L,N)
END;
WHILE R>1 DO
BEGIN
X:=A[1];
A[1]:=A[R];
A[R]:=X;
DEC(R);
SIFT(1,R)
END;
WRITELN('Результат:');
FOR I:=1 TO N DO WRITE(A[I],' ')
END;
procedure heisenberg8;
VAR N,I:INTEGER;
A:ARRAY[0..50] OF INTEGER;
PROCEDURE SORT(L,R: INTEGER);
VAR
I,J,X,W: INTEGER;
BEGIN
I:=L;
J:=R;
X:=A[(L+R) DIV 2];
REPEAT
WHILE A[I]<X DO INC(I);
WHILE X<A[J] DO DEC(J);
IF I<=J THEN
BEGIN
W:=A[I];
A[I]:=A[J];
A[J]:=W;
INC(I);
DEC(J)
END
UNTIL I>J;
IF L<J THEN SORT(L,J);
IF I<R THEN SORT(I,R);
END;
BEGIN
WRITELN('Введи длину массива');
READ(N);
WRITELN('Введи массив');
FOR I:=1 TO N DO READ(A[I]);
SORT(1, N);
WRITELN('Результат:');
FOR I:=1 TO N DO WRITE(A[I],' ')
END;
procedure heisenberg9;
VAR
L,R,I,J,N,W,X,K: INTEGER;
A: ARRAY [1..1000] OF INTEGER;
BEGIN
WRITELN('Введите длину массива');
READ(N);
WRITELN('Введи массив');
FOR I:=1 TO N DO READ (A[I]);
L:=1;R:=N;
WRITELN('Введи требуемый номер статистики');
READ(K);
WHILE L<R DO
BEGIN
X:=A[K];I:=L;J:=R;
REPEAT
WHILE A[I]<X DO INC(I);
WHILE X<A[J] DO DEC(J);
IF I<=J THEN
BEGIN
W:=A[I];
A[I]:=A[J];
A[J]:=W;
INC(I);
DEC(J)
END
UNTIL I>J;
IF J<K THEN L:=I;
IF K<I THEN R:=J;
END;
WRITELN('Результат = ',A[K])
END;
BEGIN
writeln(Прямое включение);
writeln('2-Половинное деление');
writeln('3-Прямой выбор');
writeln('4-Пузырёк');
writeln('5-Шейкерная сортировка');
writeln('6-Сортировка Шелла');
writeln('7-С помощью дерева');
writeln('8-С помощью разделения');
writeln('9-К-элемент’);
readln(me);
case me of
1:heisenberg1;
2:heisenberg2;
3:heisenberg3;
4:heisenberg4;
5:heisenberg5;
6:heisenberg6;
7:heisenberg7;
8:heisenberg8;
9:heisenberg9;
end;
END.
Скриншот:
Рис 11.
Задача 4
Постановка задачи: Программа сортирует с левого верхнго угла.
Тест:
Входные данные: |
Выходные данные: |
Массив |
Отсортированный массив |
Блок-схема:
Листинг программы:
uses crt;
var a:array[1..25] of integer;
m:array[1..25,1..25] of integer;
i,j,n,p,k:integer;
b:real;
d:boolean;
begin
d:=true;
k:=1;
writeln('Введите размерность массива');
readln(n);
for i:=1 to n do
readln(a[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i] > a[j] then
begin
p:=a[i];
a[i]:=a[j];
a[j]:=p;
end;
for i:=1 to n do
writeln(a[i]);
b:=sqrt(n);
n:=round(b);
for i:=1 to n do
for j:=1 to n do
begin
m[i,j]:=a[k];
k:=k+1;
end;
writeln;
for i:=1 to n do
begin
if d=true then
begin
for j:=1 to n do
write(m[i,j],' ');
writeln;
d:=false;
end
else
begin
for j:=n downto 1 do
write(m[i,j],' ');
writeln;
d:=true;
end;
end;
end.
Скриншот:
Рис 12.
Задача 5
Постановка задачи: Создать массив и вычислить кол-во участвов в нём.
Тест:
Входные данные: |
Выходные данные: |
Массив |
Кол-во участков |
Блок-схема:
Листинг программы:
program zadacha_1;
uses crt;
var
mass:array[1..10] of integer;
i,b,c,n:integer;
begin
repeat
write('Размер массива = 10 Введите n');
readln(n);
until (n>=1) and (n<=10);
writeln('Введите элементы массива');
for i:=1 to n do
begin
write('[',i,']');
readln(mass[i]);
end;
writeln;
writeln('Исходный массив');
for i:=1 to n do
write(mass[i]:4);
writeln;
c:=0;
i:=1;
while i<n do
if mass[i]<mass[i+1] then
begin
inc(c);
b:=i;
while (b<n) and (mass[b]<mass[b+1]) do
inc(b);
i:=b+1;
end
else
inc(i);
writeln('Кол-во участков=',c);
readln;
end.
Скриншот:
Рис 12.