Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
13.03.2016
Размер:
116.97 Кб
Скачать

Вычислительная практика

Вычислительная практика

Задачи 30 варианта

--- Задача 1 ---

Тема: Основные операции языка Cи. Часть 1.

Вычислить площадь треугольника по трем его сторонам. Написать программу, которая запрашивает у пользователя длины сторон треугольника и вычисляет его площадь. Учесть, что длины сторон треугольника – положительные величины и a+b>c.

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

--- Задача 2 ---

Тема: Основные операции языка Cи. Часть 2.

Вычислить площадь треугольника по трем его сторонам. Написать программу, которая запрашивает у пользователя длины сторон треугольника и вычисляет его площадь. Учесть, что длины сторон треугольника – положительные величины и a+b>c.

Примечание: Начиная с этого раздела, во всех дальнейших задачах необходимо самостоятельно обнаруживать ситуации с переполнением, делением на ноль и т.д. Также необходимо проверять корректность ввода. Это включает в себя не только проверку на соответствие типу данных, но и проверку условий исходя из условий задачи. Например, при воде длин сторон треугольника необходимо проверить что вводимые длины на не отрицательны и что сумма любых двух из них больше третьей.

--- Задача 3 ---

Тема: Функции.

Восстановление числа. Написать функцию, которая по битам аргумента восстанавливает число, закодированное способом, описанным в предыдущей задаче. Программа не должна учитывать многократное произведение простых множителей в исходном числе. Пример:

Введите код: 6

Исходное число было: 15

Примечание: Функция, которую требуется написать в каждом задании, не должна самостоятельно осуществлять ввод или вывод каких-либо значений, а также не должна прерывать выполнение программы. Вывод данных должен быть как можно более подробным и может включать не только возвращаемое функцией значение. В этом разделе и далее, следует учитывать, что внутри функции может произойти неисправимая ошибка (например, ситуация когда функции необходимо вычислить квадратный корень из отрицательного числа). В этом случае функция должна возвращать признак (код ошибки). Более подробно такая техника описана в приложении 3. Например, если функция по смыслу задачи должна посчитать положительное число (площадь, количество и т.д.), то в качестве кода ошибки можно использовать отрицательные возвращаемые значения.

--- Задача 4 ---

Тема: Одномерные массивы.

С одномерным массивом, состоящим из n натуральных эле-ментов, произвести следующие операции: 1) найти количествово элементов массива, правыми соседями которых являются четные числа

2) найти среднее арифметическое максимального и минимального элементов массива

3) упорядочить элементы массива с четными индексами по возрастанию, а с нечетными – по убыванию

Примечание: Размеры массивов задаются именованными константами. Все операции над массивами выполняются отдельными функциями в том порядке, в котором они описаны в задании. Элементы массивов задаются одним из двух способов: генерация случайным образом или ввод с клавиатуры. Способ заполнения массива выбирается пользователем (необходимо предусмотреть соответствующий запрос). При составлении программ, максимальное количество элементов в массиве задается с помощью макроопределения #define. Однако программа должна спрашивать у пользователя реальную размерность массива (в диапазоне от единицы до константы в макроопределении). Для программ этого раздела, использовать глобальные массивы запрещается. Выход индекса за пределы массива считается грубейшей ошибкой.

--- Задача 5 ---

Тема: Двумерные массивы.

Дана целочисленная прямоугольная матрица. Рассчитать среднее арифметическое элементов, стоящих «на белых» клетках шахматной доски. Кроме этого, рассчитать сумму элементов, стоящих на «черных» клетках шахматной доски. Клетку с координатами (0,0) считать белой.

Примечание: Размеры массивов задаются именованными константами. Значения элементов массивов вводятся с клавиатуры, генерируются случайным образом или инициализируются в программе (значения по умолчанию). Способ задания элементов массива выбирается пользователем. Все операции над массивами выполняются отдельными функциями. Ввиду сложности передачи указателя на двумерный статический массив, рекомендуется создать глобальный массив и обращаться из каждой функции непосредственно к нему. Выход индекса за пределы массива считается грубейшей ошибкой. Особое внимание уделите порядку указания индексов в двумерном массиве.

--- Задача 6 ---

Тема: Динамически распределяемая память. Часть 1.

