Форум программистов, компьютерный форум CyberForum.ru

Динамический массив - C++

Восстановить пароль Регистрация
 
kobrjatina
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 52
24.10.2013, 22:02     Динамический массив #1
Помогите решить задачу способом динамических массивов.

Дана действительная матрица размера mxn, в которой не все элементы равны нулю. Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2013, 22:02     Динамический массив
Посмотрите здесь:

C++ статический массив ----> динамический массив
C++ Динамический МассиВ
Динамический Массив C++
динамический массив C++
C++ Динамический массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
24.10.2013, 23:27     Динамический массив #2
Цитата Сообщение от kobrjatina Посмотреть сообщение
Помогите решить задачу способом динамических массивов.

Дана действительная матрица размера mxn, в которой не все элементы равны нулю. Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент.
C++
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
 
// функция для получения модуля числа
int abs(int x)
{
    return (x >= 0 ? x : -x);
}
 
 
 
int main()
{
    srand (time(NULL));
    int n;
    int x = 10;
    int y = 20;
 
    // создание 2-мерного динамического массива
    int **a = new int*[x]; 
    for(int i=0; i<x; i++)
        a[i] = new int[y];
 
    // заполнение случайными значениями от -500 до 499
    printf("Первичный массив\n");
    for(int i=0; i<x; i++) {
        for(int j=0; j<y; j++) {
            a[i][j] = rand()%1000-500;
 
            if(a[i][j] < 0) printf("%3d ", a[i][j]);
            else printf(" %3d ", a[i][j]);
        }
        printf("\n");
    }
    
    // поиск наибольшего элемента
    n = abs(a[0][0]);
 
    for(int i=0; i<x; i++)
        for(int j=0; j<y; j++)
            n = abs(a[i][j+1]) > n ? abs(a[i][j+1]) : n;
 
    printf("\nНаибольшее по модулю значение элемента: %d\n\n", n);
 
    
 
    // создание нового 2-мерного динамического массива
    float **b = new float*[x]; 
    for(int i=0; i<x; i++)
        b[i] = new float[y];
 
    // заполнение значениями из первого массива деленными на n
    printf("Вторичный массив\n");
    for(int i=0; i<x; i++) {
        for(int j=0; j<y; j++) {
            b[i][j] = (float)a[i][j] / n;
 
            if(b[i][j] < 0.0) printf("%1.2f ", b[i][j]);
            else printf(" %1.2f ", b[i][j]);
        }
        printf("\n");
    }
 
    printf("\n");
}
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
24.10.2013, 23:58     Динамический массив #3
Кликните здесь для просмотра всего текста
Цитата Сообщение от programina Посмотреть сообщение
C++
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
 
// функция для получения модуля числа
int abs(int x)
{
    return (x >= 0 ? x : -x);
}
 
 
 
int main()
{
    srand (time(NULL));
    int n;
    int x = 10;
    int y = 20;
 
    // создание 2-мерного динамического массива
    int **a = new int*[x]; 
    for(int i=0; i<x; i++)
        a[i] = new int[y];
 
    // заполнение случайными значениями от -500 до 499
    printf("Первичный массив\n");
    for(int i=0; i<x; i++) {
        for(int j=0; j<y; j++) {
            a[i][j] = rand()%1000-500;
 
            if(a[i][j] < 0) printf("%3d ", a[i][j]);
            else printf(" %3d ", a[i][j]);
        }
        printf("\n");
    }
    
    // поиск наибольшего элемента
    n = abs(a[0][0]);
 
    for(int i=0; i<x; i++)
        for(int j=0; j<y; j++)
            n = abs(a[i][j+1]) > n ? abs(a[i][j+1]) : n;
 
    printf("\nНаибольшее по модулю значение элемента: %d\n\n", n);
 
    
 
    // создание нового 2-мерного динамического массива
    float **b = new float*[x]; 
    for(int i=0; i<x; i++)
        b[i] = new float[y];
 
    // заполнение значениями из первого массива деленными на n
    printf("Вторичный массив\n");
    for(int i=0; i<x; i++) {
        for(int j=0; j<y; j++) {
            b[i][j] = (float)a[i][j] / n;
 
            if(b[i][j] < 0.0) printf("%1.2f ", b[i][j]);
            else printf(" %1.2f ", b[i][j]);
        }
        printf("\n");
    }
 
    printf("\n");
}

Удалить созданные массивы не помешало бы
programina
25.10.2013, 00:13
  #4

Не по теме:

Цитата Сообщение от vua72 Посмотреть сообщение
Удалить созданные массивы не помешало бы
Пусть живут и радуют окружающих

kobrjatina
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 52
25.10.2013, 01:43  [ТС]     Динамический массив #5
некорректно работает программа, вот скрин
http://youpict.ru/part/1/4283/fpm/

Добавлено через 19 минут
А вот так норм
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
using namespace std;
 // функция для получения модуля числа
int fabs(int x)
{return (x >= 0 ? x : -x);}
int main()
{ setlocale (0, "");
srand (time(NULL));
int n;
int x = 10;
int y = 20;
// создание 2-мерного динамического массива
int **a = new int*[x]; 
for(int i=0; i<x; i++)
a[i] = new int[y];
// заполнение случайными значениями от -500 до 499
printf("Первичный массив\n");
for(int i=0; i<x; i++) {
for(int j=0; j<y; j++) {
a[i][j] = rand()%100-50;
if(a[i][j] < 0) printf("%3d ", a[i][j]);
else printf(" %3d ", a[i][j]);}
printf("\n");}
// поиск наибольшего элемента
n = fabs((float)(a[0][0]));
for(int i = 0; i < x; i++)
for(int j = 0; j < y; j++)
if(fabs(a[i][j]) > n)
n = fabs(a[i][j]);
cout << "max=" << n << endl;
// создание нового 2-мерного динамического массива
float **b = new float*[x]; 
for(int i=0; i<x; i++)
b[i] = new float[y];
// заполнение значениями из первого массива деленными на n
printf("Вторичный массив\n");
for(int i=0; i<x; i++) {
for(int j=0; j<y; j++) {
b[i][j] = (float)a[i][j] / n;
if(b[i][j] < 0.0) printf("%1.2f ", b[i][j]);
else printf(" %1.2f ", b[i][j]);}
printf("\n");}
printf("\n");
delete a;
delete b;
return 0;
}
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
29.10.2013, 17:57     Динамический массив #6
Цитата Сообщение от kobrjatina Посмотреть сообщение
некорректно работает программа, вот скрин
http://youpict.ru/part/1/4283/fpm/

Добавлено через 19 минут
А вот так норм
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
using namespace std;
 // функция для получения модуля числа
int fabs(int x)
{return (x >= 0 ? x : -x);}
int main()
{ setlocale (0, "");
srand (time(NULL));
int n;
int x = 10;
int y = 20;
// создание 2-мерного динамического массива
int **a = new int*[x]; 
for(int i=0; i<x; i++)
a[i] = new int[y];
// заполнение случайными значениями от -500 до 499
printf("Первичный массив\n");
for(int i=0; i<x; i++) {
for(int j=0; j<y; j++) {
a[i][j] = rand()%100-50;
if(a[i][j] < 0) printf("%3d ", a[i][j]);
else printf(" %3d ", a[i][j]);}
printf("\n");}
// поиск наибольшего элемента
n = fabs((float)(a[0][0]));
for(int i = 0; i < x; i++)
for(int j = 0; j < y; j++)
if(fabs(a[i][j]) > n)
n = fabs(a[i][j]);
cout << "max=" << n << endl;
// создание нового 2-мерного динамического массива
float **b = new float*[x]; 
for(int i=0; i<x; i++)
b[i] = new float[y];
// заполнение значениями из первого массива деленными на n
printf("Вторичный массив\n");
for(int i=0; i<x; i++) {
for(int j=0; j<y; j++) {
b[i][j] = (float)a[i][j] / n;
if(b[i][j] < 0.0) printf("%1.2f ", b[i][j]);
else printf(" %1.2f ", b[i][j]);}
printf("\n");}
printf("\n");
delete a;
delete b;
return 0;
}
Вы неправильно удаляете массивы. Вначале в цикле нужно удалить строки, потом сам массив. Обратно тому, как вы выделяли память под массив.
C++
1
2
3
 
for(int i=0; i<x; i++) delete[] b[i];
delete []b;
Добавлено через 10 минут
А это что?
C++
1
2
3
int fabs(int x) {
    return (x >= 0 ? x : -x);
}
...
C++
1
n = fabs((float) (a[0][0]));
Добавлено через 1 минуту
тем более, что abs и fabs - стандартные функции.
Yandex
Объявления
29.10.2013, 17:57     Динамический массив
Ответ Создать тему
Опции темы

Текущее время: 03:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru