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

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

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

Ошибка при вводе матрицы. - C++

23.03.2012, 00:16. Просмотров 439. Ответов 3
Метки нет (Все метки)

Здравствуйте, сейчас пишу программу для проверки матрицы на латинский и магический квадрат, мне каждое действие нужно сделать отдельной функцией.
Вот я решил сперва сделать функцию создания матрицы, просмотр матрицы в квадратном виде, проверка на латинский квадрат и магический. Но вот уже проблема при создание матрицы, при вводе больше 5 элементов матрицы выскакивает окно с ошибкой. То есть матрицу 2х2 еще могу ввести,а 3х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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
int n,i,j;
int *mass=new int [n*n];
 
void stv (void)
{
 
clrscr();
cout <<"Vvedit` kilkist chusel v ryadky kvadrata: ";
cin >> n;
for(i=0; i<n; i++)
   for(j=0; j<n; j++)
   {
      cout << "\n Yvedit` element ryandka " <<i+1 <<" stovbcya " <<j+1 <<" : ";
      cin >> mass[i*n+j];
   }
   getch();}
 
 
void per (void)
{cout <<"Kvadrat:";
for(i=0; i<n; i++)
   {
   cout<<endl;
   for(j=0; j<n; j++)
      cout << mass[i*n+j] <<"\t";
   }
getch();}
 
//ãîëîâГ*Г*Гї ïðîãðГ*Г¬Г*
void main(void)
{int a;
while (1)
 {clrscr();
 
cout<<"Vvedeny danux dlya matruci 1\nPereglyad matruci 2\nPerevirka na latunskiy kvadrat 3\nPerevirka na magichnui kvadrat 4\n\nVvedit` regum\n";
cin>>a;
switch (a)
{case 1:{stv();break;}
case 2:{per();break;}
case 3:exit(1);
default: {cout<<"\nNe vveden regim";getch();} } }}
Миниатюры
Ошибка при вводе матрицы.  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2012, 00:16     Ошибка при вводе матрицы.
Посмотрите здесь:

Ошибка при вводе разного кол-ва строк и столбцов в матрицы. Динамич. матрицы/массивы - C++
Дана матрица, размерность вводит пользователь, данные тоже. Осуществить сортировку вставками, массива, который будет получен из суммы...

Ошибка при вводе числа - C++
Подозреваю, что где-то нужно обнулить переменную rows. Потому что (как показано на скрине) число &quot;45&quot; всегда состоит из первой цифры кол-ва...

Непонятная ошибка при вводе - C++
Дана символьная строка. Слово - последовательность символов между пробелами, не содержащая пробелы внутри себя. Определить количество слов...

Проверка на разные элементы при вводе матрицы - C++
Здравствуйте, как сделать проверку при вводе матрицы с клавиатуры, чтобы нельзя было ввести 2 и более одинаковых элементов матрицы?

Хэширование. Ошибка при вводе строки. - C++
Привет, друзья. Пишу лабу по хешированию, столкнулся с проблемой При вводе строки. При компиляции никаких ошибок нет, но вот когда ввожу...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
23.03.2012, 00:46     Ошибка при вводе матрицы. #2
вы создаете отдномерный массив размером n*n

C++
1
int *mass = new int [n*n];
а также и заполняете его тоже как одномерный!

C++
1
cin >> mass[i*n+j];
должно быть для двухмерного

C++
1
2
3
int **matr = new int *[n]; // указатель на массив указ-лей;
    for (i = 0; i < n; ++i) 
        matr[i] = new int [m];
ну и вводить значения

C++
1
2
3
4
5
6
7
for (j = 0; j < m; j++) //проходимся циклом по столбцам матрицы
  {    
       for (i = 0; i < n; i++)//проходимся циклом по рядам матрицы
        {         
         cin >> matr[i][j]
       }
}
Добавлено через 1 минуту
Ну и где то не забыть освободить память

C++
1
2
3
for (i = 0; i < n; i++)
        delete [] matr[i];
    delete [] matr;
Добавлено через 1 минуту
Вы везде работает как с одномерным массивом
wildfires
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 114
23.03.2012, 01:34  [ТС]     Ошибка при вводе матрицы. #3
Infinity3000, спасибо конечно, но у меня программу уже почти работает с одномерным масивом.
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
int n,i,j;
int *mass=new int[n*n];
//ñòâîðåГ*Г*Гї Г¬Г*òðèö³
void stv (void)
{
clrscr();
cout <<"Vvedit` kilkist chusel v ryadky kvadrata: ";
cin >> n;
for(i=0; i<n; i++)
   for(j=0; j<n; j++)
   {
      cout << "\n Yvedit` element ryandka " <<i+1 <<" stovbcya " <<j+1 <<" : ";
      cin >> mass[i*n+j];
   }
   getch();}
 
   //ïåðåãëÿä Г¬Г*òðèö³
 
void per (void)
{
cout <<"Kvadrat:";
for(i=0; i<n; i++)
   {
   cout<<endl;
   for(j=0; j<n; j++)
      cout << mass[i*n+j] <<"\t";
   }
getch();}
 
void lat (void)
{
int flag=0,sum=0,summa;
summa=n*(n+1)/2;
 
 
for(i=0; i<n; i++)
{
   for(j=0; j<n; j++)
   {
      if(mass[i*n+j]<1 || mass[i*n+j]>n)
      {
          i=n;
          j=n;
          flag=1;
      }
      sum+=mass[i*n+j];
   }
   if(sum!=summa)
   {
       i=n; 
       j=n; 
       flag=1;
   }
   sum=0;
}
 
if(flag==0)
{
   for(i=0; i<n; i++)
   {
      for(j=0; j<n; j++)
      {
         if(mass[i+j*n]<1 || mass[i+j*n]>n)
         {
            i=n;
            j=n;
            flag=1;
         }
         sum+=mass[i+j*n];
      }
      if(sum!=summa)
      {
          i=n;
          j=n; 
          flag=1;
      }
      sum=0;
   }
}
if(flag==0)
   cout << "\n Lat";
else
   cout << "\n NE lat";
getch();}
 
//ãîëîâГ*Г*Гї ïðîãðГ*Г¬Г*
void main(void)
{int a;
while (1)
 {clrscr();
 
cout<<"Vvedeny danux dlya matruci 1\nPereglyad matruci 2\nPerevirka na latunskiy kvadrat 3\nPerevirka na magichnui kvadrat 4\n\nVvedit` regum\n";
cin>>a;
switch (a)
{case 1:{stv();break;}
case 2:{per();break;}
case 3:{lat();break;}
case 4:exit(1);
default: {cout<<"\nNe vveden regim";getch();} } }}
Но только проблема, что я не могу ввести больше 5 данных. Не хотелось бы переделывать программу почти полностью. Никак нельзя это исправить оставив одномерный массив ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2012, 01:59     Ошибка при вводе матрицы.
Еще ссылки по теме:

Ошибка при вводе данных и в функциях - C++
Некорректно происходят вычисления x1 и x2. Так же при вводе в переменную a,b или c начинается непонятный цикл...ясно что он постоянный...

ошибка при вводе в неправильном формате - C++
Доброго всем времени суток! Есть код, очень простенький. И есть баг: если пользователь вводит вместо цифр буквы или ещё какую-нить...

Ошибка при вводе многомерного массива - C++
Подскажите пожалуйста. Задача заключается в следующем. Дан двумерный динамический массив, найти сумму элементов каждого столбца. Вот сам...

Ошибка при вводе русских символов - C++
Почему при вводе русских символов выпадает ошибка? familya: std::cout &lt;&lt; &quot;Введите фамилию!&quot;&lt;&lt;std::endl; std::cin&gt;&gt;familya; ...


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

Или воспользуйтесь поиском по форуму:
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
23.03.2012, 01:59     Ошибка при вводе матрицы. #4
Цитата Сообщение от wildfires Посмотреть сообщение
Здравствуйте, сейчас пишу программу для проверки матрицы на латинский и магический квадрат
Мне интересно как вы в одномерный массиве собираетесь хранить матрицу! конечно можно построчно и тд и тп! но лучше все таки переделайте под двухмерных массив!
Yandex
Объявления
23.03.2012, 01:59     Ошибка при вводе матрицы.
Ответ Создать тему
Опции темы

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