Как написать небольшую программу

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

Многие классики писали свои большие романы, прославившие их в веках, на основе ранее написанных рассказов, очерков или повестей. Например, всемирно известный и многими любимый роман Михаила Булгакова «Мастер и Маргарита» был и вовсе написан на основе ранее написанных и изданных автором фельетонов «Самогонное озеро» и «Три вида свинства».

То есть мистический роман вырос из кратких сатирических прозаических произведений. И это далеко не единичный случай. Иногда ранее написанные рассказы целиком вплетаются автором в канву произведения, как в роман Достоевского «Братья Карамазовы» вплетен рассказ «Легенда об Инквизиторе». Но надо понимать, что и малые формы требуют большого писательского труда, иногда даже более кропотливой работы, чем объемное произведение.

Так как написать рассказ? Вспомните рассказы Чехова — чем короче произведение, тем более насыщенным должен быть язык, более четкой и выдержанной должна быть идея. Работа над малой формой, а в частности над рассказом, требует постоянной вычитки, вычеркивания лишнего, «отжима воды». В рассказе не будут уместны пространные лирические отступления, к которым так склонны молодые авторы.

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

Как написать рассказ от Penfox

Как составить рассказ

1. Первая стадия, на которой зарождается рассказ, проявляется сама необходимость его написания — это возникновение замысла.

Замысел литературного произведения — это изначальная идея, выросшая из жизненного опыта автора, его мировоззрения или воображения. Источником замысла может стать политическая жизнь страны, наблюдения за животным миром, пережитые чувства, прочитанная и переосмысленная книга. Работу без замысла не начинал ни один известный автор.

Одним из сильнейших примеров авторского замысла является «Человеческая комедия» Бальзака. Решив раскрыть миру культуру и порядки, «блеск и нищету» французского общества в период реставрации монархии и правления Бурбонов, Оноре де Бальзак разработал сложнейшую концепцию, написал 137 обособленных произведений (с наличием сквозных героев, путешествующих из книги в книгу), работал над своей «комедией» 26 лет. И сумел выдержать свой замысел до конца.

Начинающему автору лучше не браться за такие сложные концепции, отложить масштабные замыслы на время, когда его перо уже будет отточено. Научиться выбирать соотносимый с масштабами малых форм замысел можно у Чехова, Куприна. Есть классические «три кита» российской прозы: маленький человек, лишний человек, новый человек. Попытайтесь описать один день одного из этих архетипов русской классики, пропустив через призму своего восприятия. Получится как минимум психологично, научитесь оттачивать характеры, а как максимум — дойдете до большой идеи, которую сможете воплотить в своем дальнейшем творчестве.

2. Когда у автора есть замысел, можно приступать к работе. Но «приступать к работе» — это вовсе не значит, что можно уже садиться и писать. Нет, для начала нужно отобрать материал, хорошо изучить то, о чем хотите писать.

В идеале, начинающему писателю лучше выбрать тематику рассказа, максимально близкую ему. Если Вы медик — пишите про врачей и пациентов, если школьник — про школьную жизнь. Это поможет избежать фактических ошибок, да и интереснее писать о том, в чем разбираешься. Опасность такого подхода только в том, что начинающий автор может случайно написать не художественный рассказ, а статью на профессиональную тему. Не забывайте, что пишите для широкой публики, не углубляйтесь в детали, если этого не требует замысел, не переусердствуйте с профессиональной лексикой.

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

Если Вам кажется не особо нужной такая предварительная подготовка, то придется удивиться — абсолютно все классики — прозаики работали именно так. Можно написать бульварный лубочный роман не прибегая к источникам, а хороший рассказ так не пишется. Большая часть писателей сидели месяцами над книгами, чтобы разобраться в вопросе, а некоторым приходилась даже ехать в то место, о котором они хотели написать, чтобы уловить настроение, оценить локацию лично. Михаил Пришвин, например, в своих рассказах о животных руководствовался личными наблюдениями, которые старательно записывал. Чтобы подарить миру один рассказ про птиц, он мог месяцами наблюдать за их жизнью, фотографировать и записывать.

Читайте также:
Какой программой пользуется товаровед

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

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

Если развлечь, то ставьте целью насыщенный сюжет. Если хотите донести какой-то концепт, идею, то четко пропишите как и какими средствами. Это нужно прежде всего самому автору.

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

Пример плана рассказа

Предположим, возникает идея написать рассказ о декабристах, ссылаемых в Сибирь, но не о самом факте или их жизни в Сибири, а о сложной дороге по необжитым территориям.

Цель: написать социально-бытовой, философский рассказ об этапе декабристов в Сибирь;

Идея: декабристы преодолевают долгий путь до места ссылки и строят планы на будущее;

План

План:

  • описание одного из декабристов и его болезни, заработанной в ужасных условиях этапа в Сибирь;
  • небольшое лирическое отступление об условиях, бытовая зарисовка;
  • больной декабрист не знает доберется ли он до места, где ему теперь придется жить, небольшое размышление;
  • разговор с товарищем о политике и о том, что дальше;
  • размышление о том, что Сибирь, которая будет местом их ссылки, не кажется каторгой, когда он рискует до нее не добраться, а кажется скорее оазисом в пустыне;
  • момент, в котором главный герой предположительно умирает в тишине, но это максимально не точно;
  • за тонкой дощатой перегородкой в момент предположительной смерти два декабриста говорят о том, что природа в России сурова, чтобы быть хорошей декорацией суровой жизни.

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

Что еще должно быть?

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

Как написать рассказ?

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

Во-первых, если вы взялись писать рассказ, то пишите его каждый день. Подберите для написания время, когда сможете посвятить написанию не меньше 3-4 часов в день. Но, особенно по началу, не следует писать сутками. Хорошие мысли покидают уставшую голову, поэтому занимайтесь учебой, работой, домашними делами или просто гуляйте, но держите наготове блокнот или ноутбук, чтобы записать неожиданный и интересный ход — пока вы занимаетесь сторонними делами мозг не перестает работать над произведением. Возникшие в течение дня мысли отсортировывайте, не все они обязательно подойдут вашему рассказу.

Во-вторых, пытайтесь не использовать заезженных, всем поднадоевших ходов в плане сюжета и языка. Самый известный штамп сюжета — это, пожалуй, дождь, который льет когда главному герою грустно. Возможно такой ход был интересным, когда был использован впервые, а теперь уже является примером дурного вкуса. Речевые штампы работают также. Когда-то сказанное было хорошо и красиво, но потом это повторили тысячи раз и очарование словесного образа разрушилось, оставив только непонимание, почему у главного героя подбородок обязательно «волевой», слезы исключительно «скупые» и можно ли этого как-то избежать.

«Вычитка» и редактирование

Когда рассказ готов, его нужно отложить на дней 5-10 и забыть о нем, попытаться максимально не думать. Можно писать что-то другое. Когда пройдет какое-то время, рассказ придется прочитать очень много раз. И будьте готовы к тому, что каким бы идеальным он вам не показался, спустя какое-то время в нем, будто сами по себе, появятся огрехи в стиле и сюжете. Исправляйте штампы на оригинальные конструкции, вырезайте целые куски текста — лучше меньше, чем лишнее.

Ну и, конечно же, будьте добрее к себе. Первые произведения даже у самых гениальных писателей не блистательны. Главное — это проделанная работа и что второе произведение писать будет точно проще.

Попробуйте написать свой первый рассказ у нас на penfox

Новинки из жанра рассказ

Доктор Вронг1 молча сидел у окна и неторопливо пил кофе – чёрный, без сливок и сахара. Сидя в мягком, пушистом кресле, он принял самую удобную для себя позу и снял очки, дабы максимально…

Дата: 24.06.2020 От: Аластор Кому: Зельд Тема: — Знаешь, в последнее время одна мысль совершенно не дает мне покоя: не ошиблась ли я? Этот внутренний конфликт раз за разом самостоятельно уничтожает истоки своего…

Читайте также:
Что за формат csv и какой программой его открыть

С высоты птичьего полёта это место выглядело, как тёмное пятно на зелёном ковре леса. Но если крутануть объектив и приблизить картинку, то перед взором открывалась трагедия. — Током, током врежь! — кричали…

В мрачности заседал основной состав «Центра спасения фантастических существ» (в простонародье «цэсэсфэсэ»), да и как без мрачности? Тяжёлая вина на каждом. Ну хорошо, не на каждом, большая на Шефе «Центра», но он…

Клодин Эрне не улыбалась уже около семи лет. Нет, в этом не было бы ничего удивительного, ровно как и осуждающего, если бы не тот маленький факт, что Клодин Эрне было всего четырнадцать…

Источник: penfox.ru

Научно-исследовательская работа «Программирование. Создание скриптов!»

Языки программирования – является актуальной темой в IT индустрии. Они помогают реализовать разные виды задач и воплотить свои мысли в реальность. От простых мини-игр, до огромных проектов в IT индустрии. Поэтому я решил попробовать научиться программировать самостоятельно.

Новизна. На сегодняшний день существуют работы, посвященные теме программирования вообще. Однако я решил изучить эту тему намного глубже и создать свой язык программирования. В этом и заключается новизна моего исследования.

Цель исследовательской работы: изучение языков программирования, создание скриптов.

Задачи исследования:

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

Источник: eee-science.ru

Написание маленьких приложений на Borland C++ Builder

Натыкаясь в Интернете на довольно интересные программы, я часто не решался их закачивать после того, как узнавал их размер. Какую ни возьми — все огромные. Да и ресурсов системных потребляют немало. В этой статье я расскажу о том, как сделать программу в среднем в 10 — 100 раз меньше размером, чем попадаются аналогичные.

Цель

Написать очень быструю и маленькую программу, скрывающую по CTRL+F12 заданные окна. При нажатии комбинации CTRL+F10 она должна показать спрятанные окна. Входные данные:

TXT Файл вида ———— Internet Explorer The Bat! Visual C++ 911 ————

Если будут найдены окна, содержащие в своем заголовке указанные строки, они будут спрятаны.
В вышеуказанном примере будут спрятаны все окна IE, окно Microsoft Visual C++, окно почтовой программы «The Bat!» и все окна, в заголовках которых содержится комбинация символов «911».

Итак, писать будем на чистом Win32 API. Создадим окно, привяжем к нему горячие клавиши. По требованию будем осуществлять перебор видимых окон в системе и в заголовке каждого будем искать заданные комбинации символов.

Опции линкера

Если ничего не предпринимать, то нам не удастся получить в итоге файл менее 32 КБ(примерно). Поэтому пишем:

#pragma comment(linker,»/MERGE:.rdata=.text») #pragma comment(linker,»/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078″) #pragma comment(linker,»/ENTRY:New_WinMain») #pragma comment(linker,»/NODEFAULTLIB»)

На что теперь стоит обратить особое внимание? Обычно точка входа в программу выглядит так:

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szCmdLine,int nCmdShow)

(кстати, для Win32 приложений второй параметр всегда NULL)

Но(!). Так как мы отключили «Runtime library», нам теперь передается в этих параметрах разный мусор. Поэтому называем точку входа не WinMain а New_WinMain, которую объявим, как void New_WinMain(void), чтобы не забыть о том, что нам ничего не передается. А параметр HINSTANCE получаем функцией GetModuleHandle(NULL). Ах да, и выходить из программы будем функцией ExitProcess.

Теперь если собрать нашу пустую программку, которая ничего делать не будет, размер ее будет 1 Кб. Но нам нужно еще дописать 3 Кб кода. Продолжим.

Чтобы все дальнейшее было понятно даже новичку в программировании под Windows, я прокомментирую все.

Объявим кое-какие константы

Это понадобится для регистрации «горячих» клавиш функцией RegisterHotKey.

#define HOTKEYHIDE 1 #define HOTKEYSHOW 2

Размер буффера, куда будет считываться заголовок окна функцией GetWindowText.

#define SSZZ 256

Размер буфера, куда будет считываться файл со стоками фильтрации (используется в объявлении char FilterStrings[MAXFIL];)

#define MAXFIL 1024

(Примечание: При желании можно сделать и выделение памяти динамически — найти файл, узнать его размер и выделить блок. Приблизительный пример:

// . WIN32_FIND_DATA FindData; HANDLE hFind=FindFirstFile(szFilterStringsFile, if (hFind!=INVALID_HANDLE_VALUE) < i=(FindData.nFileSizeHigh * MAXDWORD) + FindData.nFileSizeLow; HGLOBAL hGA=GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE,i+1); // (+ end-ZERO) if (hGA!=NULL) < LPVOID lpStrings=GlobalLock(hGA); DWORD dw; if (lpStrings!=NULL) ReadFile(hFile,lpStrings,i, >> FindClose(hFind); CloseHandle(hFile); // . // Но так как вряд ли файл настроек у нас будет больше одного // килобайта, я оставил статичный массив. )

Зададим глобальные переменные

Массив хендлов окон (вряд ли будет у нас более 300 окон)

HWND aHwnd[300];

Кол-во инициализированных элементов в этом массиве

unsigned int cHwnd=0;

Дескрипторы окон — главное и два дочерних — кнопка «Hide» и кнопка «Edit filter strings»

HWND hwndMain, hwndButtonHide, hwndButtonEditFilter;

Тут будет что-то типа «c:programswinhiderwinhider.settings.txt»

char szFilterStringsFile[MAX_PATH]=»(с)2002 KMiNT21″;

Соответственно, хендл файла с именем «что-то типа»

HANDLE hFile;

А это место, куда будем считывать все из этого файла

char FilterStrings[MAXFIL];

Функции

Обработка сообщений главного окна

LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);

Функция, которая будет вызываться для каждого окна при переборе всех окон

static BOOL FAR PASCAL my_EnumWindowsProc(HWND hwnd, DWORD lParam);

Проверка наличия строки str2 в str1

BOOL Contain(char* str1, char* str2);

Скрывание с экрана очередного окна

inline void HideNext(HWND hwnd)

Читайте также:
Лучшие программы для скачивания торрентов для Андроид

Возврат всех спрятанных окон на экран

inline void ShowAll(void)

Пройдемся по главным строкам функции NewWinMain

* Получим INSTANCE модуля. Это нам нужно для регистрации оконного класса

HINSTANCE hInst=GetModuleHandle(NULL);

* Зарегистрируем оконный класс

WNDCLASS wc; wc.style = CS_HREDRAW|CS_VREDRAW ; wc.lpfnWndProc = (WNDPROC)MainWndProc; wc.hInstance = hInst; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW); wc.lpszClassName = «CKMINT21WINDOWSHIDERPRO»; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.lpszMenuName=NULL; wc.cbClsExtra=0; wc.cbWndExtra=0; if (!RegisterClass(I can’t register window class.»,»Error:»,0), ExitProcess(0);

Создаем главное окно приложения

hwndMain=CreateWindow(wc.lpszClassName,»Small windows hider!», WS_BORDER|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX, CW_USEDEFAULT,0,291,180, NULL, NULL, hInst, NULL);

И помещаем на него две кнопки. Как видим, кнопки имеют класс «BUTTON». Они являются дочерними окну hwndMain.

hwndButtonHide=CreateWindow(«BUTTON»,»Hide!», WS_VISIBLE | WS_CHILD, 10,10,261,90, hwndMain, NULL, hInst, NULL); ShowWindow(hwndButtonHide,SW_SHOW), UpdateWindow(hwndButtonHide); hwndButtonEditFilter=CreateWindow(«BUTTON»,»Edit filters», WS_VISIBLE|WS_CHILD|WS_BORDER|WS_TABSTOP , 10,110,261,30, hwndMain, NULL, hInst, NULL); ShowWindow(hwndButtonEditFilter,SW_SHOW), UpdateWindow(hwndButtonEditFilter);

Наконец, показываем главное окно

ShowWindow(hwndMain,SW_SHOW), UpdateWindow(hwndMain);

Примечание: Так как кто-то этого может не знать, хочу отметить, что в языке С++ есть «операция следования» — запятая. Т.е. просто последовательно выполнятся обе функции ShowWindow и UpdateWindow (как отдельный блок). В вышеуказанной строке можно было бы и просто поставить «;», а вообще иногда это помогает избавиться от огромного количества фигурных скобок <>, в тексте программы.

* Затем регистрируем в системе HotKeys. Они будут привязаны к главному окну, которому будут передаватся сообщения WM_HOTKEY.

RegisterHotKey(hwndMain,HOTKEYHIDE,MOD_CONTROL,VK_F12) RegisterHotKey(hwndMain,HOTKEYSHOW,MOD_CONTROL,VK_F10)

Затем считываем настройки из файла и запускаем главный цикл обработки оконных сообщений для текущего процесса.

MSG msg; while(GetMessage(msg), DispatchMessage(

Оконная процедура

// Тут все довольно стандартно. Делаем switch (msg). // . case WM_HOTKEY: if (HOTKEYSHOW == (int)wParam) // показываем все, что мы до этого прятали, а так же главное // окно программы ShowAll(), ShowWindow(hwnd,SW_SHOW); if (HOTKEYHIDE == (int)wParam) // Скрываем наше главное окно и запускаем перебор всех окон в // системе — EnumWindows.

Теперь будет вызываться функция // my_EnumWindowsProc для каждого обнаруженного в системе окна. ShowWindow(hwnd,SW_HIDE), EnumWindows((int (__stdcall *)(struct HWND__ *,long))my_EnumWindowsProc, 0); break; // . // Если программу пытаются минимизировать, просто скрываем ее // . case WM_SYSCOMMAND: if(SC_MINIMIZE == wParam) < ShowWindow(hwnd,SW_HIDE); return 0; >break; // Внимание, после ShowWindow(hwnd,SW_HIDE) мы пишем return 0, // вместо break. Почему?

Да потому что не хотим, чтобы это // сообщение пошло дальше в систему. Мы его уже обработали // по-своему. // . // А затем обрабатываем нажатия на кнопки. case BN_CLICKED: if (hwndButtonHide==(HWND)lParam)ShowWindow(hwndMain,SW_HIDE); if (hwndButtonEditFilter==(HWND)lParam)ShellExecute(NULL,»open», szFilterStringsFile,NULL,NULL,SW_SHOWMAXIMIZED); break;

Рассмотрим функцию my_EnumWindowsProc

Пропустим все невидимые окна

if (!IsWindowVisible(hwnd)) return TRUE;

Получим TITLE очередного окна

GetWindowText(hwnd, szWindowsTitle, SSZZ)

Затем перебираем все стоки из файла настроек

for(i=0;i// если это начало строки, то < if (Contain(szWindowsTitle, FilterStrings+i)) HideNext(hwnd); // скроем окно, если эта строка содержится в szWindowsTitle while(FilterStrings[i]) i++; // сместим указатель на следующий 0 >

Продолжаем дальнейший перебор окон

return TRUE;

(Если бы было return FALSE, перебор бы закончился.)

В остальных функциях особо описывать нечего.

FAQ, возникший в результате множества заданных мне вопросов.

Q: Почему программа не линкуется?

A: Попробуйте собрать не debug, а release версию. А если вам нужна возможность отладки, воспользуйтесь обычными #define. И все-таки есть еще одни вариант. В отладочной версии линкер не может собрать файл потому, что не находит «__chkesp», которая содержится в «CHKESP.OBJ». Что мы можем сделать?

Да взять и заменить тот obj на свой, который будет меньше размером и не будет содержать ненужный нам код.

Q: Как теперь получить переданную командную строку?

A: Ну тут все просто. Пользуйтесь стандартными API. То же самое и для Instance приложения. Вот они — GetCommandLine, GetModuleHandle.

Q: А какой минимальный align возможен?

A: Для того, чтобы ваша программа запускалась нормально в любой версии Windows, используйте 512 байт.

Q: А можно ли делать такими маленькими DLL?

A: Да. Назначьте свою точку входа вместо _DllMainCRTStartup. Вот пример.

Q: А почему пропали функции strcmp, strlen и т.п.?

A: Так как они были реализованы в RTL, теперь вы не можете их использовать. Но это не беда. В модуле kernel есть отличная замена этим функциям. Названия те же, но с буквой «l» вначале. Например — lstrlen, lstrcmp, lstrcat.

Q: А теперь стали недоступны функции работы с памятью — memset, CopyMemory?

A: RTL сам предоставляет интефейс для работы с памятью. Во-первых, чтобы соблюдать снандарт, во-вторых, чтобы упростить работу с памятью в среде Win32. Вот посмотрите на функцию CopyMemory — она на самом деле не является настоящей API функцией. Попробуйте слинковать проект без RTL, в котором используется эта функция. Результат — неудачная попытка линковки — ссылка на _memcpy.

Еще один пример — функция new. В среде Win32 вы должы воспользоваться функциями GlobalAlloc, GlobalLoc и т.п. Однако вы можете просто заменить RTL функции своими. В файле add.txt вы можете взять уже готовые функции, если не хотите писать их сами.

Q: У меня есть один вопрос, которого нет в этом FAQ, что делать?

A: В таком случае вы можете задать вопрос на нашем форуме. www.uinc.ru/forum/

  • Пример написания микро-DLL — dll.zip.
  • Набор c++ функций, которыми можно заменить RTL аналоги — add.txt.
  • Постоянное место статьи: http://www.uinc.ru/articles/28/index.shtml
  • Программа «Windows Hider Pro»,примерный скелет которой был тут приведен.
  • Вскоре после выхода этого документа мне на глаза попалась статья на эту же тему.

Источник: codenet.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru