C_Kurs_Lekt / DOC_RAZNOE / К лаб 5(Массив выделение памяти Функции)
.pdf5- лабораторная работа основывается на ЛР №2.
Пример работы №2 – ниже (написали и разбирали на ленте)
При прочтении файла в Worde – включите режим разметки (для просмотра примечаний) Общая структура программы :
1)Директивы препроцессора
2)Объявления собственных функций
3)Главная функция
a.Определение переменных
b.Выделение памяти под массив
c.Вызовы функций
i.start_data – заполняем массив случайными числами
ii.pech – печатаем исходный массив
iii.raschet – проводим вычисления (увеличиваем значения всех
элементов матрицы на 10)
iv.pech – печатаем обработанный массив
4)Освобождаем память (занимаемою массивом)
5)Пауза, выход
6)После главной функции – следуют реализации собственных функций.
/* Пример передачи динамических двумерных массивов чисел в функции. Лысый Д.А. Приложение к лекции - передача строк и массивов в
функции*/
#include <stdio.h> #include <stdlib.h> #include <conio.h>
void start_data(int, int, double **, double , double); void pech(int, int, double **);
void raschet(int, int, double **);
int main(){ // начало главной функции
int n,m,i;
double a = 5.1, b = 9.3; double **dmas;
/* dmas - указатель на указатель (указатель на массив-матрицу). */ clrscr();// очистка экрана
printf(" N, M =? "); scanf("%d%d",&n,&m);
/* выделяем память для массива указателей. */ dmas=(double **)calloc(n, sizeof(double *));
/* выделяем память для массивов-строк (построчно) и их начальные адреса запоминаем в массиве указателей. */
for (i=0; i<n;i++)
dmas[i]=(double *)calloc(m,sizeof(double));
start_data(n, m, dmas, a, b);
printf("Nachalnye dannye: \n");
pech(n, m, dmas);
raschet(n, m, dmas);
printf("\n Posle rascheta (+10): \n");
pech(n, m, dmas);
for (i=0; i<n;i++) free(dmas[i]);
free(dmas);
Примечание [d1]: Директив
ы препроцессора. Подключаем заголовочные файлы, содержат прототипы функций
Примечание [d2]: Заголовки
(прототипы, объявления) собственных функций
Примечание [d3]: «Блок»
определения переменных
Примечание [d4]: Динамиче
ское выделение памяти под матрицу
Примечание [d5]: Основной,
расчетный блок – ПОСЛЕДОВАТЕЛЬНЫЙ ВЫЗОВ ОПРЕДЕЛЕННЫХ НАМИ ФУНКЦИЙ
Примечание [d6]: Освобожд
аем память (удаляем матрицу из памяти)
getch(); // пауза
return 0; // выход из главной функции – конец программы
}
void start_data(int row, int column, double **mass, double a, double b ){
int i,j;
for (i=0;i<row;i++) for (j=0;j<column;j++)
mass[i][j] = a+(double)rand()/RAND_MAX*(b-a);
}
void pech(int row, int column, double **mass){ int i,j;
for (i=0;i<row;i++){ for (j=0;j<column;j++)
printf(" %7.1lf ", mass[i][j]); printf("\n");
}
}
void raschet (int row, int column, double **mass){ int i,j;
for (i=0;i<row;i++)
for (j=0;j<column;j++) mass[i][j]= mass[i][j] + 10;
}
Для преобразования ЛР№ 2 в № 5 Необходимо «разбить» ЛР №2 на две части и дооформить каждую из частей до законченной программы
Впервой части будем
i.start_data – заполняем массив случайными числами
ii.pech – печатаем исходный массив
++++ |
Запишем результат в файл |
Во второй части:
+++Прочитаем данные из файла
iii.raschet – проводим вычисления
iv.pech – печатаем обработанный массив
Две программы прилагаются, запускать последовательно…
Примечание [d7]: Функция
заполнения массива начальными данными
Примечание [d8]: Функция
печати матрицы
Примечание [d9]: Функция
расчета