Курс ПЯВУ 2 сем / Практические / Пр №14.Динамическая память
.odtПрактическое занятие № 14. Динамическая память.
Оглавление
1. Выделение ДП для переменных.
2. Выделение ДП для одномерного массива.
3. Выделение ДП для матрицы 1 метод
-
Выделение ДП для матрицы 2 метод.
-
Выделение ДП для переменных с помощью фунекций.
-
Выделение ДП для массива с помощью функций.
-
Выделение ДП для массивов с помощью функций и операторов.
-
Переопределение ДП.
-
Определение свободной памяти.
-
Домашняя работа.
1.Выделение динамической памяти для переменных.
//Выделение динамической памяти для переменных.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int *i;
i=new int;
*i=5;
printf("i= %i\n",*i);
delete i;
char *c;
c=new char;
*c='f';
printf("i= %c\n",*c);
delete c;
float *f;
f=new float;
*f=5.5;
printf("i= %f\n",*f);
delete f;
system("pause");
return 0;
}
//5
//f
//5.5
//Выделение, запись и распечатка из динамического массива.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int i, N; // размер массива (заранее неизвестен)
int *A; // указатель для выделения памяти
printf ("Размер массива > "); // ввод размера массива
scanf ("%d", &N);
A = new int [N]; // выделение памяти
for (i = 0; i < N; i ++ ) { // дальше так же, как для массива
printf ("\nA[%d] > ", i+1);
scanf ("%d", &A[i]);
}
for (i = 0; i < N; i ++ ) { // дальше так же, как для массива
printf ("\nA[%d] > %d ",i, A[i]);}
// здесь сортировка и вывод на экран
delete[] A; // освободить память
system("pause");
return 0;
}
//12
//11
//10
//9
//8
//7
//6
//5
//4
//3
//2
//1
// Выделение запись и считывания из динамической памяти матрицы
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int i,k, j,n,m,nm; // размер массива (заранее неизвестен)
int *A; // указатель для выделения памяти
printf ("Размер массива > "); // ввод размера массива
scanf ("%d%d", &n,&m);
int b[n][m];
nm=n*m;
A = new int [nm]; // выделение памяти
for (i = 0; i < nm; i++ )
scanf ("%d", &A[i]);
for (i = 0; i < nm; i++ )
printf ("%d ", A[i]);
k=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{b[i][j]=A[k];k++;}
printf("\n");
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%i ", b[i][j]);printf("\n");}
// здесь сортировка и вывод на экран
delete A; // освободить память
system("pause");
return 0;
}
//3 4
//1 2 3 4 5 6 7 8 9 10 11 12
//1 2 3 4 5 6 7 8 9 10 11 12
//1 2 3 4
//5 6 7 8
//9 10 11 12
// Выделение запись и считывания из динамической памяти матрицы 2 вариант.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{char c;
int i,k, j,n,m,nm; // размер массива (заранее неизвестен)
printf("K-vo strok i stolbzov\n");
scanf("%i%i",&m,&n);
int **a2=new int *[n]; //n строк
for (i=0;i<n; i++)
a2[i]=new int[m];
printf("Vvesti masiv M х N elementov");
for (i=0;i<m;i++)
for (j=0; j<n;j++)
scanf("%i",&a2[i][j]);
for (i=0;i<m;i++){
for (j=0; j<n;j++)
printf("%i ",a2[i][j]);printf("\n");}
for (i=0;i<m;i++)
delete[]a2[i];
system("pause");
return 0;
}
//2 5
//1 2 3 4 5
//6 7 8 9 10
//Выделение динамической памяти для переменных с помощью функций.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include <malloc.h>
int main()
{
int *i;
i= (int*)malloc(sizeof(int));
*i=6;
printf("i= %i\n",*i);
free(i);
char *c;
c= (char*)malloc(sizeof(char));
*c='f';
printf("i= %c\n",*c);
free (c);
float *f;
f= (float*)malloc(sizeof(float));
*f=5.6;
printf("i= %f\n",*f);
free (f);
system("pause");
return 0;
}
//6
//f
//5.6
//Выделение, запись и распечатка из динамического массива с помощью функций.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int i, N; // размер массива (заранее неизвестен)
int *A; // указатель для выделения памяти
printf ("Размер массива > "); // ввод размера массива
scanf ("%d", &N);
A = (int*)malloc(N*sizeof(int)); // выделение памяти
for (i = 0; i < N; i ++ ) { // дальше так же, как для массива
printf ("\nA[%d] > ", i+1);
scanf ("%d", &A[i]);
}
for (i = 0; i < N; i ++ ) { // дальше так же, как для массива
printf ("\nA[%d] > %d ",i, A[i]);}
// здесь сортировка и вывод на экран
free (A); // освободить память
system("pause");
return 0;
}
//12
//11
//10
//9
//8
//7
//6
//5
//4
//3
//2
//1
// Выделение запись и считывания из динамической памяти матрицы 2 вариант.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{char c;
int**a2;
int i,k, j,n,m,nm; // размер массива (заранее неизвестен)
printf("K-vo strok i stolbzov\n");
scanf("%i%i",&n,&m);
a2=(int**)malloc(m*sizeof(int*)) ; //n строк
for (i=0;i<n; i++)
a2[i]=(int*)malloc(n*sizeof(int));
printf("Vvesti masiv M х N elementov");
for (i=0;i<m;i++)
for (j=0; j<n;j++)
scanf("%i",&a2[i][j]);
for (i=0;i<m;i++){
for (j=0; j<n;j++)
printf("%i ",a2[i][j]);printf("\n");}
for (i=0;i<n;i++)
free (a2[i]);
free (a2);
system("pause");
return 0;
}
//2 5
//1 2 3 4 5
//6 7 8 9 10
//Выделение динамической памяти для переменных с помощью функций и операторов.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include <malloc.h> // Библиотека функций управления памятью
#define n1 10
#define n2 12
int main()
{
int i;
double *pd1,*pd2; // Массивы динамических переменных
pd1=new double[n1]; // Выделение памяти под ДМ
pd2 = (double*)malloc(n2*sizeof(double));
//if (pd1 ==NULL || pd2==NULL) return;
for (i=0; i<n1; i++) pd1[i]=0; // Работа с ДМ
for (i=0; i<n2; i++) pd2[i]=i;
for (i=0; i<n1; i++)
printf("%f ",pd1[i]);
printf("\n");
for (i=0; i<n2; i++)
printf("%f ",pd2[i]);
printf("\n");
delete [ ]pd1; // Освобождение памяти
free(pd2);
system("pause");
return 0;
}
//Выделение памяти с помощью calloc/
#include <stdlib.h>
#include <stdio.h>
int main(void)
{int i;
int* ptr=(int*)calloc(10,sizeof(int));
int s=0;
for(i=0;i<10;i++)
scanf("%d", &ptr[i]);
for(i=0;i<10;i++)
s+=ptr[i];
printf("Summa=%d\n",s);
free(ptr);
system("pause");
return 0;
}
// 1 2 3 4 5 6 7 8 9 10
//55
//Переопределение динамического массива.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define n 10
int main()
{
int *p,*q,i;
p= (int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
p[i]=i;
for(i=0;i<n;i++)
printf("%d ",p[i]);
printf("\n");
q=(int*)realloc(p,2*n*sizeof(int));
p=q;
for(i=0;i<2*n;i++)
p[i]=i;
for(i=0;i<2*n;i++)
printf("%d ",p[i]);
printf("\n");
free(p);
system("pause");
return 0;
}
//0 1 2 3 4 5 6 7 8 9
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
// Определение свободной динамической памяти
#include<stdio.h>намического массив
#include<stdlib.h>
#include<math.h>
#include<malloc.h>
#define n 10
int main()
{
int *p,*q,i;
unsigned long r;
p= (int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
p[i]=i;
for(i=0;i<n;i++)
printf("%d ",p[i]);
printf("\n");
r=coreleft();
printf(" Free=%d \n",r);
q=(int*)realloc(p,2*n*sizeof(int));
p=q;
for(i=0;i<2*n;i++)
p[i]=i;
for(i=0;i<2*n;i++)
printf("%d ",p[i]);
printf("\n");
r=coreleft();
printf(" Free=%d \n",r);
free(p);
system("pause");
return 0;
}
//0 1 2 3 4 5 6 7 8 9
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Домашняя работа.
Записать массив чисел с клавиатуры в динамическую память с помощью операторов и функций. Упорядочить по возростанию и вывести на экран.