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

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

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

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

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

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

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

38
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
09.06.2009, 23:43 2
Ошибка for (j=0;i<ncol;j++) заменить на for (j=0;j<ncol;j++)

Полный код:
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
#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;j<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;
}
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
09.06.2009, 23:56  [ТС] 3
спасибо, а как задержку сделать?
0
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
10.06.2009, 00:00 4
ВОТ ПОЛНЫЙ РАБОЧИЙ КОД ПРОГИ:
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
#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++)
{
cout<<"a["<<i<<"]"<<"["<<j<<"]=";
cin>>a[i][j];
}
for (i=0;i<nrow;i++){
for (j=0;j<ncol;j++) cout<<setw(4)<<a[i][j]<<" ";
cout<<endl;}
 
int sum;
for (i=0;i<nrow;i++){
sum=0;
for (j=0;j<ncol;j++){
sum+=a[j][i];
if (a[j][i]<0){sum=-1; break;}
}
if(sum>0) cout<<"Stolbecj: "<<i<<"   kol-vo: "<<sum<<endl;
}
//cout <<z<<"\n";
system("pause");
return 0;
}
Добавлено через 2 минуты 3 секунды
Да и ещё если у тебя квадратная матрица то тебе нужно вводить только порядок матрицы а не количество строк и столбов

Добавлено через 1 минуту 23 секунды
спасибо, а как задержку сделать?
C++
1
system("pause");
- Задержка
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
10.06.2009, 00:01  [ТС] 5
спасибо,а можно сделать чтоб находил в тех столбцах, которые содержат отрицательные элементы.
0
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
10.06.2009, 00:15 6
спасибо,а можно сделать чтоб находил в тех столбцах, которые содержат отрицательные элементы
Все елементы или только отрицатильные?
Если все то кусок кода будет имет вид
C++
1
2
3
4
5
6
...
sum+=a[j][i];
}
cout<<"Stolbecj: "<<i<<"   kol-vo: "<<sum<<endl;
}
...
Добавлено через 3 минуты 15 секунд
Эсли только отрицатильных то
C++
1
2
3
4
5
6
7
...
sum+=a[j][i];
if (a[j][i]>0){sum=1; break;}
}
if(sum<0) cout<<"Stolbecj: "<<i<<"   kol-vo: "<<sum<<endl;
}
...
Добавлено через 7 минут 38 секунд
Эсли хоть один отрицатильный то
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
...
cout<<endl;}
 
int sum; bool b;
for (i=0;i<nrow;i++){
sum=0; b=false;
for (j=0;j<ncol;j++){
sum+=a[j][i];
if (a[j][i]<0&&b==false) b=true;
}
if(b==true) cout<<"Stolbecj: "<<i<<"   kol-vo: "<<sum<<endl;
}
...
0
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
10.06.2009, 00:22  [ТС] 7
спасибо большое,нужно найти сумму в тех столбц,которые содержат хотя бы один отриц элемент
0
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
10.06.2009, 00:26 8
спасибо большое,нужно найти сумму в тех столбц,которые содержат хотя бы один отриц элемент
Вот
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
#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++)
{
cout<<"a["<<i<<"]"<<"["<<j<<"]=";
cin>>a[i][j];
}
for (i=0;i<nrow;i++){
for (j=0;j<ncol;j++) cout<<setw(4)<<a[i][j]<<" ";
cout<<endl;}
 
int sum; bool b;
for (i=0;i<nrow;i++){
sum=0; b=false;
for (j=0;j<ncol;j++){
sum+=a[j][i];
if (a[j][i]<0&&b==false) b=true;
}
if(b==true) cout<<"Stolbecj: "<<i<<"   kol-vo: "<<sum<<endl;
}
system("pause");
return 0;
}
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
10.06.2009, 00:27  [ТС] 9
спасибо большое, а массивы готовые в функцию добавить поможешь,ну если не трудно)
0
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
10.06.2009, 00:32 10
спасибо большое, а массивы готовые в функцию добавить поможешь,ну если не трудно)
Поподробней...
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
10.06.2009, 00:38  [ТС] 11
//В одном массиве состоящем из n вещественных элементов,вычислить:1)Номер минимального элемента массива;2)Сумму элементов массива расположенных между первым и вторым отрицательными элементами.(эт задание я выполнил, но теперь нужно добавить в финкцию)----

#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;
}
//---------------------------------------------------------------------------
0
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
10.06.2009, 00:41 12
Это тебе на когда? ПРосто я сейчас хочу Начать делать реферат с лицензирования... Может я уже завтра посмотрю...
0
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
10.06.2009, 00:47  [ТС] 13
//В одномерном массиве состоящем из n вещественных элементов вычислить:1) Номер минимального элемента массива;2)Сумму элементов массива расположенных между первым и вторым отрицательным(данную задачу нужно преобразовать в функцию)---

#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 минуту 30 секунд
а ну давай до завтра
0
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
10.06.2009, 20:27 14
В одномерном массиве состоящем из n вещественных элементов вычислить: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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <iostream.h>
#pragma hdrstop
#pragma argsused
#define n 9
//---------------------------------------------------------------------------
int mini(int *a)
{int min=0;
for(int i=0; i<n; i++)
if(a[i]<a[min])min=i;
return min;
}
 
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;
 
}
 
int main(int argc, char* argv[])
{int m[n]={2,-1,8,3,-3,4,6,-7,4};
cout<<"Nomer min elementa massiva= "<<mini(m)<<endl;
if(sum(m)!=-1)
cout<<"Summa elementov mejdu pervim i vtorim otricatelnim elementami ravna= "<<sum(m)<<endl; else
cout<<"Error!"<<endl;
system("pause");
 
return 0;
}
//---------------------------------------------------------------------------
Добавлено через 12 минут 28 секунд
А что значит преобразовать в функцию?

Добавлено через 6 минут 57 секунд
Я так и не разобрался что должен делать етот кусок кода:
C
1
2
3
4
5
6
7
8
9
10
11
12
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;
};
};
0
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
10.06.2009, 22:02  [ТС] 15
я тебе пример кину, ок)

Добавлено через 1 минуту 4 секунды
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
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();
}
Вот Пример "удаление элементов массива по модулю больших единицы". Похожее уже обсуждалось...
0
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
10.06.2009, 22:28  [ТС] 17
нет мне нужно мою задачу сделать как показоно на примере,через функцию, мне этот пример тож скинули и сказали что типо такого нужно сделать с твоей задачей.
0
49 / 49 / 4
Регистрация: 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;   }
 
        };
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
11.06.2009, 01:20  [ТС] 19
а полностью код можешь написать,ну если не трудно
0
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
11.06.2009, 01:23 20
а полностью код можешь написать,ну если не трудно
Просто в ККоде замени свою функцию void sjat(int a[],int n) на ту что я написал.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2009, 01:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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