Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2010, 16:34   #1
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию Векторы, никак не могу понять

Здравствуйте, господа.

Я бы, возможно, и не стал беспокоить вас по таким пустякам, но для меня это вовсе не является таковым.

У меня случилась довольно большая проблема, которая заключается не только в том, что за невозможность решить данную задачу мне придётся туго, а потому, что я сам никак не могу понять её решение, что, само мобой разумеется, меня невероятно сильно расстроило и продолжает расстраивать до сих пор, т.к. решение я так и не смог придумать.

Итак, у меня имеется след. задание:

http://rghost.ru/3762303

Необходимо сделать 11 задание, однако как решить хоть что-то из этого пока что известно только первое:

Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>
using namespace std;
struct VECTOR
{
    int n; 
    float *x;
    void nw()
    {
        x = new float[n];
    }
    // default  constructor:
    VECTOR()
    {
        n=0;
        x=0;
    }
    // constructor with 1 arg. :
    VECTOR(int fn)                                                      
    {
        n=fn; 
        nw();
    }
    // constructor with 2 arg. :


    VECTOR(int n, float *x);
    // copying  constructor:
    VECTOR(VECTOR &v);
    //destructor:
    ~VECTOR()
    {
        if(x)
            delete[]x;
    }

    //V=F {V.n=F.n;V.x[j]=F.x[j];return*this==V
    //(we can write V1=V2=V3 due to VECTOR&)}:
    VECTOR &operator = (VECTOR &F);
    //  V() {output V.x[0], V.x[1],... }:
    void operator()(FILE*f);
    // V[j] {return V.x[j]
    //(we can write V1[i]=V2[j]=V3[k] due to float&...)}:
    float &operator[] (int j)
    {
        return x[j];
    }
}; // end of VECTOR body


VECTOR::VECTOR(int fn,float *fx)
{
    n=fn; 
    nw(); 
    for(int j=0;j<n;++j)
        x[j]=fx[j];
}
VECTOR::VECTOR(VECTOR&F)
{
    n=F.n;
    nw();
    for(int j=0;j<n;++j)
        x[j]=F.x[j];
}
VECTOR &VECTOR /*v3*/::operator=(VECTOR &F /*v2*/)
{
    if(x)
        delete[]x; 
    n = F.n;
    nw();
    for(int j=0;j<n;++j)
        x[j]=F.x[j];
    return *this;
}
void VECTOR::operator()(FILE*f = stdout)
{
    for(int j=0;j<n;++j)
        fprintf(f,"% -7g",x[j]);
}
// end of VECTOR
// independent function:
VECTOR operator^   (VECTOR  &v1, float *v2)
{
    
    for(int j=0; j<v1.n ;j++)
        v1.x[j] = pow(v1.x[j],v2[j]); 
    return v1;
}

struct DV:VECTOR
{
    DV():VECTOR()
    {
    }
    DV(int fn):VECTOR(fn)
    {
    }
    DV(int n,float*x):VECTOR(n,x)
    {
    };
    DV(DV &v):VECTOR(v)
    {
    };
    DV &operator ! (); //добавлено
};// end of DV body
DV &DV::operator!() //добавлено
{
    for(int j=0;j<n;++j)
        x[j]=fabs(x[j]);
    return *this;
}

void main()
{
	int n;
	float *a;
	printf("n = ");
	scanf("%d", &n);
	a = new float[n];
	for (int i = 0; i < n; i++)
	{
		scanf("%g", &a[i]);
	}
	DV v(n, a); //добавлено
	!v; //добавлено
	for (int i = 0; i < n; i++)
	{
		cout << v.x[i] << " ";
	}
	getch();
}
Я знаю, что просить решить что-либо на данном форуме неприлично, но этого бы не произошло, если бы я хоть что-то понимал в данной задаче.

Если у вас есть возможность и желание мне хоть как-то помочь, буду очень признателен.

Заранее благодарю за возможные ответы.
YourLastSong вне форума Ответить с цитированием
Старый 26.12.2010, 17:01   #2
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Если есть хоть какие-то подсказки, как это можно сделать, также буду очень признателен.
YourLastSong вне форума Ответить с цитированием
Старый 26.12.2010, 17:25   #3
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

Код видимо не твой)

В задании 1 судя по всему требуется у вектора V переопределить оператор ! и сделать в нем действия прописанные в фигурных скобках (для каждого j от 0 до n - 1).

Если считать что это и есть смысл задания а то что ты написал - его решение, то 11 задание решается так:

Код:
// объявление вектора и инклуды вначале (из 1го примера)

struct DF:VECTOR
{
    DF():VECTOR()
    {
    }
    DF(int fn):VECTOR(fn)
    {
    }
    DF(int n,float*x):VECTOR(n,x)
    {
    };
    DF(DF &v):VECTOR(v)
    {
    };
};// end of DF body

struct DV:VECTOR
{
    DV():VECTOR()
    {
    }
    DV(int fn):VECTOR(fn)
    {
    }
    DV(int n,float*x):VECTOR(n,x)
    {
    };
    DV(DV &v):VECTOR(v)
    {
    };
	DV &operator *=(DF &f); //добавлено
};// end of DV body
DV &DV::operator*=(DF &f) //добавлено
{
    for(int j=0;j<n;++j)
        x[j] = x[j] * (f.x[j] - 1);
    return *this;
}

void main()
{
	int n;
	float *a, *b;
	printf("n = ");
	scanf("%d", &n);

	printf("Vvod elementov vectora V\n");
	a = new float[n];
	for (int i = 0; i < n; i++)
	{
		scanf("%g", &a[i]);
	}
	DV v(n, a); //добавлено

	printf("Vvod elementov vectora F\n");
	b = new float[n];
	for (int i = 0; i < n; i++)
	{
		scanf("%g", &b[i]);
	}
	DF f(n, b); //добавлено

	v *= f; //добавлено

	printf("V:\n");
	for (int i = 0; i < n; i++)
	{
		cout << v.x[i] << " ";
	}

	printf("\nF:\n");
	for (int i = 0; i < n; i++)
	{
		cout << f.x[i] << " ";
	}

	// Не забывай про это (!!!)
	delete [] a;
	delete [] b;

	getch();
}
смысл задания тут у вектора V переопределить опертор *= который принимает другой вектор F и опять же выполнить то что прописано в фигурных скобках

Последний раз редактировалось UltimaBeaR; 26.12.2010 в 17:28.
UltimaBeaR вне форума Ответить с цитированием
Старый 26.12.2010, 17:45   #4
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Большое спасибо.

Т.е. код в результате должен получиться вот такой:

Код:
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>

using namespace std;

struct VECTOR
{
    int n; 
    float *x;
    void nw()
    {
        x = new float[n];
    }

    VECTOR()
    {
        n=0;
        x=0;
    }

    VECTOR(int fn)                                                      
    {
        n=fn; 
        nw();
    }


    VECTOR(int n, float *x);
 
    VECTOR(VECTOR &v);

    ~VECTOR()
    {
        if(x)
            delete[]x;
    }

    VECTOR &operator = (VECTOR &F);
    void operator()(FILE*f);
    float &operator[] (int j)
    {
        return x[j];
    }
};


VECTOR::VECTOR(int fn,float *fx)
{
    n=fn; 
    nw(); 
    for(int j=0;j<n;++j)
        x[j]=fx[j];
}
VECTOR::VECTOR(VECTOR&F)
{
    n=F.n;
    nw();
    for(int j=0;j<n;++j)
        x[j]=F.x[j];
}
VECTOR &VECTOR::operator=(VECTOR &F)
{
    if(x)
        delete[]x; 
    n = F.n;
    nw();
    for(int j=0;j<n;++j)
        x[j]=F.x[j];
    return *this;
}
void VECTOR::operator()(FILE*f = stdout)
{
    for(int j=0;j<n;++j)
        fprintf(f,"% -7g",x[j]);
}

VECTOR operator^   (VECTOR  &v1, float *v2)
{
    
    for(int j=0; j<v1.n ;j++)
        v1.x[j] = pow(v1.x[j],v2[j]); 
    return v1;
}

struct DF:VECTOR
{
    DF():VECTOR()
    {
    }
    DF(int fn):VECTOR(fn)
    {
    }
    DF(int n,float*x):VECTOR(n,x)
    {
    };
    DF(DF &v):VECTOR(v)
    {
    };
};

struct DV:VECTOR
{
    DV():VECTOR()
    {
    }
    DV(int fn):VECTOR(fn)
    {
    }
    DV(int n,float*x):VECTOR(n,x)
    {
    };
    DV(DV &v):VECTOR(v)
    {
    };
	DV &operator *=(DF &f);
};
DV &DV::operator*=(DF &f)
{
    for(int j=0;j<n;++j)
        x[j] = x[j] * (f.x[j] - 1);
    return *this;
}

void main()
{
	int n;
	float *a, *b;
	printf("n = ");
	scanf("%d", &n);

	printf("Vvod elementov vectora V\n");
	a = new float[n];
	for (int i = 0; i < n; i++)
	{
		scanf("%g", &a[i]);
	}
	DV v(n, a);

	printf("Vvod elementov vectora F\n");
	b = new float[n];
	for (int i = 0; i < n; i++)
	{
		scanf("%g", &b[i]);
	}
	DF f(n, b);

	v *= f;

	printf("V:\n");
	for (int i = 0; i < n; i++)
	{
		cout << v.x[i] << " ";
	}

	printf("\nF:\n");
	for (int i = 0; i < n; i++)
	{
		cout << f.x[i] << " ";
	}

	delete [] a;
	delete [] b;

	getch();
}
Ввожу для вектора V 1 и 2.

Для вектора F ввожу также 1 и 2.

В результате получается, что V - 0 и 2, а F - 1 и 2.

Так ведь надо было или нет?
YourLastSong вне форума Ответить с цитированием
Старый 26.12.2010, 17:52   #5
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

да, каждый элемент V[j] умножается на соответсвующий (F[j] - 1)
UltimaBeaR вне форума Ответить с цитированием
Старый 26.12.2010, 17:57   #6
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Так V[j] умножается на (F[j] - 1) или как?

Или умножается на F[j - 1] всё же?
YourLastSong вне форума Ответить с цитированием
Старый 26.12.2010, 18:00   #7
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

так как я написал. Прочитай условие задачи и код
UltimaBeaR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается отсортировать структуру. В чем проблема понять никак не могу AlEnanechker Помощь студентам 1 25.12.2009 17:02
Никак не могу залогиниться в контакт TwiX Работа с сетью в Delphi 5 06.08.2009 10:54
Не могу всё никак не могу эту лабораторку сдать помогите плиз Dimon.ru Паскаль, Turbo Pascal, PascalABC.NET 2 16.06.2009 20:53
Никак не могу разобраться с WM_DEVICECHANGE Никки Win Api 3 26.01.2009 11:08