- •1.Информатика как предмет. Основные направления и научные формирования.
- •2.Понатие алгоритма и его свойства. Пример – алгоритм перемножения двух целых чисел.
- •3.Средства описания алгоритмов. Примеры.
- •4. Языки программирования
- •5.Кодирование данных двоичным кодом.
- •6.Язык Паскаль. Типы данных в языке Паскаль.
- •7.Стандартные функции языка Паскаль
- •9.Основные операторы Паскаля и типовая структура Паскаль – программы.
- •10. Разветвляющиеся алгоритмы. Условные операторы в Паскале
- •11.Циклические алгоритмы. Оператор цикла с параметром.
- •12.Циклические алгоритмы. Оператор цикла с предусловием.
- •13.Циклические алгоритмы. Оператор цикла с постусловием
- •14.Массивы в Паскале. Основные алгоритмы обработки одномерных массивов.
- •15.Ввод и вывод массивов через файлы. Пример – вывод в файл двух матриц рядом.
- •16. Подпрограмма – функция. Пример: возведение вещественного числа в целочисленную степень.
- •17.Подпрограмма-процедура. Пример – решение треугольной слау.
- •18.Параметры-значения и параметры-переменные.
- •19.Метод половинного деления
- •20.Алгоритм метода половинного деления.
- •21.Метод простой итерации для поиска корней. Геометрическая интерпретация.
- •22. Приведение уравнения к виду, пригодному для применения метода итераций.
- •23.Общая оценка погрешности приближения к корню.
- •24.Оценка погрешности приближения в методе простой итерации.
- •25. Метод Ньютона
- •26.Модификация метода Ньютона и оценки погрешности приближения.
- •27.Метод хорд и оценка погрешности приближения в методе хорд.
- •28.Понятие нормы. Нормы векторов в конечномерном пространстве.
- •29. Нормы матриц. Согласованность и подчиненность норм.
- •31. Метод прогонки для решения систем линейных алгебраических уравнений.
- •32. Метод простой итерации для решения систем линейных алгебраических уравнений
- •33.Сходимость последовательности векторов и матричной прогрессии
- •34.Сходимость Метода Простых Итераций для решения систем линейных уравнений.
- •35.Оценки погрешности метода простой итерации для решения систем линейных алгебраических уравнений.
- •36.Метод Зейделя для решения систем линейных алгебраических уравнений.
- •37. Приведение метода Зейделя к методу простой итерации.
- •38. Метод последовательной внешней (верхней) релаксации
- •39.Постановка задачи интерполирования.
- •40.Алгебраическое интерполирование
- •42.Свернутая форма полинома Лагранжа.
- •43. Погрешность алгебраического интерполирования.
- •44.Интерполирование сплайнами
- •45.Метод наименьших квадратов .
Глобальными называются переменные, объявленные в основной программе и доступные как программе, так и всем ее подпрограммам.
Локальными называются переменные, объявленные внутри подпрограммы и доступные только ей самой.
Обмен информацией между основной программой и подпрограммой может осуществляться только с помощью глобальных переменных и с помощью параметров подпрограммы.
Подпрограмма может использовать любые глобальные переменные кроме тех, которые имеют те же имена, что и ее локальные переменные. Если в подпрограмме описана локальная переменная, имя которой совпадает с именем некоторой глобальной переменной (коллизия переменных) , то данная глобальная переменная становится недоступной в этой подпрограмме, и при указании идентификатора переменной произойдет обращение к локальной переменой подпрограммы, а не одноименной глобальной переменной. Память для локальных (т.е. описанных в подпрограмме) переменных выделяется на время исполнения данной подпрограммы в специальной области, называемой стеком. При завершении работы подпрограммы память освобождается, поэтому все внутренние результаты работы подпрограммы не сохраняются от одного обращения к другому.
Procedure <имя процедуры>(список формальных параметров : их тип);
Var (локальные переменные)
begin
<раздел операторов>
end; {procedure}
Процедура вызывается по имени:
<имя процедуры> (фактические параметры);
- в отличие от функции, не надо присваивать результат (power:=res;)
Например:
Procedure express (a, b, c : real; var x, y:real);
Var
z : real;
begin
z:=a+ b+ c;
x:=sqr(z);
y:=sqrt(z);
end ; {procedure}
Эту процедуру можно вызвать следующим образом:
Express (7.6, 6.8, 9.5, x1, x2);
Решение треугольной СЛАУ
Наиболее известным и популярным точным способом решения систем линейных алгебраических уравнений (СЛАУ) является метод Гаусса. Этот метод заключается в последовательном исключении неизвестных. Пусть в системе уравнений
первый элемент a11(0) не равен 0. Назовем его ведущим элементом первой строки. Поделим все элементы этой строки на a11(0) и исключим x1 из всех последующих строк, начиная со второй, путем вычитания первой (преобразованной), умноженной на коэффициент при x1 в соответствующей строке. Получим
Если a22(1), то, продолжая аналогичное исключение, приходим к системе уравнений с верхней треугольной матрицей
Из нее в обратном порядке находим все значения xi:
Процесс приведения к системе с треугольной матрицей называется прямым ходом, а нахождения неизвестных - обратным. Если один из ведущих элементов равен нулю, изложенный алгоритм метода Гаусса неприменим. Тем не менее, для нормальной матрицы с ненулевым определителем всегда возможна такая перестановка уравнений, что на главной диагонали не будет нулей. В приведенном коде для простоты перестановок не делается, зато делается проверка решения, а прямой и обратный ход для наглядности вынесены в отдельные подпрограммы.
18.Параметры-значения и параметры-переменные.
Параметры-значения. Если в качестве формального параметра указана переменная, то такой параметр и есть параметр-значение. Примерами таких параметров служат параметры a, b и с в процедуре sq:36
procedure sq((a, b, c: real; var x1, x2: real); Для параметров-значений машина при вызове процедур выделяет место в памяти для каждого параметра, вычисляет значение, записывает его в ячейку, соответствующую формальному параметру.
Если фактический параметр есть имя переменной, например, r, то значение этой переменной пересылается в соответствующий формальный параметр, например, a. На этом всякая связь между a и r обрывается. Если даже фактический и формальный параметры одинаково обозначены, в памяти ЭВМ эти параметры занимают разные ячейки. Это полезно знать, чтобы не допустить распространенной среди начинающих программистов ошибки – пытаться передать информацию из процедуры в вызывающую программу через параметр-значение.
Пример.
var
i: integer;
procedure p(i: integer);
begin
i := i * 2
end;
begin
i := 2;
p(i);
writeln(' i = ', i);
readln
end.
В программе происходит засылка числа 2 в ячейку, отведенную для переменной i, затем идет обращение к процедуре p с фактическим параметром i = 2. При этом значение 2 пересылается в другую ячейку, отведенную для формального параметра i. В этой ячейке после выполнения оператора i := i * 2 появляется число 4. Но после возврата из процедуры на оператор writeln программа "знает" только одну переменную i, которая по-прежнему содержит число 2. Поэтому программа выведет i = 2. Если формальный параметр есть параметр-значение, то соответствующим фактическим параметром должно быть выражение того же типа, что и формальный параметр.
Параметры-переменные. Если перед именем формального параметра стоит ключевое слово var, то такой параметр есть параметр-переменная. Примерами таких параметров служат x1 и x2 в заголовке
procedure sq(a, b, c: real; var x1, x2: real); Фактический параметр, соответствующий параметру-переменной, может быть только переменной (не константой и не выражением). При вызове процедур (функций) параметры-переменные обрабатываются так: для формального параметра используется именно та ячейка, которая содержит соответствующий фактический параметр.
Пример. При вызове процедуры sq оператором sq(p, q, r, y, z) для переменных x1 и x2 используются непосредственно те ячейки, которые отведены для y и z. Поэтому оператор присваивания x1 := (-b + sqrt(d)) / (2 * a) засылает полученное значение в y.
Под формальные и фактические параметры-значения транслятор отводит разные области памяти. Поэтому результат выполнения процедуры может быть передан только через параметр-переменную.
var
a, b: integer;
procedure h(x: integer; var y: integer);
begin
x := x + 1;
y := y + 1;
writeln(x, y)
end;
begin
a := 0;
b := 0;
h(a, b);
writeln(a, b);
readln
end.
Результаты, выдаваемые процедурой h – 11; основная ветка программы выводит 01.
Разберем этот пример: фактический параметр a соответствует формальному параметру-значению x, а фактический параметр b – формальному параметру-переменной y. Под параметры a и x отведены две разные ячейки памяти, а под b и y – одна и та же ячейка. При обращении к h(a, b) из ячейки a пересылается значение 0 в ячейку x, а в ячейку y засылается адрес ячейки b, содержащей 0, т.к. в процедуре h параметр x – это параметр-значение, а y – параметр-переменная.
При выполнении оператора x := x + 1 в ячейку x прибавляется 1 и в ячейке x окажется 1, а в ячейке a по-прежнему 0.
Выполнение оператора y := y + 1 имеет следующий смысл: «взять число из ячейки, адрес которой находится в y (т.е. из ячейки b), прибавить 1 и заслать в ту же ячейку (т.е. в b)». Поэтому в результате выполнения оператора y := y + 1 значение ячейки b станет 1. Оператор печати из процедуры выдаст содержимое ячейки x и ячейки y, т.е. 1 и 1. Оператор печати в программе напечатает содержимое a, которое осталось равным 0, и содержимое ячейки b, которое теперь равно 1.
Процедуры в Паскале допускают рекурсию, т.е. процедура может вызвать сама себя.
Если в процедуре p есть обращение к процедуре q, описанной ниже, то перед описанием p процедура q декларируется как forward: после заголовка процедуры q ставится двоеточие, а затем ключевое словоforward. В этом случае параметры процедуры описываются только в операторе с forward. В заголовке самой процедуры параметры опускаются.
Пример.
procedure q(x: t1): forward;
procedure p(x: y);
begin
q(a)
end;
procedure q;
begin
p(b)
end;