Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2012, 14:20   #1
fuzo
Пользователь
 
Регистрация: 16.09.2010
Сообщений: 40
Сообщение c++ двухмерный массив

В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение.
Массив в памяти разместить динамически (с использованием операций new и delete), ввод исходных данных и вывод полученных результатов выполнить в основной функции, а решение задачи оформить в виде отдельной функции пользователя. Не использовать глобальных переменных.
Найти сумму элементов, расположенных на главной диагонали.
Пример задачи и метода к ней есть в файле.

Вот всё что выжал :/ вобщем не работает)

Код:
#include <iostream>

int Find(int* a, int n, int m, int x)
{
    for (int i = 0; i < n * m; i++)
    {
        if (a[i] == x)
        {
            return i;
        }
    }

    return -1;
}

int main()
{
    int n;
    std::cout << "Enter N: ";
    std::cin >> n;

    int m;
    std::cout << "Enter M: ";
    std::cin >> m;

    int* a = new int[n * m];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            std::cout << "Enter A[" << i << ", " << j << "]: ";
            std::cin >> a[i * m + j];
        }
    }

    delete[] a;

    return 0;
}
Вложения
Тип файла: doc 4 - Методичка для заочников ИИТ.doc (89.0 Кб, 18 просмотров)

Последний раз редактировалось fuzo; 29.10.2012 в 14:30.
fuzo вне форума Ответить с цитированием
Старый 29.10.2012, 14:55   #2
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Правил прямо тут, примерно думаю должно быть так:

Код:
#include <iostream>

int Find(int** a, int m, int n, int x)
{
    for (int i = 0; i < m; i++)
    {
        for(int j = 0; j < n; j++)
        if (a[i][j] == x)
        {
            std::cout << "Indexes:"<<i<<":"<<j<<std::endl; 
            return 0;
        }
    }
  
    return -1;
}

int main()
{
    int m;
    std::cout << "Enter M: ";
    std::cin >> m;

    int n;
    std::cout << "Enter N: ";
    std::cin >> n;

    int** a = new int*[m];
    for (int i = 0; i < m; i++)
    {
        a[m] = new int[n];
        for (int j = 0; j < n; j++)
        { 
            std::cout << "Enter A[" << i << ", " << j << "]: ";
            std::cin >> a[i][j];
        }
    }
    Find(a,m,n,1);
    for(int i = 0; i<m;i++)
        delete [] a[i];
    delete[] a;

    return 0;
}
Дальше сами.
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 29.10.2012, 14:56   #3
kuli4ok
Пользователь
 
Регистрация: 23.09.2012
Сообщений: 32
По умолчанию

Код:
#include <stdio.h>

int** get_memory(int, int);

int main()
{
int** mass;
int* a;
a=new int;
int* d;
d = new int;
scanf("%d%d", a, d);//считываем размеры массива
mass = get_memory(*a, *d);
//работа с массивом
//.....
//освобождение памяти
delete a;
delete d;
delete [] mass;
}

int** get_memory(int a, int b)
{
int** mass;
mass = new int*[a];
for(int i=0; i<a; i++)
{
mass[i]=new int[b];
}
return mass;
}
Я помог вам? Помогите и вы мне:
WMZ: Z401849412998
WMR: R251473869576

Последний раз редактировалось kuli4ok; 29.10.2012 в 15:06.
kuli4ok вне форума Ответить с цитированием
Старый 29.10.2012, 14:56   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Вроде всё правильно... только при вызове Find надо правильно разложить возвращаемое значение на номер строки и номер столбца.
А что не работает?
Abstraction вне форума Ответить с цитированием
Старый 29.10.2012, 14:58   #5
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

To kuli4ok: попробуйте скомпилировать это и посмейтесь над собой сами.
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 29.10.2012, 15:08   #6
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

С освобождением памяти все равно косяк =)
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 29.10.2012, 15:10   #7
kuli4ok
Пользователь
 
Регистрация: 23.09.2012
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Helloween Посмотреть сообщение
С освобождением памяти все равно косяк =)
Укажи пожалуйста) просто я сейчас уставший сильно вторые сутки не сплю напороть мог..)
Я помог вам? Помогите и вы мне:
WMZ: Z401849412998
WMR: R251473869576
kuli4ok вне форума Ответить с цитированием
Старый 29.10.2012, 15:13   #8
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Я бы сделал так:
Код:
int main()
{
int** mass;
int a;
int d;
scanf("%d%d", &a, &d);//считываем размеры массива
mass = get_memory(a, d);
//работа с массивом
//.....
//освобождение памяти
for(int i = 0; i < a; i++)
      delete [] mass[i];
delete [] mass;  
}
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 29.10.2012, 15:18   #9
kuli4ok
Пользователь
 
Регистрация: 23.09.2012
Сообщений: 32
По умолчанию

Хм, а не кажется лишним циклом? Сделать то можно, но можно же освобождать массив указателей сразу
Я помог вам? Помогите и вы мне:
WMZ: Z401849412998
WMR: R251473869576
kuli4ok вне форума Ответить с цитированием
Старый 29.10.2012, 15:21   #10
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Нет, нельзя. Двумерные массивы в отличие от одномерных в памяти не располагаются "сплошняком", а каждая из строк может быть в разном участке кучи, поэтому освобождать память нужно так же как ты ее и выделял только в обратном порядке, сначала из под каждой строки, зачем для массива. Вот так и рождаются утечки памяти.
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двухмерный массив С++ Arsenx777 Помощь студентам 1 03.10.2011 18:50
Двухмерный массив enji4ka Помощь студентам 2 02.05.2011 18:35
Двухмерный массив Lev.F Помощь студентам 1 30.05.2010 21:31
двухмерный массив varyat Помощь студентам 0 23.05.2010 17:44