С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Бородатый Админ
1 / 1 / 0
Регистрация: 17.11.2012
Сообщений: 27
#1

Заполнение двумерного массива без вложенных циклов - C++

17.11.2012, 02:27. Просмотров 2129. Ответов 17
Метки нет (Все метки)

Даны два числа n и m. Создайте двумерный массив int A[n][m], заполните его таблицей умножения A[i][j]=i*j и выведите на экран. При этом нельзя использовать вложенные циклы, все заполнение массива должно производиться одним циклом, например, for(i=0;i<n*m;++i).
Как такое можно реализовать? Нужно каким-то образом плясать от индекса, как мне кажется, но вот как?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2012, 02:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заполнение двумерного массива без вложенных циклов (C++):

Вычислить сумму следующего ряда без вложенных циклов - C++
Hе используя стандаpтные функции (за исключением abs ), вычислить сумму следующего pяда с заданной точностью Е &gt; 0 без вложенных циклов. ...

Наименьшее общее кратное для массива(с использованием вложенных циклов) - C++
помогите пожалуйста написать программу. Задан целочисленный массив A. Определить наименьшее общее кратное.

Заполнение двумерного массива - C++
Можно ли заполнить матрицу размером (6 х 6) вида С= \begin{bmatrix} 0 0 0 0 0 1 \\ 0 0 0 0 2 0 \\ 0 0 0 3 0 0 \\ 0 0 4...

Заполнение двумерного массива - C++
Многоуважаемые форумчане, мне нужно создать двумерный массив NxN N - через cin &gt;&gt; N; в котором по главной диагонали числа от N до 1, а в...

Заполнение двумерного массива. - C++
Помогите с лабой: Заполнить программно двумерный массив размером 5х5 следующим образом: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14...

заполнение двумерного массива - C++
Заполнить двумерный массив таким образом: 1 1 1 1 1 1 0 0 0 1 1 0 1 0 1 1 0 0 0 1 1 1 1 1 1

17
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 02:31 #2
Цитата Сообщение от Бородатый Админ Посмотреть сообщение
Как такое можно реализовать? Нужно каким-то образом плясать от индекса, как мне кажется, но вот как?
Если это действительно массив, то (pArray+N*M-1) будет последним элементом.
0
Бородатый Админ
1 / 1 / 0
Регистрация: 17.11.2012
Сообщений: 27
17.11.2012, 02:34  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Если это действительно массив, то (pArray+N*M-1) будет последним элементом.
Ну да, и что с того? Это и в задании указано: for(i=0; i<n*m; ++i)
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 02:35 #4
Цитата Сообщение от Бородатый Админ Посмотреть сообщение
Ну да, и что с того? Это и в задании указано: i<n*m
ну тогда в чем проблема?
0
Бородатый Админ
1 / 1 / 0
Регистрация: 17.11.2012
Сообщений: 27
17.11.2012, 02:37  [ТС] #5
Croessmah, в самом заполнении массива. Как заполнить двумерный массив, не используя вложенный цикл? Этого я и не могу придумать. Нам нужно как-то определять второй индекс для текущего элемента a[i][j], хотя у нас только один счетчик есть (i)
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
17.11.2012, 02:48 #6
Бородатый Админ, да обычным делением и остатком. Все просто.

Добавлено через 1 минуту
C++
1
2
    for(int i=0;i<n*m;++i)
        A[i/n][i%m] = (i/n)*(i%m);
Добавлено через 6 минут
Хотя, для неквадратной, не сработает, имхо. Не проверял. Надо изменить.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 02:52 #7
как вариант:
C++
1
2
3
    for(int i=0;i<N*M;++i){
        *(*p+i)=(i/N)*(i%M);
    }
Добавлено через 53 секунды
Цитата Сообщение от Vourhey Посмотреть сообщение
Хотя, для неквадратной, не сработает, имхо. Не проверял. Надо изменить.
Почему не сработает? Должен.
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
17.11.2012, 02:57 #8
Букву перепутал:
C++
1
A[i/m][i%m] = (i/m)*(i%m);
Должно быть

Добавлено через 20 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
Почему не сработает? Должен.
Не-не, я ошибся в расчете по строкам
0
Бородатый Админ
1 / 1 / 0
Регистрация: 17.11.2012
Сообщений: 27
17.11.2012, 03:08  [ТС] #9
Цитата Сообщение от Vourhey Посмотреть сообщение
A[i/m][i%m] = (i/m)*(i%m);
Если использовать
C++
1
2
3
4
5
6
7
for(i=0; i<n*m; i++) {
    a[i/m][i%m] = (i/m)*(i%m);
    if(!(i%m))
      cout << a[i/m][i%m] << "\n";
    else
      cout << a[i/m][i%m] << " ";
    }
То получается каша:
http://savepic.su/2933250.png
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 03:12 #10
Цитата Сообщение от Бородатый Админ Посмотреть сообщение
Если использовать
C++
1
a[i/m][i%m] = (i/m)*(i%m);
замените на
C++
1
a[i/n][i%m] = (i/n)*(i%m);
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
#define N 15
#define M 15
 
int main(){
    int p[N][M];
    for(int i=0;i<N*M;++i){
        *(*p+i)=(i/N)*(i%M);
    }
    
    for(int i=0;i<N;++i){
        for(int j=0;j<M;++j){
            cout.width(4);
            cout<<p[i][j];
        }
        cout<<endl;
    }
    //system("pause");
    return 0;
}
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
17.11.2012, 03:16 #11
Цитата Сообщение от Croessmah Посмотреть сообщение
замените на
Код C++
1
a[i/n][i%m] = (i/n)*(i%m);
Не надо. Это у него в коде ошибка.

Добавлено через 1 минуту
Цитата Сообщение от Бородатый Админ Посмотреть сообщение
Если использовать
Код C++
1
2
3
4
5
6
7
for(i=0; i<n*m; i++) {
* * a[i/m][i%m] = (i/m)*(i%m);
* * if(!(i%m))
* * * cout << a[i/m][i%m] << "\n";
* * else
* * * cout << a[i/m][i%m] << " ";
* * }
То получается каша:
http://savepic.su/2933250.png
Каша у тебя получается, потому что выводишь неправильно.

C++
1
2
3
4
5
6
7
8
9
10
11
    int n=5, m=5;
    int A[5][5];
    for(int i=0;i<n*m;++i)
        A[i/m][i%m] = (i/m)*(i%m);
 
    for(int i=0;i<n;++i)
    {
        std::cout<<std::endl;
        for(int j = 0;j<m;++j)
            std::cout<<std::setw(4)<<A[i][j];
    }
Скомпилируй и проверь сам. Эх, если б админы такими были...
2
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 03:17 #12
Цитата Сообщение от Vourhey Посмотреть сообщение
Не надо. Это у него в коде ошибка.
тьфу ты блин, точно =))) вообще уже голова не варит, нам же от ширина измерения танцевать то надо.
1
Бородатый Админ
1 / 1 / 0
Регистрация: 17.11.2012
Сообщений: 27
17.11.2012, 03:24  [ТС] #13
Всё, теперь порядок, работает.

Vourhey, Croessmah, спасибо за помощь

Еще только один вопрос:
что означает *(*p+i) в коде Croessmah?
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
17.11.2012, 03:25 #14
Цитата Сообщение от Бородатый Админ Посмотреть сообщение
что означает *(*p+i) в коде Croessmah?
Почитай про арифметику указателей.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 03:26 #15
Цитата Сообщение от Бородатый Админ Посмотреть сообщение
что означает *(*p+i) в коде Croessmah?
элемент массива в результате смещения от p[0][0] до i
0
17.11.2012, 03:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2012, 03:26
Привет! Вот еще темы с ответами:

Заполнение двумерного массива - C++
НАШЕЛ САМ

Заполнение двумерного массива - C++
#include &quot;stdafx.h&quot; const int n=5; int _tmain(int argc, _TCHAR* argv) { int a; int k=0; for(int i=0;i&lt;n;i++) for(int...

Заполнение двумерного массива - C++
Помогите пожалуйста написать програму Двумерного массива с++ по такой схеме 1 3 4 10 11 2 5 9 12 19 6 8 13 18 20 7 14 17 21 24 15...

Заполнение двумерного массива - C++
есть 4 массива одномерных, как сделать чтобы создавался массив А двумерный размером 4х4, который заполнялся бы сравнением елементов этих...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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