Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Портфолио Шимбирёв.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.53 Mб
Скачать

Задача 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.