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

  • Автор темы Автор темы European
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Народ! Здесь в головной программе даже тупо строку не выводит! Чтто за лажа такая, я вообще не догоняю!! Может объясните?

#include <iostream>
#include <stdio.h>
using namespace std;
class vector
{
private:
double x;
double y;
double z;
public:
vector(){x=y=z=0.0;}
vector (double x1){x=x1; y=z=0.0;}
vector (double x1,double y1){x=x1;y=y1;z=0.0;}
vector (double x1,double y1,double z1){x=x1;y=y1;z=z1;}
double get_x () const { return x;}
double get_y () const { return y;}
double get_z () const { return z;}
void set_x (double x1);
void set_y (double y1);
void set_z (double z1);
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_x (double x1)
{
x=x1;
}
void vector:: set_y (double y1)
{
y=y1;
}
void vector:: set_z(double z1)
{
z=z1;
}
vector vector:: operator +( vector &v1)
{
x=x +v1.x;
y= y+v1.y;
z=z+v1.z;
}
vector vector:: operator -( vector &v1)
{
x=x-v1.x;
y=y-v1.y;
z=z-v1.z;
}
double vector:: operator *(const vector &v1) const
{
return x*v1.x+y*v1.y+z*v1.z;
}
vector vector:: operator =(vector &v1)
{
x=v1.x;
y=v1.y;
z=v1.z;
}
bool vector:: operator == ( const vector &v1) const
{
if ((x==v1.x)&&(y==v1.y)&&(z==v1.z))
return true;
else return false;
}
void vector:: coutv () const
{
cout<<"x="<<get_x()<<" y="<<y<<" z="<<z<<endl;
}
int main ()
{
vector v1, v2(1),v3(1,2), v4(1,2,3);
v1.coutv();
v2.coutv() ;
v3.coutv() ;
v4.coutv ();
v1.set_x(5.0);
cout<<"aaaa\n";
cout<<"x="<<v1.get_x();
}
 
АУ! Отзовитесь кто-нтбудь!
Разработайте пользовательский тип ” вектор в n-мерном пространстве”. Для разрабатываемого типа обязательно определите:
• конструктор (или несколько, если необходимо)
• набор методов ”get” и ”set” ;
• операторы + и – для сложения и вычитания векторов с получением нового вектора (суммы или разности);
• оператора * для вычисления скалярного произведения двух векторов;
• оператор присваивания;
• оператор сравнения ==;

Киньте пожалуйсто кому не жалко пару примеров перегрузок операторов. А то что-то я не втыкаю. Пжаааалуйста, ооочень надо. Буду оооочень благодарна! ;)

Код:
#pragma once

#include <vector>
#include <algorithm>
#include <exception>
#include <functional>

namespace my {

typedef unsigned int size_type;
template <class T> class vector : public std::vector <T>
{			  
private:
typedef std::vector<T> vector_stl;

public:
explicit vector() : vector_stl() {};
explicit vector(size_type n, const T& value = T()) 
: vector_stl(n, value) {};
vector (const vector& x) 
: vector_stl(x) {};
~vector() {};

T getAt(size_type pos){ 
return vector_stl::at(pos); 
}

T setAt(size_type pos, T value){ 
vector_stl::operator[](pos) = value; 
}

vector<T>& operator =(vector<T>& v) {
this->resize(v.size());
std::copy(v.begin(), v.end(), vector_stl::begin());
return *this;
}

bool operator ==(vector<T>& v) {
if(v.size() != this->size()) return false;
return std::equal(
vector_stl::begin(), 
vector_stl::end(), 
v.begin());
}			

vector<T> operator +(vector<T>& v) {
if(v.size() != this->size()) 
throw std::exception("vector: sizes not match...");

vector<T> result(this->size());
std::transform(
vector_stl::begin(), 
vector_stl::end(), 
v.begin(), 
result.begin(), 
std::plus<T>());
return result;
}

vector<T> operator -(vector<T>& v) {
if(v.size() != this->size()) 
throw std::exception("vector: sizes not match...");

vector<T> result(this->size());
std::transform(
vector_stl::begin(), 
vector_stl::end(), 
v.begin(), 
result.begin(), 
std::minus<T>());

return result;
}

T operator *(vector<T>& v) {
if(v.size() != this->size()) 
throw std::exception("vector: sizes not match...");

T result = T(0);
vector_stl::iterator it0 = vector_stl::begin();
vector_stl::iterator it1 = v.begin();
while(it0 != vector_stl::end()){
result += *it0++ * *it1++;
}
return result;
}

};

}; // end namespace

проверко
Код:
#include "vector.h"
#include <iterator>
using namespace my;

void main(int argc, char* argv[])
{
vector<double> vec0(3, 0.0);
vector<double> vec1(3, 1.0);
vector<double> vec2(3, 2.0);

vec0 = vec1;
vec0 = vec1 + vec2;
vec0 = vec1 - vec2;
double dot = vec1 * vec2;

bool equals = (vec0 == vec1);
equals = (vec0 != vec1);
equals = (vec0 == vec0);

std::ostream_iterator<int> out_it (std::cout, ", ");
std::copy ( vec0.begin(), vec0.end(), out_it );
std::cout << std::endl;
std::copy ( vec1.begin(), vec1.end(), out_it );
std::cout << std::endl;
std::copy ( vec2.begin(), vec2.end(), out_it );
std::cout << std::endl;

system("PAUSE");
}
 
[font="Comic Sans Miicolor#FF0000"][/color]S"][/font]
Здраствуйте, помогите пожалуйса! :( Очень нужна помощь! :huh: Я начинающий программист! ;) Изучаю С на данный момент! Вот дали задание без которого не видать зачеты...а реализовать никак не получается...(((

1.• Разработайте программу, которая создает НЕ квадратную матрицу(размер можно самим задать сразу)
• Динамически создайте вектор той же размерности, что и матрица.
• Напишите функцию умножения матрицы на вектор и с ее помощью проверьте результат.
И еще надо динамически захватить память для матрицы, для вектора и для результата полученного в итоге!

2. Нужна матрицу, тоже не квадратную обойти по спирале...по спирале обойти все ее элементы...

вот наверное и все...

спасибо огромное всем, заранее...я очень надеюсь что хоть кто-нибудь отзовется и поможет, поможет начинающему программисту соображать так же круто как и вы ;)
 
alexsid
Спасибо вам конечно огромное за такую огромную работу, но к сожалению мой уровень не позволяет мне понять, что где происходит и половины задействованых функций я не знаю. Но попытаюсь разобраться)
rrrFer
На счет ошибок я в курсе, как исправить догадываюсь, просто в чера уже больше не могла издеваться больше над компом. Но даже с ошибками должен же черный экран появляться для выполнения, ведь в головной задействованы функции бкз ошибок! А у меня даже он не появляется, пишет ошибку в роде не найден указатель на файл или что-то такое. Ладно, попытаюсь дописать cin.get(). А зачем он кстати надо? И что такое
?
 
[#include <iomanip.h>
#include <fstream.h>
#include <conio.h>
const int N=499;
int m,i;
const unsigned n=9;

int kol,b,a,c,d;
void InpF(char *NameF, int *x)
{
m=0;
ifstream finput;
finput.open(NameF);
finput>>x[m];
while (!finput.eof())
{
m++;
finput>>x[m];
if(m>N){ cout<<"nelzia schitat ";
break;}
}
finput.close();
}

void OutF(char *NameF, int *x)
{
int l;
l=0;
ofstream finput;
finput.open(NameF,ios:ut);
finput<<x[l]<<" ";
while (l<(m)){l++; finput<<x[l]<<" ";}
}

void main()
{
clrscr();
int x,t,l,g,A[N],C[N],b;
InpF("C:\\Borlandc\\Bin\\moi.txt",A);
b=0;
g=0;
for (l=0;l<m;l++)
{ if(A[l]==1)

a++;

else if(A[l]!=1) {

a=0;}

if(a>b)b=a;
}

{if ((A[l]!=1))
{ cout<<"Number poslednei edenicu - "<<b+1 <<"\n";
}
else if ((A[l]==1) && (b!=0))
{
g=l ;
}
}
cout<<"Nomer 1 edenicu -"<<g+1;
}
]
Вот примерный код проги
по идее она должна находить первый и последний номер максимальной последовательности едениц.Последний вроде находит а первый нет.Люди очень прошу помогите!!!С меня пиво кто сделает)На языке си++.Японимаю что код наверн большой но люди добрые очень прошу если что напишите свой код...
 
помогите пожалуйста, нужно написать программу для решения уравнения методом половинного деления
вот функция

у = (2 в степени х) /(0,5-х)

с шагом 0,01
Буду очень благодарен!!!!!!

помогите пожалуйста, нужно написать программу для решения уравнения методом половинного деления
вот функция

у = (2 в степени х) /(0,5-х)

с шагом 0,01
Буду очень благодарен!!!!!!

а ещё интервал (от 0,6 до 3,6)
 
