Практикум решения задач на ЭВМ icon

Практикум решения задач на ЭВМ


Смотрите также:
Программа учебной дисциплины практикум решения физических задач (прфз) Для специальности...
Методические указания по выполнению курсового проекта рекомендации по использованию ЭВМ...
Каково понятие архитектуры эвм?...
Программа учебной дисциплины практикум решения физических задач (прфз) Для специальности 050201...
Рабочая программа курса “Алгоритмизация и решение физических задач на эвм” Лекции 20 ч...
Практикум по Delphi для решения прикладных задач учебное пособие для студентов...
Практикум по решению задач на ЭВМ программирование...
Программа дисциплины «Практикум по решению задач на эвм» Часть 1 (52 часа)...
Тема №1: этапы решения задач на ЭВМ. Алгоритмизация. Основные понятия. Блок-схемы. 4...
Конспект лекций по курсу «использование ЭВМ для решения задач водоподготовки» для студентов 5...
Учебная программа Дисциплины б9 «Методы математического моделирования» по специальности 090302...
Программа дисциплины фтд. 00 «практикум по решению математических задач» Специальность...



Загрузка...
страницы:   1   2   3   4
скачать
Практикум решения задач на ЭВМ


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

Методическое пособие

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

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

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

    1. Основные этапы решения задач с помощью ЭВМ.

    2. Поиск и сортировка данных.

    3. Структуры данных.

    4. Построение графических изображений.

    5. Построение графиков функций и диаграмм.

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

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

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

  1. Номер группы. 2. Фамилия И.О. 3. Номер варианта.

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

Проверка типового расчета производится в два этапа.

  1. Проверка типового расчета. Осуществляется преподавателями, ведущими практические занятия.

  2. Защита типового расчета. Осуществляется во время коллоквиума. В процессе защиты оценивается самостоятельность работы, понимание материала, использованного в типовом расчете.

Выполнение и защита типового расчета является необходимым условием итоговой аттестации по курсу “Практикум решения задач на ЭВМ”.

Основные этапы решения задач с помощью ЭВМ.

Пример 1.

Найти значение корня уравнения х3 + 0,5 x2 - 2=0 с точностью 0.0001.

Пример 2.

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

Пример 3

Найти значение суммы + + + ... с точностью E=0.00001 и определить количество слагаемых этой суммы.

Пример 4

Вычислить значение многочлена p(x)=3,4х5 - 2х4 +5,7х3 -0,4х+3 при х=15,35 по схеме Горнера.

Пример 5

Найти площадь криволинейной трапеции, ограниченной линиями y=f(x),   x=a,  x=b, если f(x) = , a=0,  b=4.

 

 

 



 

Пример 1

Найти значение корня уравнения х3 + 0,5 x2 - 2=0 с точностью 0.0001.

1) математическая модель

Если уравнение f(x)=0 имеет единственный корень на отрезке [a,b] и функция y=f(x) определена и непрерывна на данном отрезке, то для уточнения значения корня можно воспользоваться методом половинного деления, который заключается в делении отрезка [a,b] пополам и выборе той его половины, которая содержит корень. Выбранная половина снова делится пополам и так далее, пока длина отрезка, содержащего корень, не станет меньше заданной точности e. Тогда любое число, содержащееся между a и b можно принять за приближенное значение корня x с точностью до e.

ci=(a+b)/2- середина выбранного отрезка

f(a)*f(c)<0-условие принадлежности корня отрезку [a,c]

|b-a|
Для решения задачи необходимо определить отрезок, содержащий искомый корень. Для этого перепишем уравнение х3 + 0,5 x2 - 2=0 в виде х3 = - 0,5 x2 + 2.

Построив    графики функций y= х3 и y= -0,5 x2 + 2, можно определить, что исходное уравнение имеет единственный корень на отрезке [0,2].

 

 

 



3) программа

Program Pr1;

    Const e=0.00001;

    Var 

         a,b,c: real;

Function F(x:real):real;

  Begin

      F:=x*x*x+0.5*x*x-2;

   End;

BEGIN    {основная программа}

    a:=0;    b:=2;

    repeat

         c:=(a+b)/2;

         If f(a)*f(c)<0 then b:=c else a:=c;

    Until b-a
    Writeln(‘x=‘, (a+b)/2:8:5);

end.

Результат выполнения программы:   x=1.4505

4) тестирование

Для тестирования выбираются такие уравнения, у которых корень можно найти аналитически. Значения a  и b выбираются таким образом, чтобы [a,b] содержал искомый корень и притом только один.

№ теста

f(x)

a

b

Прогнозируемый результат

Полученный результат

1

x3 - 1

0

1.5

1

0.9999

2

x2 + 2x

-2.5

-1

-2

-1.9999

3

ex - 1

-0.5

1

0

0.0001

Ручная  трассировка:

исходные данные f(x)= х3 + 0,5 x2 - 2, a=0, b=2, E=0.1

c=(a+b)/2

f(a)*f(c)

a

b

b-a

b-a

(0+2)/2=1

f(0)*f(1)>0

1

2

1

false

(1+2)/2=1.5

f(1)*f(1.5)<0

1

1.5

0.5

false

(1+1.5)/2=1.25

f(1)*f(1.25)>0

1.25

1.5

0.25

false

(1.25+1.5)/2=1.38

f(1.25)*f(1.38)>0

1.38

1.5

0.12

false

(1.38+1.5)/2=1.44

f(1.38)*f(1.44)>0

1.44

1.5

0.06

true

x=(1.44+1.5)/2= 1.47



Пример 2.

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



1) постановка задачи

Дано: фигура, ограниченная y=x2  и y=2

Надо: найти площадь фигуры.

2) математическая модель

Метод Монте-Карло позволяет находить приближенно площадь произвольной фигуры.



Для этого фигура помещается внутрь прямоугольника или квадрата, площадь которого известна и равна S. Прямоугольник (квадрат) случайным образом заполняется N точками. Если внутрь фигуры F попали М точек, то отношение M/N приближенно равно отношению площадей SF/S.

= , отсюда SF =S*M/N.

В данном примере фигура, площадь которой необходимо найти, ограничена линией y=x2 и помещена в прямоугольник ABCD. AB=1, AD=2.

Для решения задачи необходимо задать: N - общее число точек, S - площадь прямоугольника, содержащего фигуру, x,y - координаты точки, выбранные случайным образом внутри прямоугольника (-1
Чтобы подсчитать количество точек (x,y), принадлежащих фигуре (переменная  M), необходимо проверить условие y>x2.

3) блок-схема



4) программа

Program Pr2;

  Var

       S, SF: real;

       M,N: integer;

Procedure MonteKarlo(N: integer; S: real; Var SF:real);

    Var

          M, I: integer;

          X,Y: real;

     Begin

        M:=0;

        For i:=1 to n do

              Begin

                 X:=Random(20)/10-1;

                 Y:=Random(10)/10;

                 If   y
              End;

        SF:=S*M/N;

End;

^ BEGIN    {основная программа}

    randomize;

    Write('N='); Readln(n); S:=2;

     MonteKarlo(N, S, SF);

     writeln('SF=', SF:6:3);

END.

Результат выполнения программы: при N=100    SF=1.226

5) тестирование

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

№ теста

N

S

X

Y

SF

1

1000

4

[-2,2]

[0,1]

1.204

2

1000

4

[-1,1]

[-1,1]

1.212

 



Пример 3.

Найти значение суммы + + + ... с точностью E=0.00001 и определить количество слагаемых этой суммы.

1) постановка задачи

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

Дано:






Найти: S, n такие, что



-



   < E

2) математическая модель



-

 

=



< E - условие прекращения суммирования

3) блок-схема



n- номер очередного слагаемого,    E - точность,   f - факториал  знаменателя,   S -сумма

4) программа

Program Pr3;

   Procedure Fakt(k: integer; Var f: integer);

       Var i: integer;

        Begin

              f:=1;

              For i:=1 to k do f:=f*i;

        End;

Var    S, E:  real;

         n, f: integer;

BEGIN {основная программа}

      S:=0;  n:=0;  f:=2;  E:=0.00001;

      while 1/f>=E do

          begin

               S:=S+1/f;   n:=n+1;   Fakt(2*(n+1),f);

          end;

      writeln(‘S=‘,s:8:5,’n=‘,n)

END.

Результат выполнения программы: S= 0.54308 n=4

5) тестирование

Для тестирования вычислим вручную значение суммы и количество слагаемых для различных значений Е.

№ теста

Проверяемый случай

Прогнозируемый результат

Полученный результат

S

N

S

N

1

Е=0.1

0.5

1

0.5

1

2

Е=0.01

0.54167

2

0.54167

2

1) Е=0.1                                              

1/2! = 1/2 = 0.5 >0.1 -суммируем          n=1                

1/4!= 1/24=0.04167 < 0.1 - завершаем суммирование                           

Результат :    S = 0.5    n=1                                                 

2) E=0.01

1/2! = 1/2 = 0.5 >0.01 -    суммируем           n=1

1/4!= 1/24=0.04167 > 0.01 - суммируем       n=2

1/6!= 1/720 =0.00139< 0.001- завершаем суммирование 

Результат : S=0.54167  n=2



Пример 4.

Вычислить значение многочлена p(x)=3,4х5 - 2х4 +5,7х3 -0,4х+3 при х=15,35 по схеме Горнера.

1) математическая  модель

Преобразуем многочлен anxn + an-1xn-1 + an-2xn-2... + a1x + a0, группируя его члены и вынося за скобки х:

anxn + an-1xn-1 + an-2xn-2 +... +а2х2 + a1x + a0 = (anxn-1 + an-1xn-2 + an-2xn-3 +... +а2х + a1)x + a0 = ((anxn-2 + an-1xn-3 + an-2xn-4 +... +а2)х + a1)x + a0 = …

Действуя таким образом, приведем многочлен к виду:

((...(anx + an-1)x + an-2)x +...)x +a1)x +a0. Тогда последовательно находятся:

p= an

p= anx + an-1

p=(anx + an-1)x + an-2

...................................................

p= (...(anx + an-1)x + an-2)x +...)x +a1)x +a0

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

p=p*x + ak

2) программа

Program Pr4;

   Сonst

          n=5;

   Type

          mas=array[1..100] of real;

   Var

       a: mas;   p, x: real;     k: integer;

  Procedure Gorner(x: real; a: mas; Var p: real);

      Var

           i: integer;

     Begin

          p:=a[n];    For i:=n-1 downto 0 do

                                p:=p*x+a[i];

     End;

BEGIN     {основная   программа}

      Writeln('Введите коэффициенты'); For k:=0 to n do Readln(a[k]);

      Write('Введите x '); Readln(x); Gorner(x,a,p);

      Writeln('p=',p:6:3);

END.

Результат выполнения программы: 

р=2807059.189

3) тестирование


№ теста

Проверяемый случай

Прогнозируемый результат

Полученный результат

1

х=0

р(0)=3

р(0)=3

2

х=1

р(1)=9.7

р(1)=9.7

3

х=-1

р(-1)=-7.7

р(-1)=-7.7



Пример 5.

Найти площадь криволинейной трапеции, ограниченной линиями:

y=f(x),  x=a,  x=b, если

f(x) = , a=0,  b=4.

 

1) математическая модель

Можно найти приближенное значение площади криволинейной трапеции, ограниченной линиями y=f(x), x=a, x=b, используя метод трапеций. Для этого разобьем отрезок [a, b] на n равных частей и через точки разбиения проведем вертикальные прямые до пересечения с графиком функции y=f(x). Соединив точки пересечения отрезками, получим n прямоугольных трапеций с высотой h= .

Тогда SABCD = , где Si = . Чем больше n, тем точнее результат вычисления.  =h (+++++...++) =

