Руководство по выполнению лабораторных работ по курсу "Информатика "



Скачать 348.69 Kb.
страница1/2
Дата16.10.2012
Размер348.69 Kb.
ТипРуководство
  1   2

Кузьминых П.В. Технология программирования


Государственное образовательное учреждение высшего профессионального образования

Уфимский государственный нефтяной технический университет

Филиал в г. Салавате

П.В.Кузьминых

Технология

программирования

Руководство по выполнению

лабораторных работ

по курсу “Информатика “

Салават 2008



Данное руководство призвано оказать помощь при выполнении лабораторных работ по курсу “Информатика” студентами очной и очно-зачной форм обучения.

В методическом указании рассматриваются вопросы,связанные с построением алгоритмом решения задач №1-7 курса “Информатика”,приводятся примеры практической реализации на языке Бейсик.

Автор : доцент ,кандидат физико-математических наук

Кузьминых Павел Владимирович.

Общие положения.
Список лабораторных работ по курсу

Информатика “
Часть I . Программирование на ЭВМ.

  1. Простейшие вычисления на ПЭВМ .Программирование арифметических выражений.

  2. Программирование арифмерических циклов.

  3. Программирование разветвляющихся вычислительных процессов.

  4. Суммирование рядов на ЭВМ.

  5. Программирование матричных операций .

6 . Построение графиков функций , заданных параметрически.

7. Построение движущихся графических объектов.

По результатам выполнения лабораторной работы оформляется отчет. Каждый отчет начинается с титульного листа. Описательная часть отчета содержит:

  1. задание

  2. блок-схему вычислительного процесса

  3. текст программы

  4. результаты расчета

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

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

Программирование арифметических выражений.

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

Наименование

Обознач.
/Обращение










Модуль числа

Abs x

ABS(X)

Экспонента числа

ex

EXP(X)

Натуральный логарифм

Ln x

LOG(X)

Корень квадратный

x

SQR(X)

Арктангенс угла

Arctg x

ATN(X)

Косинус угла

Cos x

COS(X)

Синус угла

Sin x

SIN(X)

Тангенс

Tg x

TAN(X)

Другие математические функции записываются через вышеперечисленные. Так для вычисления логарифма числа по основанию A применяется формула приведения

Ln x

LogA x= -----

Ln A

Для тригонометрических функций угловая мера берется в радианах.

Не лишним кажется и напоминание о порядке выполнения математических операций при вычислении выражений.

  1. В математических выражениях внутри скобок или между скобками действия выполняются в следующей последовательности (приоритет операций ):

  2. вначале вычисляются значения функций

  3. проводятся операции возведения в степень

  4. выполняются операции умножения и деления

  5. в последнюю очередь выполняются операции сложения и вычитания.

Операции оного приоритете выполняются слева направо.

  1. При записи дробей используется линейная форма записи.

  2. Нельзя опускать знак умножения.

  3. Нельзя использовать два знака математических операций подряд.


Рассмотрим пример решения лабораторной работе № 1.

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

ax3+sin(bx)+0.1

y=------------------

Ln a + |x+c|-1 ,

где

x=ec-0.5+5Tg(a-b), c=log5(a+0.6), a=2.05,b=1.3
Вначале приведем словесное описание алгоритма решения задачи.

  1. задаются значения переменных a и b

  2. вычисляется значение переменных с и х по формуле

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

  4. печатается полученный результат.

Приведем вариант программы на языке Qbasic

a=2.05:b=1.3

c=log(a+0.6)/log(5)

x=exp(c-0.5)+5*tan(a-b)

y=(a*x^3+sin(b*x)+.1)/(log(a)+abs(x+c)-1)

Print “y=“;y
Программирование арифмерических циклов.
Часто при программировании математических задач приходится сталкиваться с ситуацией, когда в процессе расчета необходимо повторять ряд действий.

Так в частности, в задании к данной лабораторной работе предлагается рассчитать и напечатать таблицу значений функции.

При заданном виде функции и выбранного диапазона значений , решение этой задачи предполагает использование операторов цикла языка Бэйсик.

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

Формат оператора For - Next:

For <параметр цикла>=<начальное значение> To <конечное значение> Step <щаг по параметру>

ТЕЛО ЦИКЛА

Next <параметр цикла>

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

Кроме оператора For -Next для программной реализации можно применить и другие операторы цикла языка Бэйсик. Для нижеприведенных операторов цикла в рамках решаемой задачи приходится предусматривать самостоятельное изменение переменной расчета на величину заданного шага и контроль диапазона.

Формат оператора While - Wend:

While <условие>

ТЕЛО ЦИКЛА

Wend.

Оператор While - Wend повторяет выполнение тела цикла до тех пор, пока выполняется <условие>. При нарушении условия действие оператора завершается и программа продолжает свою работу с оператора, записанным за Wend.

Абсолютно идентичен выше приведенному и оператор Do Loop с предусловием типа While.

Формат оператора:

Do While <условие>

ТЕЛО ЦИКЛА

Loop

По своему действию очень близок к этому оператору и оператор Do-Loop с предусловие Until. Разница заключается в том , что после ключевого слова Until записывается не условие продолжения цикла ( как в случае While), а условие его окончания.

Другая форма оператора Do - Loop - оператор с постусловием.Формат этого оператора:

Do

ТЕЛО ЦИКЛА

Loop While <условие>.

Вместо ключевого слова While можно использовать Until. В этом случае <условие > определяет условие выхода из цикла Do -Loop.

Различие двух этих модификаций (с пред- и пост-условиями) оператора Do - Loop заключается в следующем. Так если условие повторения цикла не выполняется в самом начале, то оператор Do - Loop с предусловие не выполнит тело цикла ни разу. Оператор с постусловием выполнит тело цикла один раз, так как условие повторения выполнения цикла проверяется в этом случае после выполнения последнего оператора тела.
Задание: рассчитать и напечатать таблицу значений функции
y = |x+2| + lnx ,для х [0.1,2.2],x=0.2

Алгоритм решения задачи предусматривает лишь размешение в теле цикла операторов вычисления функции и печати полученных результатов.

Для программной реализации можно использовать любой из вышерассмотренных операторов цикла. Приведем для примера использование операторов For-Next,While -Wend и Do - Loop с постусловием.

Вариант 1

for x=0.1 to 2.2 step .2

y=abs(x+2)+log(x)

print using “ ##.## ###.####”;x,y

next x

Вариант 2

x=0.1

while x<=2.2

y=abs(x+2)+log(x)

print using “ ##.## ###.####”;x,y

x=x+0.2

wend

Вариант 3

x=0.1

do

y=abs(x+2)+log(x)

print using “ ##.## ###.####”;x,y

x=x+0.2

loop while x<=2.2

Вариант 4

x=0.1

do

y=abs(x+2)+log(x)

print using “ ##.## ###.####”;x,y

x=x+0.2

loop until x>2.2

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

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

Продемонстрируем вложенные циклы на примере вычисления элементов квадратной матрицы.

Необходимо вычислить и напечатать элементы квадратной матрицы размером N*N,заданных по формуле

ai,j=i3-3j , i=1,...,N j=1,...,N

Первый индекс матрицы (i) обозначает номер строки, второй -номер столбца.

Для вычисления элементов иатрицы необходимо организовать цикл по всем строкам ( i от 1 до N). Для каждой текущей строки нужно пройти по всем столбцам ( j от 1 до N). Для каждого текущего i и j рассчитать и напечатать элемент матрицы.

Input “N=“;N

For i=1 To N:For j=1 To N

a(i,j)=i^3-j^(1/3)

Print “a”;i;j”=“;a(i,j)

Next j:Next i

Отметим , что внутренний цикл (по J) закрывается ранее внешнего (по i).

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

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

Условные операторы языка Бэйсик имеют две модификации: одностроковый оператор IF - Then - Else и многостроковый If - EndIf. Различие заключается в следующем:

одностроковый оператор If-Then-Else должен записываться в одну строку

многостроковый оператор IF-EndIf может содержать несколько строк.

Формат оператора If-Then-Else

If <условие> Then <операторы> Else<операторы>.

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

При невыполнении условия выполняются операторы, следующие за Else,при отсутствии Else действие оператора If игнорируется.

Одностроковый оператор IF-Then-Else удобно использовать при небольшом числе проверок условий и небольшой длине <операторов>. В противном случае запись оператора может быть слишком громоздкой и не наглядной.

При значительном количестве проверок условий и самое главное большом числе действий при выполении или невыполнении анализируемого условия следует прибегать к многостроковому оператору If-EndIf.

Формат многострокового оператора:

If <условие 1> Then

<операторы>

ElseIf <условие 2> Then

<операторы>

.

.

.

Else

<операторы>

Endif

Оператор выполняется следующим образом:

  1. при выполнении <условие 1> выполняются операторы, стоящие за первым Then.После их выполнения управление передается оператору, следующему за EndIf.При невыполнении первого условия анализируюется <условие 2>

  2. при выполнении второго условия выполняются действия, стоящие за вторым Then.После их выполнения управление передается оператору, следующему за Endif

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

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

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

Формат оператора

Select Case <выражение выбора>

Case <список выражений 1>

<операторы>

Case <список выражений 2>

<операторы>

.

.

.

Case Else

<операторы>

End Select

Здесь: <выражение выбора>-любое числовое или символьное выражение;

<список выражений>- анализируемое значение.

