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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Funky108
2 / 2 / 0
Регистрация: 13.11.2009
Сообщений: 24
#1

Двумерный массив (преобразование масиива по заданному условию) - C++

10.12.2009, 01:00. Просмотров 1130. Ответов 14
Метки нет (Все метки)

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

Намекните плз.

1)Как настроить функцию на ввод и вывод?организовать меню?
2)что значит рядом? типа соседние элементы как в строке так и в столбце?
3)те которые столбцы не подходят их значит и вовсе убрать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2009, 01:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двумерный массив (преобразование масиива по заданному условию) (C++):

Одномерный массив. вывод символов по заданному условию - C++
Задан массив из строчных латинских букв. Вывести в алфавитном порядке все буквы, входящие в текст по одному разу. Не могу понять, как...

Сформировать двумерный массив по условию - C++
1)Сформировать двумерный массив: 1 2 3 4 5 ...

Заполнить одномерный массив, обработав данные двумерного массива по заданному условию - C++
Создать программу, которая вводит c клавиатуры двумерный массив целых чисел a, заполняет одномерный массив b - суммами отрицательных...

Двумерный массив заполнить единицами по условию - C++
Доброго времени суток. Прошу помочь с задачкой. Дан двумерный массив 9х9, заполненный нулями. Надо написать программу, заполняющую...

двумерный массив (получить матрицу по условию) - C++
Дана действительная квадратная матрица порядка N. Получить целочисленную квадратную матрицу того же порядка, в которой элемент равен...

Создать двумерный массив из трехмерного массива по условию - C++
Дан трехмерный массив, создать двумерный массив, столбцами которого будут случайные столбцы(в вышину) первого массива. Задачу решить с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Funky108
2 / 2 / 0
Регистрация: 13.11.2009
Сообщений: 24
18.12.2009, 15:53  [ТС] #2
хелп плз((
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
18.12.2009, 20:40 #3
Цитата Сообщение от Funky108 Посмотреть сообщение
рядом располагаются не менее заданного количества чисел одного знака
Это количество задается с клавиатуры?
0
Funky108
2 / 2 / 0
Регистрация: 13.11.2009
Сообщений: 24
18.12.2009, 20:48  [ТС] #4
Да.Указывается после ввода а затем вывода тех же элементов элементов массива .
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
18.12.2009, 21:52 #5
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
#include <iostream.h>
#include <windows.h>
 
int** vvod_vivod(int &n, int &m)
{
    int i, j, **mas;
    cout<<"Vvod kol-vo strok massiva: "<< endl;
    cin>>n;
    cout<<"Vvod kol-vo stolbcov massiva: "<< endl;
    cin>>m;
    mas=new int*[n]; 
    for(i=0; i<n; i++)
       mas[i]=new int[m];
    cout<<"Vvod elementov massiva: "<< endl;
    for(i=0; i<n; i++)
       for(j=0; j<n; j++)
       {
          cout<<"["<<i<<"]["<<j<<"]= ";
          cin>>mas[i][j];
       }
        cout<<"Ishodni massiv:"<<endl;
    for(i=0; i<n; i++)
        {
       for(j=0; j<n; j++)
          cout<<mas[i][j]<<"   ";
          cout<<endl;
        }
    return mas;
 
}
 
int main ()
{
    int **mas, n, m, i,j, kol, temp, **mas_rez, *mas_temp, i_temp=0;
    mas=vvod_vivod(n, m);
    mas_temp=new int[m];
    for(i=0; i<m; i++)
        mas_temp[i]=0;
    cout<<"Vvod kol-vo chisel odnogo znaka: ";
    cin>>kol;
    for(i=0; i<m; i++)
    {       
        temp=0;
        for(j=0; j<n && temp<kol; j++)
        {
            temp=0;
            if(mas[j][i]<0)
            while(j<n && mas[j][i]<0)
            {
                temp++;
                j++;
            }
            else
            while(j<n && mas[j][i]>=0)
            {
                temp++;
                j++;
            }
            j--;
        }
        if(temp>=kol)
        {
            mas_temp[i_temp]=i;
            i_temp++;
        }
    }
    mas_rez=new int*[n]; 
    for(i=0; i<n; i++)
       mas_rez[i]=new int[i_temp];
    for(i=0; i<n; i++)
        for(j=0; j<i_temp; j++)
            mas_rez[i][j]=mas[i][mas_temp[j]];
    cout<<"Poluchenni massiv:"<<endl;
    for(i=0; i<n; i++)
    {
        for(j=0; j<i_temp; j++)
          cout<<mas_rez[i][j]<<"   ";
          cout<<endl;
    }   
    return 0; 
}
0
Funky108
2 / 2 / 0
Регистрация: 13.11.2009
Сообщений: 24
18.12.2009, 22:48  [ТС] #6
А как это будет выглядеть просто на си. С++ еще не проходил.
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.12.2009, 09:41 #7
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
#include <stdio.h>
#include <stdlib.h>
 
int** vvod_vivod(int &n, int &m)
{
        int i, j, **mas;
        printf("Vvod kol-vo strok massiva: ");
        scanf("%d", &n);
        printf("Vvod kol-vo stolbcov massiva: ");
        scanf("%d", &m);
        mas = (int **)malloc (n * sizeof (int *));
        for (i = 0; i < n; i++)
        mas [i] = (int *)malloc (m * sizeof (int));
        for(i=0;i<n;i++)  
           for(j=0;j<m;j++)
           {
               printf("[%d][%d]=",i,j);
               scanf("%d",&mas[i][j]);
            }
         printf("Ishodni massiv\n");
         for(i=0;i<n;i++)  
         {
                 for(j=0;j<m;j++)
                 printf("%d\t",mas[i][j]);  
              printf("\n\n");
        }
        return mas;
 
}
 
int main ()
{
        int **mas, n, m, i,j, kol, temp, **mas_rez, *mas_temp, i_temp=0;
        mas=vvod_vivod(n, m);
        mas_temp = (int *)malloc (m * sizeof (int));
        for(i=0; i<m; i++)
                mas_temp[i]=0;
        printf("Vvod kol-vo chisel odnogo znaka: ");
        scanf("%d", &kol);
        for(i=0; i<m; i++)
        {               
                temp=0;
                for(j=0; j<n && temp<kol; j++)
                {
                        temp=0;
                        if(mas[j][i]<0)
                        while(j<n && mas[j][i]<0)
                        {
                                temp++;
                                j++;
                        }
                        else
                        while(j<n && mas[j][i]>=0)
                        {
                                temp++;
                                j++;
                        }
                        j--;
                }
                if(temp>=kol)
                {
                        mas_temp[i_temp]=i;
                        i_temp++;
                }
        }
        mas_rez=(int **)malloc (n * sizeof (int *));
    for(i=0; i<n; i++)
       mas_rez[i]=(int *)malloc (i_temp * sizeof (int));
        for(i=0; i<n; i++)
                for(j=0; j<i_temp; j++)
                        mas_rez[i][j]=mas[i][mas_temp[j]];
        printf("Poluchenni massiv:\n");
    for(i=0; i<n; i++)
        {
        for(j=0; j<i_temp; j++)
          printf("%d    ", mas_rez[i][j]);
          printf("\n");
        }   
    return 0; 
}
1
Funky108
2 / 2 / 0
Регистрация: 13.11.2009
Сообщений: 24
20.12.2009, 15:00  [ТС] #8
спсибо большое) )

Добавлено через 45 минут
А вот вопрос возник вывод ведь тоже надо офрмлять в виде функции так?
Можно ли переменную к которой мы присвоили значение в главной программе использовать как условие в функции?
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.12.2009, 17:02 #9
Цитата Сообщение от Funky108 Посмотреть сообщение
А вот вопрос возник вывод ведь тоже надо офрмлять в виде функции так?
Вот из начального задания:
Цитата Сообщение от Funky108 Посмотреть сообщение
ввод и вывод массива оформить в виде одной функции.
Это подходит для начального массива. Эту же функцию использовать для полученного массива нельзя, т.к. у них разные правила формирования.

Цитата Сообщение от Funky108 Посмотреть сообщение
Можно ли переменную к которой мы присвоили значение в главной программе использовать как условие в функции?
Вот это поподробнее, что за переменная и что за условие?
0
Funky108
2 / 2 / 0
Регистрация: 13.11.2009
Сообщений: 24
20.12.2009, 17:14  [ТС] #10
Примерно если отбросить все остальное в функции поставить условие

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
int** vvod_vivod(int &n, int &m)
{
        int i, j, **mas;
       
        if (k=0) 
        {
        printf("Vvod kol-vo strok massiva: ");
        scanf("%d", &n);
        printf("Vvod kol-vo stolbcov massiva: ");
        scanf("%d", &m);
                mas = (int **)malloc (n * sizeof (int *));
                for (i = 0; i < n; i++)
            mas [i] = (int *)malloc (m * sizeof (int));
            for(i=0;i<n;i++)  
               for(j=0;j<m;j++)
                   {
                       printf("[%d][%d]=",i,j);
                       scanf("%d",&mas[i][j]);
                    }
                 printf("Ishodni massiv\n");
                 for(i=0;i<n;i++)  
                 {
                         for(j=0;j<m;j++)
                         printf("%d\t",mas[i][j]);  
                          printf("\n\n");
                }
             k=1;
        return mas;
        }
        else
                          
              //вывод массива
}


А в мэйне в начале k=0, затем вход в функцию если k=0 вводим массив и k=1, и выходим из функции функции если k=1 то мы выводим преобразованный массив.

например так
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.12.2009, 17:29 #11
Сделать можно все, только нужно сначало решить оно Вам нужно? Введением одной переменной "k" здесь не обойтись.
Сейчас код сделан так что в функции ввода-вывода создается новый массив, заполняется числами с клавиатуры, затем эти числа выводятся на экран, а по завершении функции она возвращает указатель на созданный массив, который используется в дальнейшей работе.
Если в эту же функцию добавить элемент просто вывода на экран, то функцию нужно переделать достаточно основательно. Нужно будет создание нового массива переносить в основную часть программы из функции. Передавать в функцию только указатель на массив, размеры, текущую строку, и число "k".
0
Funky108
2 / 2 / 0
Регистрация: 13.11.2009
Сообщений: 24
22.12.2009, 17:31  [ТС] #12
А в каких случаях в программе выдает такое сообщение Null pointer assignment
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
22.12.2009, 18:01 #13
Funky108, Полный код напишите.
0
Funky108
2 / 2 / 0
Регистрация: 13.11.2009
Сообщений: 24
24.12.2009, 20:42  [ТС] #14
я плохо понимаю еще как работают функции )
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int** vvod_vivod(int &n, int &m ,int &k,int &i_temp, int *mas_rez)//,int &i,int &j)
{
    int  **mas,i,j;
 
 
    if (k==0)
    {
    do
    {
        printf("Vvod kol-vo strok massiva: ");
        scanf("%d", &n);
        if(n<0)
            puts("Nepravilniy vvod");
    }
    while(n<0);
 
    do
    {
        printf("Vvod kol-vo stolbcov massiva: ");
        scanf("%d", &m);
        if(m<0)
            puts("Nepravilniy vvod");
    }
    while(m<0);
 
    mas=(int**)malloc ((n*m) * sizeof (int *));
 
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            printf("[%d][%d]=",i,j);
            scanf("%d",&mas[i][j]);
        }
    }
 
    printf("Ishodni massiv\n");
 
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
            printf("%d\t",mas[i][j]);
 
        printf("\n\n");
 
    }
   }
  else
     {
        printf("Poluchenni massiv:\n");
        for(i=0; i<n; i++)
        {
            for(j=0; j<i_temp; j++)
            printf("%d    ", mas_rez[i][j]);
 
        printf("\n");
        }
 
     }
 
return mas;
 
}
 
void main (void)
{
 
    int **mas, n,k,m, i,j, kol, temp,**mas_rez, *mas_temp, i_temp=0;
    clrscr();
    k=0;
    mas=vvod_vivod(n,m,k);
    mas_temp = (int *)malloc (m * sizeof (int));
 
    for(i=0; i<m; i++)
        mas_temp[i]=0;
    do
    {
        printf("Vvod kol-vo chisel odnogo znaka: ");
        scanf("%d", &kol);
        if(kol<0)
            puts("Nepravilniy vvod");
    }
    while(kol<0);
 
 
    for(i=0; i<m; i++)
    {
        temp=0;
        for(j=0; j<n && temp<kol; j++)
        {
            temp=0;
            if(mas[j][i]<0)
            {
                while(j<n && mas[j][i]<0)
                {
                    temp++;
                    j++;
                }
            }
            else
 
                    while(j<n && mas[j][i]>=0)
                    {
                        temp++;
                        j++;
                    }
                 j--;
 
 
            if(temp>=kol)
            {
               mas_temp[i_temp]=i;
                i_temp++;
            }
        }
    }
    mas_rez=(int **)malloc ((n*m)*sizeof(int* ));
 
    for(i=0; i<n; i++)
    {
        for(j=0; j<i_temp; j++)
            mas_rez[i][j]=mas[i][mas_temp[j]];
    }
 
 
    vvod_vivod(k,i,j,mas_rez,i_temp);
 
 
 
 
 
}
в общем надо фунцкцию вывода через K как то сделать.
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.12.2009, 05:52 #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
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int** vvod_vivod(int &n, int &m ,int k=0, int **mas_rez=0)
{
        int  **mas,i,j;
 
 
        if (k==0)
        {
        do
        {
                printf("Vvod kol-vo strok massiva: ");
                scanf("%d", &n);
                if(n<0)
                        puts("Nepravilniy vvod");
        }
        while(n<0);
 
        do
        {
                printf("Vvod kol-vo stolbcov massiva: ");
                scanf("%d", &m);
                if(m<0)
                        puts("Nepravilniy vvod");
        }
        while(m<0);
        mas = (int **)malloc (n * sizeof (int *));
        for (i = 0; i < n; i++)
            mas [i] = (int *)malloc (m * sizeof (int));
        for(i=0;i<n;i++)
        {
                for(j=0;j<m;j++)
                {
                        printf("[%d][%d]=",i,j);
                        scanf("%d",&mas[i][j]);
                }
        }
 
        printf("Ishodni massiv\n");
 
        for(i=0;i<n;i++)
        {
                for(j=0;j<m;j++)
                        printf("%d\t",mas[i][j]);
 
                printf("\n\n");
 
        }
   }
  else
         {
                printf("Poluchenni massiv:\n");
                for(i=0; i<n; i++)
                {
                        for(j=0; j<m; j++)
                        printf("%d    ", mas_rez[i][j]);
 
                printf("\n");
                }
 
         }
 
return mas;
 
}
 
void main (void)
{
 
        int **mas, n,k,m, i,j, kol, temp,**mas_rez, *mas_temp, i_temp=0;
        clrscr();
        k=0;
        mas=vvod_vivod(n,m);
         mas_temp = (int *)malloc (m * sizeof (int));
 
        for(i=0; i<m; i++)
                mas_temp[i]=0;
        do
        {
                printf("Vvod kol-vo chisel odnogo znaka: ");
                scanf("%d", &kol);
                if(kol<0)
                        puts("Nepravilniy vvod");
        }
        while(kol<0);
 
 
        for(i=0; i<m; i++)
        {
                temp=0;
                for(j=0; j<n && temp<kol; j++)
                {
                        temp=0;
                        if(mas[j][i]<0)
                        {
                                while(j<n && mas[j][i]<0)
                                {
                                        temp++;
                                        j++;
                                }
                        }
                        else
 
                                        while(j<n && mas[j][i]>=0)
                                        {
                                                temp++;
                                                j++;
                                        }
                                 j--;
 
 
                        if(temp>=kol)
                        {
                           mas_temp[i_temp]=i;
                                i_temp++;
                        }
                }
        }
        mas_rez=(int **)malloc (n * sizeof (int *));
        for(i=0; i<n; i++)
            mas_rez[i]=(int *)malloc (i_temp * sizeof (int));
 
        for(i=0; i<n; i++)
        {
                for(j=0; j<i_temp; j++)
                        mas_rez[i][j]=mas[i][mas_temp[j]];
        }
 
 
        vvod_vivod(n,i_temp,k=1,mas_rez);
 
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2009, 05:52
Привет! Вот еще темы с ответами:

Сформировать двумерный массив из двух двумерных массивов по условию - C++
Дано два двумерных массива х(n1m1) ,y(n2m2). Cформировать массив z((n1+ n2)(m1+m2)), таким образом, чтобы массивы x и y располагались по...

Преобразование информции из текстового файла в двумерный массив - C++
Есть такая задачка В visual studio 2008 на С++ нужно рассчитать кратчайший путь от точки к точке в лабиринте. Лабиринт задается в...

Выделить подпоследовательность удовлетворяющую заданному условию - C++
В заданной последовательности целых чисел найти с помощью процедуры максимально длинную подпоследовательность чисел такую ,что каждый...

Сортировка цифр в строке по заданному условию - C++
Программа сортирует введенные цифры(вводить можно только цифры 012) в таком порядке 021, т.е. если вводим 102, после сортировки выводится...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.12.2009, 05:52
Ответ Создать тему
Опции темы

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