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