Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 1
Регистрация: 16.09.2016
Сообщений: 23
1

Удалить четные строки 2-мерной матрицы

11.11.2017, 15:47. Показов 1468. Ответов 1
Метки си (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, как реализовать такую программу. Есть двумерная матрица(количество строк и столбцов задает пользователь), заполненная случайными числами. Программа должна удалить все четные строки с исходной матрицы и вывести результирующую матрицу в консоль. Выделил блок памяти под матрицу M на N с помощью функции malloc(). Дальше как по мне нужно поднять непарные строки вверх в матрице, то есть чтобы сразу шли нечетные, а потом четные строки. А потом сузить выделяемый блок памяти до (M/2)*N элементов с помощью функции realloc() но не знаю как это реализовать. Помогите пожалуйста. Заранее спасибо за помощь.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2017, 15:47
Ответы с готовыми решениями:

Определить длину введенной строки L, и, если длина кратна 2, удалить из строки все четные числа
Ввести с клавиатуры строку текста, содержащего символы английского алфавита и целые числа. В...

Отсортировать четные строки матрицы X (10x9) в порядке убывания, а не четные в порядке возрастания
Отсортировать четные строки матрицы X (10x9) в порядке убывания, а не четные в порядке возрастания....

Удалить из строки все четные символы
есть функция. Я не понимаю,как она работает, помогите, пожалуйста void process(char *s) { int...

В указанном файле удалить все четные строки
1)С клавиатуры ввести имя файла. В указанном файле удалить все четные строки. 2) написать...

1
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
12.11.2017, 08:16 2
Лучший ответ Сообщение было отмечено AndreyRaf как решение

Решение

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int** matrix_alloc(int n, int m);
void  matrix_free(int** mat, int n);
void  matrix_print(FILE* _out, int** mat, int n, int m);
int   matrix_remove_even(int** mat, int n);
 
int main(void){
    int** mat, i, j;
    int n = 8, m = 4;
/*
    printf("Enter: ");
    scanf("%d %d", &n, &m);
*/
    if((mat = matrix_alloc(n, m)) == NULL)
        return 1;
 
    //заполнение матрицы
    for(i = 0; i < n; ++i){
        for(j = 0; j < m; ++j)
            mat[i][j] = rand() % 10;
    }
    matrix_print(stdout, mat, n, m);
 
    n = matrix_remove_even(mat, n);
 
    matrix_print(stdout, mat, n, m);
    matrix_free(mat, n);
    getchar();
    return 0;
}
 
//удаление чётных строк
int matrix_remove_even(int** mat, int n){
    int**  p, i, j;
    for(i = j = 0; i < n; ++i){
        if(!(i & 1))
            free(mat[i]);
        else
            mat[j++] = mat[i];
    }
 
    if(j == n)
        return n;
    else if(j == 0){
        free(mat);
        return 0;
    }
 
    p = (int**)realloc(mat, (size_t)j * sizeof(int*));
    if(p != NULL){
        mat = p;
        n   = j;
    }
    return n;
}
 
//освобождение памяти
void matrix_free(int** mat, int n){
    int i;
    for(i = 0; i < n; ++i)
        free(mat[i]);
    free(mat);
}
 
//выделение памяти
int** matrix_alloc(int n, int m){
    int   i;
    int** mat = (int**)malloc((size_t)n * sizeof(int*));
    if(mat == NULL)
        return NULL;
 
    for(i = 0; i < n; ++i){
        mat[i] = (int*)malloc((size_t)m * sizeof(int));
        if(mat[i] == NULL){
            matrix_free(mat, i);
            mat = NULL;
            break;
        }
    }
    return mat;
}
 
//печать
void matrix_print(FILE* _out, int** mat, int n, int m){
    int i, j;
    for(i = 0; i < n; ++i){
        for(j = 0; j < m; ++j)
            fprintf(_out, "%d ", mat[i][j]);
        fputc('\n', _out);
    }
    fputc('\n', _out);
}
0
12.11.2017, 08:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2017, 08:16
Помогаю со студенческими работами здесь

Удалить из матрицы строки, в которых все элементы четные
%-) Дана целочисленная квадратная матрица. 1) удалить из матрицы строки, в которых все элементы...

Удалить из матрицы строки, в которых все элементы чётные, вычислить среднее арифметическое элементов
Дана целочисленная квадратная матрица. 1) удалить из матрицы строки, в которых все элементы...

Соедините две матрицы A и B в новую матрицу C, поставив строки A на нечетные места, а строки матрицы B на четные
Здравствуйте! Задача такая : &quot;Соедините две матрицы A и B в новую матрицу C, поставив строки A на...

Удалить четные строки из массива
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...


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

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