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

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

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

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

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

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

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

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

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

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

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

1 – 1

3 – 9

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

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

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

Возведение в степень. Написать функцию, которая вычисляет значение ab, не используя функцию pow(a,b). Число a может быть любыми положительными числом. b – неотрицательное целое число.

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

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

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

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

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

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

3) сжать массив, удалив из него все элементы, модуль которых находится в интервале (а,b). Освободившиеся в конце массива элементы заполнить нулями.

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

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

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

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

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

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

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

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

1) вычислить сумму положительных элементов массива;

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

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

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

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

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

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

Y[0]=X[0]+X[1]

Y[1]=X[1]+X[2]

Y[2]=X[2]+X[3]

Y[N-1]=X[N-1]+X[N]

Пример:

Массив 1,3,0,-7,0,0,6,11,0

Результат 4,3,-7,-7,0,6,17,11

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

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

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

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

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

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

Замена элементов файла. В двоичном файле, содержащем данные типа float, заменить максимальный и минимальный элементы средним арифметическим значением всех элементов этого файла.

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

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

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

Заполнение файла случайными числами и перенос элементов в другой файл. Заполнить текстовый файл целыми числами, полученными с помощью генератора случайных чисел. Получить в другом файле все компоненты созданного файла, которые делятся на m и не делятся на n. Числа m и 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‘=(y2 - x2) / 2xy

y0 = 2

x0 = 1

xn = 2

Точное решение ДУ: y(x)= SQRT[5x - x2]

Примечание: 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-x+0.087=0

Примечание:

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

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

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

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

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

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

;

где xi=a+i*h.

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

Функция f(x): f(x)= arcsin(1/SQRT[1.1 + x])

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

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

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

Тема: Строки

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

1) вывести измененный текст, каждое предложение которого начинается с заглавной буквы;

2) напечатать введенные предложения по возрастанию их длин.

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

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