: 9
разбить программу на функции main и пользовательскую функцию
Решил задачу(Дан массив A из N чисел. Получить из A массив B, исключив из A элементы с максимальным значением)теперь необходимо сделать так, что бы программа состояла из функций main и пользовательской функции, выполняющей решение задачи. Функция main должна выполнять только ввод, вывод данных и обращение к пользовательской функции. Данные для пользовательской функции должны передаваться через параметры функции. Подскажите что я делаю не так.
#include #include using namespace std; int MyFn(int a,int i,int j,int max,int b); void main()< int max,i,j; int a[7]=; int b[7]; i=0; b[j]=int MyFn(int a,int i,int j,int max,int b); cout int MyFn(int a,int i,int j,int max,int b) < max=a[0]; for(i=1;i<7;i++)< if(max> i=0; for(j=0;j <7;j++)< if(a[j]> for(j=0;j <6;j++)< >return 0; >
Источник: www.programmersforum.ru
Метод split и метод join Python
Вынести функцию в отдельный файл C/C++
Для того чтобы вынести функцию в отдельный файл нам понадобится разбить нашу программу на несколько частей.
Обычно это делают так:
- Прототипы функций помещаются в заголовочный файл (.h)
- Реализации (определения) функций помещаются в отдельный .cpp файл
- В файле (с main()), где вызываются функции, подключается файл с прототипами (.h)
Теперь разберем как это сделать на примере.
Допустим у нас есть программа в которой мы запрашиваем X, а на экран должно вывестись X²
#include
#include
#include
int x;
int main() setlocale(0, «Russian»);
printf(«Введите Xn»);
scanf_s(«%d», //тут будем вызывать нашу функцию _getch();
return 0;
>
1. Заголовочный файл (.h)
Создаем заголовочный файл и помещаем туда прототип нашей функции:
Обязательно используем конструкцию для защиты от множественных включений в один файл:
#ifndef Header_h
#define Header_h
//Код
#endif //Header
#ifndef Header_h
#define Header_h void func(); //прототип функции #endif //Header
2. Реализация функции (.c/.cpp)
Создаем отдельный .cpp файл (function.cpp):
Пишем реализацию функции:
3. Подключение заголовочного файла (.h)
Открываем файл где располагается main(), и подключаем заголовочный файл (.h) в нашем случае Header.h:
Прекрати писать код в ОДНОМ файле Python | ТОП 5 Ошибок и создание правильной архитектуры
Затем вызываем функцию:
Получился вот такой main.cpp:
Проверяем:
Вуаля, все работает.
Подпишитесь на еще что-нибудь подобное этому.
Введите свой email
Как подключить Yeelight Arwen Ceiling Light 550C/450C к Китайскому региону Mi Home
Если вы здесь оказались, то наверняка в курсе, что умные потолочные светильники Yeelight Arwen 550C/450C выпущены специально для «российского» рынка. И повсюду можно найти подобные отзывы: Светильник действительно автоматически не определяется в Mi Home и подключить через него у меня тоже не вышло, но есть одно но. Так как
7 авг. 2022 г. — 2 min read
Как заставить работать мультимедийные клавиши в Яндекс Музыке (MacOS)
Всем маководам пользующимся Яндекс Музыкой посвящается. Меня же не одного бесит то, что нельзя листать треки и ставить их на паузу привычными мультимедийными кнопками? (спойлер: не одного) Данную проблему разработчики игнорируют уже несколько лет, хоть и создавались темы-предложения на соответствующем форуме: Поэтому пользователи уже успели сами себе сделать костыли решающие
12 нояб. 2021 г. — 2 min read
Подключение SMTP модуля для отправки почты в 1С-Битрикс: Управление сайтом
Так случилось, что мне понадобилось подключить сторонний модуль к сайту на «1С-Битрикс: Управление сайтом» для корректной отправки электронной почты. Зачем? Стандартные средства на старых версиях (в моем случае это 20.0.1198) не позволяют отправлять электронную почту с поддержкой DKIM, поэтому приходящие письма выглядели вот так: Меня это не устраивало.
Источник: blog.disonds.com
Зачем разбивать код на функции, если код короткий (~30 строчек) и нет повторяющегося кода?
Я пишу на Питоне для себя, когда на работе требуется быстро сгенерить из одного файла другой и т.п. Случайно попался на глаза вопрос, где человек показал пример своего кода. Код копирует файлы по определённому признаку из одной папки в другую. Код короткий. Однако среди ответов есть такой:
«Код нужно разбить хотя бы на функции, а не все в одну кучу «
Зачем? Чем он станет лучше? Код написан совершенно прозрачно и понятно. Повторяющихся кусков нет. Зачем функции?
- Вопрос задан более трёх лет назад
- 1172 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 9
Потому что так проще покрывать тестами
Ответ написан более трёх лет назад
Нравится 4 5 комментариев
У меня код маленький и сразу видно, работает он как надо или нет.
А что можно оттестировать в указанном примере? Проверить, что файл существует по указанному пути? Проверить функцию копирования и построчно сравнить файлы? Использования эксепшенов не хватит?
примерно так и появляются проекты, написанные в стиле говнокод с костылями
Проверить, как работает функция
Ексепшены не имеют к тдд никакого отношения
sim3x: А что можно проверить в копировании?
Zellily: а там главная функция состояла только в копировании?
Или же в разборе путей?
Почему стоит написать чистую функцию и покрыть ее тестами
А грязную функцию, в которой будет копирование, влоб не проверить, скопировались ли файлы или нет?
Как-то непонятно написано 🙁
Если нет необходимости повторного использования, то незачем функции.
Ответ написан более трёх лет назад
Нравится 2 1 комментарий
Не совсем так.
Обычно в таких ситуациях созданные методы получают private/protected модификатор, так что доступ из вне — никак.
А насчет функций:
Скорее всего, код в дальнейшем будет доработан, вот и решили сразу разбить, ну или же привычка разбивать все что можно 🙂
www.dubos.ru
У Вас есть программа, которая копирует файлы по определенному признаку из одной папки в другую, разбитая на функции «определение определенного признака» и «копирование в другую папку», а завтра Вам надо будет сделать программу, которая будет просто копировать файлы из одной папки в другую, Вы берете готовую функцию и не паритесь с выискиванием нужного фрагмента в коде старой программы
Ответ написан более трёх лет назад
Нравится 1 5 комментариев
Хм. Мне, наверное, слишком редко приходится два раза один и тот же код использовать.
Zellily: Я, как phpшник, достаточно часто использую функцию «забрать из быза данных и вывести одно за одним»
А вы её копируете или выделили в отдельный файл?
Zellily: я ее копирую и помещаю в самый верх кода, не люблю, когда в папке проекта миллион файлов шатается
Повысится самодокументируемость.
Не нужно будет в уме разбивать код на части, чтобы понять что они делают. Все равно как минимум 5-8 строк кода должны выполнять определенную задачу, а не только общую
Ответ написан более трёх лет назад
Ну не знаю, там код такой прозрачный был, сложно не понять, что он делает.
Повышается читаемость кода, его легче поддерживать. Проще пробежать глазами 3 строчки с вызовом функций и по их именам понять что они делают, чем анализировать 30 строк непонятного кода.
Ответ написан более трёх лет назад
Это если он непонятный. А там ругались на отсутствие функций в совершенно прозрачном коде. Собственно там было непройденное тестовое задание, и если человек его не прошёл именно по этой причине, то надо было дать задание посложнее, чтобы необходимость в функциях возникла.
А разве он не прозрачный? Я не вижу ни одного непонятного места. Другое дело, что написан криво, например:
print(«Can’t open configuration file.») у него относится не к попытке открыть файл, а относится ко всей вот этой куче действий. Поэтому такая диагностика введёт в заблуждение. Но о таких вещах ему никто не сказал.
Код нужно разбить хотя бы на функции, а не все в одну кучу
Это была моя цитата.
Зачем? Чем он станет лучше? Код написан совершенно прозрачно и понятно. Повторяющихся кусков нет. Зачем функции?
Лучше он станет тем что человек впервые увидевший код, сможет сразу разобраться что за что отвечает, и если надо будет вносить какие либо изменения то это нужно будет сделать в одном месте.
Если кусок кода понадобиться еще где то использовать необходимо будет вставить только название функции, а не копипастить экран текста.
При использование функций, в разы легче находить и исправлять ошибки.
Ответ написан более трёх лет назад
Ну, я такой человек, увидевший в первый раз, и проблем с пониманием у меня возникло.
ЗЫ Мне нравится ответ, что функции нужны для всяких юнит-тестов. Если такое реально тестируют, потому что никто не признался, что тут можно протестировать.
Вы троллите или реально не понимаете?
User23: Не троллю, просто мой код редко используется кем-то кроме меня, поэтому я, видимо, не в теме трендов.
А какое отношение имеет ваш код к тестовому заданию в Dr Web ?
Ваш код вы можете писать так как вам нравится и как вам удобно хоть в одну строчку, но при написание тестового задания подразумевается что вы будете писать в таком же стиле на продакшене , и поэтому нужно вылизать каждую строчку, и показать как вы хорошо умеете
писать читаемый код, и разделять его на отдельные блоки.
Его нужно писать предполагая что завтра его будут дорабатывать еще 10 коллег, после завтра будут тестировать отдел тестировщиков написанием unit тестов, после после завтра будут использовать написанный вами метод или функцию в нескольких местах проекта.
User23: Нет, я не могу писать в одну строчку, потому что не разберусь через полгода в написанном. И если я уволюсь, или кто-то вдруг захочет воспользоваться моим кодом, то надо, чтобы он был читаемым.
Но остальная тема про 10 коллег и юнит-тестирование для меня — тёмный лес.
Задача декомпозиции упростить поддержку и развитие кода. Если поддержка и развитие не планируется, то декомпозиция не нужна.
Код еще не написан: разбить, поскольку так проще тестировать и разрабатывать.
Код уже написан, но будет развиваться: разбить, иначе очень скоро ваш код обрастет дублированием, а ошибки в нем искать будет весьма затруднительно. При большом объеме код сможете поддерживать только вы, разобраться в нем будет не просто, внесение изменений потребует глубокого понимания всего кода.
Код уже написан, работает, не содержит ошибок и не будет развиваться: не разбивать, поскольку это трудозатраты которые ничего не дадут.
Ответ написан более трёх лет назад
Тут интересный момент, этот код был ответом на тестовое задание, и нигде в этом задании не было указано, что этот код будет развиваться и поддерживаться (что логично, тестовые задания не развивают и не поддерживают). И кем-то использоваться, кроме тестируемого человека и рецензента. Авторам бы неплохо было добавить строчку о назначении кода в своём задании.
Программист
Ответы были бы более конкретные или бы их не было бы вообще, если бы мы увидели код.
Иначе все ответы можно расценивать как «диванную аналитику».
Я считаю.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Программист C#/C++/C
Если это один криво-корявый, но работающий проект, о котором вы забутите сразу после сдачи, то можете не париться. И если вы занимаетесь только созданием такого рода проектами, то можете не читать дальше и не тратить свое время.
А вот если проект нужно будет поддерживать (по опыту могу сказать, что выполняет та или иная функция забывается уже через месяц) или над ним работают другие люди, или вы хотите уйти спокойно в отпуск, в котором вы не хотите что бы вас тревожили, то лучше конечно же писать так, чтобы в функции выполнялась одна операция или по крайней мере если их несколько, то это как-то должно отражаться в ее названии и конечно же она должна быть задокументирована (практически все IDE позволяют это делать без особого напряга).
Хороший код легко читается и понимается, а самое главное на добавление (изменение, удалении) новой функции в нем тратится гораздо меньше времени, чем в криво-корявом коде.
Конечно криво-корявый код используется повсеместно и может без проблем работать годами, до тех пор пока не надо что-то поменять .
Источник: qna.habr.com