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

Содержание

Слайд 2

Описание функции (подпрограммы) Заголовок функции { Объявление локальных переменных Операторы }

Описание функции (подпрограммы)

Заголовок функции
{
Объявление локальных переменных
Операторы
}
Заголовок функции имеет вид:
тип имя_функции (список_параметров)

Слайд 3

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

Вызов функции

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

осуществляется по имени функции и имеет вид:
имя_функции (аргумент1, аргумент2,…)
Аргументами могут быть константы, переменные или выражения.
Слайд 4

Пример программы с подпрограммой Задача. Даны натуральные числа n и m

Пример программы с подпрограммой

Задача. Даны натуральные числа n и m (n>m).

Определить c = n! / (m! * (n-m)! )
Слайд 5

Схема функции fact - вычисления k! fact возврат f f=1, j=2

Схема функции fact - вычисления k!


fact

возврат f

f=1, j=2

j<=k

f =

f * j
j = j +1

нет

да

Слайд 6

Схема главной функции main начало ввод n,m c = fact(n)/ (fact(m)*fact(n-m)) вывод с конец

Схема главной функции main


начало

ввод n,m

c = fact(n)/
(fact(m)*fact(n-m))

вывод с

конец

Слайд 7

Программа #include long fact (int k); /* прототип функции */ /*

Программа

#include
long fact (int k); /* прототип функции */
/* Главная функция

*/
void main()
{ int n, m, c; /* исходные данные и результат */
printf("\nВведите два исходных целых числа (n,m):");
scanf("%d %d", &n, &m);
c = fact(n) / (fact (m) * fact (n-m));
printf ("\n c = %d", c);
}
Слайд 8

/* Функция вычисления k! */ long fact (int k) { long


/* Функция вычисления k! */
long fact (int k)
{ long f;

// k!
int j; // текущий множитель
f=1;
for (j=2; j<=k; j++)
f = f * j;
return f; // возврат значения функции
}
Слайд 9

Разработка алгоритмов и программ сверху вниз Задача. Дано целое n и

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

Задача. Дано целое n и

вещественные
X1 X2 ... Xn
Составить программу печати заданных вещественных чисел в порядке возрастания (не убывания).
Слайд 10

Вход: Введите количество чисел: 5 Введите числа: 12.5 6 14 -3

Вход:

Введите количество чисел: 5
Введите числа: 12.5 6 14 -3 10
Выход:
Упорядоченные числа:-3.0

6.0 10.0 12.5 14.0
Слайд 11

Функциональная структура программы

Функциональная структура программы


Слайд 12

1 этап. Разработка алгоритма функции main().

1 этап.

Разработка алгоритма функции main().

Слайд 13

Алгоритм : 1. n = Vvod(x); /* Ввод n и массива

Алгоритм :

1. n = Vvod(x); /* Ввод n и массива x

*/
2. Sort (x,n); /* Сортировка массива x по возрастанию*/
3. Вывод сортированного по возрастанию массива x
Слайд 14

2 этап Разработка подпрограмм

2 этап

Разработка подпрограмм

Слайд 15

Алгоритм функции ввода данных int Vvod (float x[]) { Ввод n;

Алгоритм функции ввода данных

int Vvod (float x[])
{
Ввод n;
for

(i=0; i Ввод x[i];
Возврат n;
}
Слайд 16

Вывод массива x Вывод заголовка "Упорядоченные числа:"; for (i=0; i Вывод x[i];

Вывод массива x

Вывод заголовка "Упорядоченные числа:";
for (i=0; i

Вывод x[i];
Слайд 17

Метод последовательного нахождения максимума 2.5 6 14 -3 10 // рассматривается

Метод последовательного нахождения максимума

2.5 6 14 -3 10 // рассматривается n

элементов
2.5 6 10 -3 14
2.5 6 10 -3 // рассматривается n-1 элементов
2.5 6 -3 10
2.5 6 -3 // рассматривается n-2 элементов
2.5 -3 6
2.5 - 3 // рассматривается n-3 элементов
-3 2.5
Слайд 18

Алгоритм функции сортировки массива x по возрастанию void Sort (float x[],

Алгоритм функции сортировки массива x по возрастанию

void Sort (float x[],

int n)
{ for (k=n-1; k>0; k--)
{ Определение максимума среди
элементов x[0], ... , x[k] и его
индекса imax.
Обмен: x[imax] <--> x[k];
}
}
Слайд 19

3 этап Определение максимума среди элементов x[0], ... , x[k] и его индекса imax.

3 этап

Определение максимума среди элементов x[0], ... , x[k] и его

индекса imax.
Слайд 20

Фрагмент программы: imax =0; for (i =1; i if (x[i] > x[imax]) imax = i;

Фрагмент программы:

imax =0;
for (i =1; i <= k; i++)
if (x[i]

> x[imax]) imax = i;
Слайд 21

Программа: #include #define NMAX 100 /* Макс. кол-во чисел */ /*

Программа:

#include
#define NMAX 100 /* Макс. кол-во чисел */
/* Функция ввода

данных * /
int Vvod (float x[])
{
int n; /* Количество чисел */
int i; /* Индекс текущего числа */
Слайд 22

printf ("\nВведите количество чисел\n"); scanf ("%d", &n); printf ("Введите числа\n"); for


printf ("\nВведите количество чисел\n");
scanf ("%d", &n);
printf ("Введите

числа\n");
for (i=0; i scanf("%f", &x[i]);
return n;
}
Слайд 23

/* Функция сортировки массива x по возрастанию */ void Sort (float

/* Функция сортировки массива x по возрастанию */

void Sort (float x[],

int n)
{
int k; /* Максимальный индекс просмотра*/
float r; /* Для обмена */
int imax; /* Индекс максимального элемента */
int i; /* Индекс текущего числа */
Слайд 24

for (k=n-1; k>0; k--) { imax =0; for (i =1; i


for (k=n-1; k>0; k--)
{ imax =0;
for (i

=1; i <= k; i++)
if (x[i] > x[imax]) imax = i;
/* Обмен x[imax] и x[k] */
r = x[imax];
x[imax] = x[k];
x[k] = r;
}
}
Слайд 25

/* Главная функция */ void main () { float x[NMAX]; /*

/* Главная функция */

void main ()
{ float x[NMAX]; /* Обрабатываемые числа

*/
int n; /* Количество чисел */
int i; /* Индекс текущего числа */
/* 1. Ввод массива x */
n = Vvod(x);
/* 2. Сортировка массива x по возрастанию */
Sort(x,n);