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

Ввод вручную размерности двумерного массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.69
Serega1
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 68
03.06.2010, 23:57     Ввод вручную размерности двумерного массива #1
Здравствуйте уважаемые форумчане.
Такая небольшая проблема.
У нас есть двумерный массив, размерность n на n. С помощью #define n 5 указываю 5 на 5. Захотел вводить вручную n:
C++
1
int n;cout<<"n:";cin>>n;
ошибки. Как ввести n подскажите.

И еще проблема, когда вывожу двумерку, то вывод примерно такой:
1
11
121
1331
14641
Как сделать в виде пирамиды?

Вот код:
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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "conio.h"
#define n 5
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
 //заполнение массива 
 int a[n][n],i,j;
 a[0][0]=1;
 for (i=0; i<n; i++)
 {
  for (j=0; j<=i; j++)
  {
   if ((i==j)||(j==0)) 
       a[i][j]=1;
   else 
       a[i][j]=a[i-1][j-1]+a[i-1][j];
  }
 }
 //вывод
 for (i=0; i<n; i++) 
 {
  for (j=0; j<=i; j++)
  {
   cout << a[i][j] << " ";
  }
  cout << "\n";
 }  
getch();
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
04.06.2010, 00:06     Ввод вручную размерности двумерного массива #2
При выводе в for измените условие:
C++
1
for (j=0; j<n; j++)
переменная і увеличивается постепенно, отсуда и не правильный вывод в виде пирамиды.

А при создании массива не возможно использовать переменные!
используйте указатель на динамический массив
C++
1
int *p=new a[n][n];
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
04.06.2010, 00:07     Ввод вручную размерности двумерного массива #3
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
#include <cstdlib>
#include <iostream>
 
int main()
{
   int n = 0;
   std::cout << "enter n: ";
   std::cin  >> n;
 
   int ** matrix = NULL;
 
   matrix = new int * [n];
   for(int i = 0; i < n; ++i)
      matrix[i] = new int [n];
 
   for(int i = 0; i < n; ++i) {
      for(int j = 0; j < n; ++j) { 
         matrix[i][i] = 0;
         std::cout << matrix[i][i] << " ";
      }
      std::cout << std::endl;
   }
 
   for(int i = 0; i < n; ++i)
      delete [] matrix[i];
   delete[] matrix;
 
   /* end main */
   system("pause");
}
а как вы собираетесь равностороннюю матрицу выводить в виде пирамиды?
Serega1
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 68
04.06.2010, 11:22  [ТС]     Ввод вручную размерности двумерного массива #4
IchMors,fasked
Спасибо за ответы парни

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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "conio.h"
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
 int n = 0;
 cout << "enter n: ";cin  >> n;
 int ** a = new int * [n];
 for(int i = 0; i < n; ++i)
  a[i] = new int [n];
 
   a[0][0]=1;
   for(int i = 0; i < n; ++i) 
   {
      for(int j = 0; j <=i; ++j) 
      { 
         if ((i==j)||(j==0)) 
           a[i][j]=1;
         else 
           a[i][j]=a[i-1][j-1]+a[i-1][j];
      }
   }
 
   for(int i = 0; i < n; ++i) 
   {
      for(int j = 0; j <= i; ++j) 
      { 
         cout << a[i][j] << " ";
      }
      cout << "\n";
   }
 
   for(int i = 0; i < n; ++i)
    delete [] a[i];
   delete[] a;
getch();
return 0;
}
IchMors
Цитата Сообщение от IchMors Посмотреть сообщение
При выводе в for измените условие:
C++
1
for (j=0; j<n; j++)
переменная і увеличивается постепенно, отсуда и не правильный вывод в виде пирамиды.
Сделал как вы говорите, такую жесть вывел. Вообщем не то что нужно.

fasked
а как вы собираетесь равностороннюю матрицу выводить в виде пирамиды?
А разве нельзя как нибудь с помощью пробелов?

Добавлено через 10 часов 26 минут
Люди, скажите пожалуйста возможно или нет выводить равностороннюю матрицу в виде пирамиды.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
04.06.2010, 16:25     Ввод вручную размерности двумерного массива #5
Цитата Сообщение от Serega1 Посмотреть сообщение
Люди, скажите пожалуйста возможно или нет выводить равностороннюю матрицу в виде пирамиды.
я честно не понимаю как это сделать. равносторонняя матрица она на то и равносторонняя, что у нее количество элементов в строке равно количеству элементов в столбце. в фигуре "пирамида" такого нет.
Код
+---------+-----------+
| квадрат | пирамида  |
+---------+-----------+
| 0 0 0   |     0     |
| 1 1 1   |   1 1 1   |
| 2 2 2   | 2 2 2 2 2 |
+---------+-----------+
Единственное что связывает эти две фигуры, кажется, количество элементов.
Конечно, в виде пирамиды можно вывести что угодно, но для этого надо знать как именно выводить. Какой элемент должен стоять в вершине пирамиды? Какой должен располагаться в основании? Потому что в твоих сообщениях этого не описывалось.
Serega1
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 68
04.06.2010, 22:31  [ТС]     Ввод вручную размерности двумерного массива #6
fasked
Привет еще раз.
Какой элемент должен стоять в вершине пирамиды?
В вершине должна быть единичка, делящая треугольник ровно на 2 части.

