- •Алгоритмитизация и программирование Лекция 1
- •Общие сведения
- •Модель osi. Понятие об интерфейсах и протоколах. Рекомендация itu-t X.200
- •1.3. Системы счисления
- •Лекция 2
- •2.1. Способы описания алгоритмов функционирования узла коммутации
- •2.2. Описание алгоритмов с помощью диаграммы состояний
- •Variable
- •Input port
- •Input signal
- •2.3. Описание алгоритмов с помощью временной диаграммы
- •Описание алгоритмов с помощью текстового описания
- •Лекция 3
- •3.2. Типы данных
- •3.3. Арифметические операторы
- •3.4. Операторы сравнения
- •3.5. Побитовые операторы
- •3.6. Кодовые таблицы
- •Int main()
- •Лекция 4
- •4.2. Переменные
- •4.3. Ввод/вывод
- •4.4. Арифметические операции
- •4.5. Взаимосвязь чисел и литер
- •Лекция 5
- •5.1. Базовые конструкции
- •5.2. Операторы базовых конструкций
- •If (условие) {операторы 1}
- •Лекция 6
- •6.1. Указатели
- •6.2. Функции
- •6.3. Массивы
- •Лекция 7
- •7.1. Создание и инициализация строк
- •7.2. Функции для работы со строками
- •Лекция 8
- •8.1. Структуры
- •8.2. Формирование контрольной суммы
- •Лекция 9
- •9.1. Операции с файлами
- •9.2. Открытие текстового файла для записи
- •9.3. Открытие текстового файла для чтения
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 (Функции).