Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пограммирование экзамен.docx
Скачиваний:
3
Добавлен:
20.05.2015
Размер:
359.54 Кб
Скачать

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 года немецкими математиками К. Рунге и М. В. Куттой.

Вновь рассмотрим дифференциальное уравнение

(1)

с начальным условием

Классический метод Рунге-Кутта 4-го порядка описывается следующей системой пяти равенств:

(5)

где

Строго говоря, существует не один, а группа методов Рунге-Кутта, отличающихся друг от друга порядком, т.е. количеством параметров. В данном случае мы имеем метод 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) имеет единственное решение, хотя какой-либо из угловых миноров матрицы А равен нулю. В этом случае обычный метод Гаусса оказывается непригодным, но может быть применен метод Гаусса с выбором главного элемента. Основная идея метода состоит в том, чтобы на очередном шаге исключать не следующее по номеру неизвестное, а то неизвестное, коэффициент при котором является наибольшим по модулю. Таким образом, в качестве ведущего элемента здесь выбирается главный, т.е. наибольший по модулю элемент. Тем самым, если , то в процессе вычислений не будет происходить деление на нуль.

Процесс решения системы линейных уравнений по методу Гаусса состоит из 2х этапов:

Прямой ход

Система приводится к треугольному виду.

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

(2)

2. В предположении, что , делим второе уравнение на коэффициенти исключаем неизвестноеиз всех последующих уравнений и т.д.

3. Получаем систему уравнений с треугольной матрицей:

Обратный ход

1. Из го уравнения системы(3) определяем 

2. Из го - определяеми т.д.

16.

1)  Вычисляется значение логического выражения, если вычисленное значение истинно, то выполняется оператор OP1 в противном случаеOP2. После выполнения операторов OP1 или OP2 выполняется оператор, следующий за условным оператором. Пример записи условного операторы: If  (x<0) and (x>-1) then y:=cos(x) else y:=sin(x);

Оператор Case заміняє велику кількість написань умови If. Він використовується для того, щоб скоротити час на написання великої кількості умови if, а також для того, щоб програмний код виглядав красивіше. Наприклад:

for i:=1 to length(a) do

case a[i] of

'a','A','e','E','i','I','o','O': begin k:=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 , то значение параметра будет меняться, если нет - не будет. Чтобы передать массив лучше перед разделом описания переменных объявить тип. Например:

Type mas = array [1..10] of byte;

А затем в параметрах процедуры использовать этот тип:

procedure pr(a: integer; var b: mas)

2 .

Все эти методы котрые мы делали на парах, я так понял

3 .

(только повозиться и вместо звёзочек и доветочий, написать каждую букву алфавита и каждую цифру)

Дана строка. Определить, сколько в ней символов: - звездочка; - точка с запятой; - двоеточие.

ответить

вс, 02/24/2013 - 18:21 — Гость

Программа

uses

crt;

 

var

stroka: string;

z, d, tsz, i: integer;

 

begin

write('Vvedite stroku: ');

readln(stroka);

z := 0; d := 0; tsz := 0;

for i := 1 to length(stroka) do

case stroka[i] of

'*': z := z + 1;

':': d := d + 1;

';': tsz := tsz + 1;

end;

writeln('Kolichestvo (* : ;) sootvetstvenno: ', z, ' ', d, ' ', tsz);

end.

Билет №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 с шагом

 Квадратурная формула Чебышева