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

Лабораторная работа Контроллер памяти

.doc
Скачиваний:
7
Добавлен:
20.05.2014
Размер:
46.59 Кб
Скачать

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ЭЛЕКТРОНИКИ И МАТЕМАТИКИ

(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

Кафедра кибернетики

Лабораторная работа №2

по дисциплине

«Математическое обеспечение ЭВМ»

на тему: «Контроллер памяти»

Выполнила студентка группы М-75

Катышева С.Н.

Проверил проф. д.т.н.

Гостев И.М.

Москва 2009

Задание: Продемонстрировать навыки работы с интерфейсом контроллера памяти.

Программа на языке C реализует следующую задачу:

Формируется матрица A(M,N) указанного размера. Заполняется случайными числами из диапазона от 0 до 99.

Следует найти первый минимальный элемент матрицы и удалить строку, его содержащую.

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

int main()

{

int i, j, **a, min, imin, N, M;

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

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

if (a==NULL)

{ printf("Net pam'ati\n");

exit(1); }

printf("VVedite 4islo strok i stolbcov: M i N=");

scanf( "%d%d\n\n",&M,&N);

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

a[i] = (int*)malloc(N * sizeof(int)); // Выделение памяти под каждую строку

//Формирование матрицы А

printf("A = \n");

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

{ for(j=0; j<N; j++)

{ a[i][j] = rand()%50;

printf("%3d", a[i][j]);

}

printf("\n");

}

fprintf(stderr,"Vydeleno pam'ati: %d baj't(a)\n", (sizeof **a)*M*N);

//Нахождение минимального элемента

min = a[0][0];

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

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

if(a[i][j] < min)

{

min = a[i][j];

imin = i;

}

free(a[imin]);//Освобождение памяти, выделенной для строки с //минимальным элементом

//Удаление строки с минимальным элементом

for(i=imin; i<M-1; i++)

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

a[i] = a[i+1];

//Печать номера удалённой строки

printf("udalena %d-ja stroka\n", (imin+1));

//Печать новой матрицы

printf("\nNew A = \n");

for(i=0; i<M-1; i++)

{

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

printf("%3d", a[i][j]);

printf("\n");

}

//Освобождение памяти

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

free(a[i]);

free(a);

getch();

return 0;

}

В программе использовались функции:

malloc() - принимает в качестве аргумента размер выделяемой области в байтах; возвращает нетипизированный указатель (void*) на область памяти заявленного размера или NULL в случае, если выделить память невозможно. Содержимое выделяемой области памяти не определено.

#include <stdlib.h>

void *malloc(size_t size);

free() -освобождает ранее выделенную память, на которую ссылается

указатель a и делает её доступной для последующего выделения функциями

malloc(), calloc()или realloc().Если a равен NULL, то ничего не происходит. Аргумент функции free — это указатель на начало выделенной когда-то памяти.

Функция free() ничего не возвращает.

#include <stdlib.h>

void free (void *ptr);

Результат работы программы:

VVedite 4islo strok i stolbcov: M i N=6

7

q

A =

46 30 32 40 6 17 45

15 48 26 4 8 21 29

42 10 12 21 13 47 19

41 40 35 14 9 2 21

29 16 31 1 45 43 34

10 29 45 11 42 39 38

Vydeleno pam'ati: 84 baj't(a)

udalena 5-ja stroka

New A =

46 30 32 40 6 17 45

15 48 26 4 8 21 29

42 10 12 21 13 47 19

41 40 35 14 9 2 21

10 29 45 11 42 39 38

Спасибо Linux forever! за помощь в написании программы)

4