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

Лабораторное задание №2 (1-4)

.docx
Скачиваний:
5
Добавлен:
28.06.2022
Размер:
119.98 Кб
Скачать

Лабораторное задание 1

  1. Выбрать вариант задания в соответствии с номером компьютера.

  2. Разработать схему алгоритма, согласно ЕСПД (основываясь на знаниях, полученных на предыдущих курсах).

4, 19

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

Начало

с = 0, s = 0

Ввод k

Ввод n

i = 1, k+1, 1

i = 1, k+1, 1

Ввод a[i]

a[i]=n

a[1]<n

i = 1, k+1, 1

c = a[1], s = 1;

a[i] > n

p < q

p = n - a[i+1];

q = a[i] - n;

c = a[i], s = i;

c = a[i+1], s = i+1;

Вывод s,c

Конец

Лабораторное задание 2

Построить структурную диаграмму для своего варианта.

Лабораторное задание 3

Построить логическую схему (по А.А. Ляпунову) для своего.

Выполнение только первого задания оценивается, максимум, в 3 балла, первого и второго заданий оценивается в 4 балла, выполнение всех заданий оценивается в 5 баллов.

Лабораторное задание 4

Написать и отладить программу своего варианта.

#include <iostream>

#include <string>

#define M 100

using namespace std;

int main()

{

setlocale(LC_ALL, "Russian");

float c = 0, a[M], n;

int k, i, s = 0 , p, q;

cout << "Введите размерность массива" << endl;

cin >> k;

cout << "Введите массив" << endl;

for (i = 1; i < k+1; i++)

{

cin >> a[i];

}

cout << "Введите число, не состоящее в массиве" << endl;

cin >> n;

for (i = 1; i < k+1; i++)

{

while (a[i] == n)

{

cout << "Ошибка. Данное число есть в массиве" << endl;

cout << "Введите число, не состоящее в массиве" << endl;

cin >> n;

}

}

if (a[1] < n)

{

c = a[1], s = 1;

}

for (i = 1; i < k+1; i++)

{

if (a[i] > n)

{

p = n - a[i+1];

q = a[i] - n;

if (p < q)

c = a[i+1], s = i+1;

else

c = a[i], s = i;

}

}

cout << "Номер ближайшего числа в списке и его значение:";

cout << "[#"<< s << "]" << " " << c;

return 0;

}

Разработать рекурсивную программу, решающую классическую задачу — «Ханойская башня». Даны три стержня, на одном из которых находится стопка n-го количества дисков, причём диски имеют не одинаковый размер (диски различного диаметра) и расположены таким образом, что по мере прохождения, сверху вниз по стержню диаметр дисков постепенно увеличивается. То есть диски меньшего размера должны лежать только на дисках большего размера. Необходимо переместить эту стопку дисков с начального стержня на любой другой из двух оставшихся (чаще всего это третий стержень). Один из стержней (чаще всего это второй) использовать как вспомогательный. Перемещать можно только по одному диску, при этом диск большего размера никогда не должен находиться над диском меньшего размера.

#include <iostream>

#include <stdlib.h>

void hanoi(int num, char base, char final, char mid)

{

if (num != 0)

{

hanoi(num - 1, base, mid, final);

std::cout << base << " переместить на " << final << std::endl;

hanoi(num - 1, mid, final, base);

}

}

int main()

{

int num;

std::cout << "Введите количество колец: ";

std::cin >> num;

hanoi(num, 'B', 'M', 'F');

return 0;

}