Обычные люди не обязаны учить стоп‑слова и вникать в синтаксис. Им просто нужно писать: письма, объявления, коммерческие предложения и пресс‑релизы. Представляем электронное руководство и сборник шаблонов для тех, кто не занимается текстом профессионально.
В новом руководстве собраны шаблоны текста, которые пригодятся на работе и в жизни: письмо, резюме, коммерческое предложение, объявление, новость на сайте и пресс‑релиз для СМИ . Осталось заполнить шаблон и учесть тонкости.
Руководство также можно рассматривать как практическое приложение к учебнику «Информационный стиль». Руководство не касается вопросов профессиональной редактуры, не вводит новых теоретических понятий и не заставляет учить правила — только шаблоны и примеры текста для рабочих ситуаций.
Учебник «Информационный стиль» доступен по подписке отдельно или вместе с подпиской на полку.
Ректор Школы редакторов, создатель сервиса «Главред»
КПД ❔
4 дизайнеру, 8 редактору, 4 руководителю
Оглавление
Объявление
Резюме и отклик на вакансию
Письмо по работе
Коммерческое предложение
Анонс и приглашение на событие
Урок Python для новичков, пишем 2 легкие программы
Новость для сайта
Пресс‑релиз для СМИ
Промостраница
Статья для блога
В бюро радикально переосмыслили формат электронной книги
В бюро радикально переосмыслили формат электронной книги
Было
Существующие «е‑буки» далеки от высоких издательских стандартов оформления, неудобны для навигации и поиска. Типографика не выдерживает критики, причём шрифты и вёрстка неконтролируемы авторами и издателями. Книги случайно разбиты на экранные страницы — сколько ни открывай, одна и та же иллюстрация может оказаться наверху, внизу или даже на следующей странице. На планшете страницы сбиваются от случайного поворота устройства.
Стало
Бюрошная экранная книга соединяет удобство прокрутки и наглядность бумажной книги. Она поделена на развороты, которые можно прокрутить от начала до конца. Текст на развороте прокручивается, когда это необходимо, а иллюстрации сохраняют положение на экране. Читателю легко запомнить место и позднее вернуться к материалу. Разворот — смысловая единица, а не результат математического деления книги на «экраны».
Готовые шаблоны текста
В книге приведены шаблоны текста разных жанров: объявлений, писем, коммерческих предложений, статей и рекламы. Каждая часть шаблона объяснена: что здесь писать, какого эффекта добиваться и чего избегать.
Бланк полезного действия
К шаблонам текста привязаны бланки полезного действия. В них мы анализируем, кому мы пишем, зачем и каким способом будем достигать цели. Заполненный бланк полезного действия помогает заполнить шаблон и получить убедительный текст.
Книга разделена на развороты. Каждый разворот состоит из рассказа и интерактивных примеров
По удобству чтения на простых мониторах книга приближается к бумажной, а на «ретине» её читать ещё удобнее и приятнее
По удобству чтения на простых мониторах книга приближается к бумажной, а на «ретине» её читать ещё удобнее и приятнее
Как создать программу «ЧАСЫ» в блокноте
Книга разделена на развороты. Каждый разворот состоит из рассказа и интерактивных примеров
Книга разделена на развороты. Каждый разворот состоит из рассказа и интерактивных примеров
Справочник
«Как написать» — настольная книга для всех, кто пишет. Найдите нужный шаблон и составьте текст, не погружаясь в теорию. Возвращайтесь к руководству с каждой новой текстовой задачей.
К книге удобно обращаться за шаблонами текста во время работы
Редактор находит нужный пример в закладках, иллюстрированном оглавлении или поиске
Редактор находит нужный пример в закладках, иллюстрированном оглавлении или поиске
К книге удобно обращаться за шаблонами текста во время работы
К книге удобно обращаться за шаблонами текста во время работы
Шаблоны. шаблоны кругом
Было бы странно, если бы в книге шаблонов не было шаблонов. Чтобы эффектно представлять шаблоны, для книги созданы новые форматы и интерактивные элементы.
Обращение автора
В декабре 2017 года в Издательстве бюро был почти готов учебник «Информационный стиль». Оставалась последняя глава «Как написать» — в ней я собирался показать несколько готовых шаблонов текста, чтобы в конце учебника получилась небольшая практическая глава, разворотов на пятнадцать.
Когда в последней главе собралось двадцать разворотов, а я не дошёл даже до трети содержания, стало понятно, что «Как написать» станет отдельной книгой. Для неё нужны были новые шаблоны представления текста, новый дизайн, новые способы подачи. Я пошёл с этим к Артёму, он поддержал.
Руководство «Как написать» — это поваренная книга для тех, кто не готов вникать в теорию редактуры. Вся теория и идеология приведены в большом электронном учебнике, а в «Как написать» остались готовые решения, шаблоны и короткие пути. Открывай, находи нужное и переписывай.
Практическая работа № 12
«Моделирование работы процессора»
Для выполнения этих работ используется учебный компьютер «ЛамПанель», который можно загрузить со страницы https://kpolyakov.spb.ru/prog/lamp.htm.
Возможности программы «ЛамПанель»
Программа «ЛамПанель» – это модель процессора, который управляет ламповой панелью, то есть, может с помощью специальных команд зажигать и гасить определенные лампочки.
3 – отладчик
4 – оперативная память
Коды в памяти
Память (область 4) разбита на ячейки размером 1 байт = 8 бит. Значение каждой ячейки записывается в виде двух шестнадцатеричных цифр – каждая из них кодируется ровно четырьмя битами.
Каждая строчка в окне 4 содержит 8 байт памяти. Число слева, выделенное красным цветом – это адрес (номер) первой ячейки, показанной в этой строке. Справа от шестнадцатеричных кодов показана символьная строка из 8 символов – те же данные, только представленные как символы.
Данные можно записывать в память напрямую, используя команду DATA, например, можно набрать такую программу:
DATA 3132
DATA FFFF
Если теперь нажать клавиши Ctrl+F9, происходит ассемблирование («сборка») – перевод программы в машинные коды, затем эти коды записываются в память:
Посмотрим на окно отладчика. Каждый байт памяти имеет собственный адрес, адреса соседних байтов отличаются на единицу. Однако байтовые ячейки, как правило, слишком малы для хранения чисел (как целых, так и дробных) и машинных команд. Поэтому процессор должен уметь работать с более крупными блоками данных, которые часто называют машинными словами. Программа «ЛамПанель» умеет работать с 16-битными словами, то есть может сразу читать из памяти (в регистр) и записывать в память двухбайтный блок.
Любая машинная команда состоит из целого числа 16-битных слов, то есть из четного числа байтов. По договоренности адресом двухбайтового слова считается меньший из адресов входя-щих в него байтов, причем адрес этот обязательно должен быть четным.
В нашем случае память записаны два 16-битных слова (4 байта), 313216 и FFFF16, причем эти слова процессор распознал как две команды:
MOV R3,R2
STOP
Такой перевод из кодов команд в их символьное обозначение называется дизассемблирование (обратное ассемблирование, «разборка»).
Эту программу можно запустить, нажав на клавишу F9, и убедиться, что она действительно скопирует содержимое регистра R3 в регистр R2.
Теперь посмотрим на окно «Память»:
Видим, что байты 16-битного слова расположены «наоборот» – сначала младший байт 3216, а затем – старший 3116. Кроме того, в правой части окна видно, что эти коды соответствуют символам «21яя». Все специальные коды (не соответствующие каким-то принятым изображениям символов) обозначены точками. Таким образом, компьютер, основанный на архитектуре фон Неймана, не может самостоятельно различить, где данные, а где команды.
Выполнение программы
Теперь выполним программу в пошаговом режиме, нажав на клавишу F8. После этого в регистр PC (англ. program counter – программный счётчик) записывается стартовый адрес 0, с которого начинается выполнение программы. В окне Отладчик зелёным цветом выделена первая команда. Она еще не выполнялась, но будет выполнена при повторном нажатии F8. При этом регистр PC, будет указывать на начало следующей команды (которая еще не выполнялось).
Таким образом:
• регистр PC содержит адрес команды, которая будет выполнена следующей; как только эта команда будет выбрана из памяти, регистр-счетчик автоматически будет увеличен так, чтобы снова указывать на очередную команду;
• процессор воспринимает байты, расположенные по этому адресу, как код команды (а не как данные);
• программа всегда начинает выполняться с некоторого известного (в данном случае – нулевого) адреса, который «вшит» в компьютер и автоматически заносится в регистр PC при его включении;
• программа останавливается, когда будет выполнена команда STOP с кодом FFFF16.
Заметим, что команды, содержащие числовые данные, могут занимать в памяти два 16-битных слова, например:
Работа с памятью
Для того, чтобы обрабатывать данные из оперативной памяти, процессор должен загрузить их в регистры. Поскольку программа и данные расположены в одной области памяти, размещать данные можно сразу после команды STOP:
Метка D нужна для того, чтобы удобно было загружать адрес блока данных в регистр, например, так:
Можно считать, что D – это переменная программы. После этого легко загрузить в регистр данные из памяти:
MOV (R0),R1 ; загрузить в R1 данные, адрес которых записан в R0
Аналогичной командой можно изменить содержимое ячейки памяти:
MOV R2,(R0) ; записать данные из R2 в ячейку, адрес которой ; записан в R0
Заметим, что с помощью этого метода можно сразу обратиться к любой ячейке памяти, поэтому такой вид памяти называется память с произвольным доступом (англ. RAM = random access memory).
Обработка отдельных байтов
Как вы знаете, минимальная ячейка памяти, имеющая собственный адрес, называется байтом. В современных компьютерах 1 байт составляют 8 бит. Поэтому компьютер должен иметь возможность работать не только с 16-битными словами, но и с отдельными байтами.
Во-первых, в команде DATA можно задавать не только шестнадцатеричные числа, но и символьные строки, взятые в кавычки.
В этом случае символы заданной строки записываются в память последовательно, начиная с первого. Теперь запишем адрес строки в регистр в какой-нибудь регистр, например, в R0:
Чтобы работать с отдельными байтами, используют байтовые версии команд, которые заканчиваются на букву B. Например, байтовый вариант команды MOV называется MOVB. Команда
загружает один байт из памяти (расположенный по адресу, который записан в R0) в регистр R2. Теперь рассмотрим такую задачу – преобразовать все заглавные латинские буквы в строчные. Для этого нужно посмотреть, чем отличаются коды заглавных и строчных букв:
Оказывается, коды заглавных и соответствующих строчных букв отличаются одним битом (этот пятый бит выделен желтым фоном). Поэтому для того, чтобы получить из заглавной буквы строчную букву, нужно установить 5-й бит (сделать его равным 1). Для этого можно, например, использовать логическую операцию «ИЛИ» с маской 002016, в которой 5-й бит установлен, а остальные – сброшены:
Затем нужно записать результат обратно в память, по адресу, находящемуся в R0:
Для перехода к следующему символу просто увеличиваем R0 на единицу
и выполняем те же самые команды. Отметим, что две команды
MOVB R2,(R0) ; записать байт в память
ADD 1,R0 ; к следующему байту
можно заменить на одну, которая делает то же самое:
MOVB R2,(R0)+ ; записать байт в память и перейти
; к следующему байту
Чтобы обработать 6 символов, можно организовать цикл со счётчиком в регистре R1:
MOV 6,R1 ; счётчик шагов цикла (сделать 6 раз)
MOVB (R0),R2 ; прочитать байт из памяти
OR 20,R2 ; заглавную – в строчную
MOVB R2,(R0)+ ; записать байт в память и перейти к следующему
SUB 1,R1 ; уменьшить счетчик
JNZ M ; если не все сделали – переход на метку M
Задание на практическую работу
1. Запустите тренажёр «ЛамПанель». Введите программу
Используя дизассемблер программы «ЛамПанель», запишите эту программу на языке ассемблера:
Запишите код команды STOP:
Запишите содержимое памяти, в которой располагается эта программы, в виде последовательности символов:
2. Как вы думаете, какой код будет иметь команда MOV R1,R3? Проверьте свой ответ с помощью программы.
3. Блок данных программы выглядит так.
Напишите программу, которая складывает переменные A и B и записывает результат в переменную SUM:
4. Напишите программу, которая преобразует строчные буквы в заглавные, используя байтовые операции. Блок данных может выглядеть так:
5. Усовершенствуйте программу так, чтобы цикл останавливался не после заданного количества букв, а тогда, когда очередной прочитанный байт равен 0. Возможно, вам понадобятся другие команды условного или безусловного перехода – изучите их по справочной системе (клавиша F1).
6. Поскольку в компьютере с архитектурой фон Неймана программа и данные расположены в одной области памяти, программа может менять свой собственный код. Напишите какую-нибудь программу, которая изменяет сама себя во время работы.
Источник: xn—-7sbbfb7a7aej.xn--p1ai
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
Калькулятор C# в консоли
В данном уроке опять создадим простенький калькулятор на языке C#, но в этот раз будем работать в консоли.
Калькуляторы на Windows Forms можно посмотреть здесь и здесь.
Данный калькулятор абсолютно элементарен и требует минимальных знаний языка. Создаём проект («Файл» ->»Создать»->»Проект»->»Консольное приложение») и объявляем наши переменные:
double total ;
Double — это тип переменной с плавающей запятой, иными словами, тип, в который можно записать десятичные числа, причём довольно большие. В него поместится как значение 5, так и значение 5,45, и даже значение 5,4571601695, также в нём можно использовать и отрицательные числа.
В переменную a мы внесём первое число, которое запишет пользователь. В переменную b — второе число. А переменная total будет выводить результат математических операций с переменными а и b.
Char — это тип переменной в виде какого-либо символа, будь то буква, цифра или какой-нибудь знак. В переменную oper мы будем заносить знак математической операции над числами. В нашем калькуляторе будут только самые основные — «+», «-«, «*» и «/».
Итак, мы объявили переменные, теперь нам надо узнать, что конкретно нужно посчитать пользователю, а для этого придётся считывать данные, которые он будет вводить:
Console . WriteLine ( «Введите первое число:» ) ;
a = Convert . ToDouble ( Console . ReadLine ( ) ) ;
Console . WriteLine ( «Введите оператор:» ) ;
oper = Convert . ToChar ( Console . ReadLine ( ) ) ;
Console . WriteLine ( «Введите второе число:» ) ;
b = Convert . ToDouble ( Console . ReadLine ( ) ) ;
Сначала мы выводим на консоль надпись о том, чтобы пользователь ввёл первое число.
В следующей строке мы присваиваем переменной a введенное пользователем число, но при этом не забываем, что введенные пользователем данные всегда имеют строковой формат string, а так как у нашей переменной тип double, то надо отконвертировать string в double соответствующим методом Convert.
Примерно то же самое мы проделываем с переменной oper, но конвертируем string уже не в double, а в char, потому что переменная oper имеет такой тип данных.
Точно то же самое, что было с переменной a проделываем и с переменной b, так как они одинакового типа.
Числа получены. Но пока неизвестно, как ими оперировать, так как главное для нас — узнать что за знак скрывается в переменной oper, и уже исходя из этого, производить операции над числами:
total = a + b ;
Console . WriteLine ( «Cумма » + a + » и » + b + » равна » + total + «.» ) ;
else if ( oper == ‘-‘ )
total = a — b ;
Console . WriteLine ( «Разность » + a + » и » + b + » равна » + total + «.» ) ;
else if ( oper == ‘*’ )
total = a * b ;
Console . WriteLine ( «Умножение » + a + » на » + b + » равно » + total + «.» ) ;
else if ( oper == ‘/’ )
total = a / b ;
Console . WriteLine ( «Деление » + a + » на » + b + » равно » + total + «.» ) ;
Console . WriteLine ( «Неизвестный оператор.» ) ;
Для этого мы используем оператор условия if (если).
Первая строка звучит примерно так: если в переменной oper записан знак «+», то..
..мы присваиваем переменной total сумму переменных a и b и выводим ответ на экран. В кавычках записаны слова, которые выводятся на экран, а переменные, расположившиеся среди плюсов выводят свои значения. Пример такого ответа выглядит вот так:
По подобию первого условия мы создаём остальные, используя операторы else if (так положено семантически, если для алгоритма необходимы какие-либо условия. Если условия не необходимы, то можно использовать оператор else, как написано ниже).