Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

теория(Введение в паскаль)

.pdf
Скачиваний:
23
Добавлен:
14.02.2015
Размер:
141.16 Кб
Скачать

РЕШЕНИЕ ЗАДАЧ С ПОМОЩЬЮ ПЕРСОНАЛЬНОГО КОМПЬЮТЕРА(ПК)

1.Этапы решения задачи на ПК:

1.1.постановка задачи в терминах предметной области;

1.2.математическая постановка задачи(построение мат-модели) ;

1.3.алгоритм решения-представление его в виде структурной схемы(CC);

1.4.запись алгоритма на языке программирования(ЯП);

1.5.ввод текста программы в ПК;

1.6.получение рабочей программы;

1.7.тестирование и отладка программы;

1.8.решение задачи на ПК;

1.9.анализ результата выполнения программы и оформление их в виде таблиц,

графиков и т.д.; 1.10. оформление отчета о проделанной работе.

Пример. Постановка задачи. Вычислить площадь трапеции.

1.2 Математическая постановка задачи: площадь трапеции вычисляется по формуле s=ch, где h-высота трапеции, с-средняя линия трапеции c=(a+b)/2, a,b- основания трапеции.

1.3. Алгоритм решения задачи.

Алгоритм решения задачи-это система правил(арифметическсих, логических), однозначно определяющих процесс преобразования исходных данных в искомый результат, т.е. за конечное число шагов приводящих к решению задачи. Опишем данные, используемые в задаче. Исходные данные: a,b-основания трапеции; h-высота трапеции. Результат: s-площадь трапеции.

Для наглядного графического изображения алгоритма используется понятие структурной схемы(СС). CC состоит из блоков(геометрических фигур), соединенных между собой. Форма геометрических фигур характеризует функции, выполняемые соответствующим блоком. Внутри фигуры словесно или с помощью формул эти функции конкретизируются.

Основные блоки СС.

Используются следующие стандартные обозначения блоков СС и их названий;

начало

-указатель начала вычислительного процесса;

 

 

 

-указатель конца вычислительного процесса;

 

 

 

 

 

 

конец

 

 

 

 

 

 

 

 

- символ блока ввода или вывода информации предназначен для

 

 

 

 

 

 

 

указания переменных, значения которых вводятся как исходные

 

 

 

 

 

 

 

данные или выводятся как результаты;

 

 

 

 

 

 

 

 

 

 

-символ блока вычисления, представляющий собой расчет по

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

каким-либо формулам;

 

 

 

 

 

 

 

 

-символ блока принятия решения соотвествует проверке

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

да

 

 

 

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

 

 

 

 

 

 

 

 

записывается проверяемое логическое выражение, ели оно

 

 

 

 

 

 

 

 

 

 

 

 

принимает значение “ИСТИНЫ”, то выполгняется ветвь”да”

 

 

 

 

или “T”(TRUE-истина, да), если логическое выражение ложно,

 

 

 

 

T

 

 

F то выполняется ветвь “нет” или “F”(FALSE-ложь, нет)

 

 

 

 

 

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

да

или

F

T

-символ блока для организации структурного цикла;

-указатель перехода к выполнению блока с номером записанным внутри круга;

-линии соединения блоков.

Процесс решения задачи на ПК называется вычислительным процессом(ВП). Все ВП и, соответственно алгоритмы и СС, реализующие эти ВП, подразделяются на следующие типы: линейные, разветвляющиеся, циклические.Любой ВП, соответственно любой алгоритм представляет собой комбинацию этих трех типов.

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

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

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

Ниже дана СС рассматриваемой задачи.

Начало

 

 

Блок 1- ввод в память ПК значений переменных a,b,h.

1

Блок 2-вычисление средней линии трапеции.

 

 

 

 

 

 

 

 

Блок 3- вычисление площади трапеции.

Ввод a,b,h

 

 

 

 

Блок 4-вывод значений переменной s.

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

c=(a+b)/2

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