= h(+f(x1) +f(x2)+...+ f(xn-1) +)

2) программа

Program Pr5;

    Function F(x: real): real;

      Begin

            F:=sqrt(x);

     End;

   Var

       a, b, h, x, s: real;    n: integer;

BEGIN  {основная  программа}

      write('a, b = '); Readln(a, b); write('n = '); Readln(n);

      h:=(b-a)/n; s:=(f(a)+f(b))/2;   x:=a+h;

      while x
          begin

               s:=s+f(x); x:=x+h;

         end;

      writeln('s=', s*h:8:4);

END.

3) тестирование

Исходные данные следует подобрать таким образом, чтобы площадь криволинейной трапеции можно было вычислить аналитически (площадь криволинейной трапеции  равна значению определенного интеграла)

№ теста

Проверяемый случай

Прогнозируемый результат

Полученный результат

f(x)

a

b

1

x2

0

1

0,33

0,3333

2

ex

-1

1

2,35

2,3504

 

Поиск и сортировка данных

Пример 1.

Сформировать массив a[1..10] случайным образом и определить, содержит ли он заданное число.

Пример 2.

Сформировать упорядоченный по возрастанию массив a[1..10] и определить, содержит ли он введенное число (методом бинарного поиска).

Пример 3.

Сформировать массив a[1..n] случайным образом и удалить из него элемент c индексом m.

Пример 4.

Сформировать массив a[1..n] случайным образом и вставить на m-ое место элемент k (m и k вводятся с клавиатуры).

Пример 5.

Сформировать массив a[1..n], элементы которого выбираются случайным образом из интервала [0,50]. Удалить из него те элементы, которые больше 40.

Пример 6.

Сформировать массив a[1..20], элементы которого выбираются случайным образом и отсортировать его по неубыванию методом “пузырька”.

Пример 7.

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

Пример 8.

Определить, какое максимальное число можно получить из цифр введенного натурального числа.

Пример 1.

   Сформировать массив a[1..10] случайным образом и определить, содержит ли он заданное число.

    Используемые  переменные: а - массив, i - номер очередного элемента массива,  k - ключ поиска

Program Pr1;

  Var

       a: array[1..10] of integer;

       k: real; i: integer;

BEGIN

     Randomize;

     for i:=1 to 10 do

          begin         {формирование массива}

                a[i]:=random(20); write(a[i]:4);

         end;

     writeln;   {перевод курсора на новую строку}

     write(' Введите ключ поиска: '); readln(k);

 

{перебор элементов массива и сравнение их с ключом поиска}

     i:=1; while (a[i]<>k) and (i<=10) do i:=i+1;

     if    i<=10   then    writeln('Элемент найден. Его номер - ',i)  else writeln('Элемент не найден');

END.



Пример 2.

    Сформировать упорядоченный по возрастанию массив a[1..10] и определить, содержит ли он введенное число (методом бинарного поиска).

    В программе использованы следующие обозначения: l - левая граница, r - правая граница, m - номер серединного элемента.

Program Pr2;

   Var

       a: array[1..10] of integer;

       k: real;    l, r, m, i: integer;

BEGIN

            {формирование и вывод массива}

     for i:=1 to 10 do

          begin

               a[i]:=2*i-1; write(a[i]:4);

     end;  

     writeln;

     write('Введите ключ поиска'); readln(k);

      l:=1; r:=10;    {установка начальных границ поиска}

      m:=(l+r) div 2;     {выбор серединного элемента}

                  {поиск заданного элемента}

      while (l<=r) and (k<>a[m]) do

             begin       

                   if     k
                   m:=(l+r) div 2;

            end;

     if   k=a[m]   then writeln('Элемент найден. Его номер - ',m)  else writeln('элемент не найден');

END.



Пример 3.

Сформировать массив a[1..n] случайным образом и удалить из него элемент c заданным индексом.

    Используемые переменные: а - массив, n - размерность массива,   m - индекс удаляемого элемента.

Program Pr3;

   Var 

       a: array[1..100] of integer;

       m, i, n: integer;

 

{процедура, удаляющая элемент с заданным индексом}

Procedure Udal(m: integer);

   Var

         j: integer;

   Begin

        if   m<>n   then    for j:=m to n-1 do a[j]:=a[j+1];

        n:=n-1;

   End;

BEGIN    {основная программа}

     n:=15;    randomize;

             {формирование и вывод элементов массива}

     for i:=1 to n do

           begin     

                a[i]:=random(50); write(a[i]:4);

           end;

    writeln;

    write('Введите номер удаляемого элемента '); readln(m);

    Udal(m);    {удаление элемента с индексом m }

    for i:=1 to n   do write(a[i]:4);    { просмотр элементов массива}

    writeln

END.

 



Пример 4.

Сформировать массив a[1..n] случайным образом и вставить на  m-ое место элемент k (m и k вводятся с клавиатуры).

Program Pr4;

   Var

        a: array[1..100] of integer;

        k, m, n, i: integer;

 

{процедура, вставляющая элемент k на m-ое место}

Procedure Vstavka(k, m:integer);

   Var

         j: integer;

Begin

       if    m<>n+1   then    for j:=n downto m do a[j+1]:=a[j];

       a[m]:=k; n:=n+1;

End;

