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

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

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

Сортировка матрицы (С++ Builder 6) - C++

16.01.2014, 11:48. Просмотров 274. Ответов 9
Метки нет (Все метки)

Всем доброго времени суток, прошу вашей помощи. Задание: Заменить столбец с минимальным числом нулей на столбец с элементами из заданного массива Х размером m.
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
#include <stdio.h> // подключение библиотеки ввода/вывода
#include <conio.h> // подключение библиотеки консольного ввода/вывода
#include <math.h> // подключение математической библиотеки
main()
{
        int a[50][50], n, m, b; // Объявление переменных типа int
        printf("\n Vvedite chislo strok: "); // Введите число строк
        scanf("%d", &n);
        printf("\n Vvedite chislo stolbcov: "); // Введите число столбцов
        scanf("%d", &m);
        for (int i=1; i<=n; i++)        { // Заполнение массива
        for (int j=1; j<=m; j++)        {
            printf("Vvedite element: ");
            scanf("%d",&a[i][j]);
        }
        }
 
        for (int i=1; i<=n; i++)  { // Строки
        int k=0;
        for (int j=1; j<=m; j++)  {   // Столбцы
            if (a[j][i]==0)
               k=k+1;
        }
        }
        for (int g=1;g<=n;g++)          {
        for (int h=1;h<=m;h++)          {
                printf("%d\t", a[g][h]);
    }
        printf("\n");
}
        getch();
}
Вопрос вот в чем, как определить в каком столбце меньше всех нулей. В остальном думаю справлюсь. Помогите пожалуйста кодом. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2014, 11:48     Сортировка матрицы (С++ Builder 6)
Посмотрите здесь:

Сортировка матрицы C++
Сортировка матрицы C++
сортировка матрицы C++
Сортировка матрицы C++
C++ Сортировка матрицы
C++ Сортировка матрицы
Сортировка матрицы. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
5578 / 2612 / 239
Регистрация: 01.11.2011
Сообщений: 6,422
Завершенные тесты: 1
16.01.2014, 11:54     Сортировка матрицы (С++ Builder 6) #2
Цитата Сообщение от antifreeze Посмотреть сообщение
как определить в каком столбце меньше всех нулей
Заведите две отдельных переменных. В одну складывайте количество нулей в предыдущем столбце. Если меньше, чем в текущем, то перезаписывайте ее и запоминайте номер столбца.
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
16.01.2014, 11:55  [ТС]     Сортировка матрицы (С++ Builder 6) #3
SatanaXIII, это понятно, но куда вставить в коде это? если несложно подскажи
SatanaXIII
Супер-модератор
Эксперт С++
5578 / 2612 / 239
Регистрация: 01.11.2011
Сообщений: 6,422
Завершенные тесты: 1
16.01.2014, 12:08     Сортировка матрицы (С++ Builder 6) #4
C++
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
        int numMinColumn = -1, last_k = -1;
        for (int i=1; i<=n; i++)  { // Строки
        int k=0;
        for (int j=1; j<=m; j++)  {   // Столбцы
            if (a[j][i]==0)
               k=k+1;
        }
        if( k!=0 && k < last_k )
          {
          last_k = k;
          numMinColumn = j;
          }
        }
        
        if( last_k != -1 )
          printf("%d\t", numMinColumn);
        else
          printf("None");
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
16.01.2014, 12:21  [ТС]     Сортировка матрицы (С++ Builder 6) #5
SatanaXIII, вставил твой код, выдает ошибку
[C++ Error] Unit1.cpp(30): E2451 Undefined symbol 'j'
SatanaXIII
Супер-модератор
Эксперт С++
5578 / 2612 / 239
Регистрация: 01.11.2011
Сообщений: 6,422
Завершенные тесты: 1
16.01.2014, 12:30     Сортировка матрицы (С++ Builder 6) #6
C++
19
20
21
22
23
24
25
26
27
28
29
        int k=0, j;
        for (j=1; j<=m; j++)  {   // Столбцы
            if (a[j][i]==0)
               k=k+1;
        }
        if( k!=0 && k < last_k )
          {
          last_k = k;
          numMinColumn = j;
          }
        }
Добавлено через 49 секунд
Это я уже тут играю в франкенштейна.
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
22472 / 14649 / 4173
Регистрация: 22.10.2011
Сообщений: 25,951
Записей в блоге: 4
16.01.2014, 12:35     Сортировка матрицы (С++ Builder 6) #7
В фигню ты играешь. Можешь с тем же успехом заменить 27-ю строку на
C++
27
numMinColumn = m+1;
и не морочить голову, другого значения в переменной j после окончания цикла (в 20-23 строках) не будет никогда...
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
16.01.2014, 12:35  [ТС]     Сортировка матрицы (С++ Builder 6) #8
SatanaXIII, теперь ошибки нет, но выводится всегда None, сколько бы нулей в массив не ввел
SatanaXIII
Супер-модератор
Эксперт С++
5578 / 2612 / 239
Регистрация: 01.11.2011
Сообщений: 6,422
Завершенные тесты: 1
16.01.2014, 16:37     Сортировка матрицы (С++ Builder 6) #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
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h> // подключение библиотеки ввода/вывода
#include <conio.h> // подключение библиотеки консольного ввода/вывода
#include <math.h> // подключение математической библиотеки
 
main()
{
        int a[50][50], n, m, b; // Объявление переменных типа int
        printf("\n Vvedite chislo strok: "); // Введите число строк
        scanf("%d", &n);
        printf("\n Vvedite chislo stolbcov: "); // Введите число столбцов
        scanf("%d", &m);
        for (int i=1; i<=n; i++)        { // Заполнение массива
        for (int j=1; j<=m; j++)        {
            printf("Vvedite element[%d,%d]: ", i, j);
            scanf("%d",&a[i][j]);
        }
        }
 
 
        int numMinColumn = 1, // По умолчанию выбран первый столбец на случай, если в нем нету вообще нулей (самое минимальное количество)
            tempK = 0;
        for (int i=1; i<=n; i++)  { // Строки
        int j, k=0;
        for (j=1; j<=m; j++)  {   // Столбцы
            if (a[j][i]==0)
                if( i == 1 )       // Подсчет нулей
                    tempK=tempK+1; //  первого столбца
                else
                    k=k+1;         //  кроме порвого
        }
        if( i > 1 && k < tempK )   // Если уже не первый столбец и в текущем нулей меньше чем в запомненном
          {
          tempK = k;          // Запомнить минимальное количество нулей
          numMinColumn = i;   // Запомнить номер столбца
          }
 
        }
        printf("numMinColumn = %d\n", numMinColumn); // Вывод
 
 
 
        for (int g=1;g<=n;g++)          {
        for (int h=1;h<=m;h++)          {
                printf("%d\t", a[g][h]);
    }
        printf("\n");
}
        getch();
}

все задание в человеческом форматировании
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
#include <stdio.h> // подключение библиотеки ввода/вывода
#include <conio.h> // подключение библиотеки консольного ввода/вывода
#include <math.h> // подключение математической библиотеки
 
main()
{
        int n, m;
        int a[50][50] = {0};
        int X[50] = {0};
 
        printf("Vvedite chislo strok: ");
        scanf("%d", &n);
        printf("Vvedite chislo stolbcov: ");
        scanf("%d", &m);
 
        for( int i=0; i<n; i++ )                         //// Ввод
          for( int j=0; j<m; j++ )                         //
            {                                              //
            printf( "Vvedite element a[%d,%d]: ", i, j );  //
            scanf( "%d",&a[i][j] );                        //
            }                                              //
                                                           //
        for( int j=0; j<m; j++ )                           //
          {                                                //
          printf( "Vvedite element X[%d]: ", j );          //
          scanf( "%d",&X[j] );                             //
          }                                              ////
 
 
        int numMinColumn = 0, tempK = 0;
 
        for( int j=0; j<m; j++ )          ////
          if( a[j][0]==0 )                  //
            tempK++;                      //// В первом столбце нулей
 
        for( int i=1; i<n; i++ ) // Со второго столбца
          {                        //  поиск с минимальным количеством
          int j, k = 0;            //
          for( j=0; j<m; j++ )     //
            if( a[j][i]==0 )       //
              k++;                 //
                                   //
          if( k < tempK )          //
            {                      //
            tempK = k;             //
            numMinColumn = i;      //
            }                      //
          }                      ////
        printf("numMinColumn = %d\n", numMinColumn + 1);
 
        for( int j=0; j<m; j++ )      // Замена столбца
          a[j][numMinColumn] = X[j];  //
 
        for( int i=0; i<n; i++ )       //// Вывод
          {                              //
          for( int j=0; j<m; j++ )       //
            printf( "%d\t", a[i][j] );   //
          printf( "\n" );                //
          }                            ////
 
getch();
}

плюс с использованием динамических массивов
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
#include <stdio.h> // подключение библиотеки ввода/вывода
#include <conio.h> // подключение библиотеки консольного ввода/вывода
#include <math.h> // подключение математической библиотеки
 
main()
{
        int n, m;
 
        printf("Vvedite chislo strok: ");
        scanf("%d", &n);
        printf("Vvedite chislo stolbcov: ");
        scanf("%d", &m);
 
 
        int **a = new int*[n];
        for( int i=0; i<n; i++ )
          a[i] = new int[m];
        int *X = new int[m];
 
        for( int i=0; i<n; i++ )                         //// Ввод
          for( int j=0; j<m; j++ )                         //
            {                                              //
            printf( "Vvedite element a[%d,%d]: ", i, j );  //
            scanf( "%d",&a[i][j] );                        //
            }                                              //
                                                           //
        for( int j=0; j<m; j++ )                           //
          {                                                //
          printf( "Vvedite element X[%d]: ", j );          //
          scanf( "%d",&X[j] );                             //
          }                                              ////
 
 
        int numMinColumn = 0, tempK = 0;
 
        for( int j=0; j<m; j++ )          ////
          if( a[j][0]==0 )                  //
            tempK++;                      //// В первом столбце нулей
 
        for( int i=1; i<n; i++ ) // Со второго столбца
          {                        //  поиск с минимальным количеством
          int j, k = 0;            //
          for( j=0; j<m; j++ )     //
            if( a[j][i]==0 )       //
              k++;                 //
                                   //
          if( k < tempK )          //
            {                      //
            tempK = k;             //
            numMinColumn = i;      //
            }                      //
          }                      ////
        printf("numMinColumn = %d\n", numMinColumn + 1);
 
        for( int j=0; j<m; j++ )      // Замена столбца
          a[j][numMinColumn] = X[j];  //
 
        for( int i=0; i<n; i++ )       //// Вывод
          {                              //
          for( int j=0; j<m; j++ )       //
            printf( "%d\t", a[i][j] );   //
          printf( "\n" );                //
          }                            ////
 
getch();
 
delete[] X;
for( int i=0; i<n; i++ )
  delete[] a[i];
delete[] a;
}

и в C++ виде
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
#include <iostream.h>
 
int main()
{
        int n, m;
 
        cout << "Vvedite chislo strok: ";
        cin >> n;
        cout << "Vvedite chislo stolbcov: ";
        cin >> m;
 
 
        int **a = new int*[n];
        for( int i=0; i<n; i++ )
          a[i] = new int[m];
        int *X = new int[m];
 
 
        for( int i=0; i<n; i++ )                                 //// Ввод
          for( int j=0; j<m; j++ )                                 //
            {                                                      //
            cout << "Vvedite element a[" << i << "," << j << "]: ";//
            cin >> a[i][j];                                        //
            }                                                      //
                                                                   //
        for( int j=0; j<m; j++ )                                   //
          {                                                        //
          cout << "Vvedite element X[" << j << "]: ";              //
          cin >> X[j];                                             //
          }                                                      ////
 
 
        int numMinColumn = 0, tempK = 0;
 
        for( int j=0; j<m; j++ )          ////
          if( a[j][0]==0 )                  //
            tempK++;                      //// В первом столбце нулей
 
        for( int i=1; i<n; i++ ) // Со второго столбца
          {                        //  поиск с минимальным количеством
          int j, k = 0;            //
          for( j=0; j<m; j++ )     //
            if( a[j][i]==0 )       //
              k++;                 //
                                   //
          if( k < tempK )          //
            {                      //
            tempK = k;             //
            numMinColumn = i;      //
            }                      //
          }                      ////
        cout << "numMinColumn = " << numMinColumn + 1 << endl;
 
        for( int j=0; j<m; j++ )      // Замена столбца
          a[j][numMinColumn] = X[j];  //
 
        for( int i=0; i<n; i++ )       //// Вывод
          {                              //
          for( int j=0; j<m; j++ )       //
            {                            //
            cout.width(5);               //
            cout << a[i][j];             //
            }                            //
          cout << endl;                  //
          }                            ////
 
cin.ignore(2);
 
delete[] X;
for( int i=0; i<n; i++ )
  delete[] a[i];
delete[] a;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2014, 23:39     Сортировка матрицы (С++ Builder 6)
Еще ссылки по теме:

Массивы. С++ Builder. Вычислить среднее арифметическое элементов матрицы, расположенных на главной диагонали C++
C++ Сортировка матрицы
C++ Сортировка матрицы
C++ Сортировка одномерного массива (С++ Builder 6)
Сортировка матрицы C++

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

Или воспользуйтесь поиском по форуму:
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
16.01.2014, 23:39  [ТС]     Сортировка матрицы (С++ Builder 6) #10
SatanaXIII, огромное спасибо, всё работает на ура! Премного благодарен, тема закрыта
Yandex
Объявления
16.01.2014, 23:39     Сортировка матрицы (С++ Builder 6)
Ответ Создать тему
Опции темы

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