
- •Смоленский гуманитарный университет
- •Часть 1. Основы алгоритмизации
- •Тема 1 «Алгоритмы линейной структуры»
- •Ход работы
- •Тема 2 «Алгоритмы разветвляющейся структуры»
- •Ход работы
- •Тема 3 «Алгоритмы циклической структуры»
- •Ход работы
- •Тема 4 «Вложенные циклы»
- •Ход работы
- •Тема 5 «Массивы»
- •Ход работы
- •Часть 2. Программирование
- •Тема 6 «Линейная структура программы»
- •Примеры решения задач
- •Ход работы
- •Тема 7 «Разветвляющая структура программы»
- •Примеры решения задач
- •Ход работы
- •Тема 8 «Циклическая структура программы»
- •Примеры решения задач
- •1 Способ
- •2 Способ.
- •1 Способ
- •2 Способ
- •1 Способ
- •2 Способ
- •1 Способ
- •2 Способ
- •Ход работы
- •Тема 9 «Понятие подпрограммы. Организация процедур и функций»
- •Примеры решения задач
- •Ход работы
- •Тема 10 «Рекурсия»
- •Примеры решения задач
- •Ход работы
- •Тема 11 «Строковый тип данных. Методы работы со строками»
- •Ход работы
- •Тема 12 «Тип данных массив»
- •Примеры решения задач
- •1 Способ
- •2 Способ
- •1 Способ
- •2 Способ
- •1 Способ
- •2 Способ
- •Алгоритм
- •1 Способ
- •2 Способ
- •1 Способ
- •2 Способ
- •Алгоритм
- •Работа программы
- •Ход работы
- •Тема 13 «Тип данных - запись»
- •Ход работы
- •Тема 14 «Файлы. Типы файлов. Методы работы с файлами»
- •Примеры решения задач
- •1 Способ
- •2 Способ
- •Ход работы
- •Тема 15 «Множества»
- •Ход работы
- •Тема 16 «Работа с мультимедиа»
- •Ход работы
- •Максимова Наталья Адександровна Основы программирования
- •214014, Г. Смоленск, ул. Герцена, 2
2 Способ
Program Problem2;
uses WinCrt;
const
n = 20;
type
t = array[1..n] of integer;
var
a : t;
s, i : integer;
begin
randomize;
writeln('Заданный массив целых чисел');
s := 0;
for i := 1 to n do
begin
a[i] := random(201)-100;
write(a[i], ' ');
if i mod 2 = 0 then s := s + a[i]
end;
writeln;
writeln('Сумма элементов с четными номерами равна ', s)
end.
Задача 3. В одномерном массиве необходимо найти номер заданного пользователем числа и переставить его на первое место в массиве, последовательно переставляя с соседними элементами.
Решение
Program Problem3;
uses WinCrt;
const
n = 20;
type
t = array[1..n] of integer;
var
a : t;
i, k, d : integer;
{----------------------------------------------------------------------------------------}
Procedure create(n : integer; var a : t);
var
i : integer;
begin
randomize;
writeln('Заданный массив целых чисел');
for i := 1 to n do
begin
a[i] := random(201) - 100; write(a[i], ' ')
end;
writeln
end;
{----------------------------------------------------------------------------------------}
Procedure search_number(d : integer; a : t; var k : integer);
var
i : integer;
begin
i := 0;
repeat
i := i + 1
until a[i] = d;
k := i
end;
{----------------------------------------------------------------------------------------}
Procedure transp_begin(n, k : integer; var a : t);
var
i, p : integer;
begin
for i := k downto 2 do
begin
p := a[i-1];
a[i-1] := a[i];
a[i] := p
end
end;
{----------------------------------------------------------------------------------------}
begin
create(n, a);
write('Введите переставляемый элемент '); readln(d);
search_number(d, a, k);
transp_begin(n, k, a);
writeln('Массив после перестановки элемента в начало');
for i := 1 to n do write(a[i], ' ');
writeln
end.
Задача 4. Сортировка методом пузырька
Решение
Program Problem4; {Пузырьковая сортировка}
uses WinCrt;
const
n = 100;
type
t = array[1..n] of integer;
var
a : t;
{----------------------------------------------------------------------------------------}
Procedure create(n : integer; var a : t);
var
i : integer;
begin
randomize;
writeln('Заданный массив целых чисел');
for i := 1 to n do
begin
a[i] := random(201) - 100;
write(a[i], ' ')
end;
writeln
end;
{----------------------------------------------------------------------------------------}
Procedure bubble(n : integer; var a : t);
var
i, j, p : integer; {Сортировка элементов массива}
begin
for i := 2 to n do
for j := n downto i do
if a[j] < a[j-1] then
begin
p := a[j];
a[j] := a[j-1];
a[j-1] := p
end;
writeln('Упорядоченный по не убыванию массив');
for i := 1 to n do write(a[i], ' ');
writeln
end;
{----------------------------------------------------------------------------------------}
begin
create(n, a);
bubble(n, a)
end.
Задача 5. Задача поиска элемента в упорядоченном массиве. Пусть задан целочисленный массив и задано целое число b. Выяснить входит ли число b в заданный массив и если входит, то каково значение номера элемента равного данному числу, т. е. найти такое p, для которого
Решение
Program Problem5;
uses WinCrt;
const
n = 20;
type
t = array[1..n] of integer;
var
a : t;
p, q, s, b, i : integer;
begin
writeln('Вводите элементы упорядоченного по неубыванию массива');
for i := 1 to n do
begin
write('Введите ', i, '-й элемент '); readln(a[i])
end;
writeln;
write('Введите число b '); readln(b);
p := 1; q := n;
while p < q do
begin
s := (p + q) div 2;
if a[s] < b then p := s + 1
else q := s
end;
if a[p ]= b
then writeln('Число ', b, ' равно ', p, '-му элементу')
else writeln('Такого элемента в массиве нет')
end.
Задача 6. Сравнить два массива.
Решение
Program Problem6;
uses WinCrt;
const
n1 = 100;
type
t = array[1..n1] of integer;
var
a, b : t;
i, k, p, n, m : integer;
{----------------------------------------------------------------------------------------}
Procedure quick_search(a : t; n, b : integer; var p : integer);
var
q, s : integer;
begin
p := 1; q := n;
while p < q do
begin
s := (p + q) div 2;
if a[s] > b then p := s + 1
else q := s
end
end;
{---------------------------------------------------------------------------------------}
begin
write('Введите число элементов массива a, n= ');
readln(n);
write('Введите число элементов массива b, m= ');
readln(m);
writeln('Введите упорядоченный по убыванию элементы массива a');
for i := 1 to n do
begin
write('Введите ', i, '-й элемент '); readln(a[i])
end;
writeln('Введите элементы массива b ');
for i := 1 to m do
begin
write('Введите ', i, '-й элемент '); readln(b[i])
end;
writeln('Заданные массивы чисел');
for i := 1 to n do write(a[i]:4); writeln;
for i := 1 to m do write(b[i]:4); writeln;
k := 0;
for i := 1 to m do
begin
quick_search(a, n, b[i], p);
if a[p] <> b[i] then k := k + 1
end;
write('Число элементов массива b, не равных ');
writeln('элементам массива a равно ', k)
end.
Задача 7. Для упорядочивания массива чисел a1, a2, ..., an может быть использован алгоритм сортировки простыми вставками. Опишем этот алгоритм применительно к упорядочиванию по возрастанию. Просматривать последовательно a2, ..., an и каждый новый элемент ai вставлять на подходящее место в уже упорядоченную совокупность a1, ..., ai-1. Написать программу, реализующую этот алгоритм.
Решение
Пусть задан массив чисел (снова, для простоты рассуждений, возьмем массив целых чисел):
12 -3 25 -10 6 8 34 -65 44 17
Этот, заданный массив обозначим именем a. В нашем примере он имеет 10 элементов.
Заведем еще один массив, также из 10 тех же элементов, но уже упорядоченных по возрастанию.
Наша задача будет
состоять в построении этого массива. В
качестве первого элемента упорядоченного
массива b
возьмем первый элемент массива a:
Итак, массив b:
12
Теперь берем второй элемент массива a - это -3 и с помощью процедуры быстрого поиска вставляем его в упорядоченный массив b. Поскольку -3 меньше 12, то он вставится перед 12 и упорядоченный массив b уже будет состоять из 2-х элементов:
-3 12
Берется третий элемент массива a - 25 и вставляется в массив b, получаем:
-3 12 25
И такой процесс будем продолжать до тех пор, пока все n элементов массив a не будут просмотрены. В результате образуется новый упорядоченный массив b.