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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1) вычислить количество элементов, не входящих во введённый пользователем диапазон;

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

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

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

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

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

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

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

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

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

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

1) вычислить количество элементов, не входящих во введённый пользователем диапазон;

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

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

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

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

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

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

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

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

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

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

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

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

Сортировка элементов файла. Написать программу, которая сортирует элементы файла таким образом, чтобы элементы, входящие во введённый пользователем диапазон, располагались в начале, а остальные в конце файла. Необходимо сохранить исходный порядок элементов. Результат записывается в другой файл.

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

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

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

Изменение данных в файле. Удалить все символы в файле находящиеся между скобками. Открывающаяся скобка обязательна, закрывающаяся нет. Например:

Исходный файл: d3g)h5(4gfy)7d(f6(gh(4d)jy)jc)gh5)jy(8u)i7h(jk

Конечный файл: d3g)h5()7d()gh5)jy()i7h(

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

y0 = 1

x0 = 1

xn = 2

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

Примечание: 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.

Алгебраическое уравнение: 2x3+0.9912x2+0.9912x-1.0088=0

Примечание:

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

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

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

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

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

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

;

где xi=a+i*h.

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

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

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

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

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

Тема: Строки

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

1) заменить на ks первое вхождение x, если такое есть;

2) вычислить процентное содержание гласных букв в строке.

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

June 24, 2009

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