Определение и объявление функций пользователя. Лекция 10 по алгоритмизации и программированию презентация

Содержание

Определение(описание) и объявление функций пользователя I. Описание функции: заголовок; тело функции. ::= {} ::= () ::=void |  |  ::= ::= [, ] | ПУСТО Если

Слайд 1Лекция 10


Слайд 2Определение(описание) и объявление функций пользователя
I. Описание функции:
заголовок;
тело функции.
::= {

функции>}

<Заголовок функции>::=
<Тип результата> <Имя функции> (<Описание параметров>)

<Тип результата>::=void | <Базовые типы> | 
<Структурированные типы>

<Имя функции>::=<Идентификатор>

<Список параметров>::=<Тип> <Имя> [, <Список параметров>] | ПУСТО

Если тип результата отличен от void, то в теле функции обязательно должен присутствовать оператор return <значение>; , где <значение> – имя переменной, выражение или константа.
Оператор return передает управление вызывающей программе.

<Объявление функции>::=<Заголовок функции>;


Слайд 3Какая задача реализована в этом фрагменте?
Фрагмент программы:
int a[100];
int j,i,n,r;
for (i=1;i=0&&r


Слайд 4Сортировка двоичными (бинарными) вставками
Модификация метода вставок. Пусть элементы массива с А[1]

по А[i-1] уже отсортированы. Нужно вставлять в отсортированную последовательность элемент А[i]. Для поиска места, куда нужно вставлять данный элемент сравниваем его со средним элементом из A[1] …A[i-1], и , если он меньше среднего элемента, то его место ищем в левой половине массива А[1]…A[i-1], иначе в правой половине. Причем дальнейший поиск осуществляем аналогичным способом: методом деления интервала пополам.

Слайд 5void sort_bin_insert (int *a, int n) // Сортировка бинарными вставками
{ int

x,left,right,sred;
for (int i=1; i {
if (a[i-1]>a[i])
{
x=a[i]; // x – включаемый элемент
left=0; // левая граница отсортированной части массива
right=i-1; // правая граница отсортированной части массива
do {
sred = (left+right)/2; // sred – новая "середина" последовательности
if (a[sred] else right=sred-1;
} while (left<=right); // поиск ведется до тех пор, пока левая граница не окажется правее правой границы
for (int j=i-1; j>=left; j--) a[j+1]= a[j];
a[left]= x;
}
}
}

Слайд 6Алгоритм слияния
Объединить («слить») упорядоченные фрагменты массива A: A[k],...A[m] и A[m+1],..., A[q]

в один A[k],..., A[q], естественно, тоже упорядоченный (k≤m≤q). Основная идея решения состоит в сравнении очередных элементов каждого фрагмента, выяснении, какой из элементов меньше, переносе его во вспомогательный массив D (для простоты) и продвижении по тому фрагменту массива, из которого взят элемент. При этом следует не забыть записать в D оставшуюся часть того фрагмента, который не успел себя «исчерпать».

Слайд 7#include
#include
using namespace std;
void Sl(int m[],int k,int q) // или

...int *a
{
// k – нижняя граница упорядоченного фрагмента
// q – верхняя граница фрагмента
int i,j,t,mid,d[20];
i=k;
mid=k+(q-k)/2;
j=mid+1;
t=1;
while (i<=mid && j<=q)
{
if (m[i]<=m[j]) {d[t]=m[i]; i++;}
else { d[t]=m[j]; j++;}
t++;
}
// Один из фрагментов обработан полностью, осталось перенести в D остаток другого фрагмента
while (i<=mid)
{ d[t]=m[i]; i++; t++;}
while (j<=q)
{ d[t]=m[j]; j++; t++;}
for (i=1;i<=t-1; i++) m[k+i-1]=d[i];
}

Слайд 8// Рекурсивная реализация сортировки слиянием
void Sort_Sl(int *m, int i,int j)
{

int t;
if (i// Обрабатываемый фрагмент массива состоит более, чем из одного элемента
if (j-i==1) {
if (m[j]// Обрабатываемый фрагмент массива состоит из двух элементов*)
{ t=m[i]; m[i]=m[j]; m[j]=t;};}
else {
// Разбиваем заданный фрагмент на два
Sort_Sl(m,i,i+(j-i)/2); // рекурсивные вызовы процедуры Sort_Sl
Sort_Sl(m,i+(j-i)/2+1,j);
Sl(m,i,j);
}
}

Слайд 9Двумерные массивы
Двумерный массив (матрица) – одномерный массив одномерных массивов.
 [количество][количество];
Указывается

количество элементов в одномерном массиве, а потом указывается количество элементов в одномерных массивах.

Слайд 10
Матрица — это прямоугольная таблица, составленная из элементов одного типа (чисел,

строк и т.д.). Каждый элемент матрицы имеет два индекса – номера строки и столбца.


Слайд 11Схема выделения памяти под двумерный массив
int A[20][5];
Элементами первого одномерного массива являются

адреса, а второго – целые значения.

Слайд 12При формирование матрицы сначала выделяется память для массива указателей на одномерные

массивы, а затем в цикле с параметром выделяется память под n одномерных массивов.

/*выделение динамической памяти под двумерный динамический массив*/

int** form_matr(int n,int m)
{
//выделение памяти под массив указателей
int **matr=new int*[n];
for(int i=0;i //выделение памяти для массива значений
matr[i]=new int [m];
//возвращаем указатель на массив указателей
return matr;
}

Слайд 14
Освобождение памяти из-под динамического двумерного массива производится в обратном порядке:
for(int i=0;i

delete [] matr[i];
delete [] matr;



Слайд 15Если двумерный массив является формальным параметром функции, то его можно описывать

двумя способами:
int **A // ** – указатель, значением которого будет адрес
int A[ ][<максимальное количество>]
Например, int A[ ][5]

Слайд 16Обращение к элементам двумерного массива


Слайд 17Если при описании двумерного массива задаются значения элементов, то можно не

указывать только количество строк:
int b[ ][5]={{1,2,3,,4}, {5,6,7,8,9}, {10,11,12}};

Слайд 18// Заполнение массива по строкам
for ( i = 0; i

N; i++ )
for ( j = 0; j < M; j++ )
{cout << “A[“< cin >>b[i][j];
}


Слайд 20// Печать по строкам
for ( i = 0; i < N;

i++ )
{
for ( j = 0; j < M; j++ ) cout << b[i][j]<<“ “;
cout <}
// Печать по столбцам
for ( j = 0; j < M; j++ )
{
for ( i = 0; i < N; i++ ) cout << b[i][j]<<“ “;
cout <}



Слайд 21// Суммирование
sum = 0;
for ( i = 0; i

N; i++ )
for ( j = 0; j < M; j++ )
sum += A[i][j];


Слайд 22Матрица А:
12 14 67 45
32 87 45 63
69 45 14

11
40 12 35 15
Максимальный элемент A[2,2]=87
Минимальный элемент A[3,4]=11


Слайд 23#include
#include
using namespace std;
void main()
{
int const N=10;
int const M=15;
int a[N][M];
int i,j,

max,k=0;
max=a[0][0];
for(i=0; i for(j=0; j{
cout<<"? ";
cin>>a[i][j];
}
max=a[0][0]; k=1;
for(i=0; i for(j=0; j if(a[i][j]==max) k++;
else
if(a[i][j]>max) {max=a[i][j]; k=1;}

cout<<"k="<}


Слайд 24Если количество строк и столбцов в двумерном массиве одинаковое, то такой

массив называется квадратным. Например, при n=4:
a00  a01  a02  a03
a10  a11  a12  a13
a20  a21  a22  a23
a30  a31  a32  a33
Диагонали:
i=j – главная диагональ.Элементы: a[i][i], a[j][j];
i+j=n–1 – побочная диагональ. Элементы: a[i][n-1-i],
a[n-1-j][j].

Слайд 25Перебор элементов матрицы
Главная диагональ:
for ( i = 0; i < N;

i++ ) {
// работаем с  A[i][i]
}

Побочная диагональ:

for ( i = 0; i < N; i++ ){
// работаем с  A[i][N-1-i]
}

Главная диагональ и под ней:

for ( i = 0; i < N; i++ )
for ( j = 0; j <=  i ; j++ )
{
// работаем с  A[i][j]
}


Слайд 26#include
#include
using namespace std;
void main()
{
int const N=10;
int a[N][N];
int i,j, k;
for(i=0; i

i++)
for(j=0; j{
cout<<"? ";
cin>>a[i][j];
}
for(i=0; i for(j=0; j {k=a[i][j]; a[i][j]=a[j][i]; a[j][i]=k;}

for(i=0; i {for(j=0; j cout< }
}



Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика