Процедура/функция которая записывает значения в параметры

arz_serg
Offline
Зарегистрирован: 05.04.2019

Добрый день!

Подскажите пожалуйста, что-то торможу: как сделать процедуру/функцию которая записывала бы значения в свои параметры?

ну например:

void timer(int a, int b) {
 a = millis();
 b = micros();
}

void setup() {
 Serial.begin(9600);

}

void loop() {
 int ms,mics;
 timer(ms,mics);
 Serial.println(ms,DEC);
 Serial.println(mics,DEC);
 delay(1000);

}

как сделать чтоб в ms записывалось значение millis, а в mics соответственно micros?

sadman41
Offline
Зарегистрирован: 19.10.2016

void timer(int& a, int& b) { ... }

Honey
Offline
Зарегистрирован: 01.10.2020

arz_serg пишет:

Добрый день!

Подскажите пожалуйста, что-то торможу: как сделать процедуру/функцию которая записывала бы значения в свои параметры?

ну например:

void timer(int a, int b) {
 a = millis();
 b = micros();
}

void setup() {
 Serial.begin(9600);

}

void loop() {
 int ms,mics;
 timer(ms,mics);
 Serial.println(ms,DEC);
 Serial.println(mics,DEC);
 delay(1000);

}

как сделать чтоб в ms записывалось значение millis, а в mics соответственно micros?

void timer(int *a, int *b) {
 *a = millis();
 *b = micros();
}
timer(&ms,&mics);
rkit
Онлайн
Зарегистрирован: 23.11.2016

sadman41 пишет:

void timer(int& a, int& b) { ... }

Так правильно.

Honey пишет:

void timer(int *a, int *b) {
 *a = millis();
 *b = micros();
}
timer(&ms,&mics);

Так тоже можно, но хуже.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

rkit пишет:

Так тоже можно, но хуже.

Чем?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

arz_serg пишет:

 int ms,mics;

как сделать чтоб в ms записывалось значение millis, а в mics соответственно micros?

В общем случае - никак. Эти значения туда не поместятся.

b707
Онлайн
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

В общем случае - никак. Эти значения туда не поместятся.

скорее в данном конкретном случае у ТС - не поместятся, а "в общем случае" - вполне решаемо :)

rkit
Онлайн
Зарегистрирован: 23.11.2016

ЕвгенийП пишет:

rkit пишет:

Так тоже можно, но хуже.

Чем?


Поймает меньше ошибок на этапе компиляции

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

скорее в данном конкретном случае у ТС - не поместятся, а "в общем случае" - вполне решаемо :)

Вы не поняли к чему относилось слово "общий".

У ТС было

int ms,mics;

Так вот, иногда (в частных случаях) это сработает, а в общем случае такие значения в такие переменные не пихаются.

Honey
Offline
Зарегистрирован: 01.10.2020

Если запихнуть в unsigned int вместо unsigned long и везде использовать unsigned int и при этом укладываться в урезанный максимальный интервал (65536 ms/us), то разницы не будет никакой.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Honey пишет:

Если запихнуть в unsigned int вместо unsigned long и везде использовать unsigned int и при этом укладываться в урезанный максимальный интервал (65536 ms/us), то разницы не будет никакой.


Ещё как будет , при измерении отрезков более 65,5секунд в частности

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

arz_serg пишет:

 int ms,mics;

как сделать чтоб в ms записывалось значение millis, а в mics соответственно micros?

В общем случае - никак. Эти значения туда не поместятся.

А подскажите  ка мне сударь, это в принципе с точки синтаксиса языка правильно,
что функция не возвращающая значения их возвращает, через костыли но...
На асме я тоже делал, всё что заблагорассудится, но это всё таки C...

По сути то ведь говнокод получается?
 

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

ua6em пишет:

По сути то ведь говнокод получается?

Нет, это штатный механизм, пошедший еще с какой-то из распоследних версий Фортрана, там были in параметры и out параметры.  Применялось это как раз там, где функция должна возвращать более одного значения

Honey
Offline
Зарегистрирован: 01.10.2020

ua6em пишет:

ЕвгенийП пишет:

arz_serg пишет:

 int ms,mics;

как сделать чтоб в ms записывалось значение millis, а в mics соответственно micros?

В общем случае - никак. Эти значения туда не поместятся.

А подскажите  ка мне сударь, это в принципе с точки синтаксиса языка правильно,
что функция не возвращающая значения их возвращает, через костыли но...
На асме я тоже делал, всё что заблагорассудится, но это всё таки C...

По сути то ведь говнокод получается?
 

При большом желании написать кошерный код, можно объявить структуру с этими двумя переменными и возвращать функцией структуру.

Так, как описано выше с заполнением переменных по ссылкам - постоянно используется в программах на Си.

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Honey пишет:

Так, как описано выше с заполнением переменных по ссылкам - постоянно используется в программах на Си.

кем используется, на каком основании, как на это смотрит Керниган и Риччи )))

по сути ведь костыль?

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

ua6em пишет:

по сути ведь костыль?

нет

Honey
Offline
Зарегистрирован: 01.10.2020

ua6em пишет:

Honey пишет:

Так, как описано выше с заполнением переменных по ссылкам - постоянно используется в программах на Си.

кем используется, на каком основании, как на это смотрит Керниган и Риччи )))

по сути ведь костыль?

Ок. Вам задача: написать функцию сортировки большого массива. Может тогда отпадет вопрос)

mixail844
Онлайн
Зарегистрирован: 30.04.2012

Honey пишет:

ua6em пишет:

Honey пишет:

Так, как описано выше с заполнением переменных по ссылкам - постоянно используется в программах на Си.

кем используется, на каком основании, как на это смотрит Керниган и Риччи )))

по сути ведь костыль?

Ок. Вам задача: написать функцию сортировки большого массива. Может тогда отпадет вопрос)

а какой сложности допустим алгоритм ? 
а какой разброс значений массива?

 

Honey
Offline
Зарегистрирован: 01.10.2020

mixail844 пишет:

Honey пишет:

Ок. Вам задача: написать функцию сортировки большого массива. Может тогда отпадет вопрос)

а какой сложности допустим алгоритм ? 
а какой разброс значений массива?

Вопрос тут в том, имеет ли смысл выделять новую память под массив-результат, если он все равно будет записан в изначальную область.

 

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Honey пишет:

ua6em пишет:

Honey пишет:

Так, как описано выше с заполнением переменных по ссылкам - постоянно используется в программах на Си.

кем используется, на каком основании, как на это смотрит Керниган и Риччи )))

по сути ведь костыль?

Ок. Вам задача: написать функцию сортировки большого массива. Может тогда отпадет вопрос)

 каким из семи алгоритмов, что я знаю, можно воспользоваться?

Honey
Offline
Зарегистрирован: 01.10.2020

ua6em пишет:

 каким из семи алгоритмов, что я знаю, можно воспользоваться?

Не важно. Мне интересно, каким способом Вы результат возвращать будете.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

как на это смотрит Керниган и Риччи )))

Никак не смотрит. В языке Си этого нет в принципе.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Honey пишет:
кошерный код, можно объявить структуру с этими двумя переменными и возвращать функцией структуру.
Как "возвращать функцией структуру", прямо return'ом? Хм... у нас с Вами разные понятия о кошерности. Надо бы у Рабиновича спросить :-)

Honey пишет:
Так, как описано выше с заполнением переменных по ссылкам - постоянно используется в программах на Си.
Точно? А ничего, что в Си попросту нет ссылок? Нет от слова "совсем"? И как же это там используется?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:
это всё таки C...
Нет, это всё-таки не Си.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:
еще с какой-то из распоследних версий Фортрана, там были in параметры и out параметры.
Безобразие! Вот то ли дело в старом добром фортране-4. Всё передавалось только по ссылке и всё было, соответственно in/out, а константы хранились в специальном пуле. (это всё именно язык, а не реализация). В результате получались таки шедевры: 1) передаёшь функции константу (например, 5); 2) функция присваивает своему параметру, скажем 12. Это изменяет константу в пуле! После этого, везде, где используется константа 5, на самом деле используется 12!

