Выходит ошибка в void main()
) Создать абстрактный тип данных (структура) - вектор, который имеет указатель на double и число элементов. Определить функции: инициализации, удаления вектора, установки/изменения размера, доступа к элементам вектора, вычисления суммы четных элементов вектора. Для примера, в функции main, организовать сложение вектора и числа.
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
struct Vector{
double *x;
int n;
};
int getN (Vector *v){
return v->n;
}
void setN (Vector *v, int nr){
if (nr<1) v->n=1;
else v->n=nr;
}
short getX (Vector *v, int pos){
if ((pos>=0)&&(pos<getN(v)))
return v->x[pos];
cout << "Position Error" << endl;
return 0;
}
void setX (Vector *v, int pos, double value){
if ((pos>=0)&&(pos<getN(v)))
v->x[pos]=value;
else cout << "Position Error" << endl;
}
void initVector(Vector *v,int max){
setN(v,max);
double *ptr=new double[v->n];
v->x=ptr;
for (int i=0; i<v->n; i++)
v->x[i]=0;
}
void deleteVector (Vector *v){
delete[] v->x;
v->n=NULL;
}
short SumPar (Vector *v){
double sum=0;
for (int i=1; i<getN(v); i+=2)
sum+=getX(v,i);
return sum;
}
double Norma (Vector *v){
double sum=0;
for (int i=0; i<getN(v); i++)
sum+=getX(v,i)*getX(v,i);
return sqrtf(sum);
}
void main()
{
Vector *tab;
int N,num;
short val;
cout << "Dati numarul de vectori: ";
cin >> N;
if (N==0) ;
tab = new Vector[N];
for (int i=0; i<N; i++){
cout << "dati numarul de elemente a vectorului " << (i+1) << ": ";
cin >> num;
initVector(&tab[i], num);
cout << "dati elementele: ";
for (int j=0; j<getN(&tab[i]); j++){
cin >> val;
setX(&tab[i],j,val);
}
}
for (int i=0; i<N; i++){
cout << "v" << (i+1) << ": ";
for (int j=0; j<getN(&tab[i]); j++)
cout << getX(&tab[i],j) << " ";
cout << endl;
return 0;
}
for (int i=0; i<N; i++)
cout << "\ns" << (i+1) << "=" << SumPar(&tab[i]);
cout << "\ncare 2 vectori doriti sa comparati?" << endl;
int v1,v2;
double n1,n2;
cin >> v1 >> v2;
if (v1<=0||v1>N||v2<=0||v2>N)
cout << "\nEroare. Nu exista astfel de vectori\n";
else {
n1=Norma(&tab[v1-1]);
n2=Norma(&tab[v2-1]);
if (n1>n2) {
cout << "v" << v1 << " > v" << v2 << endl;
cout << n1 << " > " << n2 << endl;
}
else if (n1==n2){
cout << "v" << v1 << " = v" << v2 << endl;
cout << n1 << " = " << n2 << endl;
}
else {
cout << "v" << v1 << " < v" << v2 << endl;
cout << n1 << " < " << n2 << endl;
}
}
for (int i=0; i<N; i++)
deleteVector(&tab[i]);
getch();
}

Ответы (1 шт):
Странные дела начинаются с short getX (Vector *v, int pos) — почему, если у вас вектор double, вы возвращаете short, а не double?
Аналогично, если у вас
double sum=0;
...
return sqrtf(sum);
и функция возвращает double, зачем же вычислять sqrtf, а не sqrt?...
void main()
неверно, нужен
int main()
Непонятно также
if (N==0) ;
И что вы хотите этим сказать? Кстати, на скриншоте у вас int main() и return после if (N==0), а вот это уже проблема: раз main возвращает int, то и return должен быть со значением, return 0;, например.
Вот все, что найдено компилятором. Правильно ли ваш код работает, а не компилируется — вопрос другой, не смотрел... Но даже навскидку:
void setN (Vector *v, int nr){
if (nr<1) v->n=1;
else v->n=nr;
}
Как я понимаю, это изменение размера (количества элементов) в векторе? Тогда почему вы не меняете выделенную память? А то ведь запросто может быть, что вы выделили 5 элементов, а потом сделали n сотней, и здравствуй, выход за пределы массива...