Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Для получения высокой точности необходимо использовать монитор с видеоадаптером не хуже VGA, а лучше - SuperVGA. В последнем случае на экране можно получить одновременно несколько миллионов цветов. Языки программирования позволяют переопределить цвета таким образом, чтобы с возрастанием номера цвета увеличивалась яркость свечения точки на экране.

Алгоритм построения изограммы следующий:

1.   Установить графический режим монитора с максимально возможным одновременно отображаемым на экране количеством цветов.

2.   Задать границы вывода изограммы на экране (xs1,ys1) и (xs2,ys2).

3.   Задать границы исследуемой области функции (x1,y1) и (x2,y2).

4.   Определить шаг для исследования функции по осям X и У.

(6)

5.   Определить максимальное и минимальное значение функции для исследуемой области Zmax и Zmin.

6. Определить значения функции в точках (xi,yi) Zi=f(xi,yi) и вывести точку в позицию экрана (xsi,ysi) цветом, определяемым по формуле

(7)

где N - количество цветовых оттенков на графике.

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

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

Задания для подготовки к работе

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

НЕ нашли? Не то? Что вы ищете?

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

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

Задания к работе

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

При изменении значения констант в одном месте программы должны изменяться размеры или положение графика.

1.  Построить кусочно-линейный график функции с разрывами в точках деления на нуль.

2.  Построить график непрерывной на участке функции и ее производной. Формула для вычисления производной базируется на ее определении и не должна зависеть от вида функции.

3.  Построить график АЧХ фильтра в логарифмическом масштабе.

4.  Построить 2 графика в совмещенных по оси Х окнах.

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

6.  Построить график функции Лапласа.

7.  Построить график в полярных координатах: семейство кардиоид.

8.  Построить гистограмму псевдонормального распределения случайных чисел.

9.  Построить полигон для равномерного распределения случайных чисел.

10.  Построить трехмерную диаграмму в изометрии (брусками).

11.  Построить график затухающего гармонического сигнала с разметкой в градусах.

12.  Построить график амплитудно-модулированного сигнала. Управляющий сигнал задается функцией от времени.

13.  Построить график частотно-модулированного сигнала. Управляющий сигнал задается функцией от времени.

14.  Построить план местности, выделяя высоты цветом.

15.  Построить графики роста очков для команд по турам.

16.  Построить круговую диаграмму выдвинутым сектором.

17.  Построить объемную круговую и кольцевую диаграммы.

18.  Построить относительную диаграмму выпуска товаров по годам (рис.1, в).

19.  Построить фигуру Лиссажу в статике. Вводятся фазы гармонических сигналов.

20.  Построить график функции, заданной неявно, например -9.

Содержание отчета

Отчет должен содержать:

Тексты заданий (по вариантам);

Тексты программ с комментариями;

Протоколы работы программ;

Выводы по работе.

Контрольные вопросы

1.  Чем отличается построение кусочно-линейного графика от точечного?

2.  Почему в формуле (1) для оси Y используется знак «минус»?

3.  Как выбрать масштабы по осям X и Y при построении графика?

4.  Как осуществить привязку графика к координатным осям?

5.  Как произвести автоматическую разметку координатных осей с нанесением делений и надписей?

6.  Как произвести сложную разметку осей, выделяя каждое N-ное деление более длинными штрихами?

7.  Как произвести разметку осей, если шаг между делениями составляет 300 единиц?

8.  Как произвести разметку осей, если шаг между делениями составляет 0,4 единицы?

9.  Как построить графики нескольких функций от одного аргумента?

10.  Как построить график функции в полярных координатах?

11.  Как построить гистограмму ряда значений?

12.  Как построить круговую диаграмму?

13.  Как построить трехмерную каркасную поверхность?

Литература

10.  Митницкий теории алгоритмов и язык программирования С. Учебное пособие. –М.: МФТИ, 2001. – 180с.

11.  Могилев А. В. и др. Информатика. М.: Изд. центр “Академия”, 2000. – 816 с.

12.  Подбельский С++: Учебное пособие. – М.: Финансы и статистика, 2002 – 560с.

13.  , Фомин на языке Си. – М.: Финансы и статистика, 2002 – 600с.

14.  Алексеев техника и программирование. Практикум по программированию: Практ. пособие. - М.: Высшая школа, 1991. – 400с.

15.  Н. Культин. С / С++ - С.-Пб .: “БХВ – Петербург “,2002.-277с.

. Справочник по высшей математике. М.: Наука, 1977. – 872с.

Лабораторная работа № 6

Обработка массивов

Цели работы:

Овладение практическими навыками разработки программ с индексированными переменными;

Получение навыков по разработке программ со структурой вложенных циклов;

Изучение приемов выделения и освобождения динамической памяти.

Краткие теоретические сведения

При использовании простых переменных каждой области памяти для хранения данных соответствует свое имя. Если с группой величин одинакового типа требуется выполнять однообразные действия, им дают одно имя, а различают по порядковому номеру (индексу). Это позволяет компактно записывать множество операций с помощью циклов. Конечная именованная последовательность однотипных величин называется массивом. То есть массив – это структура данных, состоящая из фиксированного количества пронумерованных компонентов одинакового типа. Сам компонента массива, в свою очередь, может быть как простым элементом, так и структурой (в том числе массивом).

Описание массива в программе отличается от описания простой переменной наличием после имени квадратных скобок, в которых задается количество элементов массива (размерность).

ВНИМАНИЕ: При описании массивов квадратные скобки являются элементом синтаксиса, а не указанием на необязательность конструкции.

Рассмотрим особенности организации массивов в языке Си:

Элементы массива нумеруются с нуля.

При описании массива используются те же модификаторы (класс памяти, const и инициализатор), что и для простых переменных.

Инициализирующие значения для массивов записываются в фигурных скобках. Значения элементам присваиваются по порядку. Если элементов в массиве больше, чем инициализаторов, элементы, для которых значения не указаны, обнуляются:

int b [5]={3,2,1}; // b[0]=3, b[1]=2, b[2]=1, b[3]=0, b[4]=0

Размерность массива вместе с типом его элементов определяет объем памяти, необходимый для размещения массива, которое выполняется на этапе компиляции, поэтому размерность может быть задана только положительной константой или константным выражением. Например:

#define N 100

const int a=15;

int b=400;

// объявления массивов:

double x[N]; // можно: объявляется массив из 100 вещественных чисел

char y[a]; // можно: объявляется символьный массив (строка до 14 символов)

int z[b]; // нельзя: b – не константа!

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

int x[]={5, 8, -19, 2, 14}; // объявляется массив из 5 элементов

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

#include <iostream. h>

main ( ) {

const int n = 10

int i, sum;

int marks[n]= {3,4,5,4,4,2};

for (i=0, sum=0; i<n; i++) sum += marks[i];

cout << “Сумма элементов : ”<< sum ;

}

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

ВНИМАНИЕ: При обращении к элементам массива автоматический контроль выхода индекса за границу массива не производится, что может привести к ошибкам.

Пример1: Сортировка целочисленного массива методом выбора. Алгоритм состоит в том, что выбирается наименьший элемент массива и меняется местами с первым элементом, затем рассматриваются элементы, начиная со второго, и наименьший из них меняется местами со вторым элементом, и так далее n-1 раз (при последнем проходе цикла при необходимости меняются местами предпоследний и последний элементы массива).

#include < iostream. h>

main (){

const int n =20; //количество элементов массива

int b[n]; //описание массива

int i ;

for (i=0;I<n ; i++) cin>>b[i]; //ввод массива

for (i=0;i<n-1; i ++){ //n-1 раз ищем наименьший элемент

//принимаем за наименьший первый из рассматриваемых элементов:

int imin =i;

//поиск номера минимального элемента из неупорядоченных:

for (int j = i+1; j<n; j++)

//если нашли меньший элемент, запоминаем его номер:

if (b[j]<b [imin]) imin=j;

int a =b[i]; // обмен элементов

b [i]= b[imin]; // с номерами

b[imin]=a; // i и imin

}

//вывод упорядоченного массива :

for (i =0; i< n; i ++) cout << b[i] << ‘ ‘;

}

Идентификатор массива является константным указателем на его нулевой элемент. Например, для массива из предыдущего листинга имя b - это то же самое, что &b[0], a к i-му элементу массива можно обратиться, используя выражение *(b+1).Можно описать указатель, присвоить ему адрес начала массива и работать с массивом через указатель. Следующий фрагмент программы копирует все элементы массива, а в массив b:

int a [100],b[100]:

int*pa=a; // или int*p= &a[0];

int*pb=b;

for(int i =0; i<100; i++)

*pb++ = *pa++; // или pb[i]=pa[i];

2. Динамические массивы создают с помощью операции new, при этом необходимо указать тип и размерность, например:

int n =100;

float*p= new float [n];

В этой строке создается переменная-указатель на float, в динамической памяти отводится непрерывная область, достаточная для размещения 100 элементов вещественного типа, и адрес ее начала записывается в указатель р. Динамические массивы нельзя при создании инициализировать, и они не обнуляются автоматически.

Преимущество динамических массивов состоит в том, что размерность может быть переменной, то есть объем памяти, выделяемой под массив, определяется на этапе выполнения программы, например, вводится с клавиатуры. Если память под массив выделялась функцией malloc или calloc, то можно увеличить или уменьшить размер массива с помощью функции realloc. Кроме этого, если массив станет ненужным, память из-под него можно освободить и использовать в других целях. Доступ к элементам динамического массива осуществляется точно так же, как к статическим, например, к элементу номер 5 приведенного выше массива можно обратиться как р [5] или ( р+5).

Альтернативный способ создания динамического массива – использование функции malloc библиотеки Си:

int n =100;

float *q=(float *) malloc ( n * sizeof (float));

Операция преобразования типа, записанная перед обращением к функции malloc, требуется потому, что функция возвращает значение указателя типа void*, а инициализируется указатель на float.

Память, зарезервированная под динамический массив с помощью new[ ], должна освобождаться оператором delete[],а память, выделенная функцией malloc-посредством функции free, например:

delete[]h; free(q);

При несоответствии способов выделения и освобождения памяти результат не определен. Размерность массива в операции delete не указывается, но квадратные скобки обязательны.

3. Многомерные массивы задаются указанием каждого измерения в квадратных скобках, например, оператор

int matr[6][8];

задает описание двумерного массива из 6 строк и 8 столбцов. В памяти такой массив располагается в последовательных ячейках построчно. Многомерные массивы размещаются так, что при переходе к следующему элементу быстрее всего изменяется последний индекс. Для доступа к элементу многомерного массива указываются все его индексы, например, matr[i][j], или более экзотическим способом: *(matr[i] + j) или*(*(matr+I)+j). Это возможно, поскольку matr[i] является адресом начала i-й строки массива.

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

int a[][5]={{1,2,3},{4,5,6,7,8},{9,10}};

1

2

3

4

5

6

7

8

9

10

int a[3][5]={1,2,3,4,5,6,7,8,9,10};

1

2

3

4

5

6

7

8

9

10

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

#include <stdio. h>

main () {

const int nstr=4 , nstb = 5; // размерности массива

int b[nstr][nstb]; // описание массива

int i, j;

for (i =0; i< nstr; i++) // ввод матрицы

for (j=0; j< nstb ; j++) scanf (”%d” , &b[i][j]);

int istr= -1, Maxkol=0;

for ( i=0; i< nstr; i++){ //просмотр массива по строкам

int kol =0;

for ( j=0; j< nstb ; j++) if (b[i][j]==0) kol++;

if (kol> Maxkol) { istr = i ; Maxkol = kol; }

}

printf(”--- Вывод матрицы ---\n”);

for ( i = 0 ; i< nstr; i++){

for (j =0; j< nstb; j++) printf(”%d”, b[i][j]);

printf (”\n”); }

if ( istr = = -1) printf (“Нулевых элементов нет”)

else printf (“ Номер строки: %d”, istr) ;

}

Номер искомой строки хранится в переменной istr, количество нулевых элементов в текущей (i-й) строке - в переменной kol , максимальное количество нулевых элементов – в переменной maxkol. Массив просматривается по строкам, в каждой из них подсчитывается количество нулевых элементов (обратите внимание, что переменная kol обнуляется перед просмотром каждой строки).Наибольшее количество и номер соответствующей строки запоминаются.

Для создания динамического многомерного массива необходимо указать в операции new все его размерности (самая левая размерность может быть переменной), например:

int nstr=5;

int** m=(int**) new int [nstr][10];

Более универсальный и безопасный способ выделения памяти под двумерный массив, когда обе его размерности задаются на этапе выполнения программы, приведен ниже:

int nstr, nstb;

cout <<”Введите количество строк и столбцов:”;

cin>>nstr>> nstb;

int **a =new int *[nstr]; //1

for( int i = 0 ; i <nstr; i ++) //2

a[i]= new int [nstb]; //3

...

В операторе 1 объявляется переменная типа «указатель на указатель на int» и выделяется память под массив указателей на строки массива(количество строк – nstr).В операторе 2 организуется цикл для выделения памяти под каждую строку массива. В операторе 3 каждому элементу массива указателей на строки присваивается адрес начала участка памяти, выделенного под строку двумерного массива. Каждая строка состоит из nstb элементов типа int. В отличие от статической матрицы, элементы динамической матрицы располагаются в памяти не подряд, так как память под каждую строку отводится в произвольной свободной области.

Освобождение памяти из-под массива с любым количеством измерений выполняется с помощью операции delete [] в обратном порядке:

for( int i = 0; i < nstr; i++ )

delete []a[i]; // освобождение памяти из-под строк

delete []a; // освобождение памяти из-под указателя на массив строк

Задания для подготовки к работе

Изучить:

-  Способы объявления и инициализации массивов разной размерности;

-  Способы создания динамических массивов;

-  Типовые алгоритмы обработки массивов (поиск, сортировку, сдвиг элементов);

-  Разработайте алгоритмы и подготовьте тексты программ для выполнения работы согласно варианту.

Задания к работе

1.  Составить программу для обработки одномерного массива.

2.  Составить программу для обработки матрицы. Размеры матрицы нужно задавать с клавиатуры.

Варианты к заданию 1

1.  Вычислить сумму элементов массива, расположенных между максимальным и минимальным элементами.

2.  Упорядочить элементы массива методом шейкер-сортировки. (Пузырьковая сортировка, чередующая направление прохода по массиву).

3.  Преобразовать массив таким образом, чтобы сначала располагались все неотрицательные элементы, а затем – все отрицательные.

4.  Сдвинуть все положительные элементы массива в начало, а остаток массива заполнить числом (-1).

5.  Объединить два упорядоченных по возрастанию массива в один с сохранением принципа упорядоченности элементов.

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

7.  Найти в массиве самую длинную упорядоченную последовательность чисел и выделить ее цветом.

8.  Сжать массив, удалив из него элементы, модуль которых находится в интервале [А, В]. Освободившиеся элементы в конце массива заполнить нулями.

9.  Подсчитать, сколько раз в массиве встречается каждый элемент.

10.  Вычислить среднее геометрическое элементов неотрицательного массива, расположенных между двумя последними нулями.

11.  Заполните массив неповторяющимися случайными числами.

12.  Изменить порядок следования элементов массива на обратный.

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

14.  Отсортировать по возрастанию отдельно элементы, стоящие в четных и нечетных позициях.

15.  Упорядочить элементы массива методом сортировки включениями.

Варианты к заданию 2

Вариант задания

Имя

матрицы

и размеры

Действие

Условия и

ограничения

1

А(10, 15)

Вычислить и запомнить сумму и число положительных элементов каждого столбца матрицы. Результаты отпечатать в виде двух строк.

A(ij)>0

2

А(N, M)

Вычислить и запомнить суммы и числа элементов каждой строки матрицы. Результаты отпечатать в виде двух столбцов.

N<=20

M<=15

3

B(N, N)

Вычислить сумму и число элементов матрицы, находящихся под главной диагональю и на ней.

N<=12

4

C(N, N)

Вычислить сумму и число положительных элементов матрицы, находящихся над главной диагональю.

C(ij)>0

N<=12

5

D(K, K)

Записать на место отрицательных элементов матрицы нули и вывести ее на печать в общепринятом виде.

K<=10

6

D(10, 10)

Записать на место отрицательных элементов матрицы нули, а на место положительных – единицы. Вывести на печать нижнюю треугольную матрицу в общепринятом виде.

7

F(N, M)

Найти в каждой строке матрицы максимальный и минимальный элементы и поместить их на место первого и последнего элемента строки соответственно.

Матрицу напечатать в общепринятом виде.

N<=20

M<=10

8

F(10, 8)

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

9

N(10, 10)

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

N(ij)/5*5=N(ij)

10

N(10, 10)

Из положительных элементов матрицы N сформировать матрицу M (10, KMAX) , располагая их в строках матрицы подряд, где KMAX – максимальное число положительных элементов строки матрицы N. Записать нули на место отсутствующих элементов.

Отпечатать обе матрицы в общепринятом виде.

11

P(N, N)

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

N<=15

12

R(K, N)

Найти наибольший и наименьший элементы матрицы и поменять их местами.

K<=20

N<=10

13

S(25, 8)

Ввести исходные данные в первые 24 строки и первые 7 столбцов. Вычислить среднее арифметическое значение элементов каждой строки и записать его 8-й столбец, а также среднее арифметическое каждого столбца и записать его в 25-ю строку. Отпечатать полученную матрицу в общепринятом виде.

14

T(N, M)

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

N<=20

M<=15

15

V(15, 10)

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

Содержание отчета

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10