^Back To Top
foto1 foto2 foto3 foto4 foto5 foto6 foto7 foto8 foto9 foto10 foto11 foto12 foto13 foto14 foto15 foto16 foto17 foto18 foto19 foto20 foto19

 

 

C++  для   Ch--

 

..... В переводе на нормальный язык этот заголовок звучит так:

Язык программирования С++ для Дремучих Чайников

..... При составлении этого заголовка я воспользовался опытом журналистов, переводивших в свое время на английский язык хрущевскую «кузькину мать», и перевел дремучий чайник как Ch--. Непонятно, но красиво!

..... А все дело в том, что для написания на языке С++ простой фразы «Привет, Мир» я по мнению Стефана Дэвиса, автора учебника для начинающих, должен знать, по крайней мере, несколько десятков тонкостей вроде этой:

«Программисты предпочитают представлять числа блоками из четырех битов,
поскольку основа двоичной системы счисления очень мала и для представления
чисел необходимо использовать слишком большое количество битов»

И чем дальше в лес, тем больше «блоков из четырех битов».

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

«Знает, если сможет на пальцах объяснить её суть своей секретарше».

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

Терминатор

..... Начнём изучение языка С++ с угрозы терминатора разработчикам не русифицированного компилятора. Попутно cделаем научное открытие: вода закипает при 1.745 радиан!

.....Спешим обрадовать россиян, что 2019-й год имеет два делителя 3 и 673 и только 2027-й год будет простым!

..... Популярно докажем, что жёны Абдуллы из кинофильма «Белое солнце пустыни» - это символьные переменные. Составим специальную программу на С++ и дадим совет Абдулле, как выбирать подругу на ночь.


 

Программа с угрозой терминатора

 

 

..... Чтобы что-то написать на языке С++ надо загрузить программу, которая понимает этот язык. Такие программы называют компиляторами. Можно пользоваться любым компилятором. Исторически сложилось так, что я использую ОС Windows 7, а в качестве компилятора - Visual Studio 2010. В настоящее время эта программа бесплатная.

Информация к размышлению.  Интегрированная среда разработки программного обеспечения 
Visual Studio 2010 пригодна для компилятора языка программирования С++ в ОС Windows 7.
Однако в ОС Windows 10 она не работает!
Если у вас «десятка», то рекомендую воспользоваться Visual Studio 2017 Enterprise.

Дистрибутивы соответствующих компиляторов легко найти в Интернете.
VS 2010 закачивается и устанавливается долго и нудно, но без проблем!
VS 2017 предлагает множество пакетов, из которых выбираем один -       
«Разработка классических приложений на С++». Ставим галочку и вперёд!
Установка также проходит без проблем и занимает около 30 минут.

..... Любой компилятор языка С++ создает файл с расширением  *cpp, куда записывается соответствующая программа. На Visual Studio открываем начальную страницу и выбираем:

Создать проект  —>   Консольное приложение CLR (windows) —>  Вводим имя «text» —> OK
Открывается файл  text.cpp

..... В этом файле стираем все кроме первой команды

 

С этой команды прямо сейчас начнем программирование на языке С++!

..... Создатели С++ построили язык по определённому принципу. Хотите научиться складывать и умножать? Идите в математическую библиотеку за соответствующим учебником. Хотите что-нибудь нарисовать? Сходите в художественную библиотеку за учебником по рисованию и т. д. Такое «хождение по библиотекам» в С++ осуществляется командами #include, которые называются директивами. Они открывают те библиотеки, которые будут использованы в программе.

..... Итак, первая команда в файле text.cpp открывает возможности Visual Studio. Поскольку мы будем выводить текст на экран, добавляем еще одну директиву и строку:

 

..... Зачем дополнительная строка? Не надо этим забивать голову, иначе запутаетесь «в блоках из четырех битов». Если хотите разобраться в тонкостях, то честь вам и хвала! Открывайте учебник и вперёд!

..... Остальные команды С++ объединяются в функции, которым передается управление после открытия библиотек. Программа «text» содержит одну функцию main, которая выглядит так:

 

..... Внутрь фигурных скобок помещаем тело программы - команды, которые будут выполнены. Приставка  void и круглые скобки обязательны и в таком виде они нас пока устраивают. По причине комплекса «блока из четырех битов» подробности опускаем. Займемся фигурными скобками.

..... Компьютер выполняет команды, которые записываются в виде операторов. Нам нужно создать экран и на нем что-то написать. Для этого в С++ существует оператор cout (создание экрана) и оператор <<". . .", который выводит на экран выражение между кавычками. В конце обычно ставят оператор окончания строки << endl (чтобы следующая надпись начиналась с новой строки).

..... Хотя VS 2010 русифицирована, к сожалению, в С++ она «не говорит по-русски». Поэтому пошлем создателям этого компилятора угрозу на чистейшем английском языке устами терминатора. В этом случае команда будет выглядеть так:

 

..... После написания команд надо сказать компьютеру «Запомни это, дружище!» или «Запоминай, козёл!». Эмоций он не поймет, но смысл этих фраз передается обязательной  точкой с запятой.

..... Есть еще одна тонкость. Возможно создатели языка С++ решили кого-то перехитрить и сделали так, что оператор cout выводит экран только на секунду и сразу закрывает. Чтобы его зафиксировать, приходится использовать команду фиксации экрана:

 

..... Программу в С++ принято «разложить по полочкам». Начинается она шапкой - столбиком, состоящим из директив для открытия библиотек. Далее пропускаем строку и помещаем функцию с угрозой терминатора. Для большей наглядности фигурные скобки функции выносят на отдельные строки, а внутри по строкам записывают команды, которые надо выполнить. Вот как выглядит программа «text»:

 

..... Помещаем эту программу в файл text.cpp компилятора, нажимаем соответствующую кнопку для ее выполнения (в Visual Studio этой кнопкой будет F5) и получаем следующий результат:

..... Просто и понятно без всяких «блоков из четырех битов».

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


 

C++  для   Ch--

 

 

Юмор в С++: точка кипения воды в радианах

 

..... Усложним нашу программу, введя в нее какие-нибудь формулы. Для этого подключаем математическую библиотеку, добавив в «шапку» программы еще одну директиву:

 

..... Теперь можно пользоваться тригонометрическими функциями: sin(x), tg(x); корнем квадратным: sqrt(x); натуральным логарифмом log(x) и т.д. Упомяну еще одну функцию (пригодится в дальнейшем), которая вычисляет остаток от деления x на y, а именно: fmod(x,y). Эти элементарные математические функции записывают в виде перечисленных операторов.

 

Арифметика переменных

..... Разработчики языка программирования С++ придумали для каждой переменной «особый статус» (или «тип»). Для целочисленных переменных предназначен статус int, а для десятичных дробей используют статус double. Информация о статусе обычно декларируется в строке объявления переменных, расположенной после пропуска строки под шапкой программы:

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

Информация к размышлению. Иногда для экономии памяти компьютера используют
укороченный вариант статуса double, который именуется float.

 

Арифметические действия

..... Четыре арифметических действия в С++ обозначаются так:

 

*,   /,   +,   -     умножить, разделить, сложить, вычесть.

 

..... Значки расположены с учетом математического приоритета. Например, в выражении a*b+с компьютер сначала перемножит, а потом сложит. Чтобы сделать наоборот, в С++ используют круглые скобки. Если записать a*(b+с), то компьютер сначала сложит, а затем умножит.

..... В выражении для переменной статуса int должны быть только целые числа (например 2 или 102)! Для переменной статуса double все числа должны быть «с запятой» (например, те же целые числа записываются в виде 2.0 и 102.0). Иначе компьютер может выдать неверный результат (лучше следовать этому правилу!).

 

Тело программы

..... Составить программу - значит поместить между фигурными скобками функции void main( ){ } выражения для объявленных переменных x , y, z и t .

..... Начнем с проверки таблицы умножения, присвоив переменной x значение «дважды два». Вот выражения в обычной записи и на языке С++:

 

..... В переменную y поместим значение синуса 90 градусов.

..... Скорее всего создатели С++ знали студенческий анекдот, как лектор рассказывал студентам о взрыве атомной бомбы. Он говорил: "... а если учесть, что вода закипает при 90 градусах ..." Но тут студенты его поправляют: вода закипает при 100 градусах! На что он отвечает: "Вы правы, вода закипает при 100 градусах, а 90 градусов - это прямой угол." Возможно, именно по этой причине создатели С++ перевели градусы в радианы.

..... Итак, вот выражения синуса 90 градусов в обычной записи и на языке С++:

 

..... А теперь продолжим студенческий анекдот и присвоим переменной t температуру кипения воды в радианах:

..... Переменной z присвоим значение следующего выражения:

..... Все подобные математические формулы нетрудно перевести на язык С++. Надо только соблюдать приоритет арифметических действий. Для этого можно вводить сколько угодно круглых скобок. Только обязательно следите за тем, чтобы количество открывающих и закрывающих скобок было одинаковым!

..... Осталось вывести результаты на экран. Новизна состоит в том, что выводится не только фраза, но и содержимое переменных. Например, чтобы вывести значение переменной x, надо записать :

..... Пришло время «ликвидировать безграмотность» компьютера - научить его русскому языку. Поместим в фигурные скобки функции main следующий оператор русификации:

..... Теперь команды вывода результатов на экран можно записать в виде:

..... Не забудем оператором cin.get() зафиксировать экран, а то он мелькнет и исчезнет.

 

Программа calc и результаты расчетов

..... Создаём новый проект calc от английского calculation - вычисление с файлом calc.cpp. Заносим в него программу «text», добавляем рассмотренные операторы, и новая программа готова (угрозу терминатора на всякий случай оставляем!). Вот схема программы «calc», которая является простейшей на языке С++.

 

Простейшая схема

..... В Шапке перечислены директивы для открытия используемых библиотек.

..... В Строке объявления переменных указан статус переменных. Если необходимо, им можно присвоить соответствующие значения.

..... Выражение в фигурных скобках функции main начинается оператором русификации текста (setlocale) и заканчивается оператором фиксации экрана (cin.get). Между ними расположено Тело программы, в котором запрограммировано решение поставленной задачи.

..... А вот как программа «calc» выглядит в файле calc.cpp:

..... Нажимаем F5 и получаем результат:

..... Чтобы достичь такой красивой картинки из чисел и слов, надо правильно расположить пробелы внутри кавычек в операторе cout.

..... Попутно мы сделали открытие в науке, а именно: «Вода закипает при 1.745 радиан!»


 

C++  для   Ch--

 

 

Циклы и условные операторы.
Чем дальше в дремучий лес, тем больше дремучих дров

 

..... Задача. Написать программу на языке С++ для нахождения всех делителей целого числа n.

..... Решение. Очень важно в самом начале составить план программы (алгоритм). Для данной задачи он состоит из двух шагов.
...............1-й шаг: находим остатки от деления n на все числа от 2 до n-1.
...............2-й шаг: проверяем равенство остатков нулю и выводим информацию на экран.

..... Создадим новый проект divi от английского divider - делитель с файлом divi.cpp. Шапка у этой программы такая же, как у программы «calc». Строка объявления переменных обычно формируется при составлении тела программы в зависимости от использованных переменных.

 

Тело программы

.....  Оператор цикла. 1-й шаг. Воспользуемся оператором цикла for, который зависит от трех параметров в круглых скобках и выполняет то, что записано в фигурных скобках:

..... Первый параметр задает начальное значение счетчика цикла i=2 (i у нас - делитель, деление начинаем с числа 2). Второй - ограничивает его изменение: i должно быть меньше n (перебираем возможные делители от 2 до n-1). i++ задает единичный шаг цикла (каждый следующий делитель больше предыдущего на 1).

..... Статус int переменной i можно объявить «не отходя от кассы» внутри цикла. Однако тогда в силу «близорукости» языка С++ она не будет видна вне цикла. Если необходимо чтобы переменная была видна во всей программе, её следует внести в строку объявления переменных!

..... А компьютеру мы говорим: запомни начало и конец цикла, дружище (информация передается точками с запятой!), а шаг цикла сам запомнится (точка с запятой отсутствует!).

..... Внутрь фигурных скобок помещаем оператор double z = fmod (n, i), который вычисляет остаток z от деления n на i. Стандартная функция fmod из математической библиотеки требует, чтобы переменные z и n имели статус double. Вне цикла переменная z не понадобится, поэтому объявляем её «не отходя от кассы», и оператор цикла примет вид:

..... Итак, внутри оператора цикла вычисляем все остатки от деления n на i = 2, 3, ... , n-1. Числа i, при которых остаток z равен нулю, будут искомыми делителями числа n, поэтому вместо многоточия надо будет поместить команду, которая фильтрует остатки и выдаёт делители на экран. Это делается на 2-ом шаге при помощи условного оператора.

 

..... Условный оператор. 2-й шаг. Проверку равенства z нулю проведем при помощи условного оператора if, который зависит от одного параметра (условия):

..... При выполнении условия в круглых скобках выполняются команды в фигурных скобках оператора if. Если условие в круглых скобках не выполнено, то фигурные скобки игнорируются, и управление передаётся следующему оператору. Понукать компьютер не нужно, информация об условии «сама запомнится» (точка с запятой отсутствует!).

..... Условный оператор if будет использован дважды.

..... В первом случае записываем в круглые скобки условие: z==(два знака равенства в С++ означают сравнение, в данном случае с нулем). Если условие выполнено, то n делится на и управление передается в фигурные скобки.

..... Как только мы попали в фигурные скобки оператора if, выдаем сообщение на экран о наличии у числа n делителя. Одновременно начинаем их подсчет при помощи счетчика делителей t (со статусом int). Заносим его в строку объявления переменных, присвоив значение 1, а после выдачи информации увеличиваем t на 1 при помощи команды t++. Итак, вместо многоточия в оператор цикла подставляем оператор:

..... Если у n нет делителей, то-есть это число простое, то управление внутрь фигурных скобок не попадёт, команда t++ ни разу не сработает, и после выхода из цикла параметр t сохранит значение 1.

..... При вторичном использовании условного оператора в круглые скобки записываем условие t==1:

который выводит на экран сообщение, что n число простое.

..... Итак, тело программы выглядит следующим образом:

 

Строка объявления переменных

..... При создании программы были задействованы переменные int i, double z, double n и int t. Поскольку i и z используются только внутри цикла (являются «локальными»), их статус можно объявить там же. А вот n и t необходимы во всей программе (являются «глобальными»), и их надо поместить в строку объявления переменных. Дадим n значение 2015-го года, а счетчику делителей присвоим 1, тогда строка объявления переменных примет вид:

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

 

Составляем программу

..... Собираем операторы по «простейшей схеме» (как в программе «calc»), записываем их в файл divi.cpp и получаем программу «divi».

 

Программа «divi» - «делитель»

нумерует и выдаёт на дисплей список делителей числа n


   #include "stdafx.h"
   #include <iostream>
   using namespace std;
   #include <cmath>

 

double n=2015.0; int t=1;

void main ()
  {
    setlocale(LC_ALL,"Rus");
          for (int i=2; i<n; i++)
     {
                double z=fmod(n,i);
                if(z==0){cout <<t<<". "<< n <<" имеет делитель "<< i << endl; t++;}
     }
 if(t==1){cout <<"Число "<< n <<" простое!"<< endl;}
 cin.get();
  }


Нажимаем F5 и получаем результат. Используем три значения n = 2015, 2016 и 2017:

Итак, 2015-й год имеет 6 делителей.
2016-й имеет 34 делителя (все не поместились)!
А 2017-й год - «простой».

Любопытная информация. Используя данную программу можно получить такие результаты.
2019-й год имеет делители 3 и 673.  2020-й год имеет десять делителей.
Два делителя 43 и 47 имеет 2021-й год.  А следующим простым годом будет 2027-й.


 

C++  для   Ch--

 

 

Массив: на экране - красиво упорядоченные данные

 

..... Для удобства программирования разработчики языка С++ создали еще один вид переменных в виде набора ячеек, в которых можно хранить однотипные данные. Эта переменная называется массив. Ей присваивается имя, например, int arrow[n]. В квадратных скобках указывают количество ячеек, а статус массива совпадает со статусом переменных, которые хранятся в этих ячейках. Вот команда, которая заносит в ячейки массива arrow числа, кратные семи:

..... Доступ возможен к каждой ячейке, однако их нумерация - неудобная - начинается с нуля (об этом надо всегда помнить!). Например,

..... Решим задачу о нахождении делителей , используя массивы. Назовем эту программу «mass» - «массив» и известным способом создадим файл mass.cpp. По сравнению с программой divi изменится только шапка, строка объявления переменных и условный оператор, введённый на втором шаге.

 

Шапка программы

..... Для вывода на экран красиво упорядоченных данных подключим библиотеку таблиц, добавив в шапку программы divi еще одну директиву и строку:

..... Таким образом, шапка программы «mass» состоит из шести операторов.

 

Строка объявления переменных

..... В строку объявления переменных программы divi добавим массив arrow, в ячейках которого будут храниться делители. Поскольку их количество заранее неизвестно, заявим одну ячейку. Компьютер имеет право изменять длину массива.

..... Переменная t предназначена для нумерации ячеек массива, а нумерация, как было отмечено, начинается с нуля.

 

Тело программы

..... 2-й шаг. Изменение в теле программы divi касается только двух условных операторов.

..... Первый условный оператор записывается в формате:  if  ( условие {   }.

..... В рассматриваемом случае, если остаток от деления равен нулю (z = 0), то n имеет делитель i, который заносится в соответствующую ячейку массива arrow, начиная с t = 0, а t при этом увеличивается на 1. Таким образом все делители оказываются в ячейках массива:

..... Если после перебора всех делителей (при выходе из цикла) параметр t  не изменился (остался таким же как в строке объявления переменныхt = 0), то делителей нет, и управление перейдёт внутрь фигурных скобок оператора if. На экран будет выведено, что число n простое, а оператор else будет проигнорирован:

..... Если же после перебора всех делителей (при выходе из цикла) параметр t изменился (появился делитель), то управление перейдёт внутрь фигурных скобок оператора else, и на экране появится заглавная строка таблицы. Команда setw(13) из библиотеки таблиц сдвинет слово "Делители" на 13 пробелов вправо от слова "Номер".

..... После заглавной строки таблицы на экран будет выведено содержимое ячеек массива arrow, в которых находятся делители числа n. Это будет сделано при помощи оператора цикла, расположенного на месте многоточия:

Вывод начинается с первой ячейки массива с номером 0 (j=0), в которой находится делитель под номером 1. Поэтому на экран выводим номер на единицу больший номера ячейки массива (j+1). Команды setw(3) и setw(11) служат для выравнивания таблицы.

 

Простейшая схема программы и результаты расчетов

..... Программа mass готова. Шапка состоит из шести операторов. Тело программы расположено внутри функции main между операторами русификации текста setlocale и фиксации экрана cin.get ( ).

 

Программа «mass» - «массив» (простейшая схема)

..... Записываем программу в файл mass.cpp, и нажимаем F5. Результаты расчетов представим для трех значений n = 2013, 2014 и 2015:

Итак, 2013-й, 2014-й и 2015-й годы имеют ровно по 6 делителей.

 

Стандартная схема программы

..... В С++ простейшую схему используют очень редко. На практике приходится иметь дело с множеством функций, поэтому применяют стандартную схему. Тело распределяют по нескольким функциям, а управление осуществляют из главной функции main, с которой всегда начинается выполнение программы.

..... Вспоминаем. В математике функцию можно задать аналитически, графически, табличным способом или компьютерной программой. Всегда пишут y = f(x), где x - аргумент, а y - функция. Даем аргументу значение, например, x = 5 и получаем значение функции y = f(5). Функция может быть однозначной или многозначной.

..... Аналогичные обозначения используют в С++. Например, делители числа n будем вычислять при помощи функции divi:

..... Каждая функция в С++, как и переменная, имеет статус, который определяет её особые свойства. Пока мы используем нейтральный статус void. Итак, divi - многозначная функция нейтрального статуса с аргументом n. А теперь запишем программу «mass» по стандартной схеме.

..... 1. Шапка программы не изменится.

..... 2. Из строки объявления переменных удалим переменную n.

..... 3. Далее следует функция  void divi(double n) {  }, в круглых скобках которой в качестве аргумента объявим переменную n, а в фигурные скобки поместим тело программы «mass».

..... 4. После пропуска строки запишем основную функцию void main ( ) { }, с которой компьютер начинает выполнять программу. В фигурные скобки поместим операторы русификации текста и фиксации экрана, а между ними команду

..... Этот оператор - аналог записи f(5), т. е. является значением функции divi, если аргумент положить равным n = 2015.0. Функция divi(n) многозначная и, как ранее было показано, имеет 6 значений:

Это и высветится на экране с соответствующим комментарием.

 

Программа «mass» - «массив» (стандартная схема)

..... Подставляя в divi(2015.0) значения аргумента n = 2013.0 и 2014.0, получим те же результаты, что и по простейшей схеме.


 

C++  для   Ch--

 

 

Распределение простых чисел

 

Простым числом называется отличное от 1 натуральное число, делящееся только на себя и на 1.

 

..... Задача. Написать программу нахождения первых n простых чисел в натуральном ряду.

..... Составляем программу. Шапка программы как у «calc»: состоит из трёх директив и одной строки.

..... Строка объявления переменных содержит массив num, с простым числом 2 в нулевой ячейке:

Название массива образовано от слова «number» - «число». В его ячейках будем хранить простые числа.

..... Функция simpl(n) зависит от числа n простых чисел. Начинается она с вывода на экран заголовка будущей таблицы:

..... Далее будут использованы внешний и внутренний операторы цикла for и один условный оператор if.

..... Во внутреннем операторе цикла for при помощи функции fmod из математической библиотеки находим остатки r от деления числа, находящегося в ячейке массива с номером i, на все числа из предыдущих ячеек (с номерами от k0 до  k = i - 1):

..... При помощи условного оператора if анализируем остатки от деления. Если хотя бы один окажется равным нулю (обнаружен делитель!), то управление передается внутрь фигурных скобок оператора if (отмечены красным цветом), число в ячейке увеличивается на 1, счётчик цикла обнуляется, и процесс повторяется.

..... Из внутреннего цикла программа выйдет в том случае, когда в ячейке с номером i окажется простое число, которое при помощи оператора cout появится на экране. Обозначение " \t " используют для сдвига столбцов таблицы на несколько пробелов вправо. Не забываем, что нумерация ячеек массива начинается с 0, поэтому в i-той ячейке будет находиться простое число под номером i+1

..... Внешний оператор цикла

заносит в очередную ячейку число, большее на единицу простого числа в предыдущей ячейке, и передаёт управление внутреннему оператору цикла (он находится на месте многоточия), который заносит в эту ячейку очередное простое число. Перебираем все ячейки массива с номерами от i = 0 до i = n - 1

..... Открываем компилятор Visual Studio и создаём проект «simple» - «простое число». В открывшемся файле simple.cpp всё стираем и вставляем туда приведенную ниже программу.

Стандартная схема программы «simple»


   #include "stdafx.h"
   #include <iostream>
   using namespace std; 
   #include <cmath>


double num[]={2};
void simpl(int n)
 {

   cout <<"Первые "<< n <<" простых чисел"<< endl;
      for (int i=0; i<n; i++)
    {
      num[i+1]=num[i]+1;
      for (int k=0; k<i; k++)
         {
                      double r=fmod(num[i], num[k]);
          if(r==0){num[i]=num[i]+1; k=-1;}
         }
      cout <<"\t" << i+1 <<". \t"<< num[i] << endl;
    }

     }

void main( ) 
 {
   setlocale(LC_ALL, "Rus");
   simpl(10);
   cin.get();
 }


 

..... Главная функция программы main() начинается оператором русификации текста и заканчивается фиксацией экрана. В середине при помощи функции simpl(10) вычисляем первые 10 простых чисел натурального ряда.

..... Cобираем операторы в единую программу и помещаем её в файл simple.cpp. Программа расположена слева и служит для нахождения первых n простых чисел натурального ряда.

..... Нажимаем F5 и получаем результат:

 

 

..... Чтобы  найти другое количество простых чисел натурального ряда, в главную функцию программы main в качестве аргумента функции simpl(10) подставляем вместо 10 другое число.


 

C++  для   Ch--

 

 

C++ и гарем Абдуллы.
Символьные переменные

 

 

..... В языке С++ имеются переменные со статусом char, которым можно присваивать буквы. Я думаю, что создатели С++ использовали массивы из этих переменных для хранения имён своих очаровательных возлюбленных, иначе как объяснить название char?

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

..... Например, присвоим переменной x букву ю (одинарные кавычки обязательны!):

..... Внимание! Этим оператором мы говорим компьютеру: запомни, паршивец, число 254!

..... Чтобы доходчиво объяснить этот парадокс, предположим (я не исключаю такого варианта!), что в число дремучих чайников попали люди творческих профессий. Тогда 254 - это псевдоним буквы ю, который передается компьютеру.

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

..... Существует специальная таблица ASCII Win-1251 (не буду расшифровывать), где каждому символу ставится в соответствие код - определенное трехзначное число от 0 до 255.

..... Вот, например, как можно записать и зашифровать любимую жену Абдуллы из кинофильма «Белое солнце пустыни». При выводе на экран все три выражения содержат одно и то же слово: «Гюльчатай».

..... Одинарные кавычки ' ' говорят о том, что внутри массива находится символ. Буквы слова, заключенного в двойные кавычки " ", распределяются по ячейкам символьного массива gar3[ ]. Квадратные скобки можно оставить пустыми - компьютер самостоятельно вычислит длину массива.

..... Псевдонимы (коды) символов - это не обычные, а очарованные числа. Их нельзя перемножать, делить. Однако создатели языка С++ решили дать им немного свободы и разрешили кое-что к ним прибавлять. Например, выводим на экран char x = {65}, получаем букву A. Выводим на экран char y = x + 1, получаем B, поскольку псевдоним этой буквы 66.

..... Чтобы понять суть символьных переменных, составим небольшую программу «garem» - «гарем» на примере жён Абдуллы. Шапка состоит из трех операторов (как у программы «text»). Вот верхняя часть программы «garem»:

..... Строка объявления переменных превратилась в таблицу. Заявлено четыре массива статуса char и одна переменная int. В ячейки массива nal1 (от слова «наложница») занесем по буквам имя первой жены Абдуллы, а в ячейки nal2 - псевдонимы букв любимой жены. Ячейкам массива gar (от слова «гарем») присвоим имена старших, а ячейкам gar1 - младших жен Абдуллы. Параметр L - это длина массива.

..... Программу «garem» составим по простейшей схеме. Тогда ее нижняя часть будет содержать только функцию main:

..... В теле программы содержится несколько новых операторов. Структура его такова. Сначала выводим на экран содержимое массивов nal1 и nal2. Затем при помощи оператора strcat (gar, gar1) массивы gar1 и gar объединяем в один массив gar и на экран выводим его содержимое - весь гарем Абдуллы.

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

..... При помощи оператора strlen (gar) вычисляем длину L (количество ячеек) массива gar.

..... Объединяем верхнюю и нижнюю части программы, заносим её в файл garem.cpp, нажимаем F5 и получаем результат:

 


 

C++  для   Ch--

 

 

C++ помогает выбрать подругу на ночь.
Программа «Abdulla»

 

 

..... - Послушай, Абдулла! У тебя девять жён! Как ты выбираешь себе подругу на ночь?

..... - Кибернэтыка!

 

Генераторы случайных чиселrand( ) иsrand( )

..... Создатели С++ придумали хитрую систему получения случайных чисел. Она основана на взаимодействии двух специальных операторов.

..... Оператор rand( ) при пустых круглых скобках выбирает определённое число из диапазона (0, 32767). Этот диапазон можно изменить. Например, составной оператор 1 + rand( )%k  вычислит остаток от деления любого числа из этого диапазона на k и прибавит к нему единицу, т. е. работает в диапазоне (1, k). Недостатком является то, что выбранное значение не изменяется при многократном запуске программы.

..... Если ввести в программу оператор srand(n), где n - целое число, то оператор 1 + rand( )%k  отреагирует тем, что однозначно свяжет n с определенным числом из диапазона (1, k).

..... Хитрость разработчиков С++ состоит в том, что вместо n они используют таймер time(NULL), который отсчитывает время в секундах. Аргумент NULL фиксирует время при остановке программы и включает таймер после нового запуска. Вот связка двух операторов, которые регулируют этот процесс:

..... Итак, составной оператор 1 + rand( )%k получает от srand(time(NULL)) некоторое количество секунд, которое связывает с определённым числом из диапазона (1, k) и присваивает это число переменной R. Поскольку «пути господни во времени неисповедимы», в R оказывается случайное число.

 

Конструкция switch( ) - case

..... Для программы понадобится конструкция switch - case, удобная замена конструкции if - else:

..... Аргумент R в круглых скобках - целое число (номер варианта). Он инициирует работу оператора после двоеточия в строке case R. Процесс прерывается командой break. Если строка case R отсутствует, то выполняются операторы после двоеточия в default.

 

Программа «Abdulla»

..... Открываем Visual Studio и создаём проект Abdulla. В файле Abdulla.cpp стираем все кроме первой команды. Добавляем директиву для открытия таймера ctime и директиву для вывода на экран текста.

 

Программа «Abdulla»

..... Значение параметру k присваиваем в строке объявления переменных. Запускаем программу несколько раз и составляем «меню» Абдулле на три ночи:

 

..... - Кибернэтыка!