- •230401 «Информационные системы»
- •230115 «Программирование в компьютерных системах»
- •Лабораторная работа №1. Организация ввода-вывода информации
- •Алфавит языка Turbo Pascal.
- •Переменные и константы.
- •Основные типы переменных.
- •Структура программы.
- •Оператор присваивания, операторы ввода с клавиатуры и вывода на экран.
- •Процедуры управления выводом на экран.
- •Компиляция и выполнение программы.
- •Лабораторная работа №2. Арифметические выражения. Программирование алгоритмов линейной структуры.
- •Арифметические выражения в языке Turbo Pascal.
- •Стандартные арифметические функции.
- •Генератор случайных чисел.
- •Составление алгоритма и программы для решения задачи.
- •Лабораторная работа № 3. Программирование алгоритмов разветвленной структуры. Оператор ветвления if … then … else
- •Условный оператор if … then … else.
- •Составной оператор.
- •Лабораторная работа № 4. Программирование алгоритмов разветвленной структуры. Оператор ветвления case.
- •Условный оператор Case.
- •Лабораторная работа № 5. Программирование алгоритмов циклической структуры с известным числом повторений.
- •Оператор циклаWhile.
- •Оператор цикла repeat.
- •Вложенные циклы
- •Оператор перехода
- •Лабораторная работа № 6. Обработка строк с использованием операторов цикла.
- •Лабораторная работа № 7. Программирование алгоритмов циклической структуры с неизвестным числом повторений.
- •Лабораторная работа № 8. Обработка одномерных числовых массивов.
- •Лабораторная работа № 9. Обработка двумерных числовых массивов.
- •Лабораторная работа № 10. Использование процедур и функций при обработке массивов.
- •Лабораторная работа № 11. Тип запись. Массивы записей.
- •Лабораторная работа № 12. Обработка информации из файлов последовательного доступа.
- •Лабораторная работа № 13. Обработка информации из файлов прямого доступа.
- •Лабораторная работа № 14. Модуль программиста. Многомодульный проект.
- •Текст модуля программиста к задаче 14.
Лабораторная работа № 7. Программирование алгоритмов циклической структуры с неизвестным числом повторений.
При выполнении работы необходимо знать:
Знать и уметь строить алгоритмы циклической структуры.
Знать операторы цикла (смотри лаб. работу № 5).
Уметь составить схему программы (алгоритм) циклической структуры для данной задачи и записать программу по готовому алгоритму.
Теоретический минимум:
При программировании алгоритмов циклической структуры с неизвестным числом повторений можно пользоваться оператором цикла while p do s; (с предусловием) или оператором цикла repeat s until p; (с постусловием).
Напомним синтаксис этих операторов на примере вычисления суммы ряда:
Цикл WHILE Цикл REPEAT
i:=2; S:=0; i:=2; S:=0;
while i<100 do repeat
begin S:=S+1/i;
S:=S+1/i; i:=i+1;
i:=i+1; until i>=100;
end;
Задача 7.
Вычислить приближенное значение числа с заданной точностью, если известно, что сумма ряда: приближается к значению при достаточно большом количестве членов ряда.
Математическая формулировка задачи:
Сумму ряда можно определить при помощи цикла с неизвестным числом повторений, который закончится при достижении необходимой точности вычислений.
Каждый член ряда вычисляется по формуле и помножается на -1, если n четное, и на +1, если n нечетное. Вычисления заканчиваются тогда, когда значение очередного члена ряда становится меньше, чем заданная точность вычислений.
Алгоритм решения задачи 7: Текст программы:
Program Ex_7;
Uses Crt;
Var
P: real; { сумма }
t: real; { точность вычислений }
el: real; { элемент ряда }
n: integer; { знаменатели дробей }
Begin
ClrScr;
P:=0;
n:=1;
el:=1;
write(‘ Задайте точность вычислений ’);
readln(t);
While el>=t do
begin
el:=1/(2*n-1);
if (n mod 2)=0
then P:=P-el;
else P:=P+el;
n:=n+1;
End;
P:=P*4;
Writeln(‘Значение ПИ равно ’ ,P);
Readln;
End.
Лабораторная работа № 8. Обработка одномерных числовых массивов.
При выполнении работы необходимо знать:
Знать и уметь строить алгоритмы циклической структуры для обработки одномерных массивов, знать операторы цикла (смотри лаб. работу № 5).
Знать принципы и приемы обработки одномерных числовых массивов с использованием операторов цикла.
Уметь составить схему программы (алгоритм) циклической структуры для обработки одномерного числового массива и записать программу по готовому алгоритму.
Теоретический минимум:
Переменные-массивы являются переменными сложного (структурированного) типа и представляют собой организованную группу элементов одного типа (линейную или прямоугольную таблицу).
Массив- это упорядоченная совокупность однотипных данных, имеющая одно общее имя.
Линейные таблицы представляют собой одномерные массивы, а прямоугольные таблицы - двумерные массивы.
-5 |
6 |
12 |
67 |
-90 |
34 |
-45 |
0 |
-4 |
83 |
-24 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Порядковые номера элементов массива ( индексы )
A [10] - одномерный массив.
Так как массив имеет одно общее имя, его элементы различаются только номерами (индексами).
При объявлении массива в программе после имени массива в квадратных скобках указывается его размерность, то есть количество элементов. Элементы такого массива идут по порядку с 0 по 10 (всего 11 элементов). Нулевой элемент можно не использовать.
Z [5, 6] - двумерный массив, содержит 5 строк и 6 столбцов (или 6 строк и 7 столбцов вместе с нулевыми). Чтобы обратиться к текущему (очередному) элементу массива, надо указать номер строки и столбца: Z[i, j].
j номера столбцов
i номера строк
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
0 |
34 |
51 |
-9 |
0 |
25 |
74 |
90 |
1 |
-7 |
-11 |
-43 |
67 |
98 |
10 |
56 |
2 |
-45 |
8 |
23 |
14 |
0 |
21 |
33 |
3 |
9 |
12 |
-15 |
62 |
83 |
48 |
17 |
4 |
-37 |
68 |
71 |
4 |
0 |
19 |
28 |
5 |
-59 |
-13 |
1 |
85 |
-7 |
-1 |
2 |
Таким образом, массив имеет следующие свойства:
Массив имеет имя, которое задает программист
Массив имеет сквозную нумерацию элементов
Массив имеет размерность, то есть определенное количество элементов
Массив имеет тип, определяющий тип всех входящих в него элементов
Массив имеет значения элементов, которые могут быть заданы в процессе выполнения программы и могут изменяться в пределах диапазона объявленного типа в ходе выполнения программы
Объявление массива. Перед началом работы с массивом необходимо объявить его и зарезервировать место в памяти под соответствующие количество элементов.
Объявление одномерного массива в программе:
Type Mas = array [1..10] of integer; { объявляем тип массив из 10 целых элементов }
Var A, B : Mas; { переменные A, B типа массив }
Массивы можно объявить и так:
Var A, B : array [1..10] of integer; { переменные A, B типа массив из 10 целых элементов }
Первый способ объявления предпочтительнее, так как при этом программа получается более наглядной. Кроме того, при использовании подпрограмм массивы следует объявлять с явным указанием типа, чтобы массивы в главной программе и массивы в подпрограммах принадлежали к одному и тому же типу. В противном случае при передаче данных в подпрограммы и обратно возникнет ошибка.
Ввод элементов массива может осуществляться разными способами. Любая обработка массивов, в том числе ввод и вывод, производится поэлементно, т.е. в цикле.
Приведем пример организации ввода одномерного массива целых чисел А [10]. Нулевой элемент использовать не будем.
Ввод элементов одномерного массива с клавиатуры:
For i:=1 to 10 do begin
Writeln(‘Введите значение A[’, i, ‘]: ’);
Readln(A[i]);
End;
При запуске на выполнение необходимо поочередно ввести 10 элементов массива (долго, не всегда удобно).
Ввод элементов одномерного массива случайным образом:
Randomize;
For i:=1 to 10 do begin
A[i]:=random(200)-100;
End;
При запуске программы на выполнение элементы массива получат случайные значения при помощи генератора случайных чисел Random в интервале [-100; 100[.
Вывод значений элементов массива на экран. Осуществляется при помощи цикла. Перед выводом лучше очистить экран командой ClrScr. Вывод одномерного числового массива на экран можно осуществлять в строчку или столбик.
Вывод значений элементов одномерного массива на экран:
ClrScr; { очищение экрана }
For i:=1 to 10 do begin
Write(A[i]:5);
{ вывод элементов массива в строчку, на каждый элемент отводится 5 позиций}
End;
ClrScr; { очищение экрана }
For i:=1 to 10 do begin
Writeln(A[i]); { вывод элементов массива в столбик }
End;
Обработка массивов обычно связана с подсчетом суммы, произведения элементов массива, всех или выборочно, с поиском максимального или минимального элемента, подсчетом количества положительных, отрицательных, четных, нечетных либо каких-то еще элементов массива. Возможны также преобразования массивов: перестановка элементов, сдвиг элементов и т. д. Обработка массивов осуществляется при помощи циклов.
Задача 8.1.
Задать одномерный числовой массив А [10] из целых чисел. Определить сумму и количество отрицательных элементов массива.
Математическая формулировка задачи:
Чтобы определить сумму и количество отрицательных элементов массива, нужно сначала заполнить массив некоторыми числами, а затем просмотреть массив сначала, от первого элемента до последнего (в цикле). Каждый элемент нужно проверить – если он окажется отрицательным (соответствующим нашему критерию), то его нужно добавлять в сумму, а если не отрицательным – то не нужно добавлять в сумму.
Количество элементов, соответствующих какому-либо критерию, в данном случае отрицательных по значению, подсчитывается при помощи специальной переменной. До подсчета она равна нулю, и увеличивается на 1 каждый раз, когда найден нужный (отрицательный) элемент.
Текст программы к задаче 8.1:
Program Ex_8_1;
Uses Crt;
Type Mas = array [1..10] of integer; { объявляем тип массив из 10 целых чисел }
Var A : Mas; { переменная A типа массив }
S: real; { сумма отрицательных элементов массива }
i: integer; { индексы массива }
k: integer; { количество отрицательных элементов массива }
Begin
ClrScr; { очищение экрана }
Textcolor(1); { установим цвет текста синий }
Randomize;
For i:=1 to 10 do begin
A[i]:=random(200)-100;
Writeln(A[i]); { вывод элементов массива в столбик }
End;
S:=0; k:=0;
For i:=1 to 10 do begin
If A[i]<0 then begin
S:=S+A[i];
k:=k+1;
End;
End;
Writeln; { перевод строки }
Textcolor(2); { установим цвет текста зеленый}
Writeln( ‘Сумма отрицательных элементов массива ’,S);
Writeln(‘Количество отрицательных элементов массива ’,k);
Readln;
End.
Задача 8.2.
Задать одномерный числовой массив А [15] из целых чисел. Сформировать одномерный массив В из положительных элементов массива А.
Математическая формулировка задачи:
Прежде всего нужно заполнить исходный массив А какими-либо числами. Часть из них могут быть положительными, а часть отрицательными или равными нулю.
Чтобы получить одномерный массив В из элементов исходного массива А нужно просматривать массив А в цикле и проверять каждый элемент исходного массива, является ли его значение положительным. Если найден положительный элемент, то его значение нужно записать в первую ячейку нового массива В (присвоить элементу массива В значение элемента массива А). Затем просмотр продолжается. Отыскав второе положительное значение, записываем его во вторую ячейку массива В и так далее.
Обратите внимание, что увеличение индексов (номеров) элементов массива В идет не одновременно с увеличением индексов массива А. В самом деле, ведь не каждый элемент массива А попадет в массив В. Даже количество элементов массива В заранее не известно (это будет зависеть от конкретных данных массива А). Поэтому понадобится одна переменная для индексации массива А и другая переменная для индексации массива В, причем увеличение индекса в массиве В будет происходить только в тот момент, когда очередному элементу массива В присваивается найденный в массиве А положительный элемент.
-59 |
0 |
17 |
-8 |
-36 |
6 |
19 |
97 |
-29 |
34 |
-4 |
0 |
-74 |
3 |
-48 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
Порядковые номера элементов массива ( индексы )
A [15] – исходный одномерный массив.
17 |
6 |
19 |
97 |
34 |
3 |
1 |
2 |
3 |
4 |
5 |
6 |
В [6] – одномерный массив, сформированный из положительных элементов массива А.
Текст программы к задаче 8.2:
Program Ex_8_2;
Uses Crt;
Type Mas = array [1..15] of integer; { объявляем тип массив из 10 целых чисел }
Var A, В : Mas; { переменные A, В типа массив }
i: integer; { индексы массива A}
k: integer; { индексы массива В }
Begin
ClrScr; { очищение экрана }
Randomize;
For i:=1 to 15 do begin
A[i]:=random(200)-100;
Write(A[i]:5); { вывод элементов массива в одну строку }
End;
Writeln; { перевод строки }
k:=0;
For i:=1 to 15 do begin
If A[i]>0 then begin
k:=k+1; { увеличение индекса массива В }
B[k]:=A[i]; { записываем положительный элемент массива А в массив В }
Write(B[k]:5); { выводим элементы массива В на экран }
End;
End;
Writeln; { перевод строки }
Textcolor(4); { установим цвет текста красный }
Writeln(‘Количество элементов массива B ’,k);
Readln;
End.
Схема программы к задаче 8.1 Схема программы к задаче 8.2
Задача 8.3.
Задать одномерный числовой массив А [15] из целых чисел. Определить произведение четных по значениям элементов массива, стоящих после минимального элемента.
Математическая формулировка задачи:
Чтобы определить такое произведение, требуется сначала найти минимальное значение в массиве и запомнить в какой-либо переменной порядковый номер минимума. После этого надо подсчитать произведение четных по значениям элементов, начиная просмотр массива не с первого элемента, как обычно, а с этого номера.
Поиск минимума в массиве происходит по стандартному алгоритму. Сначала за минимум принимается значение первого по порядку элемента массива. Номер минимума соответственно принимается за 1. Массив просматривается поэлементно в цикле от первого элемента до последнего. Если найдется элемент, значение которого меньше, чем принятый минимум, то минимум равен ему. Одновременно меняется и номер минимума. После выхода из цикла в переменной минимум окажется наименьшее значение массива.
Текст программы к задаче 8.3:
Program Ex_8_3;
Uses Crt;
Type Mas = array [1..15] of integer; { объявляем тип массив из 10 целых элементов }
Var A : Mas; { переменные A, В типа массив }
i: integer; { индексы массива A}
Min: integer; { минимум в массиве }
k: integer; { номер минимума }
P: real; { произведение четных по значениям элементов}
Begin
ClrScr;
Randomize;
For i:=1 to 15 do begin
A[i]:=random(200)-100;
Write(A[i]:5); { вывод элементов массива в одну строку }
End;
Writeln; { перевод строки }
Min:=A[1];
k:=1;
For i:=1 to 15 do begin
If A[i]<Min then begin
k:=i; { увеличение индекса массива В }
Min:=A[i]; { записываем положительный элемент массива А в массив В }
End;
End;
Writeln; { перевод строки }
Writeln(‘ Номер минимума ’, k);
Writeln(‘ Значение минимума ’, Min);
P:=1; { начальное значение произведения }
For i:=k to 15 do begin
If A[i] mod 2=0 then P:=P*A[i];
End;
Writeln(‘ P= ’, P);
Readln;
End.
Схема программы к задаче 8.3