| 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
|
|
|
Вездепух
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,323
|
|||||||||||||||||||||
| 29.07.2020, 08:14 | |||||||||||||||||||||
|
Ошибочное убеждение, что изменение значений переменных в С имеет магическую "обратную силу"
Это ошибка встречается в разных проявлениях. Наиболее часто она выглядит примерно так
array так, как будто он имеет размер 10, то есть как будто этот массив каким-то магическим образом узнал о том, что переменная n получила новое значение, и автоматически подстроил свой размер.В реальности же ничего подобного в С не происходит. С - процедурный, пошаговый язык. Размер массива array в вышеприведенных примерах задается (и фиксируется) в тот момент, когда процесс выполнения программы проходит по его определению (и в первом варианте поведение вообще не определено, ибо переменная n не инициализирована). После этого никакие изменения значения n уже не могут повлиять на размер массива. Эта же ошибка встречается в варианте с динамическим выделением памяти. --- Другие, более редкие вариации, того же заблуждения встречаются в виде
1. Программа на языке С - это не электронная таблица вроде Excel. Изменения переменных в С программах не имеют неявной [обратной] силы. Если какое-то изменение должно влечь за собой череду связанных изменений, то вам придется сделать/инициировать их все явно, вручную, самостоятельно. 2. В языке С нет массивов изменяющегося на лету размера. Изменить размер массива в С можно только путем уничтожения старого массива и создания нового. Опять же, делать это придется явно, вручную, самостоятельно.
4
|
|||||||||||||||||||||
|
из племени тумба-юбма
|
|
| 29.07.2020, 08:54 | |
|
Два последних варианта мне точно не встречались, иначе бы вынесло мозг ))
0
|
|
|
Вездепух
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,323
|
|||||||||||||||||||||
| 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
|
|
|
Вездепух
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,323
|
|||||||||||
| 01.08.2020, 06:54 | |||||||||||
|
Бездумное определение локальных объектов большого размера
При определении локальных (автоматических) объектов следует иметь в ввиду, что даже в современных "полноразмерных" архитектурах размер стека (в котором и размещаются локальные переменные) обычно ограничен, и обычно ограничен относительно небольшим значением. Да, размеры объектов, которые допустимо объявлять локально, существенно выросли по сравнению с тем, какими они были двадцать лет назад, но тем не менее бездумное объявление локальных переменных огромного размера запросто может привести к переполнению стека и сегодня. По понятным причинам, в первую очередь это касается рекурсивных функций. Но бездумное определение локального массива гигантского размера запросто может привести к переполнению стека и без рекурсии
Какой размер объекта является "уже большим", а какой - "еще маленьким", сильно зависит от особенностей платформы. Как правило опыт, позволяющий проводить разумный водораздел между первым и вторым, вырабатывается быстро.
3
|
|||||||||||
|
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
|
|
| 01.08.2020, 14:35 | |
|
На моей практике (но это было давно уже) локальные переменные (с параметрами вкл.) в функции по-хорошему должны попадать в регистровое поле архитектуры назначения. Если оно туда "не лезет", то скорострельность функций как правило падает значительно. А учитывая глубокую вложенность вызовов в современных подходах .. всё это ведет (и частенько) к возмущению "а чего оно так тупит-то?"
0
|
|
|
Вездепух
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,323
|
|||||||||||
| 05.08.2020, 04:44 | |||||||||||
|
Передача "массива" в функцию (в дополнение к Определение размера массива, переданного в качестве аргумента функции)
Все объявления параметров типа "массив T [N]" в списке параметров функции автоматически трансформируются в параметры типа "указатель T *". Наличие или отсутствие явно указанного размера в объявлении массива не имеет никакого значения - этот размер просто игнорируется.Например, объявления
По этой причине внутри функции бесполезно пытаться применять к такому "массиву" трюк с sizeof для определения количества элементов в массиве. Выражение sizeof a / sizeof *a не сможет вычислить фактическое количество элементов массива, переданного в качестве аргумента, уже хотя бы по той причине, что sizeof a в данном контексте - это размер указателя, а не размер массива.Уточнение: вышесказанное относится именно к параметрам типа "массив". Параметры типа "указатель на массив" ( T (*)[N]) не подвержены таким трансформациям.
3
|
|||||||||||
|
Вездепух
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,323
|
||
| 05.10.2020, 22:47 | ||
|
При вычислении результата получается "-nan" Проблема с rand() в цикле
0
|
||
|
Вездепух
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,323
|
|||||||||||||||||||||||||||||||
| 21.01.2021, 12:03 | |||||||||||||||||||||||||||||||
|
Переключение текущей локали воздействует на формат представления чисел
Переключение со стандартной "С"-локали на некоторую интернациональную локаль, вроде
В частности, в текстовой записи десятичных дробей в качестве разделителя дробной части теперь будет выступать запятая, а не точка. Это окажет воздействие на поведение всех стандартных функций, выполняющих преобразование из строкового формата в числовой. В частности, такие функции как strtod, atof, scanf и т.п. будут воспринимать символ '.' в записи десятичной дроби как некорректный и прекращать преобразование на этом символе. Внешне это будет выглядеть так, как будто эти функции округляют плавающие значения до целого. На самом же деле преобразование просто останавливается на символе '.' и рассмотрения дробной части не происходит вообще.
LC_NUMERIC
5
|
|||||||||||||||||||||||||||||||
| 21.01.2021, 12:03 | |
|
Самые распространенные строки Самые распространённые фамилии Вывести самые распространенные женские и мужские имена
Вирус блокирует выход на сайт вк и другие распространенные сайты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|