Сделай Сам Свою Работу на 5

Использование датчика случайных чисел для формирования массива





В С++ есть функция int rand() возвращающая псевдослучайное число из диапазона 0..RAND_MAX=32767, описание функции находится в файле <stdlib.h>.

В общем случае псевдослучайное n определяется по формуле:

n = a + rand ( ) % b

, где a – величина сдвига (равна первому числу из требуемого диапазона последовательности целых чисел), b – масштабирующий коэффициент (равен ширине требуемого диапазона).

 

Пример.

#include<iostream.h>

#include<stdlib.h>

void main()

{

int array[100];

int n;

cout<<"\nEnter the size of array:";

cin>>n;

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

{

array[ i ]=rand()%100-50;// диапазон значений от -50 до 50

cout<<array[ i ]<<"\n";

}

}

В этой программе используется перебор массива по одному элементу слева направо с шагом 1.

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

srand(time(NULL));

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



#include<iostream.h>

#include<stdlib.h>

#include<time.h>

void main()

{

int array[100];

int n;

cout<<"\nEnter the size of array:";

cin>>n;

srand(time(NULL));

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

{

array[ i ]=-5+rand()%10; // диапазон значений от -5 до 5

cout<<array[ i ]<<"\n";

}

}

Многомерные массивы

Многомерные массивы описываются как массивы массивов. Например:

int d2[10] [20]; //массив из десяти массивов по 20 целых

Многомерные массивы могут быть инициализированы:

int ia [2][3] = {

{0,1,2},

(3,4,5}

};

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

int ic[2] [3]= { {1}, {3} }; //инициализирует только первые элементы каждой //строки, остальные – 0

int id[2][3] = {1,2,3,4}; //два последних элемента второй строки – 0

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

В программных кодах высокого уровня использования многомерных массивов надо избегать. Лучше пользоваться типом vector из стандартной библиотеки С++.

Структуры С+

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



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

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

В языке С++ структура является видом класса и обладает всеми его свойствами

Структуры определяются:

struct [имя типа]

{

тип_1 элемент_1;

тип_2 элемент_2;

} [список описателей];

Т.о. возможно следующее объявление структуры:

#include <iostream.h>

Void main()

{

Struct address

{

char name[10];

char street[30];

char town[10];

long number;

} my={"Petrov", "Green Street","Moscow",33};

}

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

Рассмотрим пример.

#include <iostream.h>

#include <string.h>// используется функция strcpy()

// объявление структуры

Struct MYSTRUCTURE

{

char sName[100];

int iAge;

};

/*Это означает, что MYSTRUCTURE состоит из строки с именем sName и целого с именем iAge. sName и iAge называются элементами данных структуры.*/

/* Код в main() объявляет переменную с именем MyStructure типа MYSTRUCTURE: */

Void main()



{

MYSTRUCTURE MyStructure;

/*Обратите внимание, что по традиции имя переменной составлено из символов нижнего регистра или в нем смешаны символы нижнего и верхнего регистров, MyStructure, но в имени типа структуры используются только символы верхнего регистра, как, например, в MYSTRUCTURE. */

strcpy (MyStructure.sName, "Andy" ); /*функция strcpy() копирует строку 'Andy' в элемент данных MyStructure.sName */

/*Следующий оператор присваивает значение 13 элементу данных iAge cтруктуры*/

MyStructure.iAge = 13;

cout << "My name is ";

cout << MyStructure.sName;

cout << " and I am ";

cout << MyStructure.iAge;

cout << " years old." << endl;

}

Результат работы программы:


My name is Andy and I am 13 years old.

 

 

Тема: Классы в С++

Конструкторы и деструкторы

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

 

Для конструктора всегда выполняются следующие правила:

· конструктор никогда не вызывается явно, а по своему назначению используется в основном для инициализации полей данных при создании объекта;

· конструктор автоматически вызывается при создании объекта класса;

· имя конструктора совпадает с именем класса;

· от других собственных функций класса конструктор отличается тем, что не имеет возвращаемого значения (даже типа void) – результатом выполнения конструктора является объект;

· конструктор может иметь параметры, а, следовательно, в классе можно определить несколько конструкторов;

· конструктор объекта можно не объявлять, компилятор сам снабдит такой объект стандартными конструктором (и деструктором), стандартный конструктор не принимает аргументов и (вместе со стандартным деструктором) ничего не делает.

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

 

Объявив конструктор необходимо объявить и деструктор. Деструкторы удаляют из памяти отработавшие объекты и освобождают выделенную для них память. Правила деструктора:

· деструктору присваивается имя класса с символом тильды «~» впереди;

· деструкторы не имеет параметров (не принимают аргументов) и не возвращают значений;

· должен быть открытым (public) методом;

· никогда не вызывается явно, вызывается автоматически для каждого объекта при выходе из области видимости объекта;

· если деструктор не определен в классе явно, то он создается компилятором автоматически, по умолчанию освобождая память, занимаемую объектом.

#include <iostream>

 

class Car

{

public:

Car(unsigned int initialYear);

~Car();

 

unsigned int GetYear( );

void SetYear (unsigned int Year);

void Start( );

private:

unsigned int itsYear;

};

 

using namespace std;

 

Car::Car(unsigned int initialYear)

{

itsYear=initialYear;

}

Car::~Car ( ) { }

 

int unsigned Car::GetYear ( )

{

return itsYear;

}

void Car::SetYear (unsigned int Year)

{

itsYear=Year;

}

void Car::Start ()

{

cout<<"Forward!!!\n";

}

 

int main( )

{

unsigned int Old;

Car myZaparozec(19);

 

Old=myZaparozec.GetYear ( );

cout<<"The year back to my machine was "<<Old<<" years"<<endl;

myZaparozec.SetYear (20);

Old=myZaparozec.GetYear ( );

cout<<"Now to my machine "<<Old<<" years"<<endl;

myZaparozec.Start ();

return 0;

}


[1] С++ не имеет встроенных средств ввода/вывода подобно другим языкам. Даже простейший исходный текст программы располагается в нескольких файлах: например, файл iostream является заголовочным файлом, в котором на языке С++ содержится описание стандартных средств ввода/вывода, в частности консольных потоков cin и cout. Эти потоки в терминах С++ являются объектами классов.

[2] Символ << называют так же операцией помещения в поток.

 

[4] В прототипе функции имена параметров не обязательны и имеет право существовать следующий вариант объявления: long myFunc (int = 21);

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.