Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмизация и программирование.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5.59 Mб
Скачать

Лекция 6

6.1. Функции

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

Синтаксис ссылки на функцию: тип_возвращаемой_переменной имя_функции (параметры).

Пример программы без объявления функции.

#include <iostream>

. . .

using namespace std;

int main()

{

//начало рограммы

. . .

вычисление некого значения y=f(x1,y1,z1); //y – сложная конструкция

продолжение программы

. . .

вычисление некого значения y=f(x2,y2,z2); //y – сложная конструкция

продолжение программы

. . .

вычисление некого значения y=f(x3,y3,z3); //y – сложная конструкция

продолжение программы

. . .

return 0;

}

Пример программы с объявлением в функции заданных исходных данных.

#include <iostream>

. . .

объявление функции y=f(x, y, z); //возвращает y=f(x,y,z);

using namespace std;

int main()

{

//начало рограммы

. . .

y=f(x1,y1,z1); //обращение к функции y

продолжение программы

. . .

y=f(x2,y2,z2); //обращение к функции y

продолжение программы

. . .

y=f(x3,y3,z3); //обращение к функции y

продолжение программы

. . .

return 0;

}

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

#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.2. Массивы

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

Описание одномерного массива в программе отличается от описания простой переменной наличием после имени квадратных скобок, в которых задается количество элементов массива (размерность): 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;

for (i=0; i<=15; i=i+1) //копирование первого массива во второй

{ mass2[i+5]=mass1[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;

for (i=0; i<=15; i=i+1) //копирование второго массива в первый

{ mass1[i+5]=mass2[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=>'И'

Cпособ объединения (“склеивания”) символьных массивов:

#include <iostream>

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

using namespace std;

int main()

{

char s1[8] = "q wert ";

char s2[4] = "123";

char s3[10];

strcpy(s3, s1); //копирование 1 строки в 3

strcat(s3, s2); //добавление 2 строки в конец 3

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

{

cout<<s3[i]; //содержимое 3 строки

}

return 0;

}

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

int matrix [6][8];

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

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

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

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

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

j=0

j=1

j=2

j=3

i=0

[0] [0]=1

[0] [1]=2

[0] [2]=0

[0] [3]=0

i=1

[1] [0]=3

[1] [1]=0

[1] [2]=5

[1] [3]=0

i=2

[2] [0]=6

[2] [1]=7

[2] [2]=8

[2] [3]=9

Возможно выборочная запись переменной массива:

mass1[0][3]=100;

Пример (двумерного массива – 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} };

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

{

cout<<Rus("Cтрока ")<<i<<": ";

for (int j=0; j<=3; j++)

{

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

}

cout<<endl;

}

cout<<"***********************"<<endl;

mass1[0][3]=100;

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

{

cout<<Rus("Cтрока ")<<i<<": ";

for (int j=0; j<=3; j++)

{

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

}

cout<<endl;

}

return 0;

}