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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
Mrs_Black
0 / 0 / 0
Регистрация: 14.12.2008
Сообщений: 8
#1

Создание структуры. - C++

26.03.2009, 12:53. Просмотров 1974. Ответов 11
Метки нет (Все метки)

Помогите разобраться с задачей..
Создайте структуру – vector. Структура должна содержать
поинтер к типу long double и число координат точки. Определите функции: инициализации
(посредством динамического распределения памяти) и уничтожения (освобождение памяти)
вектора, установки и модификации количества координат, доступа к координатам, вычисления
длины вектора. В функции main(), для двух векторов вычислите
длину и среднее арифметическое 2-х максимальных величин
до и после модификации какой-либо из координат этих точек.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
QWAN
57 / 56 / 1
Регистрация: 02.09.2008
Сообщений: 181
26.03.2009, 13:06     Создание структуры. #2
Вот ссылка как раз тема по векторам http://netlib.narod.ru/library/book0032/index.htm
книга Фрэнк Луна Введение в программирование трехмерных игр с DirectX 9.0Когда немного разберешся, задаш еще разок свой вопрос попробую ответить
Ирина 5555
608 / 57 / 0
Регистрация: 24.03.2009
Сообщений: 119
26.03.2009, 13:14     Создание структуры. #3
Очень нужно.Определить сумму и количество положительных элементов массива х(n).вывести полученное значение и массив.по программе бейсика.спасибо)
Mrs_Black
0 / 0 / 0
Регистрация: 14.12.2008
Сообщений: 8
26.03.2009, 17:01  [ТС]     Создание структуры. #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
struct punct
{ int n; // кол-во координат
int *p; // поинтер к точке
1
};
void init(punct *v, int n) // инициализация точки
{ v->n = n; v->p = new int[n];
for( int i = 0; i < n; i++ )
v->p[i] = 0; }
void elib(punct *v) // уничтожение точки
{ delete [] v->p;
v->p = 0; v->n = 0; }
double dist(punct *v) // вычисл. расст. до нач. координат
{ long s = 0; double L=0;
for( int i = 0; i < v->n; i++ )
s+=(v->p[i])*(v->p[i]);
L = sqrt( (double)s );return L; }
int modif(punct *v, int n, int a) // модификация координаты с порядковым номером n
{ if( n <= v->n && n > 0 )
{ v->p[n-1] = a; return 1; }
return 0; }
int acces(punct *v, int n) // доступ к координате с порядковым номером n
{ return v->p[n-1]; }
// определение последней цифры произведения четных координат
int cifra(punct *M) {
unsigned long pr=1;
for( int i=0; i< M->n; i++ )
if( !(M->p[i] % 2) ) pr *= M->p[i];
return ( pr % 10 ); }
int main()
{ punct A;
int na,a; unsigned long cif;
double m;
cout << "Введите количество координат : ";
cin >> na; init(&A,na);
for(int i=1; i<=A.n; i++)
{ cout << "Введите координату " << i << ": ";
cin >> a; modif(&A,i,a); }
m=dist(&A);
cout << "Расстояние до начала координат: " << m << endl << endl;
cif = cifra(&A); if( cif != 1 )
cout << endl << "Последняя цифра произведения до модификации: " << cif << endl;
else cout << "Нет четных координат!" << endl;
cout << "Какую координату хотите менять ? ";
cin >> a;
if( a>0 && a<=A.n ) {
cout << "координата " << a << " равна " << A.p[a-1] << endl;
cout << "введите новое значение для координаты " << a << ": ";
cin >> A.p[a-1]; }
else cout << "Нет координаты с порядковым номером " << a << endl;
cif = cifra(&A); 
if( cif !=1 )
cout << endl << "Последняя цифра произведения после модификации: " << cif << endl;
else cout << "Нет четных координат!" << endl;
elib(&A); 
return 0; 
}
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
26.03.2009, 17:10     Создание структуры. #5
Имейтеуважениеклюдямпомогающимвамоформляйтекодчтобонбылчитабельным
QWAN
57 / 56 / 1
Регистрация: 02.09.2008
Сообщений: 181
26.03.2009, 19:50     Создание структуры. #6
Вот что получилось:
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
#include <iostream>
#include <math.h>
using namespace std;
///////////////////////////////////////////////////////////////////////////////////
struct vector
{
int n; // кол-во координат
long double *p; // поинтер к точке
};
//// инициализация вектора
void init(vector *v, int n)
{
 v->n = n; v->p = new long double[n];
for( int i = 0; i < n; i++ )
 v->p[i] = 0;
}
//// уничтожение вектора
void elib(vector *v)
{
delete [] v->p;
 v->p = 0; v->n = 0;
}
// вычисл. длины вектора
long double dist(vector *v)
{
long double s = 0; long double L=0;
for( int i = 0; i < v->n; i++ )
 s+=(v->p[i])*(v->p[i]);
 L = sqrt( (long double)s );
return L;
}
// модификация вектора
int modif(vector *v, int n, long double a)
{
if( n <= v->n && n > 0 )
{
 v->p[n-1] = a;
return 1;
}
return 0;
}
// доступ к вектору 
long double acces(vector *v, int n)
{
return v->p[n-1];
}
int main()
{
 setlocale(LC_CTYPE,"Russian");//эта строчка для отображения кирилицы (если хочеш ее можно и убрать)
int na; // количество координат
long double a; //координаты вектора
long double m; //длина вектора
cout<< "Введите количество векторов : ";
int obg; //количество векторов
cin >> obg;
 vector *v=0;
for (int i=1; i<=obg;i++)
{
 vector *v=new vector[i];
cout << "Вектор : "<<i<< endl;
cout << "Введите количество координат : ";
cin >> na; init(v,na);
for(int j=1; j<=v->n; j++)
{
cout << "Введите координату " << j << ": ";
cin >> a; modif(v,j,a);
}
 m=dist(v);
cout << "Длина вектора: " << m << endl << endl;
}
cout << "Какой вектор вы хотите изменить ? ";
int x;
cin >> x;
if( x>0 && x<=obg )
{
cout << "Изменение вектора : "<<x<< endl;
cout << "Какую координату хотите менять ? ";
cin >> na;
if( na>0 && na<= v->n )
{
cout << "координата " << na << " равна " << v->p[na-1] << endl;
cout << "введите новое значение для координаты " << na << ": ";
cin >> v->p[na-1];
}
else cout << "Нет координаты с порядковым номером " << na << endl;
}
else cout << "Нет такого вектора " << x << endl;
return 0;
}
В принципе работает:
1) задается количество векторов;
2) задается количество координат;
3) вычисляется длина вектора;
4) выбирается какой вектор мы хотим изменить;
5) выбирается какую координату нужно изменить;
а вот дальше выдается ошибка.
Пока не разобрался в чем причина, может кто-то и найдет ошибку, самому интересно.
Если что завтра буду разбираться.
, но когда доходит дело до изменения координат в нужном векторе

Добавлено через 26 минут 27 секунд
Я понял в чем ошибка, завтра исправлю.
Mrs_Black
0 / 0 / 0
Регистрация: 14.12.2008
Сообщений: 8
27.03.2009, 09:25  [ТС]     Создание структуры. #7
приветик!пасиб за помощь а что на счет "среднее арифметическое 2-х максимальных величин
до и после модификации какой-либо из координат этих точек"???

плиз
QWAN
57 / 56 / 1
Регистрация: 02.09.2008
Сообщений: 181
27.03.2009, 09:50     Создание структуры. #8
Программу я хотел сделать, чтоб можно было создавать динамически массив векторов (это наверное неплохо, но я еще не настолько разбираюсь в программировании ). Ошибка, в том что я определил динамический массив векторов в одном цикле (и у меня получается локальный тип), его невидно дальше после цикла в функции main(). Поэтому когда нужно изменить какой то из векторов программа не работает. Попробуй сделать совсем просто, создай 2 объекта:
vector A, B;
//инициализируй каждый из них
// вычисли длину
//найди среднее арифметическое 2-х максимальных величин
//изменение параметров вектора
//найди среднее арифметическое 2-х максимальных величин
//уничтожение (освобождение памяти) вектора
//конец програмы
Mrs_Black
0 / 0 / 0
Регистрация: 14.12.2008
Сообщений: 8
27.03.2009, 10:08  [ТС]     Создание структуры. #9
приветик еще раз!если б я так плохо разбиралась как ты то наверное сама бы все сделала!если честно то мне и с двумя векторами сложно поэтому плиз помоги мне !
ъмне нужно очень нужно просто сдать эту прогу
QWAN
57 / 56 / 1
Регистрация: 02.09.2008
Сообщений: 181
27.03.2009, 15:24     Создание структуры. #10
Такой вариант тебе поможет?
среднее арифметическое 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
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <iostream>
#include <math.h>
using namespace std;
///////////////////////////////////////////////////////////////////////////////////
struct vector
{
int n; // кол-во координат
long double *p; // 
}*LPVECTOR;
//// инициализация вектора
void init(vector *v, int n)
{
 v->n = n; v->p = new long double[n];
for( int i = 0; i < n; i++ )
 v->p[i] = 0;
}
//// уничтожение вектора
void elib(vector *v)
{
delete [] v->p;
 v->p = 0; v->n = 0;
}
// вычисл. длины вектора
long double dist(vector *v)
{
long double s = 0; long double L=0;
for( int i = 0; i < v->n; i++ )
 s+=(v->p[i])*(v->p[i]);
 L = sqrt( (long double)s );
return L;
}
// модификация координаты с порядковым номером n
int modif(vector *v, int n, long double a)
{
if( n <= v->n && n > 0 )
{
 v->p[n-1] = a;
return 1;
}
return 0;
}
// доступ к координате с порядковым номером n
long double acces(vector *v, int n)
{
return v->p[n-1];
}
int main()
{
 setlocale(LC_CTYPE,"Russian");//эта строчка для отображения кирилицы (если хочеш ее можно и убрать)
int na; // количество координат
long double a; //координаты вектора
long double m; //длина вектора
 vector A, B;
char num = 1;
while(num)
{
cout<<"Выберите операцию и введите число"<<endl<<endl;
cout<<"Инициализация векторов - 1"<<endl;
cout<<"Текущие параметры векторов - 2"<<endl;
cout<<"Вычисление длины векторов - 3"<<endl;
cout<<"Среднее ар.2-х макс. величин - 4"<<endl;
cout<<"Для модификации вектооров - 5"<<endl;
cout<<"Завершение програмы - 6"<<endl;
cout<<"---------------------------------"<<endl;
cin>>num;
switch (num)
{
case '1'://инициализация вектора (посредством динамического распределения памяти)
{
cout << "Введите количество координат для векторов A и B: ";
cin >> na; init(&A,na); init(&B,na); cout <<endl;
cout << "Вектор А"<<endl;
for(int i=1; i<=A.n; i++)
{ cout << "Введите координату " << i << ": ";
cin >> a; modif(&A,i,a); }
cout <<endl;
cout << "Вектор B"<<endl;
for(int i=1; i<=B.n; i++)
{ cout << "Введите координату " << i << ": ";
cin >> a; modif(&B,i,a); }
//break;
}
case '2': //текущее состояние вектора
{
cout<<endl;
cout<<"Вектор А :"<<endl;
for(int i=1; i<=A.n; i++)
{
cout << i<<"-я координата =" <<A.p[na-1] << ";"<<endl;
}
cout<<endl;
cout<<"Вектор B :"<<endl;
for(int i=1; i<=B.n; i++)
{
cout << i<<"-я координата =" <<B.p[na-1] << ";"<<endl;
}cout<<endl;
break;
}
case '3'://Вычисление длины вектора
{
 m=dist(&A);
cout << "Длина вектора A: " << m << endl;
 m=dist(&B);
cout << "Длина вектора B: " << m << endl;
break;
}
case '4': //среднее арифметическое 2-х максимальных величин 
{
//код для нахождения среднего арифметического 2-х максимальных величин
break;
}
case '5': //модификация вектора
{
cout<<"Какой вектор хотите изменить ? "<<endl;
cout<<"Вектор А - 1 "<<endl;
cout<<"Вектор В - 2 "<<endl;
int i;
cin>>i;
switch (i)
{
case 1:
{
cout << "Какую координату из "<<na<<" хотите менять ? ";
cin >> na;
if( na>0 && na<=A.n ) {
cout << "координата " << na << " равна " << A.p[na-1] << endl;
cout << "введите новое значение для координаты " << na << ": ";
cin >> A.p[na-1]; }
break;
}
case 2:
{
cout << "Какую координату хотите менять ? ";
cin >> na;
if( na>0 && na<=B.n ) {
cout << "координата " << na << " равна " << B.p[na-1] << endl;
cout << "введите новое значение для координаты " << na << ": ";
cin >> B.p[na-1]; }
break;
}
}
break;
}
case '6'://завершение програмы
{
return '0';
}
}//switch (num)
}//while(num)
//уничтожение (освобождение памяти)векторов
 elib(&A);
 elib(&B);
return 0; //main()
}
Mrs_Black
0 / 0 / 0
Регистрация: 14.12.2008
Сообщений: 8
27.03.2009, 15:45  [ТС]     Создание структуры. #11
pasib tebe ogromnoe!
daj ne znaiu kak otblagodariti a 4to ti bi mne posovetoval s moei problemoi s klassom
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2009, 15:50     Создание структуры.
Еще ссылки по теме:

Объявление и создание глобальной структуры в dll C++
Создание дин массива для структуры C++
C++ Создание структуры программы
C++ Создание структуры в заголовочном файле

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

Или воспользуйтесь поиском по форуму:
QWAN
57 / 56 / 1
Регистрация: 02.09.2008
Сообщений: 181
27.03.2009, 15:50     Создание структуры. #12
Так ты запустила, протестировала?
а что за проблема с классом?
Yandex
Объявления
27.03.2009, 15:50     Создание структуры.
Ответ Создать тему
Опции темы

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