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

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

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

2017-05-23 287
Функции пользователя и динамическое распределение памяти 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


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

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

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

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...



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

0.017 с.