Решение лабораторных, контрольных и т.д. на С++

  • Автор темы Автор темы European
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
rrrFer
ну не мучай человека :) реши за рейтинг а не за деньги :) Деньги-ничто, рейтинг -Фсе, темболее что обе простые

cartman
ладно уговорил, 1000 и по рукам, мы с rrrFer, делаем обе, т.е. по 500 за каждую!

icq:404=026=822
 
for cartman

вот лови:

[codebox]#include <cstdlib>
#include <iostream>
#include <fstream> // the lib for work with file

using namespace std;

int main(int argc, char *argv[])
{
// open file 1 (with words)
int max_len=0, len=0, alllen=0;
char word[64], buffer[1000];
memset (buffer,00,1000);

ifstream input_file("file1.txt");
if (input_file.fail()) cerr << "open error" << endl;
while (! input_file.eof())
{
input_file >> word;
cout << word << endl;
len= strlen(word);
if (max_len<len) max_len=len;
memcpy (buffer+alllen,word,len);
alllen++;alllen+=len;
}

cout << "max_len:" << max_len << endl << endl;

int lenka=0;
for (int jj=0; jj<=alllen; jj++)
{
lenka=strlen(buffer+jj);
if (max_len == lenka)
{
cout << lenka << "buffer=" << buffer+jj << endl;
//thats here write in file2!!!
// вот тут сделай запись в файл номер 2
}
jj+=lenka;
}
input_file.close ();
getchar();return 0;
}[/codebox]

просто я наскоряк написал... дальше сам :)

а вот тебе для решения 2 задачи:
я думаю если постараешься, то сам справишься
 
Lotti

я так понимаю вешается если ставишь размер вектора болшье 127 ?
vect a1(...);
что тебе надо? конкретно?


spirit0k

[codebox]#include <iostream>
#define max 5
using namespace std;
int main()
{
int massiv[max];for (int jj=0; jj<=max;jj++) cin >> massiv[jj];
int nesovpalo=0;
for (int jj=0; jj<=max;jj++) for (int tt=0;tt<=max;tt++) if (massiv[jj]!=massiv[tt]) nesovpalo++;
cout << "nesovpalo:" << nesovpalo << endl;
getchar ();getchar ();return 0;
}[/codebox]
 
Мне надо, чтобы он (в мысле комп), когда наткнется на эту ошибку, не завершал аварийно.В конструкторе try точно нужен. Ну я его туда поставила. А он, гад, всеравно вешается. В головной я не знаю надо или нет, просто пыталась как-то справиться с ситуацией. Вобщем плохо получилось видимо. Причем ошибку вызывает именно строка а[1]=55(объект же не создан). Ну вот я и интересуюсь, как эту строку аккураино обойти можно? Сама пока еще прсто до конца в эту тему не въехала, только начали, так что помогите пожалуйста кто чем сможет :)
 
Lotti

девушка :) вы в следующий раз просто выражайтесь чуток яснее :) ну что бы мы тоже понимали, с чем бороться :)
а rrrFer'y +1
 
Ну вот и следующая проблема :rolleyes: Вобщем вот задание
Разработайте пользовательский тип ” вектор в n-мерном пространстве”. Для разрабатываемого типа обязательно определите:
• конструктор (или несколько, если необходимо)
• набор методов ”get” и ”set” ;
• операторы + и – для сложения и вычитания векторов с получением нового вектора (суммы или разности);
• оператора * для вычисления скалярного произведения двух векторов;
• оператор присваивания;
• оператор сравнения ==;
(rrrFer, вам должно быть знакомо :( )
Он собственно реализован (опять же спасибо rrrFer :( ), но работает не одекватно. Т.е. если у меня допустим все вектора в 1-мерном пространстве - все замечательно работае, если один из них в 3-мерном, тоже работет, но если уже 2 в 3-мерном(и больше), то при выполнении перегруженых операций удаляется массив кординат первого из векторов (допустим в v1+v2 удаляется v1), хотя теоретически не должен!
Ну вопрос мне кажется вполне очевиден: Что происходит и как это исправить?
[codebox] #include <iostream>
#include <stdio.h>
using namespace std;
class vector{
private:
double *mas;
int n;
public:
vector(){
cout<<"конструктор по умолчанию\n";
n=1;
mas=new double[1];
mas[0]=0;
}
vector (int n1){
cout<<"Конструктор ручного ввода вызван\n";
n=n1;
int i;
mas=new double [n];
printf("ввод координат вектора %d -мерного пространства\n",n);
for(i=0;i<n;i++){
printf("введите %d-ую координату\n",(1+i));
cin>>mas;
}
}
vector (int n1,double *k){
cout<<"Автоматический конструктор вызван\n";
int i;
n=n1;
mas=new double [n];
for(i=0;i<n;i++)
mas=k;
}
vector:: ~vector(){
cout<<"Деструктор вызван. Объект удален\n";
delete [] mas;
}
double get_koord (int a) const {
if(a<=n)
return mas[a-1];
else
return 0;
}
int vector::get_prost()const {
return n;
}
void set_koord (int a, double q);
vector operator + ( vector &v1);
vector operator + ( const double a) const;
vector operator - ( vector &v1);
vector operator - ( const double a) const;
double operator * ( const vector &v1) const;
vector* operator = ( vector & v1);
bool operator == ( const vector &v1) const;
void coutv () const;
};

void vector:: set_koord(int a,double q){
if (a<=n)
mas[a-1]=q;
else cout<<"невозможни изменит несуществующую коорднату вектора\n"<<endl;
}

vector vector:: operator +( vector &v1){
int i;
double *mas1;
if (n==v1.n){
mas1=new double [n];
for (i=0;i<n;i++)
mas1=mas+v1.mas;
vector *v2=new vector(n,mas1);
return *v2;
}
else cout<<" невозможно сложит вектра в различных пространствах!\n"<<endl;
return *this;
}
vector vector:: operator -( vector &v1) {
int i;
double *mas1;
if (n==v1.n){
mas1=new double [n];
for (i=0;i<n;i++)
mas1=mas-v1.mas;
vector *v2=new vector(n, mas1);
return *v2;
}
else cout<<" невозможно отнять вектора в различных пространствах!\n"<<endl;
return *this;
}
double vector:: operator *(const vector &v1) const{
int i;
double s=0;
if (n==v1.n){
for (i=0;i<n;i++)
s=s+mas*v1.mas;
return s;
}
else cout<<" невозможно найти скалярное роизведение векторов в различных пространствах!\n"<<endl;
return 0;
}
vector* vector:: operator =(vector &v1){
int i;
if (n==v1.n){
for (i=0;i<n;i++)
mas=v1.mas;
return this;
}
else cout<<" невозможно выполнить операцию присваивания над векторами в различных пространствах!\n"<<endl;
return this;
}
bool vector:: operator == ( const vector &v1) const{
int i,k=0;
if (n==v1.n){
for (i=0;i<n;i++)
if (mas!=v1.mas)
k++;
if (k==0){
cout<<" равны\n"<<endl;
return true;
}
else {
cout<<" не равны\n"<<endl;
return false;
}
}
else cout<<" невозможно сравнить вектора в различных пространствах!\n"<<endl;
return false;
}
void vector:: coutv () const
{
int i;
cout<<"(";
for (i=0;i<n;i++){
cout<<mas;
if (i!=n-1)
cout<<";";
}
cout<<")"<<endl;
}
int main (){
setlocale (LC_ALL,".1251");
vector *v1=new vector() , *v2=new vector(1),*v3=new vector(1),
*v4=new vector(1), *v5=new vector(),*v6=new vector(),*v7=new vector();
cout<<"КОНСТРУКТОР ЗАДАЕТ ИЗНАЧАЛЬНЫЕ ЗНАЧЕНИЯ:\n";
cout<<"v1 ";
v1->coutv();
cout<<"v2 ";
v2->coutv();
cout<<"v3 ";
v3->coutv();
cout<<"v4 ";
v4->coutv();
cout<<"v5 ";
v5->coutv();
cout<<"v6 ";
v6->coutv();
cout<<"v7 ";
v7->coutv();
cout<<"*************\n";
cout<<"МЕТОД SET \n";
cout<<"v1 изначально имеет координаты:";
v1->coutv();
cout<<"после изменения:";
v1->set_koord(1,2.2);
v1->coutv();
cout<<"*************\n";
cout<<"МЕТОД GET\n";
cout<<"v1 имеет координаты\n";
cout<<"x="<<v1->get_koord(1)<<endl;
cout<<"**************\n";
cout<<"СУММА И ОПЕРАТОР ПРИСВАИВАНИЯ\n";
cout<<"v2 имеет координаты:";
v2->coutv();
cout<<"v3 имеет координаты:";
v3->coutv();
cout<<"v5=v2+v3\n";
cout<<"v5 имеет новые координаты:";
*v5=*v2+*v3;
v5->coutv();
cout<<"--------\n";
cout<<"v2 и v3 будут иметь пежнии координатв:\n";
v2->coutv();
v3->coutv();
cout<<"**************\n";
cout<<"РАЗНОСТЬ И ОПЕРАТОР ПРИСВАИВАНИЯ\n";
cout<<"v4 имеет координаты:";
v4->coutv();
cout<<"v3 имеет координаты:";
v3->coutv();
cout<<"v6=v4-v3\n";
* v6=*v4-*v3;
cout<<"v6 имеет новые координаты:";
v6->coutv();
cout<<"--------\n";
cout<<"v4 и v3 будут иметь пежнии координатв:\n";
v4->coutv();
v3->coutv();
cout<<"***************\n";
cout<<"СКАЛЯРНОЕ ПРОИЗВЕДЕНИЕ\n";
cout<<"v4 имеет координаты:";
v4->coutv();
cout<<"v3 имеет координаты:";
v3->coutv();
cout<<"скалярное произведение векторов v3 и v4 равно\n";
cout<<(*v4)*(*v3)<<endl;
cout<<"***************\n";
cout<<"ОПЕРАТОР ПРИСВАИВАНИЯ\n";
cout<<"v7 имеет изначальные координаты:\n";
v7->coutv();
cout<<"v4 имеет координаты:\n";
v4->coutv();
cout<<"присваиваем значение v4 вектору v7 \n";
v7=v4;
cout<<"тепери v7 имеет координаты ";
v7->coutv();
cout<<"*************\n";
cout<<"ОПЕРАТОР == \n";
cout<<"v3 имеет координаты:";
v3->coutv();
cout<<"v4 имеет координаты:";
v4->coutv();
cout<<"v7 имеет координаты ";
v7->coutv();
cout<<"v3 и v4 ";
*v3==*v4;
cout<<"v4 и v7 ";
*v4==*v7;
system("pause");
return 0;
}
[/codebox]
Спросила у препода - она сказала, что я в main-е ерунду делаю,т.е. выделяю память, и опять ее потом в конструкторе выделяю. Ну я убрала =new vector, еще хуже стало - количество координат не меняется, что бы я в скодках ни писала + ошибки, вобщем полный боевой комплект! :D
Так собственно какую роль играет *v1=new vector() и почему без него нельзя?
Надеюсь выразилась достаточно ясно :D
 
Помогите несчастной школьнице решить задачку по C...
Задан массив посчитать количество четных элементов, стоящих на четных местах. Учитывая то, что я программирую в Code Blocks и знаю только две биюлиотеки <stdio.h> <math.h>

Просто я никак не могу понять, как согласовать номер ячейки массива и то, что в ней лежит???
 
Есть 3 задачи очень нужно решить . Помогите кто чем может...
1)Нужно решить массив.Размер массива 14,тип данных действ.Вычислить процентное содержание отрицательных,положительных и нулевых элементов.
В 2 и 3 задание условия нету ,может без него получиться найти проблему.Если что завтра сфоткаю и выложу.
2)
[codebox]int k;
float x,S,Slog,R,eps;
x=StrToFloat(Edit1->Text);
S=0;
k=1;
Slog=pow((x-1)/(x+1),3)/3;
do
{if(x)=1 тут находил С++ ошибку
Slog=S+Slog;
k=k+1;
R=((x-1)/(x+1))*(2/3);
Slog=Slog*R;
}while(fabs(Slog)>eps);
Edit2->Text=FloatToStr(S);[/codebox]
3)[codebox]float x,S,t,U;
t=StrToFloat(Edit1->Text);
S=StrToFloat(Edit2->Text);
x=-1.3;
do
{
if(x<=pow(x,1./3)
U=(t*pow(x,2)+S*x)/(1-(exp.(t*x));
else U=pow(sin(fabs(x)),2)+cos(fabs(S*pow(x,2));
Memo1->Lines->Add("x="+FloatToStr(x)+"U="+FloatToStrF(U,ffFixed ,8,3));
Series1->AddXY(x,U," ",clRed);
x=x+0.2;}
while(x<=1.1);[/codebox]
 
Так, задача немного изменилась.
Задание то же.
Разработайте пользовательский тип ” вектор в n-мерном пространстве”. Для разрабатываемого типа обязательно определите:
• конструктор (или несколько, если необходимо)
• набор методов ”get” и ”set” ;
• операторы + и – для сложения и вычитания векторов с получением нового вектора (суммы или разности);
• оператора * для вычисления скалярного произведения двух векторов;
• оператор присваивания;
• оператор сравнения ==;
Но вот текст немного изменен.
[codebox]
#include <iostream>
#include <stdio.h>
using namespace std;
class vector
{
private:
double *mas;
int n;
public:
vector()
{
cout<<"конструктор по умолчанию\n";
n=1;
mas=new double[1];
mas[0]=0;
}
vector (int n1)
{
try
{
if (n1<=0)
throw "error";
else
{
cout<<"Конструктор ручного ввода вызван\n";
n=n1;
int i;
mas=new double [n];
printf("ввод координат вектора %d -мерного пространства\n",n);
for(i=0;i<n;i++)
{
printf("введите %d-ую координату\n",(1+i));
cin>>mas;
}
}
}
catch (char*)
{
cout<<"Невозможно создать вектор в "<<n1<<"-мерном пространстве!\n";
exit(0);
}
}
vector (int n1,double *k)
{
cout<<"Автоматический конструктор вызван\n";
try
{
if (n1<=0)
throw "error";
else
{
int i;
n=n1;
mas=new double [n];
for(i=0;i<n;i++)
mas=k;
}
}
catch (char*)
{
cout<<"Невозможно замать вектор в "<<n1<<"-мерном пространстве!\n";
exit(0);
}

}
vector:: ~vector()
{
cout<<"Деструктор вызван. Объект удален\n";
delete [] mas;
}
double get_koord (int a) const
{
try
{
if(a<=n)
{
return mas[a-1];
cout<<a<<"-ая координата равна "<<mas[a-1]<<endl;
}
else throw "error";
return 0;
}
catch ( char*)
{cerr<<"невозможно получить несуществующую координату!\n";}
}


int vector::get_prost()const
{
return n;
}
void set_koord (int a, double q);
vector operator + ( vector &v1);
vector operator + ( const double a) const;
vector operator - ( vector &v1);
vector operator - ( const double a) const;
double operator * ( const vector &v1) const;
vector* operator = ( vector & v1);
bool operator == ( const vector &v1) const;
void coutv () const;
};

void vector:: set_koord(int a,double q)
{
try
{
if (a<=n)
mas[a-1]=q;
else throw "error";
}
catch (char*)
{
cout<<"невозможни изменит несуществующую коорднату вектора\n"<<endl;
}

}

vector vector:: operator +( vector &v1)
{
try
{
int i;
double *mas1;
if (n==v1.n)
{
mas1=new double [n];
for (i=0;i<n;i++)
mas1=mas+v1.mas;
vector *v2=new vector(n,mas1);
return *v2;
}
else throw "error";
}
catch (char*)
{cout<<" невозможно сложит вектра в различных пространствах!\n"<<endl;
return *this;}
}

vector vector:: operator -( vector &v1)
{
try
{
int i;
double *mas1;
if (n==v1.n)
{
mas1=new double [n];
for (i=0;i<n;i++)
mas1=mas-v1.mas;
vector *v2=new vector(n, mas1);
return *v2;
}
else throw "error";
}
catch (char*)
{
cout<<" невозможно отнять вектора в различных пространствах!\n"<<endl;
return *this;
}
}
double vector:: operator *(const vector &v1) const
{
try
{
int i;
double s=0;
if (n==v1.n)
{
for (i=0;i<n;i++)
s=s+mas*v1.mas;
return s;
}
else throw "error";
}
catch (char*)
{

cout<<" невозможно найти скалярное роизведение векторов в различных пространствах!\n"<<endl;
}
return 0;
}
vector* vector:: operator =(vector &v1)
{
try
{
int i;
if (n==v1.n)
{
for (i=0;i<n;i++)
mas=v1.mas;
return this;
}
else throw "error";
}
catch (char*)
{cout<<" невозможно выполнить операцию присваивания над векторами в различных пространствах!\n"<<endl;}
return this;
}
bool vector:: operator == ( const vector &v1) const
{
try
{
int i,k=0;
if (n==v1.n)
{
for (i=0;i<n;i++)
if (mas!=v1.mas)
k++;
if (k==0)
{
cout<<" равны\n"<<endl;
return true;
}
else
{
cout<<" не равны\n"<<endl;
return false;
}
}
else throw "error";
}

catch (char*)
{cout<<" невозможно сравнить вектора в различных пространствах!\n"<<endl;}
return false;
}

void vector:: coutv () const
{
int i;
cout<<"(";
for (i=0;i<n;i++)
{
cout<<mas;
if (i!=n-1)
cout<<";";
}
cout<<")"<<endl;
}
int main ()
{
try
{
setlocale (LC_ALL,".1251");
vector v1(1), v2(2),v3(),
v4(), v5(5),v6(5),v7(5);
cout<<"КОНСТРУКТОР ЗАДАЕТ ИЗНАЧАЛЬНЫЕ ЗНАЧЕНИЯ:\n";
cout<<"v1 ";
v1.coutv();
cout<<"v2 ";
v2.coutv();
cout<<"v3 ";
v3.coutv();
cout<<"v4 ";
v4.coutv();
/*cout<<"v5 ";
v5.coutv();
cout<<"v6 ";
v6.coutv();
cout<<"v7 ";
v7.coutv();*/
cout<<"*************\n";
cout<<"МЕТОД SET \n";
cout<<"v1 изначально имеет координаты:";
v1.coutv();
cout<<"после изменения:";
v1.set_koord(3,2.2);
v1.coutv();
cout<<"*************\n";
cout<<"МЕТОД GET\n";
v1.get_koord(9);
cout<<"**************\n";
cout<<"СУММА И ОПЕРАТОР ПРИСВАИВАНИЯ\n";
cout<<"v2 имеет координаты:";
v2.coutv();
cout<<"v3 имеет координаты:";
v3.coutv();
cout<<"v5=v2+v3\n";
cout<<"v5 имеет новые координаты:";
v4=v2+v3;
v4.coutv();
cout<<"--------\n";
cout<<"v2 и v3 будут иметь пежнии координатв:\n";
v2.coutv();
v3.coutv();
cout<<"**************\n";
/*cout<<"РАЗНОСТЬ И ОПЕРАТОР ПРИСВАИВАНИЯ\n";
cout<<"v4 имеет координаты:";
v4.coutv();
cout<<"v3 имеет координаты:";
v3.coutv();
cout<<"v6=v4-v3\n";
v6=v4-v3;
cout<<"v6 имеет новые координаты:";
v6.coutv();
cout<<"--------\n";
cout<<"v4 и v3 будут иметь пежнии координатв:\n";
v4.coutv();
v3.coutv();
cout<<"***************\n";
cout<<"СКАЛЯРНОЕ ПРОИЗВЕДЕНИЕ\n";
cout<<"v4 имеет координаты:";
v4.coutv();
cout<<"v3 имеет координаты:";
v3.coutv();
cout<<"скалярное произведение векторов v3 и v4 равно\n";
cout<<(v4)*(v3)<<endl;
cout<<"***************\n";
cout<<"ОПЕРАТОР ПРИСВАИВАНИЯ\n";
cout<<"v7 имеет изначальные координаты:\n";
v7.coutv();
cout<<"v4 имеет координаты:\n";
v4.coutv();
cout<<"присваиваем значение v4 вектору v7 \n";
v7=v4;
cout<<"тепери v7 имеет координаты ";
v7.coutv();
cout<<"*************\n";
cout<<"ОПЕРАТОР == \n";
cout<<"v3 имеет координаты:";
v3.coutv();
cout<<"v4 имеет координаты:";
v4.coutv();
cout<<"v7 имеет координаты ";
v7.coutv();
cout<<"v3 и v4 ";
v3==v4;
cout<<"v4 и v7 ";
v4==v7;*/
}
catch (bad_alloc & ex)
{
cout<<"No memory!"<<endl;
cerr<<"Error:"<<ex.what()<<endl;
}

system ("pause");
return 0;
}
[/codebox]
Проблема заключается в следующем:
1. Почему-то выбивает ошибку при использовании функции coutv для векторов, созданых конструктором по умолчанию (т.е v() );
2. Все замечательно работает, если в перегруженых опереторах встречаются 2 веткора одинаковой размерности. А вот если разный пространств, то один (первый) удаляется (ну массив координат). А вот почему они не дружат, непонятно!
Вот и вопрос: как это исправить? Надо до вторника!
p.s. Ну, если найдет вдохновение, можете еще посмотреть, правильно ли я обрабатываю исключительне ситуации, и подсказать, где я еще их не обработала, а то моей фантазии не хватает больше :)
 
Помогите решить.
Во вводимых массивах элементы расставлять по убыванию, если сумма элементов <0, по возрастанию, если сумма элементов >0, и удалять нулевые, есл она равна нулю.
Спасибо.
 
Ну предыдущий вопрос опять на половину снимается ;)
Вобщем задание все то же:
Разработайте пользовательский тип ” вектор в n-мерном пространстве”. Для разрабатываемого типа обязательно определите:
• конструктор (или несколько, если необходимо)
• набор методов ”get” и ”set” ;
• операторы + и – для сложения и вычитания векторов с получением нового вектора (суммы или разности);
• оператора * для вычисления скалярного произведения двух векторов;
• оператор присваивания;
• оператор сравнения ==;
А текст вот опять изменила (она практически уже работает! ;) )
[codebox]
#include <iostream>
#include <stdio.h>
using namespace std;
class vector
{
private:
double *mas;
int n;
public:
vector()
{
cout<<"конструктор по умолчанию\n";
n=1;
mas=new double[1];
mas[0]=0;
}
vector (int n1)
{
try
{
if (n1<=0)
throw "error";
else
{
cout<<"Конструктор ручного ввода вызван\n";
n=n1;
int i;
mas=new double [n];
printf("ввод координат вектора %d -мерного пространства\n",n);
for(i=0;i<n;i++)
{
printf("введите %d-ую координату\n",(1+i));
cin>>mas;
}
}
}
catch (char*)
{

cout<<"Невозможно создать вектор в "<<n1<<"-мерном пространстве!\n";
}
}
vector (int n1,double *k)
{
cout<<"Автоматический конструктор вызван\n";
try
{
if (n1<=0)
throw "error";
else
{
int i;
n=n1;
mas=new double [n];
for(i=0;i<n;i++)
mas=k;
}
}
catch (char*)
{
cout<<"Невозможно замать вектор в "<<n1<<"-мерном пространстве!\n";

}

}
vector:: ~vector()
{
cout<<"Деструктор вызван. Объект удален\n";
delete [] mas;
}
double get_koord (int a) const
{
try
{
if(a<=n)
{
return mas[a-1];
cout<<a<<"-ая координата равна "<<mas[a-1]<<endl;
}
else throw "error";
return 0;
}
catch ( char*)
{cerr<<"невозможно получить несуществующую координату!\n";}
}


int vector::get_prost()const
{
return n;
}
void set_koord (int a, double q);
vector operator + ( vector &v1);
vector operator + ( const double a) const;
vector operator - ( vector &v1);
vector operator - ( const double a) const;
double operator * ( const vector &v1) const;
vector* operator = ( vector & v1);
bool operator == ( const vector &v1) const;
void coutv () const;
};

void vector:: set_koord(int a,double q)
{
try
{
if (a<=n)
mas[a-1]=q;
else throw "error";
}
catch (char*)
{
cout<<"невозможни изменит несуществующую коорднату вектора\n"<<endl;
}

}

vector vector:: operator +( vector &v1)
{
try
{
int i;
double *mas1;
if (n==v1.n)
{
mas1=new double [n];
for (i=0;i<n;i++)
mas1=mas+v1.mas;
vector *v2=new vector(n,mas1);
return *v2;
}
else throw "error";
}
catch (char*)
{cout<<" невозможно сложит вектра в различных пространствах!\n"<<endl;
return *this;}
}

vector vector:: operator -( vector &v1)
{
try
{
int i;
double *mas1;
if (n==v1.n)
{
mas1=new double [n];
for (i=0;i<n;i++)
mas1=mas-v1.mas;
vector *v2=new vector(n, mas1);
return *v2;
}
else throw "error";
}
catch (char*)
{
cout<<" невозможно отнять вектора в различных пространствах!\n"<<endl;
return *this;
}
}
double vector:: operator *(const vector &v1) const
{
try
{
int i;
double s=0;
if (n==v1.n)
{
for (i=0;i<n;i++)
s=s+mas*v1.mas;
return s;
}
else throw "error";
}
catch (char*)
{

cout<<" невозможно найти скалярное роизведение векторов в различных пространствах!\n"<<endl;
}
return 0;
}
vector* vector:: operator =(vector &v1)
{

int i;
delete [] mas;
mas=new double [v1.n];
for (i=0;i<v1.n;i++)
mas=v1.mas;
n=v1.n;
return this;

}
bool vector:: operator == ( const vector &v1) const
{
try
{
int i,k=0;
if (n==v1.n)
{
for (i=0;i<n;i++)
if (mas!=v1.mas)
k++;
if (k==0)
{
cout<<" равны\n"<<endl;
return true;
}
else
{
cout<<" не равны\n"<<endl;
return false;
}
}
else throw "error";
}

catch (char*)
{
cout<<" невозможно сравнить вектора в различных пространствах!\n"<<endl;}
return false;
}

