Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
3 / 3 / 1
Регистрация: 03.10.2009
Сообщений: 157

Переместить строки в конец матрицы

11.12.2012, 21:52. Показов 1069. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Задание:Строки, содержащие хотя бы один нулевой элемент, переместить в конец матрицы.
Нужна помощь, а именно :
1) Не вводится матрица с клавиатуры (функция void in_matr(...);
2) У меня есть только функция , для Первого нулевого элемента (void rows_move (...); ). Помогите её подправить под задание.(Если есть хотя бы 1 нулевой ЭЛЕМЕНТ строку переносим.)
Спасибо.
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 <clx.h>
#include <conio.h> // áèáëèîòåêa êîíñîëüíîãî ââîäà/âûâîäà, getch()
#include <stdio.h> // ïîäêëþ÷åíèå scanf() è printf()
#pragma hdrstop
//----------------------------------------------------------------------------
 
void in_matr(int x[ ][10], int m, int n);  // ââîä ìàòðèöû ðàçìåðîì m *n
void out_matr(int x[ ][10], int m, int n); // âûâîä ìàòðèöû ðàçìåðîì m*n
void rows_move(int x[ ][10], int m, int n); // ïåðåìåùåíèå ñòðîê , êîòîðûå
// ñîäåðæàò õîòÿ áû îäèí íóëåâîé ýëåìåíò
 
 
//---------------------------------------------------------------------------
 
#pragma argsused
void main()
{ int n,m,x[10][10];
printf("\n\n\t*** Work Number 12 ***\n \n\n Enter razmer matrici m<=10, n<=10: ");
scanf ("%d%d",&m,&n);
in_matr(x, m, n);
printf("\n Ishodnaya matrica: %d*%d \n", m, n);
out_matr( x, m, n );
printf("\n Peremeshenie strok s noolevim elementom: \n");
rows_move( x, m, n );
out_matr( x, m, n );
getch ();
}
//-------------------------------------------------------------------------------
       void in_matr(int x[ ][10], int m, int n)
{ int i, j;
    printf("\n Vvedite m * n: \n");
    scanf("%d",&m, &n);
    for ( i = 0; i < n; i++)
        for ( j = 0; j < n; j++)
            scanf("%d", &x[i][j]);
}
 
//-------------------------------------------------------------------------------
 
void out_matr(int x[ ][10], int m, int n)
{ int i, j;
    for ( i = 0; i < m; i++ )
    {  for (j = 0; j < n; j++ )
            printf("%d\t", x[i][j]);
        printf("\n");
    }
}
 
 
//----------------------------------------------------------------------------
void rows_move(int x[ ][10], int m, int n)
{   int ii = 0, // íîìåð ñòðîêè ñ ïåðâûì íóëåâûì ýëåìåíòîì
    kk = n-1, // íîìåð ñòðîêè ñ ïåðâûì íåíóëåâûì ýëåìåíòîì
    // îò ïîñëåäíåé ñòðîêè
    i, j, k, w;
    while( ii < kk )
    {   for ( i = ii; i < m-1; i++) // ïîèñê ñòðîêè ñ ïåðâûì íóëåâûì ýëåìåíòîì
            if( x[i][0] == 0 )  break;
        ii = i;
        for ( k = kk; k > ii; k--) // ïîèñê ñòðîêè ñ ïåðâûì íåíóëåâûì ýëåìåíòîì
            if( x[k][0] != 0 )  break;  // îò ïîñëåäíåé ñòðîêè
        kk = k;
        if( ii < kk ) // ìåíÿåì ñòðîêè ii è kk ìåñòàìè
        for ( j = 0; i < n; j++) // ñòîëáöû j è k
            { w = x[ii][j];
              x[ii][j] = x[kk][j];
              x[kk][j] = w;
            }
        ii++, kk--;
    }
}
 
//---------------------------------------------------------------------------
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.12.2012, 21:52
Ответы с готовыми решениями:

Конец строки
Привет всем. Глупый вопрос но все же. В файле находится строка (или строки) A-&gt;Sasas|D|F и S-&gt;A|gh|Y В V должно быть выведено A, D,...

RichEdit и конец строки
Необходимо менять размеры шрифта RichEdit по кнопке, но из-за этого будет сбиваться признаки начала и конца строки. Что делать в этом...

Отловить конец строки в компоненте Memo
Подскажите пожалуйста как отловить конец строки в компоненте Memo или хотябы получить размер !!! Мне нужен цикл в котором обрабатывается...

4
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
12.12.2012, 02:18
Прочитайте про использование динамических массивов.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
12.12.2012, 14:41
По перемещению строк можешь тут глянуть - Задан массив А. Поменять в нем местами первую и последнюю строку

Добавлено через 11 минут
Цитата Сообщение от DeadZone Посмотреть сообщение
Помогите её подправить под задание.(Если есть хотя бы 1 нулевой ЭЛЕМЕНТ строку переносим.)
Смотри по-очереди каждый элемент - если ноль, текущую строчку делаем последней в массиве, а все строчки, следующие за ней поднимаем на одну вверх. Хотя, по мне, так проще сформировать два новых массива, забив в первый строчки без нулей, во второй - с нулями, и затем объединив их в один, чем в единственном массиве тасовать строчки туда-сюда...

Добавлено через 2 минуты
С другой стороны, если массив создается динамически, то проще наоборот...
1
3 / 3 / 1
Регистрация: 03.10.2009
Сообщений: 157
12.12.2012, 15:48  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
По перемещению строк можешь тут глянуть - Задан массив А. Поменять в нем местами первую и последнюю строку

Добавлено через 11 минут

Смотри по-очереди каждый элемент - если ноль, текущую строчку делаем последней в массиве, а все строчки, следующие за ней поднимаем на одну вверх. Хотя, по мне, так проще сформировать два новых массива, забив в первый строчки без нулей, во второй - с нулями, и затем объединив их в один, чем в единственном массиве тасовать строчки туда-сюда...

Добавлено через 2 минуты
С другой стороны, если массив создается динамически, то проще наоборот...
Можете подправить мой код , пожалуйста.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
21.12.2012, 01:00
Вариант "запутанный" - адресная арифметика плюс поэлементное перемещение строк вместо перетасовки указателей на строки - специально для кружка любителей напильника.
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
void in_matr( int *x, int m, int n ) {
    printf( "\n Вводим массив: \n" );
    for ( size_t i = 0, j; i < m; ++i ) {
        for ( j = 0; j < n; ++j ) {
            scanf( "%d", x + i *n + j );
        }
    }
}
// -------------------------------------------------------------------------------
void out_matr( int *x, int m, int n ) {
    for ( size_t i = 0, j; i < m; ++i ) {
        for ( j = 0; j < n; ++j ) {
            printf( "%d\t", *( x + i *n + j ) );
        }
        printf( "\n" );
    }
}
// ----------------------------------------------------------------------------
void swap_rows( int *x, int row1, int row2, int cols_count ) {
    int tmp, *_row1i, *_row2i;
    for ( size_t i = 0; i < cols_count; ++i ) {
        tmp = *( _row1i = x + row1 * cols_count + i );
        *_row1i = *( _row2i = x + row2 * cols_count + i );
        *_row2i = tmp;
    }
}
// ----------------------------------------------------------------------------
void rows_move( int *x, int m, int n ) {
    for ( size_t i = 0, j, k; i < m; ++i ) {
        for ( j = 0; j < n; ++j ) {
            if ( *( x + i * n + j ) == 0 ) {
                for ( k = i; k < m - 1; ++k ) {
                    swap_rows( x, k, k + 1, n );
                }
            }
        }
    }
}
// ---------------------------------------------------------------------------
int main( ) {
    int n, m, *x;
    printf( "\n\n\t*** Work Number 12 ***\n \n\n Enter razmer matrici m<=10, n<=10: " );
    scanf( "%d%d", &m, &n );
    x = new int[m * n];
    in_matr( x, m, n );
    printf( "\n Ishodnaya matrica: %d*%d \n", m, n );
    out_matr( x, m, n );
    printf( "\n Peremeshenie strok s noolevim elementom: \n" );
    rows_move( x, m, n );
    out_matr( x, m, n );
    delete[]x;
    getch( );
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2012, 01:00
Помогаю со студенческими работами здесь

Переместить элементы матрицы равные 0 в конец строки, сохранив порядок следования остальных элементов
Проблема следующая : дано двумерный массив надо переместить элементы которые равны 0 в конец строки при этом последовательность следования...

Столбец, в котором есть седловая точка матрицы переместить в конец матрицы
Столбец, в котором есть седловая точка матрицы переместить в конец матрицы SOS

Как переместить символ окончания строки /0 в конец строки?
Это мне нужно сделать, чтоб не появлялись кракозябры. Причем сделать для всех строк подключенного к программе файла.

Переместить первое слово в конец строки
нужно переместить первое слово строки в конец строки (язык си). можно использовать специальные функции из библиотеки string.h ...

В случае равенства строк и столбцов матрицы переместить их в конец
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define max 4 int main() { int array, array2 ; int temp1, temp2;


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru