Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Лабораторная работа #1. Основы синтаксиса

Лабораторная работа #1. Основы синтаксиса (Лабораторные работы)

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

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

Просмотр PDF-файла онлайн

Текст из PDF

Лабораторная работа №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.Рассмотрите предложенный код и обратите внимание на следующиеаспекты синтаксиса:- строчки кода, как правило, заканчиваются знаком «точка с запятой»;- компилятор не различает строчное и заглавное написание букв;- разделителем целой и дробной части числа является точка;- использование отступов не является необходимым для работыпрограммы, но считается хорошим тоном программирования, облегчающимчтение кода.42.

Наберите или скопируйте в окно программы следующий код:Program HelloCFD;vari: integer;R: real;Begini:=1;R:=3.14;write('i = ');writeln(i);write('R = ');writeln(R);i:=i+2;write('i = ');writeln(i);readln;End.Нажмите кнопку F9 и запустите тем самым программу на компиляциюи выполнение.Программа должнавыдать следующий результат иприостановиться в ожидании нажатия кнопки Enter пользователем.i = 1R = 3.140000E+00i = 3МинизаданиеМодифицируйте данный код: определите третью переменную x изадайте ее как произведение i и R. Выведите ее значение на экран.3.

Определение параметров системы сводится к выделению машиннойпамяти на хранение известных и искомых параметров рассматриваемойсистемы. На языках программирования высокого уровня для этогоиспользуются динамические и статические массивы. Статический массив(т.е. массив, размер которого задается фиксировано на момент компиляциипрограммы) может быть задан следующим образом:p: array[1..100] of real;Обращение к элементам массива осуществляется какp[i]5где i – целое число (в данном случае от 1 до 100), обозначающеепорядковый номер элемента массива.Как правило, даже при использовании статических массивов их размерзадается косвенным образом, используя предварительное задание размера вконстантах, что облегчает отладку и модификацию программы в будущем:constp_n = 100;varp: array[1..p_n] of real;Динамический массив, т.е.

массив, размер которого может меняться впроцессе работы программы, задается следующим образом:p: array of real;После чего в теле программы должен быть задан размер массива:SetLength(p, 100);При этом первая ячейка массива будет иметь индекс 0, а последняя –99. Перед завершением программы необходимо освободить память, занятуюмассивом, установкой его длины в 0:SetLength(p, 0);Наберите или скопируйте в окно программы следующий код:Program HelloCFD;constp_n = 5;varp_dyn: array of real;p_st: array[1..p_n] of real;BeginWriteln('Динамический массив:');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;6p_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 {} dobeginend;while {условие, цикл повторяется пока оно верно} dobeginend;repeatuntil {условие, цикл повторяется, пока условие невыполнится};7Выбортипациклаобуславливаетсяситуациейипривычкамипрограммиста, во многих случаях один и тот же алгоритм может бытьреализован различным способом.Наберите или скопируйте в окно программы следующий код:Program HelloCFD;const p_n = 10;vari: integer;p: array[1..p_n] of real;Beginfor i:=1 to p_n dobeginp[i]:=i*i;end;for i:=1 to p_n dobeginWrite(' p[',i:3, ']');end;Writeln;for i:=1 to p_n dobeginWrite(p[i]:7:2);end;Writeln;i:=1;while (p[i]<50) dobeginp[i]:=-p[i]/2;i:=i+1;end;for i:=1 to p_n dobeginWrite(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.004.009.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.8- Удалите операторные скобки 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 внутри процедуры будут сохранены.9МинизаданиеВ вышерассмотренной программе вынесите код, выполняющий печатьсодержимого массива p в отдельную процедуру.Подсказка: не указывайте значения размера массива при описанииформальной переменной процедуры.6. Ветвление алгоритма программы обеспечивается с помощьюусловного оператора:if {условие, т.е.

логическая переменная} then begin// Команды, если условие выполняетсяendelse begin// Команды, если условие неверноend;Обратите внимание, что перед ключевым словом else точка с запятойне ставится.Наберите или скопируйте следующий код:Program HelloCFD;var a, b: real;Beginwriteln('Введитеreadln(a);writeln('Введитеreadln(b);if b<>0 thenwriteln('a/b =elsewriteln('a/b =readln;End.а');b');', (a/b):6:2)бесконечность');Запустите программу; она предложит ввести два числа, и посчитает ихчастное.МинизаданиеМодифицируйте предложенный код, исправив смысловую ошибку:обеспечьтекорректноеопределениепрограммойслучаевбесконечность», «минус бесконечность» и «неопределенность».10«плюс7.

При реализации математических моделей взаимодействие спользователем реализуется обычно с помощью файлов исходных данных ифайлов результатов расчета. Зачастую эти файлы имеют текстовый формат иочевидную структуру.Чтение данных из файла реализуется следующим образом:f:textfile;//...AssignFile(f, 'c:\example.txt');reset(f); // Открытие файла для чтенияreadln(f, i); // Чтение переменной iCloseFile(f); // Закрытие файлаЗапись данных в файл выполняется аналогично:f:textfile;//...AssignFile(f, 'c:\example.txt');rewrite(f); // Открытие файла для записиwriteln(f, i); // Запись переменной iCloseFile(f); // Закрытие файлаСоздайте в папке c:\temp текстовый файл e2_dat.txt следующегосодержания(вслучаееслидоступкданнойпапкезапрещенадминистратором, выберите другую папку на свое усмотрение, но безкириллических символов в пути к ней и пропишите этот путь в код):pressure100000temperature273R287Наберите или скопируйте следующий код:Program HelloCFD;var f:textfile;p,T,ro,R: real;st:string;BeginAssignFile(f, 'c:\temp\e2_dat.txt');reset(f);readln(f, st);readln(f, p);readln(f, st);11readln(f, T);readln(f, st);readln(f, R);CloseFile(f);ro:=p/(R*T);AssignFile(f, 'c:\temp\e2_rez.txt');rewrite(f);writeln(f, 'density');writeln(f, ro);CloseFile(f);End.Запустите программу и убедитесь, что в папке появился файл e2_rez.txtследующего содержимого:density1.27630789651696E+0000Обратите внимание, что ключевые слова «pressure», «temperature» и т.д.не являются идентификаторами и предназначены исключительно дляудобства пользователя.Результатом работы программ численного моделирования частоявляются большие массивы данных, требующие соответствующих средстввизуализации.

В качестве простейшего решения можно рекомендоватьиспользование табличных процессоров (например, MS Excel), для упрощенияработы с которыми целесообразно использование текстового формата «csv».Для того чтобы табличный процессор мог правильно распознать столбцызагружаемой таблицы, ячейки должны отделяться друг от друга знаком«точка с запятой».МинизаданиеМодифицируйте предложенный код: измените расширение файларезультатов на «csv» и расширьте вывод до следующего вида:p;T;ro1.00000000000000E+0005; 2.73000000000000E+0002; 1.27630789651696E+0000Откройте полученный файл в табличном процессоре и изучитерезультат. Обратите внимание, что заданные значения воспринимаются12программой как строки, чтобы исправить эту ошибку можно произвестиавтозамену в документе знаков точка на запятую, или изменить в настройкахразделитель целой и дробной части числа.Структура программыЧисленное решение задач газодинамики и теплообмена (а так же задачпрочности и многих других) с применением электронно-вычислительныхмашин сводится к обработке больших массивов данных.Для задач моделирования (в отличие от обычных расчетов) типично,что исходные данные являются начальными значениями некоторыхпараметров, которые изменяются в процессе расчета, и характер этогоизменения как раз и является искомой величиной.