TurboPascal для начинающих
методическая разработка по информатике и икт (9 класс) по теме

Мокрушина Альбина Евгеньевна

Учебник по программированию для начинающих

Скачать:

ВложениеРазмер
Microsoft Office document icon PASCAL.DOC423.5 КБ

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


МОКРУШИНА А.Е.


I. ОБЩИЕ СВЕДЕНИЯ О ЯЗЫКЕ ПРОГРАММИРОВАНИЯ PASCAL

§1. История создания языка

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

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

Стройность и лаконичность, широчайшие возможности в области отработки различных структур данных обусловили популярность языка PASCAL. Его модификация PASCAL7.0 отражает все современные тенденции в области объектно-ориентированного программирования.

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

§2. Алфавит

Для набора команд используются строчные и прописные латинские буквы. Некоторые латинские буквы по начертанию совпадают с буквами русского алфавита (А, В, М, О и т.д.), но так как коды у них разные, то компьютер их различает. Поэтому русские буквы нельзя использовать в написании команд.

Цифры от 0 до 9.

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

Знаки операций и отношений:

Знак

Значение

+

Сложение

-

Вычитание

*

Умножение

/

Деление

<

Меньше

>

Больше

< =

Меньше или равно

> =

Больше или равно

=

Равно

< >

Неравно

  1. Знаки пунктуации:

Знак

Значение

{…} или (*…*)

Комментарии

[…]

Выделение индексов массивов и элементов множеств

(…)

Алгебраические скобки

Апостроф

:=

Знак присваивания

;

Разделение операторов

Функция

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

Тип аргумента

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

Abs(x)

Integer, real

Integer, real

Sqr(x)

Integer, real

Integer, real

Sqrt(x)

Integer, real

Integer, real

sin x

Sin(x)

Integer, real

real

cos x

Cos(x)

Integer, real

real

Exp(x)

real

real

ln x

Ln(x)

real

real

Выделение дробной части аргумента

Frac(x)

real

real

Выделение целой части аргумента

Int(x)

real

real

Проверка нечетности

Odd(x)

LongInt

Boolean(true, если число нечетное)

Округление вещественного числа до целого

Round(x)

real

Integer, LongInt

Выделение целой части вещественного числа

Trunc(x)

real

Integer, LongInt

Формирование случайного числа

Random(x)

word

integer

Random

Аргумент не задан

real

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

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

Например: 1,45  1.45               0,5  .5

Вещественное число можно записать двумя способами:

а) Число записывается с десятичной точкой, за которой должна следовать хоть одна цифра. Такая запись числа называется представлением числа с фиксированной точкой.

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

Например:          5е+2 5*102 5*100=500

                            3е-3 3*10-3 3*0,001=0,003

                            .25е+3 0,25*103 0,25*1000=250

                             .5е+2 0,5*102 0,5*100=50


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

К простым типам данных относятся:

а) числовые типы

Название

Диапазон

Знак

Целые типы

SohrtInt

от -128 до +128

+ -

Integer

от -32768 до +32767

+ -

LongInt

от -2 147 483 648 до
+2 147 483 647

+ -

Byte

от 0 до 255

+

Word

от 0 до 65535

+

Вещественный тип

Real

от 2.9*10-39 до +1.7*10 +38

+

б) Логический тип.

Величины логического типа могут принимать только два значения: TRUE – истина и FALSE – ложь. Про эти значения известно, что TRUE > FALSE.

в) Символьный тип.

Стандартный тип CHAR включает полный набор ASCII-символов. В программе при задании символьных значений необходимо использовать апострофы: ‘A’, ‘9’ и т.д.

Тип STRING – строка от 0 до 255 символов в апострофах.

г) Тип-диапазон задается начальным и конечным значениями, которые разделяются двумя точками.

Например, TYPE LIN= -100 ..100   определяет целые числа в диапазоне от –100 до 100.

Задания по теме:

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

а) x;  x1;  x1;  x’;    б) x1x2;  ab;  abcd;  ab+cd;

в) sin; sin(x); sinx;      г) объем; delta; volume;    

д) a1%; abc$; 2d$; dx1a.

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

а) 15е+3;          б) 1.5е+2             в) 1.5е-2              г) 1е+5    

д) -3е+4            е) -5е-2               ж) 1.7е+2            з) -5.3е+2

и) 100е-2          к) 5.9е+3             л) 12.8е+4          м) -.4е+4.

3. Переведите числа в форму с плавающей точкой

а) со степенью 2;     б) со степенью -2:

3;  -0,005;  4,5;  72342;  35000;  -4700;  -0,00034.

4. Сравните числа:

а) 3.5  и  0.035е+2             б) 7.4  и  0.134е+3            

в) 1.7е+3  и  2000              г) 3.7е+2  и  371                

д) 3е-5  и  0.0005               е) 35е-3  и  0.035.

5 Какие из следующих последовательностей символов являются выражениями, записанными по правилам Pascal:

а) 1;           б) a;            в) ab;            г) 1+y;              д)2xy;

e) -2*xy;   ж) xy2;        з) x2+y2;       и) -abs(x)+sin(y);

k) abs(x)+cos(abs(y-1,7));       л) x+y*z;      м)1/2+beta;

н) ;   o) sqr(abs (x));   п) x1y1 +x2y2;    р) x1/x2+y1/y2 ?


 6. Переведите выражения в линейную форму:

а);

б)  ;

в) ;

 г) ;

д) ;

е)  

 ж) ;

 з);

и) mg cos;

к) ;

л);

м)

н);

o) .

п)

р)

7. Переведите из линейной формы записи в обычную:

а) a/b*c;      б) a/b^c;     в) a/b^c^d;    г) a+b/c;    д) (a+b)/c.

8. Переведите из линейной формы записи в обычную:

а) 1/sqr(1+x^2);    б) sqr(x^2+y^2);         в) x^(1/3);     г) 1/x^(1/3);       д) (a+b)/(c+d);

е) a+b/c+d;            ж)a/sin(a).

 9. Переведите из линейной формы записи в обычную:

а) sqr(tg(a+b))/ sqr(tg(a-b));          б)1/2*a*b*sin(c);    

 в) 4*R*sin(/2)*sin()*sin()      г) sgr(a*x^2+b*x+c).

10. К каким типам величин могут принадлежать следующие значения:

 123, '9’, 9, ‘word’, 90.87, 6e+8, ‘6e-9’, 45, 677, 129, 34,908, ‘hgf’,4.9 ?

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

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

Общий вид программы:

Program имя;

Label список меток;

Const список констант;

Var список переменных;

Type

procedure имя процедуры;

Begin

end;

function имя функции

begin

end

begin

тело программы

end.

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

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

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

§4.1 Оформление программ

  1. После служебного слова, означавшего название оператора, обязательно ставится пробел.
  2.  Любую команду можно снабдить комментарием – поясняющим текстом, который заключается либо в фигурные скобки {…} либо в круглые скобки со звездочкой (* …*).
  3. Например, {Это моя первая программа} или (*Это моя первая программа *).
  4. Для того чтобы при выводе результатов на экране не было лишних данных, в начале программы целесообразно поставить процедуру очистки экрана ClrScr из блока CRT.

Например,

Program p1;

Uses crt;

Begin

clrscr;

{очистка экрана};

end.

  1. Каждый оператор заканчивается точкой с запятой (;). Исключением может быть только последний, перед end, оператор.
  2. Заканчивается программа оператором end. и точкой.    


II. ПРОСТЫЕ ОПЕРАТОРЫ

§5. Оператор присваивания

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

ИМЯ ПЕРЕМЕННОЙ:= ВЫРАЖЕНИЕ;

Например, а:=10; b:=3;

Работа команды делится на два этапа:

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

Внимание! В команде присваивания тип переменной должен быть согласован с типом выражения.

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

Читать команду А:=5 следует таким образом: “Переменной А присвоить значение 5.” или просто “А присвоить 5”.

Команду А:=А+1 следует понимать следующим образом. Выше описаны два этапа работы команды присваивания: на первом этапе вычисляется значение А+1. Для компьютера А — это не буква, а переменная с именем А, в которой лежит какое-то значение. Таким образом, компьютер к этому значению прибавит 1. Полученное число 6 на втором этапе будет помещено в переменную,  имя которой записано слева, т.е. в переменную А. Старое значение будет заменено новым.

При  записи выражений в команде присваивания необходимо помнить о приоритете операций:

1) возведение в степень и действия в скобках.

2) умножение и деление.

3) сложение и вычитание.

Задача 1.

Какие значения последовательно будет получать переменная Х при выполнении следующих команд

Х:=10                                              

Х:=Х+5

Х:=Х/3

Х:=Х*2+1?

Решение:

Х:=10

Х:=Х+5     Х:=10+5:=15  Х:=15

Х:=Х/3       Х:=15/3:=5 Х:=5

Х:=Х*2+1   Х:=5*2+1:=26  Х:=26

Задания по теме

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

а) a:=b      б) a:=c+1     в) a/b+a/c       г) a+b:=с  д) d=1      

е) x:=a+c      ж) y=x           з) a$:=c$.          и) d:=’abc’ ?

12. Значение величины равно 3. Чему оно будет равно после выполнения команд:      

 а) х:=5;     б) х:=х+5;     в) у:=х.

13. Значение х равно 3. Чему было равно х до выполнения команд:

а) х:=х+5;  б) х:=-х;  в) у:=х;

г) у:=1:  х:=х+у;  д) у:=х: х:=у.

14. Какие значения последовательно получает переменная х после выполнения команд:  

а) х:=1

б) х:=5

в) х:=10

у:=5

х:=х+4

у:=х/2

х:=х+у

х:=х/3

z:=у*5

х:=х*х+1

х:=х+у+ z.

15. После выполнения оператора присваивания х:=х+у значение величины х стало равно 3, а значение у :=5. Чему были равны значения величин х и у до выполнения оператора?

 16. Значение величины х равно а, значение у равно b. После выполнения каких их указанных ниже последовательностей команд значения величин х и у поменяются, т.е. х станет равно b, а значение у станет равно а:

а) х:=у

б) t:=x

 в) x:=y+x

 г) t:=x

y:=x

x:=y

y:=x-y

y:=t

 

y:=t

x:=x-y

x:=y.

17. Задать в виде оператора присваивания следующие действия:

а) Переменной z присвоить значение, равное полусумме значений переменных х и у.

б) Удвоить значение переменной а.

в) Значение переменной х увеличить на 0,1.

г) изменить знак значения переменной  t.

18. Задать с помощью операторов присваивания следующие действия:

а) переменной а присвоить значение разности, а переменной b — полусуммы значений переменных х и у.

б)переменной а присвоить значение удвоенного произведения значений переменных х и у, а переменной b — значение 0.

19. Найдите ошибки в программе:

program p;

 const a=10; b=23;

begin

 c=a*b

end.

§6. Ввод данных с клавиатуры

Ввод данных с клавиатуры выполняется двумя процедурами  READ и READLN.

READ (список ввода);  или   READLN (список ввода); 

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

В случае READ курсор после ввода данных и нажатия {Enter}, остается на той же строке, а READLN переводит курсор на следующую строку.

Например, …; read(x, y, z); end. Допустим, введем числа 10, 11 и 12. Переменные получат соответствующие значения.

  1. 11        12            

  x         y         z

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

Задания по теме:

20. Какие из перечисленных операторов могут являться операторами ввода с клавиатуры?

а) read(d); б) readln(‘d’,d); в) input (“a=”;a) г) read(a,b,c);

д) read(abc); е) readln; ж) readln( ).

21. Какие значения получат переменные x, y и z после выполнения программы, если с клавиатуры будут последовательно введены числа 12 и 5:

program p;

var x, y, z:byte;

begin

 readln (x,y);

 z:=x*y;

end.

§ 6.1 Генератор случайных чисел

RND — это встроенная функция, которая выдает случайное число в интервале от 0 до 1.

Для того, чтобы получить числа из интервала (А; В) нужно использовать формулу

                              (В-А)* RND + А.

При RND=0 число будет равно А, а при RND=1 — В.

Чтобы получить целое число на интервале (А; В) надо воспользоваться функцией INT, которая вычисляет целую часть числа:

                             INT((В-А+1)* RND+ А).

Дополнительная информация:

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

§7. Вывод информации

Для вывода данных на экран используют процедуры Write; и  Writeln;.

Write(список вывода); или  Writeln(список вывода);

Процедура Write выводит на экран список данных, не переводя курсор на следующую строку, а Writeln – переводит курсор на следующую строку.

Например,

Program p2;

 Var x,y,z:word;

begin

x:=10;y:=5;z:=x+y;

Write(‘x=’,x);

Writeln(‘y=’,y);

Write(‘z=’,z)

end.

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

Write(величина1:кол-во позиций1,…,величинаN:кол-во позицийN);

Например,         …

J:=5; I:=10;

                Write(J:8,I:12,’СТРО КА’:10)

                End.

§7.1. Управление выводом на печать

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

GoToXY(x,y)

где x и y – числовые величины типа byte. X – столбец (1≤x≤80), y – строка (1≤y≤25). Верхний левый угол экрана имеет координату (1,1). Если задаются недопустимые координаты, то обращение к процедуре игнорируется.

Задача.

Вывести в третьей, четвертой и пятой строках, в третьем, шестом и девятом столбцах слова «март», «апрель» и «май».

Решение:

Program p3;

  Uses crt;

Begin

  Clrscr;

  Gotoxy(3,3); write(‘март’);

  Gotoxy(6,4); write(‘апрель’);

  Gotoxy(9,5); write(‘май’);

End.

Задания по теме:

22. Какие из перечисленных последовательностей символов являются операторами вывода:

а) WRITE (X, Y)

б)WRITE (‘X=’,X)      

в)WRITE ‘A=’,A

г) WRITE (A, ‘symbols’)

д) WRITE (a=b)

е) input a      

ж)WRITE (a;b;c)

з)PRINT “  “;k;” “

23. Вывести на экран свою визитную карточку. Например:

*************************************************

*                         Смирнов      Алексей    Олегович              *

*                                 менеджер по кадрам                           *

*                                фирма “НОВОЕ ВРЕМЯ”                   *

*                                        тел. 673-54-21                              *

*************************************************

24. Какие числа будут выведены на экран в результате выполнения последовательности операторов:

Readln x; Write (x, x,/2,x*10);    если в качестве исходного данного использовалось числa:

а) 12;    б) 2;    в) 52;    г) 100 ?

25. Даны два числа. Найти среднее арифметическое кубов этих чисел и среднее геометрическое модулей этих чисел.

26. По двум катетам найти гипотенузу и площадь прямоугольного треугольника.

27. Даны два числа х и у. Вычислить их сумму, разность и произведение.

28. Дана  длина ребра куба. Найти площадь грани, площадь полной поверхности и объем этого куба.

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

30. Известны количество жителей в государстве и площадь его территории. Определить плотность населения в этом государстве.

31. Дано расстояние в сантиметрах. Найти число полных метров в нем.

32. Дана масса в килограммах, Найти число полных тонн в ней.

33. Дано расстояние в метрах, Найти число полных километров в нем.

34. Дано четырехзначное число. Найти

а) сумму его цифр;      б) произведение его цифр.

35. В киоске продают различные журналы стоимостью 12 рублей. Напишите программу, анализирующую покупку и выдающую на экран результат в виде:


II. СОСТАВНЫЕ ОПЕРАТОРЫ

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

§ 8. Условный оператор

Условный оператор позволяет выполнять те, или иные действия, в зависимости от выполнения условия. Условный оператор имеет две формы.

  1. Сокращенная форма:

IF <условие> THEN <оператор>

  1. Полная форма:

IF <условие> THEN <оператор1> ELSE <оператор2>

В случае сокращенной формы, если условие выполняется (истинно), то выполняется оператор, если условие не выполняется (ложно), происходит переход к следующему оператору.

Если форма ветвления полная, при истинности условия выполняется оператор1, в противном случае – оператор2.

Задача.

Дано действительное x. Найти значение функции y=.

Решение.

Так как область допустимых значений функции x≠0.

Program p4;

  Uses crt;

  Var x, y:real;

Begin

 Write(‘Введите x:’); readln(x);

 If x = 0 then writeln(‘Вне ОДЗ’);

Else begin

  Y:=1/x; writeln(‘y=’,y:2:2);

       End;

End.

Задача.

Дано x. Вычислить Y, если Y=

Решение:

Program p5;

  Uses crt;

  Var x, y: real;

Begin

 Write (‘Введите x:’); readln(x);

 If x < 0 then y:=0

Else

  Y:=x*x*x;

 Writeln (‘y=’,y:2:2);

       End;

End.

Задача.

Дан график функции. Написать программу вычисления значения функции при x, заданном с клавиатуры.

         Y

                       

                      y=2

 y=x                      y=6-x

     0     1      4    6      x

Решение:

Program p6;

  Uses crt;

  Var x, y:real;

Begin

 Write(‘Введите x:’); readln(x);

 If x <1 then y:=x

Else

 If x>4 then y=6-x

else  Y:=2;

 writeln(‘y=’,y:2);

End.

§8.1  Простые и составные условия

В условных операторах и в операторах условных циклов в качестве условия можно использовать отношения равенства и неравенства: a>0; c<=0 и т.д. Такие условия называют простыми.

Из  простых условий в Паскале разрешается строить более сложные или составные условия. Для этих построений существуют определенные правила.

Прежде всего требуется, чтобы все отношения, которые используются при построении, заключались в скобки: (a=b+1), (c>=0), (s>t) и т.д.

Далее, пусть А и В — некоторые условия. Рассмотрим связки, которыми они могут быть соединены.

1. А and B (чит. А и В) — это условие соблюдается тогда и только тогда, когда соблюдаются оба условия.

2. A or B (чит. А или В) —  это условие соблюдается тогда и только тогда, когда соблюдается хотя бы одно из условий А и В.

3. not A (чит. не А) — это условие соблюдается тогда и только тогда, когда условие А не соблюдается.

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

1)  NOT;  2) AND;  3) OR.

Задания по теме:

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

а) IF A=B THEN A=B;

б) IF A=B THEN A=B ELSE B=A;

в) IF A=B TO C=A+B;

г) IF A<>B THEN A=ABS(B)

д) IF A<0 THEN PRINT A ELSE END;

е) IF A<>0 THEN Y=1/A ИНАЧЕ ЕND.

37. Составить программу вычисления значения функции Y для х, вводимого с клавиатуры:

а) Y= ;      б) Y=;    в) Y=     г) Y=  .

38. Написать программу удвоения меньшего из двух чисел.

39. Даны три числа. Возвести в квадрат те из них, значения которых неотрицательны. Отрицательные числа оставить без изменения.

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

41. Даны два числа.  Вывести на печать первое число, если оно больше второго, и оба числа, если это не так.

41. Найти наименьшее из трех чисел.

42. Найти значение функции у=, в точке x. Значение х ввести с клавиатуры.

44. Дано Х. Вычислить У, если:

а) y=

б) y=

в) y=

45. Дано действительное x. Для функций y=f(x), графики которых представлены на рисунках, вычислить f(x).

a)                     y

                     

                  1            y=1

                       y=x2

       -1         0     1        x

б)                       y

                       

  y=x2

       -1     0     y=sin(x)                                                     x

46. По заданным условным операторам нарисуйте графики функций

  1. IF X<1 THEN Y=X^3 ELSE Y=2-X;
  2. IF X>=2 THEN Y=X-4  ELSE

                  IF X>-1 THEN Y=-X ELSE Y=1/X


  1. ЦИКЛИЧЕСКИЕ СТРУКТУРЫ

§ 9 Понятие цикла.

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

Задача.

Вывести на экран квадраты первых N натуральных чисел.

Разберем решение задачи, например,  для N=5.

Program p7;

  Uses crt;

begin

clrscr;

Writeln ( 1*1);

Writeln ( 2*2);

Writeln ( 3*3);

Writeln ( 4*4);

Writeln ( 5*5);

END.

Для небольших значений N написать и набрать эту программу не составит труда — можно воспользоваться копированием и вставкой строк, а потом только исправить числа. Но представьте себе в какого “монстра” превратится эта программа, если нам придется писать ее для N=1000 !

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

Таким образом, при многократном повторении одних и тех же действий речь может идти о цикле. А что такое цикл? Когда Вы говорите о человеке — “зациклился”? Когда он много-много  раз говорит об одном и том же или делает одно и то же.

Итак, цикл — это многократное повторение одних и тех же действий.

Цикл в общем виде должен содержать:

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

 Тело цикла —  действия, повторяемые многократно.

 Изменение переменных цикла.

 Проверку условия окончания (продолжения) цикла.

 В случае выполнения условия продолжения цикла, переход к пункту 2.

§ 10. Оператор безусловного цикла FOR …DO

FOR счетчик := нач.значение TO кон.значение DO

ТЕЛО ЦИКЛА;

Где счетчик – это переменная, которая изменяется от начального значения до конечного с шагом 1 (нач.значение < кон.значения).

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

FOR счетчик := нач.значение DOWNTO кон.значение DO

ТЕЛО ЦИКЛА;

Если требуется повторить группу операторов, то тело цикла следует заключить в операторные скобки begin … end:

FOR счетчик := нач.значение TO кон.значение DO

Begin

ТЕЛО ЦИКЛА;

      End;

Примечание: прервать выполнение цикла можно оператором BREAK.

Задача:

Подсчитать сумму натуральных чисел от 1 до 100.

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

Решение:

Program p8;

  Uses crt;

   Var i, s:integer; {i – счетчик, s -  «копилка» суммы};

Begin

  Clrscr;

  S:=0;

  For i :=1 to 100 do s :=s+i;

Writeln (‘сумма чисел от 1 до 100=’,s)

End.

Задача.

С клавиатуры вводятся два числа – a и n. Найти an.

Примечание: Так как в TurboPascal нет операции возведения в степень, задача сведется к тому, что в «копилке» мы будем копить произведения чисел а. Так как мы считаем произведение, то инициализировать переменную s следует единицей.

Решение:

Program p9;

  Uses crt;

   Var a, n, i, s: integer; {i – счетчик, s -  «копилка» степени};

Begin

  Clrscr;

  S:=1;

  For i :=1 to n do s:=s*a;

Writeln (‘a в степени n=’,s); End.

Задача.

Подсчитать и напечатать сумму дробей вида    для n от 1 до 5.

 Решение:

Program p10;

  Uses crt;

   Var i:integer, s:real; {i – счетчик, s -  «копилка» степени};

Begin

  Clrscr;

  S:=0;

  For i :=1 to 5 do

begin s:=s+1/i;

if i<>5 then write (‘1/‘,i,’+’) else write (‘1/‘,i,’=’)

end;

write (s:4:2)

End.

Задача.

Вывести на экран 1000 символов * в случайных местах.

Program p11;

  Uses crt;

   Var I,x,y:byte;

Begin

  Clrscr;

  For I:=1 to 1000

 Begin

   X:=random(80);

   Y:=random(45);

   Gotoxy(x,y);write(x,y);

End;

End.

Задания по теме:

47. Составьте программу, выводящую на экран таблицу перевода милей в километры (1 миля=1.603 км) от 1 мили до 10.

48. Вывести на экран натуральные числа от 40 до 10.

49. Дано натуральное N. Вычислить:  

 а) ;         б)  

50. Написать программу вычисления суммы всех двузначных чисел.

51. Написать программу вычисления произведения всех натуральных чисел на интервале от 1 до n. N – ввести с клавиатуры..

52. Составьте программу, выводящую таблицу умножения на N. N вводится с клавиатуры.

53. Вывести на экран все натуральные делители числа n.

54. Вывести на экран значения функции Y=x2, для x на интервале от -10 до 10.

55. Вывести на экран значения функции Y=, для x на интервале от 10 до 20.

56.Найти сумму четных чисел на интервале от 1 до 30.

§ 11. Цикл WHILE … DO

Цикл While является циклом с предусловием. То есть условие продолжения цикла проверяется перед каждым выполнением тела цикла.

WHILE <условие> DO <тело цикла>

Цикл выполняется, пока условие истинно. Как только условие становится ложным, цикл завершает свою работу.

Например, дано число Х. Возводить Х в квадрат, пока оно не превысит 100.

Program p12;

  Uses crt;

  Var x: word;

Begin

  Clrscr;

  Write(‘x=’); readln(x);

  While x<=100 do

    Begin

      Writeln(‘x=’;x);

     x:=x*x;

    end;

End.

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

Таким образом, при работе с циклом WHILE … DO необходимо помнить:

тело цикла может не выполниться ни разу, если условие сразу не выполняется;

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

Задача.

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

Примечание. В §10 мы решали подобную задачу, но в ней подсчитывалась сумма натуральных чисел от 1 до 100. Здесь же сами числа и их количество заранее не известно. В этом случае нам на помощь и приходит цикл WHILE … DO – пока введенное число не ноль. будем считать сумму.

Решение.

Program p13;

  Uses crt;

  Var x, s: integer;

Begin

  Clrscr;

s:=0; readln(x);

  While x <> 0 do

    Begin

      read(x);

     s:=s+x;

    end;

End.

§12. Оператор цикла REPEAT … UNTIL

Этот цикл является циклом с постусловием, то есть проверка условия осуществляется после каждого выполнения тела цикла.

REPEAT

                   <Тело цикла>

UNTIL <условие>;

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

Задача.

Найти квадратный корень из введенного с клавиатуры числа х (х0).

Решение:

Program p14;

  Uses crt;

  Var x, y: real;

Begin

  Repeat

    Clrscr;

    Write (‘x=’); readln(x);

  Until x<0;

  Y:= sqrt(x); Writeln(‘корень из ‘, x, ‘=’,y:6:4)

End.

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

Допустим, необходимо ввести число из диапазона
[a; b]. В этом случае цикл будет выглядеть следующим образом:

  Repeat

    Clrscr;

    Write (‘x=’); readln (x);

  Until (x>=a) and (x<=b);

Задания по теме:

56. Вводится последовательность целых чисел, ноль – конец последовательности. Найти максимальное число.

57. Вводится последовательность целых чисел, ноль – конец последовательности. Найти минимальное число.

58. Вводится последовательность целых чисел, ноль – конец последовательности. Найти сумму всех чисел.

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

60. Вводится последовательность целых чисел, ноль – конец последовательности. Найти количество положительных чисел.

61. Вводится последовательность целых чисел, ноль – конец последовательности. Определить каких чисел, положительных или отрицательных, больше.

62. Вводится последовательность целых чисел, ноль – конец последовательности. Найти количество четных чисел.

Вводится последовательность целых чисел, ноль – конец последовательности. Определить встречается ли в последовательности хотя бы одна пара одинаковых рядом стоящих чисел (an=an+1).

§13. Символьные и строковые величины

В TurboPascal 7.1 существует стандартный тип данных, который называется CHAR. Этот тип считается порядковым, и значения величин могут сравниваться между собой по кодам. Известно, что коды латинских букв упорядочены по алфавиту и, начиная с 65, идут коды заглавных  букв, а с 97 — коды маленьких букв. Коды заглавных русских букв — с 128 до 159, а коды строчных русских букв по алфавиту не упорядочены: коды малых букв от «а» до «п» идут от 160 до 175 соответственно, а коды от «р» до «я» - от 224 до 239.

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

PRED(x) – дает предыдущее значение аргумента. Например, PRED(‘B’)=’A’.

SUCC(x) – дает последующее значение аргумента. Например, SUCC(‘a’)=’b’.

ORD(x) – дает численное значение кода. Если х – символ, то функция дает код, если это целое число, то функция равна числу.

Последовательность символов, заключенная в апострофы, называется строкой и описывается типом STRING. Например, ‘дом’,’школа’,’12345’,’abc’ и так далее.

Длина строки типа STRING может иметь длину от 1 до 255 символов. Можно указать длину строки: STRING[N], в этом случае максимальная длина строки будет N символов.

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

Склейка(конкатенация) строк и символов выполняется с помощью знака «+» или функции

Concat(x1, x2, …,x3).

Например,…
                Writeln(‘a’+’b’+’c’);
                Writeln(concate(‘d’,’e’,’f’);

                  End.

Функция Copy(s, k, l), где s:string, k,l: byte – копирует из строки s l символов, начиная с символа с номером k.

Например,
Program p15;

  Uses crt;

  Var x: string;

Begin

   Clrscr;

   x:=’ФОРМУЛА’;

   Write (copy(x, 4, 3));

End.

Примечание: отдельные символы можно копировать, указывая номер символа в квадратных скобках. Например, s[10], s[5] и так далее.

Процедура Delete(s, k, l), где s:string, k,l: byte – удаляет (вырезает) из из строки s l символов, начиная с символа с номером k.

Program p16;

  Uses crt;

  Var x: string;

Begin

   Clrscr;

   x:=’ФОРМУЛА’;

   Delete(x,5,2);

   Write (x);

End.

Процедура Insert(st, s, k), где st, s: string; k: byte – вставляет строку st в строку s перед позицией k.

Например,

Program p17;

  Uses crt;

  Var s, st: string;

Begin

   Clrscr;

st:=’Л’;

   s:=’СОВА’;

   Insert(st, s,2);

   Write (s);

End.

Задача.

Из слова «ЭЛЕКТРИЧЕСТВО» путем копирования и склейки выделить слова «ствол», «лектор» и «волк».

Решение:

Program p18;

  Uses crt;

  Var s: string;

begin

  S:=’ЭЛЕКТРИЧЕСТВО’

  Writeln(Copy(s,10,4)+s[2]);

  Writeln(Copy(s,2,4)+s[13]+s[2]);

  Writeln(Copy(s,12,2)+s[2]+s[4]);

End.

Задания по теме:

61. Используя процедуры склейки и копирования строк, составить несколько слов из символов слова:

а) интерфейс;

б) обозначение;

в) последовательность.

62. Произвести анализ введенного с клавиатуры слова: вывести длину слова, первую и последнюю буквы.

63. В веденном с клавиатуры слове заменить окончание. Заменяемое и новое окончание вводятся пользователем.

64. В введенном предложении заменить одно слово на другое.

65. Подсчитать количество слов в предложении. Считать, что слова разделены одним пробелом.

66. Дано слово. Определить является ли оно перевертышем. Например, Шалаш – перевертыш, мама – не перевертыш.

67. Напишите программу подсчета вхождения буквы “А” в заданный текст. Например: БАРАБАН — рез. 3      МОРЕ — рез. 0.

68. Напишите программу подсчета числа вхождений слова Х$ в слово У$.

69. Составить программу, удаляющую из слова буквы “Д”.

        Например, ДОВОД - ОВО.

70. Напишите программу, проверяющую в выражении количество открытых и закрытых скобок.

71. Предложение состоит из слов, между словами один пробел, а после последнего слова —  точка. Найти длину самого длинного слова.

72. Составить программу контроля знаний столиц европейских государств. Например, Англия — Лондон, Франция — Париж, Испания — Мадрид.

73. Составить программу, реализующую эпизод из сказки: спрашивает, куда предпочитает пойти пользователь (направо, прямо или налево) и печатает, что его ждет в каждом случае. Ответ  компьютера присвоить символьной переменной и напечатать. Текст вопросов и ответов компьютера задать самостоятельно.


IV. РАБОТА С МОДУЛЕМ CRT

§14 Процедуры и функции модуля CRT.

Модуль CRT представляет собой библиотеку процедур и функций, осуществляющих ввод-вывод данных.

Размеры текстового экрана:

Х=1,У=1                                    Х=40, У=1

                  Х=1, У=25

Рассмотрим некоторые процедуры и функции модуля CRT, используемые для работы с текстом.

Процедура TextBackground(C), где С – числовая константа от 0 до 15, определяет цвет фона.
Например, TextBackground(15) – задает ярко-белый цвет фона.

Процедура TextColor(C) – задает цвет символов.

Например, TextColor(4) – задает красный цвет текста

Процедура ClrScr – очистка экрана цветом фона.

Процедура GotoXY(Px,Py) – устанавливает курсор для печати в столбец PX и в строку Py.

Процедура Window(x1,y1,x2,y2), где x1,y1,x2,y2 – числовые величины типа Byte, определяет размер текстового окна на экране.Например, Window(10,10,15,15).

Функция KeyPressed – определяет , была ли нажата клавиша на клавиатуре. Тип функции: Boolean (нажата – true, не нажата - false).

Функция ReadKey – читает значение нажатой клавиши. Тип функции: char.

Процедура Delay(t), где t – время в миллисекундах, вводит задержку в миллисекундах.

В модуле CRT цвета фона и символов можно устанавливать в соответствии с таблицей:

Числовое значение

Строковое значение

Цвет

0

Black

Черный

1

Blue

Синий

2

Green

Зеленый

3

Cyan

Бирюзовый

4

Red

Красный

5

Magenta

Фиолетовый

6

Brown

Коричневый

7

Lightgray

Светло-серый

8

Darkgray

Темно-серый

9

Lightblue

Голубой

10

Lightgreen

Салатовый

11

Lightcyan

Светло-бирюзовый

12

Lightred

Розовый

13

Lightmagenta

Малиновый

14

Yellow

Желтый

15

White

Белый

128

Blink

Мерцание символов

Задача.

Установить на экране текстовое окно и закрашивать его в различные цвета.

Решение.

Program p19;

   Uses crt;

   Var x1, x2, y1, y2, i:byte;

Begin

   Textbackground (0);

   Clrscr; {очистка экрана черным цветом};

   Writeln ‘Введите два числа от 1 до 40’);

   Readln (x1, x2);

   Writeln (‘Введите два числа от 1 до 25’);

   Readln (y1, y2);

   Window (x1, y1, x2, y2);{«открываем «окно»};

   For i:= 1 to 15 do

        Begin

           Textbackground (i);{объявляем цвет фона};

           Clrscr; {очищаем окно};

           Delay (5000);

        End;

End.

Задача.

Напечатать на экране всеми цветами фразу “ONE MOMENT, PLEASE!”, расположив ее лесенкой.

Решение.

Program p20;

   Uses crt;

   Var i:byte;

Begin

   Textbackground (0);Clrscr; {очистка экрана цветом 0};

   For i:= 1 to 15 do {15 раз выполнится тело цикла};

        Begin

           Textcolor (i);{объявляем цвет текста};

           GotoXY(I*3,I);

           Write (‘ONE MOMENT, PLEASE!’);

           Delay (5000);

        End;

End.

Задания по теме:

Нарисовать на экране несколько вложенных друг в друга разноцветных прямоугольников.

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

Нарисовать на экране прямоугольник и заставить его двигаться по горизонтали, сопровождая движение звуком.

Нарисовать на экране прямоугольник и заставить его двигаться по вертикали, сопровождая движение звуком.

Нарисовать на экране прямоугольник и заставить его двигаться по диагонали, сопровождая движение звуком.


VII. ГРАФИЧЕСКИЕ ВОЗМОЖНОСТИ.

Для работы в графическом режиме в программе должна быть ссылка на соответствующий модуль — USES  GRAPH., а также необходимо инициализировать работу модуля командой Initgraph(Driver,  Mode,  ‘C:\BP\BGI’), где Driver — параметр установки типа графического драйвера видеоадаптера, Mode — задание режима его работы, ‘C:\ BP\ BGI\’ — путь к директории, где расположены графические драйверы *.bgi. Если драйвер находится в той же директории, где и программа, то эта строка может быть пуста. Также, если указать режим видеоадаптера затруднительно, то можно разрешить определить его самой системе с помощью функции DETECT.

Program grafika;

  Uses graph;

  Var driver, mode: integer;

Begin

  Driver:=Detect;

  Initgraph(Driver, mode, ‘C:\BP\BGI\’);

…..

  Closegraph:{Закрывает графический режим}

End.

Также необходимо настроить среду TPascal. Для этого в меню OPTIONS/DIRECTORIES в поле UNIT нужно указать каталог, где расположен файл graph.tpu.

§15 Процедуры и функции модуля GRAPH.

  1. Bar(x1, y2, x2, y2:integer); —  построение закрашенного прямоугольника;
  2. Circle(x,y: integer, Radius:word); — построение окружности с центром (x,y) и радиусом Radius;
  3. ClearDevice; — очистка экрана и заливка его цветом фона;
  4. FloodFill(x,y:integer, Border: word); — заполнение замкнутой фигуры текущим цветом и узором. x,y – внутренняя точка области, Border – номер узора.
  5. Line(x1, y2, x2, y2:integer);— рисует линию, соединяющую точки с координатами (x1, y2) и (x2, y2).
  6. LineTo(x,y:integer); — рисует линию из последней нарисованной точки в указанную.
  7. OutText(TextString:string); — выводит текст на графический экран;
  8. OutTextXY(x,y:integerTextString:string); — выводит текст на графический экран c указанной точки;
  9. PutPixel(x,y:integer, Pixel:word); — рисует точку с координатами (х,у);
  10. Rectangle(x1, y2, x2, y2:integer); —  построение контура прямоугольника;
  11. SetBkColor(ColorNum: word); — определяет цвет фона;
  12. SetColor(ColorNum: word); — определяет цвет линий;
  13. SetFillStile(Pattern:word, Color:word); — определяет стиль заполнения.
  14. GetMaxХ; — функция, дающая максимальную координату Х;
  15. GetMaxУ; — функция, дающая максимальную координату У;

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

Числовое значение

Строковое значение

Цвет

0

Black

Черный

1

Blue

Синий

2

Green

Зеленый

3

Cyan

Бирюзовый

4

Red

Красный

5

Magenta

Фиолетовый

6

Brown

Коричневый

7

Light gray

Светло-серый

8

Dark gray

Темно-серый

9

Lightblue

Голубой

10

Lightgreen

Салатовый

11

Lightcyan

Светло-бирюзовый

12

Lightred

Розовый

13

Lightmagenta

Малиновый

14

Yellow

Желтый

15

White

Белый

128

Blink

Мерцание символов

Задача.

Нарисовать картинку:

                  x        x+s/2   x+s

                                                               X

y-s/2

      y

y+s/3

y+2/3*s

  y+s

     Y

Решение:

Program Home;

   Uses graph;

  Var driver, mode: integer;

          x, y, s: integer;

begin

 Driver:=Detect;

Initgraph(Driver, mode, ‘C:\BP\BGI\’);

Write(‘Введите координаты начала отсчета:’);

Readln(x, y);

{Цвет фона - белый}; SetBkColor(15);

SetFillStyle(1,9); {Способ заливки блока};

{стена};   Bar(x,y,x+100,y+100);

{Цвет линий – синий}; SetColor(1); SetFillStyle(7,11);

{крыша};Line(x,y,x+50,y-50); Line(x+100,y); Line(x,y,x+100,y);

{Заливка крыши}; FloodFill(x+2,y-1,1);

SetColor(1); SetFillStyle(1,9);

{окно}; Bar(x+25,y+25,x+75,y+75);

SetColor(1); SetFillStyle(1,2);

{труба}; Bar(x+70,y-10, x+80,y-30);

readln;

 Closegraph:{Закрывает графический режим};

End.

Задача.

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

Program p;

  Uses graph;

  Var driver, mode, y, x: integer;

Begin

  Driver:=detect; Initgraph(Driver, Mode, ‘C:\BP\BGI\’);{Инициализируем графику};

  Repeat

     Setcolor(Random(16));{Случайный цвет};

     X:=Random(GetmaxX);{случайное Х};

     Y:= Random(GetmaxY);{случайное Y};

     Circle(x,y,10);{Строим окружность};

     Delay(10);{Задержка в 10 миллисекунд};

Until Keypressed;{Проверка нажатой клавиши};

Closegraph;{Закрываем графический режим};

End.

Задания по теме.

78.Написать программу построения на экране картинок:

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

79. Изобразить на экране отрезок, пересекающий с постоянной скоростью экран слева направо параллельно горизонтальной оси. Длина отрезка 15 пикселей.

80.  Получить изображение прямоугольника, движущегося :
а) слева направо;                      б) сверху вниз;
в) справа налево;                      г) снизу вверх.

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


VIII. ПРОЦЕДУРЫ И ФУНКЦИИ.

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

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

Например, M:=MAX(x,y); — вернет в основную программу значение максимального из двух переменных x и y и присвоит его переменной М.

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

§14. Процедуры

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

Процедуры без параметров.

Описание имеет вид:

Procedure  имя;

{описание локальных переменных}

  Begin

      {операторы}

  End;

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

Задача.

Дана строка символов. Написать процедуру удаления из строки всех кратных рядом стоящих символов.

Например, аабооум  бум.

Решение:

Program p21;

   Uses crt;

Var s:string;

       L: integer;

Procedure sim;

    Var i:integer;

           Str:string;

Begin

  Str:=s[1];

  For i:=2 to L do

      If s[i]<>s[i-1] then

            Str:=str+s[i];

      S:=str;

End;

Begin

   Write(‘’); readln(s); L:=  length(s);

   Sim; writeln(s);

Readln;

End.

Процедуры с параметрами

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

Все переменные, описанные в основной программе, известны всем подпрограммам и самой программе. Это глобальные переменные.

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

Program primer;

  Var i, j, t :integer;

         Dr, mode: integer;

Procedure p1;

  Var k: byte;

Begin

  For k:=1 to 5 do

     Circle(50,50,20+k*8);

End;

Procedure p2(x, y, c, r: integer):

  Var k: byte;

Begin

   For k:=1 to 10 do

        Circle(x, y, r+k*c);

 End;

Procedure p3(x, y :integer; var m: integer);

Begin

   If x>y then m:=x else m:=y;

End;

Procedure p4(var k,t:integer);

Begin

   Inc(k,3);dec(t,2);

End;

Function F(n:integer):integer;

  Var I,k:integer;

Begin

   K:=1; for i:=1 to n do k:=k*I;

   F:=k;

End;

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

Begin

  Writeln(‘Введите 2 числа и число факториала’); readln(i, j, t);

  Dr:=Detect; Initgraph(Dr, Mode,’C:\ BP\ BGI’);{Инициализация графического режима};

  Setcolor(7);

P1; P2(400,100,5,5); readln; closegraph;{Задержка графики до нажатия ENTER};

 P3(I,j,i);

Writeln(I, ‘ -наибольшее’);

P4(i,j); writeln(i, ‘-i’, j, ‘-j’);

Writeln(F(t), ‘- факториал’, t);

End.

Рассмотрим процедуру P1 — процедура без параметров, k – локальная переменная. P1 рисует 5 концентрических окружностей с центром (50,50);

Р2(x, y, c, r: integer) — при объявлении описаны параметры величин, но нет слова var — это параметры-значения. Они могут принимать значения, которые им передаются при вызове процедуры: P2(400,100,5,5);. При х=400, y=100, с=5 и r=5 строятся концентрические окружности.

Р3(x, y :integer; var m: integer); — здесь появилась переменная m, ее так и называют – параметр-переменная, а значит она может не только принимать передаваемые при вызове P3(I,j,i); значения, но и вернуть обратно новое значение глобальной переменной i.

Р4(var k,t:integer);— здесь только параметры-переменные, которые при вызове P4(i, j) примут значения, а потом измененные значения возвратят тем же переменным, то есть k:=i, k:=k+3; t:=t-2; i:=k; j:=t.

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

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

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

Задания по теме:

1. Дан фрагмент программы:

Program p22;

Procedure P(x, y:integer);

Begin

  Y:=x+1;

End;

Procedure Q(x: integer, var y: integer);

Begin

  Y:=x+1;

End;

Procedure R(var x, y: integer);

Begin

  Y:=x+1;

End;

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

б) Определить, что будет выдано на печать после выполнения программы:

Program

  C:=2; d:=0; P(sqr(c)+c,d);writeln(d);

  C:=2; d:=0; Q(sqr(c)+c,d);writeln(d);

с) Можно ли допустить в вызове процедуры Q следующие параметры:

  C:=2; d:=0; R(sqr(c)+c,d);writeln(d);

д) Почему при изменении в процедуре P параметров-значений соответствующий фактический параметр своего значения не меняет? Что надо сделать, чтобы он менял значение?

2. Найти значения функции:

а) у=x2+x/2 для x= -4; 0,5; 3,14; 12,02;

б) y= sin x для x=0; /2; ; /3; 2;

в) y= для x=1,24; 345; 49; 999.

3. Даны длины отрезков a, b, c и d. Для каждой тройки из этих отрезков, из которых можно построить треугольник, напечатать площадь данного треугольника. Определить процедуру Pl(x, y, z), печатающую площадь треугольника со сторонами x, y, z, если он существует.

4. Даны координаты вершин двух треугольников. Определить какой из них имеет большую площадь.


IX. МАССИВЫ ДАННЫХ

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

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

Массив — это набор упорядоченных по номерам переменных одного типа, с общим именем.

Например, последовательность чисел 1.6, 14.9, -5.0, 8.5, 0,46 можно считать массивом.

Массив характеризуется именем, типом и размерностью.

Имя массива образуется по общему правилу образования имен в Pascal’е, но его имя не должно совпадать ни с одним другим именем простых переменных, используемых в программе.

§ 13.1 Линейные массивы.

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

Пусть массив носит имя А и имеет 5 элементов. Тогда его можно описать, как совокупность переменных с индексом: А[1], А[2], ... , А[5]. Индексы определяют положение элемента в массиве. Число индексов определяет размерность массива. Для рассмотренного выше примера можно записать: А[1]= 1.6,А[2]= 14.9,А[3]= -5.0,А[4]= 8.5,А[5]= 0.46.

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

Varимя массива: array [тип индекса] ofтип массива;

Для нашего примера:

Var A:array [1..5] of real;{[1..5] — ограниченный тип, А — имя массива}

Если несколько массивов имеют одинаковый тип данных и одинаковый тип индексов, то допускается в описании объединить массивы в список:

Var A, В, С:array [1..5] of real;

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

Для ввода и вывода массивов используются циклы.

Заполнение массива:

а) Ввод элементов массива с клавиатуры:

For i:=1 to 5 do

Begin write(‘A[‘,I,’]=’); readln(A[i]); end;

{организует ввод пяти элементов массива А с клавиатуры}

б) Случайным образом:

…for i:=1 to 5 do

       A[i]:=Random(10);

{ организует ввод пяти элементов массива А случайным образом на интервале от 0 до 10}

Вывод на печать:

For i:=1 to 5 do writeln(‘A[‘,I,’]=’,A[i]:4:1);

{печатает 5 элементов массива А в столбик, под значение каждого элемента отводится 4 позиции}

Задача.

Ввести с клавиатуры 10 целых чисел, больших нуля и найти их среднее значение.

Поскольку все предполагаемые числа имеют один тип, их можно оформить как массив.

А – массив из 10 элементов целого типа,

SA – среднее арифметическое (SA=(A[1]+A[2]+…+A[10])/10);

I – счетчик.

Решение:

Program p22;

  Uses crt;

  Var a:array[1..10] of word; i: byte; SA:real;{Описываем переменные};

Begin

  Clrscr; SA:=0;{Инициализируем переменную SA}

  For i:=1 to 10 do

Begin

Repeat

    Write(‘A(‘, i, ‘)=’); readln(a(i));{Запрашиваем значение i-того элемента};

Until a(i)>0;{пока не будет введено положительное число}

SA:=SA+a(i);{Суммируем введенное значение}

End;

SA:=SA/10;{Вычисляем среднее значение }

Writeln(‘Среднее значение=’,SA);{Вывод результатов}

Readln;

End.

Задача.

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

Program p23;

  Uses crt;

  Var temp:array[1..30] of integer; {Массив temp из 30 эл-в содержит ежедневные температуры};

         Max, min:integer; {Максимальная и минимальная температуры};

         I, dmin, dmax byte; {день};

Begin

   Clrscr; max:=-100; min:=100; Randomize;

   For i:=1 to 30 do

     Begin

        A[i]:=Random(15)-5;{Задаем значения температур случайным образом}

        If i<=15 then gotoxy(1,i) else gotoxy(10,i-15); {на интервале от -5 до +10}

        Writeln(I, ‘апреля - ‘, a[i], ‘град.’);

        If max

        If min>a[i] then begin min:=a[i]; dmin:=I; end;

     End;

   Writeln(dmax, ‘апреля была самая высокая температура месяца - ‘,max, ‘град.’);

   Writeln(dmin, ‘апреля была самая низкая температура месяца - ‘, min, ‘град.’);

Readln;

End.

Задания по теме:

  1. Заполнить двумерный массив из 20 элементов значениями, равными их удвоенным порядковым номерам.
  2. Заполнить массив из 20 элементов числами Фибоначчи.
    (a[1]=1, a[2]=2, a[3]=a[1]+a[2], …, a[i]=a[i-1]+a[i-2])
  3. В целочисленном массиве из 30 элементов, заданном случайным образом на интервале от 0 до 100, подсчитать количество четных чисел.
  4. Дана последовательность из 100 различных целых чисел. Найти сумму чисел этой последовательности, расположенных между максимальным и минимальным элементами (в сумму включить и эти два числа).
  5. В одномерном случайном массиве из 10 элементов поменять местами элементы.ю стоящие на нечетных местах с элементами, стоящими на четных.
  6. Дан массив из 10 элементов, заданный случайным образом на интервале [-5;+5]. Определить, сколько раз в этом массиве встречаются элементы, по своему значению равные a[1].

По теме: методические разработки, презентации и конспекты

QBASIC для начинающих

Учебник и задачник по программированию...

Школа для начинающих портних

Направленность программы «Школа для начинающих портних» по содержанию является художественной (прикладное творчество); по функциональному предназначению - общеразвивающей; по форме организ...

Музыкально- творческие задания для начинающих.

Данная работа - плод совместного творчества с преподавателем теоретических дисциплин Кисленко И.Н.  Основана на детских стихотворениях про нотки, придуманных нами и с успехом используемых в работ...

1 Курс компьютерное моделирование для начинающих 2006

Элективный курс "Моделирование для начинающих"...

Презентация к уроку технологии: Квиллинг для начинающих

Дидактический материал к урокам технологии....

Дистанционный курс для 5-6 классов "Английский для начинающих"

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

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

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