void vector:: coutv () const
{
int i;
cout<<"(";
for (i=0;i<n;i++)
{
cout<<mas;
if (i!=n-1)
cout<<";";
}
cout<<")"<<endl;
}
int main ()
{
try
{
setlocale (LC_ALL,".1251");
vector v1(1), v2(1),v3(2),
v4(1), v5(5),v6(-5),v7(5),v8(3),v9(1);
cout<<"КОНСТРУКТОР ЗАДАЕТ ИЗНАЧАЛЬНЫЕ ЗНАЧЕНИЯ:\n";
cout<<"v1 ";
v1.coutv();
cout<<"v2 ";
v2.coutv();
cout<<"v3 ";
v3.coutv();
cout<<"v4 ";
v4.coutv();
cout<<"v5 ";
v5.coutv();
cout<<"v6 ";
v6.coutv();
cout<<"v7 ";
v7.coutv();
cout<<"*************\n";
v1.coutv();
v1=v5;
v1.coutv();
cout<<"МЕТОД SET \n";
cout<<"v1 изначально имеет координаты:";
v1.coutv();
cout<<"после изменения:";
v1.set_koord(3,2.2);
v1.coutv();
cout<<"*************\n";
cout<<"МЕТОД GET\n";
v1.get_koord(9);
cout<<"**************\n";
cout<<"СУММА И ОПЕРАТОР ПРИСВАИВАНИЯ\n";
cout<<"v2 имеет координаты:";
v2.coutv();
cout<<"v3 имеет координаты:";
v3.coutv();
cout<<"v5=v2+v3\n";
cout<<"v5 имеет новые координаты:";
v4=v2+v3;
v4.coutv();
cout<<"--------\n";
cout<<"v2 и v3 будут иметь пежнии координатв:\n";
v2.coutv();
v3.coutv();
cout<<"**************\n";
cout<<"РАЗНОСТЬ И ОПЕРАТОР ПРИСВАИВАНИЯ\n";
cout<<"v9 имеет координаты:";
v9.coutv();
cout<<"v3 имеет координаты:";
v3.coutv();
cout<<"v8=v9-v3\n";
v8=v9-v3;
cout<<"v8 имеет новые координаты:";
v8.coutv();
cout<<"--------\n";
cout<<"v4 и v3 будут иметь пежнии координатв:\n";
v4.coutv();
v3.coutv();
cout<<"***************\n";
cout<<"СКАЛЯРНОЕ ПРОИЗВЕДЕНИЕ\n";
cout<<"v4 имеет координаты:";
v4.coutv();
cout<<"v3 имеет координаты:";
v3.coutv();
cout<<"скалярное произведение векторов v3 и v4 равно\n";
cout<<(v4)*(v3)<<endl;
cout<<"***************\n";
cout<<"ОПЕРАТОР ПРИСВАИВАНИЯ\n";
cout<<"v7 имеет изначальные координаты:\n";
v7.coutv();
cout<<"v4 имеет координаты:\n";
v4.coutv();
cout<<"присваиваем значение v4 вектору v7 \n";
v7=v4;
cout<<"тепери v7 имеет координаты ";
v7.coutv();
cout<<"*************\n";
cout<<"ОПЕРАТОР == \n";
cout<<"v3 имеет координаты:";
v3.coutv();
cout<<"v4 имеет координаты:";
v4.coutv();
cout<<"v7 имеет координаты ";
v7.coutv();
cout<<"v3 и v4 ";
v3==v4;
cout<<"v4 и v7 ";
v4==v7;
}
catch (bad_alloc & ex)
{
cout<<"No memory!"<<endl;
cerr<<"Error:"<<ex.what()<<endl;
}

system ("pause");
return 0;
}
[/codebox]
Вобщем все работает нормально, только в самом конце проги, когда вызывается деструктор для всех объектов, выбивает ошибку непонятную. Может кто-нибудь знает, что это за ошибка и как ее исправить?
 
Еслибы я втыкала в то, что ты сделал, я бы не мучалась! :( А так, ну сдам я ей(преподу) а она спросит "А кчто это за слово такое, что оно обозначает? Ме его не проходили :) ." Вот и вожусь, с тем, что имеется. Ну он уже заработал, все выполняет, ничего не удаляет(!) :D и главное, что сама доганяю! Вот только в конце main-а, когда декструктор вызывается, его немного глючит, ошибку выбивает. Вот и ищу, кто пожскажет, что это за ошибка то такая, и как ее убрать.
 
Помогите решить.
Во вводимых массивах элементы расставлять по убыванию, если сумма элементов <0, по возрастанию, если сумма элементов >0, и удалять нулевые, есл она равна нулю.
Спасибо.

немножечко конкретнее распишите ... и тогда точно поможем ... что , как надо, по полкам!
 
Вот черт, все-таки удаляет... Ну помогите мне, кто нибудь, ну пожалуйста! :)
 
Твоя программа не вылетает с ршибкой, как ты говоришь. Деструктор срабатывает 5 раз и все нормаоьно вроде на первый взгляд, в детали не вглядывался.
 
У меня бьет ошибку, в универе бьет ошибку+портит координаты вектора в перегруженых операциях+ не все вектора под конц удвляет+выводит ошибку компиляции,когда я пытаюсь применить coutv к вектору, который задается конструктором без пораметров. Вот такой вот полный набор у меня :) Странно,что у вас работает :)
p.s. У вас деструктор срабатывает 5 раз, а должен 9 (векторов то я создала 9!)
 
Народ! Помогите с задачкой!
Даны координаты двух противоположных вершин квадрата и длина его стороны. Нужно определить, принадлежит ли точка квадрату (ее координаты вводятся с клавиатуры).
Заранее спасибо.
 
rrrFer
в условии ничего не сказано, что стороны квадрата обязательно параллельны координатным осям.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!