Cоставные части программы, локальные и глобальные переменные. Функции

Содержание

Слайд 2

Слайд 3

Что будет напечатано после выполнения следующих функций?

Что будет напечатано после выполнения следующих функций?

Слайд 4

Слайд 5

Лекция 7 Cоставные части программы, локальные и глобальные переменные Функции Параметры

Лекция 7

Cоставные части программы, локальные и глобальные переменные
Функции
Параметры функции по умолчанию
Перегрузка

функций
Программные модули
Генератор случайных чисел
Слайд 6

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

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

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

с #include
•Объявление констант (постоянных величин):
const N = 20;
Глобальные переменные — это переменные, объявленные вне основной программы и подпрограмм. К таким переменным могут обращаться все функции данной программы (их не надо еще раз объявлять в этих функциях).
Объявление функций — обычно ставятся выше основной программы. По требованиям языка Си в тот момент, когда транслятор находит вызов подпрограммы, она должна быть объявлена и известны типы всех ее параметров.
•Основная программа может располагаться как до всех подпрограмм, так и после них. Не рекомендуется вставлять ее между подпрограммами, так как при этом ее сложнее найти.
Слайд 7

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

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

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

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

Пример #include int var = 0; // объявление глобальной переменной void

Пример

#include
int var = 0; // объявление глобальной переменной
void ProcNoChange ()
{

int var; // локальная переменная
var = 3; // меняется локальная переменная
}
void ProcChange1 ()
{
var = 5; // меняется глобальная переменная
}
void ProcChange2 ()
{
int var; // локальная переменная
var = 4; // меняется локальная переменная
::var = ::var * 2 + var; // меняется глобальная переменная
}
void main()
{
ProcChange1(); // var = 5;
ProcChange2(); // var = 5*2 + 4 = 14;
ProcNoChange(); // var не меняется
printf ( "%d", var ); // печать глобальной переменной (14)
}
Слайд 9

Глобальные и локальные переменные Глобальные переменные не надо заново объявлять в

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

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

в подпрограмме объявлена локальная переменная с таким же именем, как и глобальная переменная, то используется локальная переменная.
Если имена глобальной и локальной переменных совпадают, то для обращения к глобальной переменной в подпрограмме перед ее именем ставится два двоеточия:
::var = ::var * 2 + var;
Рекомендуются использовать как можно меньше глобальных переменных, а лучше всего – не использовать их вообще, потому что глобальные переменные
затрудняют анализ и отладку программы;
повышают вероятность серьезных ошибок — можно не заметить, что какая-то подпрограмма изменила глобальную переменную;
увеличивают размер программы, так как заносятся в блок данных, а не создаются в процессе выполнения программы.
Поэтому глобальные переменные применяют в крайних случаях:
для хранения глобальных системных настроек (цвета экрана и т.п.);
если переменную используют три и более подпрограмм и по каким-то причинам неудобно передавать эти данные в подпрограмму как параметры.
Везде, где можно, надо передавать данные в функции через их параметры. Если же надо, чтобы подпрограмма меняла значения переменных, надо передавать параметр по ссылке.
Слайд 10

Повторение. Задание Дана последовательность N натуральных чисел. Найти число с максимально суммой цифр.

Повторение. Задание

Дана последовательность N натуральных чисел. Найти число с максимально суммой

цифр.
Слайд 11

Программа

Программа

Слайд 12

Параметры функции по умолчанию C++ позволяет программам указывать для параметров значения

Параметры функции по умолчанию

C++ позволяет программам указывать для параметров значения по

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

Определение значений по умолчанию Чтобы обеспечить значения по умолчанию для параметров

Определение значений по умолчанию

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