Господа программисты! Помогите с программой! Об оплате договоримся. Нужно написать программу на С++, консольную.
Если возьметесь, то вот моя аська 458283605 и почта juliab@mail.ru
Вот текст задачи:
Информационные агентства
Разработать приложение, позволяющее организовать регистрацию информационных агентств (печать, радио, телевидение). Информация об агентстве хранится в описателе агентства.
Описатель печатного издания содержит следующую информацию: профиль издания; номер лицензии; место нахождения редакции; периодичность (перечень дней недели от одного до семи); общий тираж издания.
Описатель радиостанции содержит следующую информацию: профиль радиостанции; номер лицензии; место нахождения редакции; диапазон и частота вещания (от одной до трёх пар).
Описатель телекомпании содержит следующую информацию: профиль телекомпании; номер лицензии; место нахождения редакции; частотный канал.
Каждое агентство имеет уникальное название. Информация обо всех агентствах сведена в таблицу, каждый элемент которой содержит название агентства и указатель на его описатель. Элементы таблицы упорядочены в алфавитном порядке.
Обеспечить выполнение следующих операций:
- Для таблицы
- включить новый элемент, не нарушая упорядоченности;
- найти элемент по заданному названию;
- удалить элемент, заданный названием;
- показать содержимое таблицы.
- Для любого агентства:
- вывести информацию об информационном агентстве;- получить (вернуть в качестве результата) тип информационного агентства;
- получить информацию о месте нахождения редакции;
- получить номер лицензии;
- получить информацию о профиле информационного агентства.
- Для печатного издания:
- получить тираж издания; изменить тираж издания;
- получить периодичность выхода издания; изменить периодичность издания.
- Для радиостанции:
- получить перечень диапазонов и частот; изменить перечень диапазонов и частот.
- Для приложения:
- зарегистрировать новое информационное агентство;
- внести изменения в информацию об информационном агентстве (изменить тираж, периодичность, диапазон частот и т.п.) в соответствии с типом агентства;
- вывести информацию обо всех информационных агентствах определённого типа;
- аннулировать лицензию информационного агентства;
Порядок выполнения работы
1. На основе описания задачи определить состав классов.
2. Разработать иерархию классов и схему их взаимодействия.
3. Для каждого класса определить его состояние и необходимые методы.
4. Разработать и отладить все классы. Приложение реализовать в виде простой диалоговой программы.
5. Разработать и отладить класс, реализующий работу приложения. Предусмотреть в классе возможность сохранения таблицы в файле и ее восстановления.
6. Разработать и отладить класс-итератор, с помощью которого реализовать дополнительные операции.
 
Все работает! Просто немного изменила где +, - (мне же надо, чтобы создавался новый вектор, а ни изменялся один из них). И вобщем все работает, и даже правильно!!! УРА!!!! :(

p.s. Так надо писать перегрузки для операторов, для варианта с числами (ну та мсложить с числом, отнять от числа и т.д.). По-моему нет, но может я не догоняю просто?
 
Тут у меня маленькая штука такая получилась. Вобщем в задании написано для n-мерного пространства, а я сделала для 3-х мерного. А можно считать пространство 2-хмерным 3-хмерное, но с z равным 0 (т.е.в координатох оно то болнаться будет, но равное 0). А то по другому я как-то не догоняю. А есть 4-мерное, 5-мерное и т.д.?
 
В массиве A(n) найдите число элементов между первым и вторым нулевыми элементами. Данные для ввода n=7, A(1.0.2.3.4.0.0)

Написал код, программа запускается но некорректно работает. При вводе элементов зацикливается и виснет. Помогите пожалуйста.

[codebox]#include <conio.h>
#include <iostream>
using namespace std;
void inpmas(float *m,int k);
void dispmas(float mas[],int k);
void poisk(float mas[],int k);
int main()
{
int n;
float mas[6];
cout<<"Vvedeti n:";
cin>>n;
cout<<"\n";

inpmas(mas,n);
cout<<"Massiv F:\n";
dispmas(mas,n);
poisk(mas,n);
dispmas(mas,n);
return 0;
}
//======Использованные процедуры========
//ввод элементов массива
void inpmas(float *m,int k)
{
for(int i=0;i<k;i++)
{
cout<<"mas["<<i+1<<"]=";
cin>>m;
}
}
//вывод элементов массива
void dispmas(float m[],int k)
{
for(int i=0;i<k;i++)
cout<<"mas["<<i+1<<"]="<<m<<"\n";
}
//преобразование массива
void poisk(float *m,int k)
{
int in,ik,e,kol;
for(int i=0;i<k;i++)
{
if(m=0)
{
e++;
in=i;
if(e==2) ik=i;
}
} kol=(ik-in)-1;

cout<<"Kolichestvo elementov= "<<kol;
}
[/codebox]
 
начинающий программист - начинай, если что не получится - мы продолжим



вот для того сюда и обращаюсь что б помогли, потому что идей никаких!!!! Были бы идеи, то бы выложила код, а так я на 0!!!
И не надо пожалуйста грубить...так грубо никто с вами не разговаривает... :(
 
молодо

во-первых, вы нагрубили и как тогда, так и сейчас! учитесь вежливо излагать свои мысли!!!!!!

во-вторых, я не прошу писать мне программы, я прошу подкинуть мне идеи в их написании, понятно? а если вам это так трудно, то надеюсь найдутся другие люди которые добрее и подкинут идеи! которые не скупятся!!!!!
 
Ну !!!!! эта моя болезнь от рождения!!! А весь семестр? вы о чем? Я и семестр не учила С! А просто прошу идею..потому что получается реализовать только большой код!

А вы действительно подметили что вы скупой грубиян..)
 
В массиве A(n) найдите число элементов между первым и вторым нулевыми элементами. Данные для ввода n=7, A(1.0.2.3.4.0.0)

Написал код, программа запускается но некорректно работает. При вводе элементов зацикливается и виснет. Помогите пожалуйста.


Дороггой мой, у вас ошибка я так думаю в функции void poisk(float *m,int k)
а именно в строке if(m=0) надо заменить на if(m==0) - с двумя рано если вы пытаетесь сравнить ...

но если честно я сильно не вникал, - это одна из возможных ошибок.
 
ппц, олушко... 0 с претензией :D
рекомендую
Код:
http://www.google.com/search?q=kakaja+nibut+idea
 
alexsid

Олушке можно не переживать :D у меня вообще -1

:(:(:(
 
Привет народ,помогите пожалуйста с этими задачами
Сколько кто сможет,4 номер делать не обязательно,заранее спасибо =)
 
Вот тут задачка такая. Вобщем надо создать класс для н-мерного вектора. Вот сделала, а оно как-то не работает там, где при перегрузке создается новый вектор и возвращается (допустем при + мне надо не изменяь один из векторов, а создать новый, равный суиие двух). Вобщем она не работает. Кому вдруг нечем будет на досуге заняться - посмотрите пожалуйста.
[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(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(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, v2(1),v3(1), v4(1), v5,v6,v7;
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;
return 0;


}[/codebox]
 
Народ, всем Здравствуйте, вот у меня такая проблемка. Я ещё только учусь программировать....чайник ещё в этом деле.... Мне задали доделать задачку на С++....я конечно же долго парился над ней, и с помощью друзей кое как что-то там сделал но не доконца.

Вот собственно сама задачка:
Массив целых, положительных, ограниченных сверху чисел. Определить наиболее часто встречающуюся подряд тройку чисел.

А вот её решение (как я решил...может и неправильно):

#include<iostream>
#include<conio>
using namespace std;

int max(int Arr[], int size);


int main()
{
int c=0;
const long N = 9; c++;
const int N_size = 10; c++;

int A[N_size] = {1, 2, 3, 4, 5, 2, 3, 4, 5, 3}; c+=10;
int B[999];
int tmp = 0, tmp2 = 0; c+=2;
int chislo;

for(int i = 0; i <= 999; i++)
{
c+=2;
B = 0;
c+=2;
};

for(int i = 111; i <= 999; i++)
{
c+=2;
for(int j = 0; j <= (N_size - 2); j++)
{
c+=3;
if(A[j] == (i/100) && A[j+1] == ((i%100)/10) && A[j+2] == (i%10))
{
c+=14; B++; c+=2;
}
}
c+=14;
tmp++; c++;
}

chislo = max(B, 999); c++;

cout << chislo;

getch();
return 0;
}

int max(int Arr[], int size)
{
int Max = Arr[0];
for(int i = 0; i < size; i++)
{
if(Arr > Max)
{
Max = i;
}
}
return Max;
}

Вопрос заключается в том, что нужно прописать вывод для программы и Словесное описание алгоритма. Но повторюсь я ещё чайник и задачку я не один делал, а сдавать её уже завтра нада.... народ, подмогниче кто чем-может заранее СПАСИБО!!!
 
Народ, сам сделал кое-как, сёгодня сдал!!!) Оказывается это было не так сложно как ясебе это представлял=)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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