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

Курс ПЯВУ 2 сем / Практические / Пр №14.Динамическая память

.odt
Скачиваний:
13
Добавлен:
17.04.2015
Размер:
17.47 Кб
Скачать

Практическое занятие № 14. Динамическая память.

Оглавление

1. Выделение ДП для переменных.

      2. Выделение ДП для одномерного массива.

      3. Выделение ДП для матрицы 1 метод

      1. Выделение ДП для матрицы 2 метод.

      2. Выделение ДП для переменных с помощью фунекций.

      3. Выделение ДП для массива с помощью функций.

      4. Выделение ДП для массивов с помощью функций и операторов.

      5. Переопределение ДП.

      6. Определение свободной памяти.

      7. Домашняя работа.

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

Домашняя работа.

Записать массив чисел с клавиатуры в динамическую память с помощью операторов и функций. Упорядочить по возростанию и вывести на экран.