Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C_Kurs_Lekt / DOC_RAZNOE / К лаб 5(Массив выделение памяти Функции)

.pdf
Скачиваний:
10
Добавлен:
13.02.2016
Размер:
86.57 Кб
Скачать

5- лабораторная работа основывается на ЛР №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]: Функция

расчета