С одномерным динамическим массивом, состоящим из n целочисленных элементов, произвести следующие операции:

1) вычислить сумму двузначных чисел массива;

2) вычислить корень квадратный из произведения все отрицательных чисел, стоящих на четных местах (0 считается четным числом). Если произведение отрицательное, выдать в качестве ответа -1;

3) упорядочить массив по возрастанию количества цифр в числе.

Примечание: Размеры массивов и значения элементов вводятся пользователем. Все операции над массивами выполняются отдельными функциями в том порядке, в котором они описаны в задании. В каждой задаче необходимо предусмотреть функцию ввода с клавиатуры одномерного массива. Кроме того, в каждой задаче должна быть реализована проверка на целостность кучи (см. приложение 2).

--- Задача 7 ---

Тема: Динамически распределяемая память. Часть 2.

Двумерный из одномерного Написать программу, которая строит из элементов одномерного массива двумерный массив, периметр которого, посчитанный в количестве элементов, минимален. В качестве подсказки можно использовать тот факт, что при одинаковой площади двух прямоугольников, наименьший периметр будет у того из них, у которого разность длин соседних сторон меньше. Количество элементов задается с клавиатуры.

Пример 1:

Введите количество элементов: 4

Введите элементы: 1 2 3 4

Итоговый массив:

1 2

3 4

Пример 2:

Введите количество элементов: 8

Введите элементы: 1 2 3 4 5 6 7 8

Итоговый массив:

1 2 3 4

5 6 7 8

Пример 3:

Введите количество элементов: 7

Введите элементы: 1 2 3 4 5 6 7

Итоговый массив:

1 2 3 4 5 6 7

Примечание: В каждой задаче должна быть реализована проверка на целостность кучи. При работе со строками учитывать символ конца строки (байт с нулевым значением).

Заполнение элементов массива (там, где это требуется) должно быть реализовано в виде отдельной функции. В этой функции запрашивается количество элементов массива, затем пользователю предоставляется выбор – либо вводить массив с клавиатуры, либо заполнить его автоматически (случайными числами).

В случаях, когда функция сама формирует массив, она должна посредством своих аргументов (объявленных как указатели) передать в вызывающую программу новый массив и число его элементов. Возвращаемое функцией число должно означать код ошибки (например, 0 – нет ошибки, ненулевое число – код конкретной ошибки).Во всех задачах, где необходимо вводить строки (не)ограниченной длины без редактирования, следует иметь в виду, что для хранения строки необходимо использовать динамическую память. Размер блока, выделенного под строку, увеличивается при вводе очередного символа. Строка генерируется внутри функции ввода. Функция возвращает указатель на начало строки. Ввод строки завершается при нажатии клавиши Enter, код Enter в строке не сохраняется.

Если на каком-либо этапе память выделить невозможно, то необходимо освободить всю выделенную ранее память и завершить программу. Особое внимание уделить обработке различных ошибок – при их возникновении необходимо освобождать все ставшие ненужными ресурсы. При формировании нового массива можно реализовать любой из следующих алгоритмов, либо разработать свой:1) создать новый массив и перенести в него нужные элементы.2) скопировать исходный массив и поэлементно его изменять (например, переставлять элементы).

--- Задача 8 ---

Тема: Файлы. Часть 1.

Перестановка строк. Написать программу, которая копирует текстовый файл, переставляя в выходном файле каждые две соседние строки местами.

Примечание: Результат работы с данными вывести на экран и в новый файл. Файл с входными данными имеет название INPUT.TXT для текстовых файлов и INPUT.DAT для двоичных. Файл, в который записывается результат, называется OUTPUT.TXT для текстовых файлов или OUTPUT.DAT для двоичных. Для создания файлов с исходными данными можно использовать различные утилиты (например, Binary Viewer). Число элементов при считывании файла определяется его длиной, либо, если этого не определяет алгоритм, двумя сотнями (200). Лучшими решениями считаются те, где нет привязки к количеству элементов в файле. При необходимости можно использовать временный файл для хранения промежуточных результатов.

--- Задача 9 ---

Тема: Файлы. Часть 2.

Выбор слов. Написать программу, которая выводит из считываемого файла на экран только определенные слова. Список слов (5-7) выбрать самостоятельно. Остальные слова не выводить.

