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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kobrjatina
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 52
#1

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

24.10.2013, 22:02. Просмотров 322. Ответов 5
Метки нет (Все метки)

Помогите решить задачу способом динамических массивов.

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

Можно ли в классе создавать массив переменной длинны. Например динамический массив? - C++
Динамические массивы привлекают больше. :)

Заполнить динамический массив из файла и записать массив обратно в файл - C++
Подскажите пожалуйста функцию которая будет заполнять Динамический массив из файла и обратную которая этот массив запишет в файл=)

Написать функцию принимающую массив и возвращающую указатель на динамический массив - C++
Написать функцию принимающую массив и возвращающую указатель на динамический массив содержащий первые n нaибольших чисел. Как сделать...

динамический массив (Целое число разложить на массив простых множителей) - C++
Доброго времени суток всем. Целое число необходимо разложить на массив простых множителей. Столкнулся с проблемой, мне нужно, чтобы...

Массив: передать динамический массив в функцию и записать в каждый элемент строку из файла - C++
задача: передать динамический массив в функцию, и записать в каждый элемент строку из файла. количество строк известно вот что у меня...

Как преобразовать массив в динамический? Массив вычисляет сумму элементов каждой диагонали матрицы - C++
Ошибка : Вызвано исключение по адресу 0x00BB2F4F в Проект6.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFE05. #...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
programina
1914 / 599 / 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
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
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
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
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 - стандартные функции.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2013, 17:57
Привет! Вот еще темы с ответами:

Создать динамический массив (Если чётных чисел больше, то массив должен быть укорочен на 2 элемента) - C++
Создать динамический массив из 8 случайных целых чисел из отрезка и вывести его на экран . Если в массиве чётных чисел оказалось...

Двумерный массив (поменять статический массив на динамический) - C++
Нужно поменять статический массив на динамический с выделением памяти #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; ...

Массив и память. Как создать динамический массив? - C++
не могу исправить ошибки. И нужен динамический массив я что-то попробовала для его создания но ничего не вышло #include &quot;stdafx.h&quot; ...

Переделать динамический массив на статический массив - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main() { int dim, counter_1 = 1, counter_2 =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.10.2013, 17:57
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru