Форма защиты лабораторных работ

Динамическое выделение памяти

 

ОБЩЕЕ ЗАДАНИЕ

Разработать 2 консольных приложения для работы с одномерными массивами (выделять память двумя способами: с помощью функций malloc и операции new). В каждом приложении создать 3 динамических одномерных массива (размерность задаем с клавиатуры) со случайными числами (заполнение организовать в отдельной процедуре). Суммировать соответствующие значения двух массивов в третий. Очистить память.

 

// Комментарий:

Способы работы с динамической памятью:

а) Первый использует семейство функций malloc (free для очистки памяти) (язык C);

идентификатор = (тип_идентификатора*) malloc (sizeof(тип_идентификатора))

 

б) Второй использует операции new и delete

тип_данных *имя_указателя = new тип_данных;

 

#include <iostream>

#include <ctime>

using namespace std;

void vvod_matr(int n, int *m)

{

int i;

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

{

m[i]=rand()/10;

cout << m[i] << ' ';

}

cout << endl;

}

 

int main()

{

srand (time(0));

int N; cout << "Vvedite razmer: "; cin >> N;

 

int *A = new int[N]; // или отдельно int *A; A = new int[N];

int *B; B = new int[N];

int *C = new int[N];

 

vvod_matr(N,A);

vvod_matr(N,B);

for (int i = 0; i < N; i++) {

C[i]=A[i]+B[i];

}

 

for (int i = 0; i < N; i++) cout << " znachenie " << i << " elementa massiva A = " << A[i] << endl;

for (int i = 0; i < N; i++) cout << " znachenie " << i << " elementa massiva B = " << B[i] << endl;

cout <<endl;

for (int i = 0; i < N; i++) cout << " znachenie " << i << " elementa massiva C (SYMMA) = " << C[i] << endl;

 

system("pause");

delete [] A,B,C; // очистка памяти

return 0;

}

-------------------------------------------------------------------

#include <iostream>

#include <ctime>

using namespace std;

void vvod_matr(int n, int *m)

{

int i;

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

{

m[i]=rand()/10;

cout << m[i] << ' ';

}

cout << endl;

}

 

int main()

{

srand (time(0));

int N; cout << "Vvedite razmer: "; cin >> N;

int *p1, *p2;

p1 = (int*) malloc (sizeof(int));

 

int *A = (int*) malloc (sizeof(int*)*N);

int *B; B = (int*) malloc (sizeof(int*)*N);

int *C = (int*) malloc (sizeof(int*)*N);

 

vvod_matr(N,A);

vvod_matr(N,B);

for (int i = 0; i < N; i++) {

C[i]=A[i]+B[i];

}

 

for (int i = 0; i < N; i++) cout << " znachenie " << i << " elementa massiva A = " << A[i] << endl;

for (int i = 0; i < N; i++) cout << " znachenie " << i << " elementa massiva B = " << B[i] << endl;

cout <<endl;

for (int i = 0; i < N; i++) cout << " znachenie " << i << " elementa massiva C (SYMMA) = " << C[i] << endl;

 

system("pause");

free(A); // очистка памяти

free(B);

free(C);

return 0;

}

 


ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ

Форма защиты лабораторных работ

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

В соответствии со своим вариантом:

 

// Е_С2_21) Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от //0 до 1000. Опишите алгоритм, который находит и выводит среднее арифметическое всех элементов массива, //имеющих нечётное значение. Гарантируется, что хотя бы один такое элемент в массиве есть.
// Е_С2_22) Опишите алгоритм подсчета максимального количества //подряд идущих отрицательных элементов в целочисленном массиве длины 30.
// Е_С2_23) Дан целочисленный массив из 30 элемента, //Элементы массива могут принимать значения от (–20) до 20 - сведения о температуре за каждый день ноября. //Опишите алгоритм, который подсчитывает и выводит максимальную температуру среди дней, //когда были заморозки (температура опускалась ниже нуля). //Гарантируется, что хотя бы один день в ноябре была отрицательная температура.
// Е_С2_36) Дан целочисленный массив из 70 элемента. //Опишите алгоритм, позволяющий найти и вывести //наименьшую нечётную сумму двух соседних элементов массива. //Гарантируется, что в массиве есть соседние элементы с нечётной суммой.
// Е_С2_25) Дан целочисленный массив из 30 элемента, //все элементы которого – неотрицательные числа, не превосходящие 10000. //Опишите алгоритм, который находит и выводит минимальное трехзначное число, //записанное в этом массиве. если таких чисел нет, нужно вывести сообщение «Таких чисел нет».
// Е_С2_26) Дан целочисленный массив из 30 элементов, //все элементы которого – положительные числа, не превосходящие 100. //Опишите алгоритм, , который находит и выводит номер элемента, //имеющего максимальное количество целочисленных делителей //(если таких элементов несколько, то номер любого из них).
// Е_С2_27) Дан целочисленный массив из 40 элемента, //все элементы которого – целые числа в интервале от -500 до 500. //Опишите алгоритм, который находит и выводит находит среднее арифметическое //всех положительных элементов массива, которые кратны первому элементу (делятся нацело на первый элемент). //Гарантируется, что первый элемент массива положительный.
// Е_С2_28) Дан целочисленный массив из 20 элемента, //все элементы которого – целые числа в интервале от -1000 до 1000. //Опишите алгоритм, который находит находит минимальное значение //из всех нечетных элементов массива, которые делятся на 5. //Гарантируется, что хотя бы один такой элемент существует.
// Е_С2_29) Дан целочисленный массив из 30 элемента, //все элементы которого – целые числа в интервале от 0 до 1000. //Опишите алгоритм, позволяющий найти и вывести сумму элементов массива, кратных тринадцати. //Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого делится на тринадцать.
// Е_С2_30) Дан целочисленный массив из 30 элемента, //все элементы которого – целые числа в интервале от 0 до 1000. //Опишите алгоритм, позволяющий найти среднее арифметическое нечётных трехзначных чисел, //записанных в этом массива. //Если ни одного такого числа нет, нужно вывести сообщение об этом.
// Е_С2_31) Дан целочисленный массив из 30 элемента, //все элементы которого – целые числа в интервале от 0 до 100. //Опишите алгоритм, позволяющий найти произведение элементов массива, //которые имеют чётное значение и не оканчиваются на 0. //Гарантируется, что в исходном массиве есть хотя бы один элемент, //значение которого чётно и не оканчиваются на 0.

--------------------------------------------------

// двумерный

#include <iostream>

#include <cstdlib>

#include <ctime>

using namespace std;

void vvod_matr(int n, int **a)

{

int i,j;

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

{

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

{

a[i][j]=rand()%5;

cout << a[i][j] << ' ';

}

cout << endl;

}

}

int main()

{

srand (time(0));

int i,j,n,k,e,**A,**B,**C,**D;

cout << "Vvedite n: " ;

cin >> n;

A=(int**) malloc(sizeof(int*)*n);

for (j=0; j<n; j++) A[j]=(int*) malloc (sizeof(int*)*n);

B=(int**) malloc (sizeof(int*)*n);

for (j=0; j<n; j++) B[j]=(int*) malloc(sizeof(int*)*n);

C=(int**) malloc(sizeof(int*)*n);

for (j=0; j<n; j++) C[j]=(int*) malloc(sizeof(int*)*n);

D=(int**) malloc(sizeof(int*)*n);

for (j=0; j<n; j++) D[j]=(int*) malloc(sizeof(int*)*n);

 

vvod_matr(n,A);

vvod_matr(n,B);

vvod_matr(n,C);

vvod_matr(n,D);

 

e=0;

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

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

{

for (k=0; k<n; k++)

{

e=e+B[k][j]*C[i][k];

}

B[i][j]=e;

e=0;

}

 

e=0;

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

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

{

for (k=0; k<n; k++)

{

e=e+B[k][j]*D[i][k];

}

D[i][j]=e;

e=0;

}

 

 

for (i=0; i>j; i++)

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

{

A[i][j]=A[j][i];

{

cout << A[j][i] << ' ';

}

cout << endl;

}

 

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

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

{

D[i][j]=D[i][j]-A[i][j];

}

 

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

{

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

{

cout << D[i][j] << ' ';

}

cout << endl;

}

system("PAUSE");

return EXIT_SUCCESS;

}