Краткая формулировка задач по программированию и мат.мет.выч.
Программы по алгоритмическим языкам и системам программирования:
1. Стэк
2. Связанный список
3. Дерево поиска
Программы по основам методов математических вычислений:
4. Решение уравнения итерационным методом Вегстейна
5. Решение системы уравнений методом Гаусса
6. Решение системы уравнений итерационным методом Гаусса-Зейделя
7. Нахождение значений функций синуса и косинуса с использованием их разложения в ряд Тейлора с преобразованием по схеме Горнера
Программы по алгоритмическим языкам и системам программирования должны быть написаны на языке СИ; программы по методам математических вычислений можно писать и на СИ, и на ПАСКАЛЕ.
1. Стэк
Написать программу, которая, используя программный стэк, реализованный при помощи массива и целочисленной переменной, переводит введённое с клавиатуры выражение в "польскую запись", затем запрашивает значения идентификаторов, содержащихся в строке, и находит значение выражения. Введённое выражение должно состоять из знаков математических операций +-*/, скобок трёх типов ()[]{} и идентификаторов (маленьких букв латинского алфавита). В процессе перевода введённой строки в польскую запись программа должна проверять строку на наличие ошибок. В случае встречи ошибки программа должна прекращать работу. Значения идентификаторов запрашиваются в процессе подсчёта "польской записи". Значения идентификаторов и выводимый результат должны быть вещественными числами. На экран выводятся "польская запись" и результат. Подробный рассказ о том, как реализовать стэк.
2. Связанный список
Написать программу, которая при помощи связанного списка считает слова в текстовом файле. Программа должна одно за другим считывать слова из файла и помещать их в алфавитном порядке в связанный список. В случае встречи слова, которое уже имеется в списке, значение счётчика этого слова увеличивается на единицу. После считывания всех слов из файла программа выводит на экран все встреченные слова и указывает количество для каждого слова. Разделителями между словами являются только знаки пробел, табуляция ('\t'), переход на новую строку ('\n') и пустой символ ('\0'). То есть не только буквы, но и знаки препинания, цифры и все другие символы таблицы кодов, кроме четырёх ранее перечисленных, являются частями слова.
3. Дерево поиска
Реализовать рекурсивную функцию удаления элемента из дерева поиска. Алгоритм удаления следующий: если удаляемый элемент ни на что не ссылается, он просто удаляется; если удаляемый элемент имеет только правое или только левое поддерево, то после удаления элемента это поддерево приделывается к тому элементу, который ссылался на удаляемый; если удаляемый элемент ссылается сразу на два поддерева, то в левом поддереве отыскивается наибольший по величине элемент и ставится на место удалённого элемента, а ветвь, крепившаяся к этому наибольшему элементу, прикрепляется к тому элементу, который на него ссылался. Дерево должно выводится на экран перед и после удаления элемента.
4. Решение уравнения итерационным методом Вегстейна
Уравнение задаётся в программе в виде функции f(x)=0. Задаётся случайное начальное значение x0. Первое приближенное значение считается по методу начальных приближений: прибавив к левой и правой части нашей функции x, получим f(x)+x=x. Отсюда x1=f(x0)+x0. Все последующие значения считаются по формуле Вегстейна до тех пор, пока разница между нынешним и предыдущим значениями найденных x не станет меньше заданной точности. Точность задаётся в программе в качестве константы или вводится пользователем перед началом подсчёта. На экран выводятся все промежуточные значения икса и полученный результат.
5. Решение системы уравнений методом Гаусса
Метод Гаусса заключается в том, что матрица, представляющая систему уравнений, сначала приводится к диагональному виду без нулей на главной диагонали (то есть на главной диагонали у нас не должно быть нулей, ниже главной диагонали должны быть только нули, а выше могут быть и нули, и не нули), потом находится значение последнего корня системы, затем, на его основе, предпоследнего, и так далее до первого. Приведение к диагональному виду производится при помощи сложения и домножения строк матрицы. Если в процессе приведения обнаруживается, что система вырождена (то есть имеет бесконечное множество решений), программа прекращает работу. Все вычисления, естественно, производятся с вещественными числами. Матрица читается из файла. На экран выводится матрица, считанная из файла, матрица, приведённая к треугольному виду и полученные в результате значения корней системы.
6. Решение системы уравнений итерационным методом Гаусса-Зейделя
Сначала, переставляя строки, приводим матрицу к такому, чтобы на диагонали не было нулей. При этом нужно заботиться о том, чтобы элемент на диагонали был больше по модулю, чем сумма модулей остальных элементов в той же строке. Если изначально на диагонали не было нулей, никаких перестановок производить не надо. Затем находим первый корень системы на основе случайных начальных значений других корней. Потом находим второй корень на основе найденного первого и начальных остальных. И так, соответственно, каждый корень. Повторяем эти операции до тех пор, пока текущие значения каждого из корней не будут отличаться от соответствующих предыдущих на величину, не превышающую заданную константой (или введённую с клавиатуры) точность. Если в процессе подсчёта (как минимум на третьей итерации) обнаружится, что метод расходится, программа прекращает работу. Метод является расходящимся, если хотя бы для одного корня текущее значение отличается от предыдущего больше, чем предыдущее от предпредыдущего. Матрица читается из файла. На экран выводится матрица, считанная из файла, приведённая матрица (если осуществлялось приведение), все промежуточные значения корней системы и полученные в результате значения корней.
7. Нахождение значений функций синуса и косинуса с использованием их разложения в ряд Тейлора с преобразованием по схеме Горнера
Нужно придумать преобразование по схеме Горнера ряда Тейлора для синуса (или, если удобнее, то для косинуса) и завести его в программу в виде рекурсивной функции. Затем находить при помощи этой функции значение синуса (или косинуса) до некоторого элемента, такого, что полученный результат будет отличаться от результата, полученного при подсчёте до предыдущего элемента, на величину, не превышающую заданную точность. Перед нахождением программа должна приводить величину считаемого угла к значению от -пи/2 до пи/2 (для синуса) или от 0 до пи (для косинуса). Косинус должен считаться как синус от угла плюс пи/2 с соответствующим знаком (и наоборот, если был реализован косинус). На экран выводятся все промежуточные значения синусов и косинусов и полученные в результате значения синуса и косинуса.