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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2011, 15:11   #1
Enigmya
Пользователь
 
Регистрация: 10.02.2011
Сообщений: 19
По умолчанию Двумерный массив

Есть задача: Дан двумерный массив NxN. Необходимо подсчитать произведение элементов, находящихся в интервале от А до В и поместить это произведение в середину массива.
Если с первой половиной я разобралась, как делать, то со второй проблема, подскажите пожалуйста.
Код:
#include <iostream>

using namespace std;
int main(void)
{
        setlocale(LC_ALL,"Russian");
        int nSize ;    // Размер массива
        
        cout << "Input n: ";
        cin >> nSize ;
        
        if(nSize<=0||nSize <=0)
                return 1;
        int** K;    //Создаем массив с указанным размером
        K=new int*[nSize];
        for(int i = 0 ; i < nSize ; ++i )
                K[i]=new int[nSize];
 
        for(int i = 0 ; i < nSize ; ++i )
        {
                for(int j = 0 ; j < nSize ; ++j )
                {
                        K[i][j]=i+j;
                        cout<<"K["<<i<<"]["<<j<<"]="<<K[i][j] ;      
                        cout<<endl;
                }
        }
 
        for(int i = 0 ; i < nSize ; ++i )
                delete[] K[i];
        delete[] K;
        system("pause");
        return 0;
}
Enigmya вне форума Ответить с цитированием
Старый 17.10.2011, 15:37   #2
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Цитата:
Сообщение от Enigmya Посмотреть сообщение
Есть задача: Дан двумерный массив NxN. Необходимо подсчитать произведение элементов, находящихся в интервале от А до В и поместить это произведение в середину массива.
Если с первой половиной я разобралась, как делать, то со второй проблема, подскажите пожалуйста.

Привет! Во-первых, вы в вашей программе используете одномерный массив K, хотя по заданию он должен быть двумерный! Во-вторых, я не вижу промежутка от A до B.
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума Ответить с цитированием
Старый 17.10.2011, 15:48   #3
_Alerter_
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 89
По умолчанию

Цитата:
Сообщение от ByAlex Посмотреть сообщение
Привет! Во-первых, вы в вашей программе используете одномерный массив K, хотя по заданию он должен быть двумерный! Во-вторых, я не вижу промежутка от A до B.
Вообще-то он двумерный.
Цитата:
Необходимо подсчитать произведение элементов, находящихся в интервале от А до В
Нельзя ли поподробнее об этом интервале?
Цитата:
и поместить это произведение в середину массива.
При этом нужно затереть то, что находится в середине массива?
_Alerter_ вне форума Ответить с цитированием
Старый 17.10.2011, 16:01   #4
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Цитата:
Сообщение от _Alerter_ Посмотреть сообщение
Вообще-то он двумерный.
Я, конечно, слабоват в C++, но где тут описание двумерного массива, если везде обращения как к одномерному? Например, вот здесь заполнение одномерного массива
Код:
for(int i = 0 ; i < nSize ; ++i )
    K[i]=new int[nSize];
Помог - жми на весы!
ByAlex89@mail.ru

Последний раз редактировалось ByAlex; 17.10.2011 в 16:03.
ByAlex вне форума Ответить с цитированием
Старый 17.10.2011, 16:07   #5
_Alerter_
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 89
По умолчанию

Цитата:
Сообщение от ByAlex Посмотреть сообщение
Я, конечно, слабоват в C++, но где тут описание двумерного массива, если везде обращения как к одномерному? Например, вот здесь заполнение одномерного массива
Код:
for(int i = 0 ; i < nSize ; ++i )
    K[i]=new int[nSize];
Это выделение памяти для каждой строки двумерного массива
_Alerter_ вне форума Ответить с цитированием
Старый 17.10.2011, 16:10   #6
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Цитата:
Сообщение от _Alerter_ Посмотреть сообщение
Это выделение памяти для каждой строки двумерного массива
Понятно!
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума Ответить с цитированием
Старый 17.10.2011, 16:26   #7
Enigmya
Пользователь
 
Регистрация: 10.02.2011
Сообщений: 19
По умолчанию

Цитата:
Сообщение от _Alerter_ Посмотреть сообщение
Нельзя ли поподробнее об этом интервале?

При этом нужно затереть то, что находится в середине массива?
Таково условие задачи, дословно. Не знаю, какой интервал имеется ввиду, видимо затереть.
Enigmya вне форума Ответить с цитированием
Старый 17.10.2011, 19:28   #8
_Alerter_
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 89
По умолчанию

если A и B - это индексы элементов массива, тогда так(A и B включительно):
Код:
    int Ax, Bx, Ay, By, res = 1; 
    cout << "Введите индексы А: ";
    cin >> Ax >> Ay;
    cout << "Введите индексы B: ";
    cin >> Bx >> By;
    int j = Ay;
    for (int i = Ax; i <= Bx; ++ i)
    {
        for ( ; (j <= By || i < Bx) && j < nSize; ++ j)
        {
            res *= K[i][j];
        }
        j = 0;
    }
    int index = (nSize & 1) ? nSize / 2 + 1 : nSize / 2;
    K[index - 1][index - 1] = res;
    cout << res;
Записываться ровно в середину массива будет только при условии, что nSize - нечётное

Последний раз редактировалось _Alerter_; 17.10.2011 в 19:50.
_Alerter_ вне форума Ответить с цитированием
Старый 17.10.2011, 23:36   #9
Enigmya
Пользователь
 
Регистрация: 10.02.2011
Сообщений: 19
По умолчанию

Что-то где-то у меня не так) Посмотри, пожалуйста.
Код:
#include <iostream>

using namespace std;
int main(void)
{
        setlocale(LC_ALL,"Russian");
        int nSize ;    // Размер массива
        int Ax, Bx, Ay, By, res = 1; 
        cout << "Input n: ";
        cin >> nSize ;
        
        if(nSize<=0||nSize <=0)
        return 1;
        int** K;    //Создаем массив с указанным размером
        K=new int*[nSize];
        for(int i = 0 ; i < nSize ; ++i )
                K[i]=new int[nSize];
 
        for(int i = 0 ; i < nSize ; ++i )
        {
                for(int j = 0 ; j < nSize ; ++j )
                {
                        K[i][j]=i+j;
						  cout<<"K["<<i<<"]["<<j<<"]="<<K[i][j] ;      
                        cout<<endl;
                                        }

        }
 
        for(int i = 0 ; i < nSize ; ++i )
                     delete[] K[i];
    cout << "Введите индексы А: ";
    cin >> Ax >> Ay;
    cout << "Введите индексы B: ";
    cin >> Bx >> By;
    int j = Ay;
    for (int i = Ax; i <= Bx; ++ i)
    {
        for ( ; (j <= By || i < Bx) && j < nSize; ++ j)
        {
            res *= K[i][j];
        }
        j = 0;
    }
    int index = (nSize & 1) ? nSize / 2 + 1 : nSize / 2;
    K[index - 1][index - 1] = res;
    cout << res;
		system("pause");
		       return 0;
}
Enigmya вне форума Ответить с цитированием
Старый 18.10.2011, 00:08   #10
_Alerter_
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 89
По умолчанию

Код:
    for(int i = 0 ; i < nSize ; ++i )
                     delete[] K[i];
    cout << "Введите индексы А: ";
    cin >> Ax >> Ay;
    cout << "Введите индексы B: ";
    cin >> Bx >> By;
    int j = Ay;
    for (int i = Ax; i <= Bx; ++ i)
    {
        for ( ; (j <= By || i < Bx) && j < nSize; ++ j)
        {
            res *= K[i][j];
        }
        j = 0;
    }
    int index = (nSize & 1) ? nSize / 2 + 1 : nSize / 2;
    K[index - 1][index - 1] = res;
    cout << res;
		system("pause");
		       return 0;
Идёт освобождение памяти, выделенной под массив, а затем попытка обратиться к элементам массива. Естественно, что в нём уже нет нужных данных.
Код:
    cout << "Введите индексы А: ";
    cin >> Ax >> Ay;
    cout << "Введите индексы B: ";
    cin >> Bx >> By;
    int j = Ay;
    for (int i = Ax; i <= Bx; ++ i)
    {
        for ( ; (j <= By || i < Bx) && j < nSize; ++ j)
        {
            res *= K[i][j];
        }
        j = 0;
    }
    int index = (nSize & 1) ? nSize / 2 + 1 : nSize / 2;
    K[index - 1][index - 1] = res;
    cout << res;
    for(int i = 0 ; i < nSize ; ++i )
                     delete[] K[i];
		system("pause");
		       return 0;
_Alerter_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерный массив и Двумерный массив eugene1437 Общие вопросы C/C++ 15 25.05.2011 19:17
двумерный массив ates Помощь студентам 24 24.04.2010 19:56
двумерный массив. Женечка92 Помощь студентам 1 24.04.2010 06:12
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40
Двумерный массив. Джеймс1275 Помощь студентам 4 04.11.2009 14:09