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

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

Основные особенности функций в Python:

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

Правила создания функций:

  1. Для объявления функции в Python используется ключевое слово def .
  2. Название функции должно начинаться с символа латинского алфавита в любом регистре или нижнего подчеркивания.
  3. В каждой функции есть двоеточие и отступ, после которого записывается сам код программы.
  4. Зарезервированные ключевые слова не могут использоваться в качестве названия функции.
  5. Функция может содержать несколько параметров или не иметь их совсем.

Создание функции в Python

Для создания нужно написать ключевое слово def . Синтаксис следующий:

Основы Программирования — #4 — Функции


def function_name(): # логика функции return result # возврат значения

Создадим и вызовем реальную функцию в Python:

Источник: pythonru.com

Пользовательские функции в Си

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

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

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

В принципе, мы уже используем эту парадигму. Если вам пока ещё не совсем ясно, почему это проще, то просто представьте, что вместо того чтобы вызвать функцию exp(x) из заголовочного файла math.h вам каждый раз необходимо было бы описывать подробно, как вычислить значение этой функции.

Итак, в этом уроке мы подробно обсудим то, как функции устроены изнутри. А также научимся создавать свои собственные пользовательские функции.

Как устроены функции

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

int main(void)< // заголовок функции // в фигурных скобках записано тело функции >

С телом функции всё ясно: там описывается алгоритм работы функции. Давайте разберёмся с заголовком. Он состоит из трёх обязательных частей:

  • тип возвращаемого значения;
  • имя функции;
  • аргументы функции.

Сначала записывается тип возвращаемого значения, например, int , как в функции main . Если функция не должна возвращать никакое значение в программу, то на этом месте пишется ключевое слово void . Казалось бы, что раз функция ничего не возвращает, то и не нужно ничего писать. Раньше, кстати, в языке Си так и было сделано, но потом для единообразия всё-таки добавили. Сейчас современные компиляторы будут выдавать предупреждения/ошибки, если вы не укажете тип возвращаемого значения.
В некоторых языках программирования функции, которые не возвращают никакого значения, называют процедурами (например, pascal). Более того, для создания функций и процедур предусмотрен различный синтаксис. В языке Си такой дискриминации нет.

Читайте также:
Total commander платная или бесплатная программа

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

Давайте посмотрим на заголовки уже знакомых нам функций.

// функция с именем srand, принимающая целое число, ничего не возвращает void srand(int) //функция с именем sqrt, принимающая вещественное число типа float, возвращает вещественное число типа float float sqrt(float) //функция с именем rand, которая не принимает аргументов, возвращает целое число int rand(void) //функция с именем pow, принимающая два аргумента типа double, возвращает вещественное число типа double double pow(double, double)

Как создать свою функцию

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

Уточнение структуры программы. Объявление функций.

Рис.1 Уточнение структуры программы. Объявление функций.

Как видите, имеется аж два места, где это можно сделать.

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

#include // объявляем пользовательскую функцию с именем max_num // вход: два целочисленных параметра с именами a и b // выход: максимальное из двух аргументов int max_num(int a, int b) < int max = b; if (a >b) max = a; return max; > //основная программа int main(void)

Давайте я подробно опишу, как будет работать эта программа. Выполняется тело функции main . Создются целые переменные x , y и m . В переменные x и y считываются данные с клавиатуры. Допустим мы ввели 3 5 , тогда x = 3 , y = 5 . Это вам всё и так должно быть понятно. Теперь следующая строчка

m = max_num(x,y);

Переменной m надо присвоить то, что находится справа от знака = . Там у нас указано имя функции, которую мы создали сами. Компьютер ищет объявление и описание этой функции. Оно находится выше. Согласно этому объявлению данная функция должна принять два целочисленных значения.

В нашем случае это значения, записанные в переменных x и y . Т.е. числа 3 и 5 . Обратите внимание, что в функцию передаются не сами переменные x и y , а только значения (два числа), которые в них хранятся. То, что на самом деле передаётся в функцию при её вызове в программе, называется фактическими параметрами функции.

Теперь начинает выполняться функция max_num . Первым делом для каждого параметра, описанного в заголовке функции, создается отдельная временная переменная. В нашем случае создаются две целочисленных переменных с именами a и b . Этим переменным присваиваются значения фактических параметров. Сами же параметры, описанные в заголовке функции, называются формальными параметрами. Итак, формальным параметрам a и b присваиваются значения фактических параметров 3 и 5 соответственно. Теперь a = 3 , b = 5 . Дальше внутри функции мы можем работать с этими переменными так, как будто они обычные переменные.

Создаётся целочисленная переменная с именем max , ей присваивается значение b . Дальше проверяется условие a > b . Если оно истинно, то значение в переменной max следует заменить на a .

Далее следует оператор return , который возвращает в вызывающую программу (функцию main ) значение, записанное в переменной max , т.е. 5 . После чего переменные a , b и max удаляются из памяти. А мы возвращаемся к строке

m = max_num(x,y);

Функция max_num вернула значение 5 , значит теперь справа от знака = записано 5 . Это значение записывается в переменную m. Дальше на экран выводится строчка, и программа завершается.

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

А я пока расскажу, зачем нужен нижний блок описания функций. Представьте себе, что в вашей программе вы написали 20 небольших функций. И все они описаны перед функцией main . Не очень-то удобно добираться до основной программы так долго. Чтобы решить эту проблему, функции можно описывать в нижнем блоке.

Читайте также:
Это компьютер на котором работает сервер программа www

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

Прототип функции полностью повторяет заголовок функции, после которого стоит ; . Указав прототип в верхнем блоке, в нижнем мы уже можем полностью описать функцию. Для примера выше это могло бы выглядеть так:

#include int max_num(int, int); int main(void) < int x =0, y = 0; int m = 0; scanf(«%d %d», y); m = max_num(x,y); printf(«max(%d,%d) = %dn»,x,y,m); return 0; >int max_num(int a, int b) < int max = b; if (a >b) max = a; return max; >

Всё очень просто. Обратите внимание, что у прототипа функции можно не указывать имена формальных параметров, достаточно просто указать их типы. В примере выше я именно так и сделал.

Сохрани в закладки или поддержи проект.

Практика

Решите предложенные задачи:

Для удобства работы сразу переходите в полноэкранный режим

Дополнительные материалы

  1. пока нет

Источник: youngcoder.ru

QTimer. Создание таймера и обработка его событий с примером программы.

Follow us on Twitter Follow us on rss

При написании многих программ часто возникает необходимость следить за временем и периодично выполнять какие-нибудь действия. Для этого используют таймеры. При использовании кроссплатформенного фреймворка Qt используют QTimer.

В этой заметке я расскажу о классе QTimer, о создании таймера и об обработке его событий, о статическом методе singleShot() класса QTimer. На примере покажу, как создать программу, которая показывает текущее время в течение 5-ти секунд, а после закрывается. Таймер в ней нужен для обновления текущего времени на экране каждую секунду. Метод singleShot() понадобится для закрытия программы через 5 секунд.

О классе QTimer

Класс унаследован от QObject, а значит умеет работать с сигналами и слотами. Предоставляет регулярные таймеры, которые по истечении заданного промежутка времени посылают сигнал timeout(). При этом класс имеет статический метод singleShot(), он посылает сигнал через заданный промежуток времени лишь один раз. События таймера будут доставлять только тогда, когда работает цикл обработки событий.

Для использования нужно подключить #include

Включает в себя public-функции:

  • int interval() — возвращает числовое(int) значение установленного интервала таймера в миллисекундах
  • int remainingTime() — возвращает оставшееся время в миллисекундах
  • bool isActive() — возвращает логическое(bool) значение true, если таймер запущен
  • bool isSingleShot() — возвращает true, если таймер включен для срабатывания только один раз
  • void setInterval(int msec) — возволяет установить интервал таймера, где msec — время в миллисекундах
  • void setSingleShot(bool singleShot)
  • void setTimerType(Qt::TimerType atype) — устанавливает тип таймера
  • int timerId() — возвращает id таймера
  • Qt::TimerType timerType() — возвращает тип таймера

Включает в себя слоты start() и stop(), которые запускают и останавливают таймер соответственно. У слота start() есть одна пеперегрузка — start(int msec), которая через msec миллисекунд запускает таймер, если таймер не запущен, в противном случае таймер останавливается и запускается снова.

Имеет сигнал timeout(), который посылается во время срабатывания таймера.

Пример использования QTimer

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

Создадим проект в Qt Creator, выберем шаблон проекта «Приложение Qt Widgets» или «Application Qt Widgets».

Приложение Qt Widgets

Приложение Qt Widgets

Далее дадим ей любое название, я же назвал «Timer». Остальные параметры по умолчанию.

В дереве проекта переходим в директорию «Формы» | «Forms» и открываем mainwindow.ui. Откроется редактор интерфейсов. В нем нам нужно положить объект Label на форму.

При желании его можно оформить, что я собственно и сделал.

Label на форме

Как видно, я растянул его и увеличил шрифт. Значение «00:00:00» вставил, чтобы было видно размер шрифта.

Читайте также:
Как найти директорию программы

Далее переходим в «Редактор»|»Edit» -> «Заголовочные»|»Headers»->mainwindow.h.

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

#include #include

В этом же файле в классе MainWindow объявим указатель закрытого типа(private) на объект класса QTimer

QTimer *tmr;

В ней будет храниться указатель на наш таймер.

Объявим закрытый слот updateTime()

private slots: void updateTime();

Он будет обновлять время на экране.

Весь листинг файла mainwindow.h

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include namespace Ui < class MainWindow; >class MainWindow : public QMainWindow < Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; QTimer *tmr; //Адресная переменная таймера private slots: void updateTime(); //Слот для обновления времени на экране >; #endif // MAINWINDOW_H

Теперь перейдем в файл mainwindow.cpp («Исходники»|»Source» -> mainwindow.cpp)

В этом файле определим слот updateTime() класса MainWindow

void MainWindow::updateTime() < ui->label->setText(QTime::currentTime().toString()); >

Слот изменяет значение поля text объекта label в нашей форме, помещает в нее значение текущего времени. Статический метод QTime::currentTime() возвращает текущее время, методом toString() мы его преобразовываем в строку, т.к. метод setText(QString arg) принимает на вход только QString. Будем посылать сигнал в этот слот каждую секунду, чтобы обновлялось текущее время на экране.

Далее в конструкторе класса MainWindow создадим новый объект таймера QTimer и передадим его адрес нашей переменной tmr

tmr = new QTimer();

Зададим интервал таймера в 1 секунду (1 секунда = 1000 миллисекунд)

tmr->setInterval(1000);

Соединим сигнал timeout() таймера tmr со слотом updateTime() объекта класса MainWindow

connect(tmr, SIGNAL(timeout()), this, SLOT(updateTime()));

Теперь таймер будет посылать сигнал в наш слот.

Далее сразу же запустим таймер

tmr->start();

Метод start() может вызываться с параметром типа int, он задает интервал таймера. Например:

tmr->start(1000);

Таким образом таймер после запуска будет посылать сигнал с интервалом 1000 мс (каждую секунду).

Листинг файла mainwindow.cpp

#include «mainwindow.h» #include «ui_mainwindow.h» MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) < ui->setupUi(this); tmr = new QTimer(this); // Создаем объект класса QTimer и передаем адрес переменной tmr->setInterval(1000); // Задаем интервал таймера connect(tmr, SIGNAL(timeout()), this, SLOT(updateTime())); // Подключаем сигнал таймера к нашему слоту tmr->start(); // Запускаем таймер > MainWindow::~MainWindow() < delete ui; delete tmr; >void MainWindow::updateTime() < ui->label->setText(QTime::currentTime().toString()); // Обновляем время на экране >

В итоге наша программа отображает время и каждую секунду обновляет его. Далее нам нужно «научить» программу закрываться через 5 секунд, для этого переходим к редактированию файла main.cpp («Исходники»|»Sources» -> main.cpp)

В нем тайкже подключим заголовочный файл QTimer

#include

Далее после кода, в котором создается обект окна, вызываем статический метод singleShot() класса QTimer.

QTimer::singleShot(5000,

Первый параметр метода singleShot() задает значение в миллисекундах, по истечении которых будет послан сигнал.

Второй параметр принимает на вход адрес объекта.

В третьем параметре указывается слот входного объекта.

Листинг файла main.cpp

#include «mainwindow.h» #include #include int main(int argc, char *argv[])

С редактированием кода всё, осталось запустить нашу программу.

После сборки и запуска появляется такое окно

Окно программы

Время обновляется каждую секунду. После пяти секунд программа закрывается.

Итак, мы узнали о классе QTimer, научились создавать новые таймеры и применили эти знания на практике.

Существуют еще один класс QBasicTimer, который обеспечивает события таймера для объектов, но в данной статье не рассмотрен.

Для вас это может быть интересно:

Раздел: Qt Программирование Метки: C++, qt, QTimer, Slots, ООП, программирование, таймер

QTimer. Создание таймера и обработка его событий с примером программы. : 12 комментариев

  1. Владимир 13.10.2015 Спасибо! Повторил пример, всё заработало!
    Сейчас хочу модифицировать, чтобы по таймеру увеличивался размер окна
  1. Tima 13.09.2016 Тоже не вижу смысла в этом, но по правилам хорошего тона вроде бы нужно
  1. Андрей 28.07.2020 Не конектит таймаут и слот. Пишу 5.13.1 на 32 битку

Источник: nicknixer.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru