Лабораторная работа #1 (Лабораторные работы)

Описание файла

Файл "Лабораторная работа #1" внутри архива находится в папке "Лабораторные работы". Текстовый-файл из архива "Лабораторные работы", который расположен в категории "лабораторные работы". Всё это находится в предмете "вычислительная гидрогазодинамика (численные методы мжг)" из девятого семестра, которые можно найти в файловом архиве МГТУ им. Баумана. Не смотря на прямую связь этого архива с МГТУ им. Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "вычислительная гидрогазодинамика (численные методы мжг)" в общих файлах.

Просмотр текстового-файла онлайн

Возможно не удалось распознать кодировку файла

Лабораторная работа №1

Основы синтаксиса и структура программы

Целью данной лабораторной работы является возобновление базовых навыков программирования в их приложении к реализации численных методов. Учащиеся, уверенно чувствующие себя при работе с компилятором, могут пропустить первую часть и сразу выполнять задание раздела «Структура программы».

Основы синтаксиса

1. Напомним структуру программы на языке pascal:

// Комментарии к программе начинаются с двух слешей

{ Либо обрамляются фигурными скобками }

program hellocfd;

const

// После ключевого слова задаются константы.

k = 1.41;

var

// После ключевого слова задаются переменные

i,j: integer; // Целый тип

r: real; // Вещественный тип

b: boolean; // Логический тип

function name_of_function(x,y:real):real;

begin

// Текст функции

end;

begin

// Здесь располагается основной текст программы

end.

Рассмотрите предложенный код и обратите внимание на следующие аспекты синтаксиса:

- строчки кода, как правило, заканчиваются знаком «точка с запятой»;

- компилятор не различает строчное и заглавное написание букв;

- разделителем целой и дробной части числа является точка;

- использование отступов не является необходимым для работы программы, но считается хорошим тоном программирования, облегчающим чтение кода.

2. Наберите или скопируйте в окно программы следующий код:

program hellocfd;

var

i: integer;

r: real;

begin

i:=1;

r:=3.14;

write('i = ');

writeln(i);

write('r = ');

writeln(r);

i:=i+2;

write('i = ');

writeln(i);

readln;

end.

Нажмите кнопку f9 и запустите тем самым программу на компиляцию и выполнение. Программа должна выдать следующий результат и приостановиться в ожидании нажатия кнопки enter пользователем.

i = 1

r = 3.140000e+00

i = 3

Минизадание

Модифицируйте данный код: определите третью переменную x и задайте ее как произведение i и r. Выведите ее значение на экран.

3. Определение параметров системы сводится к выделению машинной памяти на хранение известных и искомых параметров рассматриваемой системы. На языках программирования высокого уровня для этого используются динамические и статические массивы. Статический массив (т.е. массив, размер которого задается фиксировано на момент компиляции программы) может быть задан следующим образом:

p: array[1..100] of real;

Обращение к элементам массива осуществляется как

p[i]

где i – целое число (в данном случае от 1 до 100), обозначающее порядковый номер элемента массива.

Как правило, даже при использовании статических массивов их размер задается косвенным образом, используя предварительное задание размера в константах, что облегчает отладку и модификацию программы в будущем:

const

p_n = 100;

var

p: array[1..p_n] of real;

Динамический массив, т.е. массив, размер которого может меняться в процессе работы программы, задается следующим образом:

p: array of real;

После чего в теле программы должен быть задан размер массива:

setlength(p, 100);

При этом первая ячейка массива будет иметь индекс 0, а последняя – 99. Перед завершением программы необходимо освободить память, занятую массивом, установкой его длины в 0:

setlength(p, 0);

Наберите или скопируйте в окно программы следующий код:

program hellocfd;

const

p_n = 5;

var

p_dyn: array of real;

p_st: array[1..p_n] of real;

begin

writeln('Динамический массив:');

setlength(p_dyn, p_n);

p_dyn[0]:=1;

p_dyn[1]:=2;

p_dyn[2]:=3;

p_dyn[3]:=4;

writeln(p_dyn[0], p_dyn[1], p_dyn[2], p_dyn[3], p_dyn[4]);

setlength(p_dyn, 0);

writeln('Статический массив:');

p_st[1]:=1;

p_st[2]:=2;

p_st[3]:=3;

p_st[4]:=4;

writeln(p_st[1]:6:2, p_st[2]:6:2, p_st[3]:6:2, p_st[4]:6:2, p_st[5]:6:2);

readln;

end.

Запустите программу с помощью кнопки f9. Обратите внимание на содержимое последней ячейки каждого из массивов – это значение не было задано. В зависимости от компилятора и его настроек оно может как заполняться нулями, так и иметь совершенно случайное значение, меняющееся от запуска к запуску. Поэтому все используемые массивы должны быть в обязательном порядке инициализированы перед использованием (т.е. каждая ячейка должна быть явно заполнена требуемым значением).

Минизадание

Модифицируйте данный код: объявите третий массив q, инициализируйте его как почленное произведение массивов p_dyn и p_st и выведите на экран.

4. Смысл использования массивов сводится к возможности обращаться к их элементам по порядковому номеру, поэтому обработка массивов практически всегда выполняется внутри циклов.

В языке паскаль присутствуют циклы трех типов:

for i:={} to {} do

begin

end;

while {условие, цикл повторяется пока оно верно} do

begin

end;

repeat

until {условие, цикл повторяется, пока условие не выполнится};

Выбор типа цикла обуславливается ситуацией и привычками программиста, во многих случаях один и тот же алгоритм может быть реализован различным способом.

Наберите или скопируйте в окно программы следующий код:

program hellocfd;

const p_n = 10;

var

i: integer;

p: array[1..p_n] of real;

begin

for i:=1 to p_n do

begin

p[i]:=i*i;

end;

for i:=1 to p_n do

begin

write(' p[',i:3, ']');

end;

writeln;

for i:=1 to p_n do

begin

write(p[i]:7:2);

end;

writeln;

i:=1;

while (p[i]<50) do

begin

p[i]:=-p[i]/2;

i:=i+1;

end;

for i:=1 to p_n do

begin

write(p[i]:7:2);

end;

readln;

end.

Запустите код. Программа должна выдать следующий результат:

p[ 1] p[ 2] p[ 3] p[ 4] p[ 5] p[ 6] p[ 7] p[ 8] p[ 9] p[ 10]

1.00 4.00 9.00 16.00 25.00 36.00 49.00 64.00 81.00 100.00

-0.50 -2.00 -4.50 -8.00 -12.50 -18.00 -24.50 64.00 81.00 100.00

Минизадание

Модифицируйте данный код:

- Замените цикл while на цикл repeat.

- Удалите операторные скобки begin и end там, где это не влияет на работоспособность программы.

- Добавьте еще один цикл, увеличивающий значение каждой ячейки массива p на единицу. Выведите полученный результат.

5. Повторяющиеся и однотипные участки алгоритма принято оформлять в виде функций и процедур, что уменьшает размер кода, улучшает его читаемость и легкость модификации. На языке pascal функции описываются следующим образом:

function name_of_function(x,y:real):real;

begin

// Текст функции

name_of_function:=x+y;

end;

Данный текст помещается после блока переменных. Вызов функции выполняется по ее имени с указанием фактических переменных, передаваемых в функцию:

sum:= name_of_function(1,2);

Процедура описывается аналогично:

procedure name_of_procedure (x,y:real);

Важным аспектом является способ передачи величин внутрь функции или процедуры. В случае если она выполняется так, как указано выше, происходит передача «по значению», соответственно передаваемые переменные не изменяют своих значений в основной программе, чтобы ни происходило внутри подпрограммы. Если же перед переменными стоит ключевое слово var:

procedure name_of_procedure (var x,y:real);

Все изменения переменных x и y внутри процедуры будут сохранены.

Минизадание

В вышерассмотренной программе вынесите код, выполняющий печать содержимого массива p в отдельную процедуру.

Подсказка: не указывайте значения размера массива при описании формальной переменной процедуры.

6. Ветвление алгоритма программы обеспечивается с помощью условного оператора:

if {условие, т.е. логическая переменная} then begin

// Команды, если условие выполняется

end

else begin

// Команды, если условие неверно

end;

Обратите внимание, что перед ключевым словом else точка с запятой не ставится.

Наберите или скопируйте следующий код:

program hellocfd;

var a, b: real;

begin