Элементы списка выражений должны иметь одну из следующих форм:

  1. выражение, выражение ...

  2. выражение To выражение

  3. Is выражение со знаком операции

  4. выражение- любое числовое или символьное выражение, совпадающее с типом выражения выбора.

Если <выражение выбора >отвечает условиям списка выражений данного блока Case, выполняются операторы из этого блока. После этого управление передается оператору, следующему за End Select.
Задание : вычислить значение функции

tg(a+x3) , x>2.35 где x=ln(z/a+1)-ez

y= |ax+z|/3, 0x2.35 z=tg(ae1.5)

sin3z5 , x<0 a=0.7

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

  1. задаем значение переменной а

  2. вычисляем значения z и x

  3. если значение х больше 2.25 - вычисляем y по первой из формул

  4. для значения х из диапазона от 0 до 2.25 вычисляем y по второй формуле

  5. в противном случае вычисляем y по третьей формуле

  6. полученный результат печатаем.

Приведем два варианта программной реализации поставленной задачи : с помощью оператора If - Then - Else и Select Case.
Вариант 1

a=0.7

z=Tan(a*exp(1.5))

x=log(z/a+1)-exp(z)

if x>2.35 Then y=tan(a+x^3) Else if x>=0 Then y=Abs(a*x+sqr(z))/3 Else y=Sin(z^5)^3

Print “x=“;x,”y=“;y
Вариант 2

a=0.7

z=Tan(a*exp(1.5))

x=Log(z/a+1)-Exp(z)

Select Case x

Case Is >2.35

y=tan(a+x^3)

Case 0 To 2.35

y=Abs(a*x+sqr(z))/3

Case Else

y=Sin(z^5)^3

End Select

Print “x=“;x,”y=“;y
Вычисление сумм на ЭВМ.
Нахождение сумм числовых последовательностей в программах является одной из часто встречающихся задач. Для вычисления сумм конечных последовательностей применяется стандартный алгоритм :

  1. задается начальное значение переменной ,хранящей сумму

  2. организуется цикл суммирования по параметру суммирования от начального до конечного с шагом 1

  3. в цикле переменная, хранящая сумму, увеличивает свое значение на текущий элемент суммы

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

- вычислить сумму числовой последовательности, заданной в виде

S=1-x+x2-x3+...+(-1)nxn , где x и N считаются заданными .

Для программирования процесса суммирования представим последовательность в стандартном виде.

N

S=1+ (-1)ixi

i=1

В нашем случае, начальное значение переменной , хранящей сумму, следует взять равной 1. Параметр суммирования (I) должен пробегать значение от 1 до N с шагом 1. Текущий элемент суммы следует брать в виде (-1)ixi

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

S=1

For i=1 To N

S=S+(-1)^i*x^i

Next i

После завершения цикла переменная S будет хранить текущее значение суммы элементов последовательности.

Аналогичным образом программируются процессы вычисления сумм элементов вектора, матрицы и т.д. Например, требуется рассчитать элементы одномерного массива как скалярное произведение элементов матрицы:

N

xi= ai,j *aj,i

j=1

В этом случае, начальное значение переменной суммирования xi рано 0, параметр суммирования (j) пробегает значение от 0 до N,текущий член суммы равен ai,j *aj,i .

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

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

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

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

Для получения результата с нужной точностью можно использовать другой алгоритм суммирования:

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

При таком подходе нельзя использовать для процесса суммирования цикл For -Next, т.к. не определена верхняя граница предела суммирования.

Для программирования этапа накопления суммы по этому алгоритму можно использовать цикл Do - Loop с пост условием. Приведем фрагмент вычисления ряда



S=1+ (-1)ixi

i=1

на языке Qbasic (значения X и точность E считаются заданными):

S=1:i=0

Do

i=i+1

a=(1-)^i*x^i

S=S+a

Loop While Abs(a)>Eps

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

  1. с заданным числом членов (N=10)

  2. с заданной точностью (Eps=10-5)

Например,

1

y=----- , S=1-x+x2-x3+...+(-1)nxn+...

1-x для x[0,0.9] x=0.1

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

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

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

Для вычисления произведения применяется следующий алгоритм:

  1. задается начальное значение переменной ,хранящей произведение ,равное 1

  2. организуется цикл вычисления произведения по параметру от начального до конечного с шагом 1

  3. в цикле переменная, хранящая произведение, умножается на текущий элемент.

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

вычислить значение функции Y как произведение элементов одномерного массива

N

Y = xi ,

i=1

элементы одномерного массива считаются заданными.

Фрагмент программы, реализующий решение данной задачи :

Y=1

For i=1 To N

Y=Y*X(i)

Next i

Как было отмечено ранее, в составе библиотеки стандартных программ языка Basic отсутствует функция вычисления значения факториала числа.

Однако, если нужно найти факториал некоторого числа К , вычисляемого по формуле

К

К!=П i

i=1

можно использовать выше описанный алгоритм.

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