надо присвоить значение параметру с помощью операции присваивания прямо при объявлении функции:
void yyy (int x, int a=0, int b=1)
{ cout<void main()
{ yyy(5); yyy(6,1001), yyy(7,1001, 1002);}
Слайд 14

Слайд 15

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

Правила для пропуска значений параметров

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

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

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

Перегрузка функций

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

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

Пример перегрузки функций Допустим, описаны функции: int min (int x, int

Пример перегрузки функций

Допустим, описаны функции:
int min (int x, int y) {return

xdouble min (double x, double y) {…}
int min (int x, int y, int z)
{ int m; m=x return mОсновная программа:
double a, b; int k, m, n;
cout<cout <cout <
Слайд 18

Модульное программирование Основной метод структурного программирования Предполагает разделение текста программы на

Модульное программирование

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

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

Использование библиотечных функций Для использования библиотечных функций необходимы два файла (для

Использование библиотечных функций

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

рассмотрим функцию sqrt()):
заголовочный файл () с прототипом функции sqrt() и многих других библиотечных функций (
#include );
файл реализации (для пользовательских функций – это файлы с исходным текстом на СИ++, а библиотечные функции обычно хранятся в скомпилированном виде в специальных библиотечных файлах, например, «libcmtd.lib»). Файлы реализации пользовательских функций (расширение «.cpp») содержат определения этих функций.
Слайд 20

Создание и использование модулей Чтобы создать отдельные модули программы, необходимо в

Создание и использование модулей

Чтобы создать отдельные модули программы, необходимо в окне

Solution Explorer с помощью контекстного меню для пункта Source File создать отдельные файлы проекта. Все они будут иметь расширение .cpp и будут компилироваться отдельно (пункт меню Build, Compile или Ctrl-F7).
Основная программа при этом может содержать только главную функцию main и прототипы всех остальных функций, которые содержатся в других модулях.
После успешной компиляции каждого отдельного модуля необходимо выполнить компоновку проекта с помощью пункта Build, Build Solution или клавиши F7.
Далее можно запускать программу на выполнение обычным способом.
Слайд 21

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

Пример

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

двух и трех чисел.
Слайд 22

Программма Программа состоит из трех файлов: главного файла; заголовочного файла с

Программма

Программа состоит из трех файлов:
главного файла;
заголовочного файла с описаниями

двух функций расчета среднего значения;
соответствующего файла реализации.
Слайд 23

Главный файл #include "averages.h" void main() { setlocale(LC_ALL,"rus"); int A, B,

Главный файл

#include "averages.h"
void main()
{
setlocale(LC_ALL,"rus");
int A, B,

C;
cout << "Введите три целых числа ";
cin >> A >> B >> C;
cout << "Целочисленное среднее чисел " << A << " и ";
cout << B << " равно ";
cout << average2(A, B) << ".\n";
cout << "Целочисленное среднее чисел " << A << ", ";
cout << B << " и " << C << " равно ";
cout << average3(A, B, C) << ".\n";
}
Слайд 24

Заголовочный файл averages.h #include #include using namespace std; // ПРОТОТИП ФУНКЦИИ

Заголовочный файл averages.h

#include
#include
using namespace std;
// ПРОТОТИП ФУНКЦИИ

ДЛЯ ВЫЧИСЛЕНИЯ ЦЕЛОЧИСЛЕННОГО СРЕДНЕГО
// ЗНАЧЕНИЯ 3-Х ЦЕЛЫХ ЧИСЕЛ:
int average3( int numb1, int numb2, int numb3);
// ПРОТОТИП ФУНКЦИИ ДЛЯ ВЫЧИСЛЕНИЯ ЦЕЛОЧИСЛЕННОГО СРЕДНЕГО
// ЗНАЧЕНИЯ 2-Х ЦЕЛЫХ ЧИСЕЛ:
int average2( int numb1, int numb2);
Слайд 25

Файл реализации averages.cpp #include "averages.h" // ФУНКЦИЯ ДЛЯ ВЫЧИСЛЕНИЯ ЦЕЛОЧИСЛЕННОГО СРЕДНЕГО

Файл реализации averages.cpp

#include "averages.h"
// ФУНКЦИЯ ДЛЯ ВЫЧИСЛЕНИЯ ЦЕЛОЧИСЛЕННОГО СРЕДНЕГО
// ЗНАЧЕНИЯ

3-Х ЦЕЛЫХ ЧИСЕЛ:
int average3( int numb1, int numb2, int numb3 )
{
return ((numb1 + numb2 + numb3)/3);
}
// ФУНКЦИЯ ДЛЯ ВЫЧИСЛЕНИЯ ЦЕЛОЧИСЛЕННОГО СРЕДНЕГО
// ЗНАЧЕНИЯ 2-Х ЦЕЛЫХ ЧИСЕЛ:
int average2( int numb1, int numb2)
{
return ((numb1 + numb2)/2);
}
Слайд 26

Слайд 27

Слайд 28

Слайд 29

Слайд 30

Генератор случайных значений С++ Функция rand() генерирует числа в диапазоне от

Генератор случайных значений С++

Функция rand() генерирует числа в диапазоне от 0 до RAND_MAX. 
RAND_MAX - это

константа, определённая в библиотеке .
Функция srand выполняет инициализацию генератора случайных чисел rand.
#include
#include
srand(time(0));
cout<
Слайд 31

Примеры Какие значения будут сгенерированы: rand() % 2 rand() % 101

Примеры

Какие значения будут сгенерированы:
rand() % 2
rand() % 101
rand() % 201
rand() %

201 + 200
Написать выражение для получения целых чисел в диапазоне от -100 до 100.
Получить числа на интервале от 0.01 до 1.
Слайд 32

#include #include #include void main() { srand(time(0)); cout cout cout cout cout }

#include
#include
#include
void main()
{
srand(time(0));
cout<<"1 "<cout<<"2 " <cout<<"3

"<cout<<"4"<cout<<"5 "<}
Слайд 33

Слайд 34

#include #include #include void main() { //srand(time(0)); cout cout cout cout cout }

#include
#include
#include
void main()
{
//srand(time(0));
cout<<"1 "<cout<<"2 " <cout<<"3

"<cout<<"4"<cout<<"5 "<}
Слайд 35

Слайд 36

Задание Разработайте набор функций для выполнения действий с обыкновенными дробями. Все

Задание

Разработайте набор функций для выполнения действий с обыкновенными дробями.
Все эти

функции должны возвращать результат в виде обыкновенной несократимой дроби (не обязательно правильной).
Например, функция, вычисляющая сумму обыкновенных дробей на вход получает числитель и знаменатель каждой из двух складываемых дробей и в результате должна получить числитель и знаменатель дроби, являющейся суммой двух исходных.
Если в результате получается отрицательное значение, то знак «минус» хранить в числителе.
Набор требуемых функций необходимо определить самостоятельно, исходя из условия задачи. Вывод результата осуществлять в виде 1 строки (например, 12/45).
Для вывода дроби так же использовать функцию.
Весь набор функций оформить в виде отдельного программного модуля