Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прочее / шпора по с++, экт 1й курс.doc
Скачиваний:
62
Добавлен:
17.04.2013
Размер:
88.06 Кб
Скачать

(22)Динамические структуры данных. Списки.

Стек - это структура данных , организованная по принципу: «последним вошел первым вышел». Аналог стека бусинки, нанизанные на нитку. Последнюю из бусинок легко снять, а чтоб снять первую, надо снять все предыдущие. Для формирования стека объявляется такая же структура как и для формирования очереди: typedef stuct node {int info; stuct node *next;} Node; typedef Node *Nodeptr;//указатель на структуру типа node; Формирование можно осуществить с помощью следующих операторов. Nodeptr= NULL; if{ (head==NULL) {head=(NodePtr)malloc(sizeoff(Node)); head->info=random(100)-50; head->next=NULL;} else { p=(Nodeptr)malloc(sizeoff(Node)); p->info= random(100)-50; p->next=head; headl=p;} Если известно количество элементов в стеке, или признак завершения его формирования , то пользуются одним из операторов цикла.

Первым в стек на рис. помещён элемент с информационным полем, =1, вторым-2м и т.д. Как видно из рис. следуя указателям next и head, мы доберёмся до элемента 1 в последнюю очередь.

(23)Численные методы. Метод деления отрезка пополам. Решить уравнение f(x)=0 с заданной точностью методом деления отрезка пополам.Метод деления отрезка пополам заключается в следующем.. Проверяется наличие корня на отрезке [а, b]. Для этого вычисляются значения функции f(а) и f(b) . Если f(а)*f(b) > 0, то уравнение не имеет корней на заданном отрезке. Если f(а) * f(b) < 0, т. е. на концах отрезка [а, b] функция f(х) имеет противоположные знаки, то искомый корень лежит на этом отрезке. Поиск корня происходит следующим образом. Находим в точке а значение функции у1=f(а). Затем определяем значение х как среднюю точку между а и b, вычисляем значения у2=f(х). Теперь, если f(а) * f(х) > 0, то корень находится на отрезке [a, b]. Переместим точку, а вправо, выполнив присвоение а=х. В противном случае нужно перемещать влево точку b: b. Таким образом, получим второй отрезок [а, b], но вдвое меньше предыдущего. Процесс деления отрезка пополам продолжается до тех пор, пока отрезок [а, b] не станет меньше заданной точности.

(24)Численные методы. Метод простых итераций. Вычисление с заданной точностью корня уравнения F(x)=0 методом итераций.

Пусть корень уравнения находится на отрезке [ a, b ].

Для использования метода итераций исходное уравнение F(x)=0 нужно привести к виду x=f(x). Если известно начальное приближение к корню х=х1, то подставив его в правую часть уравнения х=f(x), получим новое приближение x3=f(x2),…..xk+1=f(xk). Итерационный процесс сходится к корню уравнения, если |f ‘(x)|<1 на отрезке, содержащем корень уравнения. Если выполняется неравенство –1<f ‘(x)<0, то корень уравнения всегда находится на отрезке [xk, xk+1] и условие окончания итерационного процесса имеет вид неравенства |xk+1-xk|<.

Переход от уравнения F(х)=0 к уравнению f(х) можно осуществить следующим образом. Умножим левую и правую части уравнения F(х)=0 на произвольную константу h и добавим к обеим частям уравнения неизвестное х. Эти действия не изменяют корней уравнения: h F(х) +х=О*h; h F(х) +х=х; Обозначив f(х) =h f(х) +х, перейдем к уравнению х=f(х). Величину h желательно выбрать такой, чтобы выполнялось неравенство –1<f '(х)<0 на отрезке, содержащем корень уравнения. Исходными данными для программы, соответствующей приведенному алгоритму, является грубое значение корня и точность вычисления. Условием выхода из итерационного процесса является неравенство |хk+1k]<, при этом искомым значением является хk+1.

Соседние файлы в папке Прочее