Добавил:
Преподаватель Колледжа информационных технологий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы / Методические указания к ЛР по ОАИП (09.02.07)

.pdf
Скачиваний:
60
Добавлен:
08.05.2022
Размер:
3.68 Mб
Скачать

Варианты

Индивидуальное задание

 

 

 

 

 

 

Остров Манхэттен был приобретен поселенцами $24 в 1826

7

году. Каково было в настоящее время состояние их счета, если

бы эти $24 были помещены тогда в банк под 8% годового

 

 

 

 

 

 

дохода?

 

 

 

 

 

 

 

8

Перевести целое число из десятичной системы счисления в

двоичную, используя алгоритм деления на 2.

 

 

 

 

 

9

Перевести целое число из десятичной системы счисления в

шестнадцатеричную, используя алгоритм деления на 2.

 

 

 

 

 

10

Дано натуральное число. Найти, сколько раз в нем встречается

 

каждая цифра.

 

 

 

 

 

 

 

 

 

 

 

 

 

Спортсмен-лыжник начал тренировки, пробежав в первый день

 

10 км. Каждый следующий день он увеличивал длину

 

пробегана P процентов от пробега предыдущего дня (P —

11

вещественное, 0 < P < 50). По данному P определить, после

 

какого дня суммарный пробег лыжника за все дни превысит 200

 

км, и вывести найденное количество дней K (целое) и

 

суммарный пробег S (вещественное число).

 

 

 

 

12

Найти в промежутке от 1 до N все числа, у которых пять

 

 

делителей.

 

 

 

 

 

 

 

 

 

 

 

 

 

13

Найти все четырехзначные числа, у которых все цифры

 

 

 

различны.

 

 

 

 

 

 

 

 

 

 

 

 

 

Для заданных значения переменной x и количества слагаемых

 

ряда n вычислить по приведённой приближённой формуле

 

значение указанной функции и путём сравнения с точным

14

значением функции (левой части) найти погрешность

 

 

 

 

вычислений.

 

 

 

 

cos ≈ 1 −

2

+

 

4

6

+ (−1)

2

 

± ;

 

2!

4!

6!

(2 )!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

31

Варианты

 

 

Индивидуальное задание

 

 

 

 

 

 

Составить программу по проверке знаний таблицы умножения.

 

Программа должна вывести по очереди 10 примеров и

15

выставить оценку. Если 10 правильных ответов – оценка

«отлично», если 8-9 правильных ответов – оценка «хорошо»,

 

 

если 6-7 правильных ответов – оценка «удовлетворительно»,

 

все остальное – оценка «неудовлетворительно».

 

 

 

Для заданных значения переменной x и количества слагаемых

 

ряда n вычислить по приведённой приближённой формуле

 

значение указанной функции и путём сравнения с точным

16

значением функции (левой части) найти погрешность

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вычислений.

 

 

 

 

ln ≈ ( − 1)

( − 1)2

+

( − 1)3

( − 1)4

+ + (−1) +1

( − 1)

 

 

2

3

4

 

 

 

 

 

 

 

 

 

± ; 0 < ≤ 2;

 

 

 

 

 

 

 

 

Коля очень любит наблюдать за электронными часами. Он

 

целыми днями смотрел на часы и считал, сколько раз

 

встречается каждая цифра. Через несколько месяцев он

 

научился по любому промежутку времени говорить, сколько

17

раз на часах за это время встретится каждая цифра, и очень

 

 

 

гордился этим.

 

 

 

 

 

 

 

 

 

 

 

На входе вводится два значения: начало и конец промежутка

 

времени. Время задается в формате чч:мм:сс. На выходе надо

 

получить количество попаданий цифр в данный временной

 

 

 

 

 

промежуток.

 

 

 

Требуется вывести в консоль от 1-го до 6-ти прямоугольных треугольников, в зависимости от того какое число введет

18 пользователь. Например, если на вход в программу будет отправлено число 3, то необходимо напечатать 3 треугольника,

если пользователь введет 6, то напечатать 6-ть треугольников.

32

Варианты

Индивидуальное задание

 

 

 

 

Треугольники нужно выводить не в столбик, а в строчку. При

 

этом размер треугольников также формируется по введенному

 

пользователем числу. Если пользователь введет число 3, то

 

должно напечататься три прямоугольных треугольника, катеты

 

которых равны — 3-м. Для печати треугольников можно

 

выбрать любой символ.

 

 

 

 

Для заданных значения переменной x и количества слагаемых

 

ряда n вычислить по приведённой приближённой формуле

 

значение указанной функции и путём сравнения с точным

19

значением функции (левой части) найти погрешность

 

 

 

 

 

вычислений.

 

 

 

sin ≈ 1 −

3

+

5

7

+ (−1)

2 +1

± ;

 

3!

5!

7!

(2 + 1)!

 

 

 

 

 

 

 

 

 

Поле шахматной доски определяется парой натуральных чисел,

 

каждое из которых не превосходит 8: первое число — номер

 

вертикали (при счете слева направо), второе—номер

20

горизонтали (при счете снизу-вверх). Даны натуральные числа

a, b, c, d, e, f, каждое из которых не превосходит 8. Определить,

 

 

может ли белая ладья, расположенная на поле (a, b), одним

 

ходом пойти на поле (e, f), не попав при этом под удар черной

 

ладьи, находящейся на поле (c, d).

 

 

 

 

 

 

 

 

 

 

5) Контрольные вопросы

 

 

 

 

 

 

 

 

1.Что такое цикл?

2.Чем отличается цикл while от цикла do-while?

3.Из каких блоков состоит цикл с параметром?

4.Что такое бесконечный цикл? Как избежать зацикливания?

5.Что такое вложенный цикл? Для чего используются вложенные циклы?

6.Для чего используются операторы continue и break?

33

ЛАБОРАТОРНАЯ РАБОТА №4

Тема: «Программирование алгоритмов преобразования матриц»

ЦЕЛЬ РАБОТЫ Приобрести умения и практические навыки для программирования

алгоритмов преобразования матриц.

ХОД РАБОТЫ

1)Массивы в C#

Массив представляет набор однотипных данных. Объявление массива в С# похоже на объявление переменной за тем исключением, что после указания типа ставятся квадратные скобки:

1 <Тип>[] <название_массива>;

Например, определим массив целых чисел:

1 int[] numbers;

После определения переменной массива мы можем присвоить ей определенное значение:

1 int[] numbers = new int[5];

Здесь вначале мы объявили массив nums, который будет хранить данные типа int. Далее используя операцию new, мы выделили память для пяти элементов массива: new int[4]. Число 5 еще называется длиной массива. При таком определении все элементы получают значение по умолчанию, которое предусмотрено для их типа. Для типа int значение по умолчанию - 0.

Также мы сразу можем указать значения для этих элементов:

1

int[] nums2 = new int[4]

{ 1, 2, 3, 5 };

 

 

2

int[] nums3 = new int[] { 1, 2, 3, 5 };

 

 

 

3

int[] nums4 = new[] { 1,

2, 3, 5 };

 

 

 

4

int[] nums5 = { 1, 2, 3,

5 };

 

 

 

Все перечисленные выше способы будут равноценны.

Для обращения к элементам массива используются индексы. Индекс представляет номер элемента в массиве, при этом нумерация начинается с нуля, поэтому индекс первого элемента будет равен 0. А чтобы обратиться к

34

четвертому элементу в массиве, нам надо использовать индекс 3, к примеру: nums[3].

Используем индексы для получения и установки значений элементов массива:

1

int[] nums = new int[4];

 

 

2

nums[0] = 1;

 

 

3

nums[1] = 2;

 

 

4

nums[2] = 3;

 

 

5

nums[3] = 5;

 

 

6

Console.WriteLine(nums[3]); // 5

 

 

И так как у нас массив определен только для 4 элементов, то мы не можем обратиться, например, к шестому элементу: nums[5] = 5;. Если мы так попытаемся сделать, то мы получим исключение IndexOutOfRangeException.

2)Массивы в С++

Объявление массива в С++ выглядит следующим образом:

1 <Тип> <название_массива>[<кол-во элементов>];

Например:

1 int numbers[5];

Этим кодом мы создали массив типа int с именем numbers в котором может храниться до 5-ти элементов.

Рассмотрим способ указания значения элементам массива при его инициализации:

int arr[] = {0, 1, 2, 3, 4, 5}; // массив будет иметь

1

6 элементов (от 0 до 5)

int mas[100] = {0}; // все 100 элементов будут иметь

2

значение 0

Для того, чтобы задать значения, нужно сразу после объявления массива

указать через равно в фигурных скобках требуемые значения.

35

Для того, чтобы присвоить элементу массива требуемое значение,

достаточно указать имя массива и номер требуемого элемента, а затем после знака равенства указать присваиваемое значение:

1 arr[6] = 7 * 4; // arr[6] равен 28

Для обращения к элементу массива в C++ надо использовать следующею конструкцию:

<любой код> <имя массива> [ <№ элемента> ] <любой

1

код>

Это может выглядеть следующим образом:

1 cout << arr[10] << ", " << arr[11] << endl;

Таким образом мы выводим на экран значения одиннадцатого и двенадцатого элементов.

3)Многомерные массивы

Массивы характеризуются таким понятием как ранг или количество измерений. Выше мы рассматривали массивы, которые имеют одно измерение (то есть их ранг равен 1) - такие массивы можно представлять в виде горизонтального ряда элемента. Но массивы также бывают многомерными. У

таких массивов количество измерений (то есть ранг) больше 1.

Массивы, которые имеют два измерения (ранг равен 2), называют двухмерными. Например, создадим одномерный и двухмерный массивы,

которые имеют одинаковые элементы:

1

int[] nums1 = new int[] { 0, 1,

2,

3,

4, 5 };

 

 

 

 

 

2

int[,] nums2 = { { 0, 1, 2 }, {

3,

4,

5 } };

 

 

 

 

 

Визуально оба массива можно представить следующим образом:

Одномерный массив nums1

0

1

2

3

4

5

 

 

 

 

 

 

Двухмерный массив nums2

0

1

2

 

 

 

3

4

5

 

 

 

36

Поскольку массив nums2 двухмерный, он представляет собой простую

таблицу. Все возможные способы определения двухмерных массивов:

1int[,] nums1;

2int[,] nums2 = new int[2, 3];

int[,] nums3 = new int[2, 3] { { 0, 1, 2 }, { 3, 4, 5

3

} };

int[,] nums4 = new int[,] { { 0, 1, 2 }, { 3, 4, 5 }

4

};

5int[,] nums5 = new [,]{ { 0, 1, 2 }, { 3, 4, 5 } };

6int[,] nums6 = { { 0, 1, 2 }, { 3, 4, 5 } };

Массивы могут иметь и большее количество измерений. Объявление трехмерного массива могло бы выглядеть так:

1 int[,,] nums3 = new int[2, 3, 4];

Соответственно могут быть и четырехмерные массивы, и массивы с большим количеством измерений. Но на практике обычно используются одномерные и двухмерные массивы.

Если мы хотим отдельно пробежаться по каждой строке в таблице, то надо получить количество элементов в размерности. В частности, у каждого массива есть метод ValuepperBound(dimension), который возвращает индекс последнего элемента в определенной размерности. И если мы говорим непосредственно о двухмерном массиве, то первая размерность (с индексом

0), по сути, это и есть таблица. И с помощью выражения mas.ValuepperBound(0) + 1 можно получить количество строк таблицы,

представленной двухмерным массивом. А через mas.Length / rows можно получить количество элементов в каждой строке:

1

int[,] mas = {

{ 1, 2, 3

}, { 4, 5, 6

}, { 7, 8, 9 },

{ 10, 11, 12 }

};

 

 

 

 

 

 

 

 

2

int rows = mas.ValuepperBound(0) + 1;

 

 

 

 

 

3

int columns = mas.Length

/ rows;

 

 

 

 

 

 

37

4

// или так

 

 

5

// int columns = mas.ValuepperBound(1) + 1;

 

 

6

for (int i = 0; i < rows; i++)

 

 

7

{

 

 

8

for (int j = 0; j < columns; j++)

 

 

9

{

 

 

10

Console.Write($"{mas[i, j]} \t");

 

 

11

}

 

 

12

Console.WriteLine();

 

 

13

}

 

 

От многомерных массивов надо отличать массив массивов или так называемый «зубчатый массив»:

1 int[][] nums = new int[3][];

nums[0] = new int[2] { 1, 2 };

2

// выделяем память для первого подмассива

nums[1] = new int[3] { 1, 2, 3 };

3

// выделяем память для второго подмассива

nums[2] = new int[5] { 1, 2, 3, 4, 5 };

4

// выделяем память для третьего подмассива

Здесь две группы квадратных скобок указывают, что это массив массивов, то есть такой массив, который в свою очередь содержит в себе другие массивы. Причем длина массива указывается только в первых квадратных скобках, все последующие квадратные скобки должны быть пусты: new int[3][]. В данном случае у нас массив nums содержит три массива.

Причем размерность каждого из этих массивов может не совпадать.

38

Зубчатый массив nums

1

2

 

 

 

 

 

 

 

 

1

2

3

 

 

 

 

 

 

 

1

2

3

4

5

 

 

 

 

 

Примеры массивов представлены на рисунке 2.1.

 

Рисунок 2.1. Примеры массивов

 

Причем можно использовать в качестве массивов и многомерные:

 

 

1

int[][,] nums = new int[3][,]

 

 

2

{

 

 

3

new int[,] { {1,2}, {3,4} },

 

 

4

new int[,] { {1,2}, {3,6} },

 

 

5

new int[,] { {1,2}, {3,5}, {8, 13} }

 

 

6

};

 

 

Так здесь у нас массив из трех массивов, причем каждый из этих массивов представляет двухмерный массив.

Используя вложенные циклы, можно перебирать зубчатые массивы.

Например:

1

int[][] numbers = new int[3][];

2

numbers[0] = new int[] { 1, 2 };

3

numbers[1] = new int[] { 1, 2, 3 };

4

numbers[2] = new int[] { 1, 2, 3, 4, 5 };

5

// перебор с помощью цикла for

6

for (int i = 0; i<numbers.Length;i++)

7

{

8

for (int j =0; j<numbers[i].Length; j++)

9

{

39

10 Console.Write($"{numbers[i][j]} \t");

11}

12Console.WriteLine();

13}

Суммируем основные понятия массивов:

Ранг (rank): количество измерений массива

Длина измерения (dimension length): длина отдельного измерения массива

Длина массива (array length): количество всех элементов массива Например, возьмем массив

1 int[,] numbers = new int[3, 4];

Массив numbers двухмерный, то есть он имеет два измерения, поэтому его ранг равен 2. Длина первого измерения - 3, длина второго измерения - 4.

Длина массива (то есть общее количество элементов) - 12.

Для объявления двумерного массива в С++ можно использовать следующую конструкцию:

1 int arr[100][50] = {0}; // двухмерный массив

Этим кодом мы создали матрицу размером 100×50, которая изначально заполнена нулями. Ее использование ничуть не отличается от выше рассмотренных обычных массивов:

1

int matrix[100][100] = {0};

 

 

2

matrix[5][10] = 11;

 

 

3

matrix[10][5] = 1;

 

 

4

cout << "Interesting values:\n";

 

 

5

cout << matrix[0][0] << ", " << matrix[5][10] << ", "

<< matrix[10][5] << endl;

 

Также можно реализовывать трехмерные, четырехмерные и т.д.

массивы.

4) Задание на лабораторную работу Обе части лабораторной работы должны быть выполнены либо на языке

программирования С++, либо на языке программирования C#.

40

Соседние файлы в папке Лабораторные работы