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

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

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

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

01.05.2014, 00:17. Просмотров 1192. Ответов 35
Метки нет (Все метки)

Никак не найду различные элементы целочисленной квадратной матрицы. Вот объявляю ее. А как дальше поступать, без понятия. Знаю алгоритм нахождения различных элементов одномерного массива, а как для многомерного, нигде не найду. Заранее Спасибо!
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]);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2014, 00:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти различные элементы целочисленной квадратной матрицы (C++):

Для целочисленной квадратной матрицы найти число элементов, кратных k и наибольший из них - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() { int i, j,k,count =...

Удалить строку и столбец целочисленной квадратной матрицы - C++
Дана целочисленная квадратная матрица порядка n. Удалить из нее строку и столбец, на пересечении которых находится максимальный элемент...

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

Найти минимальные элементы в строках квадратной матрицы - C++
помогите пожалуйста составить код

Все элементы с наибольшим значением в целочисленной квадратной матрице порядка 10 заменить нулями - C++
Все элементы с наибольшим значением в целочисленной квадратной матрице порядка 10 заменить нулями.

Все элементы с наибольшим по модулю значением в целочисленной квадратной матрице заменить нулями - C++
Задание: все элементы с наибольшим по модулю значением в целочисленной квадратной матрице порядка N заменить нулями. Текст проги: ...

35
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,240
02.05.2014, 00:54 #16
Цитата Сообщение от Alex5 Посмотреть сообщение
&arr[6] == &arr[6][0], т.е. за пределами массива.
серьезно?
с чего это такое равенство?
массив в памяти лежит последовательно строчка за строчкой
вот такой массив
1 2 3
4 5 6
7 8 9
в памяти будет лежать как
1 2 3 4 5 6 7 8 9
попробуй
C++
1
2
3
 int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int * b =&a[0][0];
printf("%d", b[6]);
и увидишь 7
0
Alex5
1102 / 763 / 119
Регистрация: 12.04.2010
Сообщений: 1,934
02.05.2014, 01:15 #17
Цитата Сообщение от ValeryS Посмотреть сообщение
попробуй
printf("%d", b[6]);
А если так?
C++
1
2
3
  
    int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
    printf("    %d", a[6] );
Добавлено через 12 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
и увидишь 7
Правильно. Потому что sizeof(*b) == sizeof(int) == 4. И при изменении индекса на 1 адрес изменяется на 4.

Цитата Сообщение от ValeryS Посмотреть сообщение
с чего это такое равенство?
А здесь, sizeof(a[0]) == sizeof(int[3]) == 12.
{1,2,3} - это a[0], {4,5,6} - это a[1], {7,8,9} - это a[2].
C++
1
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
0
Bestear
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
02.05.2014, 03:13  [ТС] #18
Вот что у меня пока получается.
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 <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++)
    {
        printf("a[%d]= ",i+1);
        scanf("%d",&a[i]);
    }
    for(j=0;j<n;j++)
    {
        printf("a[%d]= ",j+1);
        scanf("%d",&a[j]);
    }
}
 
void BOTTAKOEHAZBAHIE(int a[M][N],m,n)
{
    int i,j,b[k]; 
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    
}
 
//void Print(int a[M][N],int m, int n)  /*ГІГіГІ âûâîæó ГҐГҐ ýëåìåГ*ГІГ» Г*Г* ГЅГЄГ°Г*Г**/
//{
//  int i,j;
//  for(i=0;i<m;i++)
//  for(j=0;j<n;j++)
//  printf("%5d",a[i][j]);
//}
 
int main(void) /*ГІГіГІ âûïîëГ*ГїГѕ ïðåäûäóùèå ГґГіГ*êöèè, */
{
    int a[M][N];
    Init(a,M,N);
    BOTTAKOEHAZBAHIE(a,M,N)
//  Print(a,M,N);   
    return 0;
}
Подскажите пожалуйста, как сказать на языке c++ что if(один элемент двумерного массива не равен другому элементу этого же массива)


Хочу функцию BOTTAKOEHAZBAHIE сделать такой, чтобы она различные элементы массива записывала в одномерный массив b. Т.е. если при сравнении каждого элемента с каждым не будет одинаковых, чтобы функция записать все элементы в одномерный массив b; если если найдутся одинаковые, то записать в массив b этот элемент 1 раз; если все одинаковые - только первый элемент двумерного массива записать в одномерный массив b.
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,240
02.05.2014, 08:30 #19
Цитата Сообщение от Alex5 Посмотреть сообщение
printf(" * *%d", a[6] );
грубейшая ошибка
массив объявлен как двумерный
и записью a[6] обращаемся к 7 строчке, которой нет
но обращаться с двемерным можно как с одномерным
и равно к одномерному можно обращаться как с двумерным
а все из-за того что в памяти они лежат элементы лежат последовательно, ну не придумали еще двумерной памяти
работа с указателями вообще может творить чудеса, если знаешь к чему это приведет, если не знаешь то крах программы гарантирован

разумеется я говорю о массивах выделенных статически
при динамическом выделении картина меняется, там по существу массив указателей
и каждая строка не обязана лежать вслед за предыдущей

Добавлено через 1 минуту
Цитата Сообщение от Bestear Посмотреть сообщение
как сказать на языке c++ что if(один элемент двумерного массива не равен другому элементу этого же массива)
наверно так
C++
1
if(a[i][j]!=a[k][m])
1
Bestear
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
02.05.2014, 14:35  [ТС] #20
Подскажите пожалуйста, в чем тут проблема? почему программа вылетает после ввода массива с клавы? Объясните пожалуйста поподробнее, а то уже месяц бьюсь с задачей найти разные элементы массива но до сих пор похоже далек от решения
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
#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++)
    {
        printf("a[%d]= ",i+1);
        scanf("%d",&a[i]);
    }
    for(j=0;j<n;j++)
    {
        printf("a[%d]= ",j+1);
        scanf("%d",&a[j]);
    }
}
 
void 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
    }
}
 
int main(void) /*тут выполняю предыдущие функции, */
{
    int a[M][N];
    Init(a,M,N);
    BOTTAKOEHAZBAHIE(a,M,N);    
    return 0;
}
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,240
02.05.2014, 16:21 #21
расскажи а что ты вводишь?
почему разные циклы?
цикл должен быть вложенный
Цитата Сообщение от Bestear Посмотреть сообщение
scanf("%d",&a[i]);
C++
1
 scanf("%d",&a[i][j]);
1
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;
}
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,240
02.05.2014, 17:17 #23
Цитата Сообщение от Bestear Посмотреть сообщение
b[k]
где у тебя индекс k изменяется?
Цитата Сообщение от Bestear Посмотреть сообщение
a[r][f]
а равно индексы [r][f]
Цитата Сообщение от Bestear Посмотреть сообщение
return b[k];
массив так не вернешь

Добавлено через 3 минуты
тебе же rikimaru2013 написал код
разберись с ним
1
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 написал код
разберись с ним
Вроде разобрался, но мы не прошли булевы функции. У нас тема двумерный массив, и все примеры делаются вот примерно как я написал. Только у меня вот не выходит ничего
0
Alex5
1102 / 763 / 119
Регистрация: 12.04.2010
Сообщений: 1,934
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 ?
2
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,240
02.05.2014, 19:41 #26
Цитата Сообщение от Alex5 Посмотреть сообщение
Можно сообщить об этом автору следующего сообщения:
можно
ну оговорился, бывает
имел то я виду совершенно другое
0
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 написана правильно?
0
rikimaru2013
C++ Game Dev
2440 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
03.05.2014, 00:32 #28
C++
1
2
3
4
void main()
{
 
}
1) зачем int?
1
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;
}
А есть какой нибудь способ узнать где именно я ошибся? А то я окончательно застопорился
0
rikimaru2013
C++ Game Dev
2440 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
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. Блин я тебе полностью готовую логику алгоритма дал - вчитайся и делов то!
1
03.05.2014, 02:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2014, 02:04
Привет! Вот еще темы с ответами:

В данной целочисленной квадратной матрице порядка N все элементы со значением Z заменить их квадратами - C++
В данной целочисленной квадратной матрице порядка N все элементы со значением Z заменить их квадратами (В С++)

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

Найти на главной диагонали квадратной матрицы максимальный и минимальный элементы - C++
Найти на главной диагонали квадратной матрицы максимальный и минимальный элементы. Поменять местами строки, в которых они расположены. ...

Найти все первые по порядку положительные элементы строк квадратной матрицы - C++
1.2. Дана целочисленная квадратная матрица. Получить b1…bn, где bi - это значение первого по порядку положительного элемента i-ой ...


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

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

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