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

Найти различные элементы целочисленной квадратной матрицы - C++

Восстановить пароль Регистрация
 
 
Bestear
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
01.05.2014, 00:17     Найти различные элементы целочисленной квадратной матрицы #1
Никак не найду различные элементы целочисленной квадратной матрицы. Вот объявляю ее. А как дальше поступать, без понятия. Знаю алгоритм нахождения различных элементов одномерного массива, а как для многомерного, нигде не найду. Заранее Спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#define M 3
#define N 3
 
void Init(int a[M][N],int m, int n) /* тут задаю матрицу*/
{
    int i,j;
    for(i=0;i<m;i++)
    {
        printf("a[%d]= ",i+1);
        scanf("%d",&a[i]);
    }
    for(j=0;j<n;j++)
    {
        printf("a[%d]= ",j+1);
        scanf("%d",&a[j]);
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2014, 00:17     Найти различные элементы целочисленной квадратной матрицы
Посмотрите здесь:

Все элементы с наибольшим значением в целочисленной квадратной матрице порядка 10 заменить нулями C++
Удалить строку и столбец целочисленной квадратной матрицы C++
C++ Найти на главной диагонали квадратной матрицы максимальный и минимальный элементы
C++ C++ Задача на екзамене Для целочисленной квадратной матрицы найти количество элементов кратных k, и самый большой из них
Удалить из целочисленной квадратной матрицы строку с минимальным средним значением элементов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
02.05.2014, 16:21     Найти различные элементы целочисленной квадратной матрицы #21
расскажи а что ты вводишь?
почему разные циклы?
цикл должен быть вложенный
Цитата Сообщение от Bestear Посмотреть сообщение
scanf("%d",&a[i]);
C++
1
 scanf("%d",&a[i][j]);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bestear
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
02.05.2014, 16:43  [ТС]     Найти различные элементы целочисленной квадратной матрицы #22
ну я так вроде всегда задавал матрицу, нас так учили. а вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Init(int a[M][N],int m, int n)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        printf("a[%d]= ",i+1);
    scanf("%d",&a[i][j]);
    }
    for(j=0;j<n;j++)
    {
        printf("a[%d]= ",j+1);
    scanf("%d",&a[i][j]);
    }
}
компилятор сразу отвергает и вылетает.
Получается вся проблема в том что я как то не так задаю матрицу?

Добавлено через 7 минут
Вот теперь точно правильно задал массив и все равно не работает. Подскажите пожалуйста в чем дело?
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
#include <stdio.h>
#include <stdlib.h>
#define M 3
#define N 3
 
void Init(int a[M][N],int m, int n) /* тут задаю матрицу*/
{
    int i,j;
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    a[i][j]=rand()%100;
}
 
int BOTTAKOEHAZBAHIE(int a[M][N], int m, int n)
{
    int i,j,r,f,k,b[k]; 
    for(i=0; i<m; i++)
    for(j=0; j<n; j++)
    if(a[i][j] != a[r][f]) // если какой то элемент не равен другому элементу двумерного массива
    {
        b[k]=a[i][j];      //то записать этот элемент в массив b
        printf("%d",b[k]); //и распечатать массив b
    }
    return b[k];
}
 
int main(void) /*тут выполняю предыдущие функции, */
{
    int a[M][N];
    Init(a,M,N);
    BOTTAKOEHAZBAHIE(a,M,N);
    printf("%d",BOTTAKOEHAZBAHIE(a,M,N));   
    return 0;
}
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
02.05.2014, 17:17     Найти различные элементы целочисленной квадратной матрицы #23
Цитата Сообщение от Bestear Посмотреть сообщение
b[k]
где у тебя индекс k изменяется?
Цитата Сообщение от Bestear Посмотреть сообщение
a[r][f]
а равно индексы [r][f]
Цитата Сообщение от Bestear Посмотреть сообщение
return b[k];
массив так не вернешь

Добавлено через 3 минуты
тебе же rikimaru2013 написал код
разберись с ним
Bestear
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
02.05.2014, 17:50  [ТС]     Найти различные элементы целочисленной квадратной матрицы #24
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
#include <stdio.h>
#include <stdlib.h>
#define M 3
#define N 3
 
void Init(int a[M][N],int m, int n) /* ГІГіГІ Г§Г*Г¤Г*Гѕ Г¬Г*òðèöó*/
{
    int i,j;
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    a[i][j]=rand()%100;
}
 
int BOTTAKOEHAZBAHIE(int a[M][N], int m, int n)
{
    int i,j,r,f,k,b[k]; 
    for(i=0; i<m; i++)
    for(j=0; j<n; j++)
    if(a[i][j] != a[r][f]) // åñëè ГЄГ*êîé ГІГ® ýëåìåГ*ГІ Г*ГҐ Г°Г*ГўГҐГ* äðóãîìó ýëåìåГ*ГІГі äâóìåðГ*îãî Г¬Г*Г±Г±ГЁГўГ*
    {
        while(k<M)
        {
            b[k]=a[i][j];      //ГІГ® Г§Г*ГЇГЁГ±Г*ГІГј ýòîò ýëåìåГ*ГІ Гў Г¬Г*Г±Г±ГЁГў b
            k++;
            printf("%d",b[k]); //ГЁ Г°Г*Г±ГЇГҐГ·Г*ГІГ*ГІГј Г¬Г*Г±Г±ГЁГў b           
        }        
    }
    return b[k];
}
 
int main(void) /*ГІГіГІ âûïîëГ*ГїГѕ ïðåäûäóùèå ГґГіГ*êöèè, */
{
    int a[M][N];
    Init(a,M,N);
    BOTTAKOEHAZBAHIE(a,M,N);
    printf("%d",BOTTAKOEHAZBAHIE(a,M,N));   
    return 0;
}
Теперь вроде должен увеличиваться к до тех пор пока не будет меньше М. Но все равно не работает.


Цитата Сообщение от ValeryS Посмотреть сообщение
return b[k];
массив так не вернешь
А как быть тогда? Мне нужно чтобы функция сделала свое дело и вернула мне массив b, чтобы я его в int main распечатал

Цитата Сообщение от ValeryS Посмотреть сообщение
тебе же rikimaru2013 написал код
разберись с ним
Вроде разобрался, но мы не прошли булевы функции. У нас тема двумерный массив, и все примеры делаются вот примерно как я написал. Только у меня вот не выходит ничего
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
02.05.2014, 19:32     Найти различные элементы целочисленной квадратной матрицы #25
Цитата Сообщение от ValeryS Посмотреть сообщение
грубейшая ошибка
массив объявлен как двумерный
и записью a[6] обращаемся к 7 строчке, которой нет
Совершенно верно. Можно сообщить об этом автору следующего сообщения:
Цитата Сообщение от ValeryS Посмотреть сообщение
и у массива arr[5][5]
можно обратится как arr[6] он укажет на элемент arr[1][5]
Добавлено через 11 минут
Цитата Сообщение от Bestear Посмотреть сообщение
C++
1
2
3
4
int i,j,r,f,k,b[k]; 
 for(i=0; i<m; i++)
 for(j=0; j<n; j++)
 if(a[i][j] != a[r][f]) // если какой то элемент не равен другому элементу двумерного массива
А чему равны здесь r и f ?
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
02.05.2014, 19:41     Найти различные элементы целочисленной квадратной матрицы #26
Цитата Сообщение от Alex5 Посмотреть сообщение
Можно сообщить об этом автору следующего сообщения:
можно
ну оговорился, бывает
имел то я виду совершенно другое
Bestear
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
02.05.2014, 21:26  [ТС]     Найти различные элементы целочисленной квадратной матрицы #27
Цитата Сообщение от Alex5 Посмотреть сообщение
А чему равны здесь r и f ?
А, точно. Вот исправил
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
#include <stdio.h>
#include <stdlib.h>
#define M 3
#define N 3
 
void Init(int a[M][N],int m, int n) /* ГІГіГІ Г§Г*Г¤Г*Гѕ Г¬Г*òðèöó*/
{
    int i,j;
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    a[i][j]=rand()%100;
}
 
int BOTTAKOEHAZBAHIE(int a[M][N], int m, int n)
{
    int i,j,r,f,k,b[k]; 
    r=f=0;
    for(i=0; i<m; i++)
    for(j=0; j<n; j++)
     for(r=0; r<n; r++)
      for(f=0; f<m; f++)
    if(a[i][j] != a[r][f]) // åñëè ГЄГ*êîé ГІГ® ýëåìåГ*ГІ Г*ГҐ Г°Г*ГўГҐГ* äðóãîìó ýëåìåГ*ГІГі äâóìåðГ*îãî Г¬Г*Г±Г±ГЁГўГ*
    {
        while(k<M)
        {
            b[k]=a[i][j];      //ГІГ® Г§Г*ГЇГЁГ±Г*ГІГј ýòîò ýëåìåГ*ГІ Гў Г¬Г*Г±Г±ГЁГў b
            k++;
            printf("%d",b[k]); //ГЁ Г°Г*Г±ГЇГҐГ·Г*ГІГ*ГІГј Г¬Г*Г±Г±ГЁГў b           
        }        
    }
    return b[k];
}
 
int main(void) /*ГІГіГІ âûïîëГ*ГїГѕ ïðåäûäóùèå ГґГіГ*êöèè, */
{
    int a[M][N];
    Init(a,M,N);
    BOTTAKOEHAZBAHIE(a,M,N);
    printf("%d",BOTTAKOEHAZBAHIE(a,M,N));   
    return 0;
}
Добавлено через 1 час 11 минут
но проблема все равно не решилась

Добавлено через 8 минут
Подскажите пожалуйста, функция main написана правильно?
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
03.05.2014, 00:32     Найти различные элементы целочисленной квадратной матрицы #28
C++
1
2
3
4
void main()
{
 
}
1) зачем int?
Bestear
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
03.05.2014, 00:55  [ТС]     Найти различные элементы целочисленной квадратной матрицы #29
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
зачем int?
Вот, вроде исправил, но все равно не работает
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
#include <stdio.h>
#include <stdlib.h>
#define M 3
#define N 3
 
void Init(int a[M][N],int m, int n) /* тут задаю матрицу*/
{
    int i,j;
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    a[i][j]=rand()%100;
}
 
int BOTTAKOEHAZBAHIE(int a[M][N], int m, int n)
{
    int i,j,r,f,k,b[k]; 
    r=f=0;
    for(i=0; i<m; i++)
    for(j=0; j<n; j++)
     for(r=0; r<n; r++)
      for(f=0; f<m; f++)
    if(a[i][j] != a[r][f]) // если какой то элемент не равен другому элементу двумерного массива
    {
        while(k<M)
        {
            b[k]=a[i][j];      //то записать этот элемент в массив b
            k++;
            printf("%d",b[k]); //и распечатать массив b         
        }        
    }
    return b[k];
}
 
int main() /*тут выполняю предыдущие функции, */
{
    int a[M][N];
    Init(a,M,N);
    BOTTAKOEHAZBAHIE(a,M,N);
    printf("%d",BOTTAKOEHAZBAHIE(a,M,N));   
    return 0;
}
А есть какой нибудь способ узнать где именно я ошибся? А то я окончательно застопорился
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
03.05.2014, 02:04     Найти различные элементы целочисленной квадратной матрицы #30
1.
C++
1
a[i][j]=rand()%100;
тут будет всегда одно и тоже число.
Надо так:
C++
1
2
3
4
5
6
7
#include <ctime>
void main()
{
srand(time(0));
 
// теперь при вызове rand() будет новое число
}
2.
C++
1
2
3
4
5
6
int i,j,r,f,k,b[k]; 
    r=f=0;
    for(i=0; i<m; i++)
    for(j=0; j<n; j++)
     for(r=0; r<n; r++)
      for(f=0; f<m; f++)
1) локальные переменные для цикла объявляй в блоке инициализации и НЕЗАБЫВАЙ табуляцию
C++
1
2
3
4
 for(int i=0; i<m; i++)
         for(int j=0; j<n; j++)
              for(int r=0; r<n; r++)
                 for(int f=0; f<m; f++)
2. k,b[k] что за *** ??
1) Называй переменные своим предназначением:
k - счётчик? counter
b - временный массив? temp_arr
2) int i,j,r,f,k,b[k]; - в ячейке k мусор и ты тут же объявляет массив с размером мусора. Что?)
3) Возвращать массив чутка бред. Просто ты еще указатели не учил.

Итого весь твой бредовый код такой сейчас:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int BOTTAKOEHAZBAHIE(int a[M][N], int m, int n)
{
    const int size = M*N;
    int temp_arr[size] = {};
    int counter =0;
    for(int i=0; i<m; i++)
         for(int j=0; j<n; j++)
              for(int r=0; r<n; r++)
                 for(int f=0; f<m; f++)
                      if(a[i][j] != a[r][f]) // если какой то элемент не равен другому элементу двумерного массива
                        {
                            while(counter<M)
                            {
                                temp_arr[counter]=a[i][j];      //то записать этот элемент в массив b
                                counter++;
                                printf("%d",temp_arr[counter]); //и распечатать массив b         
                            }        
                        }
    return temp_arr[counter];
}
Почему бредовый? Массив
1 2 3
1 2 3
Подумай что делает твой четверной цикл

P.S. Блин я тебе полностью готовую логику алгоритма дал - вчитайся и делов то!
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
03.05.2014, 09:38     Найти различные элементы целочисленной квадратной матрицы #31
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
зачем int?
По стандарту
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
const int size = M*N;
* * int temp_arr[size] = {};
во всех ли компиляторах такое будет работать?
Bestear
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
03.05.2014, 20:53  [ТС]     Найти различные элементы целочисленной квадратной матрицы #32
А для чего у Вас нужны эти переменные?
zero_was
noExist


Что означает cout.width(3); ?


Цитата Сообщение от rikimaru2013 Посмотреть сообщение
if( arr[i][z] == temp_arr[temp_i] && arr[i][z] != 0)
Для чего
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
&& arr[i][z] != 0)
?


И что означает
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
if(arr[i][z] == 0) // один ноль запишим и хватит
* * * * * * * * * * * * zero_was = true;
?
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
03.05.2014, 23:22     Найти различные элементы целочисленной квадратной матрицы #33
Цитата Сообщение от Bestear Посмотреть сообщение
А для чего у Вас нужны эти переменные?
zero_was
noExist
zero_was - (перевод "ноль_был") - в этой переменной bool значение был ноль уже или нет (с) капитан_очевидность
noExist - (перевод "неСуществует") - в этой переменной bool значение нашли совпадение уже или его не существует (с) капитан_очевидность
Цитата Сообщение от Bestear Посмотреть сообщение
Что означает cout.width(3); ?
Убери с кода, посмотри, верни - сделай вывод. Сабж: если нужно вывести, что-то у кого символов меньше 3-ёх остальное заполняется пробелами.
Цитата Сообщение от Bestear Посмотреть сообщение
if( arr[i][z] == temp_arr[temp_i] && arr[i][z] != 0)
Убери и посмотри, что получиться. Если в твоём ряде чисел будет ноль, то его не запишут в наш второстепенный массив так как он первоначально заполнен нулями. arr[i][z] == temp_arr[temp_i] будет true
Цитата Сообщение от Bestear Посмотреть сообщение
if(arr[i][z] == 0) // один ноль запишим и хватит
* * * * * * * * * * * * zero_was = true;
запишем ноль только один раз если он есть в нашем ряде чисел
Bestear
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
03.05.2014, 23:45  [ТС]     Найти различные элементы целочисленной квадратной матрицы #34
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
в этой переменной bool значение был ноль уже или нет
Так чем бедный ноль от других цифр отличается то? зачем его постоянно выделять?
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
04.05.2014, 00:16     Найти различные элементы целочисленной квадратной матрицы #35
arr[i][z] == temp_arr[temp_i]

в temp_arr[temp_i] при первой итерации уже все нули!!

если массив 0 1 2 3 4

он не запишет ноль, и первый элемент будет 1. Ну возьми листочек и отдебаж программу что пишешь или через отладчик

Добавлено через 4 минуты
C++
1
int temp_arr[size] = {};
равносильно
C++
1
int temp_arr[size] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2014, 01:51     Найти различные элементы целочисленной квадратной матрицы
Еще ссылки по теме:

Найти минимальные элементы в строках квадратной матрицы C++
Все элементы с наибольшим по модулю значением в целочисленной квадратной матрице заменить нулями C++
Для целочисленной квадратной матрицы найти число элементов, кратных k и наибольший из них C++

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

Или воспользуйтесь поиском по форуму:
Bestear
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
04.05.2014, 01:51  [ТС]     Найти различные элементы целочисленной квадратной матрицы #36
Огромное спасибо! Все предельно ясно!)
Yandex
Объявления
04.05.2014, 01:51     Найти различные элементы целочисленной квадратной матрицы
Ответ Создать тему
Опции темы

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