Главная страница

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


Скачать 32.35 Mb.
НазваниеПрограмма на языке Си, так же как и на большинстве современных языков программирования, создается в два этапа
АнкорЭлектронный конспект по программированию часть 1.doc
Дата04.09.2018
Размер32.35 Mb.
Формат файлаdoc
Имя файлаЭлектронный конспект по программированию часть 1.doc
ТипПрограмма
#24059
страница4 из 12
1   2   3   4   5   6   7   8   9   ...   12

setcolor ( COLOR(0,255,0) ); // зеленыйцвет

circle ( x, y, R );

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

circle ( 200, y0+20, R );

Заливка произвольной области

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

floodfill:

setfillstyle ( 1, 11 ); // стиль 1, цвет 11

floodfill (x, y, 0); // до границы цвета 0


Для заливки нужно знать координаты (x,y) одной (любой!) точки внутри этой области. Кроме того, нужно, чтобы граница области была одного цвета, без разрывов. Цвет границы указывается последним в списке данных, которые передаются функции floodfill.

Надписи

Функция outtextxy позволяет выводить текст в любом месте окна. Ей нужно задать координаты (x,y) левого верхнего угла текста. Цвет текста устанавливается с помощью функции setcolor:

setcolor ( 9 );

outtextxy ( x, y, "Вася" );

Пример программы

Напишем программу, которая использует стандартные функции

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



Процедуры

Пример задачи с процедурой

Часто в программах бывает легко выделить одинаковые элементы (например, одинаковые фигуры в рисунке). Составим программу, которая рисует на экране три одинаковых треугольника разного цвета.Конечно, можно нарисовать отдельно три фигуры «вручную»,

но хочется как-то облегчить работу, используя их сходство.Сначала нужно определить, что общего имеют эти фигуры(размеры, угол поворота) и в чем их отличие (цвет заливки, координаты). Если размеры треугольников и угол поворота известны, то для построения треугольника достаточно знать координаты одной (любой) его точки (удобно выбрать одну из вершин).Пусть (x,y) – координаты левого нижнего угла, ширина основания и

высота равны соответственно 100 и 60. Тогда легко подсчитать координаты остальных вершин: (x,y-60) и (x+100,y). Здесь мы учли,что ось Y направлена вниз.

Введем новую команду Tr, которая будет рисовать треугольник.

Вызывать ее будем так:

Tr ( x, y, c );


Здесь c – это цвет заливки треугольника.Вся проблема в том, что компьютер (вернее, программа-транслятор) не знает такой команды и не сможет ее выполнить (выдать ошибку «Неизвестная функция»). Значит, нужно объяснить эту команду, расшифровать ее через уже известные команды. Расшифровку мы оформим так:


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

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

Процедура оформляется почти так же, как и основная программа, только ее имя – не

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

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

void Tr ( int x, int y, int c )

Слово void означает, что эта команда выполняет какие-то действия (например, что-то рисует),а не вычисляет какое-то значение2. В скобках через запятую перечисляются параметры процедуры.

Параметры это дополнительные данные для работы процедуры.

Можно сделать процедуру без параметров, но она будет всегда выполнять совершенно одинаковые действия. Например, всегда будет рисовать синий треугольник в одном и том же месте.Параметры дают возможность менять результат работы процедуры – перемещать фигуру (изменяя параметры x и y) и задавать разные цвета заливки (меняя параметр c).

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

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

треугольника нужно разместить в точке (100,100). Учитывая, что длина основания треугольника и его высота равны соответственно 100 и 60, находим координаты соответствующих углов двух других треугольников: (200,100) для зеленого и (200,160) для красного. Решение нашей задачи выглядит так:


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

Tr (100, 100, COLOR(0,0,255));

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

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

Tr (200, 100, COLOR(0,255,0));

Tr (200, 160, COLOR(255,0,0));

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

• Перед именем процедуры ставится слово void. Это означает, что она предназначена не

для вычислений, а для выполнения некоторых действий.

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

• Для каждого параметра отдельно указывается его тип (int, float, char).

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

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

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

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

• Фактические параметры — это числа или любые арифметические выражения (в этом случае сначала рассчитывается их значение).

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

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

Tr ( 100 ); Too few arguments (слишком мало параметров).

Tr (100, 100, 5, 5); Too many arguments (слишкоммного…).

• Часто процедуры вызываются только один раз — в этом случае их задача — разбить большую основную программу (или процедуру) на несколько самостоятельных частей, поскольку рекомендуется, чтобы каждая процедура была длиной не более 50 строк (2 экрана по 25 строк), иначе очень сложно в ней разобраться.

• Для досрочного выхода из процедуры используется оператор return, при его выполнении

работа процедуры заканчивается.

• В процедуре можно использовать несколько операторов return: при выполнении любого из них работа процедуры заканчивается.

8. Функции

Отличие функций от процедур

Теперь мы познакомимся ещё с одним типом подпрограмм – с функциями. Функции, также как и процедуры, предназначены для выполнения одинаковых операций в разных частях программы. Они имеют одно существенное отличие: задача процедуры вычислить и вернуть в вызывающую программу значение-результат (в простейшем случае это целое, вещественное или символьное значение).

Функция это вспомогательная программа (подпрограмма), предназначенная для получения некоторого объекта-результата (например, числа). Она также может выполнять какие-то полезные действия.Покажем использование функции на примере. Решим задачу, которую мы уже решали раньше.

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

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


• Функция оформляется так же, как процедура: заголовок и тело функции в фигурных скобках.

• Перед именем функции ставится тип результата (int, float, char, и т.д.) — это означает, что она возвращает значение указанного типа.

• После имени в скобках через запятую перечисляются параметры функции — те величины,

от которых зависит ее работа.

• Для каждого параметра отдельно указывается его тип (int, float, char).

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

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

• Желательно выбирать осмысленные имена параметров — это позволяет легче разобраться в программе потом.

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

• Фактические параметры — это числа или любые арифметические выражения (в этом случае сначала рассчитывается их значение).

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

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

return 34;

returns;

return a + 4*b - 5;

При выполнении оператора return работа функции заканчивается.

• В функции можно использовать несколько операторов return.

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

• При объявлении функции после заголовка ставится точка с запятой, а в том месте, где записано тело функции — не ставится.

Логические функции

Очень часто надо составить функцию, которая просто решает какой-то вопрос и отвечает

на вопрос «Да» или «Нет». Такие функции называются логическими. Вспомним, что в Си ноль означает ложное условие, а единица – истинное.

Логическая функция это функция, возвращающая 1 (если ответ «Да») или 0 (если ответ «Нет»).Логические функции используются, главным образом, в двух случаях:

• если надо проанализировать ситуацию и ответить на вопрос, от которого зависят дальнейшие действия программы;

• если надо выполнить какие-то сложные операции и определить, была ли при этом какая-то ошибка.__

Определение простое число или нет.

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

Теперь расположим тело функции ниже основной программы. Чтобы транслятор знал об

этой функции во время обработки основной программы, надо объявить её заранее.


Функции, возвращающие два значения

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

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




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

Этот приём можно использовать и для процедур: хотя формально они не возвращают ни-

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

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

o один результат передается как обычно с помощью оператора return

o остальные возвращаемые значения передаются через изменяемые параметры

• Обычные параметры не могут изменяться подпрограммой, потому что она работает с копиями параметров (например, если менять значения a и b в функции MinMax, соответствующиеим переменные N и M в основной программе не изменятся).

• Любая процедура и функция может возвращать значения через изменяемые параметры.

• Изменяемые параметры (или параметры, передаваемые по ссылке) объявляются в заголовке подпрограммы специальным образом: перед их именем ставится знак &— в данном случае он означает ссылку, то есть подпрограмма может менять значение параметра (в данном случае функция меняет значение переменной max в основной программе).

• При вызове таких функций и процедур вместо каждого фактического изменяемого параметра надо подставлять только имя переменной (не число и не арифметическое выражение — вэтих случаях транслятор выдает предупреждение и формирует в памяти временную переменную).

9. Структура программ

Составные части программы

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

• Подключение заголовочных файлов — это строки, которые начинаются с #include

• Объявление констант (постоянных величин):

const N = 20;

Глобальные переменные — это переменные, объявленные вне основной программы и подпрограмм. К таким переменным могут обращаться все процедуры и функции данной программы (их не надо еще раз объявлять в этих процедурах).

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

должна быть объявлена и известны типы всех ее параметров.

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

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

Глобальные и локальные переменные

Глобальные переменные доступны из любой процедуры или функции. Поэтому их надо

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


• Глобальные переменные не надо заново объявлять в подпрограммах.

• Если в подпрограмме объявлена локальная переменная с таким же именем, как и глобальная переменная, то используется локальная переменная.

• Если имена глобальной и локальной переменных совпадают, то для обращения к глобальной переменной в подпрограмме перед ее именем ставится два двоеточия:


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

• затрудняют анализ и отладку программы;

• повышают вероятность серьезных ошибок — можно не заметить, что какая-то подпрограмма изменила глобальную переменную;

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

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

• для хранения глобальных системных настроек (цвета экрана и т.п.);

• если переменную используют три и более подпрограмм и по каким-то причинам неудобно передавать эти данные в подпрограмму как параметры.

Везде, где можно, надо передавать данные в процедуры и функции через их параметры. Если же надо, чтобы подпрограмма меняла значения переменных, надо передавать параметр по ссылке.
1   2   3   4   5   6   7   8   9   ...   12


написать администратору сайта