русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Освобождение выделенной динамической памяти.


Дата добавления: 2015-07-23; просмотров: 918; Нарушение авторских прав


Динамическая память освобождается с помощью операции delete[] имя массива, например, для одномерного массива, delete[]a; Освобождение памяти, выделенной для двумерного массива b, выглядит следующим образом:

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

delete [ ] b[i];

delete [ ] b;

Время "жизни" динамического массива определяется с момента выделения динамической памяти до момента ее освобождения.

 

2. Алгоритмы обработки двумерных массивов

2.1 Ввод и вывод матрицы

//Ввод матрицы float x[10][10]; puts("Введите m,n"); scanf("%d %d",&m,&n); for(i=0;i<m;i++) for(j=0;j<n;j++) { printf("Введите x[%d][%d]=",i,j); scanf("%f",&x[i][j]); }   // Вывод матрицы puts("Матрица x:"); for(i=0;i<m;i++) { for(j=0;j<n;j++) printf("%8.2f",x[i][j]); printf("\n"); }

Примечание.Ввод-вывод динамической матрицы отличается от ввода-вывода статической матрицы лишь описанием матрицы


2.2 Определить количество элементов, больших заданного А и расположенных в строках с нечетными номерами

Графическая схема алгоритма

Таблица соответствия

Переменные в задаче Имя на языке Си Тип Комментарий
K K int Искомое количество элементов
B B float Двумерный статический массив
A A float Заданное число
- i int Номер строки
- j int Номер столбца

/* Определнеие количество элементов, больших заданного А и расположенных в строках с нечетными номерами */

# include <stdio.h>

# include <math.h>

void main ( )



{

int i, j, m, n, K;

float B [10][10];

float A; //Описание переменных

printf (“ Введите число строк и столбцов”);

scanf (“%d %d”, &n, &m);

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

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

{

printf(“Введите B[%d, %d]=”, i, j);

scanf(“%f”, &B[i] [j]);

}

puts (“ введите число A”);

scanf (“%f”, &A);

K=0;

for ( i=1; i<n; i=i+2)

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

if( B[i]>A) K=K+1;

printf(“%f \n”, K);

}

Тесты:

-3; 8; -2; 10; 7; 82; -4

1) В= -9; 0; -3; 85; 3; 40; -9 A= 4; K=7.

-1; 8; 7; -95; 4; -5; 67

 

-4; -7; 8; 9; 2; -8; -5

2) B= -2; 10; 0; 9; -8; 7; -5 A=10; K=0.

-7; 6; -9; 7; 0; -3; 7


2.3 Поиск в матрице строки с максимальной суммой

Графическая схема алгоритма

 


Текст программы

/* Строка с максимальной суммой*/

#include <stdio.h>

main()

{

int m,n,nmax,i,j;

float max,s, x[10][10];

puts("Введите m,n");

scanf("%d %d",&m,&n);

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

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

{ printf("Введите x[%d][%d]=",i,j);

scanf("%f",&x[i][j]);

}

puts("Матрица x:");

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

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

printf("%8.2f",x[i][j]);

printf("\n");

}

s=0; for(j=0; j<n; j++) s =s+x[0][j]; //Нач. знач. мax – сумма элем. 0-ой стр.

max=s; nmax=0;

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

{ s=0;

for(j=0;j<n;j++) s+=x[i][j]; // Сумма элем. строк

if(max<s)

{ max=s; nmax=i;}

}

printf("Максимальная сумма %.2f в строке %d\n",max,nmax);

fflush(stdin); getchar();

return(0);

}


2.4 Пример обработки динамического двумерного массива

Задача. Определить количество строк матрицы, в которых суммы всех элементов отрицательные. Массив объявить как динамический.

Решение.


Таблица соответствия.

Переменные в задаче Имя на языке Си Тип Комментарий
S S float Сумма элементов i-той строки
A A float Двумерный динамический массив
K K float Количество искомых строк
- n int Количество всех строк в матрице
- m int Количество столбцов
- i int Номер строки
- j int Номер столбца

/*Пример обработки двумерного динамического массива*/

# include <stdio.h>

# include <math.h>

void main ( )



{

int i, j, m, n;

float K, S; //Описание переменных

puts (“ введите n, m”); // Вывод сообщения

scanf (“%d %d”, &n, &m); // Ввод исх.числа строк и столбцов

float**A=new float*[n];

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

A[i]=new float[m];

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

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

{

printf(“Введите A[%d; %d]=”, i, j);

scanf(“%f”, &A[i] [j]);

}

K=0;

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

{

S=0;

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

S=S+A[i] [j];

if(S<0) K=K+1;

}

printf(“%f \n”, K);

for(i=0; i<n; i++) //Освобождение динамической памяти

delete[]A[i];

delete[]A;

}

 

Тесты:

-3 -2 2 6 -3

1) A= 6 7 -1 20 -4 K=2.

-4 -2 -3 6 -1

 

 

-4 -2 4 6 4

2) A= 3 5 7 2 0 K=0.

5 0 -2 9 0

 


 

2.5 Определение, есть ли в матрице столбец, содержащий хотя бы один нулевой элемент

Решение.

Введем две вспомогательные переменные t и w:

 
 

Текст программы

#include <stdio.h>

main()

{

int m,n,i,j,t,w;

float x[10][10];

puts("Введите m,n");

scanf("%d %d",&m,&n);

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

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

{ printf("Введите x[%d][%d]=",i,j);

scanf("%f",&x[i][j]);

}

puts("Матрица x:");

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

{

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

printf("%8.2f",x[i][j]);

printf("\n");

}

t=1; j=0; //Столбец еще не найден

while(j<n && t)

{ w=1; i=0; //В столбце не найден элем., равный нулю

while(i<m && w)

if(x[i][j]==0) w=0;

else i++;

if(w) j++; // В столбце нет равного 0 элем.

else t=0; // В столбце есть равный 0 элем.

}

if(t) printf("Нет\n");

else printf("Есть %d %d\n",i,j);

fflush(stdin); getchar();

return(0);

}


 

 

2.5 Обработка элементов квадратных матриц относительно главной и побочной диагоналей

/* "Разминка". Фомирование матрицы */

#include <stdio.h>

main()

{

const m=10;

int i,j,N;

int x[m][m];

/* Обнуление матрицы */

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

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

x[i][j]=0;

puts("Номер варианта?");

scanf("%d",&N);

printf("Вариант %d:\n",N);

switch(N)

{ case 1:{ /* Вариант 1 */

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

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

x[i][j]=i-j+1;

break;}

case 2:{ /* Вариант 2 */

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

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

x[i][j]=j+1;

break; }

case 3: { /* Вариант 3 */

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

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

x[i][j]=i+1;

break; }

case 4: { /* Вариант 4 */

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

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

x[i][j]=j-i+1;

break; }

case 5:{ /* Вариант 5 */

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

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

x[i][j]=i+1;

break; }

case 6:{ /* Вариант 6 */

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

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

if (i==j) x[i][j]=1;

else x[i][j]=2;

break; }

case 7:{ /* Вариант 7 */

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

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

x[i][j]=1;

break; }

case 8:{ /* Вариант 8 */

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

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

x[i][j]=(i-j+1)*(i-j+1);

break; }

case 9:{ /* Вариант 9 */

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

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

x[i][j]=(j+1)*(j+1);

break; }

case 10:{ /* Вариант 10 */

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

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

if((i+j)%2==0) x[i][j]=1;

else x[i][j]=0;

break; }

case 11:{ /* Вариант 11 */

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

for(j=m-i-1;j<m;j++)

x[i][j]=1;

break; }

case 12:{ /* Вариант 12 */

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

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

x[i][j]=(i+1)*(i+1);

break; }

case 13:{ /* Вариант 13 */

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

for(j=m-i-1;j<m;j++)

if (i+j==m-1) x[i][j]=1;

else x[i][j]=2;

break; }

case 14:{ /* Вариант 14 */

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

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

x[i][j]=(j-i+1)*(j-i+1);

break;}

} // Вывод матрицы

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

{ for(j=0;j<m;j++)

printf("%4d",x[i][j]);

printf("\n");

}

fflush(stdin); getchar();

return(0);

}

 



<== предыдущая лекция | следующая лекция ==>
Все если | К. Задачи к летней сессии. Двумерные массивы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.763 сек.