Similar presentations:
Программирование на языке Си. Процедуры (тема 11)
1. Программирование на языке Си
Тема 11. Процедуры2.
2Процедуры
Задача: Построить фигуру:
? Можно ли решить известными методами?
Особенность: Три похожие фигуры.
общее: размеры, угол поворота
отличия: координаты, цвет
? Сколько координат надо задать?
3.
3Процедуры
Процедура – это вспомогательный алгоритм, который
предназначен для выполнения некоторых действий.
Применение:
• выполнение одинаковых действий в разных местах
программы
• разбивка программы (или другой процедуры) на
подзадачи для лучшего восприятия
Задача
Подзадача1
1.1
1.2
1.3
Подзадача2
2.1
2.2
Подзадача3
2.3
3.1
3.2
3.3
4.
4Процедуры
Порядок разработки:
• выделить одинаковое или похожее (три фигуры)
• найти в них общее (размеры, форма, угол поворота) и
отличия (координаты, цвет)
• отличия записать в виде неизвестных переменных,
они будут параметрами процедуры
(x, y-60)
60
(x, y)
100 (x+100, y)
имя
процедуры
параметры
void Tr( int x, int y, int c )
{
цвет
...
тело
}
координаты
void – «пустой» (некоторые действия)
5.
5Процедуры
формальные
параметры
void Tr( int x, int y, int c )
{
60
moveto ( x, y );
lineto ( x, y-60 );
100
(x+100, y)
(x, y)
lineto ( x+100, y );
lineto ( x, y );
тело процедуры
setfillstyle ( 1, c );
floodfill ( x+20, y-20, 15);
}
(x, y-60)
«Формальные параметры» могут изменяться, заранее
неизвестны (обозначаются именами, как переменные).
6.
6Программа
60
(100,100)
100
вызовы
процедуры
формальные
параметры
#include <conio.h>
#include <graphics.h>
void Tr( int x, int y, int c)
{
...
}
main()
процедура
{
initwindow (400, 300);
Tr (100, 100, COLOR(0,0,255));
Tr (200, 100, COLOR(0,255,0));
Tr (200, 160, COLOR(255,0,0));
getch();
closegraph();
}
фактические
параметры
7.
7Процедуры
Особенности:
• обычно процедуры расположены выше основной
программы
• в заголовке процедуры перечисляются
формальные параметры, они обозначаются
именами, поскольку могут меняться
void Tr( int x, int y, int c )
• при вызове процедуры в скобках указывают
фактические параметры (числа или
арифметические выражения) в том же порядке
Tr ( 200, 100, COLOR(255,0,0));
x
y
c
8.
8Процедуры
Особенности:
• для каждого формального параметра в заголовке
процедуры указывают его тип
void A ( int x, float y, char z ) { ... }
• внутри процедуры параметры используются так же,
как и переменные
• в процедуре можно объявлять дополнительные
локальные переменные, остальные процедуры не
имеют к ним доступа
void A ( int x, float y, char z )
{
локальные
int
a2,
bbc
=
345;
int a2, bbc = 345;
переменные
...
}
9.
9Как поменять местами?
Задача: поменять местами
содержимое двух чашек.
2
Задача: поменять местами содержимое двух ячеек
памяти.
y
x
x = y;
y = x;
c = x;
x = y;
y = c;
4
6
? Можно ли обойтись без c?
2
?
4
c
6
4
10.
10Параметры-переменные
Задача: составить процедуру, которая меняет местами
значения двух переменных.
Особенности: надо, чтобы изменения, сделанные в
процедуре, стали известны вызывающей программе.
void Swap ( int a, int b )
эта процедура
{
работает с
int c;
копиями
c = a; a = b; b = c;
параметров
}
main()
{
x = 1, y = 2
int x = 1, y = 2;
Swap ( x, y );
printf ( "x = %d, y = %d", x, y );
}
11.
11Параметры-переменные
void Swap ( int && a, int && b )
{
int c;
параметры могут
изменяться
c = a; a = b; b = c;
}
Применение:
таким образом процедура (и функция) может
возвращать несколько значений
Запрещенные варианты вызова
Swap ( 2, 3 );
// числа
Swap ( x+z, y+2 ); // выражения
12.
12Задания
«4»: Используя процедуры, построить фигуру.
равносторонний треугольник
a
a
a
«5»: Используя процедуры, построить фигуру.
0,866∙a
13. Программирование на языке Си
Тема 12. Функции14.
14Функции
Функция – это вспомогательный алгоритм
(подпрограмма), результатом работы которого является
некоторое значение.
Примеры:
• вычисление модуля числа, x
• расчет значений по сложным формулам
• ответ на вопрос (простое число или нет?)
Зачем?
• для выполнения одинаковых расчетов в различных
местах программы
• для создания общедоступных библиотек функций
? В чем отличие от процедур?
15.
15Функции
Задача: составить функцию, которая вычисляет
наибольшее из двух значений, и привести пример
ее использования
Функция:
тип
результата
формальные
параметры
int Max ( int a, int b )
{
if ( a > b ) return a ;
else
}
return b ;
return - вернуть
результат функции
16.
16Функции
Особенности:
• в начале заголовка ставится тип результата
int
Max ( int a, int b )
• формальные параметры описываются так же, как и
для процедур
float qq ( int a, float x, char c
• можно использовать параметры-переменные
int Vasya (int & a, int & b )
• функции обычно располагаются до основной
программы
)
17.
17Функции
Особенности:
• можно объявлять и использовать локальные
переменные
float qq ( int a, int b)
{
float x, y;
...
}
локальные
переменные
! Локальные переменные недоступны в
основной программе и других процедурах и
функциях.
18.
18Программа
int Max ( int a, int b )
{
формальные
...
параметры
}
main()
фактические
{
параметры
int a, b, с;
printf ( "Введите два числа\n" );
scanf ( "%d%d", &a, &b );
вызов
функции
c = Max ( a, b );
printf ( "Наибольшее число %d", c );
}
19.
19Задания
«4»: Составить функцию, которая определяет сумму
всех чисел от 1 до N и привести пример ее
использования.
Пример:
Введите число:
100
сумма чисел от 1 до 100 = 5050
«5»: Составить функцию, которая определяет,
сколько зерен попросил положить на N-ую
клетку изобретатель шахмат (на 1-ую – 1 зерно,
на 2-ую – 2 зерна, на 3-ю – 4 зерна, …)
Пример:
Введите номер клетки:
28
На 28-ой клетке 134217728 зерен.
20.
20Задания
«4»: Составить функцию, которая определяет
наибольший общий делитель двух натуральных и
привести пример ее использования.
Пример:
Введите два числа:
14 21
НОД(14,21)=7
«5»: Составить функцию, которая вычисляет функцию
синус как сумму ряда (с точностью 0.001)
x3 x5 x7
sin x x
3! 5! 7!
x в радианах!
Пример:
Введите угол в градусах:
45
sin(45) = 0.707
21.
21Логические функции
Задача: составить функцию, которая определяет, верно
ли, что заданное число – простое.
Особенности:
• ответ – логическое значение: «да» (1) или «нет» (0)
• результат функции можно использовать как логическую
величину в условиях (if, while)
Алгоритм: считаем число делителей в интервале от 2 до N-1,
если оно не равно нулю – число составное.
count = 0;
for (i = 2; i < N; i ++)
if ( N % i == 0) count ++;
if ( count == 0 )
// число N простое}
else // число N составное
? Как улучшить?
22.
22Функция: простое число или нет
int Prime ( int N )
перебор только до N
{
int count = 0, i;
for (i = 2; i*i <= N; i++)
if (N % i == 0) count ++;
return (count == 0);
}
if (count == 0) return 1;
else
return 0;
23.
23Логические функции
#include <stdio.h>
int Prime ( int N )
{
...
}
функция
main()
{
int N;
printf ( "Введите целое число\n" );
scanf ( "%d", &N );
if ( Prime(
Prime( NN )) )
printf ("%d - простое число", N);
else printf ("%d - составное число", N);
}
24.
24Задания
«4»: Составить функцию, которая определяет, верно
ли, что сумма его цифр – четное число.
Пример:
Введите число:
Введите число:
136
245
Сумма цифр четная. Сумма цифр нечетная.
«5»: Составить функцию, которая определяет, верно
ли, что в заданном числе все цифры стоят по
возрастанию.
Пример:
Введите число:
258
Верно.
Введите число:
528
Неверно.