N

S= (-1)ixi/i!

i=1

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

I!=I*(I-1)!.

Каждое последующее значение факториала вычисляется как значение факториала предыдущего числа, умноженное на текущее значение I. Такой подход позволяет уменьшить объем вычислений и зачастую упростить алгоритм. При вычислении факториала вводится переменная, хранящая требуемый результат. Задается начальное значение этой переменной равной 1 ( как известно 0!=1).Каждое вычисляемое значение факториала заносится в ту же переменную.

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

S=0:P=1

For i=1 To N

P=I*P

S=S+x^i/P

Next i

Однако подобный подход приемлем лишь для вычисление факториалов для небольших значений I (i!<1038).Для вычислений больших значений факториалов можно использовать вещественные переменные с двойной точностью либо дополнительные математические приемы.

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

(2*I)! , то для реализации подобного подхода необходимо связать значение факториала не с предыдущим , а с пред-предыдущим. Для вычисления второго члена последовательности необходимо использовать значение 4! , связав его со значением 2!, участвовавшего при расчете 1-ого члена ряда. В этом случае рекуррентная формула приобретает вид

(2I)!=2*I*(2I-1)*(2I-2)!

Соответственно изменится формула расчета факториала в вышеприведенном фрагменте программы.
Получение рекуррентных формул.
Иногда при программирование числовых последовательностей (лабораторная работа № 4) рекуррентные формулы позволяют значительно упростить алгоритм расчета и избежать появление нештатных ситуаций, связанных с вычисление факториалов больших чисел.

Рекуррентная формула позволяет связать каждый последующий член последовательности с предыдущим.

Для заданного в виде

S=a0+a1+a2+...+aN+...

ряда рекуррентная формула связывает a1 с a0 , a2 с a1 и т.д., или

ai=B*ai-1

Получим рекуррентную формулу для вычисления ряда , вида



S= (-1)ix2i/(2i)
  1   2

Похожие:

Руководство по выполнению лабораторных работ по курсу \"Информатика \" iconКафедра прикладной информатики и информационных систем Нейронные сети Методические указания к выполнению лабораторных работ по курсу «Интеллектуальные информационные системы»
Методические указания к выполнению лабораторных работ по курсу «Интеллектуальные информационные системы» для студентов 4-го курса...
Руководство по выполнению лабораторных работ по курсу \"Информатика \" iconО. Ф. Власенко, И. В. Беляева изучение си после паскаля: циклы, развилки, функции, обработка одномерных массивов методические указания к выполнению лабораторных работ по программированию для студентов направления 552800 «Информатика и вычислительная
Методические указания к выполнению лабораторных работ по программированию для студентов направления 552800 «Информатика и вычислительная...
Руководство по выполнению лабораторных работ по курсу \"Информатика \" iconМетодические рекомендации по выполнению лабораторных работ и расчетного задания по курсу «Основы автоматического управления»
Идентификация динамических объектов: методические рекомендации по выполнению лабораторных работ и расчетного задания по курсу «Основы...
Руководство по выполнению лабораторных работ по курсу \"Информатика \" iconМетодические указания по выполнению 1 и 2 лабораторных работ по курсу «Методы и средства защиты информации»
Методические указания предназначены для студентов IV курса направления «Информатика и вычислительная техника»
Руководство по выполнению лабораторных работ по курсу \"Информатика \" iconМетодическое пособие по дисциплине «Организация ЭВМ и систем» иуказания по выполнению лабораторных и курсовой работ Направление 230100 «Информатика и вычислительная техника»
Методическое пособие по дисциплине «Организация ЭВМ и систем» и указания по выполнению лабораторных и курсовой работ
Руководство по выполнению лабораторных работ по курсу \"Информатика \" iconРуководство по выполнению базовых экспериментов эцпот. 001 Рбэ (901) 2006
Данное руководство или его отдельные фрагменты могут непосредственно использоваться студентами при выполнении лабораторных работ
Руководство по выполнению лабораторных работ по курсу \"Информатика \" iconМетодические указания к выполнению лабораторных и курсовых работ иркутск 2007
...
Руководство по выполнению лабораторных работ по курсу \"Информатика \" iconТехнические измерения
Методические рекомендации к выполнению лабораторных работ по курсу «Технологические процессы в машиностроении» для студентов специальности...
Руководство по выполнению лабораторных работ по курсу \"Информатика \" iconМетодические указания к выполнению лабораторных работ по курсу «Сопротивление материалов» для студентов
Определение линейных и угловых перемещений при плоском изгибе однопролетной балки
Руководство по выполнению лабораторных работ по курсу \"Информатика \" iconМетодические указания к выполнению лабораторных работ санкт-Петербург 2012
Методические указания предназначены для проведения лабораторных работ со студентами дневного и вечернего обучения по специальности...
Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org