Вы находитесь на странице: 1из 6

Министерство Образования Республики Молдова

Технический Университет Молдовы


Факультет Вычислительной Техники, Информатики и Микроэлектроники
Кафедра Прикладной Информатики

Отчёт
По предмету «Программирование компьютера»
Лабораторная работа №5

Тема: Динамическое выделение памяти для двумерных массивов. Использование функций и


указателей на языке Си.

Выполнена студентом IA-204 Бырна Алексей

Проверено Asistent Universitar Игнатов Максим

Кишинёв, 2020
Оглавление
Цель работы ....................................................................................................................................................... 3
Задание .............................................................................................................................................................. 3
Результат выполнения программы ................................................................................................................ 3
Код программы .............................................................................................................................................. 4
Вывод ............................................................................................................................................................. 6

2
Цель работы
Программирование алгоритмов для обработки двумерных массивов с использованием
функций, указателей и динамического выделения памяти для массива.

Задание
Для заданного двумерного массива из n строк и m столбцов вывести на
экран следующее меню операций:

1. Динамическое выделение памяти для двумерного массива


2. Ввод элементов массива с клавиатуры
3. Заполнение массива случайными числами
4. Сортировка элементов массива (по вариантам)
5. Вывод элементов массива на экран
6. Освобождение памяти, выделенной для массива
7. Окончание работы программы

Разработать функции для реализации операций меню.

Вариант 4(пункт 4): отсортировать столбцы массива по возрастанию с


помощью метода линейного выбора.
Результат выполнения программы

3
Код программы
#include<stdio.h>
#include <stdlib.h>
#include<time.h>

int** a;
int n, m;

void crArr(){
printf("* Äèíàìè÷åñêîå âûäåëåíèå ïàìÿòè äëÿ äâóìåðíîãî ìàññèâà\n");
do {
printf("Ââåäèòå äîïóñòèìûå çíà÷åíèÿ N è M.\n");
printf("n = "); scanf("%d", &n);
printf("m = "); scanf("%d", &m);
} while(n<1 || m<1);

a = new int* [n];


for(int i=0; i<n; i++)
a[i] = new int[m];
}

void swap(int &a1, int &b1){


int t;
t=a1;
a1=b1;
b1=t;
}

void meArr(){
printf("* Ââîä ýëåìåíòîâ ìàññèâà ñ êëàâèàòóðû\n");
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
4
scanf("%d", &a[i][j]);
}

void showArr(){
printf("* Âûâîä ýëåìåíòîâ ìàññèâà íà ýêðàí\n");
for(int i=0; i<n; i++){
for(int j=0; j<m; j++)
printf("%d ", a[i][j]);
printf("\n");}
}

void clear(){
for(int i=0; i<n; i++)
delete[] a[i];
delete[] a;
n=0;m=0;
}

void randomarr(){
srand(time(0));
int b1, b2;
printf("Ëåâàÿ ãðàíèöà: "); scanf("%d", &b1);
printf("Ïðàâàÿ ãðàíèöà: "); scanf("%d", &b2);
if(b2<b1){swap(b1,b2); printf("(!): Ïðåäóïðåæäåíèå î íåïðàâèëüíî ââåä¸ííûõ ãðàíèöàõ. Çíà÷åíèÿ ïîìåíÿíû
ìåñòàìè.\n");
}
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
a[i][j]= b1 + rand() % (b2-b1+1);
}

void sortarr(){
int p, t;
for(int j=0;j<m;j++)
for(int i=0;i<n;i++)
{
p=i;
for(int g=i;g<n;g++)
if(a[g][j]<a[p][j])
p=g;
swap(a[i][j],a[p][j]);}
}

void rus(){
system ("chcp 1251"); system ("cls");
}

int main(){
int sw;
rus();
while(1){

printf("Ìåíþ: "); printf("\n");


printf("1. Äèíàìè÷åñêîå âûäåëåíèå ïàìÿòè äëÿ äâóìåðíîãî ìàññèâà\n");
5
printf("2. Ââîä ýëåìåíòîâ ìàññèâà ñ êëàâèàòóðû\n");
printf("3. Çàïîëíåíèå ìàññèâà ñëó÷àéíûìè ÷èñëàìè\n");
printf("4. Îòñîðòèðîâàòü ñòîáöû ìàññèâà ïî âîçðàñòàíèþ ñ ïîìîùüþ ìåòîäà ëèíåéíîãî âûáîðà\n");
printf("5. Âûâîä ýëåìåíòîâ ìàññèâà íà ýêðàí\n");
printf("6. Îñâîáîæäåíèå ïàìÿòè, âûäåëåííîé äëÿ ìàññèâà\n");
printf("7. Îêîí÷àíèå ðàáîòû ïðîãðàììû\n\n");

printf("Âàø âûáîð: "); scanf("%d", &sw);


switch(sw)
{
case 1: crArr(); break;
case 2: meArr();break;
case 3: randomarr();break;
case 4: sortarr();break;
case 5: showArr();break;
case 6: clear(); break;
case 7: return 0;
}
}
return 0;
}

Вывод
Динамическое выделение памяти позволяет реализовать возможность правильного
выделения памяти для массива. Указатели и функции позволяют удобным и корректным
образов реализовать меню и подобные опции. Таким образом я изучил программирование
алгоритмов для обработки двумерных массивов с использованием функций, указателей и
динамического выделения памяти для массива.

Вам также может понравиться