Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
trum
0 / 0 / 2
Регистрация: 20.03.2012
Сообщений: 53
#1

Матрицы. Удаление строк. - C++

11.05.2012, 21:39. Просмотров 666. Ответов 7
Метки нет (Все метки)

Помогите решить задачку

Описать процедуру RemoveRows(A, M, N, K1, K2), удаляющую из вещественной матрицы A размера M × N строки с номерами от K1 до K2 включительно (предполагается, что 1 < K1 ≤ K2). Если K1 > M, то матрица не изменяется; если K2 > M, то удаляются строки матрицы с номерами от K1 до M. Двумерный массив A и числа M, N являются входными и выходными параметрами. Используя процедуру RemoveRows, удалить из данной матрицы A размера M × N строки с номерами от K1 до K2 и вывести размер полученной матрицы и ее элементы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2012, 21:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Матрицы. Удаление строк. (C++):

Как производится удаление строк матрицы?
Дан массив и матрица.Из матрицы М удалить строки, сумма элементов которых...

Дописать код о удаление строк и столбцов с матрицы
Данная программа находит Мax элемент в данной матрицы и указывает строку и...

Удаление всех строк содержащих минимальный элемент матрицы.
Задание: Составить программу обработки матрицы. Удаление всех строк...

Найти количество строк в максимальном множестве попарно непохожих строк заданной матрицы
Мир всем, помогите понять суть задания: &quot;Две строки матрицы назовем...

Найти сумму всех чётных строк матрицы и отсортировать элементы нечётных строк по возрастанию
1.Задана матрица целых чисел.Найти сумму всех четных строк матрицы и...

Перестановка строк матрицы по возрастанию среднего значения строк
Разработать программу для перестановки строк матрицы таким образом, чтобы...

7
ArmoredHell
15 / 15 / 1
Регистрация: 05.04.2012
Сообщений: 32
11.05.2012, 22:01 #2
Вроде так, но меня немного пугает "включая", тем что массив размером М в си++ от 0 ... до М - 1. Если пытаться обратиться к М-той строке, то программа ругнется. Плюс массив в си++ начинается от нуля, я требуется нумерация строк от единицы. поэтому рекомендую объявить массив так:
C++
1
2
3
4
5
6
7
8
    vector<vector<double>> A;
 
    A.resize(M+1);
 
    double value = 1.0;
    for(int i = 0; i < M + 1; i++) 
        for(int j = 0; j < N + 1; j++) 
             A[i].push_back(value);
Я тут произвольно заполнил массив единицами, в вашем примере заполняйте, как хотите.

Собственно сама функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void RemoveRows(vector<vector<double>> A, int M, int N, int K1, int K2)
{
    if( K1 > M ) return;
    if( K2 > M ) 
    {
        for(int i = K1; i <= M; i++)
        {
            A[i].clear();
        }
        return;
   }
 
   for(int i = K1; i <= K2; i++)
   {
        A[i].clear();
   }
 
}
0
trum
0 / 0 / 2
Регистрация: 20.03.2012
Сообщений: 53
15.05.2012, 23:11  [ТС] #3
а можно на си чистый переделать если можно, а то не знаком еще с функциями clear, push_back, resize и ими подобными(
спасибо!
0
ArmoredHell
15 / 15 / 1
Регистрация: 05.04.2012
Сообщений: 32
17.05.2012, 18:44 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void newRemoveRows(double** mas, int M, int N, int K1, int K2)
{
    if( K1 > M ) return;
    if( K2 > M ) 
    {
        for(int i = K1; i <= M; i++)
        {
            free(mas[i]);
        }
        M = K1;
        return;
         }
 
         for(int i = K1; i <= K2; i++)
         { 
        free(mas[i]);
         }
     mas[K1] = mas[K2 + 1];
 
     int delete_size = K2 - K1 + 1;
     int new_razm = M + 1 - delete_size;
}
Добавлено через 55 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    int M = 4, N = 4;
 
    double** mas = (double**)malloc(sizeof(double)*(M+1));
 
    for(int i = 0; i < M + 1; i++)
        mas[i] = (double*)malloc(sizeof(double)*(N+1));
 
    for(int i = 0; i < M + 1; i++) 
        for(int j = 0; j < N + 1; j++) 
            mas[i][j] = 1.0;
 
 
    newRemoveRows(mas, M, N, 2, 5);
 
    system("PAUSE");
    return 0;
}
0
trum
0 / 0 / 2
Регистрация: 20.03.2012
Сообщений: 53
17.05.2012, 21:45  [ТС] #5
Спасибо большое!

Добавлено через 20 минут
Цитата Сообщение от ArmoredHell Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void newRemoveRows(double** mas, int M, int N, int K1, int K2)
{
    if( K1 > M ) return;
    if( K2 > M ) 
    {
        for(int i = K1; i <= M; i++)
        {
            free(mas[i]);
        }
        M = K1;
        return;
         }
 
         for(int i = K1; i <= K2; i++)
         { 
        free(mas[i]);
         }
     mas[K1] = mas[K2 + 1];
 
     int delete_size = K2 - K1 + 1;
     int new_razm = M + 1 - delete_size;
}
Добавлено через 55 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    int M = 4, N = 4;
 
    double** mas = (double**)malloc(sizeof(double)*(M+1));
 
    for(int i = 0; i < M + 1; i++)
        mas[i] = (double*)malloc(sizeof(double)*(N+1));
 
    for(int i = 0; i < M + 1; i++) 
        for(int j = 0; j < N + 1; j++) 
            mas[i][j] = 1.0;
 
 
    newRemoveRows(mas, M, N, 2, 5);
 
    system("PAUSE");
    return 0;
}

Но я как понимаю нужно вводить размерность матрицы, коэффициенты К1 и К2 тоже ведь нужно вводить и в конце после проведения операций заданных в условии, вывести размерность новой матрицы и элементы соответственно. Как это мне сделать так, помогите?
0
ArmoredHell
15 / 15 / 1
Регистрация: 05.04.2012
Сообщений: 32
17.05.2012, 22:29 #6
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
cin >> M >> N;
cin >> K1 >> K2;
 
 
// вывести матрицу
// в функции  newRemoveRows
 
for(int i = 0; i < M + 1; i++) 
    {
        for(int j = 0; j < N + 1; j++) 
            cout << mas[i][j] << " ";
 
        cout << endl;
    }
 
 
 
void newRemoveRows(double** mas, int M, int N, int K1, int K2)
{
    if( K1 > M ) return;
    if( K2 > M ) 
    {
        for(int i = K1; i <= M; i++)
        {
            free(mas[i]);
        }
        M = K1;
                cout << M << " " << N + 1 << endl;
        return;
    }
 
    for(int i = K1; i <= K2; i++)
    { 
        free(mas[i]);
    }
    mas[K1] = mas[K2 + 1];
 
    int delete_size = K2 - K1 + 1;
    int new_razm = M + 1 - delete_size;
      cout <<  new_razm  << " " << N + 1 << endl;
    
}
0
trum
0 / 0 / 2
Регистрация: 20.03.2012
Сообщений: 53
17.05.2012, 23:31  [ТС] #7
Цитата Сообщение от ArmoredHell Посмотреть сообщение
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
cin >> M >> N;
cin >> K1 >> K2;
 
 
// вывести матрицу
// в функции  newRemoveRows
 
for(int i = 0; i < M + 1; i++) 
    {
        for(int j = 0; j < N + 1; j++) 
            cout << mas[i][j] << " ";
 
        cout << endl;
    }
 
 
 
void newRemoveRows(double** mas, int M, int N, int K1, int K2)
{
    if( K1 > M ) return;
    if( K2 > M ) 
    {
        for(int i = K1; i <= M; i++)
        {
            free(mas[i]);
        }
        M = K1;
                cout << M << " " << N + 1 << endl;
        return;
    }
 
    for(int i = K1; i <= K2; i++)
    { 
        free(mas[i]);
    }
    mas[K1] = mas[K2 + 1];
 
    int delete_size = K2 - K1 + 1;
    int new_razm = M + 1 - delete_size;
      cout <<  new_razm  << " " << N + 1 << endl;
    
}


Соедините пожалуйста программу, от начала и до конца и нужно сделать через printf и scanf, а то cin и cout это ведь уже С++.
Спасибо вам огромное за оказанную мне помощь!
0
ArmoredHell
15 / 15 / 1
Регистрация: 05.04.2012
Сообщений: 32
19.05.2012, 23:59 #8
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
#include<stdio.h>
#include<stdlib.h>
 
void print(int M, int N, double** mas)
{
    if( M == 0 ) { printf("Matritsa pystaia\n"); return; }
    printf("Razmer matrisi : %d x %d\n", M, N);
 
    printf("Novaia matritsa :\n");
    for(int i = 0; i < M; i++) 
    {
        for(int j = 0; j < N; j++) 
            printf("%lf ", mas[i][j]);
 
        printf("\n");
    }
}
 
 
void newRemoveRows(double** mas, int M, int N, int K1, int K2)
{
    if( K1 > M ) return;
    if( K2 > M ) 
    {
        for(int i = (K1 - 1); i < M; i++)
        {
            free(mas[i]);
        }
        M = K1 - 1;
        print(M, N, mas);
        return;
    }
 
    for(int i = (K1 - 1); i <= (K2 - 1); i++)
    { 
        free(mas[i]);
    }
 
 
    int delete_size = K2 - K1 + 1;
    int new_razm = M - delete_size;
 
    int pos = K1 - 1;
    for(int i = K2; i < M; i++) { mas[pos] = mas[i]; pos++; }
    
    print(new_razm, N, mas);
}
 
int main()
{
    int M = 0, N = 0, K1 = 0, K2 = 0;
 
    printf("Vvedite razmer matrici : ");
    scanf("%d%d",&M, &N);
    printf("Vvedite ydaliaemie stroki [K1, K2] : ");
    scanf("%d%d",&K1, &K2);
 
    double** mas = (double**)malloc(sizeof(double)*(M));
 
    for(int i = 0; i < M; i++)
        mas[i] = (double*)malloc(sizeof(double)*(N));
 
    printf("Vvedite matricy:\n");
    for(int i = 0; i < M; i++)
    {
        printf("Vvedite %d stroky matrici :", i+1);
        for(int j = 0; j < N; j++)
        {
            scanf("%lf", &mas[i][j]);
        }
    }
    printf("\n");
 
    newRemoveRows(mas, M, N, K1, K2);
 
    system("PAUSE");
    return 0;
}
1
19.05.2012, 23:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2012, 23:59
Привет! Вот еще темы с решениями:

Получить номера строк матрицы, для которых нет равных среди строк с меньшими номерами
Для символьной квадратной матрицы порядка n получить номера строк, для...

Упорядочить по росту сумм элементов строк строки той матрицы, у которой больше нулевых строк
Сидел думал над задачей почти всю ночь условия такие Даны три матрицы...

Определить номера тех строк целочисленной матрицы A[N,K], которые совпадают с массивом D[K], если таких строк нет - выдать соответствующее сообщение
Неправильно определяет номера строк, либо вообще определяет строки не...

Сортировка строк матрицы C++ (перестановка строк)
Помогите пожалуйста, в матрице из целых чисел поменять местами первую строку и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru