Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
dl07
1 / 1 / 0
Регистрация: 12.06.2010
Сообщений: 14
1

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

29.06.2010, 13:36. Просмотров 641. Ответов 11
Метки нет (Все метки)

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

Сформировать новую строку, состоящую из слов исходной строки
задача такая: дана строка состоящая из слов разделенных пробелами сформировать...

На основе исходной матрицы сформировать новую, состоящую из нулей и единиц
Всем привет! Смотрел примеры для данного задания от данной темы...

Сформировать новую строку, состоящую из символов цифр исходной строки
Вводится строка. Сформировать новую строку, состоящую из символов цифр исходной...

Из символов исходной строки сформировать новую строку начинающуюся и оканчивающуюся на заданные буквы
Помогите пожалуйста решить задачу , не могу понять как это решить. Задача :...

Сформировать новую строку, в которой слова исходной будут следовать в обратном порядке
Нужна срочно ваша помощь...Не могу написать код для следующей задачи: "Задан...

11
Хохол
Эксперт С++
475 / 443 / 34
Регистрация: 20.11.2009
Сообщений: 1,292
29.06.2010, 13:50 2
Я ничего не понял >_<
0
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 либо ещё как то.
У самого реализовать это не получилось
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
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 секунд
элемент матрицы - структура
0
dl07
1 / 1 / 0
Регистрация: 12.06.2010
Сообщений: 14
30.06.2010, 09:56  [ТС] 5
а как всё это реализовать програмно?
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
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 секунд
там не сказано, что числа целые
0
dl07
1 / 1 / 0
Регистрация: 12.06.2010
Сообщений: 14
30.06.2010, 11:31  [ТС] 7
А что такое (-1, 0) в последнем столбце?
И не могли бы вы написать программу целиком, если вас это не затруднит?
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
01.07.2010, 02:23 8
Цитата Сообщение от dl07
А что такое (-1, 0) в последнем столбце?
-1 - индекс, которого не существует

Добавлено через 16 минут
Цитата Сообщение от dl07
И не могли бы вы написать программу целиком, если вас это не затруднит?
ты пиши сам и код сюда складывай
а то так неинтересно
0
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 минут
Не могу начать вторую часть программы, так как не знаю как сделать перебор элементов новой матрицы, не известно сколько в ней элементов по строкам
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
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 минуты
то есть в ней всего два столбца

а потом обратно определять по самому большому индексу, сколько столбцов было в исходной матрице, формировать исходную, индексировать её нулями, а потом записывать ненулевые
0
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]);
     }
 }
}
1
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
01.07.2010, 10:48 12
нормально, если не для сжатия
1
01.07.2010, 10:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2010, 10:48

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

Сформировать новую матрицу, удалив из исходной строки, имеющие хотя бы один нулевой элемент
написать программу на языки с++. задание на фотографии

На основе исходной сформировать новую строку, в которой самое длинное слово поставить в начало
Приветствую всех пользователей форума) Собственно вот сама задача: Дана...


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

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

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