Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.docx
Скачиваний:
12
Добавлен:
15.03.2015
Размер:
5.82 Mб
Скачать

6.2. Функции

Функции используются при многократном расчете одного и того же сложного параметра. Обычно она помещается в заголовок программы перед главной функцией main(). Синтаксис ссылки на функцию: тип_возвращаемой_переменной имя_функции (параметры).

Пример: вычисление гипотенузы.

#include <iostream>

#include <windows.h>

#include <cmath>

double hypot(double a, double b) //Объявление функции hypot

{

double c;

c=sqrt(a*a+b*b);

return (c);

}

using namespace std;

int main()

{

double a,b,c;

cout<<"Input first cathetus: "; cin >>a;

cout<<"Input second cathetus: ";cin >>b;

c=hypot(a,b); //Вызов функции

cout <<"Hypotenuze is: " << c << endl;

return 0;

}

6.3. Массивы

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

Описание одномерного массива в программе отличается от описания простой переменной наличием после имени квадратных скобок, в которых задается количество элементов массива (размерность): float а [10]; // описание массива из 10 вещественных чисел.

Элементы массива нумеруются с нуля. При описании массива используются те же модификаторы (класс памяти, инициализатор), что и для простых переменных. Инициализирующие значения для массивов записываются в фигурных скобках. Значения элементам присваиваются по порядку. Если элементов в массиве больше, чем инициализаторов, элементы, для которых значения не указаны, то их значения обнуляются: int b[5] = {3, 2, 1}; / / b[0]=3, b[l]=2, b[2]=l, b[3]=0, b[4]=0.

Элементы массива должны быть одного типа.

Пример (одномерных массивов – int, int):

#include <iostream>

#include <windows.h>

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{

CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str());

return text;

}

int main()

{

int mass1[40]={'A','B','C','D','E'};

int mass2[40]={1,20,300,400,5000};

int i;

cout <<Rus("Содержимое первого массива до копирования")<<endl;

for (i=0; i<=15; i=i+1)

{

cout<<mass1[i]<<" ";

}

cout<<endl;

cout<<endl;

cout <<Rus("Содержимое второго массива до копирования")<<endl;

for (i=0; i<=15; i=i+1)

{

cout<<mass2[i]<<" ";

}

cout<<endl;

cout<<endl;

int *pmass1=&mass1[0];

int *pmass2=&mass2[0];

for (i=0; i<=15; i=i+1)

{

pmass2[i+5]=pmass1[i]; //копирование первого массива во второй

}

cout <<Rus("Содержимое второго массива после копирования")<<endl;

for (i=0; i<=15; i=i+1)

{

cout<<mass2[i]<<" ";

}

cout<<endl;

return 0;

}

Поскольку переменная обоих массива заявлена как int, то

- ячейка первого массива имеет длину 4 байта (символьная переменная отображается в массиве как число длиной 1 байт);

- ячейка второго массива имеет длину 4 байта;

- копирование первого массива во второй происходит без проблем.

Пример (одномерных массивов – char, int):

#include <iostream>

#include <windows.h>

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{

CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str());

return text;

}

int main()

{

char mass1[40]={'A','B','C','D','E'};

int mass2[40]={1,20,300,400,5000};

int i;

cout <<Rus("Содержимое первого массива до копирования")<<endl;

for (i=0; i<=15; i=i+1)

{

cout<<mass1[i]<<" ";

}

cout<<endl;

cout<<endl;

cout <<Rus("Содержимое второго массива до копирования")<<endl;

for (i=0; i<=15; i=i+1)

{

cout<<mass2[i]<<" ";

}

cout<<endl;

cout<<endl;

char *pmass1=&mass1[0];

int *pmass2=&mass2[0];

for (i=0; i<=15; i=i+1)

{

pmass1[i+5]=pmass2[i]; //копирование второго массива в первый

}

cout <<Rus("Содержимое первого массива после копирования")<<endl;

for (i=0; i<=15; i=i+1)

{

cout<<mass1[i]<<" ";

}

cout<<endl;

return 0;

}

Поскольку переменная первого массива заявлена как char, то

- ячейка первого массива имеет длину 1 байт;

- ячейка второго массива имеет длину 4 байта;

- копирование второго массива в первый происходит с потерей информации: при выводе mass1[i] с типом переменной char:

1=> 00000001=>1 =>''

20=> 00010100=>20 =>'╕'

300=> 100101100=>44 =>','

400=> 110010000=>144=>'Р'

5000=>100111100010000=>136=>'И'

Другой способ объединения (“склеивания”) строковых массивов:

#include <iostream>

#include <cstring> //включение библиотеки операций со строками

using namespace std;

int main()

{

char s1[4] = "qwert";

char s2[2] = "123";

char s3[6];

strcpy(s3, s1);

strcat(s3, s2);

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

{

cout<<s3[i];

}

return 0;

}

Многомерные массивы задаются указанием каждого измерения в квадратных скобках, например, оператор int matrix [6][8];

задает описание двумерного массива из 6 строк и 8 столбцов. В памяти такой массив располагается в последовательных ячейках построчно. Многомерные массивы размещаются так, что при переходе к следующему элементу быстрее всего изменяется последний индекс. Для доступа к элементу многомерного массива указываются все его индексы, например, matrix[i][j].

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

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

Расположение элементов массива приведено в табл.6.1

Табл. 6.1. Расположение элеменов массива mass1

[0] [0]=1

[0] [1]=2

[0] [2]=0

[0] [3]=0

[1] [0]=3

[1] [1]=0

[1] [2]=5

[1] [3]=0

[2] [0]=6

[2] [1]=7

[2] [2]=8

[2] [3]=9

Пример (двумерного массива – int):

#include <iostream>

#include <windows.h>

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{

CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str());

return text;

}

int main()

{

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

cout <<mass1[1][2]; //выводится 5

return 0;

}

Задание. Выполнить лабораторную работу 6 (Функции).