BEGIN        {основная программа}

         write('Введите количество элементов массива’); readln(n);

         randomize;   

         {формирование и вывод массива}

         for i:=1 to n do

              begin

                    a[i]:=random(20)-10; write(a[i]:4);

              end;

         writeln;  write('Введите число и его номер'); readln(k,m);

         Vstavka(k,m);      {вставка элемента k на m-ое место}

          for i:=1 to n do write(a[i]:4); {просмотр массива}

          writeln; readln

END.

 



Пример 5.

Сформировать массив a[1..n], элементы которого выбираются случайным образом из интервала [0, 50]. Удалить из него те элементы, которые больше 40.

Program Pr5;

    Var

          a: array[1..100] of integer;

          m, i, n: integer;

{процедура, удаляющая элемент с указанным   индексом}

Procedure Udal(m: integer);

    Var

          j: integer;

Begin

         if    m
         n:=n-1;

End;

             

BEGIN    {основная программа}

      write(‘n=‘); readln(n); randomize;

                 {формирование и вывод массива}

      for i:=1 to n do

           begin

                a[i]:=random(50); write(a[i]:4);

           end;

      writeln;

              {перебор и удаление элементов массива, больших 40}

      i:=1;   while     i<=n    do   if a[i]>40    then   Udal(i)     else i:=i+1;

      for i:=1 to n do write(a[i]:4);      {просмотр массива}

      readln

END.

 



Пример 6.

Сформировать массив a[1..20], элементы которого выбираются случайным образом и отсортировать его по неубыванию методом “пузырька”.

Program Pr6;

  Var

        a: array[1..20] of integer;

        i, j, t :  integer;

BEGIN

          {формирование исходного массива}

      for i:=1 to 20 do

           begin

                a[i]:=random(100); write(' ',a[i]);

           end; 

      writeln;

                   {сортировка}

      for i:=1 to 19 do

           for j:=i+1 to 20 do

                if    a[i]>a[j]   then

                     begin

                           t:=a[i]; a[i]:=a[j]; a[j]:=t;

                     end;

            {вывод отсортированного массива}

      for i:=1 to 20 do write(a[i]:4);

END.



Пример 7.

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

Program Pr7;

   Const

           n=5;

   Type

        mas=array[1..n,1..n] of integer;

   Var

        a: mas;

        i, j, k, m, t: i nteger;

BEGIN

         {формирование и вывод на экран матрицы}

       for i:=1 to n do begin

            for j:=1 to n do begin

                 a[i,j]:=random(50); write(a[i,j]:3);

            end;

            writeln;

      end;

      writeln;

     {сортировка матрицы по строкам}

         for i:=1 to n do

              for k:=1 to n-1 do

                   for    m:=k+1 to n do

                          if    a[i,k]>a[i,m]   then

                               begin   

                                    t:=a[i,k]; a[i,k]:=a[i,m]; a[i,m]:=t;

                               end;

{вывод на экран отсортированной матрицы}

         for   i:=1 to n do 

                begin

                    for    j:=1 to n do write(a[i,j]:3);

                    writeln;

               end;

         readln

END.



Пример 8.

    Определить, какое максимальное число можно получить из цифр введенного натурального числа.

    Для решения задачи достаточно отсортировать по невозрастанию цифры введенного числа (число вводится как строка цифр)

Program Pr8;

    Var

        St: string;

        i, j, n: integer; c:char;

BEGIN

       write('Введите число '); readln(St);

       n:= length(st); {количество цифр}

       {сортировка}

       for   i:=1   to n-1 do

            for     j:=i+1 to n do

                    if    st[i]
                         begin

                            c:=st[i];   st[i]:=st[j];   st[j]:=c;

                         end;

     writeln(st); {вывод отсортированной строки}

readln

END.

Структуры данных

Демонстрация работы стека

Пример 1.

Сформировать стек из N натуральных чисел, просмотреть его и уменьшить нечетные его элементы на 1.

Пример 2.

Сформировать очередь из N натуральных чисел, просмотреть ее и найти сумму второго и четвертого элементов очереди. Результат поместить с очередь.

 



Пример 1.

Сформировать стек из N натуральных чисел, просмотреть его и уменьшить нечетные его элементы на 1.

    Работа стека моделируется с помощью одномерного массива S[1..N]. Для стека определены операции: инициализация стека, добавление элемента в стек, извлечение элемента из стека, просмотр стека. Операции оформлены в программе как процедуры. St - передаваемый или извлекаемый из стека элемент, i - номер последнего элемента в стеке.

Program Stek;

     Var

            s: array[1..100] of integer;

             i, j, n, st: integer;

Procedure IniSt; {инициализация стека}

    Begin

             Write('Емкость стека'); Readln(n); i:=0;

    End;

Procedure DobSt (st: integer); {добавление элемента в стек}

   Begin

         If    i
               begin

                   i:=i+1; s[i]:=st;

               end

                      else write('Стек переполнен');

  End;

Procedure IsvSt (Var st:integer);   {извлечение элемента из стека}

     Begin

          If    i<>0    then

               begin

                     st:=s[i]; i:=i-1;

               end

                         else   write('Стек пуст');

End;

Procedure ProsmSt; {просмотр стека}

    Var

           k: integer;

   Begin

          Writeln('ПРОСМОТР СТЕКА');

           If   i<>0   then   For k:=i downto 1 do Writeln(k,' -й элемент: ', s[k])

                         else    Writeln('-----СТЕК ПУСТ---');

          Readln;

  End;

{основная программа}

BEGIN

       IniST;      {инициализация стека}

      {заполнение стека введенными элементами}

      For j:=1 to n do

            Begin

                  write('Ввод', j,'-го элемента'); readln(st); DobSt(st);

           End;

     ProsmSt;     {просмотр стека}

    {извлечение и проверка элементов стека}

     Repeat

               IsvSt(st); If st mod 2 =1 then st:=st-1; Writeln(st);

     until i=0;

END.



Пример 2.

    Сформировать очередь из N натуральных чисел, просмотреть ее и найти сумму второго и четвертого элементов очереди. Результат поместить с очередь.

    Работа очереди моделируется с помощью одномерного массива О[1..N]. Для очереди определены операции: инициализация очереди, добавление элемента в очередь, извлечение элемента из очереди, просмотр очереди, которые оформлены в программе как процедуры. t - передаваемый или извлекаемый из стека элемент, Ob - номер первого элемента в очереди, Oe - номер последнего элемента в очереди.

Program Ochered;

      Var

           O: array[1..100] of integer;

           t, S, Ob, Oe, n, j: integer;

Procedure IniO; {инициализация очереди}

   Begin

          Write('Емкость очереди'); Readln(n);

           Ob:=0; Oe:=0;

   End;

Procedure DobO(t: integer); {добавление элемента в очередь}

     Begin

          If    Oe<>N    then

                begin

                      Oe:=Oe+1; o[Oe]:=t;

                end

                             else   write('Переполнение');

    End;

Procedure IsvO(Var t:integer); {извлечение элемента из очереди}

    Begin

          If    Ob<>Oe    then

               begin

                    Ob:=Ob+1;   t:=o[Ob];

               end

                                else   write('Очередь пуста');

   End;

Procedure ProsmO; {просмотр очереди}

     Var

           k: integer;

  Begin

          Writeln('ПРОСМОТР ОЧЕРЕДИ');

          For    k:=Ob+1 to Oe do writeln(k,' -й элемент ',o[k]);

          Writeln('-----------------------------------------------------');

          Readln;

  End;

BEGIN {основная программа}

        IniO;

       { заполнение очереди}

        For   j:=1 to n do

              begin

                   Write('Ввод', j,'-го элемента '); Readln(t);  DobO(t);

              end;

       ProsmO;

       S:=0;    IsvO(t);            {извлечение первого элемента очереди}

       IsvO(t);  S:=S+t;         {извлечение и суммирование второго элемента}

       IsvO(t);                      {извлечение третьего элемента очереди}

       IsvO(t); S:=S+t;          {извлечение и суммирование четвертого элемента}

       t:=S; DobO(t);           {добавление суммы в очередь}

       ProsmO; Readln

END.



Построение графических изображений

 

Основные графические процедуры и функции

1. INITGRAPH ( “драйвер” , “режим” , “путь” ) - инициирует графический режим работы адаптера .

“драйвер” , “режим” - переменные типа integer

“путь” - string

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

Uses Graph;

......

Var Dr , Reg : integer ;

.....

Begin

......

Dr : = 0 ; INITGRAPH (Dr , Reg , ‘f:\turbo7\bgi’) ;

2. CLEARDEVICE - очищает графический экран .

3. CLOSEGRAPH - прекращает работу в графическом режиме и восстанавливает текстовый .

4. GETMAXX , GETMAXY - функции , возвращающие значения максимальных координат в текущем режиме .

5. MOVETO ( X , Y ) - устанавливает новое текущее положение указателя

   X , Y - координаты указателя (тип integer)

6. MOVEREL ( DX , DY ) - устанавливает новое положение указателя в текущих координатах .

   DX , DY - приращение координаты (тип integer)

7. PUTPIXEL( X , Y, “цвет” ) - выводит точку .

   X,Y- координаты точки (тип integer)

Пример 1.

Изображение   звёздного неба.

                    Количество звёзд - 200,  X, Y - координаты звезды, которые выбираются случайным образом .

Program Pr1;

     Uses Graph;

     Var

          X , Y :  integer ;

          I, Dr, Reg : integer ;

BEGIN

        Dr : = 0; Initgraph (Dr, Reg, ‘f:\tpas7\bgi’);  {установка  графического режима }

        Randomize;

        { изображение звезд в случайном месте случайным цветом}

       For  I : = 1 to 200 do

              Begin

                     X:= Random(GetMaxX); Y:= Random(GetMaxY);

                     Putpixel(X, Y, Random(16));

             end ;

      Readln {задержка до нажатия клавиши ENTER}

END.

8. LINE (X1,Y1, X2 Y2) - линия с концами в точках X1,Y1 и X2,Y2

9. LINETO (X , Y) - вычерчивает линию от текущего положения до положения заданного новыми координатами .

10. LINEREL (dX , dY) - вычерчивает линию от текущего положения до положения заданного приращением координат .

    dX, dY - приращения координат

11. SETLINESTYLE (“вид” , “образец” , “толщина”) - устанавливает новый стиль вычерчиваемых линий .

"Вид" : 0 - сплошная                                           "Толщина:"    1 - 1 пиксель

          1 - точечная                                                                     3 - 3 пикселя

           2 - штрих пунктирная

           3 - пунктирная

           4 - вид определяется пользователем

“Образец” - для линий, вид которых определяется пользователем. Два байта параметра образца определяет вид линии: 1-соответствует светящемуся пикселю , 0 - несветящемуся. Например, число 170 можно представить в двоичной системе       170 = 0000000010101010

Линия, заданная процедурой SETLINESTYLE(4,170,1) будет иметь вид  ....   ....   ....   ....    ....   ....  ....

Примечание: если “вид” принимает значения 0,1,2 или 3, параметру “образец” следует присвоить значение 0.

Следующий пример демонстрирует различные стили линий .

Пример 2.

       Программа строит 5 линий различного стиля. 

Вид линии (переменная I) меняется от 0 до 4. При I=4 стиль линии определяет пользователь, поэтому    образец (переменная Р) принимает значение, например, 170.

Program Pr2;

    Uses Graph ;

    Var

         Dr , Reg , I , P : integer ;

BEGIN

        Dr : = 0 ; Initgraph (Dr , Reg , ‘f:\tpas7\bgi’) ;

        For  I : =0 to 4 do

             Begin

                  If     i = 4    then p : = 170 else p : = 0;

                  Setlinestyle (i , p , 1);

                  Line (100 , 50 *(i + 1) , 400 , 50 *(i + 1)) ;

            End;

END.

12.RECTANGLE (x1 , y1 , x2 , y2) – изображает прямоугольник

x1 , y1 - левый верхний угол , x2 , y2 - правый нижний угол .

13. BAR3D (x1 , y1 , x2 , y2 , “глубина” , “верх.грань”) - трёхмерное изображение параллелепипеда с закрашенной передней гранью .

      x1 , y1 - левый верхний угол передней грани, x2 , y2 - правый нижний угол.

       “верх.грань” принимает два значения:  TopON - изображается верхняя грань или TopOFF - не изображается

14. CIRCLE (X , Y, R) – изображает окружность,

      X , Y - координаты центра, R - радиус выраженный в пикселях .

Пример 3.

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

     В программе X, Y - координаты центра маленькой окружности, которые определяются как координаты точки, лежащей на окружности с центром в точке (320,200) и радиуса 150. Угол поворота равен Pi/10.



Program Pr3;

    Uses Graph;

    Var

         F : real;

         I , X , Y , Dr , Reg : integer;

BEGIN

       Dr:=0; Initgraph(Dr, Reg,   'f:\tpas7\bgi');

       F:=0;   While    F<=2*Pi  do

                       Begin

               {вычисление координат точки, лежащей на окружности с центром (320,200) и радиусом 150} 

                            X:= Trunc(320 + 150*cos(F)) ;     

                            Y:= Trunc(200 - 150*sin(F)) ;     

                {построение маленькой окружности с центром (X,Y)}

                            Circle (x, y, 30) ;             

                            F:= F + Pi/10;      {увеличение угла поворота}

                      End;

      Readln;

END.

15. ARC ( X , Y, “нач.угол” , “кон.угол” , “радиус”) - изображает дугу окружности

      X , Y – центр окружности, “радиус” –радиус окружности

       “нач.угол” , “кон.угол”- значение начального и конечного углов дуги, выраженные в градусах

16. ELLIPSE (X , Y, “нач.уг.” , “кон.уг.” , RX , RY ) - изображает дугу эллипса

      RX-горизонтальный радиус,  RY-вертикальный радиус

 

Пример 4. Построение изображения цилиндра.

 

Program Pr4;

Uses Graph;

Var

      Dr, Regim: integer;

BEGIN

     Dr:=0; Initgraph(Dr, Regim,'f:\tpas7\bgi');

     Ellipse(320,100,0,360,120,40);      {верхнее основание}

     Ellipse(320, 380, 0, 360, 120, 40); {нижнее основание}

     Line(200, 100, 200, 380);     Line(440, 100, 440, 380);

     Readln;

END.

 

17. SETCOLOR ( “цвет” ) – текущий цвет для вывода линий и символов .

       Значения цветов :

          0 – черный            1 – синий              2 – зелёный            3 – голубой       

          4 – красный           5 – фиолетовый    6 – коричневый    7 – св. серый

          8 – темно-серый   9 – ярко-синий     10 – ярко-зел.        11 – ярко-голубой

          12 – розовый        13 – малиновый     14 – желтый            15 – белый

18. SETBKCOLOR (“цвет”) - цвет фона .

19. SETFILLSTYLE ( “штриховка” , “цвет” ) - тип и цвет заполнения .

Типы штриховки :    0 - отсутствует (фоном)    1 - сплошная            2 - линиями

                                  3 - ///                                       4 - утолщён.////      5 -\\\

                                 6 - утолщён.\\\\                       7 - +++                     8 - ***

                                 9 - #                                       10 - редкие точки    11 - частые точки

                    12- опрределяется. пользователем

20. FLOODFILL ( X ,Y , С )- штрихует замкнутую область.

      X ,Y - координаты точки, лежащей внутри замкнутой области.

      С - цвет граничной линии.

     Тип штриховки должен быть определён предварительно процедурой SETFILLSTYLE, в которой параметр “цвет” может не совпадать с параметром  С процедуры FLOODFILL .

Пример 5.

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

     Иcпользуемые переменные:  X,Y - координаты центра окружности,    R -  радиус,   C - цвет, T - стиль штриховки.

Program Pr5;

     Uses Graph;

     Var

         Dr, Reg, I , X , Y , C , T, R : integer ;

BEGIN

  Randomize ; Dr : = 0 ; Initgraph (Dr , Reg, 'f:\tpas7\bgi');

  For   i : =1 to 20   do

      Begin

     {выбор координат цетра окружности таким образом,   чтобы самая большая окружность поместилась на экране}

          X:= Random(GetMaxX - 100) + 50;     

          Y:= Random(GetMaxY - 100) + 50 ;   

           R:= Random(40) + 10 ;   {выбор радиуса от 10 до 50}     

          C:= Random (15) + 1 ;     {выбор цвета от 1 до 15}

          T:= Random(10) + 1 ;       {выбор стиля штриховки от 1 до 10}

          Setcolor(C);                      {установка цвета изображения}

          SetFillStyle (T , C);         {установка стиля и цвета штриховки}

          Circle (X, Y, C);                  {построение окружности}

          Floodfill (X, Y, C) ;                {закраска окружности}

      End;

   Readln;

END.

21. PIESLISE (X , Y , “нач. угол” , “кон. угол” , R) - вычерчивает и штрихует сектор окружности . Удобно использовать при построении круговых диаграмм .

        X , Y – центр окружности, R –радиус окружности

       “нач.угол” , “кон.угол”- значение начального и конечного углов дуги, выраженные в градусах

22. BAR ( X1 , Y1 , X2 , Y2 ) - штрихует прямоугольную область экрана

Пример 6.

Пострение изображения:      

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

Program Pr6;

   Uses Graph;

   Var

      I, J, Dr, Reg: integer;

BEGIN

       Dr:=0; Initgraph(Dr, Reg, 'f:\tpas7\bgi');

       SetFillStyle(2,15); {выбор стиля закраски кругов}

       For I:=1 to 3 do

             For J:=1 to 4 do

                   Begin

                       Circle(60*j,60*i,30);

                       Iif    (I+J) mod 2=0 then FloodFill(60*J,60*I,15);

                   End;

     Readln;

END.

 



Построение графиков функций и диаграмм

Пример 1.  

Построение графика функции у = х2 - 2 точками ( x изменяется от -3  до 3 с шагом 0.1).

Пример 2.

Построение графика функции у = х2 - 2 отрезками ( x изменяется от -3  до 3 с шагом 0.1).

Пример 3.

Построение кривой, заданной уравнением в полярных координатах:  =a/cos( /3), a > 0 , 04p

Пример 4.

    На экзамене по информатике 25% студентов получили “5” , 45% - - “4”, 30% - “3” . Построить круговую диаграмму .

Пример 5.

    Построить столбчатую диаграмму, отображающую ежегодную прибыль предприятия (в тыс. руб.) за последние 10 лет. Данные хранятся в массиве А[1..10]. Под каждым столбцом вывести числовое значение.

 



Пример 1.  

Построение графика функции у = х2 - 2 точками ( x изменяется от -3  до 3 с шагом 0.1).

Для перехода от естественных координат к экранным воспользуемся формулами:

Xэ = Ox + Мx*x.

Yэ = Oy - Мy*y ,

где х , у - естественные координаты, Xэ , Yэ - экранные координаты, Ox, Oy - координаты центра, Mx, My - масштаб, т.е. длина единичных отрезков в пикселях. Для преобразования координат к целому типу используется функция Trunc.

Program PR1;

Uses Graph;

Var

   Dr, Reg, I, Ox, Oy, Mx, My: integer;

    X, Y: real;

BEGIN

               Dr:=0; Initgraph(Dr, Reg, 'f:\tpas7\bgi');

               Ox:=320; Oy:=300;  Mx:=50;   My:=40;

               Line(0, oy, 640, oy);      {ось Х}

               Line(ox, 0, ox, 480);     {ось Y}

              X:=-3; {начальное значение Х}

      {построение графика}

    While  X<=3    do

         Begin

             Y:=Sqr(x)-2;

             Putpixel(Trunc(Ox+Mx*X), Trunc(Oy-My*Y),15);

             X:=X+0.1;

        End;

   Readln;

         END.

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

Пример 2.

Построение графика функции у = х2 - 2 отрезками ( x изменяется от -3  до 3 с шагом 0.1).

Program PR2;

Uses Graph;

Var

Dr, Regim, I, Ox, Oy, Mx, My: integer;

       X, Y: real;

BEGIN

     Dr:=0; Initgraph(Dr, Regim,'f:\tpas7\bgi');

     Ox:=320; Oy:=300; Mx:=50; My:=40;

     Line(0, Oy, 640, Oy); Line(Ox, 0, Ox, 480); {оси координат}

          {разметка оси Оx}

     For   I:=-3 to 3 do

           begin

              X:=Ox+Mx*I;   Line(Trunc(X), Oy-5, Trunc(X), Oy+5);

          end;

         {разметка оси Оy }

     For   I:=-2 to 7 do

             begin

                  Y:=Oy-My*I;   Line(Ox-5, Trunc(Y), Ox+5, Trunc(Y));

            end;

   X:=-3; Y:=Sqr(X)-2;  {координаты начальной точки}

  Moveto(Trunc(Ox+Mx*X), Trunc(Oy-My*Y)); {перемещение указателя в начальную точку}

    {построение графика}

  While   X<=3 do

       begin

           Y:=sqr(x)-2;  Lineto(trunc(ox+mx*x),trunc(oy-my*y));

           X:=X+0.1;

       end;

  Readln;

END.

Пример 3.

Построение кривой, заданной уравнением в полярных координатах:

=a/cos( /3), a > 0 , 04



Каждая точка кривой, заданной уравнением в полярных координатах f, определяется парой чисел и, где  - угол поворота,  - радиус

 

Для перехода от полярных к декартовым координатам воспользуемся формулами:

x =  * cos

y = * sin  , где x, y -естественные координаты

Переходя к экранным координатам, получим соотношения:

xэ = 0x + Mx**cos 

yэ = 0y - My**sin

Program PR3 ;

    Uses Graph;

    Var

           Dr, Regim, Ox, Oy, Mx, My: integer;

           X, Y, F, a, R: real;

BEGIN

    Dr:=0;  Initgraph(Dr, Regim, 'f:\tpas7\bgi');

    Ox:=320; Oy:=240; Mx:=40; My:=40;

         {оси координат}

    Line(0, oy, 640, oy); Line(ox, 0, ox, 480);

    F:=0; a:=1;

          {построение графика}

    While  F<=4*Pi do

           Begin

               R:=a/cos(F/3); {вычисление радиуса}

                 {переход к деартовым экранным   корродинатам}

              X:=Ox+Mx*R*cos(F); Y:=Oy-My*R*sin(F);

               Putpixel(Trunc(X), Trunc(Y),10);   {изображение точки}

                F:=F+0.01;   {изменение угла  поворота}

           End;

  Readln

END.

Пример 4.

    На экзамене по информатике 25% студентов получили “5” , 45% - - “4”, 30% - “3” . Построить круговую диаграмму .

 

     

В программе использованы следующие переменные: O5, O4 - количество студентов (в процентах), получивших соответственно “5” и “4”. f1 - угол кругового сектора, обозначающего долю студентов, получивших “5”. f2 - угол кругового сектора, обозначающего долю студентов, получивших “4”.

 

Program PR4;

     Uses Graph;

     Var 

          Dr, Regim, f1, f2, O5, O4: integer

           f: real; ;

BEGIN

O5:=25; O4:=45;

Dr:=0;  Initgraph(dr, regim,'f:\tpas7\bgi');

f1:=Trunc(360/100*O5); f2:=Trunc(360/100*O4);

{построение первого сектора}

SetColor(10); SetFillStyle(2,10); Pieslice(320, 240, 0, f1, 100);

{построение второго сектора}

SetColor(3); SetFillStyle(5,3); Pieslice(320, 240, f1, f1+f2, 100);

{построение третьего сектора}

SetColor(14); SetFillStyle(7,14); Pieslice(320,240,f1+f2,360,100);

Readln;

END.

Пример 5.

    Построить столбчатую диаграмму, отображающую ежегодную прибыль предприятия (в тыс. руб.) за последние 10 лет. Данные хранятся в массиве a[1..10]. Под каждым столбцом вывести числовое значение.

 

Этапы решения задачи:

1. Выбор максимального элемента массива Ma.

2. Определение коэффициента пропорциональности k=h/Ma, где h - высота экрана (коэффициент пропорциональности используется для вычисления высоты столбцов и гарантирует, что они не выйдут за пределы экрана).

3. Построение прямоугольников, ширина которых постоянна, а высота определяется как произведение соответствующего a[i] на коэффициент пропорциональности k.

Program PR5;

   Uses Graph;

    Const

             h=460;

             a: array[1..10] of integer= (565, 440, 480, 590, 400, 510, 580,655, 780, 715);

    Var

            Dr, Reg,  I, Ma, X, Y: integer;

            St: string[3];    k: real;

BEGIN

{выбор максимального}

    Ma:=a[1];

    For   I:=2 to 10 do

            If     a[i]>Ma   then   Ma:=a[i];

   k:=h/Ma; {коэффициент пропорциональности}

   Dr:=0; Initgraph( dr,reg,'f:\tpas7\bgi');

   Line(0, h, 640, h);

   SetFillStyle(4,3); {выбор стиля и цвета закраски}

   {построение   диаграммы}

   X:=20;

   For   I:=1 to 10 do

       begin

          Y:=Trunc(a[i]*k); Bar(x, h-y, x+30, h);

          Str(a[i], St); OutTextXY(x+5, 470, St); {вывод a[i]}

           x:=x+60;

        end;

Readln;

END.




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

^ Основные этапы решения задач

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

математическую модель;

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

программу;

проверку результатов ее выполнения.

Вариант 1

Найти площадь криволинейной трапеции, ограниченной линиями y=ex, х=0, х=1 (методом трапеций) при n = 5, 10, 100, 1000.

Найти сумму ряда с точностью 0,00001 и определить количество слагаемых этой суммы:

            1/(1+2) + 1/(1+2+3) +...

         Для нахождения знаменателя напишите функцию пользователя.



Вариант 2.

1. Найти значение выражения по схеме Горнера:

(p(2.7) + p(4))/2,     где    p(x)=5x5 +9x4 - 2.6x3 + x2 +11.4x + 0.9;

2. Вычислить значение суммы с точностью Е=0.0001

S =1/2! + 1/3! +  ...

  Для нахождения знаменателя напишите функцию пользователя.



Вариант 3.

1. Вычислить площадь криволинейной трапеции, ограниченной линиями: y=(x-4)2 , x=1, x=4. Выполнить вычисления для n=100,500,1000.

2. Вычислить значение суммы с точностью Е=0.0001

S =  1/(1+2) - 1/(1+2+3) + ...

  Для нахождения знаменателя напишите функцию пользователя.



Вариант 4.

1. Найти значение выражения по схеме Горнера:

p(1.7) + p(4.8),     где    p(x)=7x5 +9x4 - 2.6x3 + 3x2 +11.4x - 0.9;

2. Вычислить значение суммы с точностью Е=0.00001

S = 1/2! - 1/4! + ...

Для нахождения знаменателя напишите функцию пользователя.



Вариант 5.

1. Вычислить площадь криволинейной трапеции, ограниченной линиями: y=ln(x-1), x=2, x=4. Выполнить вычисления для n=100,200,1000.

2. Вычислить значение суммы с точностью Е=0.000001

S = 1/(1+2!) + 1/(2+3!) + ...

Для нахождения знаменателя напишите функцию пользователя.



Вариант 6.

1. Найти значение выражения по схеме Горнера:

2p(7) + p(2)/2,     где    p(x)=15x5 +9x4 - 2x3 + x2 +11.4x - 9;

2. Вычислить значение суммы с точностью Е=0.001

S =  1/(1+3) - 1/(1+3+5) + ...

  Для нахождения знаменателя напишите функцию пользователя.



Вариант 7.

1. Вычислить площадь криволинейной трапеции, ограниченной линиями: y=|2cos x +1| , x=0, x= . Выполнить вычисления для n=100,500,1000.

2. Вычислить значение суммы с точностью Е=0.00001

S = 1/3! - 1/5! + ...

Для нахождения знаменателя напишите функцию пользователя.



Вариант 8.

1. Найти значение выражения по схеме Горнера:

p(1.7) + p(8)/2,     где    p(x)=19x4 - 0.6x3 +5x2 +11.4x - 10.9;

2. Вычислить значение суммы с точностью Е=0.00001

S = 1/(2+3!) +1/(3+5!) + ...



Вариант 9.

1. Вычислить площадь криволинейной трапеции, ограниченной линиями: y=|3sinx-1|, x= /2, x=2 . Выполнить вычисления для n=100,200,500.

2. Найти сумму ряда с точностью 0,00001 и определить количество слагаемых этой суммы:

            1/(2+4) + 1/(2+4+6) +...

         Для нахождения знаменателя напишите функцию пользователя.



Вариант 10.

1. Найти значение выражения по схеме Горнера:

2p(0.7) + 3p(2),     где    p(x)=5x5 + x4 - 0.6x3 + 2x2 + x - 2.9;

2. Вычислить значение суммы с точностью Е=0.0001

S = 1/2! - 1/4! + ...

  Для нахождения знаменателя напишите функцию пользователя.



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




оставить комментарий
страница1/4
Дата02.10.2011
Размер0,79 Mb.
ТипМетодическое пособие, Образовательные материалы
Добавить документ в свой блог или на сайт

страницы:   1   2   3   4
отлично
  1
Ваша оценка:
Разместите кнопку на своём сайте или блоге:
rudocs.exdat.com

Загрузка...
База данных защищена авторским правом ©exdat 2000-2017
При копировании материала укажите ссылку
обратиться к администрации
Анализ
Справочники
Сценарии
Рефераты
Курсовые работы
Авторефераты
Программы
Методички
Документы
Понятия

опубликовать
Загрузка...
Документы

Рейтинг@Mail.ru
наверх