Функции пользователя и динамическое распределение памяти — КиберПедия 

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

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Функции пользователя и динамическое распределение памяти

2017-05-23 281
Функции пользователя и динамическое распределение памяти 0.00 из 5.00 0 оценок
Заказать работу

Цель работы: Выработка навыков разработки функций и компоновки программы из нескольких функций (файлов) на примерах решения типовых задач линейной алгебры (операций с массивами). Знакомство с методами обработки динамических массивов.

 

Основное задание

Составить текст программы, состоящей из функций, реализующих операции над матрицами произвольного размера, представленных в виде динамических массивов, в соответствии с вашим вариантом задания. Для этого необходимо:

1) Познакомиться с функциями input () и output (), предназначенных для ввода и вывода соответственно элементов матриц произвольного размера.

2) Разработать функции, осуществляющие набор матричных операций в соответствии с вашим вариантом.

3) Дополнить функцию main() необходимыми операторами и операндами.

Рекомендации по программированию

 

Рассмотрим пример функции, которая вводит с клавиатуры матрицу размером m x n: m – количество строк, n - количество столбцов, выделяет необходимую область памяти для размещения ее элементов и осуществляет ввод их значений в память ПЭВМ.

int ** input(int n, int m)

{

int i,j;

int **a;

//Выделение динамической памяти для элементов матрицы

a= (int**)malloc(n*sizeof(int*));

for(i=0; i<m; i++)

{

a[i]=(int*)malloc(n* sizeof(int*));

for(j=0;j<n;j++)

{

a[i][j]=0; //Обнуление ячеек памяти

}

}

for(i=0; i<m; i++)

for(j=0;j<n; j++)

{

printf(“\nВведите элемент матрицы A(%d,%d) элемент массива:”,i+1,j+1);

scanf(“%d”,&a[i][j]);

}

return a;

}

Для динамического выделения свободной памяти в данном фрагменте программы используется функция malloc(). Она возвращает указатель типа void. Для правильного использования значение этой функции надо преобразовать к указателю на соответствующий тип. При успешном выполнении операции malloc() возвращает указатель на первый байт свободной памяти требуемого размера. Если достаточного количества памяти нет, то возвращается значение 0 (нулевой указатель). Чтобы определить количество байт, необходимых для переменной, используют операцию sizeof.

Для освобождения динамической памяти используют функцию free с прототипом void * free(void *p); где *p – указатель на первый байт выделенной памяти. Прототипы обеих функций находятся в заголовочном файле stdlib.h.

Динамическое распределение памяти удобно тогда, когда заранее неизвестно количество используемых переменных (в нашем случае - это m и n).

Для выделения динамической памяти можно так же использовать функцию

new тип [количество элементов].

Рассмотрим теперь функцию, осуществляющую вывод матрицы на экран дисплея.

void output(int **z,int m, int n)

{

int i,j;

printf(“\n Результирующая матрица\n”);

for(i=0; i<m; i++)

{

for(j=0; j<m; j++)

printf(“%8d”,z[I][j]);

 

printf(“\n”);

}

}

Для того, чтобы начать выполнение работы составьте главную функцию main(), в которую внесите описанные выше функции и функции обработки матриц в соответствии с вашим заданием. В начало программы нужно поместить директивы и декларации.

Примерный вид функции main().

 

#include<stdio.h>

#include<conio.h>

#include<alloc.h>

int **input (int,int);

//Объявление функций обработки, использующих функцию input

int fproi(int**,int**,int,int);

……………………………

void ouput(int**,int,int);

 

void main(void)

{

int m,n;

int **p, **q;

clrscr();

puts(“ Введите размер исходной матрицы”);

printf(“число строк=”);

scanf(“%d”,&m);

printf(“число столбцов=”);

scanf(“%d”,&n);

//Вызов функций

p= input (m,n);

output (p,m,n);

q= input (m,n);

output (p,m,n);

fproi(p,q,m,n);

…………………………

}

При составлении программы воспользуйтесь разработками предыдущей лабораторной работы № 5.

 

 

Варианты заданий

 

1. T,U,S В вариантах заданий использованы следующие

2. MQB обозначения:

3. S,M,T Т- транспонирование матрицы.

4. B,U,C С- вычисление следа матрицы.

5. Q,S,N U- умножение матрицы на число.

6. C,Q,T M- перемножение матриц.

7. U,T,N Q- возведение матрицы в квадрат.

8. S,N,U S- сложение матриц

9. C,N,T B- вычитание матриц.

10. M,N,Q N- вычисление нормы матрицы.

11. C,N,T

12. B,N,M,

13. C,S,T

14. Q,C,B

15. Сравнить суммы элементов главных диагоналей. Переставить местами два столбца.

16. Сравнить суммы элементов двух столбцов. Переставить местами две строки

17. Сравнить суммы элементов двух строк. Найти наибольшую сумму строк

18. Проверить: является ли матрица магическим квадратом? Найти наибольший элемент в матрице.

 

Содержание отчета

 

1.Постановка задачи.

2.Схемы алгоритмов функций.

3.Распечатки текстов программы с комментариями.

 

Контрольные вопросы

1. В чем состоит отличие объявление функции от ее определения?

2. Как объявить функцию с переменным числом параметров?

3. Какие типы объектов могут быть использованы в качестве формальных параметров?

4. Что такое локальные объекты? Какова их область видимости и «время жизни»?

5. В чем состоит отличие автоматических переменных от статических?

6. Объясните механизм передачи параметров по значению, по указателю, по ссылке.

7. Какой массив называется динамическим?

 

Работа № 7


Поделиться с друзьями:

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.009 с.