У нас преподаватель был "счетовод" - в том смысле, что он много программировал расчётных задач, но язык знал слабенько (как и большинство тех, кто программирует расчётные задачи), уж как я его этой особенностью троллил - напишу, сдаю, вроде результат нормальный выводится, но в тексте ... типа печать пятёрки, а на листинге - та самая 12. Он мне: "ты мне левый листинг подсовываешь". А я такой - ни фига, вот мои перфокарты, запустите сами ... запускает, долго чешет репу, бормоча про себя "так не бывает" ... в общем, нефиг было в деканат стучать, что я пару пар прогулял :-)

FoxJone
Онлайн
Зарегистрирован: 19.04.2019

ЕвгенийП пишет:
У нас преподаватель был "счетовод" - в том смысле, что он много программировал расчётных задач, но язык знал слабенько (как и большинство тех, кто программирует расчётные задачи), уж как я его этой особенностью троллил - напишу, сдаю, вроде результат нормальный выводится, но в тексте ... типа печать пятёрки, а на листинге - та самая 12. Он мне: "ты мне левый листинг подсовываешь". А я такой - ни фига, вот мои перфокарты, запустите сами ... запускает, долго чешет репу, бормоча про себя "так не бывает" ... в общем, нефиг было в деканат стучать, что я пару пар прогулял :-)

Мне с преподавателем повезло, он сразу сказал: Фортран устарел, будущее за Паскалем (чтоб ему, не мог сразу на С показать?)! А в остальном один в один: он тоже не очень понимал, что мы ему писали, что не мешало ему писать докторскую на наших материалах:)

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

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

" ... в общем, нефиг было в деканат стучать, что я пару пар прогулял :-)

О!!! Троллинг не вчера придумали )))

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Honey пишет:

ua6em пишет:

 каким из семи алгоритмов, что я знаю, можно воспользоваться?

Не важно. Мне интересно, каким способом Вы результат возвращать будете.

обычно, как берут так и возвращают

Honey
Offline
Зарегистрирован: 01.10.2020

ЕвгенийП пишет:

Honey пишет:
кошерный код, можно объявить структуру с этими двумя переменными и возвращать функцией структуру.
Как "возвращать функцией структуру", прямо return'ом? Хм... у нас с Вами разные понятия о кошерности. Надо бы у Рабиновича спросить :-)

Honey пишет:
Так, как описано выше с заполнением переменных по ссылкам - постоянно используется в программах на Си.
Точно? А ничего, что в Си попросту нет ссылок? Нет от слова "совсем"? И как же это там используется?

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

Да, прямо ретурном можно вернуть структуру.

b707
Онлайн
Зарегистрирован: 26.05.2017

Honey пишет:

Да, прямо ретурном можно вернуть структуру.

взял попкорн, сел поудобнее перед монитором...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Honey пишет:

Не придирайтесь к словам - ссылка, указатель, адрес 

Ладно, не буду. Если Вам нет разницы, то и ладно, хай так будет.

Honey пишет:

Да, прямо ретурном можно вернуть структуру.

Да, можно-то можно, только я же сказал, у нас о кошерности, похоже, разные представления :-(

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

FoxJone пишет:
он сразу сказал: Фортран устарел, будущее за Паскалем
Дурак, наверное, был :-(

FoxJone
Онлайн
Зарегистрирован: 19.04.2019

ЕвгенийП пишет:

FoxJone пишет:
он сразу сказал: Фортран устарел, будущее за Паскалем
Дурак, наверное, был :-(

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

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

Honey
Offline
Зарегистрирован: 01.10.2020

ЕвгенийП пишет:

Honey пишет:

Не придирайтесь к словам - ссылка, указатель, адрес 

Ладно, не буду. Если Вам нет разницы, то и ладно, хай так будет.

Почитал, понял тонкое отличие, буду знать.