Форум программистов, компьютерный форум CyberForum.ru

По исходной матрице сформировать новую - C++

Восстановить пароль Регистрация
 
dl07
1 / 1 / 0
Регистрация: 12.06.2010
Сообщений: 14
29.06.2010, 13:36     По исходной матрице сформировать новую #1
По исходной матрице сформировать новую, имеющую столько же строк, но хранящую только ненулевые элементы. Элементами новой матрицы являются пары (j,a[i,j]). Выполнить и обратное преобразование.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2010, 13:36     По исходной матрице сформировать новую
Посмотрите здесь:

C++ В исходной матрице размером 5*5 обнулить элементы среднего столбца
C++ в исходной матрице 5*5 умножить элементы на номер строки
Получить новую строку, заменив в исходной все заглавные буквы строчными и наоборот C++
Получить новую последовательность, выбросив из исходной все члены со значением max(a1, …, a99). C++
C++ Массив: получить новую последовательность, выбросив из исходной все члены со значением max(a1,...,a99)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
29.06.2010, 13:50     По исходной матрице сформировать новую #2
Я ничего не понял >_<
dl07
1 / 1 / 0
Регистрация: 12.06.2010
Сообщений: 14
29.06.2010, 14:28  [ТС]     По исходной матрице сформировать новую #3
я понимаю это так, что надо сделать новую матрицу в которой количество элементов в строках будет больше, тоесть добавится ещё j.
Например
Исходная матрица:
1 2 3 0 5
4 5 0 0 2
2 0 2 3 0
Новая матрица:
1 1 2 2 3 3 5 5
1 4 2 5 5 2
1 2 3 2 4 3

Либо не создвая новую матрицу добавлять перед каждым ненулевым элементом его столбца, а нулевые элементы удалять соответственно производя сдвиг в матрице. А при обратном переходе либо учитывать что элемент с нечётным номером столбца это и есть старое значение j либо ещё как то.
У самого реализовать это не получилось
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.06.2010, 04:20     По исходной матрице сформировать новую #4
элемент - пара

Исходная матрица:
1 2 3 0 5
4 5 0 0 2
2 0 2 3 0

Новая матрица:
(0, 1) (1, 2) (2, 3) (4, 5)
(0, 4) (1, 5) (4, 2) (-1, 0)
(0, 2) (2, 2) (3, 3) (-1, 0)

видимо так

Добавлено через 28 секунд
элемент матрицы - структура
dl07
1 / 1 / 0
Регистрация: 12.06.2010
Сообщений: 14
30.06.2010, 09:56  [ТС]     По исходной матрице сформировать новую #5
а как всё это реализовать програмно?
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.06.2010, 11:08     По исходной матрице сформировать новую #6
C
1
2
3
4
struct elem {
    int j;
    double n;
};
C
1
2
3
4
5
    struct elem matr[3*4] = {
        { 0, 1.0 }, { 1, 2.0 }, { 2, 3.0 }, {  4, 5.0 },
        { 0, 4.0 }, { 1, 5.0 }, { 4, 2.0 }, { -1, 0.0 },
        { 0, 2.0 }, { 2, 2.0 }, { 3, 3.0 }, { -1, 0.0 }
    };
(0, 1) (1, 2) (2, 3) ( 4, 5)
(0, 4) (1, 5) (4, 2) (-1, 0)
(0, 2) (2, 2) (3, 3) (-1, 0)

Добавлено через 46 секунд
там не сказано, что числа целые
dl07
1 / 1 / 0
Регистрация: 12.06.2010
Сообщений: 14
30.06.2010, 11:31  [ТС]     По исходной матрице сформировать новую #7
А что такое (-1, 0) в последнем столбце?
И не могли бы вы написать программу целиком, если вас это не затруднит?
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.07.2010, 02:23     По исходной матрице сформировать новую #8
Цитата Сообщение от dl07
А что такое (-1, 0) в последнем столбце?
-1 - индекс, которого не существует

Добавлено через 16 минут
Цитата Сообщение от dl07
И не могли бы вы написать программу целиком, если вас это не затруднит?
ты пиши сам и код сюда складывай
а то так неинтересно
dl07
1 / 1 / 0
Регистрация: 12.06.2010
Сообщений: 14
01.07.2010, 09:15  [ТС]     По исходной матрице сформировать новую #9
Вот кусок программы, который должен делать преобразование, он выводит номер ненулевого элемента, а вместо самого элемента 0. Прога написана на Borlandc. Как выполнить обратное преобразование я ещё не придумал.
PS. Использовать структуры не умею
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
#include "stdio.h"
#include "math.h"
 
void main(){
 
    int N,M,i,j,k;
    int A[100][100];
    int B[100][100];
 
    printf("\nEnter size N:");
    scanf("%d",&N);
    printf("\nEnter size M:");
    scanf("%d",&M);
    if (N>100) { printf("ne dopustimoe znachenie."); return; }
    printf("\nEnter step by space %d matrix data:\n",N*M);
    for(i=0;i<N;i++) for (j=0;j<M;j++) scanf("%d",&A[i][j]);
    for(i=0;i<N;i++)
    {
     k=0;
     printf("\n");
     for (j=0;j<M;j++)
     if (A[i][j]==0) continue;
     else {
    B[i][k]=j;
    printf(" (%d",B[i][k]);
    B[i][k+1]=A[i][j];
    k=k+2;
    printf(" %d)",B[i][k+1]);
      }
     }
     }
Добавлено через 15 минут
исправил ошибку в предыдущем коде Теперь первая часть работает, но как реальзовать вторую часть, не знаю
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
#include "stdio.h"
#include "math.h"
 
void main(){
 
    int N,M,i,j,k;
    int A[100][100];
    int B[100][100];
 
    printf("\nEnter size N:");
    scanf("%d",&N);
    printf("\nEnter size M:");
    scanf("%d",&M);
    if (N>100) { printf("ne dopustimoe znachenie."); return; }
    printf("\nEnter step by space %d matrix data:\n",N*M);
    for(i=0;i<N;i++) for (j=0;j<M;j++) scanf("%d",&A[i][j]);
    for(i=0;i<N;i++)
    {
     k=0;
     printf("\n");
     for (j=0;j<M;j++)
     if (A[i][j]==0) continue;
     else {
    B[i][k]=j;
    printf(" (%d",B[i][k]);
    k++;
    B[i][k]=A[i][j];
    printf(" %d)",B[i][k]);
    k++;
      }
     }
     }
Добавлено через 27 минут
Не могу начать вторую часть программы, так как не знаю как сделать перебор элементов новой матрицы, не известно сколько в ней элементов по строкам
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.07.2010, 09:52     По исходной матрице сформировать новую #10
нужно, видимо, определить самую длинную строку новой матрицы
потом по этой длине сформировать новую матрицу
проинициализировать её как (-1, 0.0)
а потом построчно записать элементы

Добавлено через 3 минуты
понимаешь да, что для матрицы

1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 3 3

новая матрица будет
(0, 1) (-1, 0)
(1, 1) (-1, 0)
(2, 1) (-1, 0)
(3, 3) ( 4, 3)

Добавлено через 3 минуты
то есть в ней всего два столбца

а потом обратно определять по самому большому индексу, сколько столбцов было в исходной матрице, формировать исходную, индексировать её нулями, а потом записывать ненулевые
dl07
1 / 1 / 0
Регистрация: 12.06.2010
Сообщений: 14
01.07.2010, 10:03  [ТС]     По исходной матрице сформировать новую #11
Сделал проще, конечно коряво, но всё же
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
#include "stdio.h"
#include "math.h"
 
void main(){
 
    int N,M,i,j,k;
    int A[100][100];
    int B[100][100];
 
    printf("\nEnter size N:");
    scanf("%d",&N);
    printf("\nEnter size M:");
    scanf("%d",&M);
    if (N>100) { printf("ne dopustimoe znachenie."); return; }
    printf("\nEnter step by space %d matrix data:\n",N*M);
    for(i=0;i<N;i++) for (j=0;j<M;j++) scanf("%d",&A[i][j]);
    for(i=0;i<N;i++)
    {
     k=0;
     printf("\n");
     for (j=0;j<M;j++)
     if (A[i][j]==0) continue;
     else {
    B[i][k]=j;
    printf(" (%d",B[i][k]);
    k++;
    B[i][k]=A[i][j];
    printf(" %d)",B[i][k]);
    k++;
      }
     }
     printf("\n");
     for(i=0;i<N;i++)
     {
     printf("\n");
     k=0;
     for (j=0;j<M;j++)
    {
     if(B[i][k]==j)
     {  k++;
     A[i][j]=B[i][k];
     k++; }
     else A[i][j]=0;
     printf(" %d",A[i][j]);
     }
 }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2010, 10:48     По исходной матрице сформировать новую
Еще ссылки по теме:

Образовать новую последовательность выбросив из исходной те члены, которые равны min C++
Получить новую матрицу, элементы которой равны элементам исходной матрицы, деленные на наименьший C++
C++ Сформировать новую строку, состоящую из слов исходной строки

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

Или воспользуйтесь поиском по форуму:
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.07.2010, 10:48     По исходной матрице сформировать новую #12
нормально, если не для сжатия
Yandex
Объявления
01.07.2010, 10:48     По исходной матрице сформировать новую
Ответ Создать тему
Опции темы

Текущее время: 14:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru