![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Решение системы уравнений методом Гаусса
Все методы решения систем уравнений делятся на: точные и приближенные. Метод Гаусса является точным решением систем уравнений, так как последовательность действий при нахождении корней конечно, приближенные методы считаются иттерационно, т.е до тех пор, пока погрешность вычислений не будет меньше заданной. Основной идеей метода Гаусса,как и отмечалось ранее, является последовательное исключение неизвестных, приводящее к построению эквивалентной системы с треугольной матрицей. Рассмотрим следующую систему уравнений 4 порядка: Метод Гаусса при решении системы уравнений можно разделить на два этапа: прямой и обратный ход. Вычисление неизвестных ведется в обратной последовательности: x4,x3 x2,x1. Необходимым и достаточным условием выполнения метода Гаусса должно быть следующим: все ведущие элементы Аii не должны равняться нулю. Прямой ход: Ведущий элемент А11=2. Нормирование первого уравнения: x1=-(3/2)*x2-(11/2)*x3-(5/2)*x4+1. Исключение неизвестной x1 из оставшихся трех уравнений: 2-е уравнение: (-(3/2)*1+1)*x2+(-(11/2)*1+5)*x3+(-(5/2)*1+2)*x4+(1*1-1)=0 3-е уравнение: (-(3/2)*2+1)*x2+(-(11/2)*2+3)*x3+(-(5/2)*2+2)*x4+(1*2+3)=0 4-е уравнение: (-(3/2)*1+1)*x2+(-(11/2)*1+3)*x3+(-(5/2)*1+4)*x4+(1*1+3)=0 После преобразований получим следующую систему: Выбираем снова ведущий элемент А33=-6. Нормирование 1го уравнения новой системы: x3=-(1/6)*x4+(5/6) Исключаем неизвестую x3 из оставшегося уравнения: (-(1/6)*(-2)+2)*x4+((5/6)*2+4)=0
После нормирования x4=-1
Обратный ход: Формирование эквивалентной системы с треугольной матрицей и вычисление неизвестных:
Решение систем уравнений методом Гаусса c выбором главного элемента.Большинство распространенных методов решений уравнений являются вариантами метода Гаусса, отличающиеся незначительными нюансами. Метод Гаусса с выбором главного элемента фактически повторяет предыдущий способ за тем исключением, что вместо выбора ведущего элемента на каждом этапе здесь в самом начале определяется главный элемент. Единственным условием выполнения метода является неравенство нулю детерминанта матрицы. Расширенная прямоугольная матрица коэффициентов СЛУ:
Прямой ход: Выбор главного элемента по критерию: Apq=max|aij|, (без учета bi) Вычисление множителей mi=-(aij)/(Apq) Исключение переменной, соответствующей главному элементу: [строка]i+[главная строка]*mi Таким образом, новая матрица будет на порядок меньше исходной. Иттерационно повторяя аналогичные действия формируем последовательность матриц. В конечном итоге завершающей будет матрица строка. Обратный ход метода заключается в: 1) Объединение главных строк в систему 2) Вычисление xi Пример решения системы уравний методом Гаусса с выбором главного элемента можно разобрать по таблице. В отличие от просого метода Гаусса данный способ менее чувствителен к ошибкам округлений.
uses crt;
Билет 9 2.Нелинейные уравнения можно разделить на 2 класса - алгебраические и трансцендентные. Алгебраическими уравнениями называют уравнения, содержащие только алгебраические функции (целые, рациональные, иррациональные). В частности, многочлен является целой алгебраической функцией. Уравнения, содержащие другие функции (тригонометрические, показательные, логарифмические и другие) называются трансцендентными.Методы решения нелинейных уравнений делятся на две группы: точные методы; итерационные методы.Точные методы позволяют записать корни в виде некоторого конечного соотношения (формулы). Из школьного курса алгебры известны такие методы для решения тригонометрических, логарифмических, показательных, а также простейших алгебраических уравнений.Как известно, многие уравнения и системы уравнений не имеют аналитических решений. В первую очередь это относится к большинству трансцендентных уравнений. Доказано также, что нельзя построить формулу, по которой можно было бы решить произвольное алгебраическое уравнение степени выше четвертой. Кроме того, в некоторых случаях уравнение содержит коэффициенты, известные лишь приблизительно, и, следовательно, сама задача о точном определении корней уравнения теряет смысл. Для их решения используются итерационные методы с заданной степенью точности.Пусть дано уравнение где: Функция f(x) непрерывна на отрезке [a, b] вместе со своими производными 1-го и 2-го порядка.Значения f(x) на концах отрезка имеют разные знаки (f(a) f(b) < 0).Первая и вторая производные f' (x) и f'' (x) сохраняют определенный знак на всем отрезке.Условия 1) и 2) гарантируют, что на интервале [a, b] находится хотя бы один корень, а из 3) следует, что f(x) на данном интервале монотонна и поэтому корень будет единственным.Решить уравнение (1) итерационным методом значит установить, имеет ли оно корни, сколько корней и найти значения корней с нужной точностью.Всякое значение , обращающее функцию f(x) в нуль, т.е. такое, что:называется корнем уравнения (1) или нулем функции f(x).Задача нахождения корня уравнения f(x) = 0 итерационным методом состоит из двух этапов: отделение корней - отыскание приближенного значения корня или содержащего его отрезка;уточнение приближенных корней - доведение их до заданной степени точности.Процесс отделения корней начинается с установления знаков функции f(x) в граничных x = a и x = b точках области ее существования.
3.тоже подобная 1) var a,b,c,D,x1,x2:real; write ('a = '); readln (a); Билет 10. .В большинстве языков программирования, в том числе и в Pascal, предусмотрены инструменты для сохранения информации на внешних носителях (кстати, жесткий диск также относится к внешнему запоминающему устройству), а также ее извлечению (чтению) оттуда. Данные, хранящиеся на внешних устройствах, «организовываются в виде файлов». Под файлом понимается область памяти на внешнем запоминающем устройстве, хранящая (содержащая) определенную информацию. В эту конкретную область памяти можно помещать данные (операции ввода, записи), так и извлекать их оттуда (операции вывода, чтения). В языке программирования Паскаль для работы с данными, хранящимися в файлах, должны быть определены переменные файлового типа, через которые далее обеспечивается связь между файлом на диске и программой. Работа с файлами: В паскале работа с файлами осуществляется через специальные типы. Это файловые типы, которые определяют тип файла, то есть фактически указывают его содержимое. С помощью этой переменной, которой присвоен необходимый тип, и осуществляется вся работа с файлами - открытие, запись, чтение, закрытие и т.п. При работе с файлами существует определенный порядок действий, которого необходимо придерживаться. Вот все эти действия: 1.Создание (описание) файловой переменной. 2.Связывание этой переменной с конкретным файлом на диске или с устройством ввода-вывода (экран, клавиатура, принтер и т.п.). 3.Открытие файла для записи либо чтения. 4.Действия с файлом: чтение либо запись. 5.Закрытие файла. Первое, на что нужно обратить внимание, это возможность связать файловую переменную не только с физическим файлом на носителе информации, но и с устройством. Турбо Паскаль поддерживает три файловых типа: текстовые файлы; типизированные файлы; нетипизированные файлы. Доступ к файлу в программе происходит с помощью переменных файлового типа. Переменную файлового типа описывают одним из трех способов: file of тип - типизированный файл (указан тип компоненты); text - текстовый файл; file - нетипизированный файл. 2. В языке Паскаль числа могут быть представлены в двух видах: с фиксированной точкой и плавающей точкой. Числа с фиксированной точкой изображаются десятичным числом с дробной частью, которая может быть и нулевой. Например, 27.9, 5.00 Такие большие числа, как 137.000.000, можно записать в формате с десятичным порядком: 1.37·108. В Turbo Pascal для подобных чисел принята форма записи mEp, где m - мантисса; E - признак записи числа с десятичным порядком; p - показатель степени числа 10. Такое представление чисел и называется форматом с плавающей точкой. Число 1.37·108 в этом формате запишется так: 1.37Е+8. Нормализованная форма представления числа – это одна из форм множества вариантов экспоненциальной формы записи числа. Пусть слово состоит из 2 байт, два слова – это 4 байта или 32 бита. Нормализированное число одинарной точности, представленное в формате с плавающей точкой, записывается в память следующим образом: знак числа – в бите 15 первого слова (0 – для положительных и 1 – для отрицательных чисел); порядок размещается в битах 7-14 первого слова, а мантисса занимает остальные 23 бита в двух словах (с 0 по 6 бит первого слова и все биты второго слова). Нормализированное число двойной точности записывается в четыре слова памяти и отличается от представления чисел с одинарной точностью только тем, что продолжение мантиссы размещается в следующих за первым словом трех последовательных словах памяти, а всего под мантиссу в этом случае отводится 55 бит. Билет 11 1 .Рассмотрим более детально построение программы. var a, b, c : integer; В этой строке обязательно указываются все переменные, участвующие в программе и их типы.Слово var - это сокращение от слова variable (переменная) и является так же, как и слово program, зарезервированным словом. После него записываются именапеременных - идентификаторы, в нашем примере: a, b, c. Они записываются через запятую. После имен переменных стоит ":" - двоеточие, а затем записано служебное, зарезервированное, слово integer. Integer (целый) указывает тип значений, которые принимают переменные - целые числа (..., -4, -3, -2, -1, 0, 1, 2, 3, 4, 5,...). Далее в программе следует служебное, зарезервированное, слово begin (начать), которым начинается новый раздел программы - раздел операторов. В этом разделе последовательно записываются команды, операторы, которые разделяются ";" - точкой с запятой. Они будут выполняться компьютером. Программа заканчивается служебным словом end, после которого стоит точка. Она является обязательной во всех паскалевских программах. Точка оповещает о конце текста программы. Стандартные типы данных. К стандартным относятся целые, действительные, символьный и адресный типы. Целыетипы определяют константы,переменные и функции,значения которых реализуются множеством целых чисел.Над целыми операндами можно выполнять следующие арифметические операции: сложение,вычитание, умножение, деление, получение остатка от деления. Знаки этих операций:+,-,*,div,mod. Действительныетипы определяет те данные, которые реализуются под множеством действительных чисел. Символьныйтип (Char) определяет упорядоченную совокупность символов . Значение символьной переменной или константы - это один символ из допустимого набора. Символьная константа может записываться в тексте программы тремя способами: -как один символ, заключенный в апострофы. -с помощью конструкции вида #K, где K - код соответствущего симво- ла, при этом значение K должно находиться в пределах 0..255. -с помощью конструкции вида ^C, где C - код соответствущего управ- ляющего символа, при этом значениеC должно быть на 64 больше кода управляющего символа. Адресныйтип (Pointer) определяет переменные, которые могут содер- жать значенияадресов данных или фрагментов программы.Для хранения адреса требуются два слова (4 байта), одно из них определяет сегмент, второе - смещение. 2.При десятичной записи приближенного значения числа записывают только верные цифры.При наличии одной верной цифры допустимо принимать относительную ошибку числа близкой к 10%, двух – около 1%, трех – около 0,1% и т.д. Значащими цифрами числа называются все цифры в его записи, начиная с первой ненулевой слева. Значащими цифрамичисла, записанного в виде десятичной дроби, называют все его верные цифры, начиная с первой слева,отличной от нуля.
12. 1.Массивы - это совокупности однотипных элементов. Характеризуются они следующим: - каждый компонент массива может быть явно обозначен и к нему имеется прямой доступ; - число компонент массива определяется при его описании и в дальнейшем не меняется. Для обозначения компонент массива используется имя переменной-массива и так называемые индексы, которые обычно указывают желаемый элемент. Тип индекса может быть только порядковым (кроме longint). Чаще всего используется интервальный тип (диапазон). Var X1:[1..10,1..5] of integer; Этот оператор описывает двухмерный массив, который можно представить себе как таблицу, которая состоит из 10 строк и 5 столбцов. Обычно используется именно такая форма объявления многомерных массивов. Как и в одномерных массивах, элементы и индексы могут иметь любой тип. Доступ к значениям элементов многомерного массива осуществляется через индексы, которые перечисляются через запятую. Например, X1[3,4] – значение элемента, лежащего на пересечении третьей строки и четвертого столбца. Можно определить не непосредственно переменные типа многомерных массивов, а сначала определить соответствующий тип, а потом – переменные или типизированные константы данного типа как у одномерных массивов. В качестве начального значения типизированной константы-массива используется список констант, отделенных друг от друга запятыми; список заключается в круглые скобки, например: Type colors = (white, red, black) ; Const ColStr : array [colors] of String [5] =('white', 'red', 'blak'); Vector : array [1..5] of Byte = (0,0,0,0,0); При объявлении массива символов можно использовать то обстоятельство, что все символьные массивы и строки в Object Pascal хранятся в упакованном формате, поэтому в качестве значения массива-константы типа char допускается задание символьной строки соответствующей длины. Два следующих объявления идентичны: Const Digit : array [0..9] of Char =('0', '1', '2', ' 3 ', ' 4', '5', '6', '7', '8', '9'); DigChr: array [0..9] of Char = '0123456789'; Формальный параметр, описанный с помощью синтаксиса: array of T , является открытым параметром-массивом. T должно быть идентификатором типа, а фактический параметр должен быть переменной типа T, или массивом, типом элементов которого является T. К открытому формальному параметру-массиву можно обращаться только по элементам. Присваивания всему открытому массиву не допускаются, и открытый массив может передаваться другим процедурам или функциям только как открытый параметр-массив или нетипизированный параметр-переменная. Для открытых массивов-значений компилятор создает в кадрестека процедуры или функции локальную копию фактического параметра. Таким образом, при передаче в качестве открытых параметров-значений больших массивов следует учитывать возможное переполнение стека. При применении к открытому параметру-массиву стандартнаяфункция Low возвращает 0, стандартная функция High возвращает индекс последнего элемента в фактическом параметре-массиве, а функция SizeOf возвращает размер фактического параметра-массива. 2. Задача Коши — одна из основных задач теории дифференциальных уравнений (обыкновенных и с частными производными); состоит в нахождении решения (интеграла) дифференциального уравнения, удовлетворяющего так называемым начальным условиям (начальным данным). Задача Коши обычно возникает при анализе процессов, определяемых дифференциальным законом эволюции и начальным состоянием (математическим выражением которых и являются уравнение и начальное условие). Этим мотивируется терминология и выбор обозначений: начальные данные задаются при t=0, а решение отыскивается при t>0. От краевых задач задача Коши отличается тем, что область, в которой должно быть определено искомое решение, здесь заранее не указывается. Тем не менее, задачу Коши можно рассматривать как одну из краевых задач. Говорят, что задача Коши имеет единственное решение, если она имеет решение y=f(x) и никакое другое решение не отвечает интегральной кривой, которая в сколь угодно малой выколотой окрестности точки (x0,y0) имеет поле направлений, совпадающее с полем направлений y=f(x). Точка (x0,y0) задаёт начальные условия.
Методы Рунге-Кутты — важное семейство численных алгоритмов решения обыкновенных дифференциальных уравнений и их систем. Данные итеративные методы явного и неявного приближённого вычисления были разработаны около 1900 года немецкими математиками К. Рунге и М. В. Куттой. Вновь рассмотрим дифференциальное уравнение
с начальным условием Классический метод Рунге-Кутта 4-го порядка описывается следующей системой пяти равенств:
где Строго говоря, существует не один, а группа методов Рунге-Кутта, отличающихся друг от друга порядком, т.е. количеством параметров
Билет 13. 1.Строки в Паскале – это данные типа string. Они используются для хранения последовательностей символов. В Паскале длина стандартной строки ограничена 255 символами. Под каждый символ отводится по одному байту, в котором хранится код символа. Кроме того, каждая строка содержит еще дополнительный байт, в котором хранится длина строки.Если заранее известно, что длина строки будет меньше 255 символов, то программист может сам задать максимальную длину строки.Длина строки хранится в первом ее байте, индекс которого равен 0.Существует понятие пустой строки, т.е. строки, которая не имеет элементов. Пустая строка обозначается двумя рядом стоящими апострофами. Операции над строками Строки можно присваивать друг другу. Если максимальная длина переменной слева меньше длины присваиваемой строки, то лишние символы справа отбрасываются.Строки можно объединять с помощью операции конкатенации, которая обозначается знаком +. Строки можно сравнивать друг с другом с помощью операций отношения. При сравнении строки рассматриваются посимвольно слева направо, при этом сравниваются коды соответствующих пар символов. Строки равны, если они имеют одинаковую длину и посимвольно эквивалентны. В строках разной длины существующий символ всегда больше соответствующего ему отсутствующего символа. Меньшей будет та строка, у которой меньше код первого несовпадающего символа (вне зависимости от максимальных и текущих длин сравниваемых строк).Имя строки может использоваться в процедурах ввода-вывода. При вводе в строку считывается из входного потока количество символов, равное длине строки или меньшее, если символ перевода строки (который вводится нажатием клавиши Enter) встретится раньше. При выводе под строку отводится количество позиций, равное ее фактической длине. Можно осуществлять коррекцию любого символа строковой переменной, для чего в соответствующем операторе достаточно указать имя переменной типа string, вслед за которым в квадратных скобках задается номер ее элемента .Нулевой элемент строковой переменной можно корректировать. При этом будет изменяться текущая длина строки. 2.Численное интегрирование— вычисление значения определённого интеграла (как правило, приближённое). Под численным интегрированием понимают набор численных методов для нахождения значения определённого интеграла. Численное интегрирование применяется, когда: 1.Сама подынтегральная функция не задана аналитически. Например, она представлена в виде таблицы (массива) значений в узлах некоторой расчётной сетки. 2.Аналитическое представление подынтегральной функции известно, но её первообразная не выражается через аналитические функции. Например, Квадратурные формулы Формулы прямоугольников являются наиболее простыми квадратурными формулами. 1. 2. 3.
Формула трапеций. Формула Симпсона . Формула Ньютона. Билет14. 1.Если в программе возникает необходимость неоднократного выполнения некоторых операторов, то для этого используются операторы повтора(цикла). В языке Паскаль различают три вида операторов цикла: цикл с предусловием (while), цикл с постусловием (repeat) и цикл с параметром (for). Если число требуемых повторений заранее известно, то используется оператор, называемый оператором цикла с параметром. Оператор цикла с параметром имеет два варианта записи: 1)for<имя переменной> := <начальное значение>to<конечное значение>do <тело цикла> 2)for<имя переменной> := <начальное значение>downto<конечное значение>do <тело цикла> Если число повторений заранее неизвестно, а задано лишь условие его повторения (или окончания), то используются операторы while и repeat.Оператор While часто называют оператором цикла с предусловием. Так как проверка условия выполнения цикла производится в самом начале оператора. 2.Интерполяцио́нный многочле́н Лагра́нжа—многочлен минимальной степени, принимающий данные значения в данном наборе точек. Для n+1 пар чисел (x0,y0), (x1,y1),…, (xn,yn), где все xj различны, существует единственный многочлен L(x) степени не более n, для которого L(xj) = yj. В простейшем случае (n=1) — это линейный многочлен, график которого — прямая, проходящая через две заданные точки. Лагранж предложил способ вычисления таких многочленов: где базисные полиномы определяются по формуле: li(x) обладают следующими свойствами: ·являются многочленами степени n ·li(xi) = 1 ·li(xj) = 0 при j ≠ i Отсюда следует, что L(x), как линейная комбинация li(x), может иметь степень не больше n, и L(xi) = yi. Практическая оценка погрешности интерполяции по результатам численного эксперимента.В случае, когда интерполируемая функция является результатом численного решения некоторой задачи, вся информация об искомой функции исчерпывается ее значениями в узловых точках. Задача интерполяции при этом является некорректной, поскольку может существовать сколько угодно функций, графики которых проходят через точки. То есть, решение задачи может быть получено только с точностью до произвольной аддитивной составляющей, имеющей нулевые значения во всех заданных узловых точках. В оправдание этого можно сказать, что если сетка выбирается произвольно, то существование функции, равной нулю именно в узловых точках этой сетки, маловероятно. Можно также указать разные способы использования нескольких сеток для повышения надежности получаемых результатов. 15. 1) 2) Основная идея метода. Может оказаться, что система Ax=f (1) имеет единственное решение, хотя какой-либо из угловых миноров матрицы А равен нулю. В этом случае обычный метод Гаусса оказывается непригодным, но может быть применен метод Гаусса с выбором главного элемента. Основная идея метода состоит в том, чтобы на очередном шаге исключать не следующее по номеру неизвестное, а то неизвестное, коэффициент при котором является наибольшим по модулю. Таким образом, в качестве ведущего элемента здесь выбирается главный, т.е. наибольший по модулю элемент. Тем самым, если , то в процессе вычислений не будет происходить деление на нуль. Процесс решения системы линейных уравнений Прямой ход Система приводится к треугольному виду. 1. Предполагаем, что
2. В предположении, что 3. Получаем систему уравнений с треугольной матрицей: Обратный ход 1. Из 2. Из
16. 1) Вычисляется значение логического выражения, если вычисленное значение истинно, то выполняется оператор OP1в противном случаеOP2. После выполнения операторов OP1илиOP2выполняется оператор, следующий за условным оператором. Пример записи условного операторы: If (x<0) and (x>-1) then y:=cos(x) else y:=sin(x); Оператор Case заміняє велику кількість написань умови If.Він використовується для того, щоб скоротити час на написання великої кількості умови if, а також для того, щоб програмний код виглядав красивіше. Наприклад: fori:=1 tolength(a) do casea[i] of 'a','A','e','E','i','I','o','O': begink:=k+1; end; Він заміняє дії If a[i]:=a then k:=k+1; If a[i]:=e then k:=k+1; If a[i]:=i then k:=k+1; If a[i]:=A then k:=k+1; If a[i]:=E then k:=k+1; If a[i]:=I then k:=k+1; Дана програма перевіряє наявність у строках букв російського алфавіту (програма 17 варіанту). Наскільки коротшим і красивішим став запис програми. 2) Модуль Graph содержит богатейший набор графических процедур и функций: проведение линий, работа с цветом, вызов графических примитивов, работа с текстом в графическом режиме, закраска замкнутых областей и т.п. Экран в графическом режиме рассматривается как набор пикселей. В нем используются некоторые стандартне действия и команды. Использование detect позволяет определить тип графического драйвера автоматически. Запуск графического режима выполняется с помощью процедуры initgraph. После этого на экране должно появиться окно, «работающее» в графическом режиме. Процедура setcolor устанавливает цвет, которым в дальнейшем будут выводиться различные примитивы. Процедура line выводит линию. Первые два числа – это одна координата, а третье и четвертое число – другая. Процедура putpixel рисует точки. Помимо координаты она принимает третий аргумент – цвет точки. И другие 17. 1) Самой распространенной структурой, реализованной практически во всех языках программирования, является массив. Массивы состоят из ограниченного числа компонент, причем все компоненты массива имеют один и тот же тип, называемый базовым. Структура массива всегда однородна. Массив может состоять из элементов типа integer , real или char , либо других однотипных элементов. Из этого, правда, не следует делать вывод, что компоненты массива могут иметь только скалярный тип. Другая особенность массива состоит в том, что к любой его компоненте можно обращаться произвольным образом. Что это значит? Программа может сразу получить нужный ей элемент по его порядковому номеру (индексу). Удаление элемента Добавления элемента
Циклический сдвиг For i:=1 to n do P:=a[1]; For i:=1 to n-1 do A[i]:=a[i+1]; A[n]:=p; End. 2) Метод конечных разностей — численный метод решения дифференциальных уравнений, основанный на замене производных разностными схемами. Является сеточным методом. Для решения эллиптической задачи методом конечных разностей на расчётной области строится сетка, затем выбирается разностная схема и для каждого узла сетки записывается разностное уравнение (аналог исходного уравнения, но с использованием разностной схемы), затем производится учёт краевых условий (для краевых условий второго и третьего рода так же строится некоторая разностная схема). Получается система линейных алгебраических уравнений, решая которую в ответе получают приближенные значения решения в узлах. Главной проблемой метода является построение правильной разностной схемы, которая будет сходится к решению. Построение схемы выполняется исходя из свойств исходного дифференциального оператора. Пример: Пусть дана одномерная эллиптическая задача:
Билет №18
1 . Рассмотрим многомерные массивы в Паскале. Например, двухмерный массив можно объявить таким образом: Var X1: array [1..10] of array [1..5] of integer; Этот оператор описывает двухмерный массив, который можно представить себе как таблицу, которая состоит из 10 строк и 5 столбцов. Также это можно объявить более компактно: VarX1:[1..10,1..5] ofinteger; Обычно используется именно такая форма объявления многомерных массивов. Как и в одномерных массивах, элементы и индексы могут иметь любой тип. Доступ к значениям элементов многомерного массива осуществляется через индексы, которые перечисляются через запятую. Например, X1[3,4] – значение элемента, лежащего на пересечении третьей строки и четвертого столбца.
Передача параметров-массивов в процедуры.
- если перед параметром указано var , то значение параметра будет меняться, если нет - не будет.
А затем в параметрах процедуры использовать этот тип:
Билет №19
В языке Паскаль имеется два вида подпрограмм - процедуры и функции. Процедуры и функции помещаются в раздел описаний программы. Для обмена информацией между процедурами и функциями и другими блоками программы существует механизмвходных и выходных параметров. Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными - передающиеся из подрограммы в вызывающий блок (результаты работы подпрограммы). Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове - фактическими.
Описание и вызов процедур и функций Структура описания процедур и функций до некоторой степени похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, перменных. Исполняемая часть содержит собственно операторы процедур. Формат описания процедуры имеет вид: procedure имя процедуры (формальные параметры); раздел описаний процедуры begin
исполняемая часть процедуры
end; Формат описания функции: function имя функции (формальные параметры):тип результата; раздел описаний функции begin
исполняемая часть функции
end; Формальные параметры в заголовке процедур и функций записываются в виде: var имя праметра: имя типа и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать. Вызов процедуры производится оператором, имеющим следующий формат: имя процедуры(список фактических параметров); Список фактических параметров - это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части. Вызов функции в Турбо Паскаль может производиться аналогичным способом, кроме того имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д. Для передачи в вызывающий блок выходного значения функции в исполняемой части функции перед возвратом в вызывающий блок необходимо поместить следующую команду: имя функции := результат; При вызове процедур и функций необходимо соблюдать следущие правила: количество фактических параметров должно совпадать с количеством формальных; соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу. Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти. Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее. Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел. var x,y,m,n: integer;
procedure MaxNumber(a,b: integer; var max: integer); begin if a>b then max:=a else max:=b; end;
begin write('Введите x,y '); readln(x,y); MaxNumber(x,y,m); MaxNumber(2,x+y,n); writeln('m=',m,'n=',n); end. Аналогичную задачу, но уже с использованием функций, можно решить так: var x,y,m,n: integer;
function MaxNumber(a,b: integer): integer; var max: integer; begin if a>b then max:=a else max:=b; MaxNumber := max; end;
begin write('Введите x,y '); readln(x,y); m := MaxNumber(x,y); n := MaxNumber(2,x+y); writeln('m=',m,'n=',n); end. Передача Параметры служат для обмена данными между вызывающим блоком и подпрограммой. Передаваемые в подпрограмму данные записываются в отдельную область памяти, называемую стеком, доступную только для данной подпрограммы. В связи с этим, данные из стека не могут быть доступны вызывающей программе. Чтобы данные, которые обрабатывала подпрограмма, могли быть использованы в вызывающей программе, они остаются в области памяти, отведенной вызывающей программе, а в стек записываются их адреса. Для использования этих двух способов доступа подпрограммы к данным, в языке Паскаль существуют различные типы формальных параметров (см. рис.5.5): · Параметры-значения; · Параметры-переменные; · Параметры-константы.
Параметры-значения переписываются в стек целиком. Такой способ позволяет использовать в качестве фактического параметра не только переменную, но и константу. Параметры-значения используются в качестве входных данных подпрограммы, при обращении к которой фактические параметры просто передают свое значение формальным переменным и больше не изменяются. Использование таких параметров особенно характерно для подпрограмм-функций. При использовании параметров-переменных, в стек записывается не значение переменной, а адрес места памяти, которое под нее отведено. В отличие от параметров-значений, перед описанием формальных параметров-переменных в заголовке подпрограммы ставится служебное слово var. С помощью параметров-переменных в вызывающий блок можно вернуть не одно вычисленное значение, а несколько. Т.о. параметры-переменные могут использоваться и в качестве входных данных, так и в качестве выходных. В связи с описанными особенностями параметров-переменных, фактические параметры-переменные, в отличие от параметров-значений (см.п.5.5., таблица 5.1.), не могут быть константами или выражениями. Параметры-константы передаются в подпрограмму, как и параметры-переменные, с помощью адреса, однако, на их изменение в подпрограмме наложен запрет. Такая передача данных позволяет экономить память стека. При описании формального параметра-константы перед его именем ставится служебное слово const. Таким образом, параметры-значения и параметры-константы используются только для передачи конкретных значений в подпрограмму. При этом основная программа защищена от опасности случайной порчи значений каких-нибудь переменных (побочных эффектов), так как из подпрограммы переданные значения не возвращаются. В случае, если нужно вернуть из подпрограммы рассчитанные в ней несколько значений, необходимо использовать параметры-переменные, значения таких параметров в вызывающую программу возвращаются. С помощью параметров-переменных можно одновременно передавать значения в подпрограмму и возвращать обратно.
Билет №20 1 Оператор присваивания - основной оператор любого языка программирования. Общая форма записи оператора: имя величины := выражение Например, V:=A; или V:=A+1; При помощи оператора присваивания переменной могут присваиваться константы и выражения, значения переменных любого типа. Как только в программе встречается переменная, для неё в памяти отводится место. Оператор присваивания помещает значение выражения в место, отведённое переменной. Если в процессе выполнения программы встречается переприсваивание (т.е. та же самая переменная принимает другое значение), то старое значение переменной стирается, на свободное место записывается новое значение. Команда присваивания позволяет лучше понять смысл слова переменная (т.е. меняющая своё значение по ходу программы). Выражение может быть арифметическим, логическим или литерным. Важно, чтобы тип величины был согласован с видом выражения.
Процедура BREAK применяется для досрочного прекращения циклов WHILE, REPEAT…UNTIL и FOR. Процедура EXIT завершает работу своего программного блока. Если EXIT вызывается внутри процедуры или функции, то их работа завершается. Если EXIT вызывается в основном блоке программы, то это приводит к ее завершению. Процедура HALT, или более полно HALT(n), завершает работу программы с кодом завершения n. Этот код впоследствии может быть проанализирован, в частности командой IF ERRORLEVEL в среде MS-DOS. Значение ERRORLEVEL после остановки программы будет равно значению n. Вызов процедуры HALT без параметра эквивалентен вызову HALT(0).
2 для метода средних прямоугольников:
Общая формула Симпсона (параболическая формула) Пусть n=2m есть четное число и yi=f(xi) (i=0 1 2...n) - значения функции y=f(x) для равноотстоящих точек а=x0 x1 ... xn=b с шагом Квадратурная формула Чебышева
![]() |