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

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

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

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

09.06.2009, 22:51. Просмотров 1701. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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; ...

38
ZVolodumur
49 / 49 / 3
Регистрация: 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
bratishka-buka
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
09.06.2009, 23:56  [ТС] #3
спасибо, а как задержку сделать?
0
ZVolodumur
49 / 49 / 3
Регистрация: 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
bratishka-buka
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
10.06.2009, 00:01  [ТС] #5
спасибо,а можно сделать чтоб находил в тех столбцах, которые содержат отрицательные элементы.
0
ZVolodumur
49 / 49 / 3
Регистрация: 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
bratishka-buka
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
10.06.2009, 00:22  [ТС] #7
спасибо большое,нужно найти сумму в тех столбц,которые содержат хотя бы один отриц элемент
0
ZVolodumur
49 / 49 / 3
Регистрация: 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
bratishka-buka
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
10.06.2009, 00:27  [ТС] #9
спасибо большое, а массивы готовые в функцию добавить поможешь,ну если не трудно)
0
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
10.06.2009, 00:32 #10
спасибо большое, а массивы готовые в функцию добавить поможешь,ну если не трудно)
Поподробней...
1
bratishka-buka
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
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
10.06.2009, 00:41 #12
Это тебе на когда? ПРосто я сейчас хочу Начать делать реферат с лицензирования... Может я уже завтра посмотрю...
0
bratishka-buka
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
ZVolodumur
49 / 49 / 3
Регистрация: 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
bratishka-buka
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2009, 22:02
Привет! Вот еще темы с ответами:

Двумерный массив (поменять статический массив на динамический) - 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 строк). Заполнить его строчками текста, принятыми с клавиатуры. ...


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

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

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