Помогите пофиксить баги

Обсуждаем контроллеры компании Atmel.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

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

Код: Выделить всё

if(f()){фигня}

--------

f(&ff);
if(ff){фигня}
_____________________
ARV писал(а):тип void для функции Си - это дань синтаксису языка, который не предусматривает понятия процедуры, как паскаль.
А по Если для Вас функция типа void не является процедурой по сути, поставте ее "справа" и убедите компилятор что так есть гуд.
Последний раз редактировалось Z_h_e Сб июл 16, 2016 16:15:50, всего редактировалось 1 раз.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Z_h_e писал(а):Продолжим бесполезный разговор.
почему вы всегда так выражаете свои мысли, что я вынужден вам возражать? :shock: я не считаю этот разговор бесполезным. причина этого разговора в том, что думая об одном и том же, мы используем разные термины, вкладывая в них собственные смыслы. поэтому и возникают разногласия. я и хочу как-то "стандартизировать" мысли, чтобы избежать лишних споров.
Z_h_e писал(а):Вы действительно считаете это разными алгоритмами?
ну... как бы выразить свою мысль, чтобы снова не попасть на иное понимание слов и терминов? что такое алгоритм? алгоритм - это последовательность действий для достижения заданного результата. вы написали разные реализации одного и того же алгоритма. неужели для вас алгоритм и его реализация - одно и то же?! :shock: вот тут уже вы меня можете пугающе разочаровать!

P.S. устав спорить, доказывая очевидное, прибегаю к последнему аргументу, который лично меня всегда вгоняет в уныние - википедии: https://ru.wikipedia.org/wiki/%D0%9F%D0 ... 0.BC.D0.BC

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Редактировал свой пост, одновременно с Вашим. Внес дополнения.

----

Если Вы решили буквально вникать в понятие алгоритм. Тогда при разной степени оптимизации компилятора один и тот же оператор есть разный алгоритм.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Господа коты. Предлагаю закрыть этот разговор. По-моему он не приносит пользы никому, разговор ни о чем, на одну тему, на одном языке и одновременно на разных. Если топик еще нужен, пускай ТС вернет его к жизни.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Z_h_e писал(а):при разной степени оптимизации компилятора один и тот же оператор есть разный алгоритм
нет, это разные реализации одного и того же алгоритма. алгоритм ведь может быть не из элементарных шагов, а из укрупненных...
"пойди в магазин и купи хлеба" - это обобщенный алгоритм, который может быть реализован многими способами (есть простор для работы оптимизатора)
"надень кеды, открой дверь, спустись на 1-й этаж, пойди по улице Ленина до дома №3, зайди в него (это магазин), там купи хлеба" - это более детальный алгоритм для той же самой задачи. благодаря детализации вариантов его реализации уже существенно меньше, но они еще есть (например, можно спуститься на 1-й этаж по лестнице или на лифте, или съехать по перилам). можно расписать алгоритм до элементарных действий, когда вариантов для разнообразия уже не будет...

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

ARV писал(а):на нижнем уровне (ассемблерном) не существует ни процедур, ни функций, одни подпрограммы :))) поэтому я строю все свои рассуждения логически из этого постулата. так как нижний уровень тем не менее является фундаментом для всех последующих, я обобщающим термином принимаю подпрограмму, а не что-либо иное.
То есть, по-вашему, ньютоновская механика является обобщением релятивистской? Мне всегда казалось наоборот... Обобщение должно включать в себя все частные случаи и именно поэтому обобщением можно считать функцию а не подпрограмму.
нет, в обоих случаях нет.
процедура - не устаревший, поскольку присутствует, как понятие, в паскале, который не устарел очень даже. а для Си это не устаревший, а неприменимый термин.
Ну же, сделайте еще один шаг. Почему он неприменимый? Да потому что от него отказались за ненадобностью, потому что все чего можно добиться с использованием подпрограмм или процедур, функция делает ничуть не хуже.
еще какой интерфейс!
Как данные могут быть интерфейсом? Интерфейс это стандартизованный способ передачи данных. В подпрограмме такого нет - как хочешь так и передавай, в процедуре появляется стандарт на передачу данных внутрь - через регистры или через стек, зависит от компилятора, главное что об этом не надо думать программисту. В функции же появляется и интерфейс передачи данных наружу - опять же через регистры или стек и опять же механизм передачи скрыт от программиста.
постройте график процедуры - сумеете? а график функции? в чем же разница?
Так мы какие функции обсуждаем, математические или алгоритмические? Математическая функция это однозначный закон соответствия определенной величины одной или нескольким другим. Грубо говоря, формула. В программировании же функция это последовательность операций.
последняя попытка, если не смогу убедить, признаю своё бессилие пред вашей твердостью :)
Так вы что, всерьез надеялись меня убедить что красное лучше теплого? Я-то думал мы просто так развлекаемся. Собственно, свое мнение я уже неоднократно высказывал - в обычной речи "функция", "процедура" и "подпрограмма" - почти синонимы.
Господа коты. Предлагаю закрыть этот разговор. По-моему он не приносит пользы никому, разговор ни о чем, на одну тему, на одном языке и одновременно на разных. Если топик еще нужен, пускай ТС вернет его к жизни.
Как это не приносит пользы? Вы что же не видите как тут народу весело? Вот только форум немного не на это рассчитан...
А ТС наверное убежал. Он же программист в отличие от нас. Посмотрел на наши дикарские представления о процедурах и функциях, что мы сколько времени не можем отличить одно от другого, ассемблер поминаем всуе, и испугался. Теперь нам должно быть стыдно.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

COKPOWEHEU писал(а):почти синонимы
сыр-бор именно вокруг "почти" :))) википедию читали? согласны? если нет - объясните.

вы все объяснение строите на внутреннем устройстве высокоуровневых абстракций, а я не считаю это правильным, этак можно все к атомам свести - тогда и ньютоновская механика станет ненужной... но она есть и полезна на своем уровне абстракции взаимодействий!
COKPOWEHEU писал(а):Обобщение должно включать в себя все частные случаи и именно поэтому обобщением можно считать функцию а не подпрограмму
1. подпрограмма - участок кода, который вместо многократного повторения в тексте программы оформлен отдельно и заменяется в местах использования специальными командами обращения к нему.
2. процедура - подпрограмма, которая может обладать неким интерфейсом обработки данных
3. функция - подпрограмма, которая, как и процедура, может обладать неким интерфейсом обработки данных, но в отличие от нее обязательно имеет строгий интерфейс возврата значения, являющегося результатом ее работы. в отличие от неопределенного направления обмена данными для процедуры, интерфейс возврата значения функции всегда однонаправлен - только ИЗ функции.

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

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

В любом случае эти все три пункта предполагают прыжок в подпрограмму, которая сделает нечто, и возврат обратно.
функция - подпрограмма, которая, как и процедура,
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Z_h_e писал(а):В любом случае эти все три пункта предполагают прыжок в подпрограмму
мы все умрем. но кто-то от старости, кто-то от пьянки, кто-то от удара камаза... результат один - пути разные.

грустно, что не получается убедить... придется совершенствоваться в ораторском искусстве :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Предлагаю идти по проверенному пути :beer: ;)
На счет алгоритма... есть вариант убить Камаз будучи пьяным пенсионером.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

1. подпрограмма - участок кода, который вместо многократного повторения в тексте программы оформлен отдельно и заменяется в местах использования специальными командами обращения к нему.
При таком определении подпрограммы все верно. Вот только введение термина с таким смыслом мне непонятно.
Но, учитывая, что сам термин "подпрограмма" чаще всего применялся к выделенным кускам низкоуровневого кода на ассемблере или бейсике, не обладающим интерфейсами входа и выхода, мне больше нравится называть подпрограммой именно эту структуру. Если я неправильно выбрал термин буду рад узнать более подходящий. Пока же выделять процедуры из функций и выдумывать для их объединения отдельный термин не вижу смысла.
Ну и, серьезно, пока речь идет о личных предпочтениях и выборе из равноправных вариантов, убедить кого-то в чем-то будет сложно. А учитывая, что разница вариантов невелика, даже если докажете это не будет стоить затраченных усилий. Я спорю просто из удовольствия пообщаться на интересную тему с интересными личностями.
На счет алгоритма... есть вариант убить Камаз будучи пьяным пенсионером.
Э-э-э... Есть у меня, конечно, несколько версий как это возможно, вот только не хочется их озвучивать.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

COKPOWEHEU писал(а):пока речь идет о личных предпочтениях и выборе из равноправных вариантов, убедить кого-то в чем-то будет сложно
менее зацикленные на собственном предпочтении граждане пользуются готовыми определениями из википедии или из книжек "великих гуру".
Виды подпрограмм
В языках программирования высокого уровня используется два типа подпрограмм: процедуры и функции.
Функция — это подпрограмма специального вида, которая, кроме получения параметров, выполнения действий и передачи результатов работы через параметры имеет ещё одну особенность— она всегда должна возвращать результат. Вызов функции является, с точки зрения языка программирования, выражением, он может использоваться в других выражениях или в качестве правой части присваивания.
Процедура — это независимая именованная часть программы, которую после однократного описания можно многократно вызвать по имени из последующих частей программы для выполнения определенных действий.
Подпрограммы, входящие в состав классов в объектных языках программирования, обычно называются методами. Этим термином называют любые подпрограммы-члены класса, как функции, так и процедуры; когда требуется уточнение, говорят о методах-процедурах или методах-функциях.
я не виноват, что думал так же, как и написано в википедии... но вы можете и дальше идти своим путем. только всякий раз будете натыкаться на непонимание всех, кто "шагает в ногу"...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

