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

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

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

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

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

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

Перевод времени из минут и секунд в секунды. Написать программу, которая запрашивает у пользователя время в виде «минуты – секунды», после чего вычисляет полное число секунд во введенном значении и выводит результат вычисления на экран. При составлении программы учесть, что в одной минуте 60 секунд, число минут во вводимом значении – неотрицательно. Учесть ситуацию с переполнением.

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

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

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

Вывод таблицы степеней двойки. Пользователь вводит натуральное число n. Программа выводит значения последовательности (2i)ni=1. Таблица представляется набором строк вида число – степень, например:

1 – 2

2 – 4

3 – 8

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

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

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

Вычисление дохода вкладчика. Написать функцию, которая вычисляет доход по вкладу. Исходными данными для функции являются: величина вклада, процентная ставка (годовая) и срок вклада (количество дней). Количество дней в году принять равным 365.

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

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

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

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

1) найти номер минимального элемента массива;

2) вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами;

3) преобразовать массив таким образом, чтобы сначала располагались, все элементы, модуль которых не превышает 1, а потом – все остальные.

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

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

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

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

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

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

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

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

1) найти номер максимального элемента массива;

2) вычислить произведение элементов массива, расположенных между первым и вторым нулевыми элементами;

3) преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие на нечетных позициях, а во второй половине – элементы, стоявшие на четных позициях.

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

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

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

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

1) Если во второй массив попали значения, превосходящие размерность первого, необходимо сообщить об этом пользователю и отменить сборку массива

2) Если во втором массиве встречаются повторяющиеся значения, то соответствующий элемент первого массива включается в новый массив ещё раз

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

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

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

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

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

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

Расщепление файла. Из текстового файла, содержащего вещественные числа, сформировать два других, в один из которых поместить значения строго большие, чем число, введенное с клавиатуры, в другой – строго меньшие. Определить и вывести на экран количество элементов в каждом из получившихся файлов.

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

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

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

Вычисление произведения элементов файла. Записать в двоичный файл N действительных чисел; N вводится пользователем. Вычислить произведение элементов файла и вывести на экран.

Примечание: Результат работы с данными вывести на экран и в новый файл. Файл с входными данными имеет название 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‘=-4x3*y3 - 2xy

y0 = 1

x0 = 0

xn = 1

Точное решение ДУ: y(x)= SQRT[1 / 2e2x*x - 2x2 - 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-3x-0.4994=0

Примечание:

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

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

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

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

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

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

;

где xi=a+i*h.

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

Функция f(x): f(x)= tg(0.1)*(x2 + SQRT[1 + 0.1x])

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

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

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

Тема: Строки

С клавиатуры вводятся две строки. Ввод прекращается при нажатии клавиши Enter. Найти число вхождений меньшей строки в большую. При совпадении длин строк проверить на лексическое равенство строк.

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

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