Примечание: Результат работы с данными вывести на экран и в новый файл. Файл с входными данными имеет название INPUT.TXT для текстовых файлов и INPUT.DAT для двоичных. Файл, в который записывается результат, называется OUTPUT.TXT для текстовых файлов или OUTPUT.DAT для двоичных. Для создания файлов с исходными данными можно использовать различные утилиты (например, Binary Viewer). Число элементов при считывании файла определяется его длиной, либо, если этого не определяет алгоритм, двумя сотнями (200). Лучшими решениями считаются те, где нет привязки к количеству элементов в файле. При необходимости можно использовать временный файл для хранения промежуточных результатов.

--- Задача 10 ---

Тема: Решение дифференциального уравнения методом Эйлера.

Написать программу, находящую решение дифференциального уравнения y‘=f(x,y) методом Эйлера на отрезке [x0,xn] с шагом h при начальных условиях y=y0. Исходные данные приведены.

Метод Эйлера и вычисление функции f(x,y) необходимо реализовать в виде отдельных функций. Исходные данные y0, x0, xn, h вводятся с клавиатуры.

Значения численного решения рассчитываются по формуле

yi+1=yi+h*f(xi,yi)Исходные данные:

Дифференциальное уравнение: y‘=1/(x2 + 1) - y/x

y0 = 0

x0 = 3

xn = 4

Точное решение ДУ: y(x)= 1/2x * ln(0.1*(x2+1))

Примечание: SQRT - корень квадратный из выражения, заключенного в скобки вида [ ].

--- Задача 11 ---

Тема: Решение уравнения методом дихотомии

Написать программу, находящую решение уравнения f(x)=0 методом дихотомии на указанном отрезке изоляции. Точность вычисления корней уравнения Eps=10 -3. Исходные данные приведены. Метод дихотомии реализовать в виде функции. Поиск решения производить на отрезке [–10;10].Выполнить приближенное вычисление с точностью Eps корня уравнения f(x)=0 методом дихотомии при условии, что f(x) непрерывна на [a,b] и f(a)*f(b)<0, можно по следующей схеме:

1. Задать концы отрезка a и b, функцию f, малое число Eps>0 (допустимую абсолютную погрешность корня или половину длины его промежутка неопределенности); вычислить f(a).

2. Вычислить c=0,5(a+b).

3. Если b–a<2Eps, положить E=c (E – корень уравнения) и остановиться.

4. Вычислить f(с).

5. Если f(c)=0, положить E=c и остановиться.

6. Если f(a)*f(c)<0, положить b=c и вернуться к шагу 1; иначе положить a=c и вернуться к шагу 1.

Алгебраическое уравнение: x3+4.1745x2+9.315x+10.1583=0

Примечание:

--- Задача 12 ---

Тема: Нахождение определенного интеграла

Написать программу, которая находит определенный интеграл методом прямоугольников и методом трапеций. Исходные данные приведены. Шаг интегрирования взять равным h=0,01. Каждый метод должен быть реализован в виде отдельной функции.

Интеграл методом прямоугольников вычисляется по следующей формуле:

где xi=a+(i-1)*h.

Интеграл методом трапеций вычисляется по одной из следующих формул:

;

где xi=a+i*h.

Исходные данные:

Функция f(x): f(x)= ln(2.5 sin(2x))

Отрезок интегрирования: [0;2]

Примечание: SQRT - корень квадратный из выражения, заключенного в скобки вида [ ].

--- Задача 13 ---

Тема: Строки

С клавиатуры вводится текст из строчных латинских букв. Ввод прекращается при нажатии клавиши Enter. Перепечатайте текст так, чтобы строки текста не выходили правее n-ой позиции. Это значит, что каждая строка, длина которой превышает n, должна печататься с переносом на следующие строки. Место переноса следует “искать” после последнего символа, отличного от символа — разделителя, расположенного левее n- ой позиции.

Примечание: Все операции над строками выполняются отдельными функциями в том порядке, в котором они описаны в задании. Кроме того, в случае необходимости, должна быть реализована проверка на целостность кучи (см. приложение 2). Основы работы со строками в Си описаны в приложении 4.

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