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

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

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

Author24 — интернет-сервис помощи студентам
Помогите решить задачку

Описать процедуру 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2012, 21:39
Ответы с готовыми решениями:

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

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

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

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

7
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
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
15.05.2012, 23:11  [ТС] 3
а можно на си чистый переделать если можно, а то не знаком еще с функциями clear, push_back, resize и ими подобными(
спасибо!
0
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
0 / 0 / 0
Регистрация: 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
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
0 / 0 / 0
Регистрация: 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
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2012, 23:59
Помогаю со студенческими работами здесь

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

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

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

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


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

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