Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
1

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

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

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток, прошу вашей помощи. Задание: Заменить столбец с минимальным числом нулей на столбец с элементами из заданного массива Х размером 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();
}
Вопрос вот в чем, как определить в каком столбце меньше всех нулей. В остальном думаю справлюсь. Помогите пожалуйста кодом. Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2014, 11:48
Ответы с готовыми решениями:

Сортировка в Builder
Суть задачи: Дан перечень стран, который включает в себя: название, континент, столицу, площадь,...

Сортировка слов в C++ Builder
Надо отсортировать слова по алфавиту. Слова вводятся через Edit по кнопке &quot;добавить&quot; в StringGrid....

C++Builder 6 поиск и сортировка в БД
Всем Здорова. Плиз помогите, у меня БД Пк фирмы и мне нужно сделать поиск и сортировку. Кто-нибудь...

C++ Builder, из Excel в StringGrid, сортировка
Помогите пожалуйста, дали задание в технаре, Через OpenDialog загрузить данные из Excel таблицы в...

9
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
16.01.2014, 11:54 2
Цитата Сообщение от antifreeze Посмотреть сообщение
как определить в каком столбце меньше всех нулей
Заведите две отдельных переменных. В одну складывайте количество нулей в предыдущем столбце. Если меньше, чем в текущем, то перезаписывайте ее и запоминайте номер столбца.
0
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
16.01.2014, 11:55  [ТС] 3
SatanaXIII, это понятно, но куда вставить в коде это? если несложно подскажи
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
16.01.2014, 12:08 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");
0
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
16.01.2014, 12:21  [ТС] 5
SatanaXIII, вставил твой код, выдает ошибку
[C++ Error] Unit1.cpp(30): E2451 Undefined symbol 'j'
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
16.01.2014, 12:30 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 секунд
Это я уже тут играю в франкенштейна.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
16.01.2014, 12:35 7
В фигню ты играешь. Можешь с тем же успехом заменить 27-ю строку на
C++
27
numMinColumn = m+1;
и не морочить голову, другого значения в переменной j после окончания цикла (в 20-23 строках) не будет никогда...
0
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
16.01.2014, 12:35  [ТС] 8
SatanaXIII, теперь ошибки нет, но выводится всегда None, сколько бы нулей в массив не ввел
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
16.01.2014, 16:37 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;
}
1
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
16.01.2014, 23:39  [ТС] 10
SatanaXIII, огромное спасибо, всё работает на ура! Премного благодарен, тема закрыта
0
16.01.2014, 23:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2014, 23:39
Помогаю со студенческими работами здесь

Сортировка одномерного массива (С++ Builder 6)
Необходимо из массива удалить все элементы, равные минимальному элементу в массиве. #include...

Сортировка, оптимизация кода в Builder 2010
Здравствуйте, уважаемые знатоки! Имеется ли функция в Builder 2010, которая приводит в небольшой...

Сортировка массива и сортировка строка матрицы
1) Создание массива А с помощью рандома с целыми от -100 до 100 и вывести его на экран....

матрицы на С++ Builder
Даны матрицы С(3,3), D(3,3). Сформировать матрицу К(3,3) по формуле К=4*D-С*D.

Матрицы. Сортировка в порядке убывания сверху вниз столбца матрицы
Заданно две матрицы a и d Составить прогр-му сортировки в порядке убывания сверху вниз того...

Обход матрицы С++ Builder
Есть матрица 4х4 4 3 12 7 7 1 4 12 5 2 9 1 4 6 6 17 Нужно вывести её элементы как...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru