for i:= 1 to n do Begin - Портал информационно

advertisement
Министерство образования
и науки Российской Федерации
В. М. Паклина, Е. М. Паклина
Основы
алгоритмизации и
программирования
Учебное электронное текстовое издание
Методические указания к лабораторным работам по дисциплине «Информатика»
для студентов всех направлений всех форм обучения
Научный редактор: доц., канд. техн. наук И. Н. Обабков
Подготовлено кафедрой
интеллектуальных информационных технологий
Методические указания содержат лабораторные работы по линейным алгортмам,
ветвлениям, циклам. Рассматриваются подпрограммы и структурированные типы
данных: массивы, множества, строки, записи и файлы.
Екатеринбург
2011
ОГЛАВЛЕНИЕ
Лабораторная работа № 1. Линейные алгоритмы .................................................... 3
Лабораторная работа № 2. Разветвляющиеся алгоритмы ....................................... 6
Лабораторная работа № 3. Циклы ........................................................................... 10
Лабораторная работа № 4. Одномерные массивы ................................................. 13
Лабораторная работа № 5. Двумерные массивы .................................................... 17
Лабораторная работа № 6. Множества ................................................................... 21
Лабораторная работа № 7. Строки .......................................................................... 23
Лабораторная работа № 8. Файлы ........................................................................... 25
Лабораторная работа № 9. Записи ........................................................................... 27
Лабораторная работа № 10. Подпрограммы ........................................................... 29
Библиографический список ...................................................................................... 31
2
ЛАБОРАТОРНАЯ РАБОТА № 1. ЛИНЕЙНЫЕ АЛГОРИТМЫ
Задание 1. Запустите среду программирования Pascal и наберите
следующий код программы:
Program Example;
Uses Crt;
Var R, S, L: integer;
Begin
Clrscr;
Write(‘R=’);
Readln(R);
S:= pi*sqr(R)
L:= 2*pi*R
Write(‘S=’, S);
Write(‘L=’,L);
Readln;
End.
Определите, что вычисляется в программе.
Исправьте ошибки в коде программы.
Задание 2. Определите, что появится на экране после выполнения команд:
a) x:=10;
y:=3;
z:=x/y;
Writeln(x, ’:’, y,’=’, z:3:1);
b) x:= 9 mod 2;
y:= 9 div 2;
Writeln(‘Целая часть от деления 9 на 2 равна’, y);
Writeln(‘Остаток от деления 9 на 2 равен’, x);
3
Задание 3. Установите правильный порядок команд в программе,
вычисляющей объем параллелепипеда.
□
□
□
□
□
□
□
□
Begin
V:=a*b*h;
Program Example1;
Uses Crt;
end.
Writeln(‘V=’,V:5:2);
Var h, a, b: integer;
V: real;
Write(‘a=’); Readln(a);
Write(‘b=’); Readln(b);
Write(‘h=’); Readln(h);
□
Writeln(‘Вычисление объема параллелепипеда’);
Задание 4. Составьте программу по заданной блок-схеме.
Начало
a, b
S=a+b
P=a·b
S, P
Конец
Рис. 1. Линейный алгоритм
4
Задание 5. Запишите следующие математические выражения на языке
Pascal:
a) y = 2x2 + ex;
b) z = |tg(5x) – 2x|;
c) a = b10;
d) y = log5 (3x-2);
e) y = √5𝑥 .
Задание
6.
Составьте
программу
для
вычисления
выражения
у=10log2(x2+2).
Задание 7. Составьте программу для вычисления синуса угла, заданного в
градусах.
Задание 8. Составьте программу, которая переводит величину, заданную в
минутах в величину, выраженную в часах и минутах.
Например, 255 мин. = 4 ч. 15 мин.
5
ЛАБОРАТОРНАЯ РАБОТА № 2. РАЗВЕТВЛЯЮЩИЕСЯ АЛГОРИТМЫ
Задание 1. Составьте блок-схему к следующей программе:
Program Example2;
Uses Crt;
Var x, y: integer;
Begin
Clrscr;
Writeln (‘Введите число’);
Readln(x);
y:= x mod 2;
if y=0 then writeln(‘число ’, х, ’ – четное’)
else writeln(‘число’, х, ’ – нечетное’);
End.
Задание 2. Установите правильный порядок выполнения команд в
программе.
□
□
□
□
□
□
□
□
□
Program Example3;
Writeln(‘Введите два числа’);
Uses Crt;
Readln(a, b);
if a = b then Writeln(a, ‘=’, b) else Writeln(a, ‘<’, b);
Var a, b: integer;
if a > b then Writeln(a, ‘>’, b) else
Begin
End.
6
Задание 3. В алгоритме для вычисления значения функции y заполните
пустые места.
|x-2|+5, x ≤ -2
y = {x2 , x ∈ (-2; 2),
4-|x-2|, x ≥ 2
Начало
x
Да
Нет
Да
Нет
Конец
Рис. 2. Алгоритм вычисления значения функции
Задание 4. Разработайте программу для вычисления значения функции
− 𝑙𝑛|x|+5, x ≤ -1
𝑦 = {x2 − 1, x ∈ (-1; 1)
– ln|x|, x ≥ 1
7
Задание 5. Составьте программу по заданной блок-схеме.
Начало
a, b, c
Да
Нет
a≤0 или b≤0
или c≤0
Длины сторон
треугольника
должны быть
положительные
Да
a+b>c и
a+c>b и
b+c>a
Нет
Со сторонами
a, b, c можно
составить
треугольник
Со сторонами
a, b, c нельзя
составить
треугольник
Конец
Рис. 3. Разветвляющийся алгоритм
Доработайте программу, чтобы в ней вычислялась площадь треугольника
по формуле Герона (𝑆 = √𝑝(𝑝 − 𝑎)(𝑝 − 𝑏)(𝑝 − 𝑐), 𝑝 =
8
𝑎+𝑏+𝑐
2
).
Задание 6. Укажите правильный порядок команд в программе.
□
□
□
□
□
□
□
ProgramExample4;
Uses Crt;
Readln(x);
else writeln(‘такой операции не существует’);
End;
End.
Case x of
‘+’: writeln(‘сложение’);
‘-‘: writeln(‘вычитание’);
‘*’: writeln(‘умножение’);
‘/’: writeln(‘деление’)
□
□
□
Var x: char;
Begin
Writeln(‘Введите символ арифметической операции’);
9
ЛАБОРАТОРНАЯ РАБОТА № 3. ЦИКЛЫ
Задание 1. Определите, что вычисляется в алгоритме. Составьте программу
по данной блок-схеме.
Начало
n
S=0
i= 1, n, 1
S = S + 1/i
S
Конец
Рис. 4. Цикл с параметром
Задание 2. Составьте программу для вычисления суммы ряда
1 + 1/3 + 1/5 + 1/7 + …
Задание 3. Составьте программу для вычисления факториала
(n! = 1·2·3·…·n).
Задание 4. Составьте программу, которая выводит на экран таблицу
степеней двойки от 0 до 10.
Задание 5. Составьте программу, которая выводит на экран таблицу
степеней для произвольного числа.
10
Задание 6. Определите, что вычисляется в программе.
Program Example5;
Uses Crt ;
Var n, m: integer ;
Begin
Clrscr;
Writeln ('Введитедвачисла');
Readln (n, m);
While m<>n do
Begin
if m > n then m:=m-n else n:=n-m;
End;
Writeln (m) ;
End.
Задание 7. Определите, что вычисляется в программе, и составьте к ней
блок-схему.
Program Example6;
Uses Crt ;
Var x, y: real ;
Begin
Clrscr;
x:= 1;
While x <= 10 do
Begin
y:= sqr(x) + 1;
Writeln(x:5:1, y:10:1);
x:= x+0.5;
End;
End.
11
Задание 8. Составьте программу, которая выводит таблицу значений
функции y = 2x2 + 3x – 9 в диапазоне от – 3 до 3 с шагом 0,5.
Рекомендуемый вид экрана:
--------------Х | У
--------------–3 | 0
– 2,5 | – 4
–2 | –7
… | …
3 | 18
--------------Доработайте программу, чтобы диапазон и шаг можно было вводить при
запуске программы .
Задание 9. Составьте программу, в которой необходимо отгадать
зашифрованное слово (например, КОБЯЛО). Пользователь вводит ответ до тех
пор, пока не отгадает слово из этих букв. Как только введено правильное слово,
программа завершается, и на экран выводится сообщение «Вы угадали с N
попытки!».
Задание 10. Составьте программу, которая находит все простые числа в
диапазоне от A до B.
Задание 11. Составьте программу, которая находит все совершенные числа
в диапазоне от A до B.
12
ЛАБОРАТОРНАЯ РАБОТА № 4. ОДНОМЕРНЫЕ МАССИВЫ
Задание 1. В алгоритме вычисления суммы и количества положительных
элементов заполните пустые места.
Начало
n
Нет
Да
Конец
Рис. 5. Одномерный массив
13
Задание 2. Составьте блок-схему к следующей программе:
Program Example7;
Uses crt;
Var a: array[1..100] of integer;
i, n, max: integer;
Begin
Clrscr;
Write('n=');
Readln(n);
for i:=1 to n do Begin
Write('a[',i,']=');
Readln(a[i]);
End;
max:=a[1];
for i:=2 to n do if a[i]>max then max:=a[i];
Writeln('max=',max);
End.
Задание 3. Составьте программу, которая находит максимальный и
минимальный элементы в одномерном массиве и их порядковые номера.
Задание
4.
Составьте
программу,
максимальный и минимальный элементы.
14
в
которой
меняются
местами
Задание 5. Установите правильный порядок команд в программе, и
определите, что в ней вычисляется.
□
□
Var a, b:array[1..100] of integer;
i, n, k: integer;
for i:=1 to n do
if a[i] < 0 then Begin
k:= k+1;
b[k]:= i;
End;
□
□
□
□
□
Readkey
End.
for i:= 1 to k do Write(b[i]:4);
Uses crt;
for i:= 1 to n do Begin
Write('a[', i, ']=');
Readln(a[i]);
End;
□
□
□
□
Program Example8;
Begin
Write('n=');
Readln(n);
k:= 0;
15
Задание 6. Определите, что выполняется в программе.
Program Example9;
Uses crt;
Var a: array[1..100] of integer;
i, j, n, m:integer;
Begin
Clrscr;
Write('n='); Readln(n);
for i:= 1 to n do Begin
Write('a[', i, ']=');
Readln(a[i]);
End;
for j:= 1 to n-1 do
for i:= 1 to n-j do Begin
if a[i] < a[i+1] then Begin
m:= a[i];
a[i]:= a[i+1];
a[i+1]:= m;
End;
End;
for i:= 1 to n do Write(a[i]:5);
End.
Задание 7. Составить программу, которая преобразует одномерный массив
таким
образом,
чтобы
сначала
шли
положительные элементы.
16
отрицательные,
затем
нулевые
и
ЛАБОРАТОРНАЯ РАБОТА № 5. ДВУМЕРНЫЕ МАССИВЫ
Задание 1. Заполните пустые места в алгоритме поиска минимального
элемента в двумерном массиве.
Начало
n, m
Нет
Да
Конец
Рис. 6. Двумерный массив
17
Задание 2. Составьте блок-схему к программе, вычисляющей произведение
элементов двумерного массива.
Program Example10;
Uses crt;
Var a: array[1..100, 1..100] of integer;
i, j, n, m: integer;
P: longint;
Begin
Clrscr;
Write('n='); Readln(n);
Write('m='); Readln(m);
for i:= 1 to n do
for j:= 1 to m do Begin
Write('a[', i, j, ']=');
Readln(a[i, j]);
End;
P:= 1;
fori:=1 to n do
for j:= 1 to m do P:= P *a[i, j];
Write(‘P=’, P);
End.
Доработайте программу, чтобы на экран выводился массив в виде матрицы.
Задание 3. Составьте программу для поиска максимального элемента и его
индексов.
18
Задание 4. Заполните пустые места в программе, вычисляющей сумму
элементов, расположенных на главной диагонали.
Program Example11;
Uses crt;
Var a: array[1..100, 1..100] of integer;
i, j, n, m, S: integer;
Begin
Clrscr;
Write('n='); Readln(n);
for i:=1 to n do
for j:=1 to n do
Write('a[', i, j,']=');
Readln(a[i, j]);
S:= 0;
for i:=1 to n do
for j:=1 to n do if
then
for i:= 1 to n do
Begin
for j:= 1 to n do
Write(a[i, j]:5);
Writeln;
End;
Writeln('S=', S);
End.
Доработайте программу, чтобы считалась сумма элементов, расположенных
на побочной диагонали.
19
Задание 5. Составьте программу для поиска максимального элемента на
побочной
диагонали.
Для
заполнения
массива
воспользуйтесь
датчиком
случайных чисел.
Задание 6. Составьте программу для поиска минимального элемента среди
элементов, расположенных выше главной диагонали.
Задание 7. Составьте программу, которая подсчитывает количество строк в
двумерном массиве, содержащих отрицательные элементы.
Задание 8. Составьте программу, которая вычисляет сумму элементов по
столбцам.
20
ЛАБОРАТОРНАЯ РАБОТА № 6. МНОЖЕСТВА
Задание 1. Запишите результаты операций над множествами:
1 [1, 3,6, 7, 8] + [1, 2, 7, 9]
2 [5, 6, 8, 9] * [3, 4, 5, 8, 10]
3 [‘a’, ‘b’, ‘c’, ‘d’, ‘e’] – [‘b’, ‘d’, ‘f’, ‘g’]
4 4 in [1, 2, 3, 4, 5]
5 3 in [1, 2, 5, 7, 9]
Задание 2. Правильный порядок команд в программе, объединяющей два
множества:
□
□
□
□
□
□
□
Var M, N, L: set of byte;
N:= [1, 2, 3, 4, 8]; M:= [3, 4, 5, 6, 8];
End.
Program Example12;
L:= N + M;
Begin
Uses Crt;
Задание 3. Заполните пустые места в программе, определяющей количество
цифр в тексте.
Program ABC;
Uses Crt;
Var G:
char;
t: string;
i, n, m: byte;
Begin
Clrscr;
G:= ['0' .. '9'];
Writeln('Введите текст ');
21
Readln(t);
For i:= 1 to Length(t) do Begin
if
then n:= n+1;
End;
Writeln(n);
Readkey;
End.
Задание 4. Составьте программу, которая заполняет множество нечетными
числами от 1 до n (n ≤ 255) и выводит эти числа на экран.
Задание 5. Составьте программу, которая заполняет множество простыми
числами от 1 до n (n ≤ 255) и выводит эти числа на экран.
22
ЛАБОРАТОРНАЯ РАБОТА № 7. СТРОКИ
Задание 1. Заполните пустые места в программе, подсчитывающей
количество букв «а» в строке.
Program Example12;
Var S: string;
i, k: integer;
Begin
Writeln ('Введитестроку');
Readln (S);
For i:= 1 to length(S) do
if
then
Writeln('Символ «а» встречается ', k, ' раз');
End.
Задание 2. Укажите правильный порядок команд в программе, удаляющей
из строки все буквы «о».
□
□
□
□
□
□
□
□
□
End.
Var S, T: string;
i: integer;
Begin
Program Example13;
if S[i] <>'о' then T:=T+S[i];
Writeln (T);
T:='';
For i:= 1 to length(S) do
Writeln ('Введите строку'); Readln (S);
23
Задание 3. Составьте программу, в которой все буквы «а» заменяются на
буквы «о».
Задание 4. Определите, что выполняется в программе.
Program Example14;
Const X = ['0' .. '9'];
Var S, T: string;
i: integer;
Begin
Writeln ('Введитестроку');
Readln (S);
T:= ' ';
For i:= 1 to length(S) do
if not(S[i] in X) then T:= T+S[i];
Writeln(T);
Readln;
End.
Задание 5. Составьте программу, в которой из строки удаляются все
символы, кроме цифр.
Задание 6. Составьте программу, в которой из строки удаляются последние
три символа.
24
ЛАБОРАТОРНАЯ РАБОТА № 8. ФАЙЛЫ
Задание 1. Определите, что выполняется в программе. В фигурных скобках
укажите назначение команд.
Program Example15;
Uses crt;
Var f: text;
st: string;
Begin
Assign(f, 'C:\Example.txt');
{
}
Rewrite(f);
{
}
Write(f, st);
{
}
Close(f);
{
}
Writeln('Введите текст ');
Read(st);
End.
Задание 2. Определите, что выполняется в программе и для чего
предназначена команда Append?
Program Example16;
Uses crt;
Var f: text;
i, n, x: integer;
Begin
Assign(f, 'C:\Example.txt');
Append(f);
{
Writeln('Введите количество чисел');
Readln(n);
Writeln('Введите числа');
for i:= 1 to n do Begin
Readln(x);
25
}
Write(f, x:4);
End;
Close(f);
End.
Задание 3. Определите, что выполняется в программе. В фигурных скобках
запишите назначение команд.
Program Example17;
Uses crt;
Var f: text;
st: string;
Begin
Clrscr;
Assign(f, 'C:\Example.txt');
Reset(f);
{
}
While not EOF(f) do
{
}
Readln(f, st);
{
}
Writeln(st);
{
}
Begin
End;
Close(f);
Readln
End.
Задание 4. Разработайте программу, которая создает файл date.txt и
записывает в него n случайных чисел в диапазоне от 5 до 30.
Задание 5. Разработайте программу, которая считывает информацию из
файла date.txt, находит максимальное число и общую сумму. Результат запишите
в файл result.txt.
26
ЛАБОРАТОРНАЯ РАБОТА № 9. ЗАПИСИ
Задание 1. Наберите текст программы и познакомьтесь с типом данных
Record. Определите, что выполняется в программе.
Program Example18;
Type STR= Record
Fam: string;
B1, B2, B3, B4, B5: 2..5;
SB: real;
End;
Var Tbl: array[1..50] of str;
i,n: integer;
Begin
Write('n=');
Readln(n);
For i:=1 to n do
Begin
Write('FIO:'); Readln (Tbl[i].FAM);
Write('Ozenki: ');Readln(Tbl[i].B1, Tbl[i].B2,Tbl[i].B3, Tbl[i].B4, Tbl[i].B5);
End;
Writeln('Sredniy ball');
For i:=1 to n do
Begin
Tbl[i].SB:=(Tbl[i].B1+Tbl[i].B2+Tbl[i].B3+ Tbl[i].B4+Tbl[i].B5)/5;
Writeln(Tbl[i].FAM,' – ', Tbl[i].SB:5:2);
End;
End.
27
В программе содержится много повторяющихся данных. Для её упрощения
воспользуйтесь оператором присоединения With.
For i:= 1 to n do Begin
With Tbl[i] do Begin
Write('FIO:'); Readln (FAM);
Write('Ozenki: ');
Readln(B1, B2, B3, B4, B5);
End;
End;
Writeln('Sredniy ball');
For i:= 1 to n do Begin
With Tbl[i] do Begin
SB:= (B1+B2+B3+B4+B5)/5;
Writeln(FAM,' – ',SB:5:2);
End;
End;
Задание 2. Доработайте программу, чтобы данные о студентах и их средние
баллы записывались в файл.
28
ЛАБОРАТОРНАЯ РАБОТА № 10. ПОДПРОГРАММЫ
Задание 1. Исправьте ошибки в программе.
Program Example19;
Uses Crt;
Function V(R, H: real): integer;
Begin
V:= pi*sqr(R)*H;
End;
Var x: integer;
Begin
a:= V(3,4)
b:= V(2,4)
Writeln('V1=', a);
Writeln('V2=', b);
x:= a – b;
Writeln('V1 – V2=', x:4:1);
End.
Задание 2. Посмотрите пример функции вычисляющей факториал числа.
В основной программе посчитайте выражение y = (m! + k!)/s!
Function factorial(n: byte): longint;
Begin
if (n = 0) or (n = 1) then factorial:= 1
else factorial:= n * factorial(n - 1);
End;
Задание 3. Составьте функцию, вычисляющую логарифм с произвольным
основанием logab.
29
Задание 4. Составьте функцию для вычисления площади кольца.
Рис. 7. Кольцо
Задание 5. Наберите код программы и посмотрите пример использования
процедуры Color.
Program Example20;
Uses Crt;
Procedure Color(x, y: word);
Begin
TextColor(x);
TextBackGround(y);
End;
Begin
Color(1,5);
Write('Hello ');
Color(1,3);
Writeln('student!');
Readln;
End.
Задание 6. Доработайте программу, чтобы цвет фона и цвет текста
вводились пользователем при запуске программы.
30
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Златопольский Д. М. Программирование: типовые задачи, алгоритмы,
методы / Д. М. Златопольский. – Москва: БИНОМ. Лаборатория знаний, 2007.
– 223
2. Информатика: Учебник / Б. В. Соболь, А. Б. Галин, Ю. В. Панов,
Е. В. Рашидова, Н. Н. Садовой. – Изд. 3-е, дополн. и перераб. – Ростов н/Д:
Феникс, 2007. – 446 с.
3. Окулов С. М. Основы программирования: учебник / С. М. Окулов. – Изд.
5-е, испр. – Москва: БИНОМ. Лаборатория знаний, 2010. – 440 с.
4. Потопахин В. В. Современное программирование с нуля!: учеб. пособие /
Потопахин В. – Изд. 2-е, испр. – Москва: ДМК-Пресс, 2011. – 240 с.
5. Рапаков Г. Г. Turbo Pascal для студентов и школьников: учебник /
Г. Г. Рапаков, С. Ю. Ржеуцкая. – Санкт-Петербург: БХВ-Петербург, 2007. –
352 с.
6. Фаронов В. В. Turbo Pascal 7.0. Практика программирования: учеб.
пособие / В. В. Фаронов. – Москва: Кнорус, 2007. – 416 с.
31
Учебное электронное текстовое издание
Паклина Валентина Михайловна
Паклина Елена Михайловна
Основы алгоритмизации и программирования
Редактор
Подготовка к публикации
Рекомендовано Методическим советом
Разрешено к публикации
Электронный формат – pdf
Объем уч.-изд. л.
620002, Екатеринбург, ул. Мира, 19
Информационный портал УрФУ
http://www.ustu.ru
32
Download