| 02.10.2014, 12:49 | |
|
Ответы с готовыми решениями:
72
безопасность и распространенные ошибки Распространенные ошибки SEO и ASP.NET 2.0 |
|
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
|
|
| 24.02.2019, 21:25 | |
|
0
|
|
|
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
|
|||||||||||||||||||||||||||||||
| 11.03.2019, 06:09 | |||||||||||||||||||||||||||||||
|
К слову о генерации случайных чисел, вот такой код:
но если компилировать + запускать ( как я привык делать; клавишу, знаете ли запомнил ), не выходя из IDE, то
Всё это я к тому, что алгоритм не самый хороший. Возможно, надо делать, как stake-k26, деля на два, но непонятно, что и почему это даёт. Спасибо.
0
|
|||||||||||||||||||||||||||||||
|
|
|
| 10.09.2019, 21:38 | |
|
В продолжение Вычитание беззнаковых чисел и Ошибка переполнения малоразрядных беззнаковых переменных
C #include <stdio.h> int main (void) { unsigned char a, b, c; a = 0; b = 254; /* Пример N1 */ if ((a - b) > 5u) printf ("1: yes\n"); else printf ("1: no\n"); /* Пример N2 */ c = a - b; if (c > 5u) printf ("2: yes\n"); else printf ("2: no\n"); return 0; } Code $ gcc t.c $ ./a.out 1: yes 2: no Виною всему integer promotion. По правилам языка Си при построении арифметических операций для аргументов короткого целочисленного типа (char, unsigned char, short, unsigned short) выполняется неявное преобразование к типу int. В итоге пример N1 выглядит как C if ( (unsigned)((int)a - (int)b) > 5u ) C if ( (unsigned)(unsigned char)((int)a - (int)b) > 5u )
4
|
|
|
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
|
|
| 12.09.2019, 08:51 | |
|
Evg, спс. Я "так" ни умею .. но именно так и надо для начинающих.
0
|
|
|
Вездепух
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,343
|
|||||||||||||||||||||
| 29.07.2020, 08:14 | |||||||||||||||||||||
|
Ошибочное убеждение, что изменение значений переменных в С имеет магическую "обратную силу"
Это ошибка встречается в разных проявлениях. Наиболее часто она выглядит примерно так
array так, как будто он имеет размер 10, то есть как будто этот массив каким-то магическим образом узнал о том, что переменная n получила новое значение, и автоматически подстроил свой размер.В реальности же ничего подобного в С не происходит. С - процедурный, пошаговый язык. Размер массива array в вышеприведенных примерах задается (и фиксируется) в тот момент, когда процесс выполнения программы проходит по его определению (и в первом варианте поведение вообще не определено, ибо переменная n не инициализирована). После этого никакие изменения значения n уже не могут повлиять на размер массива. Эта же ошибка встречается в варианте с динамическим выделением памяти. --- Другие, более редкие вариации, того же заблуждения встречаются в виде
1. Программа на языке С - это не электронная таблица вроде Excel. Изменения переменных в С программах не имеют неявной [обратной] силы. Если какое-то изменение должно влечь за собой череду связанных изменений, то вам придется сделать/инициировать их все явно, вручную, самостоятельно. 2. В языке С нет массивов изменяющегося на лету размера. Изменить размер массива в С можно только путем уничтожения старого массива и создания нового. Опять же, делать это придется явно, вручную, самостоятельно.
4
|
|||||||||||||||||||||
|
из племени тумба-юбма
|
|
| 29.07.2020, 08:54 | |
|
Два последних варианта мне точно не встречались, иначе бы вынесло мозг ))
0
|
|
|
Вездепух
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,343
|
|||||||||||||||||||||
| 29.07.2020, 10:37 | |||||||||||||||||||||
|
Наивная замена "опасных" функций на "безопасные"
Если компилятор Microsoft Visual Studio советует вам заменить вызовы функции scanf на вызовы функции scanf_s и вы решили последовать его совету, то это совсем не означает, что для этого достаточно просто огульно исправить имена функций в вызовах со scanf на scanf_s.Функция scanf_s - это другая функция, обладающая несколько другим интерфейсом. Поэтому при переходе с использования scanf на использование scanf_s в общем случае придется также внести исправления в список аргументов в вызове функции.А именно: три спецификатора формата - %s, %с и %[] - в функции scanf_s ведут себя не так, как ведут себя аналогичные спецификаторы в функции scanf. В функции scanf_s эти спецификаторы формата требуют двух аргументов, а не одного. Первый аргумент - это, как и в scanf, указатель на переменную-приемник (на буфер-приемник). А вот непосредственно вслед за ним должен следовать еще один аргумент - значение типа unsigned, описывающее размер этого приемника.Все остальные спецификаторы формата scanf_s ведут себя так же как и в scanf, т.е. не требуют никаких дополнительных аргументов.Например, если вы хотите перейти на использование функции scanf_s в следующем искусственном примере
scanf не содержит спецификаторов %s, %с или %[], достаточно просто изменить имя функции в вызове на scanf_s. Но как только в формате появляется хотя бы один из этих спецификаторов, при переходе на scanf_s придется обязательно вносить исправления и в набор передаваемых аргументов.--- Похожее замечание справедливо и для функции gets_s. Эта функция в языке С требует два аргумента, а не один, как это когда-то было в gets. Например
_s.
4
|
|||||||||||||||||||||
|
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
|
|
| 30.07.2020, 08:43 | |
|
"Си - процедурный пошаговый язык" .. вот именно из-за этого он и является самым простым для изучения и самым мощным языком программирования, что доказывает его столь долгая "живучесть" и популярность.
Единственное чего мне в нем не хватало - это прямая работа с флагами регистра(ов) состояния процессора. В частности, не получится реализовать какую-нибудь "свою" 24-х битную арифметику на 8-и битном процессоре. Флаг переноса недоступен, увы. ![]() Всё, что есть в иных "продвинутых" языках не более чем "синтаксический сахар", в т.ч. и реалтайм. P.S. просто ИМХО, не холивара для. Тему стоит пополнять такими вот примерами, особенно для тех кто "движется наоборот" от разных Питонов в Си .. у них много "непонимания" этого рода. Тоже сталкивался уже.
0
|
|
|
Вездепух
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,343
|
|||||||||||
| 01.08.2020, 06:54 | |||||||||||
|
Бездумное определение локальных объектов большого размера
При определении локальных (автоматических) объектов следует иметь в ввиду, что даже в современных "полноразмерных" архитектурах размер стека (в котором и размещаются локальные переменные) обычно ограничен, и обычно ограничен относительно небольшим значением. Да, размеры объектов, которые допустимо объявлять локально, существенно выросли по сравнению с тем, какими они были двадцать лет назад, но тем не менее бездумное объявление локальных переменных огромного размера запросто может привести к переполнению стека и сегодня. По понятным причинам, в первую очередь это касается рекурсивных функций. Но бездумное определение локального массива гигантского размера запросто может привести к переполнению стека и без рекурсии
Какой размер объекта является "уже большим", а какой - "еще маленьким", сильно зависит от особенностей платформы. Как правило опыт, позволяющий проводить разумный водораздел между первым и вторым, вырабатывается быстро.
3
|
|||||||||||
|
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
|
|
| 01.08.2020, 14:35 | |
|
На моей практике (но это было давно уже) локальные переменные (с параметрами вкл.) в функции по-хорошему должны попадать в регистровое поле архитектуры назначения. Если оно туда "не лезет", то скорострельность функций как правило падает значительно. А учитывая глубокую вложенность вызовов в современных подходах .. всё это ведет (и частенько) к возмущению "а чего оно так тупит-то?"
0
|
|
|
Вездепух
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,343
|
|||||||||||
| 05.08.2020, 04:44 | |||||||||||
|
Передача "массива" в функцию (в дополнение к Определение размера массива, переданного в качестве аргумента функции)
Все объявления параметров типа "массив T [N]" в списке параметров функции автоматически трансформируются в параметры типа "указатель T *". Наличие или отсутствие явно указанного размера в объявлении массива не имеет никакого значения - этот размер просто игнорируется.Например, объявления
По этой причине внутри функции бесполезно пытаться применять к такому "массиву" трюк с sizeof для определения количества элементов в массиве. Выражение sizeof a / sizeof *a не сможет вычислить фактическое количество элементов массива, переданного в качестве аргумента, уже хотя бы по той причине, что sizeof a в данном контексте - это размер указателя, а не размер массива.Уточнение: вышесказанное относится именно к параметрам типа "массив". Параметры типа "указатель на массив" ( T (*)[N]) не подвержены таким трансформациям.
3
|
|||||||||||
|
Вездепух
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,343
|
||
| 05.10.2020, 22:47 | ||
|
При вычислении результата получается "-nan" Проблема с rand() в цикле
0
|
||
|
Вездепух
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,343
|
|||||||||||||||||||||||||||||||
| 21.01.2021, 12:03 | |||||||||||||||||||||||||||||||
|
Переключение текущей локали воздействует на формат представления чисел
Переключение со стандартной "С"-локали на некоторую интернациональную локаль, вроде
В частности, в текстовой записи десятичных дробей в качестве разделителя дробной части теперь будет выступать запятая, а не точка. Это окажет воздействие на поведение всех стандартных функций, выполняющих преобразование из строкового формата в числовой. В частности, такие функции как strtod, atof, scanf и т.п. будут воспринимать символ '.' в записи десятичной дроби как некорректный и прекращать преобразование на этом символе. Внешне это будет выглядеть так, как будто эти функции округляют плавающие значения до целого. На самом же деле преобразование просто останавливается на символе '.' и рассмотрения дробной части не происходит вообще.
LC_NUMERIC
5
|
|||||||||||||||||||||||||||||||
| 21.01.2021, 12:03 | |
|
Самые распространенные строки Самые распространённые фамилии Вывести самые распространенные женские и мужские имена
Вирус блокирует выход на сайт вк и другие распространенные сайты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|