0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
1

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

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

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

#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;
}
//---------------------------------------------------------------------------
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2009, 22:51
Ответы с готовыми решениями:

Двумерный динамический массив: как это работает?
вобщем неправильно понимаю суть. помогите разобраться. двумерный динамический массив. в...

Создать двумерный динамический массив произвольного размера NxN (размер ввести). Заполнить массив случайным об
Создать двумерный динамический массив произвольного размера NxN (размер ввести). Заполнить массив...

Двумерный динамический массив
Как создать двумерный динамический массив? Какими способами? Желательно с обьяснением)

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

38
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 01:43  [ТС] 21
Author24 — интернет-сервис помощи студентам
ты не поверишь сток ошибок навылетало
0
49 / 49 / 4
Регистрация: 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;   }
 
        };
Пробуй так... Исправил. Должно пойти..
0
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();
}
//---------------------------------------------------------------------------
0
49 / 49 / 4
Регистрация: 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 секунд
Вот задачка,до преобразования в функию...
Это нужно разбить прогу на функции!?!? А какую прогу?
0
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 секунд
да верно разбить на функции, а не приобразовать ты молодец,я слово не мог подобрать
0
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
11.06.2009, 02:07 26
Вот и мне нужно подобное сделать с моим кодом - тебе это подсилу ?

Щас....

Хочешь я немного оптимизирую твою прогу...???
0
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 02:20  [ТС] 27
ну лиж бы я потом разобрался
0
49 / 49 / 4
Регистрация: 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 Что должно быть результатом?
0
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 02:30  [ТС] 29
Этот код вычисляет:1)Номер минимального элемента массива;2)Сумму элементов массива расположенных между первым и вторым отрицательными элементами

Вычисление должно остаться таким же,ну результат, ток код нужно переписать в виде функций.
0
49 / 49 / 4
Регистрация: 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;
}
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 02:48  [ТС] 31
а сделай последнюю,необходимо тож на функции разбить

Вычисляет:1)Колличество элементов массива меньших с
2)Сумму целых частей элементов массива расположенных после последнего отрицательного элемента

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <math.h>
#include <iostream.h>
#include <stdio.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
//переменная для кол-во элементов массива
int n;
//ввод кол-ва элементов массива
printf("Vvedite kolichestvo elementov massiva:\n");
scanf("%i",&n);
//создаем массив
float *mas = new float [n];
//ввод элементов массива
printf("Vvedite elementi massiva:\n");
//переменная для счета в for
int i;
for (i = 0; i < n; i++)
        {
        scanf("%f",&mas[i]);
        };
//вывод исходного массива
for (i = 0; i < n; i++)
        {
        printf("%3.2f ",mas[i]);
        };
printf ("\n");
 
//вычисление кол-ва элементов меньших С
int kol;
kol = 0;
float c;
printf("Vvedite C:\n");
scanf("%f",&c);
for (i = 0; i < n; i++)
        {
        if (mas[i] < c)
                {
                kol++;
                };
        };
 
if ((kol == 0))
        {
        printf("Elementov menshe C net\n");
        }
        else
        {
        printf("Kolichestvo elementov menshe C ravno %i\n",kol);
        };
 
//сумма элементов массива, расположенных после последнего отрицательного элемента
float sum = 0;
int pos_otr = 0;
//запоминаем позицию минимального числа
for (i = 0; i < n; i++)
        {
        if (mas[i] < mas[pos_otr]) pos_otr = i;
        };
//считаем сумму после минимального
for (i = pos_otr+1; i < n; i++)
        {
        sum += mas[i];
        };
printf("Summu elementov posle otricatelnogo ravna %3.2f\n",sum);
 
//задержка программы
float u;
scanf("%f",&u);
        return 0;
}
//---------------------------------------------------------------------------
0
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
11.06.2009, 02:54 32
а сделай последнюю,необходимо тож на функции разбить
Давай уже завтра ато мне Розраху з ОБЖ надо писать... Завтра последний день...
0
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 02:59  [ТС] 33
ок, а в целом задание то понятное,ну справишься?или пример кинуть...спасибо тебе=)
0
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
11.06.2009, 03:02 34
ок, а в целом задание то понятное,ну справишься?или пример кинуть...спасибо тебе=)
Пример ненадо. Чтобы расбить на функции даже не обязатильно понимать что прога делает )))))

Добавлено через 1 минуту 9 секунд
Я б тебе даже посоветовал Самому попробовать... Это пригодиться...
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 03:03  [ТС] 35
хотел бы я так же научиться во всем этом разбираться=)
0
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
11.06.2009, 03:05 36
Какой курс?
0
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 03:18  [ТС] 37
четвертый но нас так ватно учат,преподы по этому предмету раз 5 менялись, надо ведь определенные основы знать,алгоритм,а как если не разъяснят как это, конструкцию алгоритм,я бы рад но мне нужно представление для понимания...вот и получается замкнутый круг
0
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
11.06.2009, 03:23 38
четвертый но нас так ватно учат,преподы по этому предмету раз 5 менялись, надо ведь определенные основы знать,алгоритм,а как если не разъяснят как это, конструкцию алгоритм,я бы рад но мне нужно представление для понимания...вот и получается замкнутый круг
Бда... Я на Втором... Но с етим всё пока нормально...
У меня в школе с матиматикой такая же ситуация была....
0
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 09:32  [ТС] 39
меня сегодня вечером в сети не будет,я выйду завтра так что не теряй
0
11.06.2009, 09:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2009, 09:32
Помогаю со студенческими работами здесь

Двумерный динамический массив
Здравствуйте. Хочу реализовать ввод матриц nxm, программный языком двумерных массивов в GUI с...

Двумерный динамический массив
Задание такое: Создать динамический двумерный массив размером 200x200 элементов, заполнить его...

Двумерный динамический массив
Выскакивает ошибка Ошибка C2440 =: невозможно преобразовать &quot;int *&quot; в &quot;int...

Динамический двумерный массив
Здравствуйте! Подскажите, какой оператор применяют для обозначения его размера?


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

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

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