Вот мой код, введи сначало n=5 это и есть казалось бы то, что нужно. Но вводишь n=10 и великолепие рушится) Как исправить при n=10 не знаю.
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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "conio.h"
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
 int n = 0;
 cout << "Enter n: ";cin  >> n;
 int ** a = new int * [n];
 for(int i = 0; i < n; ++i)
  a[i] = new int [n];
 
   a[0][0]=1;
   for(int i = 0; i < n; ++i) 
   {
      for(int j = 0; j <=i; ++j) 
      { 
         if ((i==j)||(j==0)) 
           a[i][j]=1;
         else 
           a[i][j]=a[i-1][j-1]+a[i-1][j];
      }
   }
 
   for(int i = 0; i < n; ++i) 
   {   
    for(int probel = 0; probel < 2*(n - i)/2; probel++)
     cout <<" ";
      for(int j = 0; j <= i; ++j) 
      { 
         cout << a[i][j] << " ";
      }
      cout << "\n";
   }
 
   for(int i = 0; i < n; ++i)
    delete [] a[i];
   delete[] a;
getch();
return 0;
}
Форумчане, кто разобрался как исправить ошибку просьба отписаться
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.06.2010, 22:55     Ввод вручную размерности двумерного массива #7
C++
1
2
3
4
5
6
for (int i = 0; i < n; i++)
{
   for (int j = 0; j <= i; j++)
      cout << setw(n/2+1-i) << a[i][j];
   cout << endl;
}
Serega1
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 68
04.06.2010, 23:34  [ТС]     Ввод вручную размерности двумерного массива #8
kazak
Спасибо за ответ, но тоже не работает. Смотри прикрепленный вывод.JPG
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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "conio.h"
#include "iomanip"
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
 int n = 0;
 cout << "Enter n: ";cin  >> n;
 int ** a = new int * [n];
 for(int i = 0; i < n; ++i)
  a[i] = new int [n];
 
   a[0][0]=1;
   for(int i = 0; i < n; ++i) 
   {
      for(int j = 0; j <=i; ++j) 
      { 
         if ((i==j)||(j==0)) 
           a[i][j]=1;
         else 
           a[i][j]=a[i-1][j-1]+a[i-1][j];
      }
   }
   for (int i = 0; i < n; i++)
   {
    for (int j = 0; j <= i; j++)
     cout<<setw(n/2+1-i)<<a[i][j];
     cout << endl;
   }
 
   for(int i = 0; i < n; ++i)
    delete [] a[i];
   delete[] a;
getch();
return 0;
}
Миниатюры
Ввод вручную размерности двумерного массива  
pannaruto
 Аватар для pannaruto
11 / 11 / 2
Регистрация: 12.05.2010
Сообщений: 29
05.06.2010, 00:00     Ввод вручную размерности двумерного массива #9
Вот попробуйте этот пример :
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
#include <iostream>
#include <iomanip>
using namespace std;
 
#define max 50
 
void pyramidPascal( int const& n )
{
    int a[max][max];
 
    for( int i = 0; i < n; i++ )
        for( int j = 0; j <= i; j++ )
            if( j == 0 || j == i )
                a[i][j] = 1;
            else
                a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
                            
 
    for( int i = 0; i < n; i++ )
    {
        cout << setw( 3 * ( n - i ) ) << a[i][0];
        for( int j = 1; j <= i; j++ )
            cout << setw(6) << a[i][j];
        cout << endl << endl;
    }
}
 
int main()
{
    int n = 10;
 
    pyramidPascal( n );
 
    system("pause");
    return 0;
}
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
05.06.2010, 00:10     Ввод вручную размерности двумерного массива #10
pannaruto, опередил.
Serega1
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 68
05.06.2010, 01:39  [ТС]     Ввод вручную размерности двумерного массива #11
pannaruto,kazak
Спасибо чуваки, что помогли) Очень признателен. С вами приятно пообщаться.
Витaлиk
1 / 1 / 0
Регистрация: 25.10.2011
Сообщений: 49
25.10.2011, 19:39     Ввод вручную размерности двумерного массива #12
C++
1
2
3
4
cout << "enter n: ";cin  >> n;
 int ** a = new int * [n];
 for(int i = 0; i < n; ++i)
  a[i] = new int [n];
что сдесь делает
C++
1
2
for(int i = 0; i < n; ++i)
  a[i] = new int [n];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2011, 23:58     Ввод вручную размерности двумерного массива
Еще ссылки по теме:

C++ Ввод двумерного массива
C++ Написать программу, которая вычисляет сумму элементов двумерного массива по столбцам. Организовать ввод массива с клавиатуры по строкам
C++ Ввод с клавиатуры двумерного массива

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

Или воспользуйтесь поиском по форуму:
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.10.2011, 23:58     Ввод вручную размерности двумерного массива #13
Цитата Сообщение от Витaлиk Посмотреть сообщение
что сдесь делает
выделяет память под строки массива.
Yandex
Объявления
25.10.2011, 23:58     Ввод вручную размерности двумерного массива
Ответ Создать тему
Опции темы

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