- •1. Простейшие программы
- •2. Переменные
- •5. Методы отладки программ
- •6. Работа в графическом режиме
- •Void Tr ( int X, int y, int c )
- •8. Функции
- •9. Структура программ
- •Void Square ( int X, int y, int a );
- •Void Kvadrat ( int X, int y, int a );
- •If ( kbhit() ) { ... }
- •11. Случайные и псевдослучайные числа
- •Int random ( int n )
- •1. Массивы
- •Int a[10], b[20]; // 2 массива на 10 и 20 целых чисел
- •Int random (int n) { return rand() % n; }
- •2. Символьные строки
- •Void strcpy1 ( char s1[], char s2[] )
- •Int n; // номерсимвола '.'
- •Intx, y;
- •3. Матрицы (двухмерные массивы)
- •Int random ( int n ) { return rand() % n; }
- •Int total, a[m][n];
- •Void SortStrings ( char *s[], int n ) // *s[] – массивуказателей
- •Int I, count;
- •5. Управление памятью
- •Int n; // размер массива (заранее неизвестен)
- •Int *a; // указатель для выделения памяти
- •IntM, n, I;
- •6. Рекурсия
- •Int Factorial ( int n )
- •Void Factorial ( int n, int &fact )
- •Int Factorial ( int n )
- •Int HowMany( char *s, char *word )
- •If ( ! p ) return 0; // ненашли – 0 слов
- •Void RecCircle ( float X, float y, float r, int n )
- •Initwindow(600, 500);
- •Void Pifagor( float X, float y, float l,
- •Void Combinations ( int a[], int n, int k, int q )
- •Void PrintData ( int Data[], int n )
- •Void Permutations ( int a[], int n, int q )
- •Int temp;
- •Void Split(int r, int a[], int q)
- •Void QuickSort ( int a[], int from, int to )
- •Int X, I, j, temp;
- •7. Структуры
- •Int year; // год издания, целое число
- •Int pages; // количество страниц, целое число
- •Int year;
- •Int pages;
- •Void Year2009( Book b )
- •Void Year2009( Book &b )
- •Void Year2009( Book *b ) // параметр – адрес структуры
- •Void SortYear ( pBook p[], int n )
- •Int year;
- •Int pages;
Int random ( int n )
{
return rand() % N; // случайное число в интервале [0,N-1]
}
С ее помощью (вызывая ее много раз подряд) можно получать последовательность случайных чисел в интервале [0,N-1] с равномерным распределением.
Теперь попытаемся использовать эту функцию для интервала [a,b]. Очевидно, что формула
k = random(N) + a;
дает последовательность в интервале [a,a+N-1]. Поскольку нам нужно получить интервал
[a,b], сразу имеем b=a+N-1, откуда N=b-a+1. Поэтому
Для получения случайных целых чисел с равномерным распределением в интервале [a,b]
надо использовать формулу
k = random(b-a+1) + a;
Более сложным оказывается вопрос о случайных вещественных числах. Если разделить
результат функции rand() на RAND_MAX:
x = (float) rand() / RAND_MAX;
мы получим случайное вещественное число в интервале [0,1) (при этом надо не забыть привести одно из этих чисел к вещественному типу, иначе деление одного целого числа на большее целое число будет всегда давать ноль).
Длина интервала [0,1) такой последовательности равна 1, а нам надо получить интер-
вал длиной b-a. Если теперь это число умножить на b-a и добавить к результату a, мы получаем как раз нужный интервал.
Для получения случайных вещественных чисел с равномерным распределением в интервале
[a,b) надо использовать формулу
x = rand()*(b-a)/RAND_MAX + a;
До этого момента мы говорили только о получении случайных чисел с равномерным распределением. Как же получить неравномерное? На этот вопрос математика отвечает так: из равномерного распределения можно получить неравномерное, применив к этим данным некоторую математическую операцию. Например, чтобы основная часть чисел находилась в середине интервала, можно брать среднее арифметическое нескольких последовательных случайных чисел с равномерным распределением.
Снег на экране
Приведенная ниже программа генерирует случайное значение x в интервале [0,399],
случайное значение y в интервале [0,299] и проверяет цвет точки с координатами (x,y).
Если эта точка черная, то ее цвет устанавливается случайный, а если нет — черный. Случайный цвет строится с помощью стандартной функции COLOR из красной (R), зеленой (G) и синей (B) составляющих, которые выбираются случайно в интервале [0,255].
• для определения того, была ли нажата какая-нибудь клавиша, используется функция
kbhit, которая возвращает 0, если клавиша не была нажата, и ненулевое значение, если
нажата любая клавиша. Для того, чтобы определить код этой клавиши, надо вызвать
функцию getch. Таким образом, цикл «пока не нажата клавиша» может выглядеть так:
while ( ! kbhit() ) { ... }
• для того, чтобы получить текущий цвет точки, используется функция getpixel.
1. Массивы
Основные понятия
Определение массива
Основное предназначение компьютеров не вычисления, как считают многие, а обработка
больших объемов данных. При размещении большого количества данных в памяти возникает такая проблема: надо научиться обращаться к каждой ячейке с данными отдельно. При этом очень сложно дать каждой ячейке собственное имя и при этом не запутаться. Выкручиваются из этой ситуации так: дают имя не ячейке, а группе ячеек, в которой каждая ячейка имеет номер.Такая область памяти называется массивом.
Массив – это группа ячеек памяти одинакового типа, расположенных рядом и имеющих
общее имя. Каждая ячейка в группе имеет уникальный номер.
При работе с массивами надо научиться решать три задачи:
• выделять память нужного размера под массив
• записывать данные в нужную ячейку
• читать данные из ячейки
Объявление массива
Чтобы использовать массив, надо его объявить – выделить место в памяти. Типом массива
называется тип массива это тип входящих в него элементов. Массивы могут быть разных типов— int, float, char, и т.д. Массив объявляют так же, как и обычные переменные, но после имени массива в квадратных скобках записывается его размер.