
- •Структурированный тип данных
- •Массивы
- •Рассмотрим одномерные массивы.
- •Основные действия с массивами
- •I. Инициализация массива.
- •II. Вывод одномерного массива.
- •Матрицы (двухмерные массивы)
- •Основные действия с двухмерными массивами
- •II. Вывод матриц.
- •Типы алгоритмов на обработку матриц (двухмерных массивов)
- •1. Построчная обработка
- •2. Обработка матрицы по столбцам
- •3. Обработка всей матрицы
- •4. Обработка части матрицы
- •5. Преобразование матрицы
- •6. Построение матриц
- •Модульное программирование. Пользовательские функции.
- •Описание пользовательских функций
- •Формальные и фактические параметры
- •Передача параметров
- •Функции с одним результатом. Оператор return.
- •Передача массива в качестве параметра функции
- •Работа с матрицей в методах класса
- •Структуры
- •Работа со структурами
6. Построение матриц
Выделим некоторые подтипы таких задач.
Элементы новой матрицы зависят от своих же индексов.
Элементы матрицы используют одно число.
Построение матрицы на одном или нескольких одномерных или двухмерных массивах.
Модульное программирование. Пользовательские функции.
Все современные языки программирования реализуют (Aлгол, Basic, Фортран, PL/1, Pascal, C, С++, Delphi, и др.) принцип модульного программирования, согласно которому проект (задача, программа) разбивается на логически завершённые части, которые оформляются по определённым правилам. Их чаще всего называют подпрограммами. Во многих языках используются два вида подпрограмм: процедуры и функции (Pascal), которые отличались правилами их оформления и вызова.
В языке С/С++ нет деления подпрограмм на функции и процедуры (как это сделано в Pascal), здесь можно составлять и использовать только функции. Они могут быть как самостоятельными, не включёнными в класс, так и членами класса (в этом случае их называют методами). Но по аналогии с другими языками, функции можно разделить на два вида: функции не возвращающие значение (типа void) и возвращающие значение.
Функция типа void аналогична процедуре Pascal (procedure), а функция с возвращаемым с помощью return единственным значением похожа на функцию Pascal (function).
Замечание. В языке С/С++ функции не могут быть вложенными, т.е. невозможно определить (описать) одну функцию внутри другой.
Описание пользовательских функций
Описать пользовательские функции можно несколькими способами.
1 способ.
1) Перед функцией void main() записываем прототип (заголовок) функции.
Формат прототипа функции:
[static или extern] <тип_результата> <имя-функции> (<описание формальных параметров>);
где [static или extern]- необязательный параметр указывающий область видимости функции;
<тип_результата> - для функций не возвращающих значение всегда равен void, для функций возвращающих значение указывается соответствующий тип (int, char, short, long, float, double, long double и т.д.);
<имя-функции> - в соответствии с правилами записи идентификаторов.
<описание формальных параметров> - описание всех аргументов функции с указанием их типа. Пользовательская функция может не иметь параметров, в этом случае в функцию ничего не передается, а круглые скобки остаются пустыми.
Например,
int print_num(i,j);
void LINE1();
void LINE2(int Len, int y, char ch);
Замечание. При описании прототипа функции всегда в конце указывается символ « ; ».
2) После функции void main() (в конце программы) приводится описание объявленной функции по следующему формату:
<тип_результата> <имя-функции> (<описание формальных параметров>)
{
<тело функции>;
//return <значение>;
}
где return <значение>; указывается лишь для функций, которые возвращают значение, если функция ничего не возвращает, то return <значение>; не указывается.
3) В теле функции осуществляется вызов описанной функции.
Например. Дважды вывести строку из 40 звездочек, затем вывести на экран запрашиваемый символ в заданной строке.
#include <iostream.h>
#include <conio.h>
void LINE1(); // Прототип (заголовок) функции
void LINE2(int Len, int y, char ch);
void main()
{
cout<<"Тестирование функции: \n Первая строка ";
LINE1(); // Вызов функции.
cout<<"Вторая строка";
LINE1();
LINE2 ( 20 , 5 , '*');//20 звездочек в 5 строке
int LEN, Y;
char Ch;
cout<<"Введите количество символов и номер строки ";
cin>>LEN>>Y;
cout<<"Введите символ ";
cin>>Ch;
LINE2(LEN, Y, C);//LEN символов Ch в строке Y
getch()
} // Конец функции main()
// Повторяем заголовок функции без символа “;” в конце
void LINE1()
{
int i;
cout<<”\n”;
for (i=1; i<=40; i++) cout<<'*';
cout<<”\n”;
}
//описание второй функции
void LINE2(int Len, int y, char ch)
{ gotoxy(1,y);
for (int i=1; i<=Len; i++)
cout<<ch;
cout<<”\n”;
}
2 способ.
1) Перед функцией void main() описываем пользовательскую функцию.
Формат описания функции:
[static или extern] <тип_результата> <имя-функции> (<описание формальных параметров>)
{
<тело функции>;
//return <значение>;
}
2) В теле функции осуществляется вызов описанной функции (см. лабораторные работы).