Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Общая схема выполнения лабораторной работыСтр 1 из 9Следующая ⇒
Выполнение каждой лабораторной обязательно включает несколько этапов, ни один из которых не должен пропускаться. Начинаться работа должна с разбора задания и составления списка объектов, которые будут встречаться в программе (в изображении алгоритма). Этот список объектов в виде таблицы идентификаторов (таблицы распределения памяти) особенно важен в первых работах. Как показал опыт, неумение выделить и описать используемые в программе данные в 90% случаев приводит к ошибкам в программах, например, порядковый номер путают со значением элемента в последовательности, общее количество объектов – с количеством объектов, удовлетворяющих какому-либо критерию и так далее. Изображение алгоритмов следует выполнять максимально подробно, особенно в первых работах. Нельзя опускать изображения блоков алгоритма, если они " само собой разумеются". Можно позволить объединять в блоке несколько однотипных действий (например, очистку нескольких переменных), но запрос на ввод какого-либо значения и собственно ввод этого значения в переменную с клавиатуры необходимо изображать двумя отдельными блоками, пока обучающиеся не привыкнут, что всякому вводу данных пользователем программы должен предшествовать запрос со стороны программы (ПЭВМ). Очевидно, что каждая лабораторная должна быть выполнена на компьютере, и только после этого может быть оформлена и представлена к защите. Отчет должен содержать титульный лист, задание, таблицу идентификаторов, блок-схему алгоритма, листинг программы и протокол работы программы (в виде распечатки текстового файла с исходными данными и результатами работы программы). Рекомендуемое оформление каждого раздела приведено ниже. Важно отметить, что с первой же лабораторной работы следует придерживаться порядка и аккуратности в оформлении лабораторной работы. Это важный фактор обучения программированию, так как такой стиль работы в дальнейшем существенно уменьшает количество ошибок и ускоряет процесс написания и отладки программ. При наличии достаточного количества технических ресурсов (принтера и расходных материалов к нему) все части лабораторной работы (кроме блок-схемы алгоритма) могут распечатываться на принтере. Как минимум, в отчете должна присутствовать распечатка текста программы и результатов ее работы, остальные разделы могут быть выполнены вручную. При написании текста программы следует придерживаться некоторых рекомендаций. В частности, текст программы должен содержать: · Комментарий с указанием фамилии программиста и номера группы. · Описание всех используемых в программе идентификаторов (имен). · Ввод требуемого количества данных из указанного в задании файла или иной способ задания исходных данных, как сказано в задании. · Вывод в выводной текстовый файл (до четвертой работы – на экран) введенных исходных числовых значений под заголовком " Исходные данные". · Проведение обработки числового материала в соответствии с заданием. · Вывод результатов обработки в выводной текстовый файл (до четвертой работы – на экран) под заголовком " Результаты расчета", с пояснениями, если результат не может быть выведен. Текст программы (листинг) рекомендуется писать с выделением вложенных циклов, составных операторов и структур смещением на две – три позиции, что облегчает чтение программы и упрощает отладку (поиск пропущенных программных скобок и несоответствий алгоритму). Листинг и вывод результатов следует размещать так, чтобы в дальнейшем был возможен вывод на печать. Для этого следует учитывать, что ширина стандартного листа бумаги реально позволяет печатать текст шириной до 75 символов в строке, листа из тетради – до 60 символов в строке, двойного листа из тетради – до 76 символов в строке (как правило, это стандартный шрифт матричного принтера). Наконец, несколько слов о рекомендуемой литературе. Для работы желательно иметь описание языка и инструментальной среды используемой системы программирования. В частности, удобно пользоваться книгами [1, 2, 4], где описано и то, и другое.
Лабораторная работа № 1 Алгоритмы линейной структуры Задачи лабораторной работы Вопросы, изучаемые в работе
Задание (общее ко всем вариантам). Запрограммировать вычисление заданной функции, вычислить и вывести на экран результат при указанных значениях аргументов. Проверить программу по приведенному в задании ответу. Оформить отчет по лабораторной работе в соответствии с образцом, приведенным для варианта № 31. Таблицу идентификаторов, блок-схему алгоритма и текст программы аккуратно выполнить от руки, с обозначениями пробелов (в программе), где они необходимы. Требования к программе
Содержание программы
Общие пояснения Данная работа, как и все последующие, предполагает написание программы на языке Паскаль. Поскольку это первая работа по составлению программы, ниже приводится общая структура и правила написания программ на языке Паскаль. Текст должен быть написан латинскими символами (прописные и строчные символы не различаются) в файле с именем, удовлетворяющем правилам файловой системы DOS и с расширением.PAS. Рекомендуется использовать имена, состоящие не более чем из 6 символов, за которыми следует номер лабораторной работы. Операторы могут начинаться с любой позиции строки, переноситься на последующие строки (переход на другую строку разрешен в любом месте, где можно вставить пробел) и записываться по несколько операторов в одной строке (что, однако, не рекомендуется). Операторы разделяются между собой символом "; ". Комментарии представляют собой любой текст (в том числе – кириллицей), заключенный в фигурные скобки. Он может занимать несколько строк и может вставляться внутрь любого оператора языка. Внутри комментария нельзя иметь фигурные скобки (вложенный комментарий). Операторы не рекомендуется записывать дальше 75-ой колонки для обеспечения возможности распечатки текста программы на стандартных листах бумаги (или 60-ой колонок – для распечатки на странице из тетради). Программа может начинаться с необязательного оператора PROGRAM < имя программы>; за которым должен идти блок описаний, состоящий из одного или нескольких разделов. Затем идет выполняемый блок, заканчивающийся символом ".". Как правило, блок описаний содержит раздел описания переменных, начинающийся с ключевого слова VAR. Остальные разделы могут отсутствовать. Выполняемый блок должен быть заключен в операторные скобки BEGIN... END, причем рекомендуется любую соответствующую пару скобок записывать начиная с одной и той же колонки. Открывающую скобку Begin лучше всегда начинать с новой строки. Пример простейшей программы будет приведен перед таблицей с данными вариантов заданий. Уточним задачи лабораторной работы. 1. Программа линейной структуры – это программа, в которой каждое действие выполняется последовательно один и только один раз, т.е. в алгоритме присутствуют только структуры следования. Программы такого типа в практике встречаются редко – только для расчетов по каким-либо формулам. При этом в программе должны встречаться блоки ввода исходных данных, блоки вычислений выражений и блоки вывода результатов расчетов. 2. В данной работе, в целях упрощения программы, предлагается задать исходные данные с помощью оператора присваивания. Так как расчеты по формуле выполняются также с помощью операторов присваивания, в данной работе в выполняемом блоке будут только операторы присваивания и один оператор вывода результата на экран. Запись оператора присваивания во всех случаях выполняется в виде: < какой переменной> < присваиваем> < значение выражения>;.
Следует помнить, что присваивание выполняется справа налево. Примеры: Summa: = 0; {Обнуление переменной Summa} A: = B; {Значение переменной B копируется в ячейку (переменную) A} I: = I+1; {Увеличение значения счетчика I на единицу} Gip: =Sqrt(Sqr(X)+Sqr(Y)); {расчет гипотенузы по величинам катетов} Оператор вывода на экран в простейшем случае выглядит так: Writeln(< список объектов вывода> ); или Write(< список объектов вывода> ); Отличие первого варианта от второго в том, что после вывода первым оператором, курсор переводится на новую строку, и следующий вывод будет выполняться в другой строке экрана. Список объектов вывода представляет собой перечень имен переменных, строковых констант и выражений, разделенных запятыми. За каждым элементом списка может следовать формат вывода в виде одного или двух целых чисел, отделенных от элемента двоеточием. Первое число указывает, сколько позиций выделяется для выводимого значения. Если при этом значение содержит меньше символов, оно дополняется слева пробелами, если значение не помещается в отведенное место, то предлагаемый формат вывода игнорируется. Второе число используется только при выводе вещественных чисел и указывает, сколько дробных цифр выводить после десятичной точки. При этом число выводится в форме с фиксированной точкой (без десятичного порядка). Если второго числа в формате нет, вещественное значение выводится в экспоненциальной форме. Примеры операторов вывода: Writeln('Сколько будет чисел? '); {запрос перед вводом количества чисел} Write(X, Sin(X)+1.5); {вывод значения переменной Х и значения зависящего от него выражения} Writeln('Минимальное - ', K, ' по порядку число'); Writeln(A, A: 5, A: 12, A: 8: 2, A: 10: 4); {при A=12.345, будет выведена следующая строка: }
1.23450000000012E+01 1.2E+01 1.23E+01 12.35 12.3450
Видно, что при выводе вещественные числа отделяются друг от друга пробелом (или знаком " -" ) и округляются, если не помещаются в отводимое для них поле. Следует помнить, что целые числа при выводе без формата пишутся подряд, без пробелов, например, если K=12, L=34, а M=-5:
Writeln(K, L, M); { получим результат в виде: } 1234-5 3. Описание переменных вещественного типа производится с помощью стандартного описателя real. Следует помнить, что во всех задачах, если не оговорено особо, любые переменные, кроме счетчиков (переменных, хранящих порядковые номера) и граничных значений для счетчиков (например, размеров массивов, количество обрабатываемых чисел), должны описываться как вещественные. Примеры операторов описаний: VAR A, B, C: real; X1, X2: real; VAR R, D: real; {раздел описаний переменных может встречаться несколько раз} При записи выражений на языке Паскаль нужно помнить, что написанное выражение будет выполняться слева направо, если позволяет приоритет соседних операций и отсутствуют скобки. Знаки операций для числовых выражений и их приоритеты приведены в табл. 1. Таблица 1. Арифметические операции Турбо-Паскаля
Обращение к функциям имеет более высокий приоритет (1-й), а скобки определяются как имеющие наивысший приоритет (0-й). Если в выражении соседние операции имеют разный приоритет, сначала выполняется операция с более высоким приоритетом, например:
Таблица 2. Запись математических выражений на Паскале.
В программе на Паскале можно пользоваться стандартной константой, соответствующей числу ¶ (3.1415925...). Ее обозначение в программе – Pi, и при ее использовании нельзя описывать и применять другую переменную с таким же именем. При работе в Турбо-Паскале (5, 6 или 7 версии), можно пользоваться стандартными математическими функциями, имена которых приведены в табл. 3. Таблица 3. Математические функции в Турбо-Паскале
Для применения других математических функций необходимо выражать их через приведенные в табл. 2, учитывая, что: log10(X) = ln(X)/Ln(10.0), XY = exp(Y*ln(X)), В качестве аргумента может выступать константа, имя переменной или выражение. Во всех случаях аргумент должен быть заключен в круглые скобки. Разбор контрольного варианта Титульный лист Задание A=10-2; C=102; D= -2.5; Кроме имен переменных, входящих в состав выражения, придется использовать имена встроенных функций: квадратного корня, экспоненты и натурального логарифма (для возведения в степень).
Таблица 4 Таблица идентификаторов
Блок-схема алгоритма
Текст программы
PROGRAM Lab_1; { Лабораторная работа N 1 Вариант N 31 А.Я.Умненькая, ст. гр. Я-007 } VAR A, C, D, X, R: real; BEGIN A: =1e-2; C: =1e2; D: =-2.5; R: =Exp(1.5*Ln(A)); X: =Sqrt( Exp(D/3.0*Ln(C)) - 0.5*R + Exp(R*(C+D)/2.0/A) ); Writeln(' X= ', X: 12); END.
Результат:
X= 1.14453E+01 Варианты заданий Таблица 5. Исходные данные к лабораторной работе №1
Лабораторная работа № 2 Программирование алгоритмов с ветвлениями Задачи лабораторной работы Вопросы, изучаемые в работе · Построение простейшей программы с ветвлениями. · Изучение условных операторов. · Использование именованных констант. · Использование операторов ввода для исходных данных. Задание (общее ко всем вариантам). Написать программу вычисления и вывода на экран значения функции F по значениям одного или нескольких аргументов, величины которых вводятся с клавиатуры операторами ввода. Результат вывести на экран. Проверить программу, задавая значения аргументов, указанные в задании, и сверяя результаты с приведенными ответами. Оформить отчет по лабораторной работе по образцу первой работы, но текст программы распечатать из оболочки Турбо-Паскаля. Требования к программе · Программа должна содержать комментарий по форме, указанной в работе № 1. · Константа, встречающаяся в задании два или более раз, должна быть использована в программе в форме именованной константы. · Значения аргументов вводятся с клавиатуры, перед вводом должен стоять оператор запроса аргументов. · Проверку программы выполнить для всех ветвей алгоритма. · При выводе результата, одновременно выводить значения аргументов. · Вывод результата выполнять по формату: 8: 4. Общие пояснения 1.Алгоритмы с ветвлениями подразумевают, что в них существует больше одного пути, по которому можно пройти от начала к концу. Наличие параллельных ветвей алгоритма осложняет тестирование программ, так как требуется задать несколько вариантов исходных данных, чтобы отработали все ветви алгоритма. Ветвящиеся алгоритмы могут быть построены как из стандартных структур ветвления (А), так и из неполных (В). В данной работе (как и вообще при программировании на языке Паскаль) предпочтительней использовать конструкцию типа (А), так как она отвечает требованиям структурного программирования. 2. Реализация структур ветвления на Паскале осуществляется с помощью условных операторов " if ".
Таблица 6. Запись " if" операторов на Паскале
Примеры написания таких операторов: if A> 0 then Y: =sin(X) else Y: =cos(X); if (A+B > C) and (B < 0) then { если требуется проверка} Writeln('Ветвь 1') { нескольких условий, } else { каждое отношение следует} Writeln('Ветвь 2'); { заключать в скобки } if Pr then {здесь Pr – логическая переменная, } begin {если Pr равно TRUE выполнится этот блок} Writeln(' При таких данных решения нет'); Pr: =FALSE; end; Если в качестве оператора одной из ветвей используется условный оператор, то можно выбирать один из трех возможных путей. Вообще, количество " if " -операторов должно быть на единицу меньше, чем возможных ветвей алгоритма. Например, если нужно задать Y=-1, при X< 0, Y=0 при X=0 и Y=1 при X> 0, такой алгоритм и соответствующий ему текст на Паскале будет выглядеть:
If X< 0 then Y=-1 else if Y> 0 then Y=1 else Y=0;
Условиями, определяющими какую ветвь алгоритма выполнять, являются логические выражения, принимающие значение TRUE или FALSE. В качестве таких выражений часто используются отношения между двумя однотипными данными. Турбо-Паскаль разрешает сравнивать вещественные и целочисленные данные, строчные и символьные данные. Подробнее см. учебное пособие с описанием языка. Таблица 7. Операции отношений
В качестве операций отношений для упорядоченных типов данных можно использовать шесть видов операций, приведенных в таблице N 7; для неупорядоченных типов разрешены только первые две операции. У всех одинаковый приоритет, причем он ниже, чем приоритеты любых других операций (арифметических и прочих), а результат всегда имеет логическое значение. 3. В программе на Паскале можно пользоваться константами, которые имеют не только значение, но и имя. Такие константы должны быть описаны в блоке описаний, в специальном разделе описаний констант. Использование таких именованных констант позволяет " вытащить" задание значений констант в начало программы, где их можно, при необходимости, изменить в одном месте. Пример раздела описаний констант: CONST MAXBALL = 5; MINBALL = 2; ERR = ' Ошибка в программе'; ABSNUL = -273.16; В дальнейшем можно всюду вместо числового значения -273.16 использовать имя ABSNUL и т.д. Существует ряд констант, которыми можно пользоваться без их описания. Некоторые из них приведены в таблице 8.
Таблица 8. Стандартные константы Турбо-Паскаля
4. В процессе работы программа пользуется данными, которые берет из ячеек памяти. Каким же образом эти значения попадают в эти ячейки? Существует всего три возможности. Во-первых, значения могут быть занесены в некоторые переменные в самый начальный момент при загрузке программы в память. Такие переменные называются типизированными константами (хотя по сути их правильнее называть инициализированными переменными). Во-вторых, переменная (ячейка памяти) может получить значение при выполнении оператора присваивания. Наконец, в переменную можно ввести значение с помощью процедуры ввода данных с внешнего устройства. Только последний способ позволяет одной и той же программе обрабатывать различные наборы исходных данных. Если в программе нет операторов ввода, она при всяком запуске будет выполнять один и тот же расчет. Оператор ввода (а точнее, процедура ввода) может вводить данные в оперативную память или из файла или с клавиатуры. При вводе с клавиатуры процедура имеет вид: Read(< список переменных> ); или Readln(< список переменных> ); где список переменных представляет собой перечень имен переменных через запятую, в которые заносятся вводимые значения. Очевидно, что список значений и список имен должны соответствовать друг другу по типам и порядку следования элементов списков. Отличие в этих процедурах проявляется только при вводе данных из файла. Оно заключается в том, что при втором варианте после ввода выполняется переход на новую запись файла, даже если в текущей записи данные не кончились. Примеры: Read(N); {программа ждет, пока не будет набрано число на клавиатуре и не нажата клавиша < Enter>, после чего переменная с именем N получит набранное значение} Read(A, B, C); {необходимо набрать через пробел три числа и нажать < Enter>, первое попадет в ячейку с именем A и т.д.} Нельзя в списке имен писать константы или выражения. Если в программе требуется выполнить ввод данных с клавиатуры, предварительно следует предусмотреть команды вывода на экран запроса, какие параметры и в каком порядке пользователь должен вводить, например: Writeln('задай коэффициенты уравнения: A, B, C'); Readln(A, B, C); или Writeln('Сколько вариантов будем считать? '); Readln(N); Разбор контрольного варианта Задание Написать программу вычисления и вывода на экран (по формату: 8: 4) значения функции по значениям аргументов A и B, величины которых вводятся с клавиатуры операторами ввода. Проверить ее работу для каждой ветви алгоритма заданием соответствующих исходных данных.
Таблица 9. Данные задания 31 варианта
Таблица 10. Таблица распределения памяти
Блок-схема алгоритма
PROGRAM Lab_2; { Лабораторная работа N 2 Вариант N 31 А.Я.Умненькая, ст. гр. Я-007 } CONST C=2.13; VAR A, B, F, R: real; BEGIN Writeln('Значения аргументов A и B? '); Readln(A, B); R: =A+B; F: = exp(R)/C; if R> C then F: = Sin(R)+1.0/R else if R< C then F: = cos(A)-ln(-R); Writeln(' Рез-т: ', F: 8: 4); END.
Получены результаты по заданным наборам данных:
Рез-т: -0.4154 Рез-т: 0.2328 Рез-т: 3.9506 Варианты заданий Таблица 11. Варианты заданий лабораторной работы № 2 Популярное:
|
Последнее изменение этой страницы: 2016-05-30; Просмотров: 1121; Нарушение авторского права страницы