s=c.h

 

 

 

 

 

 

 

 

4

 

 

 

 

 

Вывод s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

конец

 

 

 

1.4. Запись алгоритма на языке программирования(ЯП); Запись разработанного алгоритма на языке программирования(ЯП). В ЯП для

указания выполнения действий служит оператор. Программа на ЯПэто последовательность операторов, оформленная по специальным правилам. В качестве ЯП будем использовать ПАСКАЛЬ. Писать программу следует в соответствии с СС. Программа для поставленной задачи.

Program lvp; Var a,b,h,c,s:real; Begin

Writeln(„вычисление площади трапеции‟);

Write(„ введите через пробел основания трапеции a,b=‟);

Readln(a,b);

Write(„ введите высоту трапеции h=‟);

Readln(h); c:=(a+b)/1; s:=c*h;

writeln(„площадь трапеции s=‟,s); end.

1.5. Ввод текста программы и исходных данных в ПК.

При работе на ПК данные(текст программы, исходные данные) вводятся с помощью клавиатуры. Вводимые данные, а также результаты выполнения программы отображаются на экране дисплея.

1.6. Получение рабочей программы.

Текст программы на ЯП называется исходным модулем(ИМ). ИМ нельзя выполнить на ПК. С помощью транслятора(компилятора) и редактора связей должна быть создана рабочая программа(РП). РП-готовая к выполнению на ПК. Трансляция ИМ включает: определение правильности записи программы в соответствии с правилами ЯП и синтез-генерирование соответствующей программы на машинном языке, которая называется объектным модулем(ОМ). В процессе анализа компилятор находит синтаксические ошибки в программе и выдает сообщение о них. После устранения ошибок программу необходимо снова откомпилировать. Если ошибок нет, то компилятор вырабатывает ОМ эквивалентный ИМ. Редактор связей соединяет все ОМ и создает готовую для выполнения на ПК РП. Транслятор и редактор связей-системные программы.

1.7. Тестирование и отладка программы.

Простейший тест-это набор исходных данных, для которых известен результат. 1.8.-1.9. Решение задачи на ПК и анализ результатов.

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

1.10. Оформление отчета о проделанной работе. Отчет должен содержать следующие разделы: заголовок работы; формулировку задачи;

математическую постановку задачи(при необходимости); обозначения входных, выходных и промежуточных данных; алгоритм решения задачи(СС); текст программы на ЯП;

тесты проверки правильности работы программы; результаты выполнения программы на заданных исходных данных.

2.Основные понятия ЯП на Паскале. 2.1. Алфавит ЯП.

26 букв латинского алфавита(a,b,..,z); 31 русская буква(допускается использовать в комментариях).

2.2.Цифры :0,1,2,3,4,5,6,7,,8,9.

2.3.Специальные символы:

Знаки арифметических операций:+,-,*,/; Знаки операций отношений: >,<,>=,<=,<>; Операция сравнения: =;

Разделители и ограничители:| ‟ | , | ; | . | : | [ | ] | ( | ) | { | } |пробел|;

Ключевые слова: and, array, begin и т.д..

3.Идентификаторы.

Идентификатор(имя) используется для объектов программы: программы, переменные, константы, типы и т. д. Идентификатор-это произвольная последовательность латинских букв и знаков подчеркивания, начинающихся с буквы(рекомендуется длина не более 8 символов).

Замечание. Различаются 2 вида идентификаторов: стандартные и даваемые пользователем(например стандартные функции sin, cos и т.д.);строчные и прописные буквы в идентификаторах и ключевых словах не различаются.

4.Структура программы.

Программа на языке Паскаль состоит из заголовка, раздела описаний(объявлений) и раздела операторов и имеет следующую форму записи:

Program <имя программы>; <раздел объявлений>

begin

<раздел операторов> end.

Заголовок содержит ключевое слово Program, имя программы-задается пользователем и заканчивается заголовок знаком точка с запятой(;).

Раздел объявлений-служит для описания данных, встречающихся в программе. Этот раздел состоит из 4-х подразделов:

Const-объявление констант; Type-объявление типов; Var-объявление переменных;

Prosedure,function-объявление процедур и функций.

Раздел операторов.

Раздел операторов заключается в операторные скобки вида BEGIN(начать) и END(кончить). После END обязательно ставится точка(.).В этом разделе записывается вычислительный процесс, состоящий из операторов. Операторы отделяются друг от друга знаком точка с запятой(;).

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

5.Пример полностью законченной программы на Паскале. Задача. Вычислить площадь трапеции s=h(a+b)/2. Дано:a,b-основания трапеции; h-высота трапеции. Результат:s-площадь.

Программа.

{вычисление площади трапеции}

Program lvp; Var a,b,h,c,s:real; Begin

Write(„введите через пробел основания трапеции и высоту:a,b,h=‟); readln(a,b,h); c:=(a+b)/2;

s:=h*c;

writeln(„площадь трапеции s=‟,s); end.{конец программы}

Замечание. В разделе var однотипные переменные можно описать списком.

6.Элементы данных:константы и переменные.

Основные вычисления в программе осуществляются с помощью констант и значений переменных. Константы не меняют своих значений при вычислениях. Переменная может менять свое значение. Когда переменной присваивается новое значение, ее прежнее значение теряется.

Простые типы данных.

Каждое данное имеет тип, который определяет:внутримашинное представление значения данного, количество байтов, отводимых для хранения этого значения, и набор операций, котрые выполняются со значением данного. Рассмотрим 4

стандартных типа в Паскале:integer, real, boolean, char:

целый тип(integer)-данные целого типа могут принимать только целочисленные значения в диапазоне[-32768;+32768]; c данными этого типа могут выполняться следующие операции:сложение(+), вычитание(-), умножение(*), деление нацело(div), остаток от деления нацело(mod); в памяти ПК данное целого типа занимает 2 байта; пример: пусть a=7, b=3, тогда a+b=10, a-b=4, a*b=21, a div b=2, a mod b=1.

вещественный тип(real)-данные вещественного типа могут принимать дробные значения в диапазоне от 2.9.10-38 до 1.7.1038, при записи вещественных чисел могут использоваться формы:с фиксированной десятичной точкой, когда целая часть отделяется от дробной части точкой(-1.5;17.3742); экспоненциальная, когда число записывается мантиссой и десятичным порядком(-1.57e+12, что соответствует –1.57.1012), с данными вещественного типа могут выполняться операции: сложение(+), вычитание(-), умножение(*), деление(/), в памяти ПК данное вещественного типа занимает 4 байта;

логический(boolean)-в Паскале имеются 2 логические константы(true-истина, false-ложь), для данных логического типа используются операции: and(И), or(ИЛИ), not(НЕ), в памяти ПК логическая переменная занимает один байт;

символьный(char)-данные символьного типа могут принимать символьные значения, пример:‟a‟, ‟+‟, „1‟, в памяти ПК данные символьного типа занимают один байт.

7. Стандартные функции.

Название функции на

Математическая запись

Тип результата

Паскале

функции

 

 

 

abs(x)

|x|

Тот же, что и тип x

sqr(x)

x2

 

 

Тот же, что и тип x

sqrt(x)

 

 

 

real

 

x

sin(x)

 

real

sinx

cos(x)

real

cosx

arctan(x)

real

arctgx

exp(x)

real

 

x

ln(x)

e

real

lnx

pi

real

 

 

 

ln(x)/ln(10)

logx

real

exp(n*ln(x))

real

n

(x>0)

 

x

 

8. Описание констант и переменных:

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

const <имя константы>=<значение>;, пример const m=10;p=3.5;

любая переменная , встречающаяся в программе должна быть описана в разделе описания переменных(var-имя раздела), в результате такого описания переменной в памяти отводится область для хранения значения этой переменной, размер отводимой области зависит от типа переменной, пример: var a,b,c,s:real; i:integer;

9. Операторы языка Паскаль:

оператор присваивания имеет следующую форму записи a:=b, где a-имя переменной, b-выражение, “:=”-знак присваивания(читается становится равным), “;”-знак, которым заканчивается оператор; выполнение оператора: вычисленное выражение b присваивается переменной a(a становится равным b); пример a:=1;{переменной a присваивается значение 1} a:=a+2;{новое значение a становится равно ее прежнему значению плюс 2}; операцию “:=” не следует путать с операцией сравнения ”=”; операция “:=” присваивает переменной новое значение, а операция “=” сравнивает две величины; выражение-состоит из операций и операндов; операндом может быть константа, переменная, имя функции или выражение, заключенное в круглые скобки; пример:

математическая запись

Запись на Паскале

0,5

0.5

ab+c

a*b+c

(a+b)tgx

(a+b)*(sin(x)/cos(x))

(a+b):c

(a+b)/c

правила записи выражений: нельзя записывать подряд два знака операции, необходимо разделять их скобками:a+(-b), a/(-b); нельзя опускать знак умножения: a*b; операции “+”, “-“, “*”, “/” необязательно выделять пробелами, операции “div” и “mod” обязательно должны быть выделены пробелами: a div b, a mod b; приоритет операций вычисления выражений(убывание приоритета):”+”, “-“(унарные), “not”; “*”, “/”, “div”, “mod”,”and”; “+”, “-“(бинарные), ”or”; “=”, “<>”, “>”, “<”, “<=”, “>=”; операции одинакового приоритета выполняются слева направо, операции в круглых скобках выполняются в первую очередь, с помощью круглых скобок можно задать любой требуемый порядок вычислений; пример1:20 div 5*4 эквивалентно выражению (20 div 5)*4, так как “div” и “*” имеют одинаковый приоритет и поэтому выполняются слева направо;

пример 2:4+20 div 5 эквивалентно выражению 4+(20 div 5), т.к. приоритет операции “div” выше чем приоритет бинарной операции ”+”;

типы выражений: любое выражение имеет тип, который определяет тип значения, получающегося в результате вычисления выражения; различаются логические выражения(тип Boolean) и арифметические выражения(тип real или integer); результатом логического выражения является true или false; логическое выражение можно присваивать только логической переменной; результат арифметического выражения есть числовая величина; в операторе присваивания переменная и выражение должны быть одного типа, допускаются переменные типа real присваивать выражение типа integer, но не допускауется присваивать переменной типа integer выражения типа real; пример: даны следующие описания переменных:

var i,j:integer; a,b:real; c,d:char; k:Boolean;, запишем следующие операторв присваивания: i:=i div j; {целой переменной i присвивается результат целого выражения}

a:=a/b;{вещественной переменной a присваивается результат вещественного выражения}

k:=a=b;{логической переменной a присваивается результат логического выражения “a=b”}

c:=‟7‟;{символьной переменной c присваивается значение символа „7‟} i:=trunc(a*b);{trunc-стандартная функция, которая преобразует тип real в тип integer}

j:=round(a+b); {round-стандартная функция, которая преобразует тип real в тип integer}; как отмечалось выше, присвоить целой переменной вещественный результат нельзя, в подобных случаях для округления и получения целого результата используются стандартные функции round и trunc, которые пеобразуют тип real в тип integer; функция round округляет до ближайшего целого; truncобрезает до ближайшего целого;

пример: j:=round(7.8);{дает результат 8}, j:=trunc(7.8);{дает результат 7};

оператор вывода: имя оператора-write(writeln); он предписывает ПК отобразить определенные данные на экране; список элементов , которые следует вывести на экран, приводится внутри круглых скобок(элементы разделяются запятой); элементом списка может быть число, переменная, арифметическое выражение или текст, заключенный в апострофы; форма записи оператора:

write(<список элементов>); writeln(<список элементов>);

пример 1. writeln(„первый;‟); writeln(„второй.‟); Эта последовательность операторов после выполнения выдаст на экран :

первый; второй.

oператор writeln после выполнения переводит курсор в начало следующей строки; если в приведенном выше примере оба оператора writeln заменить на write, то на экране появится-первый; второй.;оператор write не осуществляет перевод курсора на новую строку;

пример 2:a=2.5;b=tga; вывести на экран строку вида: при a=2.5 значение b=sin(a)/cos(a);

writeln(„ при a=‟,a,‟ значение b=‟,sin(a)/cos(a)); список элементов оператора writeln представляет:

„ при a=‟-текст, заключенный в апострофы, отображается на экране; a -переменная, значение которой выдается на экран;

„ значение b=‟ -текст, выводимый на экран;

sin(a)/cos(a)-арифметическое выражение, вычисленное значение которого будет выведено на экран;

формат вывода: значения a и sin(a)/cos(a) будут выводиться в форме вещественного число с порядком, что не всегда удобно; существует способ вывода результата в десятичной записи с фиксированной точкой, для этого надо указать формат вывода числа; формат числа состоит из двух частей: количества позиций в числе, считая десятичную точку, знак числа и количество позиций после точки; формат отделяется от имени переменной двоеточием. В примере 2 оператор будет иметь вид:

writeln(„ при a=‟,a:4:1,‟ значение b=‟,sin(a)/cos(a):7:2);

и это будет означать, что значение a занимает 4 позиции(+2.5), а значение арифметического выражения займет не более 7 позиций из них 2 позиции после запятой; если результат занимает меньше 7 позиций, то недостающие заменяются пробелами слева, если число занимает больше 7 позиций , то будет сообщение о несоответствии формата; его нужно увеличить;

оператор ввода: имя оператора-read(readln), первыми действиями, выполняемой программы являются ввод данных, форма записи оператора:

read(<список переменных>);

readln(<список переменных>);, переменные в списке отделяются друг от друга запятой; выполнение оператора : ПК переходит в состояние ожидания, пока с клавиатуры не будут введены соответствующие для списка переменных значения и нажата клавиша (<enter>); пример: пусть на клавиатуре набраны 3 числа 5.2 3.7 2.8<enter>; после выполнения оператора read(a,b,c); переменная a получит значение 5.2, переменная b-значение 3.7 и переменная c-значени 2.8; если на клавиатуре, разделяя значения клавишей <enter> и размещая эти значения на отдельных строках:

5.2<enter>

3.7<enter>

2.8<enter>, то после выполнения оператора read(a,b,c); переменным будет присвоено соответственно a-значение 5.2, b-значение 3.7 и c-значение 2.8; оператор readln-вводит требуемые значения для списка переменных и после выполнения обеспечит последующую чистку строки ввода; пример: при организации ввода в программе в виде readln(a,b); read(c), ввод с клавиатуры произведен следующим образом 5.2 3.7 2.8<enter>, тогда в соответствии с первым оператором ввода readln переменным a,b присвоятся значения 5.2, 3.7, оставшиеся значения в строке ввода будут проигнорированны, и при выполнениии второго оператора read система будет ждать ввода с клавиатуры значение c; замечание:вводимые величины должны соответствовать переменным из списка ввода по типу.

Контрольные вопросы:

1. этапы решения задачи на ПК;

2.понятие структурной схемы;

3.типы вычислительных процессов;

4.что такое идентификатор?

5.Общая структура программы на Паскале;

6.что такое константа и переменная?

7.Как объявляются константы и переменные?

8.Зачем нужно объявлять переменные?

9.Каковы основные типы на Паскале?

10.дать характеристику каждого типа;

11.перечислить стандартные функции;

12.что представляет собой оператор присваивания на Паскале?

13.Какие бывают выражения на Паскале?

14.Как определить тип выржения?

15.Операторы ввода: read, readln;

16.в чем отличие операторов read и readln?

17.Операторы вывода: write и writeln;

18.в чем отличие операторов write и writel?

19.Что такое формат и как он задается?