
- •Учебно-методическое пособие по изучению теоретического материала и самостоятельному выполнению лабораторных заданий
- •1. Введение
- •2. Общие методические рекомендации по изучению курса
- •3. Методические рекомендации по изучению теоретического материала курса
- •3.1 Содержание разделов дисциплины
- •Тема 1. «Структура программы на языке «Паскаль». Основные типы данных. Правила записи имён в языке Паскаль. Линейные вычислительные процессы.»
- •Тема 2. «Базовые конструкции языка «Паскаль». Ветвящиеся вычислительные процессы.»
- •Тема 3. «Одномерные и многомерные массивы. Циклические вычислительные процессы.»
- •Тема 4. «Обработка символьной информации»
- •Тема 5. «Процедуры в языке Паскаль»
- •Тема 6. «Функции в языке Паскаль»
- •Тема 7. Рекурсивные функции. Явная и неявная рекурсия.
- •Тема 8. Многомодульные приложения (дополнительная тема).
- •4. Методические рекомендации по выполнению лабораторных работ
- •4.1 Лабораторная работа №1 «Структура программ на языке Паскаль, основные типы данных, основные операции, линейные вычислительные процессы»
- •Варианты заданий на лабораторную работу № 1.
- •Var a,b,c,r : real;
- •Var a,b,c,r : real;
- •Var a,b,c,r : real;
- •4.2 Лабораторная работа №2 «Условные операторы. Правила записи условий простые и сложные условия, ветвящиеся вычислительные процессы»
- •Варианты заданий на лабораторную работу № 2.
- •Var a,b,X : real;
- •Var a,b,X : real;
- •Var a,b,X : real;
- •Var a,b,X : real;
- •Var a,b,X : real;
- •4.3 Лабораторная работа №3 «Массивы и циклы в языке Паскаль»
- •Варианты заданий на лабораторную работу № 3.
- •4.4 Лабораторная работа №4 «Обработка символьной и строковой информации в языке Паскаль»
- •Варианты заданий на лабораторную работу № 4.
- •4.5 Лабораторная работа №5 «Процедуры в языке Паскаль»
- •Варианты заданий на лабораторную работу № 5.
- •Var a,b : integer; // Числа, вводимые пользователем
- •I : integer; // Счётчик цикла
- •Var a,b : integer; // Числа, вводимые пользователем
- •I : integer; // Счётчик цикла
- •Var a,b : integer; // Числа, вводимые пользователем
- •I : integer; // Счётчик цикла
- •Var X : integer;
- •Var I : integer; // Счётчик цикла
- •4.6 Лабораторная работа №6 «Функции в языке Паскаль»
- •Варианты заданий на лабораторную работу № 6.
- •Пример решения типовой задачи лабораторной работы № 6.
- •Var I : integer; // Счётчик цикла
- •Var X : integer;
- •Var X : integer;
- •В результате внесённых изменений наша программа примет следующий вид:
- •Var X : integer;
- •Результат работы этой программы представлен на следующем рисунке:
- •Var X : integer;
- •4.7 Лабораторная работа №7 «Рекурсия и рекурсивные функции в языке Паскаль»
- •Варианты заданий на лабораторную работу № 7.
- •Var x1, x2, Xn : real; // Вычисляемые числа
- •Var x1, x2, Xn : real; // Вычисляемые числа
- •Var x1, x2, Xn : real; // Вычисляемые числа
- •Var r : real ; // Граница вычислений, вводимая пользователем
- •Var x1, x2, Xn : real ; // Вычисляемые числа
- •I : integer; // Число итераций цикла
- •Var r : real ; // Граница вычислений, вводимая пользователем
- •Var Xn : real; // Вычисляемые числа
- •Var Xn : real; // Вычисляемые числа
- •5. Вопросы для подготовки к зачёту
- •6. Список рекомендуемой литературы
- •7. Программное обеспечение и Интернет-ресурсы
Варианты заданий на лабораторную работу № 3.
Вариант 1.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым.
|
0
1
2
3
4
5
6
7
8
9
1
0
1
2
3
4
5
6
7
8
2
1
0
1
2
3
4
5
6
7
3
2
1
0
1
2
3
4
5
6
4
3
2
1
0
1
2
3
4
5
5
4
3
2
1
0
1
2
3
4
6
5
4
3
2
1
0
1
2
3
7
6
5
4
3
2
1
0
1
2
8
7
6
5
4
3
2
1
0
1
9
8
7
6
5
4
3
2
1
0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя номер строки. Если в матрице есть строка с таким номером, то напечатать все её элементы и их сумму. Если такой строки нет – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Вычислить:
|
Вариант 2.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым.
|
9
8
7
6
5
4
3
2
1
0
8
7
6
5
4
3
2
1
0
1
7
6
5
4
3
2
1
0
1
2
6
5
4
3
2
1
0
1
2
3
5
4
3
2
1
0
1
2
3
4
4
3
2
1
0
1
2
3
4
5
3
2
1
0
1
2
3
4
5
6
2
1
0
1
2
3
4
5
6
7
1
0
1
2
3
4
5
6
7
8
0
1
2
3
4
5
6
7
8
9
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя номер столбца. Если в матрице есть столбец с таким номером, то напечатать все его элементы и их сумму. Если такого столбца нет – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Вычислить:
|
Вариант 3.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым.
|
1
1
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
1
1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя число N от 0 до 9 (номер строки и столбца). Если число введено правильно – то напечатать значения подматрицы, до элемента [N][N]. На рисунке показан пример для N=6. Если число введено неправильно – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Вычислить:
|
Вариант 4.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым.
|
0
1
2
3
4
5
6
7
8
9
1
1
2
3
4
5
6
7
8
9
2
2
2
3
4
5
6
7
8
9
3
3
3
3
4
5
6
7
8
9
4
4
4
4
4
5
6
7
8
9
5
5
5
5
5
5
6
7
8
9
6
6
6
6
6
6
6
7
8
9
7
7
7
7
7
7
7
7
8
9
8
8
8
8
8
8
8
8
8
9
9
9
9
9
9
9
9
9
9
9
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя номер строки. Если в матрице есть строка с таким номером, то напечатать элементы диагонали, начиная с указанной строки, так, как показано на рисунке. Если такой строки нет – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Вычислить:
|
Вариант 5.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым.
|
9
9
9
9
9
9
9
9
9
9
9
8
8
8
8
8
8
8
8
8
9
8
7
7
7
7
7
7
7
7
9
8
7
6
6
6
6
6
6
6
9
8
7
6
5
5
5
5
5
5
9
8
7
6
5
4
4
4
4
4
9
8
7
6
5
4
3
3
3
3
9
8
7
6
5
4
3
2
2
2
9
8
7
6
5
4
3
2
1
1
9
8
7
6
5
4
3
2
1
0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя номер столбца. Если в матрице есть столбец с таким номером, то напечатать элементы диагонали, начиная с указанного столбца, так, как показано на рисунке. Если такого столбца нет – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Вычислить:
|
Вариант 6.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым.
|
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
1
2
2
2
2
2
2
1
0
0
1
2
3
3
3
3
2
1
0
0
1
2
3
4
4
3
2
1
0
0
1
2
3
4
4
3
2
1
0
0
1
2
3
3
3
3
2
1
0
0
1
2
2
2
2
2
2
1
0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя два числа. Номер строки и номер столбца. Если в матрице есть такие строка и столбец, то напечатать значение элемента, расположенного на их пересечении. Если такой строки или столбца нет – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Вычислить:
|
Вариант 7.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым.
|
0
1
2
3
4
4
3
2
1
0
1
1
2
3
4
4
3
2
1
1
2
2
2
3
4
4
3
2
2
2
3
3
3
3
4
4
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
3
3
3
3
4
4
3
3
3
3
2
2
2
3
4
4
3
2
2
2
1
1
2
3
4
4
3
2
1
1
0
1
2
3
4
4
3
2
1
0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя номер строки. Если в матрице есть строка с таким номером, то напечатать все строки матрицы, начиная с первой и заканчивая указанной. Если такой строки или столбца нет – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Вычислить:
|
Вариант 8.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым.
|
1
2
3
4
5
6
7
8
9
10
2
4
6
8
10
12
14
16
18
20
3
6
9
12
15
18
21
24
27
30
4
8
12
16
20
24
28
32
36
40
5
10
15
20
25
30
35
40
45
50
6
12
18
24
30
36
42
48
54
60
7
14
21
28
35
42
49
56
63
70
8
16
24
32
40
48
56
64
72
80
9
18
27
36
45
54
63
72
81
90
10
20
30
40
50
60
70
80
90
100 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя два числа. Номер строки и номер столбца. Если в матрице есть такие строка и столбец, то напечатать значение элемента, расположенного на их пересечении и значения элементов, расположенных в начале и конце указанного столбца. Если такой строки или столбца нет – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Вычислить:
|
Вариант 9.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым.
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
49
48
47
46
45
44
43
42
41
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя номер столбца. Если в матрице есть столбец с таким номером, то напечатать все столбцы матрицы, начиная с указанного столбца и заканчивая последним столбцом. Если такого столбца нет – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Вычислить:
|
Вариант 10.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым.
|
0
1
2
3
4
5
6
7
8
9
9
8
7
6
5
4
3
2
1
0
1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1
2
3
4
5
6
7
8
9
0
11
11
10
9
8
7
6
5
4
3
2
3
4
5
6
7
8
9
10
11
12
12
11
10
9
8
7
6
5
4
3
4
5
6
7
8
9
10
11
12
13
13
12
11
10
9
8
7
6
5
4
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Сгенерировать случайное число в диапазоне от 1 до 10. Вывести на экран это число. Вывести на экран значения всех элементов строки, номер которой равен этому числу. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Вычислить:
|
Вариант 11.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым.
|
в
с
ю
м
а
т
р
и
ц
у
з
а
п
о
л
н
и
т
Ь
с
л
у
ч
а
й
н
ы
м
и
ч
и
с
л
а
м
и
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя номер строки. Если в матрице есть строка с таким номером, то напечатать все её элементы и их сумму. Если такой строки нет – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Найти максимальный и минимальный элементы в матрице. Если их будет несколько (одинаковых) – то взять первые. Вывести на экран найденные максимальный и минимальный элементы матрицы. |
Вариант 12.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым.
|
1
0
0
0
0
0
0
0
0
0
2
3
0
0
0
0
0
0
0
0
4
5
6
0
0
0
0
0
0
0
7
8
9
10
0
0
0
0
0
0
11
12
13
14
15
0
0
0
0
0
16
17
18
19
20
21
0
0
0
0
22
23
24
25
26
27
28
0
0
0
29
30
31
32
33
34
35
36
0
0
37
38
39
40
41
42
43
44
45
0
46
47
48
49
50
51
52
53
54
55
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Сгенерировать два случайных числа в диапазоне от 1 до 10. Это будут номер строки и номер столбца. Вывести на экран эти числа. Вывести на экран значения элемента, находящегося на пересечении указанной строки и столбца. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Сгенерировать еще два случайных числа в диапазоне от 1 до 10. Вывести их на экран. Вычислить:
|
Вариант 13.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым. |
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
3
2
0
0
0
0
0
0
0
6
5
4
0
0
0
0
0
0
10
9
8
7
0
0
0
0
0
15
14
13
12
11
0
0
0
0
21
20
19
18
17
16
0
0
0
28
27
26
25
24
23
22
0
0
36
35
34
33
32
31
30
29
0
45
44
43
42
41
40
39
38
37
55
54
53
52
51
50
49
48
47
46
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Сгенерировать случайное число в диапазоне от 1 до 10. Это будут номер строки. Вывести на экран это число. Вывести на экран значения первого и последнего элементов указанной строки. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Сгенерировать еще одно случайное число в диапазоне от 1 до 10. Вывести это число на экран. Вычислить:
|
Вариант 14.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить матрицу так, что б каждый элемент был равен sin(а) + cos(b), где a и b – это номер строки и столбца. Вывести матрицу на экран. Алгоритм заполнения может быть любым. |
sin(0)
+ cos[0]
sin(0)
+ cos[9]
sin(9)
+ cos[0]
sin(9)
+ cos[9]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя номер строки. Если в матрице есть строка с таким номером, то напечатать все её элементы и их сумму. Если такой строки нет – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Вычислить:
|
Вариант 15.
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран. Алгоритм заполнения может быть любым. |
0
1
2
3
4
5
6
7
8
9
0
2
4
6
8
10
12
14
16
18
0
4
8
12
16
20
24
28
32
36
0
8
16
24
32
40
48
56
64
72
0
16
32
48
64
80
96
112
128
144
0
32
64
96
128
160
192
224
256
288
0
64
128
192
256
320
384
448
512
576
0
128
256
384
512
640
768
896
1024
1152
0
256
512
768
1024
1280
1536
1792
2048
2304
0
512
1024
1536
2048
2560
3072
3584
4096
4608 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя номер сроки. Если в матрице есть строка с таким номером, то вывести на экран значения элементов этой строки в обратном порядке. Если такой строки нет – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Сгенерировать еще одно случайное число в диапазоне от 1 до 10. Вывести это число на экран. Записать в левый столбец сумму всех элементов соответствующих строк. Вывести на экран новую матрицу. |
Пример решения типовой задачи лабораторной работы № 3.
Рассмотрим решение поставленной в третьей лабораторной работе задачи на примере следующего варианта задания:
Базовый уровень (на 3 балла).
Определить матрицу размером 10х10. Заполнить её указанным способом. Вывести матрицу на экран.
Алгоритм заполнения может быть любым. |
0
19
20
39
40
59
60
79
80
99
1
18
21
38
41
58
61
78
81
98
2
17
22
37
42
57
62
77
82
97
3
16
23
36
43
56
63
76
83
96
4
15
24
35
44
55
64
75
84
95
5
14
25
34
45
54
65
74
85
94
6
13
26
33
46
53
66
73
86
93
7
12
27
32
47
52
67
72
87
92
8
11
28
31
48
51
68
71
88
91
9
10
29
30
49
50
69
70
89
90 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 2 (на 4 балла). Дополнительные условия: Запросить у пользователя число, являющееся номером строки. Если в матрице есть такая строка, то напечатать значение элементов, расположенных на диагонали, начиная с последнего элемента указанной строки, влево - вниз. Если такой строки или столбца нет – то выдать соответствующее сообщение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Уровень 3 (на 5 баллов). Дополнительные условия: Заполнение матрицы должно быть выполнено за один проход по матрице. Вычислить:
|
Этап первый. Предварительный анализ предметной области задачи.
В данном задании необходимо организовать обработку матрицы. Следовательно, нам необходимо определить в программе двумерный массив, предназначенный для хранения числовых значений элементов этой матрицы.
Определение массивов выполняется при помощи ключевого слова «array» с указанием размерности массива и типа его элементов.
Так как значения элементов нашей матрицы целочисленные, следовательно, тип элементов определяемого массива должен быть «integer».
Кроме матрицы нам понадобятся две переменных, являющихся счётчиками, для нумерации строк и столбцов матрицы. Эти переменные целочисленные, следовательно, их тип будет «integer».
Для заполнения матрицы целесообразно ввести ещё одну переменную, которая будет изменять своё значение от 0 до 99 и вноситься в ячейки матрицы.
Далее, по смыслу второй части задания, нам необходимо предусмотреть переменную, в которую пользователь будет вводить номер строки. Она также будет иметь тип «integer».
Для выполнения третьей части задания нам потребуются ещё две целочисленных переменных, предназначенных для подсчёта суммы элементов матрицы и суммы элементов выбранной диагонали.
Начиная с этой работы комментирование кода будем выполнять сразу.
В результате, описание переменных в нашей программе будет выглядеть так:
Var X : array[1..10, 1..10] of integer; // Матрица
i, j : integer; // Счётчики строк и столбцов
k : integer; // Дополнительная переменная для заполнения матрицы
N : integer; // Дополнительная переменная – вводимая пользователем
S1, S2 : integer; // Переменные для подсчёта суммы матрицы и диагонали
Этап второй. Разработка алгоритма заполнения матрицы.
Внимательное изучение того, как расположены значения в матрице показывает следующее:
В нечётных столбцах значения возрастают сверху вниз.
В чётных столбцах значения возрастают снизу вверх.
Все значения идут подряд от 0 до 99.
Простейшим вариантом решения будет поочередное заполнение столбцов.
Для каждого столбца необходимо организовать цикл, перебирающий номер строки «i» элементов этого столбца. Перебор будет осуществляться для каждого из столбцов в противоположных направлениях.
На каждом шаге в текущую ячейку матрицы будет заноситься значение переменной «k», после чего переменная «k» будет увеличивать своё значение на единицу. Начальное значение переменной «k» будет равно нулю.
На языке «Паскаль» это будет выглядеть так:
k:=0;
for i:=1 to 10 do begin x[i,1 ]:=k; k:=k+1; end;
for i:=10 downto 1 do begin x[i,2 ]:=k; k:=k+1; end;
for i:=1 to 10 do begin x[i,3 ]:=k; k:=k+1; end;
for i:=10 downto 1 do begin x[i,4 ]:=k; k:=k+1; end;
for i:=1 to 10 do begin x[i,5 ]:=k; k:=k+1; end;
for i:=10 downto 1 do begin x[i,6 ]:=k; k:=k+1; end;
for i:=1 to 10 do begin x[i,7 ]:=k; k:=k+1; end;
for i:=10 downto 1 do begin x[i,8 ]:=k; k:=k+1; end;
for i:=1 to 10 do begin x[i,9 ]:=k; k:=k+1; end;
for i:=10 downto 1 do begin x[i,10]:=k; k:=k+1; end;
Этап третий. Разработка алгоритма вывода матрицы на экран.
Для того, чтоб вывести матрицу на экран, нам потребуется перебрать все её строки, и для каждой строки перебрать и напечатать все элементы этой строки.
for i:=1 to 10 do
for j:=1 to 10 do
write(x[i,j]);
Посмотрим, какой результат даст нам разработанная часть программы.
Программа вроде бы и работает. И даже правильно! Только что-либо понять в тех результатах, что она выдала, практически невозможно.
Как улучшить, выдаваемый программой результат?
Во-первых. Все выходные данные необходимо отделить друг от друга!
Заменим команду «write(x[i,j])» на команду «write(x[i,j]:3)» и посмотрим, что нам это даст.
Уже гораздо лучше.
Однако все элементы матрицы выводятся в одну строку, что не очень удобно.
Попытка заменить команду «write(x[i,j])» или «write(x[i,j]:3)» на команду «writeln(x[i,j])» или «writeln(x[i,j]:3)» ситуацию не улучшит. В этом случае все элементы матрицы будут выводиться в один столбик.
Что же следует сделать. Что бы матрица напечаталась в естественном виде?
Этап четвёртый. Оптимизация разработанных алгоритмов.
Попробуем оптимизировать разработанные нами алгоритмы.
Для начала посмотрим на наш алгоритм заполнения. В нём пять раз подряд выполняются практически одинаковые команды. А именно – повторяются две строки:
for i:=1 to 10 do begin x[i,1 ]:=k; k:=k+1; end;
for i:=10 downto 1 do begin x[i,2 ]:=k; k:=k+1; end;
Отличие следующей пары строк программы будет только во втором индексе массива «x». Все остальные действия абсолютно одинаковы.
for i:=1 to 10 do begin x[i,3 ]:=k; k:=k+1; end;
for i:=10 downto 1 do begin x[i,4 ]:=k; k:=k+1; end;
И т.д.
Можно ли каким-либо способом заставить программу выполнить всего две строки, но пять раз, изменяя при этом второй индекс у элементов массива «x»?
Можно! Для этого следует всего лишь организовать внешний цикл, который и выполнит повторение этих двух строк пять раз. Единственной проблемой будет в данном случае расчёт второго индекса массива «x» в зависимости от номера шага повторения цикла.
Цикл повторяется 5 раз. На первом шаге второй индекс массива «x» равен 1-у и 2-м. На втором шаге 3-м и 4-м. На третьем – 5-и и 6-и. Просматривается очевидная закономерность. Сначала индекс равен удвоенному номеру шага без единицы, а затем просто удвоенному номеру шага.
-
Шаг цикла
Индекс «j»
Для нечётного столбца
Индекс «j»
Для чётного столбца
1
1*2 – 1 = 1
1*2 = 2
2
2*2 – 1 = 3
2*2 = 4
3
2*3 – 1 = 5
2*3 = 6
4
2*4 – 1 = 7
2*4 = 8
5
2*5 – 1 = 9
2*5 = 10
Т.е. обращение к элементам будет выглядеть следующим образом:
Для нечётного столбца: x[i,j*2-1]
Для чётного столбца: x[i,j*2 ]
Теперь разберёмся с выводом матрицы на экран.
Как мы уже убедились, использование команды «write» приводит к печати всех значений матрицы в одну строку. А использование команды «writeln» - к печати всех значений матрицы в один столбец.
Решение очевидно:
Необходимо изменить алгоритм вывода так, что бы элементы одной строки матрицы печатались в одну экранную строчку. А следующая строка матрицы начиналась со следующей экранной строчки.
Для реализации такого алгоритма необходимо всего лишь при печати одной строки использовать команду «write», а в тот момент, когда строка заканчивается – перевести экранный курсор на новую строку командой «writeln».
Оптимизированный код нашей программы примет следующий вид:
Var
X : array[1..10, 1..10] of integer; // Матрица
i,j : integer; // Счётчики строк и столбцов
k : integer; // Дополнительная переменная для заполнения
матрицы
N : integer; // Дополнительная переменная – вводимая
пользователем
S1,S2 : integer; // Переменные для подсчёта суммы матрицы и
диагонали
Begin
// Заполнение матрицы
k:=0;
for j:=1 to 5 do
begin
for i:=1 to 10 do begin x[i, j*2-1]:=k; k:=k+1; end;
for i:=10 downto 1 do begin x[i, j*2 ]:=k; k:=k+1; end;
end;
// Вывод матрицы на экран
for i:=1 to 10 do
begin for j:=1 to 10 do write(x[i,j]:3);
writeln;
end;
End.
А результат работы будет выглядеть так:
Этап пятый. Организация диалога с пользователем для ввода запрашиваемых по условию второй части задачи дополнительных данных и организация дополнительных вычислений на основе этих данных.
По условию второй части задачи нам необходимо организовать ввод одного целого числа, которое будет являться номером строки в матрице. Для этого мы заготовили переменную «N».
Для того, чтоб пользователь понял, что от него требует программа, мы должны выдать пользователю соответствующий запрос.
После того, как пользователь осуществит ввод, нам необходимо провести проверку корректности ввода. Т.е. проверить, существует ли в нашей матрице строка с указанным пользователем номером. Если такой строки нет – то пользователю необходимо об этом сообщить. Если же такая строка есть – то требуется выполнить вычисления, определённые во второй и третьей части задания.
В результате, диалог с пользователем будет иметь следующий вид:
// Диалог с пользователем
writeln;
write('Введите номер строки. N=');
Readln(N);
if ((N<1) or (N>10))
then writeln('Строки с таким номером в матрице нет')
else begin
// Тут будет располагаться код вычислений
// по втрой и третьей части задания
end;
Этап шестой. Организация вычислений, определённых во второй части задания, на основе данных, введённых пользователем.
Во второй части задания нам необходимо осуществить вывод на экран значений элементов матрицы, расположенных по диагонали, начиная с последнего элемента указанной строки, двигаясь вниз влево.
Не смотря на то, что при этом нам необходимо изменять как индексы строк, так и индексы столбцов у печатаемых элементов, двойного цикла по строкам и столбцам нам не потребуется. Индексы изменяются синхронно, на единицу при каждом шаге. Номер строки увеличивается, начиная с указанной строки с номером «N». А номер столбца уменьшается, начиная с последнего.
x[N , 10 ]
x[N+1, 10-1]
x[N+2, 10-2]
И т.д. До тех пор, пока мы не дойдём до последней строки.
Следовательно, нам достаточно организовать простейший цикл, в котором будет изменяться приращение индексов, и печатать на каждом шаге текущий элемент матрицы.
Организовать данный циклический процесс можно различными способами. Для разнообразия воспользуемся циклом типа «while».
Приращение индексов будем хранить в переменной «k».
k:=0;
while ((N+k)<=10) do begin write(x[N+k, 10-k]:3);
k:=k+1;
end;
Этап седьмой. Организация дополнительных вычислений, определённых в третьей части задания.
По условию третьей части задания нам необходимо вычислить сумму всех элементов матрицы и сумму элементов, расположенных на выбранной диагонали. Можно выполнить эти действия отдельно. А можно встроить в уже существующие части программы. Для наглядности выполним данные действия отдельно.
Подсчёт сумм указанных элементов матрицы осуществляется так же, как осуществлялась печать этих элементов на экране. Только вместо печати мы будем выполнять операции сложения.
После чего останется только вывести два вычисленных значения.
// Подсчёт суммы элементов матрицы
S1:=0;
for i:=1 to 10 do
for j:=1 to 10 do S1:=S1 + x[i,j];
// Подсчёт суммы элементов указанной диагонали
S2:=0;
k:=0;
while ((N+k)<=10) do begin S2:=S2 + x[N+k, 10-k];
k:=k+1;
end;
writeln('Сумма элементов всей матрицы равна: ', S1:5);
writeln('Сумма элементов указанной диагонали: ', S2:5);
Этап восьмой. Тестирование и доработка программы, если это необходимо.
Тестирование (многократный прогон) при вводе различных номеров строки показывает, что наша программа устойчиво работает при любых входных данных.
Единственной доработкой будет только разделение выводимых разными частями программы результатов, для более наглядного их восприятия на экране. А также - снабжение отдельных частей программы дополнительными комментариями.
В итоге, окончательный, отлаженный, оптимизированный и протестированный код программы примет следующий вид:
Var
X : array[1..10, 1..10] of integer; // Матрица
i,j : integer; // Счётчики строк и столбцов
k : integer; // Дополнительная переменная для заполнения
матрицы
N : integer; // Дополнительная переменная – вводимая
пользователем
S1,S2 : integer; // Переменные для подсчёта суммы элементов
матрицы и диагонали
Begin
// Заполнение матрицы
k:=0;
for j:=1 to 5 do
begin
for i:=1 to 10 do begin x[i, j*2-1]:=k; k:=k+1; end;
for i:=10 downto 1 do begin x[i, j*2 ]:=k; k:=k+1; end;
end;
// Вывод матрицы на экран
for i:=1 to 10 do
begin for j:=1 to 10 do write(x[i,j]:3);
writeln;
end;
// Диалог с пользователем
writeln;
write('Введите номер строки. N=');
Readln(N);
if ((N<1) or (N>10))
then writeln('Строки с таким номером в матрице нет')
else begin
// Печать указанной диагонали
writeln;
writeln('Элементы диагонали, справа налево');
writeln('Начиная с последнего элемента');
writeln('Указанной строки:');
k:=0;
while ((N+k)<=10) do begin write(x[N+k, 10-k]:3);
k:=k+1;
end;
// Подсчёт суммы элементов матрицы
S1:=0;
for i:=1 to 10 do
for j:=1 to 10 do S1:=S1 + x[i,j];
// Подсчёт суммы элементов указанной диагонали
S2:=0;
k:=0;
while ((N+k)<=10) do begin S2:=S2 + x[N+k, 10-k];
k:=k+1;
end;
// Вывод результатов окончательных расчётов
writeln;
writeln;
writeln('Сумма элементов всей матрицы равна: ', S1:5);
writeln('Сумма элементов указанной диагонали: ', S2:5);
end;
End.
Полный результат работы данной программы представлен на следующем рисунке: