Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Часть 2. Я начинающий, подскажите как...(Все вопросы начинающих!!!)

51K
05 июля 2009 года
Олориин
1 / / 05.07.2009
День добрый вопрос такой: в ListBox создал 3 столбца
ListBox1->Columns=3;
каким образом записать строку в второй и третий столбцы?

1636 ответов / показаны 1401 - 1439

Страницы:
14
06 октября 2011 года
Phodopus
3.3K / / 19.06.2008
[QUOTE=MSDN]The prerequisite packages listed in the Prerequisites Dialog Box are set automatically the first time that you open the dialog box. If you subsequently change the project's target framework, you will have to select the prerequisites manually to match the new target framework. [/QUOTE]
не? .
244
07 октября 2011 года
UAS
2.0K / / 19.07.2006
Проблему, описанную выше, решил. Связана она была с с моей наивностью.
На XP я копировал только сам *.exe файл, т.к. на моем девелоперском компе сам по себе он работал прекрасно, ввиду чего я посчитал, что и на пользовательском XP будет работать так же.
Вместе с *.exe скопировал идущий с ним файл *.exe.config - стало сразу работать.

Кстати, почему приложение не работало без этого файла и требовало 3.5 SP1, когда был установлен .NET Framework 4 - я так и не понял. Prerequisite при паблишинге были корректно настроены.
7
07 октября 2011 года
@pixo $oft
3.4K / / 20.09.2006
.exe.config-то всегда надо копировать:) А не работало скорее всего потому,что версии .Net FW между собой несовместимы,т.е. приложение компилиируется под конкретную
14
08 октября 2011 года
Phodopus
3.3K / / 19.06.2008
без всяких config exe-шник таргетированный под 3.5 без проблем запустился на 1.1.
хотя, он конечно нулевый.
70K
13 октября 2011 года
Настен
37 / / 13.10.2011
Создан класс комплексных чисел Tcomplex.Как создать дружественную функцию, с параметрами cin,cout.И перегрузить операторы >>,<<???
277
13 октября 2011 года
arrjj
1.7K / / 26.01.2011
Цитата: Настен
Создан класс комплексных чисел Tcomplex.Как создать дружественную функцию, с параметрами cin,cout.И перегрузить операторы >>,<<???



http://stackoverflow.com/questions/7383103/use-cout-cin-when-overloading-io-operators-in-c Как пример

70K
13 октября 2011 года
Настен
37 / / 13.10.2011
Вот моя программа!что тут нужно изменить,я не могу понять...Помогите,пожалуйста!
# include<iostream>
# include<math.h>
using namespace std;
class Tcomplex
{ float a,b;
public:

Tcomplex(float an=0,float bn=0)
{
a=an;
b=bn;
return;
}
Tcomplex operator = (Tcomplex c)
{
a=c.a;
b=c.b;
return (*this);
}
void print ()
{

cout<<a<<"+"<<b<<"i"<<endl;

return;
} Tcomplex operator + (Tcomplex c)
{Tcomplex result;
result.a=a+c.a;
result.b=b+c.b;
return result;
}
Tcomplex operator - (Tcomplex c)
{
Tcomplex result;
result.a=a-c.a;
result.b=b-c.b;
return result;
}
Tcomplex operator * (Tcomplex c)
{
Tcomplex result;
result.a=a*c.a-b*c.b;
result.b=b*c.a+c.b*a;
return result;
}
Tcomplex operator / (Tcomplex c)
{
Tcomplex result;
result.a=(a*c.a+b*c.b)/(c.a*c.a+c.b*c.b);
result.b=(b*c.a-c.b*a)/(c.a*c.a+c.b*c.b);
return result;
}
void trig ()
{
float alpha;
alpha=atan(b/a);
cout<<this->getModule()<<"("<<"cos"<<alpha<<"+i sin"<<alpha<<")";
}

double getModule ()
{
return sqrt(a*a+b*b);
}

};


int main ()
{
float a,b;
setlocale(LC_ALL,"Russian");
cout<<"введите действительную часть числа ";
cin>>a;
cout<<"\n введите мнимую часть числа ";
cin>>b;
Tcomplex c (a,b);
cout<<"само число: "; c.print();
cout<<endl;
cout<<"введите слагаемое:"<<endl;
cout<<"введите действительную часть числа ";
cin>>a;
cout<<"\n введите мнимую часть числа ";
cin>>b;
Tcomplex c1 (a,b);
cout<<"слагаемое:"; c1.print();
cout<<endl;
cout<<"перегруженный оператор сложения ";
(c+c1+c1).print();
cout<<"перегруженный оператор вычитания ";
(c-c1-c1).print();
cout<<"перегруженный оператор умножения ";
(c*c1*c1).print();
cout<<"перегруженный оператор деления ";
(c/c1/c1).print();
cout<<"модуль первого числа: "<<c.getModule()<<endl;
cout<<"\n тригонометрическая: "; c.trig();
system("pause");
return 0;
}
277
13 октября 2011 года
arrjj
1.7K / / 26.01.2011
Код:
# include<iostream>
# include<math.h>
using namespace std;
class Tcomplex
{
public:

float a,b;

Tcomplex(float an=0,float bn=0)
{
    a=an;
    b=bn;
}
Tcomplex operator = (Tcomplex c)
{
    a=c.a;
    b=c.b;
    return (*this);
}

friend ostream& operator<<(ostream& os, const Tcomplex& tc)
{
    os<<tc.a<<(tc.b>0?"+":"")<<tc.b<<"i";
}

friend istream& operator>>(istream& is,Tcomplex& tc)
{
    cout<<"введите действительную часть числа ";
    is>>tc.a;
    cout<<"введите мнимую часть числа ";
    is>>tc.b;
}


void print ()
{
    cout<<a<<"+"<<b<<"i"<<endl;
}

Tcomplex operator + (Tcomplex c)
{
    Tcomplex result;
    result.a=a+c.a;
    result.b=b+c.b;
    return result;
}
Tcomplex operator - (Tcomplex c)
{
    Tcomplex result;
    result.a=a-c.a;
    result.b=b-c.b;
    return result;
}
Tcomplex operator * (Tcomplex c)
{
    Tcomplex result;
    result.a=a*c.a-b*c.b;
    result.b=b*c.a+c.b*a;
    return result;
}
Tcomplex operator / (Tcomplex c)
{
    Tcomplex result;
    result.a=(a*c.a+b*c.b)/(c.a*c.a+c.b*c.b);
    result.b=(b*c.a-c.b*a)/(c.a*c.a+c.b*c.b);
    return result;
}
void trig ()
{
    float alpha;
    alpha=atan(b/a);
    cout<<this->getModule()<<"("<<"cos"<<alpha<<"+i sin"<<alpha<<")";
}
double getModule ()
{
    return sqrt(a*a+b*b);
}

};


int main ()
{
Tcomplex c,c1;
cin>>c;
cout<<"само число: "<<c<<endl;
cout<<"введите слагаемое:"<<endl;
cin>>c1;
cout<<"слагаемое:"<<c1<<endl;
cout<<"перегруженный оператор сложения "<<c+c1+c1<<endl;
cout<<"перегруженный оператор вычитания "<<c-c1-c1<<endl;
cout<<"перегруженный оператор умножения "<<c*c1*c1<<endl;
cout<<"перегруженный оператор деления "<<c/c1/c1<<endl;
cout<<"модуль первого числа: "<<c.getModule()<<endl;
cout<<"тригонометрическая: ";
c.trig();
cout<<endl;
return 0;
}
70K
13 октября 2011 года
Настен
37 / / 13.10.2011
friend ostream& operator<<(ostream& os, const Tcomplex& tc)
{
os<<tc.a<<(tc.b>0?"+":"")<<tc.b<<"i";
}
можно к этому комментарий!!!
И у меня выходит ошибка на этом-<< должно возвращать значение!!!!
277
13 октября 2011 года
arrjj
1.7K / / 26.01.2011
Цитата: Настен
friend ostream& operator<<(ostream& os, const Tcomplex& tc)
{
os<<tc.a<<(tc.b>0?"+":"")<<tc.b<<"i";
}
можно к этому комментарий!!!
И у меня выходит ошибка на этом-<< должно возвращать значение!!!!



(tc.b>0?"+":"") - если б положительное отображает "+", если нет - ничего (минус автоматически выводится)
Компилятор у меня g++ схавал такую конструкцию, попробуй заменить на
os<<tc.a;
if(tc.b>0)
os<<"+";
os<<tc.b<<"i";

70K
13 октября 2011 года
Настен
37 / / 13.10.2011
ОК! Только operator >>,<< должны возвращать значения,иначе не работает...
70K
13 октября 2011 года
Настен
37 / / 13.10.2011
что надо будет возвратить???
277
13 октября 2011 года
arrjj
1.7K / / 26.01.2011
А! ппц я и профтыкал, а компилер схавал :)
Код:
friend ostream& operator<<(ostream& os, const Tcomplex& tc)
{
os<<tc.a<<(tc.b>0?"+":"")<<tc.b<<"i";
}
 
friend istream& operator>>(istream& is,Tcomplex& tc)
{
cout<<"введите действительную часть числа ";
is>>tc.a;
cout<<"введите мнимую часть числа ";
is>>tc.b;
}

замени на
Код:
friend ostream& operator<<(ostream& os, const Tcomplex& tc)
{
os<<tc.a<<(tc.b>0?"+":"")<<tc.b<<"i";
return os;
}
 
friend istream& operator>>(istream& is,Tcomplex& tc)
{
cout<<"введите действительную часть числа ";
is>>tc.a;
cout<<"введите мнимую часть числа ";
is>>tc.b;
return is;
}
70K
13 октября 2011 года
Настен
37 / / 13.10.2011
Ок!Спасибо!!!
Цитата:

Буду обращаться к тебе!

71K
14 октября 2011 года
Abracadavre
12 / / 23.09.2011
В коде странички asp.net писал Response.Write(x). Из программы на c# ужно получить значение этого x, а не html, как получается из моего кода. Посоветовали использовать ContentType = "text/plain;, но не помогает.

Код:
StringBuilder sb = new StringBuilder();
           byte[] buf = new byte[8192];
           HttpWebRequest request = (HttpWebRequest)WebRequest.Create("мой урл");
           request.ContentType = "text/plain;charset=""utf-8""";
           request.Method = "Get";
           HttpWebResponse response = (HttpWebResponse)request.GetResponse();

           Stream resStream = response.GetResponseStream();

           string tempString = null;
           int count = 0;
           do
           {
               count = resStream.Read(buf, 0, buf.Length);
               if (count != 0)
               {
                   tempString = Encoding.UTF8.GetString(buf, 0, count);
                   sb.Append(tempString);
               }
           }
           while (count > 0);
           string text = sb.ToString();


           label3.Text = text;
14
14 октября 2011 года
Phodopus
3.3K / / 19.06.2008
ну если страничка отдает хтмл, что еще ждать?
56K
20 октября 2011 года
bum-bayan
16 / / 04.07.2010
Доброго времени суток.

Пишу с использованием MFC.
В классе приложения нужно обратиться к данным класса окна. Для этого пытаюсь привести типы:
Код:
class CMainWnd : public CFrameWnd
{
    ...
}

class CFigureApp : public CWinApp
{
    ...
}
BOOL CFigureApp::InitInstance()
{
    m_pMainWnd = new CMainWnd();
    ASSERT(m_pMainWnd);            
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();    
   
    return TRUE;
};

void CFigureApp::setCircleParameters(CComPtr<IXMLDOMNode> spCircleNode)
{
    CMainWnd* pMainWnd = dynamic_cast<CMainWnd *>(m_pMainWnd);
    if (!pMainWnd)
    {
    diagfile << "dynamic_cast error" << std::endl;
    return;
    }
    ....
}


Приведение не работает: pMainWnd равно NULL
14
20 октября 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: bum-bayan

Приведение не работает: pMainWnd равно NULL


выведите заодно значение m_pMainWnd как указателя

49K
21 октября 2011 года
zargandr
15 / / 22.04.2011
Здравствуйте, вечер вопросов, надеюсь на вашу помощь, кучу времени убил уже( Цели простая: заполнить матрицу последовательными числами, вывести результат на консоль, затем вывестти результат в текстовый файл. Столкнулся с проблемами: матрица не хочет нормально инициализироваться, при выводе в файл выводятся не числа, а символы, после завершения программы не ждет нажатия enter? а сразу выключается. Заранее спасибо, мой код ниже) Изпользую 2010 visual studio.

#include "stdafx.h"
#include <iostream>
#include <locale>
#include <fstream>

using namespace std;
using std::cin;
using std::wcout;

using namespace System;

int main(array<System::String ^> ^args)
{
int k=0;
int n=0;
int i,j;
const int nstr=2, nstb=6;
int matrix [nstr][nstb];
for ( i=0; i<=nstr; i++)
for ( j=0; j<=nstb; j++)
{matrix[j]=k; k=k+1;}

for (int i=0; i<nstr; i++) {
cout<<'\n';
for (int j=0; j<nstb; j++)
cout<<*matrix[i,j]<<' ';

}

ofstream file ("C:/text.txt");
if (!file){Console::WriteLine(L"Поток не работает");}
file.write (reinterpret_cast <char *> (&matrix),sizeof matrix);



return 0;



}
56K
21 октября 2011 года
bum-bayan
16 / / 04.07.2010
Во-первых, если вы инициализируете матрицу так:
Цитата:

 
Код:
for ( i=0; i<=nstr; i++)
    for ( j=0; j<=nstb; j++)
    {
        matrix[j]=k;
        k=k+1;
    }


то произойдет выход за границы массива. Чтобы этого избежать, уберите знак равенства в циклах.

Во-вторых, когда вы пишите:

Цитата:

 
Код:
for (int i=0; i<nstr; i++)
{
    cout<<'\n';
    for (int j=0; j<nstb; j++)
        cout<<*matrix[i,j]<<' ';
}


почему бы не вывести элементы матрице в сишном стиле: cout << matrix[j] .

В-третьих, в файл пишите точно так же, как пишите в консоль:

 
Код:
for (int i=0; i<nstr; i++)
{
    for (int j=0; j<nstb; j++)
        file << matrix[j] << ' ';
    file << std::endl;
}

P.S. Зачем вы используете Managed C++?

13K
22 октября 2011 года
X-enot
39 / / 01.09.2010
Всем привет! Пишу программу такого рода впервые, а задача состоит вот в чем:
Нужно написать базу данных на MFC. База данных => С начало вводим значения с параметрами => получаем в отдельном окне расчеты этих значений в одной большой таблице со значениями. Каждое значение получается по формуле. База динамически изменяется, если изменилось одно значение то остальные тоже меняются(в соседних ячейках). Пожалуйста, если есть у кого какая информация по реализации данной задачи дайте знать. Спасибо.
70K
22 октября 2011 года
Настен
37 / / 13.10.2011
Привет всем!!!
Помогите исправить ошибки=(((
Программа примерно такая:
создать класс множество, в котором содержится класс, представляющий элементы множества!
#include <iostream>
#include <math.h>
using namespace std;
class set
{
class element
{public:
element*next;
const int a;
element (int_a):a(_a)
next(NULL){}
void draw()
{printf("%d",a);}
}*e;
int count;
public:
set():e(NULL),count(0){}
~set()
{element*temp;
while (e!=NULL)
{temp=e;
e=e->next;
delete temp;
}
}count=0;
void add(int b)
{if(!e) {e=new element(b); count++; return;}
if(b<e->a)
{element*temp=new element(b);
temp->next=e;
e=temp;
count++;return;
}
if(b==e->a) return;
while(e->next) element*e1=e;
{if (b<=e1->next->a){
if(b==e1->next->a)return;
element temp=new element(b);
temp->next=e1->next;
e1->next=temp;
count++;return;}
e1=e1->next;}
element temp=new element(b);
count++;}
И еще необходимо для этих множеств написать функции объединения, пересечения и дополнения) то есть функции тоже будут возвращать множества...Помогите!!!
70K
22 октября 2011 года
Настен
37 / / 13.10.2011
Привет всем!!!
Помогите исправить ошибки=(((
Программа примерно такая:
создать класс множество, в котором содержится класс, представляющий элементы множества!
#include <iostream>
#include <math.h>
using namespace std;
class set
{
class element
{public:
element*next;
const int a;
element (int_a):a(_a)
next(NULL){}
void draw()
{printf("%d",a);}
}*e;
int count;
public:
set():e(NULL),count(0){}
~set()
{element*temp;
while (e!=NULL)
{temp=e;
e=e->next;
delete temp;
}
}count=0;
void add(int b)
{if(!e) {e=new element(b); count++; return;}
if(b<e->a)
{element*temp=new element(b);
temp->next=e;
e=temp;
count++;return;
}
if(b==e->a) return;
while(e->next) element*e1=e;
{if (b<=e1->next->a){
if(b==e1->next->a)return;
element temp=new element(b);
temp->next=e1->next;
e1->next=temp;
count++;return;}
e1=e1->next;}
element temp=new element(b);
count++;}
И еще необходимо для этих множеств написать функции объединения, пересечения и дополнения) то есть функции тоже будут возвращать множества...Помогите!!!
70K
23 октября 2011 года
Настен
37 / / 13.10.2011
Не работает=((Помогите исправить ошибки!!!мы создаем класс множество (set) по принципу стека.
Описываем метод добавления нового элемента в множество, и перегрузить операторы && - пересечение множеств. || - объединение множеств и вроде / дополнение.
#include <conio.h>
#include <stdio.h>

class set
{
class element
{
public:
const int a;
element *next;
element(int _a):a(_a), next(NULL) { }
void draw()
{
printf("%d ",a);
}
} *first;
int count;
public:
set():first(NULL), count(0) { }
~set()
{
element *temp;
while (first != NULL)
{
temp = first;
first = first->next;
delete temp;
}
count = 0;
}
void add (int b)
{
element *first1 = first;
if (!first)
{
first = new element(b);
count++;
return;
}
if (b < first->a)
{
element *temp = new element(b);
temp->next = first;
first = temp;
count ++;
return;
}
if (first1->next == NULL)
{
if (b > first1->a)
{
element *temp = new element(b);
temp->next = NULL;
first1->next = temp;
count++;
return;
}
}
while (first1->next != NULL)
{
if (b == first1->a) return;
if (b < first1->next->a)
{
element *temp = new element(b);
temp->next = first1->next;
first1->next = temp;
count++;
return;
}
else//b >= first1->next->a
{
if (b == first1->next->a) return;
if (first1->next->next == NULL)
{
element *temp = new element(b);
temp->next = NULL;
first1->next->next = temp;
count++;
return;
}
first1 = first1->next;
}
}
}
void draw(void)
{
printf("\nMnogestvo: ");
element *first1 = first;
while (first1 != NULL)
{
first1->draw();
first1 = first1->next;
}
}
public:
bool chur(int b, set S);
set operator || (set S);
set operator && (set S);
set operator / (set S); //из 2 вычитает 1
};
bool set::chur(int b, set S)
{
for(element *temp = S.first; temp != NULL; temp = temp->next)
if (b == temp->a) return true;
return false;
};
set set::operator||(const set S)
{
set result = *this;
for(element *temp = S.first; temp != NULL; temp = temp->next)
if (!chur(temp->a, result))
result.add(temp->a);
return result;
};
set set::operator&&(const set S)
{
set result;
for(element *temp = S.first; temp != NULL; temp = temp->next)
if (chur(temp->a, result))
result.add(temp->a);
return result;
};
set set::operator/(const set S)
{
set result;
for(element *temp = S.first; temp != NULL; temp = temp->next)
if (!chur(temp->a, *this))
result.add(temp->a);
return result;
};

void main()
{
set A;
int choise=1;
while (choise != 0)
{
printf("\nDobavlenie: 1\nDraw: 2\nExit: 0\n");
scanf("%d", &choise);
if (choise == 1)
{
int a;
scanf("%d", &a);
A.add(a);
}
if (choise == 2)
A.draw();
}
scanf("%d", &choise);
if ( A.chur(choise, A) == true)
printf("YYYYYYYYYYYYYAAAAAAAAAAAAAAAZZZZZZZZZZZZZZZZZzzzz");
/*choise =1;
set B, C, D, E;
printf("\n\nZapolnite set2\n_______________________________________________________________");
while (choise != 0)
{
printf("\nDobavlenie: 1\nDraw: 2\nExit: 0\n");
scanf("%d", &choise);
if (choise == 1)
{
int a;
scanf("%d", &a);
B.add(a);
}
if (choise == 2)
B.draw();
}
C = A || B;
D = A && B;
E = A / B;
C.draw();
D.draw();
E.draw();*/
A.~set();
getch();
}
70K
24 октября 2011 года
Настен
37 / / 13.10.2011
Привет всем!!!
Помогите исправить ошибки.Не компилирует...
И сделать объединение данных множеств!
Код:
#include<iostream>
#include <conio.h>
#include <stdio.h>

class set
{
    class element
{
    public:
        const int a;
        element *next;
        element(int _a):a(_a), next(NULL) { }
void draw()
{
    printf("%d ",a);
}
} *e;
int count;
public:
set():e(NULL), count(0) { }
~set()
{
    element *temp;
    while (e != NULL)
{
    temp = e;
    e = e->next;
    delete temp;
}
count = 0;
}
void set::add(int b)
{  
    element*i=e;
    if(!i)
    {
        i=new element(b);
        count++;
        return;
    }
    if (b>=i->a)
    {
        if (i->a==b) return;
    else
    {
        while (!(i->next==NULL)&&(b>=i->next->a))
        i=i->next;
        element*temp=new element(b);
        temp->next=i->next;
        i->next=temp;
        count++;
        return;
    }
}
else
{
    element*temp=new element(b);
    temp->next=e;
    e=temp;
    return;
    }
set*set::operator && (const set B)
{
    set C;
    element*ia=this->e;
    element*ib=B.e;
    while (ia!=NULL)
    {
        while (ib!=NULL)
        {
            if(ia->a==ib->a)
            C.add(ia->a);
            ia=ia->next;
        else
        {
            if (ia->a>ib->a)
            ib=ib->next;
        else
            ia=ia->next;
        }
    }
}
9.7K
25 октября 2011 года
Vitamant
228 / / 07.02.2011
C#4.0
Господа, слабо представляю себе что находится внутри Linq-запросов, так что обращаюсь с вопросом, какой из методов-расширений окажется лучше в плане быстродействия:
 
Код:
public static void ForEach<T>(this IEnumerable<T> self, Action<T> action)
{
    foreach(T entry in self)
        action(entry);
}

или
 
Код:
public static void ForEach<T>(this IEnumerable<T> self, Action<T> action)
{
    self.Any(entry =>
                   {
                       action(entry);
                       return false;
                   });
}

Тоесть даст ли LINQ'шное Any прирост в скорости обработки данных или наоборот окажется только медленнее из-за обработки результата (false).

Также интересует следующий момент: насколько медлительны методы ToList, ToArray и Cast?
Допускается ли такое:
 
Код:
enumerable.ToList().ForEach(entry => entry.Foo());

Этот вариант будет работать медленнее предыдущих?

Конкретные цифры не интересуют, просто хотелось бы найти наилучший метод и заэкстеншить. :)

Настен
Леди, вы сошли с ума? Немедленно уберите весь этот кошмар! Весь свой код обрамляйте тегами code /code [в квадратных скобках], и пользуйтесь кнопкой "Редактировать". Когда приведете весь этот кошмар в читабельный вид - поясните, что именно не работает. Не компилируется? Работает неверно?
70K
25 октября 2011 года
Настен
37 / / 13.10.2011
Привет всем!!!
Помогите исправить ошибки,не компилирует...
и еще перегрузить оператор объединения...
Код:
#include<iostream>
#include <conio.h>
#include <stdio.h>

class set
{
    class element
{
    public:
        const int a;
        element *next;
        element(int _a):a(_a), next(NULL) { }
void draw()
{
    printf("%d ",a);
}
} *e;
int count;
public:
set():e(NULL), count(0) { }
~set()
{
    element *temp;
    while (e != NULL)
{
    temp = e;
    e = e->next;
    delete temp;
}
count = 0;
}
void set::add(int b)
{  
    element*i=e;
    if(!i)
    {
        i=new element(b);
        count++;
        return;
    }
    if (b>=i->a)
    {
        if (i->a==b) return;
    else
    {
        while (!(i->next==NULL)&&(b>=i->next->a))
        i=i->next;
        element*temp=new element(b);
        temp->next=i->next;
        i->next=temp;
        count++;
        return;
    }
}
else
{
    element*temp=new element(b);
    temp->next=e;
    e=temp;
    return;
    }
set*set::operator && (const set B)
{
    set C;
    element*ia=this->e;
    element*ib=B.e;
    while (ia!=NULL)
    {
        while (ib!=NULL)
        {
            if(ia->a==ib->a)
            C.add(ia->a);
            ia=ia->next;
        else
        {
            if (ia->a>ib->a)
            ib=ib->next;
        else
            ia=ia->next;
        }
    }
}
9.7K
25 октября 2011 года
Vitamant
228 / / 07.02.2011
Ммм... а вы этот код сами писали? Я бы тоже отказался компилироваться...
1) Чем компилируете? Компиляторы имеют обыкновение ссылаться на строку и\или писать сообщение об ошибке компиляции. Есть такие? Продемонстрируйте.
2) Опишите, пожалуйста, исходную задачу теми словами, которыми вам ее задали.
70K
25 октября 2011 года
Настен
37 / / 13.10.2011
1)ошибка: конец файла обнаружен ранее, чем левая фигурная скобка "{".
2)Создать класс множество (set) по принципу стека.
Описать метод добавления нового элемента в множество, и перегрузить операторы && - пересечение множеств. || - объединение множеств.
9.7K
25 октября 2011 года
Vitamant
228 / / 07.02.2011
Очень сложная ошибка. Что ж, будем учиться расставлять отступы. В процессе получим следующее:
Код:
#include<iostream>
#include <conio.h>
#include <stdio.h>

class set
{
    class element
    {
        public:
            const int a;
            element *next;
            element(int _a):a(_a), next(NULL) { }
            void draw()
            {
                printf("%d ",a);
            }
    } *e;
   
    int count;
    public:
        set():e(NULL), count(0) { }
       
        ~set()
        {
            element *temp;
            while (e != NULL)
            {
                temp = e;
                e = e->next;
                delete temp;
            }
            count = 0;
        }
       
        void set::add(int b)
        {  
            element*i=e;
            if(!i)
            {
                i=new element(b);
                count++;
                return;
            }
            if (b>=i->a)
            {
                if (i->a==b) return;
                else
                {
                    while (!(i->next==NULL)&&(b>=i->next->a))
                    i=i->next;
                    element*temp=new element(b);
                    temp->next=i->next;
                    i->next=temp;
                    count++;
                    return;
                }
            }
            else
            {
                element*temp=new element(b);
                temp->next=e;
                e=temp;
                return;
            }
        // Где скобка, закрывающая void set:add?
        set*set::operator && (const set B)
        {
            set C;
            element*ia=this->e;
            element*ib=B.e;
            while (ia!=NULL)
            {
                while (ib!=NULL)
                {
                    if(ia->a==ib->a)
                        C.add(ia->a);
                    ia=ia->next; // если это относится к if'у, то здесь тоже должны быть скобочки, если нет - далее будет ошибка в else
                    else
                    {
                        if (ia->a>ib->a)
                            ib=ib->next;
                        else
                            ia=ia->next;
                    }
                }
            }
        // Где скобка, закрывающая set*set::operator && ?
// Где скобка, закрывающая class set?

Итого, у вас нехватает трех скобок (помечены комментариями в коде) и ошибка в одном if'е. Если весь остальной код правильный (в чем я сомневаюсь), то должно заработать.

И, раз уж вы заглянули к нам на огонек, позволю рассказать два правила, которые до вас, видимо, преподаватели не донесли:
1) Межу любыми конструкциями ставятся пробелы. То есть
вместо
 
Код:
if(ia->a==ib->a)

должно быть
 
Код:
if (ia->a == ib->a)

Вы будете удивлены, но читаемость кода от этого существенно повышается.
2) Названия классов, полей (переменных), методов (функций), констант и прочего до чего дотянутся ваши руки, должны быть читабельными, дающими представление о том, что в них содержится / что они делают.
Даже если сейчас вы еще помните что означает конструкция:
 
Код:
if(ia->a==ib->a)
    C.add(ia->a);

То через месяц уже не вспомните. А сторонние разработчики (коими в том числе являемся и мы, форумчане) сломают себе мозг, пытаясь разобраться в ваших одно/дву- буквенных наименованиях.

С наилучшими пожеланиями. Надеюсь, что помог.

---
[SIZE="6"]P.S. Господа программисты, мой вопрос все еще без ответа несколькими постами выше. =\[/SIZE]
70K
25 октября 2011 года
Настен
37 / / 13.10.2011
большое спасибо за советы!!!
только все равно не компилируется,та же ошибка либо"непредвиденное обнаружение конца файла"...
70K
25 октября 2011 года
Настен
37 / / 13.10.2011
И еще как можно перегрузить оператор объединения??
9.7K
25 октября 2011 года
Vitamant
228 / / 07.02.2011
Показывайте новый код. Найдем еще недостающие скобки. :)
Цитата: Настен
И еще как можно перегрузить оператор объединения??


1) Пользуйтесь же кнопкой редактировать! Ей-ей, набегут модераторы - забанят на форуме до конца дней ваших! >.<
2) Синтаксически - точно также, как и доабвление. В плане внутренностей - С++ плохо знаю, кодом не помогу, но суть в общем-то проста: определяете размер первого объекта, размер второго объекта, выделяете требуемое количество памяти, копируете элементы первого объекта, копируете элементы второго объекта.

70K
25 октября 2011 года
Настен
37 / / 13.10.2011
Код:
#include<iostream>
#include <conio.h>
#include <stdio.h>
class set
{
    class element
    {
        public:
            const int a;
            element *next;
            element(int _a):a(_a), next(NULL) { }
            void draw()
            {
                printf("%d ",a);
            }
    } *e;
   
    int count;
    public:
        set():e(NULL), count(0) { }
       
        ~set()
        {
            element *temp;
            while (e != NULL)
            {
                temp = e;
                e = e->next;
                delete temp;
            }
            count = 0;
        }
       
        void set::add(int b)
        {  
            element*i=e;
            if(!i)
            {
                i=new element(b);
                count++;
                return;
            }
            if (b>=i->a)
            {
                if (i->a==b) return;
                else
                {
                    while (!(i->next==NULL)&&(b>=i->next->a))
                    i=i->next;
                    element*temp=new element(b);
                    temp->next=i->next;
                    i->next=temp;
                    count++;
                    return;
                }
            }
            else
            {
                element*temp=new element(b);
                temp->next=e;
                e=temp;
                return;
            }
        }
        set*set::operator && (const set B)
        {
            set C;
            element*ia=this->e;
            element*ib=B.e;
            while (ia!=NULL)
            {
                while (ib!=NULL)
                {
                    if(ia->a==ib->a)
                        {C.add(ia->a);
                    ia=ia->next; }
                    else
                    {
                        if (ia->a>ib->a)
                            ib=ib->next;
                        else
                            ia=ia->next;
                    }
                }
            }
        }
}
9.7K
25 октября 2011 года
Vitamant
228 / / 07.02.2011
Код:
class Element
{
    public:
        const int number;
        Element *next;
       
        Element(int value) :number(value)
        {
        }
       
        void Draw()
        {
            printf("%d ", number);
        }
}; // не забываем ;

class Set
{
    Element *element;
    int count;

    public:
        Set() :count(0) { }
       
        ~Set()
        {
            Element *temp;
            while (element != NULL)
            {
                temp = element;
                element = element->next;
                delete temp;
            }
            count = 0;
        }
       
        void Set::Add(int value)
        {  
            Element *current = element;
            if(!current)
            {
                current = new Element(value);
                count++;
                return;
            }
            if (current->number == value)
                return;
            else if (value > current->number)
            {
                while (!(current->next == NULL) && (value >= current->next->number))
                    current = current->next;
                Element *temp = new Element(value);
                temp->next = current->next;
                current->next = temp;
                count++;
            }
            else
            {
                Element *temp = new Element(value);
                temp->next = element;
                element = temp;
            }
        }

        Set *Set::operator && (const Set anotherSet)
        {
            Set result;
            Element *currentElement = element;
            Element *anotherElement = anotherSet.element;
            while (currentElement != NULL && anotherElement != NULL)
            {
                if(currentElement->number == anotherElement->number)
                {
                    result.Add(currentElement->number);  // Вот тут не уверен, сдается мне, что добавлять нужно вообще-то в this, а не в ваш новый объект... Но вам виднее.
                    currentElement = currentElement->next;
                }
                else
                {
                    if (currentElement->number > anotherElement->number)
                        anotherElement = anotherElement->next;
                    else
                        currentElement = currentElement->next;
                }
            }
            return &result; // Если добавляем все-таки не в this, тогда нужно вернуть хоть какой-нибудь результат
        }
}; // не забываем ;

Держи, и больше не греши.
P.S. После закрывающих скобок классов также нужно ставить ;
70K
26 октября 2011 года
Настен
37 / / 13.10.2011
Спасибо!
А что значит точка входа не определена?
9.7K
26 октября 2011 года
Vitamant
228 / / 07.02.2011
Цитата: Настен
Спасибо!
А что значит точка входа не определена?



Это значит, что приложение не знает - откуда ему начаться. Обычно, точкой входа является метод (функция) main.

297
29 октября 2011 года
koodeer
1.2K / / 02.05.2009
Настен, Vitamant, по поводу форматирования кода. Будет вообще замечательно, если в IDE настроить вставку пробелов вместо табов, максимум четыре, а то и два. Тогда код и на форуме будет смотреться симпатичней, не уезжая сильно вправо. Но это так, к слову.
297
30 октября 2011 года
koodeer
1.2K / / 02.05.2009
Цитата: Vitamant
C#4.0
Господа, слабо представляю себе что находится внутри Linq-запросов, так что обращаюсь с вопросом, какой из методов-расширений окажется лучше в плане быстродействия:
 
Код:
public static void ForEach<T>(this IEnumerable<T> self, Action<T> action)
{
    foreach(T entry in self)
        action(entry);
}

или
 
Код:
public static void ForEach<T>(this IEnumerable<T> self, Action<T> action)
{
    self.Any(entry =>
                   {
                       action(entry);
                       return false;
                   });
}

Тоесть даст ли LINQ'шное Any прирост в скорости обработки данных или наоборот окажется только медленнее из-за обработки результата (false).


Наверняка второй способ хуже. Потому что лямбда преобразуется в дополнительный класс с методом, который и будет вызываться. А уже внутри этого метода будет вызываться Action. То есть на каждой итерации два вызова, вместо одного.


Цитата: Vitamant
Также интересует следующий момент: насколько медлительны методы ToList, ToArray и Cast?
Допускается ли такое:
 
Код:
enumerable.ToList().ForEach(entry => entry.Foo());

Этот вариант будет работать медленнее предыдущих?


Скорей всего да, работать будет медленнее. Время будет затрачено именно на преобразование последовательности в список или массив.
Тут ещё нужно понимать, что Enumerable, пока к нему не обратились, как бы и не существует. И память не отнимает зря. А List и Array всегда занимают место. Поэтому, многое может зависеть от источника Enumerable. Если последовательность очень большая, в несколько гигов, то её преобразование в массив может сожрать всю оперативку, заработает своп... ой-ой-ой!..

P.S. в написанном не уверен, не проверял.
P.P.S. для скорости можно попробовать enumerable.AsParallel().ForAll.

77K
30 октября 2011 года
f0rbidden
1 / / 30.10.2011
Есть перегруженные операторы Time& operator+=(int)(возвращает объект);
Time& operator=(const Time&)
Time t1;
Time t3.
int k;

t3=t1; //работает
t3=(t1+=k) // работает только с оператором присваивания по умолчанию. с моим, перегруженным, - нет.

Time& Time::operator=(const Time &tm) {
if( this != &tm )
{
h = tm.h;
m = tm.m;
s=tm.s;
}
return *this;
}

что не так?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог