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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
bratishka-buka
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
#1

Пом Динамический - двумерный массив, не работает=( - C++

09.06.2009, 22:51. Просмотров 1685. Ответов 38
Метки нет (Все метки)

//---------------------------------------------------------------------------
// Дана целочисленная квадратная матрица. Определить сумму элементов
//в тех столбцах, которые не содержат отрицательных элементов.

#include <vcl.h>
#include <iomanip.h>
#include <iostream.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int nrow,ncol;
cout<<"Vvedite kol-vo strok i stolbsov:"<<endl;
cin>>nrow>>ncol;
int j,i,z;
int **a=new int*[nrow];
for (i=0;i<nrow;i++) a[i]=new int[ncol];
cout<<"Vvedite elementi massiva:"<<endl;
for (i=0;i<nrow;i++)
for (j=0;j<ncol;j++) cin>>a[i][j];
for (i=0;i<nrow;i++){
for (j=0;i<ncol;j++) cout<<setw(4)<<a[i][j]<<" ";
cout<<endl;}
int n_pos_el;
float s=0;
for (i=0;i<nrow;i++){
n_pos_el;
for (j=0;j<ncol;j++){
s+=a[j][j];
if (a[i][j]>0)n_pos_el++;
}
cout<<"Stroka: "<<i<<"kol-vo: "<<n_pos_el<<endl;
}
cout <<z;
return 0;
}
//---------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2009, 22:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пом Динамический - двумерный массив, не работает=( (C++):

Двумерный динамический массив - C++
Выскакивает ошибка Ошибка C2440 =: невозможно преобразовать &quot;int *&quot; в &quot;int **&quot; ConsoleApplication5 Из-за этого не выполняются...

Двумерный динамический массив - C++
Необходимо ввести с клавиатуры количество строк и столбцов массива(матрица размером N*M), ввести исходные данные. Удалить столбец матрицы,...

Динамический двумерный массив - C++
Если число находится в интервале от 100 до 110, то используя подпрограмму, в матрицах Р(N,M), Q(N1,M1) и R(N2,M2) найти и отпечатать L -...

Двумерный динамический массив - C++
Здравствуйте, задание такое: &quot;Описать двумерный массив R целых чисел, размерностью NхM элементов, заполнять массив случайными числами по...

Двумерный Динамический массив - C++
Здравствуйте, такая проблема: не могу задать int** и char**...проблема в том что в функцию передются их размеры , но они не константы и...

Двумерный динамический массив - C++
Здравствуйте, подскажите пожалуйста где ошибка? реализовал 2 фукнции ввода и вывода массива. #include &lt;iostream&gt; #include &lt;windows.h&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
10.06.2009, 22:14 #16
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
#include <stdio.h>
#include <math.h>
#include <conio.h>
int r=0;
void main ()
{clrscr();
int a [11] = { -5,-4,-3,-2,-1,0,1,2,3,4,5};
int i,j;
for (i=0;i<11; i++)
if (abs(a[i])>1)
        { r++;
        for(j=i; j<10; j++)
                {
                a[j]=a[j+1];
 
                }
    i--;        }
 
for(i=10; i>10-r; i--)
a[i]=0;
 
for(i=0; i<11; i++)
printf("%d ",a[i]);
getch();
}
Вот Пример "удаление элементов массива по модулю больших единицы". Похожее уже обсуждалось...
bratishka-buka
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
10.06.2009, 22:28  [ТС] #17
нет мне нужно мою задачу сделать как показоно на примере,через функцию, мне этот пример тож скинули и сказали что типо такого нужно сделать с твоей задачей.
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
10.06.2009, 22:41 #18
C++
1
2
3
4
5
6
7
8
9
10
11
void sjat(int a[],int n)
        {
int i,j;
for (i=0;i<11; i++)
if (abs(a[i])>1)
        { r++;
        for(j=i; j<10; j++)
                a[j]=a[j+1];
       i--; a[n-1]=0;   }
 
        };
bratishka-buka
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 01:20  [ТС] #19
а полностью код можешь написать,ну если не трудно
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
11.06.2009, 01:23 #20
а полностью код можешь написать,ну если не трудно
Просто в ККоде замени свою функцию void sjat(int a[],int n) на ту что я написал.
bratishka-buka
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 01:43  [ТС] #21
ты не поверишь сток ошибок навылетало
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
11.06.2009, 01:48 #22
C++
1
2
3
4
5
6
7
8
9
10
11
void sjat(int a[],int n)
        {
int i,j,r=0;
for (i=0;i<n; i++)
if (abs(a[i])>1)
        { r++;
        for(j=i; j<n-1; j++)
                a[j]=a[j+1];
       i--; a[n-r]=0;   }
 
        };
Пробуй так... Исправил. Должно пойти..
bratishka-buka
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 01:59  [ТС] #23
я тебе наверно уже поднадоел, но просто ты как ни кто другой мне можешь помочь

Добавлено через 2 минуты 49 секунд
у мня такое ощущение что я тебе криво задание объяснил и ты его не понял или все норм?

Добавлено через 7 минут 47 секунд
Я тебе щас подробно пример кину:
Вот задачка,до преобразования в функию
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <stdio.h>
#include <math.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{ //кол-во элементов
int n;
n = 5;
//отрицательные элементы
int n1 = 0, np = 0;
//создаем новый массив
int m[5]={2,-1,0,3,-1};
int i;
//сумма элементов с нечетными номерами
int sum;
 
printf("Ishodnii massiv\n");
for (i = 0; i < n; i++)
        {
        printf("%i ",m[i]);
        };
printf("\n");
sum = m[0];
//нахождение суммы элементов с нечетными номерами
for (i = 2; i < n; i += 2)
        {
        sum += m[i];
        };
//определение номера первого отрицательного элемента
for (i = 0; i <= n; i++)
        {
        if (m[i] < 0)
                {
                n1 = i;
                break;
                };
        };
//определение номера последнего отрицательного элемента
for (i = n-1; i != 0; i--)
        {
        if (m[i] < 0)
                {
                np = i;
                break;
                };
        };
//проверка на существование границ отрицательных элементов
if ((np != 0) && (n1 != np))
        {
        int sum1 = 0;
        //нахождение суммы элементов между первым и последним отрицательным элементом
        for (i = n1+1; i < np; i++)
                {
                sum1 += m[i];
                };
        printf("Summa elementov mejdu pervim i poslednim otricatelnim elementami ravna %i\n",sum1);
        }
        else printf("V massive otsutstvuyut dva otricatel'nih elementa\n");
printf("Summa elementov s nechetnimi nomerami ravna %i\n",sum);
 
//удаление элементов массива по модулю больших единицы
for (i = 0; i < n; i++)
        {
        if (fabs(m[i]) <= 1)
                {
                int k;
                k = i;
                for (k = i; k < n; k++)
                        {
                        m[k] = m[k+1];
                        m[n] = 0;
                        };
                };
        };
//вывод массива после преобразования
for (i = 0; i < n; i++)
        {
        printf("%i ",m[i]);
        };
//задержка
int u;
scanf("%i",&u);
        return 0;
}
//---------------------------------------------------------------------------
а вот та же но после преобразования
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <stdio.h>
#include <math.h>
 #include <conio.h>
//---------------------------------------------------------------------------
 
#pragma argsused
 
//функция нахождения суммы элементов с нечетными номерами
int sumnechet(int m[],int n)
        {int sum,i;
        sum = m[0];
        for (i = 2; i <= n; i += 2)
                {
                sum += m[i];
                };
                return sum;
        };
 
//сумма между первым и последним отрицательными элементами
int summegd(int m[],int n)
        {int i,n1,np;
 
        //определение номера первого отрицательного элемента
        for (i = 0; i <= n; i++)
                {
                if (m[i] < 0)
                        {
                        n1 = i;
                        break;
                        };
                };
        //определение номера последнего отрицательного элемента
        for (i = n-1; i != 0; i--)
                {
                if (m[i] < 0)
                        {
                        np = i;
                        break;
                        };
                };
        //проверка на существование границ отрицательных элементов
        if (( np != 0) && ( n1 != np))
                {
                int sum1 = 0;
                //нахождение суммы элементов между первым и последним отрицательным элементом
                for (i = n1+1; i < np; i++)
                        {
                        sum1 += m[i];
                        };
                printf("Summa elementov mejdu pervim i poslednim otricatelnim elementami ravna %i\n",sum1);
                }
        else printf("V massive otsutstvuyut dva otricatel'nih elementa\n");
        }
 
//удаление элементов массива по модулю больших единицы
void sjat(int m[],int n)
        {int i,k ;
        for (i = 0; i < n; i++)
                {
                if (fabs(m[i]) <= 1)
                        {
                        int k;
                        k = i;
                        for (k = i; k < n; k++)
                                {
                                m[k] = m[k+1];
                                m[n] = 0;
                                };
                        };
                };
        //вывод массива после преобразования
        for (i = 0; i < n; i++)
                {
                printf("%i ",m[i]);
                };
        }
 
void main()
{
//создаем новый массив
int m[5]={4,-1,2,3,-9},i,n=5,sum;
printf("Ishodnii massiv\n");
        for (i = 0; i < n; i++)
                {
                printf("%i ",m[i]);
                };
        printf("\n");
//сумма элементов с нечетными номерами
sum=sumnechet(m,n);
//cумма между элементами
summegd(m,n);
printf("Summa necheynih ");
cout<<sum<<endl;
//сжатие массива
printf("Posle udaleniya massiv ");
sjat(m,n);
 
getch();
}
//---------------------------------------------------------------------------
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
11.06.2009, 02:02 #24
Ты это пробовал? Оно Удаляет все елементы которые больше 1 по модулю, заменив их на 0 и кинув в конец списка.
Например масив -1, -2, -3, 0, 1, 2, 3
После работы проги: -1, 0, 1, 0, 0, 0, 0
Так? Єсли нет то обясни задание ещё раз поподробней....
C++
1
2
3
4
5
6
7
8
9
10
11
void sjat(int a[],int n)
        {
int i,j,r=0;
for (i=0;i<n; i++)
if (abs(a[i])>1)
        { r++;
        for(j=i; j<n-1; j++)
                a[j]=a[j+1];
       i--; a[n-r]=0;   }
 
        };
Добавлено через 2 минуты 19 секунд
Вот задачка,до преобразования в функию...
Это нужно разбить прогу на функции!?!? А какую прогу?
bratishka-buka
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 02:04  [ТС] #25
Вот и мне нужно подобное сделать с моим кодом - тебе это подсилу ?
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <stdio.h>
#include <math.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
//кол-во элементов
int n = 9;
//создаем новый массив
int m[9]={2,-1,8,3,-3,4,6,-7,4};
int i;
//вывод исходного массива
printf("Ishodnii massiv\n");
for (i = 0; i < n; i++)
        {
        printf("%i ",m[i]);
        };
printf("\n");
 
//номер минимального элемента массива
int min=m[0];
int nom_min=0;
for (i = 1; i <= n; i++)
        {
        if (m[i] < min)
                {
                min = m[i];
                nom_min = i+1;
                };
        };
printf("Nomer min elementa massiva %i\n ",nom_min);
 
//отрицательные элементы номера
int n1 = 0, n2 = 0;
 
//определение номера первого отрицательного элемента
for (i = 0; i <= n; i++)
        {
        if (m[i] < 0)
                {
                n1 = i;
                break;
                };
        };
 
//определение номера второго отрицательного элемента
for (i = n1+1; i <= n; i++)
        {
        if (m[i] < 0)
                {
                n2 = i;
                break;
                };
        };
//проверка на существование границ отрицательных элементов
if ((n2 != 0) && (n1 != n2))
        {
        int sum_mezhdu = 0;
        //нахождение суммы элементов между первым и последним отрицательным элементом
        for (i = n1+1; i < n2; i++)
                {
                sum_mezhdu += m[i];
                };
        printf("Summa elementov mejdu pervim i vtorim otricatelnim elementami ravna %i\n",sum_mezhdu);
        }
        else printf("V massive otsutstvuyut dva otricatel'nih elementa\n");
 
//упорядочение элементов массива по модулю больших единицы
for (i = 0; i < n; i++)
        {
        if (fabs(m[i]) < 1)
                {
                int k,pr_per=0;
                k = i;
                for (k = i; k < n; k++)
                        {
                        m[k] = m[k+1];
                        m[n] = 0;
                        };
                };
        };
        
//вывод массива после преобразования
for (i = 0; i < n; i++)
        {
        printf("%i ",m[i]);
        };
 
//задержка
int u;
scanf("%i",&u);
return 0;
}
//---------------------------------------------------------------------------
Добавлено через 1 минуту 37 секунд
да верно разбить на функции, а не приобразовать ты молодец,я слово не мог подобрать
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
11.06.2009, 02:07 #26
Вот и мне нужно подобное сделать с моим кодом - тебе это подсилу ?

Щас....

Хочешь я немного оптимизирую твою прогу...???
bratishka-buka
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 02:20  [ТС] #27
ну лиж бы я потом разобрался
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
11.06.2009, 02:25 #28
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//упорядочение элементов массива по модулю больших единицы
for (i = 0; i < n; i++)
        {
        if (fabs(m[i]) < 1)
                {
                int k,pr_per=0;
                k = i;
                for (k = i; k < n; k++)
                        {
                        m[k] = m[k+1];
                        m[n] = 0;
                        };
                };
        };
Оно по сути ничего не делает. Что это должно быть?

Когда масив: -1, -2, -3, 0, 1, 2, 3 Что должно быть результатом?
bratishka-buka
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 02:30  [ТС] #29
Этот код вычисляет:1)Номер минимального элемента массива;2)Сумму элементов массива расположенных между первым и вторым отрицательными элементами

Вычисление должно остаться таким же,ну результат, ток код нужно переписать в виде функций.
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
11.06.2009, 02:36 #30
Вот код:
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
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define n 9 //кол-во элементов
//---------------------------------------------------------------------------
 
#pragma argsused
 
void Print(int *a)
{
for(int i=0; i<n; i++)
        printf("%d ",a[i]);
printf("\n");
}
 
int mini(int *a)
{int min=0;
for(int i=0; i<n; i++)
        if(a[i]<a[min])min=i;
return min+1;
}
 
int sum(int *a)
{ int s=0; int pr=-1,ps=-1;
for (int i=0;i<n; i++)
        if (a[i]<0){ if(pr==-1) pr=i; else {ps=i; break;}}
for (int i=pr+1;i<ps; i++)
        s+=a[i];
if(ps==-1) return ps;
return s;
}
 
void sjat(int *a)
{
int i,j,r=0;
for (i=0;i<n; i++)
if (abs(a[i])>1)
        { r++;
        for(j=i; j<n-1; j++)
        a[j]=a[j+1];
        i--; a[n-r]=0;
        }
 
};
 
int main(int argc, char* argv[])
{
 
int m[9]={2,-1,8,3,-3,4,6,-7,4};  //создаем новый массив
printf("Ishodnii massiv\n"); Print(m);   //вывод исходного массива
printf("Nomer min elementa massiva %i\n ",mini(m)); //номер минимального элемента массива
 
if (sum(m)!=-1)   //проверка на существование границ отрицательных элементов
printf("Summa elementov mejdu pervim i vtorim otricatelnim elementami ravna %i\n",sum(m));
else printf("V massive otsutstvuyut dva otricatel'nih elementa\n");
 
sjat(m); //Сжатие Эсли ненужно удали
Print(m); //вывод массива после преобразования
getch(); //задержка
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2009, 02:36
Привет! Вот еще темы с ответами:

Двумерный массив (поменять статический массив на динамический) - C++
Нужно поменять статический массив на динамический с выделением памяти #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; ...

Динамический двумерный массив (malloc, new) - C++
Подскажите как правильно записать нахождение суммы по строкам используя операторы malloc и new. /*9. Дан двумерный массив из 5 строк...

Заполнить динамический двумерный массив - C++
Заполнить динамический двумерный массив рандомными числами от 5 до 15. И сделать рандомными строки от 1 до 50. Добавлено через 15...

Двумерный динамический массив строк - C++
Надо создать двумерный динамический массив размером 5x5 (5 ячеек, для 5 строк). Заполнить его строчками текста, принятыми с клавиатуры. ...


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

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

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