Некоммерческое Акционерное общество

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

Кафедра «Компьютерные технологии»

 

 

 

 

ПРОГРАММИРОВАНИЕ НА АЛГОРИТМИЧЕСКИХ ЯЗЫКАХ

Часть 1

Методические  указания к лабораторным работам  для студентов всех видов обучения  специальности

 5В070400 - «Вычислительная техника и программное обеспечение»

 

 

 

Алматы, 2011 

СОСТАВИТЕЛИ: З.К.Куралбаев, З.А.Акижанова. «Программирование на алгоритмических языках». Часть 1. Методические  указания к лабораторным работам  для студентов всех видов обучения  специальности 5В070400 - «Вычислительная техника и программное обеспечение».– Алматы: АУЭС, 2011. – 30 с. 

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

Методические указания предназначены для студентов всех видов обучения специальности 5В070400 - «Вычислительная техника и программное обеспечение».

Литература – 11 назв.

 

Рецензент: канд. техн. наук Е.Г. Сатимова

 

Печатается по  плану издания некоммерческого акционерного общества «Алматинский университет энергетики и связи» на 2011 г.

 

 

© НАО «Алматинский университет энергетики и связи», 2011 г.

 

Содержание

 

Введение                                                                                                  

4

Лабораторная работа № 1. Разработка алгоритмов и

 

программ циклов с известным числом повторений                              

4

Лабораторная работа № 2. Разработка алгоритмов и

 

программ циклов с неизвестным числом повторений                                 

9

Лабораторная работа № 3. Алгоритмы и программы

 

действий над массивами                                                                         

13

Лабораторная работа № 4. Использование функций и

 

процедур в программировании                                                            

17

Лабораторная работа № 5. Алгоритмы и программы

 

 обработки символов и строк                                                                 

20

Лабораторная работа № 6.  Работа в графическом режиме

23

Список литературы                                                                                

30

 

Введение

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

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

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

1)  Наименование лабораторной работы и постановка индивидуального задания.

2) Алгоритм задания.

3) Основные обозначения.

4) Текст программы  (листинг).

5) Решение задания (результат).

6) Анализ результата и выводы.

 

Лабораторная работа № 1. Разработка алгоритмов и программ циклов с известным числом повторений

 

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

 

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

1) Какие вычислительные процессы называются  циклами?

2) Что такое счетчик цикла алгоритма с известным числом повторений?

3) Какие числовые значения могут быть шагом изменения счетчика цикла?

4) Как определяется  количество повторений цикла?

5) Какие операторы в Паскале используются для организации циклов?

6) Что такое тело цикла?

 

Методические указания и упражнения

Если заранее  известно число повторений, то такой  вычислительный процесс называется   циклом с известным числом повторений. Для организации такого цикла  могут быть использованы специальные операторы цикла (FOR, WHILE, REPEAT) и оператор условного перехода (IF).

Оператор цикла FOR. Структура записи оператора цикла FOR следующая:

FOR  [счетчик цикла] : = [начальное значение] TO [конечное значение] DO

[тело цикла];

Счетчиком цикла является целочисленный параметр, заданы начальное и конечное  значения этого параметра. Телом цикла является совокупность исполняемых операторов, повторяющихся для значений счетчика цикла. В данной записи  шаг изменения счетчика цикла равен +1. Если этот шаг равен -1, то оператор цикла FOR будет иметь вид:

FOR [счетчик цикла] : = [начальное значение] DOWNTO [конечное значение]

DO [тело цикла];

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

Пример 1.  Вычисление числа сочетаний. Алгоритм этой задачи не представляет трудности: после каждого шага производится умножение на число, уменьшаемое на единицу и деление на число, увеличиваемое на единицу:

         C = . . . .

 Текст  программы данной задачи имеет вид:

Program TERU;

    Var i,k,n: integer;       m: longint;

    Begin       Read(n,k);       m:=1;

       For i:=1 to k do  m:=m*(n-i+1) div i;

Writeln('Число сочетаний из',' ',n,' по',' ', k,' ','равно =', m);

    Readln;     End. 

Следует обратить внимание, что результат m описан как  Longint, так как это число может иметь достаточно большое целое значение.

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

Пример  2. Вычисление определенного интеграла. Вычислить следующий определенный интеграл методом прямоугольников:

          S =  = (e –x + ex ) dx. 

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

          S = h [f(x1)+f(x2)+f(x3)+ . . . + f(xn)].

Здесь:  h – шаг изменения аргумента; точки разбиения отрезка

                  xi = a+h*i, i=1,2,3,...,n, n = .

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

1) S=0, i=1,  в начале цикла очищается ячейка, где будет храниться сумма, для чего в эту ячейку засылается нуль;

2)  x=a+h*i,  вычисляется новое значение аргумента;

3)  f(x),  вычисление  значения подынтегральной функции;

4)  S = S + h*f(x),  суммирование нового слагаемого;

5)  i=i+1,  переход к следующему значению аргумента;

6)  если выполняется условие  i≤n,  то происходит повторение начиная  с пункта 2);

7) результат вычисления S  выводится на  экран.

Текст программы, осуществляющей данного алгоритма имеет следующий вид:

PROGRAM INTEG;

LABEL  5; CONST n = 100;  VAR x,y,S,a,b,h:real; i:integer;

BEGIN    READ(a,b);    S:=0; h:=(b–a)/n; x:=a; i:=1;

5:    S:=S+h*(Exp(-x)+Exp(x));      i:=i+1; 

IF i<=n THEN GOTO 5;      WRITELN(‘ Интеграл S=’,S:10:4);

END.

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

 Оператор цикла WHILE. Для организации цикла, число повторений которого определяется по заданному условию, можно использовать оператор цикла WHILE. Структура этого оператора следующая:

WHILE [логическое выражение] DO [ тело цикла];

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

 Пример 3. Вычисление конечной суммы. Вычислить следующую сумму для заданного значения x:

  S =  = x + x2/2 + x3/3 + x4/4 + . . . + xn/n,  здесь  | x | < 1.

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

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

1)  ввести в память компьютера  значения параметров x  и  n;

2)  в начале цикла задать начальные  значения величин:  S = 0, p = 1, k =1;

3) найти следующие значения: с помощью формулы  p = p*x определить степень х,  S=S+p/k – добавить новое слогаемое, k=k+1 – определить номер следующего слагаемого;

4)  если условие k ≤ n выполнен, то повторяется пункт 3); а если k>n, то процесс вычисления завершается;

5) результат вычисления или сумму значения S  вывести на экран.

Текст программы задачи будет выглядеть:

PROGRAM SUMMAKON;

  VAR k,n:INTEGER;       S,x,p:REAL;

  BEGIN      READ(x,n);       k:=1; S:=0; p:=1;

      WHILE k<n DO

     BEGIN       p := p*x;  S:=S+p/k;  k:=k+1;     END;

   WRITE(‘ Сумма S =’, S ) END.

Оператор цикла REPEAT. REPEAT является одним из операторов, осуществляющих цикл любого типа. В отличие от оператора WHILE, выполнение логического условия проверяется в конце  каждого повторения.   Оператор записывается  следующим образом:

REPEAT [тело цикла] UNTIL [логическое выражение];

Если значение логического выражения TRUE (истина), то операторы тела цикла будут повторяться, а если FALSE (ложь), то цикл завершается. 

Задания для самостоятельного выполнения:

№1  Пусть даны пять шаров. Определить объем и площадь поверхности каждого из шаров, если задан радиус самого маленького шара, а радиус каждого следующего шара больше предыдущего на 10%.

№2 Для составления графика функции вычислить значения x и y для значений аргумента от 0 до 1 с интервалом 0.1:.

 №3 Вычислить (бином Ньютона) для заданных значений a, b, n

        где .

№4 Вычислить приближенное значение функции с помощью разложения функции в сумму ряда из n элементов:  .

№5 Найти сумму всех натуральных чисел в диапазоне от 1 до n, которые делятся на k и делятся на h.

№6 Определить количество яиц (минимальное значение), которые несла покупательница, если известно, что она разбила одно яйцо и тогда оставшихся яиц ей хватило бы на неделю на завтрак из 2 яиц или чтобы испечь два раза торт из 10 яиц и четыре завтрака из 2 яиц.

№7 Найти первых пять простых чисел, используя для обозначения простых чисел переменные a, b, c, d и e.  Начальное значение переменных =2.

№8  Определить для n (n>=4) любых точек, входит ли  заданная точка в заштрихованную область и в какую из них (радиусы r1=1, r2=2, самим определить уравнение прямой)

 

 

 

 

 

№9 Вычислить функцию на интервале от (a, b) с шагом 0.5. Данные вывести в виде таблицы.

 

           .

        №10 Вычислить n раз по формуле Герона площадь треугольника, образованного при соединении трех точек, заданных координатами (x1,y1), (x2,y2) и  (x3,y3). 

 

Лабораторная работа № 2. Разработка алгоритмов и программ циклов с неизвестным числом повторений

 

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

 

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

1) Какой процесс вычисления называется циклом с  неизвестным числом повторений?

2) Используется ли счетчик цикла в алгоритме с неизвестным числом повторений?

3) Как выполняется процесс остановки  алгоритма с неизвестным числом повторений?

4) Что такое точность вычисления?

5) Какие операторы используются на языке Паскаль для организации циклов с неизвестным числом повторений?

 

Методические указания и упражнения

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

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

F(x) = X- X – 0,2 = 0.

Считается, что корень данного уравнения  отделен, т.е. в промежутке [a,b]  имеется единственный корень и пусть: a = 1; b = 1,1. Требуется определить корень уравнения с точностью ε = 0.0001.

Согласно этого метода,  промежуток [a,b] делится на две равные части (точка деления c = (a + b)/2 ), а затем определяется та часть, где расположен искомый корень. Если  на концах левого отрезка [a,c]  функция F(x) имеет различные знаки (F(a)· F(c) < 0),  то корень расположен в этой части  [a,c], а в противном случае – в правой части [c,b].  При этом нельзя исключить случай, когда корень уравнения может быть определен точно: F(c) = 0.  После каждого повторения промежуток сокращается в два раза. Этот процесс может повториться много раз и количество таких повторений неизвестно, процесс вычисления завершается при выполнении условия точности.  Условие точности записывается в следующем виде:

                 | b - a | < ε.

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

1)  ввод значений a, b, ε;

2) деление промежутка [a,b] пополам c = (a + b)/2 );

3) проверка выполнения условия  F(c) = 0; если это условие выполняется, то  c   является точным значением искомого корня уравнения, оно выводится на экран;

4) определение полупромежутка, где находится корень; если корень расположен в левой части, то (F(a)· F(c) < 0), тогда  вместо  b  принимается значение  c, а в противном случае  вместо a;

5)  проверка выполнения условия точности вычисления корня     |b - a| < ε; если не выполняется это условие,  то повторяется со строки 2); а если выполняется, то задача решена.

В данной задаче повторение осуществляется с помощью оператора условного перехода IF. Программа будет иметь вид:

Program  KOREN;

   Label 5,6;   Const Eps=0.0001;   Var x,y,a,b,c: real;

   Begin  Read(a,b);

5: c:=(a+b)/2;    y:=sqr(sqr(a))*a-a-0.2;

    if y = 0       then goto 6;     x:=sqr(sqr(c))*c-c-0.2;

    if x*y<0 then b:=c else a:=c;     if abs(a-b) > eps then goto 5;

6:  Writeln('Корень уравнения c =', c:8:4);  Readln;   End.

Для выполнения программы вводятся с клавиатуры значения параметров  a  и  b. Эту программу можно использовать для решения любого уравнения; для этого меняется только функция, находящаяся в левой части уравнения. Естественно, будут другие значения для  a и b.  Для составления подобной программы можно использовать и другие операторы цикла, кроме  For.

Замечание. В программах на языке Паскаль не используются буквы греческого алфавита, поэтому вместо ε  использован идентификатор из латинских букв Eps.  Во многих случаях используются значения параметра ε следующие числа 0.0001, 0.001, 0.01 и другие.

Пример 2. Вычисление суммы бесконечного ряда с заданной точностью. Пусть рассматривается следующая сумма:

                        S== ++ + . . .++ . . .  .

Для вычисления данной суммы необходимы следующие условия: во-первых, |x|<1;  во-вторых,  значение суммы определяется только приближенно.   Точность может быть задана в виде неравенства  |xn/n!|<ε,  где  ε>0 – наперед заданная малая величина.  Для определения каждого следующего слагаемого используется рекуррентная формула  p=p*x/k. В данной задаче повторение и завершение цикла определяются данной точностью. Алгоритм записывается в следующем виде:

1)  ввод значений x  и  ε ;

2)  задание значений параметров в начале цикла: S=0, p=x, k=1;

3)  определение следующих величин: p=p*x, S=S+p/k,  k=k+1;

4)  если   | x n / n! | < ε  или    | p | < ε, то   повторяется  строка 3); а в противном случае завершается процесс вычисления;

5)  вывод результата  S   на экран.

Текст программы будет следующим:

PROGRAM SUMMABES;

   VAR k : INTEGER;       S,x,p,Eps :REAL;

   BEGIN      READ(x,Eps);

       k:=1; S:=0; p:=1;

       WHILE Abs(p)> Eps DO

      BEGIN        p :=p*x; S:=S+p/k; k:=k+1;      END;

       WRITE (‘Сумма равна  S =’, S )   END.

Для выполнения программы с клавиатуры вводятся значения  параметров x  и  ε.

 Пример 3. Решение уравнения методом касательных. Решить заданное уравнение методом касательных (методом Ньютона)  с заданной точностью.  Пусть дано уравнение:   F(x) = 3x3+5x2–2x–7 =0. Требуется найти корень этого уравнения с точностью  ε.

По методу Ньютона для решения уравнения используется формула:

                xk = xk-1 -F(xk-1)/F′(xk-1),

где  F′(xk-1) – производная функции, находящейся в левой части уравнения. В данном примере она имеет вид:      F′(x) = 9x2 +10x–2. Следовательно, рекуррентная формула для поиска решения уравнения имеет следующий вид:

      xk = xk-1 –(3xk-13 +5xk-12 –2xk-1 –7)/(9xk-12 +10xk-1–2).

Для  удобства записи текста  программы необходимо избавиться от индексов.Это делается для того, чтобы не рассматривать переменные с индексами, используемые при работе с массивами. Поэтому вводятся замены переменных:     x k = y,  xk-1 = z . Тогда рекуррентная формула записывается в следующем виде:

                        y = z–(3z3 + 5z2 – 2z –7)/(9 z2 +10z-2),

где  z – начальное приближенное значение решения уравнения, а  y – следующее вычисляемое значение. В качестве начального приближенного значения принимается x0 = 2, а по рекуррентной формуле повторение осуществляется до выполнения условия  точности |xk – xk-1|<ε  (или   |y–z|<ε).

 Алгоритм данной задачи следующий:

1)      ввод значения ε;

2)      присваивание начального значения решения уравнения  y = x0;

3)      найденное решение становится предыдущим z = y;

4)      определение следующего приближенного значения по рекуррентной  формуле;

5)      проверка выполнения условия точности |y – z|<ε;

6)      вывод результата решения задачи на экран.

Программа в данном случае имеет  следующий текст:

PROGRAM  NEUTON; CONST x0=2; Eps=0.0001;VAR y,z :real;

BEGIN   y:=x0;    REPEAT   z:=y; y:=z–(3z3+5z2–2z–7)/(9z2 +10z-2);

  UNTIL abs(y – z)>Eps;  WRITELN(‘Решение уравнения x = ‘,y:10:4); END.

Данная программа является универсальной, ее можно использовать для решения любого уравнения.  Для этого меняется формула для функции F(x).

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

 

Задания для самостоятельного выполнения:

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

№1 Вычислить сумму с точностью  для заданного х. Указать количество учтенных слагаемых. S= .

№2 Вычислить сумму с точностью  для заданного х. Указать количество учтенных слагаемых. S= .

№3 Задано х.  Последовательность образована по закону. Вычислить сумму S=, где k удовлетворяет условию.  Указать количество учтенных слагаемых.

№4  Вычислять функцию для введенного аргумента. Задача завершается при вводе определенного значения, например, -9999

.

№5 Составить таблицу значений температур по Цельсию от a до b (интервал в 5 градусов) и эквивалентов по шкале Фаренгейта, используя формулу   .

6 Дано натуральное число n. Вычислить  .

№7    Дано натуральное число n. Вычислить

                                    .

№8 В целом числе количество цифр не больше четырех. В нем p-ую и q-ую цифры поменять местами, если p-ая цифра больше  q-ой.

№9 Даны натуральные числа n,m. Получить сумму m первых цифр числа n.

№10 Дано натуральное число n. Поменять порядок цифр на обратный.

 

Лабораторная работа №3. Алгоритмы и программы действий над массивами

 

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

 

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

1) Как описывается одномерный массив на языке Паскаль?

2) Какие имеются особенности при вводе двумерного массива в память компьютера?

3) Какие операторы могут быть использованы для организации сложных циклов?

4)  Что такое сортировка элементов массива?

5)  Можно ли составить одномерный массив из элементов двумерного массива?

 

Методические указания и упражнения

Пусть рассматриваются примеры.

Пример 1.  Определение наименьшего элемента массива и его номера. Пусть дан одномерный массив. Требуется найти наименьший  элемент и его порядковый номер в следующем  массиве:

                      A = {a[1], a[2], a[3],  . . . ,  a[n]}.

Наименьший элемент обозначен xmin  и его номер   kmin.

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

1)     ввод элементов массива в память компьютера;

2)     в качестве наименьшего элемента массива вначале принимается первый элемент:  xmin = a [1], kmin = 1;

3)     вызывается следующий элемент массива k = k + 1;

4)     вызванный элемент  a[k] сравнивается с наименьшим элементом  xmin и из них меньший элемент остается, т.е. он становится наименьшим;

5)     проверка того, что прошли сравнение все элементы массива    или проверка условия   k <= n ;  если это условие выполняется, то  начиная с пункта  3)  все операции повторяются; если это условие не выполняетя или   k > n,  то цикл завершается. Последний элемент считается наименьшим элементом массива  xmin.

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

PROGRAM MAXMIN;

CONST n =10;  VAR xmin: real;     k, kmin : integer;  a : array [1..n] of real;

BEGIN     FOR k:= 1 TO n DO   READ(a[i]);   xmin:=a[1];  kmin:=1;

FOR k:= 2 TO n DO  

 IF a[k] < xmin   THEN    BEGIN   xmin:=a[k];  kmin:=k      END;

WRITELN(‘ Наименьший элемент =‘, xmin:8:4);

WRITELN(‘ Номер наименьшего элемента=’,kmin);   END.

Если требуется определить наибольший элемент массива, то в операторе  IF  вместо знака <  нужно ставить знак > .

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

Текст программы  имеет вид:

Program  UPOR;  

          Const n=10;   Var  k,i,x,j:integer;      a: array [1..n] of integer;

  Begin     writeln(‘Исходный массив: ');

          For i:=1 to n do

      begin  read(a[i]); write(a[i]:5);  end;   Writeln(' ');

             For j:=1 to n-1 do       Begin      x:=a[j]; k:=j;

        For i:=j+1 to n do      if a[i]<x  then     begin x:=a[i]; k:=i; end;

                 a[k]:=a[j]; a[j]:=x;        end;

writeln(‘Упорядоченный по возрастанию массив:');

  For i:=1 to n do write (a[i]:5);       readln; 

  end.

Пример 3. Схема Горнера. Здесь рассматривается известная схема Горнера для вычисления полинома.  Здесь коэффициенты полинома рассматриваются как элементы массива. По  этой схеме полином записывается в следующем виде:

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

1)     ввод значений коэффициентов и неизвестной переменной величины;

2)     вначале  переменной  y  присваивается значение коэффициента члена с  наибольшей степени   y = a1;

3)     в начале цикла  k = 2;

4)     в следующем шаге определяется следующая сумма: y = y · x + ak;

5)     конец цикла определяется с помощью следующих действий:  k = k + 1  и   k < n+1;

6)     вывод результата вычисления на экран.

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

PROGRAM  GORNER; CONST n=10;

VAR k: integer;     x: real;    a: array[1..n+1] of real;

BEGIN  READ(x);

  FOR k:=1 TO n+1 DO READ(a[k]);       y:= a[1] ;

      FOR k:=2 TO n+1 DO y:= y * x + a[k];

WRITELN(‘ для аргумента x=’,x:6:2,‘значение  полинома  y =’, y );

    END.

Пример 4.  Поиск следа матрицы. Матрица называется квадратной, если количества строк и столбцов  одинаковые.  Сумма элементов матрицы, находящихся на главной диагонали, называется следом матрицы.  Задача ставится так: дана квадратная матрица  A[m,m]. Найти следы следующих матриц A, A2, A3, . . . , An.

Чтобы решить эту задачу, пусть будет введен следующие параметры: aij–  элемент данной матрицы; sk – след матрицы Ak , k =  1,2, . . . ,n; bij, cij – элементы дополнительно введенных матриц, i=1,2,. . . ,n,  j=1, 2, . . . , n;   

Порядок вычисления степени k матрицы производится по формуле:          Ak = Ak-1 · A , k =1,2,. . . ,n.

Здесь должны выполняться вышерассмотренные правила произведения матриц. Вначале найти k степень данной матрицы, затем через найденные суммы главного диагоналя можно определить sk   след.

Текст программы данной задачи пишется так:

Program SLEDMAT;   Label 5;  Const m=3; n=5;

Var i,j,k,l:integer; p: real;   a,b,c: array [1..m,1..m] of  real;   s: array[1..n] of  real;

  Begin     For i:=1 to m do      For j:=1 to m do

  Begin Read(a[i,j]); b[i,j]:=a[i,j]; end;

     For k:=1 to n do s[k]:=0;     For i:=1 to m do  s[i]:=s[i]+a[i,i];    k:=2;

   { Найти произведение двух матриц   }

 5: For i:=1 to m do       For j:=1 to m do

       Begin p:=0;

    For l:=1 to m do p:=p+a[i,l]*b[l,j];     c[i,j]:=p;   end;

    For i:=1 to m do     For j:=1 to m do a[i,j]:=c[i,j];

      For i:=1 to m do s[k]:=s[k]+a[i,i];

        k:=k+1;     if k<=n then goto 5;

 For k:=1 to n do writeln('s[',k,']=',s[k]);   readln;  

  End.

 

Задания для самостоятельного выполнения:

№1 Заполнить натуральными числами от  1 до n2 квадратную матрицу n-го порядка, заполнить по спирали. Например:

1

2

3

4

12

13

14

5

11

16

15

6

10

9

8

7

№2 Дана матрица действительных чисел  Получить матрицу  ,  где элемент равен сумме элементов матрицы расположенных в строке i и столбце  j.

№3 Транспонировать квадратную матрицу.

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

№5 Вычислить сумму элементов , находящихся на и ниже побочной диагонали квадратной матрицы n-го порядка.

№6 Группа параллельно соединенных сопротивлений задается неотрицательными значениями r1, r2…. Последовательное соединение таких групп (в группе не больше 4-х сопротивлений) задается так: сопротивления первой группы, затем отрицательное число для разделения групп, потом- значения сопротивлений второй группы, снова  отрицательное число и т.д. После значения последнего сопротивления- два отрицательных числа. Рассчитать сопротивление соединения.

 

 

 

№7 Рассчитать сопротивление соединения (см. предыдущую задачу, отрицательное значение разделяет цепочки).

 

 

 

№8 Дана символьная квадратная матрица порядка n. Заменить на 0 все символы, стоящие ниже главной диагонали.

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

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

 

Лабораторная работа № 4. Использование функций и процедур в программировании

 

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

 

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

1) Для чего выполняется распределение сложных задач на простых?

2) Назовите различия между функцией и процедурой .

3) Внутри функции можно ли использовать процедуру?

4) Для чего служит имя функции?

5) Что обозначает имя процедуры?

 

Методические указания и упражнения

Пример 1.  Найти периметр многоугольника.

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

i – порядковый номер вершины многоугольника; xi,yi – координат i –ой вершины; n – число вершин;  p – периметр многоугольника.

Значение периметра многоугольника состоит из суммы его длины ребер: p = d1 +  d2 + d3 + . . . + dn , где di =  (( xi+1 – xi)2 + (yi+1 – yi )2 )1/2  .

Определение длины каждого ребра рассматривается как функция; эта функция пусть будет D.

   Program PERIMETR;     Const n = 5;

     Var  i: integer; p:real;      x,y: array[1..n] of real;

     Function D(xa,ya,xb,yb:real): real;         Var  s: real;

         Begin     s:=sqr(xa-xb)+sqr(ya-yb);     D:=sqrt(s);     end;

{       текст основной программы:          }

     Begin         For i:=1 to n do read(x[i],y[i]);

             p:=0;      for i:=1 to n-1 do        p:=p+D(x[i],y[i],x[i+1],y[i+1]);

            p:=p+d(x[1],y[1],x[n],y[n]);       Writeln(' Периметр p= ', p:8:4);     end.

Пример2. Треугольник Паскаля. В качестве примера рассматривается  создание треугольника Паскаля.

Program PASCALTR;   Const n=9;

   Var k,j: integer;       c: array [1..n] of integer;

   Function Soch(p,m: integer):integer;      Var i :integer; s: longint;

   Begin

       s:=1;    For i:=1 to m do   s:=s*(p+1-i) div (i); soch:=s;    end;

{    текст основной программы:          }

  Begin

    writeln('    Треугольник Паскаля:');  k:=1;    c[k]:=1; write(' ',c[1]); writeln;

    For k:=1 to n do      begin   c[1]:=1;   

        For j:=2 to k+1 do   begin c[j]:=soch(k,j-1); end;

            For j:=1 to k+1 do write(' ',c[j],' ');

   writeln;    end; readln end.

Из математики известно, что  число сочетаний из р  по m определяется следующей формулой:  SOCH =  = ,

где p = 1,2,3,. . .,n. 

Пример 3.  Определенный интеграл с переменным верхним пределом       

       u = F(x) =,

где x – переменная величина u – считается как функция; известен промежуток изменения аргумента x: .  Для вычисления значения функции для каждого значения аргумента используется  формула Симпсона: 

   

где n -  целое четное число;  ti=a+i*h  - точки разделения, yi =f(ti) –значения подынтегральной функции,,   i=0,1,2,. . .,n.

  Пусть будет рассмотрен определенный интеграл:

                       

где a=0,=0,1. Текст программы данной задачи пишется следующим образом:

Program INTEGRAL;

   Label 5;  Const h0=0.1;   Var x,u: real;

   Function F(v:real):real;      Const n=101;

    Var k,i:integer; s,h:real;     t,y:array [1..n] of real;

      Function P(z:real):real;

    Begin P:=exp(z)*sin(pi*z) end;

   Begin h:=v/n;       For i:=1 to n do   begin t[i]:=h*(i-1); y[i]:=P(t[i]); end;

      S:=y[1]+y[n]; k:=-1;     For i:=2 to n-1 do

    k:=-k; s:=s+2*(1+k)*y[i]; F:=h*s/3; End;

   Begin x:=1;  Writeln(' Таблица значений функции:');

 5:   u:=F(x);  Writeln('  x=',x:6:2,'    ' ,'u=',u:8:4);

   x:=x+h0;    if x<=2.001 then goto 5;   readln;  End.

 

Задания для самостоятельного выполнения:

№1 Вычислить периметр пятиугольника, заданного координатами вершин (xi,yi). Создать процедуру вычисления  расстояния между двумя точками.

№2 Вычислить площадь пятиугольника, заданного координатами вершин (xi,yi). Создать функцию вычисления  расстояния между двумя точками и процедуру вычисления  площади треугольника по формуле Герона. Треугольники  образованы при соединении точки 1 с двумя другими.

 

 

 


№3 Группа параллельно соединенных сопротивлений задается неотрицательными значениями r1, r2…. Последовательное соединение таких групп (в группе не больше 4-х сопротивлений) задается так: сопротивления первой группы, затем отрицательное число для разделения групп, потом- значения сопротивлений второй группы, снова  отрицательное число и т.д. После значения последнего сопротивления- два отрицательных числа. Рассчитать сопротивление соединения. Составить процедуру вычисления параллельного сопротивления.

 

 

 

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

№6 Даны действительные числа a и b. Вычислить

где  

 №7 Даны действительные числа q, r, . Вычислить

 

где

№8 n окружностей на плоскости заданы координатами центра и радиусом  . Определить среди окружностей попарно пересекающиеся окружности.

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

№10 Дана квадратная матрица. Из суммы элементов из заштрихованной области по строкам составлен вектор – столбец. Элементы диагоналей входят в суммы.

 

Лабораторная работа № 5. Алгоритмы и программы обработки символов и строк

 

 

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

 

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

1) В какой части программы описываются символьные переменные?

2) Что такое строки?

3) Какие действия нужно производить над строками?

4) Конкатенция какое действие?

5) Что такое тип строки?

 

 

Методические указания и упражнения

Компьютер имеет возможность обрабатывать как числовую информацию, так и символьную информацию. Для сохранения и обработки символов используются переменные величины, относящиеся к типу char. Они описываются в разделе описания переменных Var.  Например, 

   Var     A, AT: char;

где А и АТ – переменные величины, относящиеся к символьному типу, их значениями являются символы. Они как переменные принимают значения через операторы присвоения, их значения можно ввести с помощью оператора Read или Readln и вывести Write или Writeln. 

В среде Турбо Паскаль для обработки последовательности знаков введены понятия о строках знаков и им соответствующие данные типы строк. В ходе выполнения программы длина строки изменяется от нуля до данного значения верхнего предела. При определении строчных типов внутри квадратных скобок показывается самая большая длина строки. Длина строки задается целозначными константами от 1 до 255.

Строчные переменные можно рассматривать как последовательность знаков, взятые в апострофы. Если апостроф в составе строки, то он пишется два раза.

Пример 1. Найти место расположения заданного символа в тексте, состящего из   n символов.  Для решения этой задачи введены следующие параметры:

N – число знаков в введенном тексте;

A – знак типа char; в этой программе его значение буква с;

S – последовательность символов типа char в тексте;

K – номера знаков в тексте или счетчик цикла.

После ввода текста его знаки по очереди сравниваются с значениями переменных А. Если равенство выполнено, то определянтся  его номер. Если знак отсутствует  в данном тексте, то появится сообщение «Нет этого символа».  Текст программы записывается следующим образом:

 Program ORYN;     Label 1,2,3,4;            Const n=20;

              Var       k,i:integer;       s: array[1..n] of char;       a: char;

  Begin     a:='c'; i:=0;       For k:=1 to n do Read(s[k]);        k:=1;

 2:   if s[k]=a        then  goto 1;        k:=k+1;

                if k<=n then goto 2;

 1:   i:=k;         writeln('i=',i);       goto 4;

 3:  Writeln(‘ Нет этого символа’);

 4:  readln;   End.

Для проверки программы нужно задать текст из 20 знаков.

Пример 2. Определить сколько раз встречается знак. Задан следующий текст из 20 знаков “Орындалатын  амалдар”. Определить сколько раз встречается знак “а” в данном тексте. Текст программы следующий:    

PROGRAM KEZDESU;  CONST n = 20;

  VAR  X: string [n];         A: char;         m, k : integer;

  BEGIN      X := ‘Орындалатын  амалдар’;     A :=’a’;  m :=0;             

     FOR  k := 1 TO  n  DO      IF X [k] := ‘a’ THEN  m := m+1;

WRITELN (‘В тексте «Орындалатын амалдар»’);

WRITELN (‘символ «а» встречается  m = ‘, m,’раз’);   END.

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

-                     + знак действия соединения или суммы(конкатенция – concatenate) 

-                     действия сравнения используют знаки =,<>,  <, >, >=, <=;

-  оператор присвоения использует := знак.

 Операция присоединение (конкатенция) используется для соединения к одной строке других. Длина  строк не должны превышать 255 знаков.    

Операция сравнения выполняется слева по кодам каждого знака. Результат сравнения относится к логическому (Буль) типу, возможные значения: False (Ложь) и True (Истина).  В операторе присвоения можно использовать выражения относящиеся к строчным типам. Например,  Sahat := ‘12’;  Minutes := ‘15’;

Time of day := “It is’ + Sahat +’hours’+ minutes+’minutes now’;

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

Пример 3. Построение треугольника из звездочек. Для примера рассматривается построение прямоугольного треугольника, созданный  знаками *.  Здесь используется цикл с известным числом повторений;  порядок построения следующий: в первой строке одна звездочка, во второй – две звездочки и т.д. Тогда программа будет иметь вид:

PROGRAM PR41;   CONST  n = 12;   VAR  x : string[n];        k : byte;

BEGIN  x:=’’;    FOR k:= 1 TO n  DO

  BEGIN    x:= x +’*’;    WRITELN (x);  END;

 END.

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

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

 

Задания для самостоятельного выполнения:

№1 В строковых переменных a, b, c записываются фамилия, имя и отчество. На экран вывести стандартное поздравление с праздником, например: «Уважаемый Анвар Галымович, поздравляем Вас с Новым годом»

На конверте надо указать адресата:«Айдаров А.Г.»

№2 Имеется n спортсменов (фамилия, имя, год рождения). Вывести на экран данные спортсменов, которые входят в группу 1( до 14лет), группу 2 (от  14 до 18) и группу 3 (старше 18 лет).

№3 Пусть стоимость товара записана в виде массива двух строк: «мяч 300 тенге», «ракетка 2600 тенге». Определить сколько будет стоить товар, если произошло снижение на 50%. Ответ представляется в виде массива строк.

№4  Дано натуральное число 20<n<100, на экран вывести число в виде строки.  Например, при вводе числа 25 вывести: «25-двадцать пять».

№5  Пример сложения задан в виде текста «34+560=». Вывести ответ.

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

№7  Зашифровать и затем расшифровать английский текст из строчных букв. При зашифровке буквы заменяются буквами, идущими следом («c» заменяется на «d», «z» на «a»).

№8  В предложении встречается указание стоимости в долларах в   виде «$150». Проанализировать текст и перевести в тенговый эквивалент по курсу.

№9 Даны английские слова, разделенные пробелом. Найти все слова, в которых встречается гласная латинская буква «u».

 №10 Дан текст. Определить, является ли он десятичной записью целого числа или идентификатором.

 

Лабораторная работа № 6.  Работа в графическом режиме

 

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

 

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

1) С помощью какого устройства создается графическая информация?

2) Что такое Видеоадаптер?

3) Что такое Пиксель?

4) Какая процедура используется, чтобы установить точку?

5) Для чего используется процедура Line?

6) Какие действия должны быть выполнены, чтобы установить систему координат?

7) Какую функцию выполняет прцедура Delay?

 

Методические указания и упражнения

Для работы в графическом режиме нужно установить графический режим. Для этого используется InitGraph модуля Graph. Поэтому в программе первое указание после его имени должен быть Uses Graph. После выполнения программы, чтобы установить текстовый режим используется процедура CloseGraph (закрыть модуль). Формат включения функции InitGraph :

InitGraph (драйвер, режим, строка);

Здесь:

драйвер – переменный параметр, который относится к типу Integer и определяет графический драйвер и тип адаптера;

режим – переменный параметр, который относится к типу Integer  и определяет режим работы графического параметра;

строка – данные типа String, который показывает путь каталога, где установлен графический параметр; если драйвер находится в текущем каталоге, то этот параметр пустая строка.  Например,  InitGraph ( var d, m: integer;  p: string);  где  d – тип графического адаптера;      m режим работы графического адаптера;     p – путь, где установлен графический адаптер.

Для выбора адаптера автономно, нужно выполнять  оператор присвоения d:=detect. Если в компьютере установлен адаптер VGA, то устанавливается параметр d:= VGA. Здесь значения параметров m и  p не определяются.  

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

GraphDriver – параметр, показывающий значение адаптера в графическом режиме;

LoMode переменная, определяющая самого маленького значения режима работы адаптера;

HiMode – переменная, определяющая самого большого значения режима работы адаптера;

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

1) Процедура LineTo(x,y:integer); проводит прямую  с текущей точки до точки с координатами (х,у).  

2)  Процедура LineRel(Dx,Dy: integer); обеспечивает проведение прямого отрезка от текущей точки с координатами (x,y) до точки, для которой координаты имеют приращенияі Dx, Dy, а затем последняя точка станет текущей.

3) Процедура Line(x1,y1,x2,y2: integer); соединяет прямой линией точки с координатами (x1,y1)  и (x2,y2).

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

xc, yc  координаты одной вершины самого большого квадрата;

aдлина стороны самого большого квадрата;

x1,y1-  координаты одной вершины текущего квадрата;

x2,y2 координаты второй вершины текущего квадрата;

k –параметр цикла;

n количество квадратов.

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

Program KVADRAT;   Uses Graph;

  Const xc=100; yc=100; a=300; n=5;  Var x1,x2,y1,y2,k,d,m: integer;

Begin   d:=detect;    InitGraph(d,m, ‘  ‘);   MoveTo(0,0);  

{    Начальная точка координатной системы     }

  Line(0,0,600,0);  Line(0,0,0,400); { Координатные оси   }

 x1:=xc; y1:=yc; x2:=xc+a; y2:=yc+a;

{  определение вершин первого квадрата      }

  For k:=1 to n do

   begin  {  Цикл для определения вершин текущего квадрата  }

        Rectangle(x1,y1,x2,y2);    {        Построение квадрата                           }

  x1:=  x1+(x2-x1) div 4;   y1:=y1+(y2-y1) div 4;

  x2:= x2-(x2-x1) div 4;    y2:= y2-(y2-y1) div 4;   end;

  SetFillStyle(0,1);   

{   Выбор цвета краски       }   Bar(x1,y1,x2,y2); 

{   Процедура покраски самого маленького квадрата}  Readln;  

CloseGraph;    

{     Завершение  работы графического режима    End.

Можно рассматривать различные процедуры, предназначенные для построения кривых. Например, процедура   Arc(x,y: integer; StAngle, EndAngle, Radius: word); позволяет нарисовать дугу с центром в точке  (x,y)  радиуса  Radius,  для которой начальный угол StAngle, а  конечный угол  EndAngle.  Здесь угол измеряется в градусах, а направление счета против  часовой стрелки, начиная от оси абсцисс.  Для построения окружности используется процедура  Circle(x,y:  integer; Radius: word);.  Для окрашивания сектора круга используется процедура PieSlice(x,y: integer; StAngle, EndAngle, Radius: word); Для построения эллипса – процедура  Ellipse (x,y:integer; StAngle, EndAngle:word; XRadius,  YRadius: word); , а для окрашивания его сектора – процедура  Sector(x, y: integer; StAngle, EndAngle, XRadius, YRadius: word);

Пример 2.  Построение спирали. Требуется пострить спираль из n кругов вокруг заданной точки. Начальное направление образует с абсциссой угол  α.  Параметрические уравнения спирали имеют следующий вид:  x = xc + r cost, y = yc + r sint, r = at, α ≤ t ≤ 2nπ.  Значение параметра  a вводится с клавиатуры.

Построение спирали  производится из маленьких отрезков, поэтому должны быть заданы начальное значение параметра t: α =π/4 и шаг его изменения p6 = π/180.  Координаты центра спирали xc =320, yc = 250, а количество кругов n = 20.  Программа данной задачи следующая:

Program  SPIRAL;

   Uses Graph;   

       const xc=320; yc=250; n=20;    pi=3.1415926;  alf=pi/4;р 6=pi/180;

       var   t,r,a: real;       k,d,m,i,x,y:integer;

   begin     readln(a);       d:=detect;  InitGraph(d,m,'  ');       t:=alf;

         MoveTo(xc,yc);       writeln(' Спираль для значения  a=',a:4:2);

         for i:=1 to n do         begin      for k:=1 to 360 do

         begin    t:=t+p6; r:=a*t;  x:=round(r*cos(t))+xc;     y:= round (r*sin(t))+yc;  LineTo(x,y);     end;     end;

          Circle(xc,yc,round(r));       readln;       CloseGraph;

  end.

Пример 3. Построение графика функции.  Для построения графика функции могут быть использованы стандартные  модули Graph, CRT. Вначале вычисляют значения функции в отдельных  точках и ее график рассматривается как совокупность точек. Здесь используется процедура PutPixel. Ниже приведена программа построения графика тригонометрических функций. Следует отметить, что изменив название функции, можно построить график любой функции с помощью данной программы:

Program FUNGRAF;

Uses Graph, CRT;

  Var    a,g,Error,s:integer;    i,x,y: real;    Fv: File;    p: pointer;

  Begin    Assign(Fv,'Zaugraf');    a:=detect; g:=Detect; InitGraph(a,g,'');

    Error:=GraphResult;     If Error<>GrOK then

   begin Writeln (GraphErrorMsg(Error)); Halt(1); end;

     Rewrite(Fv,1); x:=-2*Pi; SetColor(1);

   Line(0,175, 640, 175); Line(640,175,625,172);

   Line(640,175,625,178); Line(300,0,300,350);

   Line(300,350,303,335); Line(300,350,297,335);

       While x<2*Pi do

         begin    y:=sin(x);    PutPixel(Round(x*50)+300, Round(y*80)+175, 10);

        Y:=cos(x);   PutPixel(Round(x*50)+300, Round(y*80)+175, 3);     x:=x+0.05;

         end;

     SetTextStyle(0,0,2); OutTextXY(285,340,'  Y ');

     SetTextStyle(0,0,2); OutTextXY(590,150,'  X ');

     SetTextStyle(0,0,2); OutTextXY(280,150,'  O ');

        s:=ImageSize(0,0,400,200);  GetMem(p,s);

        GetImage(0,0,400,200,p^); PutImage(0,0,p^,0);

        Blockwrite(Fv,p^,s);        Delay(500);        Close(Fv);         Readln;

       CloseGraph;    End.

Пример 4.  Программа для описания движущегося объекта.  Известно, что размер уходящего тела для зрителя кажется, что его размер  уменьшается.  Кроме этого оно меняет место расположения. Пусть рассматривается  движение  круглого тела.   Вводятся следующие обозначения:

xc, yc – начальные координаты центра круглого тела;

R – радиус круга в начальный момент;

x,y -  текущие координаты центра круга.

Пусть в начальный момент центр круга имеет координату (xc, yc), а его   радиус  R = 60, а затем  меняется координата центра, а радиус уменьшается. Каждый раз предыдущее изображение тела (круга) стирается, появляется новое изображение. Зрителю кажется, что оно движется и удаляется.  Для организации такого процесса  используются процедуры Delay (задержание)  и  Cleardevice (стирание). Текст программы записывается в следующем виде:

Program SHARIK;

      Uses Graph, Crt;

        Const  xc=50; yc=50;        Var x,y,d,m,i,r:integer;

    Begin                                          

        d:=detect; InitGraph(d,m,' ');       x:=xc; y:=yc; R:=60;       SetBkColor(3);

     repeat        Line(40,40,40,400); { Построение горизонтальной  оси}

{ Построение стрелки горизонтальной оси:     }

     Line(40,400,37,385);      Line(40,400,43,385);

     Line(40,40,600,40); {Построение вертикальной оси}  

     Line(600,40,585,33); Line(600,40,585,43); { Построение вертикальной оси}

{ Установка  знаков осей и системы: }

        SetTextStyle(0,0,2);      OutTextXY(15,360,'Y');

        OutTextXY(590,10,'X');       OutTextXY(15,15,'O');

{ Изменение координаты центра радиуса круга:}

        x:=x+5; y:=y+5; R:=R-1;

{ Построение круга и  окрасить:}

        Circle(x,y,R);        SetFillStyle(1,12);     FillEllipse(x,y,r,r);

{ Задержание на некоторое время изображения на экране:}        Delay(500);

{ Стирание изображение:            }        Cleardevice;

   until KeyPressed;{ До нажатия любой клавиши}

     CloseGraph;    { выход из графического режима}

     readln;

 end.

 

Задания для самостоятельного выполнения:

№1 Написать программу, которая выводит на экран график следующей функции     для значений аргумента, заданного в  [0,1]. Начало координат установить в центре экрана.

1

2

3

4

12

13

14

5

11

16

15

6

10

9

8

7

  №2  Нарисовать матрицу  размера   n x n, клетки которой заполнены целыми числами по спирали. Образец такой матрицы показан ниже:

 

 

  

№3  Составить программу для построения нижеприведенного рисунка. Значения центров и радиусов кругов, параметров прямой вводятся с клавиатуры. 

 

 

 

№4  Составить программу, показывающую на экране  движение Луны вокруг Земли.  Считать, что Земля и Луна круглые.

№5   Составить программу, показывающую  Солнца, Земли и Луну, которые вращаются относительно друг друга. Их можно нарисовать как точки.

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

№7 Составить программу приближения круга (увеличения).

№8  Составить программу для построения на экране таблицу размера  4х7, в каждой клетке, образованной при этом, написать буквы латинского алфавита.

№9  Составить программу, описывающую движение ядра, выпущенного из пушки.  

№10  Нарисовать  пятиугольник, координаты вершин которого (xi,yi), i=1,2, . . . ,5 заданы:

 

 

   

Список литературы 

1. Абрамов С.А., Гнездилова Г.Г., Капустина Е.Н., Селюн М.И. Задачи по программированию. – М.: Наука. Гл. ред. физ.-мат. лит, 1988.  - 224 с.

2. Аляев Ю.А., Козлов д.А. Алгоритмизация и языки программирования Pascal, C++, Visual Basic: Учебно-справочное пособие.- М.: Финансы и статистика, 2004.-320 с.

3. Бөрібаев Б. Программалау тілдеріне кіріспе: Оқулық – Алматы: Алматы экономика және статистика академиясы, 2008. – 380 б.

4. Зелковиц М., Шоу А., Гэннон Дж. Принципы разработки программного обеспечения / Пер. с англ. – М.: Мир, 1982. – 386 с.

5. Инструментальные средства персональных ЭВМ. В 10 кн. 4. Программирование в среде Турбо Паскаль: Практическое пособие / Л.А. Агабеков и др.; Под ред. Б.С.Трусова.- М.: Высшая школа, 1993. – 142 с.

6.  Истомин Е.П., Новиков В.В., Новикова М.В. Высокоуровневые методы информатики и программирования. Учебник. - СПб.: ООО  «Андреевский издательский дом», 2006. - 228 с.

7. Климова Л.М. PASCAL 7.0. Практическое программирование. Решение типовых задач. – М.: КУДИЦ-ОБРАЗ, 2000. – 528 с.

8. Культин Н.Б. Программирование в Turbo Pascal 7.0 и  Delphi. -  2-ое изд., перераб. и доп. – СПб.: БХВ – Петербург, 2004. – 416 с.

9. Культин Н. Основы программирования в Delphi7. – СПб.: БХВ-Петербург, 2005. – 608 с.

10. Культин Н. Turbo Pascal  в задачах и примерах. – СПб.: БХВ-Петербург, 2008. – 256 с.: ил.

11. Құралбаев З.  Алгоритмдеу және программалау тілдері. –Алматы, 2008. - 353 бет.

  

Сводный план издания  2011 г., поз. 257