?

Log in

No account? Create an account
About,,,
C++, уроки, Программирование
a_1a


Дополнительная информация о сайте...
Нужно руководство для быстрого и результативного старта – “Если я прочитаю это, то у меня точно получится”.
Я искренне надеюсь, что этот сайт поможет вам сделать больше, чем первый успешный шаг в программировании. Несмотря на неизбежную субъективность точки зрения на некоторые вопросы, в том числе при выборе языка программирования C++, мы должны добиться желаемого результата.
Сразу отмечу, что не ставлю своей целью составить справочник или полное руководство по предмету. А намерен создать условия для преодоления психологического барьера перед началом изучения программирования для новичка. Так же постараюсь рассмотреть некоторые интересные решения для стандартных задач в программировании.
Ещё один важный момент – это не отрываться от сути процессов, которыми собираемся программно управлять. То есть не просто – “держи руль и едь хорошо”, а на чём рули хорошо? На самолёте, мотоцикле или подводной лодке? Обязательно нужно видеть программирование с точки зрения архитектуры компьютера.
Случай самовнушения. "У меня нет способностей к языкам программирования" - самый распространённый его вариант. Но фокус в том, что такой самообман разрушается всего одним фактом. Любой, кто в состоянии осознанно установить время срабатывания будильника или пользоваться "микроволновкой", может научиться программировать.
Что является самым сложным для того, кто собрался сделать первый шаг в программировании?
Правильно, вы не угадаете!
Самым сложным шагом является первое впечатление (через него многим не удаётся переступить) от среды разработки - интерфейса компилятора или IDE. Назовите это как угодно, но суть не изменится.
Все эти кнопки, надписи (термины) и главное, почему первый и якобы самый простой пример программы состоит из множества файлов?
На этом, как правило, и заканчивается знакомство с программированием для большинства решившихся.
В лучшем случае человек забрасывает мысли о программировании на несколько лет.
В самой выгодной ситуации окажется тот, у кого есть рядом программист или энтузиаст,
который уже сделал первый шаг и готов порадоваться тому, как всё просто, вместе с Вами.
Если Вы читаете эти строки, то значит проходите первый этап без проблем!
Оглавление:
Показать оглавление...Collapse )

Очередной простой пример работы с Queue в WinLego
C++, уроки, Программирование
a_1a


Текст этого примера будет храниться здесь ( C:\dllBridge\ForWinLego\HELP\Examples.cpp )



Поиск содержимого q [ i ] в порядке возрастания будет происходить очень быстро. Класс Queue запоминает последний найденный элемент. Если следующий индекс старше предыдущего по значению i , то поиск происходит от предыдущего элемента, а не с начала очереди.

Функции __SET() && __GET() для установки сеанса связи с программой по её номеру.
C++, уроки, Программирование
a_1a
Статья в стадии исправления.....
1) Из вызывающей программы мы обращаемся к нужной программе по её номеру с помощью объекта класса    ProgAsPart    SetScreenSav(-940);
В приведённом ниже примере, мы обращаемся к программе с номером  -940.
Программа (-940) это диалог для настройки параметров ScreenSaver(а). Диалог по сути является отдельной программой с уникальным номером (в диапазоне от -2 147 483 647 до 2 147 483 647). Зная номер вызывающей программы ( Transit[0][2] = ProgramNumber; ), диалог передаст настройки именно (вызывающей) программе с номером, который хранится в ProgramNumber (по запросу функции __GET() ).

В красном прямоугольнике показан вызов диалога (фактически запуск отдельной программы, которая может быть написана не только на С++) и запуск таймера №5 .






А теперь опрос далога до тех пор пока он не будет завершён. Тогда таймер №5 будет уничтожен и опрос прекратится.



Если сессия связи установлена (номер программы получателя совпадает и сессия совпадает ), то её можно разбить на две стадии :
1) До сообщения о завершении сессии.                 (выше на рисунке case 1)
2) В момент сообщения о завершении сессии.     (выше на рисунке case 2)



Скачать проект

Использование функций __SET() и LDIR()
C++, уроки, Программирование
a_1a
На примере управления газовой горелкой можно понять, как использовать, указанные в заголовке, функции.





Ниже показан код консольного приложения. При температуре ниже 30 горелка включается, а при температуре выше 70 градусов  выключается.
Общение происходит, через dllBridge.dll.  Данные передаются в элементах массива Transit[11][100]. Содержимое этого массива можно просматривать и редактировать с помощью программы UniMons.exe. Для взаимодействия с программой "Thermometr" нам нужно знать её номер (-949).
Функция __SET(int NumberProg, int Adr, int N); в первом параметре использует номер программы.
Второй папраметр выбирает элемент в нулевом столбце массива Transit[11][100]  ( от 1-го до 99 элемента включительно).
Третий парамет int N это значение, которое мы отправляем в программу № -949 (Thermometr.exe).

Программе Thermometr не нужно знать номер программы. которая ей управляет. В элементе массива Transit[0][1] она видит цифру 1 если требуется включить горелку и видит цифру 2 если нужно выключить газовую горелку.



Код консольной программы проверяет подключение dllBridge.dll
Затем проверяет включена ли программа Thermometr, (пытается отправить ей число). Ответ (-102) говорит о том, что программа Thermometr не найдена (не запущена).
После того, как dll загружена и программа Thermometr включена проверяется два параметра, это температура и состояние датчика пламени (0 или 1).
Функция LDIR() читает из программы -949 из первого столбца 10 переменных ( от Transit[1][0] до Transit[1][9] ). В этих элементах массива содержится информация о текущей температуре и состоянии датчика пламени.
Ниже показан пример управления газовой горелкой из проекта WinLego.





Скачать весь проект.

WinLego - 16
C++, уроки, Программирование
a_1a
Изменения коснулись структуры проекта. Как всегда, много мелких исправлений.




Скачать...
Tags:

Мониторинг заполнения памяти элементами Queue
C++, уроки, Программирование
a_1a
Это промежуточный этап работы над мониторингом заполнения памяти.


Подробнее...Collapse )
WinLego_15_9

Пример работы с очередью (ещё один)
C++, уроки, Программирование
a_1a
Доджен быть способ просто и наглядно показать, как работает Queue (очередь). И я продолжаю этот способ искать...
Можно скачать отдельно exe-файл для экспериментов (не отвлекаясь на исходники примера).
На картинке это выглядит так:


На всякий случай напомню, что наш Queue это не контейнер из STL. А самодельный класс, который позволяет обойтись без STL и сдерживать размер exe-файла в рамках приличия (пока около 52х Килобайт). Вы можете самостоятельно улучшить код класса Queue, если будет такая возможность. Найти его можно здесь:



Память для всех элементов выделена с помощью средств WinAPI ( функции HeapCreate() ).



Именно поэтому адреса элементов не разбросаны хаотично по всей памяти процесса. И работать такой код должен быстрее, чем с использованием оперетора new или malloc(). Можно заметить, что один элемент очереди занимает в памяти 24 байта (это с учётом системной информации). Памяти из кучи я выделил очень мало. В очередь помещается всего 110 элементов, а дальше появляется сообщение о том, что память исчерпана. Радует то, что есть возможность выделить и в два и в тысячу два раза больше места. Было бы что хранить, а памяти океан :)

Скачать папку с проектом. И посмотреть код примера в файле main.cpp.
Файл проекта находится здесь:

Кнопка с картинкой. 6 способов реализации.
C++, уроки, Программирование
a_1a


В этом примере первые 3 кнопки созданы только средствами WinAPI. То есть, эти способы подойдут для любого Windows-проекта.
Легче всего созданы последние две кнопки ( пятая и 6-я).

Развернуть... (почти, весь код из файла main.cpp)Collapse )
В тексте (в файле main.cpp) можно легко разобраться и воспроизвести всё самостоятельно.
Скачать папку dllBridge c проектом (и всеми исходниками).

После размещения папки dllBridge надиске ( C:\dllBridge ) Найти этот пример можно, как показано на рисунке:


WinLego 15 ( чтение и запись в файл )
C++, уроки, Программирование
a_1a
Есть пример работы с файлом (в папке: ExampleWorkWith_DB). Чтение и запись строк в файл в произвольном порядке.
1) Выбираете файл (он должен быть создан заранее).
2) Читаете или пишете из/в нужную строку. Длина строки не должна превышать 200 символов. Если пишете в строку, начиная со 120 позиции, то не более 80 символов.
    Так как строк можно создавать много (теоретически до 1 миллиона), то должно хватить для стандартных ситуаций.



3) В строке можно хранить несколько параметров ( char arr[] ), разделённых точкой с запятой " ; ".

Папку dllBridge (после распаковки) нужно поместить на диск так: C:\dllBridge
Важно!!! В архиве есть exe-файлы. На них или на что-то ещё ругается Яндекс-браузер. Я проверил архив утилитой CureIt и ничего подозрительного не нашёл.

Найти файл проекта WinLego_15 можно, посмотрев на рисунок ниже:
Tags:

Игра "Морской бой" на базе WinLego
C++, уроки, Программирование
a_1a
Готовлю новую ( 15-ю ) версию WinLego. А пока выкладываю игру, сделанную на базе предыдущих версий.
Все исходные коды открыты и Вы можете улучшить или сделать свою версию игры.



Пока вижу два направления, как улучшить игру:
1) Возможность играть двум игрокам, через интернет. Для этого к WinLego нужно написать компактный Lego-модуль для обмена данными по сети.
    Например, с помощью библиотеки функций WinInet. Будет здорово, если кто-либо поможет это сделать.
2) Сохранять рекорды и игровые настройки. Потребуется простая база данных, основанная на произвольной записи в файл средствами WinAPI.
    Сейчас стараюсь сделать такие функции.
   P.S.: Класс уже готов в WinLego_15 (28_11_2018)





Код игры ( exe-файл ) "весит" 64 килобайта. Музыка и картинки почти в 200 раз тяжелее.
Скачать файл инсталлятора игры можно здесь..