0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 1
1

Строки, не содержащие нулевые элементы, переместить в начало матрицы

16.12.2015, 22:16. Показов 650. Ответов 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
#include <stdio.h> 
#include <conio.h> 
#include <locale.h> 
#define _USE_MATH_DEFINE 
#include <math.h> 
#include <stdlib.h> 
 
void swap(int *ptr1, int *ptr2)
{
    int p;
    p = *ptr1;
    *ptr1 = *ptr2;
    *ptr2 = p;
}
 
 
int main()
{
    setlocale(LC_ALL, "RUS");
    int m, n, u = 0, c = 0;
    int **a;
    printf_s("Введите размер матрицы МхN:");
    scanf_s("%d%d", &m, &n);
    a = (int**)malloc(m*sizeof(int*));
    for (int i = 0; i < m; i++)
    {
        a[i] = (int*)malloc(n*sizeof(int));
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf_s("\nВведите a[%d][%d]=", i, j);
            scanf_s("%d", &a[i][j]);
        }
    }
    for (int i = 0; i < m; i++)
    {
            for (int j = 0; j < n; j++)
            {
                if (a[i][j] > 0)
                {
                    u++;
                }
                if (a[i + 1][j] > 0)
                {
                    c++;
                }
                if (j == n && u < c || u > c)
                {
                    for (int g = 0; g > m; g++)
                    {
                        for (int q = 0; q < n; q++)
                        {
                            swap(&a[g][q], &a[g+1][q]);
                        }
                    }
                }
            }
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf_s("%5d", a[i][j]);
        }
        printf_s("\n");
    }
    free(a);
    _getch();
    return(0);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2015, 22:16
Ответы с готовыми решениями:

Переместить все нулевые элементы в конец очереди
Пользователь вводит последовательность чисел, нужно отредактировать так, чтобы все 0 &quot;ушли&quot; в конец...

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

Вычислить произведение положительных элементов массива, нулевые элементы переместить в конец
Вычислить произведение положительных элементов массива. Вывести на дисплей полученное значение....

Переместить элементы массива равные единице в начало
Пожалуйста помогите с сортировкой массива. Сначала идут все элементы равные единице а потом все...

1
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
17.12.2015, 13:00 2
Чуть добавил
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
#include <stdio.h> 
#include <conio.h> 
#include <locale.h> 
#define _USE_MATH_DEFINE 
#include <math.h> 
#include <stdlib.h> 
 
void swap(int **ptr1, int j, int i)
{
    int *p = ptr1[i];
    ptr1[i] = ptr1[j];
    ptr1[j] = p;
}// здесь если передать a[i] и a[j], то как я понял
//происходит передача по значению, а не по адресу
//и в swap делаются копии содержимого a[i] и a[j](адресов)
 
int main()
{
    setlocale(LC_ALL, "RUS");
    void selsort(int*, int**, int);
    int m, n, u = 0, c = 0;
    int **a;
    printf_s("Введите размер матрицы МхN:");
    scanf_s("%d%d", &m, &n);
    a = (int**)malloc(m*sizeof(int*));
    for (int i = 0; i < m; i++)
    {
        a[i] = (int*)malloc(n*sizeof(int));
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf_s("\nВведите a[%d][%d]=", i, j);
            scanf_s("%d", &a[i][j]);
        }
    }
    int *sort = (int*)calloc(m, sizeof(int));//мас. для инициал. строк
    for (int i = 0; i < m; i++)         // с нулевыми элементами.
        for (int j = 0; j < n; j++)
            if (!a[i][j]) {// если в строке ноль
                sort[i] = 1;// ставим флаг 
                break;//и выходим из строки.
            }
    selsort(sort, a, m);//сорт. массив с флагами и попутно строки.
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf_s("%5d", a[i][j]);
        }
        printf_s("\n");
    }
    free(a);
    _getch();
    return(0);
}
void selsort(int *sort, int **a, int nym)
{
    for (int i = nym - 1; i >= 0; --i)
        for (int j = 0; j < i; ++j)
            if (sort[j]) {  
                int x = sort[j];
                sort[j] = sort[i];
                sort[i] = x;
                swap(a, j, i);
                break;
            }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2015, 13:00
Помогаю со студенческими работами здесь

Положительные элементы массива переместить в начало, а отрицательные — в конец
Дана последовательность чисел неизвестной длинны. Нужно заполнить массив этими числами, а потом в...

Перевести с паскаля программу: Все отрицательные элементы переместить в начало массива
Помогите перевести из паскаля в с var a:arrayof integer; i,j,t,n:integer; begin randomize;...

В массиве все отрицательные элементы переместить в начало массива а остальные в конец
В одномерном массиве все отрицательные элементы перемещаются в начало массива а остальные в конец...

В одномерном массиве все отрицательные элементы переместить в начало, а остальные - в конец
Помогите написать блох-схему на данный код... //В одномерном массиве все отрицательные элементы...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru