
2K_programuvanna / 2 mod / lab_11_12_extended_memory[1]
.doc-
Лабораторная робота №11-12
Цель: Опрацювання програм, пов’язаних з проблемами використання динамічної пам’яті. Масиви вказівників, обробка великих масивів.
-
Пример программы
#include <stdlib.h>
#include <stdio.h>
void vvod(int **arr, int ncols, int nrows){
int i,j;
for (i = 0; i<nrows; i++)
for (j=0; j<ncols; j++){
scanf("%d",&arr[i][j]);
//scanf("%d", *(arr+i)+j);
}
}
int main(){
int nrows= 2, ncols =2,i;
int **array = (int **)malloc(nrows * sizeof(int *));
if (!array) return 1;
for(i = 0; i < nrows; i++) {
array[i] = (int *)malloc(ncols * sizeof(int));
(int *)malloc(10 * sizeof(int));
if(!array[i]) return 1;
}
…
//array[0][0] = 5;
//*(*(array+2)+2)=6;
vvod(array,nrows,ncols);
…
for(i = 0; i < nrows; free(array[i++]));
free(array);
return 0;
}
-
На что обратить внимание:
Некорректным использованием указателей является:
-
Попытка работы неинициализированым, с указателем.
-
Утрея ссылки на выделенную область памяти, при присваивание значения одного указателя другому.
-
Неосвобождение памяти выделеной функцией malloc().
-
Попытка вернуть в качестве результата адрес локальной переменной класса auto.
-
Варианты заданий
-
Задана матрица А(n,m). Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (или один из них) оказался в левом верхнем углу матрицы.
-
Задан массив А(n,n). Записать на место отрицательных элементов матрицы нули, а на место положительных - единицы. Вывести матрицу на экран.
-
Задана матрица А(n,m). Найти максимальный по модулю элемент матрицы. Переставить строки и столбцы матрицы таким образом, чтобы максимальный по модулю элемент был расположен на пересечении k-й строки и k-го столбца.
-
Задан массив А(n,n). Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали. Сформировать массив из элементов побочной диагонали.
-
Задана матрица А(n,n). Преобразовать матрицу по правилу: строку с номером n сделать столбцом с номером n, и наоборот. Подсчитать сумму элементов, лежащих над побочной диагональю.
-
Задана матрица А(n,m). Определить номера тех строк, которые совпадают одномерным массивом B(m). Если таких строк нет, выдать соответствующее сообщение.
-
Дана квадратная матрица размером n х n. Поменять местами элементы главной и побочной диагоналей. Определить сумму элементов, лежащих на периметре.
-
Дан массив А(n,n).Найти число элементов массива a(i,j)>t и просуммировать все эти элементы.
-
Дан массив A(n,n). Вычислить сумму всех неотрицательных элементов, а также их количество.
-
Дан массив A(n,n). Сформировать вектор В(t) из a(i,j) < 0. На печать вывести исходный массив, полученный вектор и его размерность.
-
Дан массив A(n,n). Написать программу его поворота на 900 относительно его центра. На печать вывести исходный и повернутый массивы.
-
Дан массив A(n,n). Найти сумму всех его элементов, расположенных выше главной диагонали.
-
Задана матрица А(n,n). Найти суммы и произведения элементов, стоящих на главной и побочной диагоналях.