ARV писал(а):Функция — это подпрограмма специального вида, которая, кроме получения параметров, выполнения действий и передачи результатов работы через параметры имеет ещё одну особенность— она всегда должна возвращать результат.
Тогда еще раз спрашиваю что есть void f(); , или как в анектдоте, "нам пофиг на ваши неувязочки".
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Z_h_e писал(а):Тогда еще раз спрашиваю что есть void f();
господи... опять 25...

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

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

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Ну вот такой я нехороший человек, не вижу отличия между функций не возвращающей ничего и процедурой которая всегда так делает. Бычье молоко оставьте себе.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

ARV писал(а):но вы можете и дальше идти своим путем. только всякий раз будете натыкаться на непонимание всех, кто "шагает в ногу"...
Ничего, обойдусь и теми, кто пользуется логикой.
это есть нонсенс языка Си, в котором по каким-то причинам отказались от классических определений разных типов подпрограмм и ограничились только одним - функциями. отсюда получился парадокс: функция, которая ничего не возвращает, точнее, которая возвращает "ничего". то есть по сути процедура, но нареченная функцией.
Об этом я и говорил, отдельное определение процедур в Си было обрезано бритвой Оккама.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Z_h_e писал(а):не вижу отличия между функций не возвращающей ничего и процедурой которая всегда так делает
так разницы и нет!

по определению функция не имеет права возвращать "ничего" - это исключительная прерогатива процедуры! но Кернигану с Ритчи по каким-то причинам показалось, что на здравый смысл можно наплевать ради уменьшения формальных определений в синтаксисе языка, и так родился нонсенс...
COKPOWEHEU писал(а):отдельное определение процедур в Си было обрезано бритвой Оккама
к сожалению, это было сделано с отступлением от главного принципа бритвы Оккама - не отрезать нужного. поэтому в итоге получили парадокс, необъяснимый формальной логикой. если не согласны, объясните, не прибегая к ассемблерной реализации, почему результат всякой функции можно присвоить переменной соответствующего типа, а результат void-функции - нельзя? Отцы-основатели языка Си на это отвечают примерно так: "Забей на почему, просто знай это". Согласитесь, что логика в этом месте дает сбой.

тип void вообще был введен в Си для разрешения противоречий, но, как мне кажется, наоборот, породил их еще больше... может, я и не прав, или слишком мало знаю... :dont_know:

снова прибегаю к вики:
Семантика ключевого слова void не подчиняется общей семантике спецификаторов типа и зависит от способа употребления:
В качестве имени типа значения, возвращаемого функцией: указывает на то, что функция не возвращает значения, а вызов такой функции является void-выражением. Тело такой функции не должно содержать операторов return с выражениями. Например:
void f();
В составе декларатора функции: указывает на то, что функция имеет прототип и не имеет параметров. Например:
int f(void);
В качестве имени целевого типа операции приведения: такое void-приведение означает отказ от значения приводимого выражения. Например:
#define promote_ptr() ((void) (ptr++))
В составе имени типа void-указателя: такой указатель способен представлять значения любых указателей на объектные и неполные типы, то есть адреса любых объектов. Таким образом, void-указатель является обобщенным объектным указателем. void-указатели не способны представлять значения указателей на функции. За исключением случая приведения константного null-указателя к указателю на функцию в Си, явных и неявных преобразований между void-указателями и указателями на функции нет.
Тип void определен как неполный тип, который не может быть дополнен. Как следствие, этот тип не должен быть использован там, где допускаются только полные типы, например, в качестве типа параметра в определении функции.
согласитесь: противоречие на противоречии, исключение из правил на исключении... по сути, это просто узаконенное безобразие. просто все привыкли и не желают думать об этом...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

ARV писал(а):по определению функция не имеет права возвращать "ничего" - это исключительная прерогатива процедуры!
Я прошу прощения у форумчан, но на данную цитату я не могу ответить иначе как :kill: "........" :kill: . Вы уже определитесь какого вы пола с терминами.

Ответьте

Код: Выделить всё

void f();
процедура или функция
Последний раз редактировалось Z_h_e Сб июл 16, 2016 18:20:20, всего редактировалось 1 раз.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Z_h_e писал(а):но на данную цитату я не могу
а вы постарайтесь понять... напрягитесь.

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

ну что не понятно вам?! :o
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Есть подпрограмма. Она ничего не возвращает - ее назвали процедурой.

Есть подпрограмма. Она ничего не возвращает- ее назвали функцией void.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Ответить

Вернуться в «AVR»