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

Ваш аккаунт

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

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

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

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

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

1636 ответов / показаны 241 - 279

Страницы:
48K
02 октября 2009 года
andrey32
19 / / 22.08.2009
Цитата: koodeer
Насколько мне известно, можно перегрузить только operator[]. Примеров этого действительно полно.
С многомерными массивами не так всё просто. Могу лишь советовать посмотреть здесь (пункты 13.10, 13.11, 13.12) и здесь.


Посмотрел...:)
Я до этого именно так и сделал, перегрузил круглые скобки. Просто хотелось, чтоб выглядело по человечески. Ну шо ж, нет так нет

51K
02 октября 2009 года
SnoooZeR
8 / / 03.09.2009
В общем задача поставлена следующим образом:
Есть форма на ASP.Net, в текстбоксы пишутся определенные данные, после чего их необходимо преобразовать в "документальный" вид. Т.е. есть некий шаблон документа, в который в определенные места надо подставить значения из текстбоксов. Формат файла, куда идут данные, был выбран rtf в виду открытости и доступности формата. Вся загвоздка в том, что русский текст в rtf надо записывать в кодировке Win-1251. Т.е. например чтобы в нем отображалось имя "антон", в самом файле должно стоять "\'e0\'ed\'f2\'ee\'ed". Воопрос собственно в том, как на платформе .Нет перекодировать исходный текст в строку символов соотв. кодировки? Бился над этой проблемой пару-тройку часов, но так и не пошло у меня.
Привожу кусок кода:

Encoding EncWin1251 = Encoding.GetEncoding("Windows-1251");
System.Environment.CurrentDirectory = @"C:\Users\1\Documents\Visual Studio 2005\WebSites\Test3\";
StreamReader StrmReader = File.OpenText("regCard.rtf");
StringBuilder RegCard = new StringBuilder(StrmReader.ReadToEnd());
string[] FormKeys = Request.Form.AllKeys;
foreach (string str in FormKeys)
{
RegCard.Replace(string.Format("<{0}>",str),Request.Form.Get(str));
}
FileStream fs = new FileStream(@"d:\NewReg.rtf", FileMode.Create, FileAccess.Write);
StreamWriter StrmWriter = new StreamWriter(fs, EncWin1251);
StrmWriter.Write(RegCard);
StrmWriter.Flush();
StrmWriter.Close();

//это последний вариант, который тоже не прокатил.
Желательно при всем этом конечный результат не сохранять, а так и хранить в памяти. Самый близкий вариант пока с таким циклом:

System.Windows.Forms.RichTextBox rtb = new System.Windows.Forms.RichTextBox();
foreach (string str in FormKeys)
{
rtb.Text=Request.Form.Get(str);
RegCard.Replace(string.Format("<{0}>",str),rtb.Rtf);
}

Правда RichTextBox много лишнего запихивает, не беда конечно, но пока на этом варианте не хочу останавливаться.
В общем, если кто-то подскажет как подобное провернуть, используя класс Encoding, то буду очень признателен.
51K
02 октября 2009 года
SnoooZeR
8 / / 03.09.2009
В общем с проблемой сам разобрался. Пришлось писать функцию для построения строки, соответствующей кодировке Win-1251 в RTF. Приведу её на тот случай, если вдруг кто-то тоже столкнется с похожей проблемой:

private string TranToWin1251RTF(string str)
{
StringBuilder StrBuil = new StringBuilder("\\f0\\fs20");
char[] chr = str.ToCharArray();
foreach (char ch in chr)
{
int code = (int)ch;
if (code > 1039 && code < 1104)
StrBuil.Append(string.Format("\\'{0:x}", (code - 848)));
else
StrBuil.Append(ch);
}
StrBuil.Append("\\par");
return StrBuil.ToString();
}
297
06 октября 2009 года
koodeer
1.2K / / 02.05.2009
Цитата: andrey32
Посмотрел...:)
Я до этого именно так и сделал, перегрузил круглые скобки. Просто хотелось, чтоб выглядело по человечески. Ну шо ж, нет так нет


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

Код:
// Win32Console.cpp : Defines the entry point for the console application.
#include "stdafx.h"

#include <memory.h>
#include <assert.h>

template<class T>
class Row {
public:
    Row(int cols=0):row(NULL) {SetRowSize(cols);}
    ~Row() {SetRowSize(0); }
    Row(const Row &r):row(NULL) {
        SetRowSize(r.numCols);
        for (int i=0; i<numCols; i++)
            row = r.row;
    }

    void SetRowSize(int n) {
        if(row) delete[] row;
        if (n>0) {
            row = new T[n];
            memset(row,0,sizeof(T)*n/sizeof(char));
        }
        else row = NULL;
        numCols = n;
    }
   
    int size() { return numCols;}

    T& operator[](int column) {
        assert(column < numCols);
        return row[column];
    }

private:
    int numCols;    
    T* row;
};

template<class T>
class Matrix {
public:
    Matrix(int rows=0, int cols=0): matrix(NULL) {
        SetSize(rows,cols);
    }
    Matrix(const Matrix& m): matrix(NULL) {
        SetSize(m.numRows,m.numCols);
        for (int r=0; r<numRows; r++)
            matrix[r] = Row<T>(m.matrix[r]);//assign to primitive array, NOT overloaded []--to get a copy
    }
    void SetSize(int rows, int cols) {
        if (rows) delete[]matrix;
        if (cols > 0 && rows >0) {
            matrix=new Row<T>[rows];
            for (int i=0; i<rows; i++)
                matrix.SetRowSize(cols);
        }
        else
            rows=NULL;
        numCols=cols; numRows=rows;
    }
    int GetCols() { return numCols;}
    int GetRows() { return numRows;}

    Row<T>& operator[](int index) {
        assert(index < numRows);
        return matrix[index];
    }

private:
    int numCols, numRows;
    Row<T>* matrix;

};

int _tmain(int argc, _TCHAR* argv[])
{
    Matrix<int> a(2,2);
    a[0][0]=2;
    a[0][1]=4;
    a[1][0]=8;
    a[1][1]=16;
    for (int i=0; i<2; i++)
        for (int j=0; j<2; j++)
            printf("%d ", a[j]);
    return 0;
}

Набирал, компилил, проверял в Visual Studio 2005. Все настройки по умолчанию. Работает.
Если нужна дополнительная функциональность, следует перегрузить другие операторы. В той статье многое описано.
42K
07 октября 2009 года
goodking
19 / / 09.06.2009
Привет! Подскажите пожалуйста, мне надо запрограммировать кнопку и светодиод, то-есть одно нажатие-диод горит, второе-выключается. Использую инструкцию if четыре раза, для четырех состояний кнопки и диода. Проблема в том, что диод загорается и выключается только один раз и дальше перестает реагировать на нажатие :(
11
07 октября 2009 года
oxotnik333
2.9K / / 03.08.2007
Цитата: goodking
Привет! Подскажите пожалуйста, мне надо запрограммировать кнопку и светодиод, то-есть одно нажатие-диод горит, второе-выключается. Использую инструкцию if четыре раза, для четырех состояний кнопки и диода. Проблема в том, что диод загорается и выключается только один раз и дальше перестает реагировать на нажатие :(


в общем случае:

 
Код:
void OnButtonClicked (void)
{
    Led.light = !Led.light;
}
42K
07 октября 2009 года
goodking
19 / / 09.06.2009
Цитата: oxotnik333
в общем случае:
 
Код:
void OnButtonClicked (void)
{
    Led.light = !Led.light;
}








А для такой конструкции ? (P3-кнопка; P1-диод )[QUOTE]


while (1) {

if ((P3==0xff) && (P1==0xff)){}
if ((P3==0x7f) && (P1==0xff))
{
SFRPAGE = CONFIG_PAGE; //включение диода
PORT_init ();
SFRPAGE = TMR3_PAGE;
Timer3_init (SYSCLK / 12/10);
};

if ((P3==0xff) && (P1==0xbf)){};
if ((P3==0x7f) && (P1==0xbf))
{
EA = 0; //выключение
TF3 = 0;
P1MDOUT = 00;
LED = 00;
}
}
}

87
07 октября 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: goodking
А для такой конструкции ?



Пока не буду вникать в порты и таймеры. Надо попробовать код типа:

Код:
while (1)
{
    if (P3==0x7f)
    {
        if(P1==0xff)
        {
            //включение диода
        }
        else if(P1==0xbf)
        {
            //выключение диода
        }
    };
}

Ну и while (1) мне не нравится. Лучше сделать на прерываниях.
42K
07 октября 2009 года
goodking
19 / / 09.06.2009
Цитата: Kogrom
Пока не буду вникать в порты и таймеры. Надо попробовать код типа:

Код:
while (1)
{
    if (P3==0x7f)
    {
        if(P1==0xff)
        {
            //включение диода
        }
        else if(P1==0xbf)
        {
            //выключение диода
        }
    };
}

Ну и while (1) мне не нравится. Лучше сделать на прерываниях.










Спасибо, попробовал, но все-равно почему-то срабатывает только по одному разу :confused: вот полностью код программы, может найдете ошибку:

Код:
sfr16 RCAP3=202;
sfr16 TMR3=204;

#define SYSCLK 3062500

sbit LED=P1^6;


void PORT_init (void);
void Timer3_ISR (void);
void Timer3_init (int counts);

void main (void) {

   WDTCN = 0xde;
   WDTCN = 0xad;
 
   EA = 1;
 
 while (1) {if (P3==0x7f)
    {
        if(P1==0xff)
        {
            SFRPAGE = CONFIG_PAGE;  
            PORT_init ();
            SFRPAGE = TMR3_PAGE;                  
            Timer3_init (SYSCLK / 12/10);

        }
        else if(P1==0xbf)
        {
           EA = 0;
           TF3 = 0;
           P1MDOUT = 00;
           LED = 00;

        }};}
 
                                                                                                                                                                               
 }



void PORT_init (void)
{ XBR2 = 64;
  P1MDOUT = 64;
}
void Timer3_init (int counts)

{ TMR3CN = 0;
  RCAP3 = -counts;
  EIE2 =  1;
TR3 = 1;
}


void Timer3_ISR (void) interrupt 14
{
TF3 = 0;                              
LED = ~LED;                            
}
87
07 октября 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: goodking
Спасибо, попробовал, но все-равно почему-то срабатывает только по одному разу :confused: вот полностью код программы, может найдете ошибку



Как же я ошибку найду - я не знаю этот диалект Си. Попробуй так:

Код:
sbit LED=P1^6;

void main (void)
{
    bool latch = true;
    while (1)
    {
        if ((P3 == 0x7f) && latch)
        {
            LED = ~LED;
            latch = false;
        }
        if (P3 == 0xff) latch = true;            
    }
}

Если булевского типа нет, то используй 0 и 1.
53K
07 октября 2009 года
fokaaa
1 / / 07.10.2009
Добрый день. Разбираюсь с c++ пару недель, щас необходимо написать программу и о я на ней застрял. В гугле и на форуме подходящих ответов не нашел.
Формулировка:
Преобразовать строку таким образом, чтобы цифры каждого слова в ней были отсортированы по убыванию.

Что я уже написал:

Код:
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

using namespace std;
void main ()

{
char stroka[100];
char* a[100];

cout << "enter text" << endl; cin >> stroka;
for(int fff=0;fff<3;fff++)

{a[fff] = strtok(stroka,",");

while( a[fff] != NULL )
   {fff+=1;
    a[fff] = strtok( NULL, "," );}
}
}

То есть я запрашиваю текст и потом разбиваю его на массив.
Подскажите, что мне делать дальше, если есть возможность - сделайте наброски, как это должно выглядеть. Желательно более менее простым языком, ибо я новичок в программировании.

Буду благодарен за любую помошь.
53K
07 октября 2009 года
Olik Fleur
5 / / 07.10.2009
Пишу консольное приложение на С (VS 2005). Надо создать папку. Причем название этой папки генерируется в самой программе.

Подскажите, пожалуйста, какую функцию надо использовать и какой файл надо подключать.
288
07 октября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: Olik Fleur
Пишу консольное приложение на С (VS 2005). Надо создать папку. Причем название этой папки генерируется в самой программе.

Подскажите, пожалуйста, какую функцию надо использовать и какой файл надо подключать.



_mkdir, mkdir. Подробности в MSDN.

42K
07 октября 2009 года
goodking
19 / / 09.06.2009
Цитата: Kogrom
Как же я ошибку найду - я не знаю этот диалект Си. Попробуй так:

Код:
sbit LED=P1^6;

void main (void)
{
    bool latch = true;
    while (1)
    {
        if ((P3 == 0x7f) && latch)
        {
            LED = ~LED;
            latch = false;
        }
        if (P3 == 0xff) latch = true;            
    }
}

Если булевского типа нет, то используй 0 и 1.





К сожалению не работает :confused: вернее работает, но как и прежде только один раз

53K
07 октября 2009 года
Olik Fleur
5 / / 07.10.2009
Цитата: nikitozz
_mkdir, mkdir. Подробности в MSDN.



Спасибо, все нашла!
А я пыталась сделать это через CreateDirectory. Но у меня папка либо вообще не создавалась, либо создавалась, но не там, где надо и с каким-то кривым именем.

87
07 октября 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: goodking
К сожалению не работает :confused: вернее работает, но как и прежде только один раз



Ну ладно. Тогда упрощай себе задачу - двигайся от простого к сложному. Проверь такой код:

Код:
sbit LED=P1^6;

void main (void)
{
    int i = 3000;
    int j = 0;
    while (1)
    {
        LED = ~LED;
        while (i)
        {
            i--;
            j = 1000;
            while (j) j--;
        }
    }
}

Диод должен мигать (если SYSCLK == 3062500, то раз в секунду). Если он перестанет - значит какое-то левое прерывание сработало или что-то типа того.

Ну и порт должен быть где-то настроен на выход, если этого нет по умолчанию...
42K
07 октября 2009 года
goodking
19 / / 09.06.2009
Цитата: Kogrom
Ну ладно. Тогда упрощай себе задачу - двигайся от простого к сложному. Проверь такой код:
Код:
sbit LED=P1^6;

void main (void)
{
    int i = 3000;
    int j = 0;
    while (1)
    {
        LED = ~LED;
        while (i)
        {
            i--;
            j = 1000;
            while (j) j--;
        }
    }
}

Диод должен мигать (если SYSCLK == 3062500, то раз в секунду). Если он перестанет - значит какое-то левое прерывание сработало или что-то типа того.

Ну и порт должен быть где-то настроен на выход, если этого нет по умолчанию...




Мигает, нормально все! :)

87
07 октября 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: goodking
Мигает, нормально все! :)



Ок. Двигаемся дальше.

 
Код:
sbit LED=P1^6;

void main (void)
{
     while (1)
    {
        if (P3 == 0x7f) LED = 0;
        else LED = 1 ;          
    }
}

тут диод должен гореть (или тухнуть - зависит от схемы) при удержании кнопки. Принимать другое состоянии при отпускании.
42K
07 октября 2009 года
goodking
19 / / 09.06.2009
Цитата: Kogrom
Ок. Двигаемся дальше.

 
Код:
sbit LED=P1^6;

void main (void)
{
     while (1)
    {
        if (P3 == 0x7f) LED = 0;
        else LED = 1 ;          
    }
}

тут диод должен гореть (или тухнуть - зависит от схемы) при удержании кнопки. Принимать другое состоянии при отпускании.



ВООБЩЕ НЕ ГОРИТ!

вот как я написал:

Код:
#include "c8051F120.h"

void Port_IO_Init(void);

sbit LED=P1^6;

void main (void)
{  Port_IO_Init;
   EA=1;
     while (1)
    {
        if (P3 == 0x7f) LED = 0;
        else LED = 1 ;          
    }
}

void Port_IO_Init()
{

    SFRPAGE   = CONFIG_PAGE;
    P1MDOUT |= 0x40;//устанавливаю порт 1.6 в push-pull

    XBR2      = 0x40;//разрешаю crossbar
}
87
08 октября 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: goodking
ВООБЩЕ НЕ ГОРИТ!


Вот! Что-то изменилось и это хорошо. Если предположить, что вместо Port_IO_Init() использовалось Port_IO_Init, только в коде, выложенном в Интернет, то сразу появляется подозрения, что ошибка из-за настроек. Например, переместились на другую страницу (банк) памяти и не вернулись. При этом пытаемся читать какие-то данные из P3, который в другом банке памяти.

42K
08 октября 2009 года
goodking
19 / / 09.06.2009
Цитата: Kogrom
Вот! Что-то изменилось и это хорошо. Если предположить, что вместо Port_IO_Init() использовалось Port_IO_Init, только в коде, выложенном в Интернет, то сразу появляется подозрения, что ошибка из-за настроек. Например, переместились на другую страницу (банк) памяти и не вернулись. При этом пытаемся читать какие-то данные из P3, который в другом банке памяти.



Ай, точно, вчера что-то невнимательно смотрел..все работает: нажимаю-гаснет, отпускаю-горит!:)

53K
08 октября 2009 года
Olik Fleur
5 / / 07.10.2009
Уважаемые специалисты, подскажите, пожалуйста, как решать вот такую проблему:
Надо делать рассчеты на компьютере, на котором не установлен ни Си, ни Visual Studio, ничего. Только винда стоит и все. Комп мощный, но на него обязательно нужно устанавливать лицензионное ПО, а его пока нет, и как быстро его установят, к сожалению, зависит не от меня.
Сейчас я на своем ноутбуке делаю exe-файл (компилирую с Release) и запускаю на мощном компе. Но, если использовать в проекте dll-файлы, то exe-файл просто не запускается на компе, где Си не установлен.
Можно как-то решить эту проблему или надо только ждать, пока наконец поставят ПО?
Заранее спасибо!
14
08 октября 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: Olik Fleur
Но, если использовать в проекте dll-файлы, то exe-файл просто не запускается на компе, где Си не установлен.
Можно как-то решить эту проблему или надо только ждать, пока наконец поставят ПО?


Какие dll файлы используются? Системные если - поставить на новый комп соответствующий рантайм (vcredist_x86), если свои - просто скопировать их к программе. Или линковать статически.

51K
10 октября 2009 года
s.v.korobkov
9 / / 10.10.2009
Здравствуйте. В процессе написания приложения возник такой вопрос.
Каким образом я могу обращаться к элементу массива обьекта и правильно ли описал класс для этого действия?

Описание класса:
Код:
class info{
// В этом классе происходит описание информационных полей===================
    char FIO[20];
    char Nazv[20];
    char Izd[20];
    unsigned int  god;
//--------------------------------------------------------------------------
 // Выполнение перегрузки ввода-вывода--------------------------------------
public:
 friend istream & operator>>(istream & is,info & a)
 {
     cout<<"*----------------------------------------------------------------*\n";
     cout<<"\nPlease enter a name of the author of the book: ";
     cin>>a.FIO;
     a.FIO[strlen(a.FIO)]='\0';
     cout<<"\nPlease enter the book name: ";
     cin>>a.Nazv;
     a.Nazv[strlen(a.Nazv)]='\0';
     fflush(stdin);
     cout<<"\nPlease enter the publishing house name: ";
     cin>>a.Izd;
     a.Izd[strlen(a.Izd)]='\0';
     fflush(stdin);
     cout<<"\nPlease enter year of the edition of the book: ";
     cin>>a.god;
  return is;
  };
 friend ostream & operator<<(ostream & os,info & a)
  {
   printf("є%12sє%11sє%11sє%8dє\n",a.FIO,a.Nazv,a.Izd,a.god);
   return os;
   };
//--------------------------------------------------------------------------
 void readf(FILE *f) //чтение с файла....(1 метод)
 {
  fscanf(f,"%s",&FIO);
  fscanf(f,"%s",&Nazv);
  fscanf(f,"%s",&Izd);
  fscanf(f,"%d",&god);
 };
 void writef(FILE *f) // запись в файл...(2 метод)
 {
  fprintf(f," ");
  fprintf(f,"%s",FIO);
  fprintf(f," ");
  fprintf(f,"%s",Nazv);
  fprintf(f," ");
  fprintf(f,"%s",Izd);
  fprintf(f," ");
  fprintf(f,"%d",god);
 };
//--------------------------------------------------------------------------
void obrab()  //запись в информационные поля.
{
   puts("Choose a field for change:");
   printf("1) Book name.      ==%s\n",Nazv);
   printf("2) FIO.      ==%s\n",FIO);
   printf("3) Publishing house.  ==%s\n",Izd);
   printf("4) Year.       ==%d\n[ ]",god);
   gotoxy(2,8);
   char q=getche();
   switch (q) {
     case '1':
      printf("\nPlease enter a name of the author of the book: ");
      scanf("%s",&FIO);
      fflush(stdin);
      break;
     case '2':
      printf("\nPlease enter the book name: ");
      scanf("%s",&Nazv);
      fflush(stdin);
      break;
     case '3':
      printf("\nPlease enter the publishing house name: ");
      scanf("%s",&Izd);
      fflush(stdin);
      break;
     case '4':
      printf("\nPlease enter year of the edition of the book ");
      scanf("%d",&god);
      fflush(stdin);
      break;
    };
 };
 //--------------------------------------------------------------------------
int sravnFIO(char f[20]) //4 metod
{  if(strcmp(FIO,f)==0)
       return 1;
    else return 0;
 }
};


Для этого класса мне необходимо выполнить сортировку по обьекту god.
в функции main создан массив обьектов info litra

я пытаюсь обратится к обьекту таким образом litra.god=<какое то действие>. Компилятор выдает ошибку. В чем может быть причина? И как мне исправить эту ошибку? Спасибо.
12K
10 октября 2009 года
Ghox
297 / / 26.07.2009
Цитата: s.v.korobkov
Для этого класса мне необходимо выполнить сортировку по обьекту god.
в функции main создан массив обьектов info litra

я пытаюсь обратится к обьекту таким образом litra.god=<какое то действие>. Компилятор выдает ошибку. В чем может быть причина? И как мне исправить эту ошибку? Спасибо.


Я думаю, причина в том, что член god класса info является приватным, а непосредственный доступ к приватным данным разрешен только внутри функций класса, а также внутри функций, объявленных как дружественные (friend) данному классу.
Чтобы исправить, можно или сделать этот член класса публичным (объявить в классе в разделе public), или, дабы не нарушать принципы инкапсуляции, реализовать в классе функции для получения значения данного члена класса, и изменения его, и в функции main использовать эти функции. Что-то вроде:

Код:
class info{
// В этом классе происходит описание информационных полей===================
    char FIO[20];
    char Nazv[20];
    char Izd[20];
    unsigned int  god;
public:
// ...
        unsigned int get_god() { return god; }
        void set_god(unsigned int g) { god = g; }
// ...
};

int main()
{
    // ...
    // допустим нужно получить значение god из litra и увеличить на 1:
    unsigned int g;
    g = litra.get_god();
    ++g;
    litra.set_god(g);
    // ...
}
51K
10 октября 2009 года
s.v.korobkov
9 / / 10.10.2009
Цитата: Ghox
Я думаю, причина в том, что член god класса info является приватным, а непосредственный доступ к приватным данным разрешен только внутри функций класса, а также внутри функций, объявленных как дружественные (friend) данному классу.
Чтобы исправить, можно или сделать этот член класса публичным (объявить в классе в разделе public), или, дабы не нарушать принципы инкапсуляции, реализовать в классе функции для получения значения данного члена класса, и изменения его, и в функции main использовать эти функции. Что-то вроде:
Код:
class info{
// В этом классе происходит описание информационных полей===================
    char FIO[20];
    char Nazv[20];
    char Izd[20];
    unsigned int  god;
public:
// ...
        unsigned int get_god() { return god; }
        void set_god(unsigned int g) { god = g; }
// ...
};

int main()
{
    // ...
    // допустим нужно получить значение god из litra и увеличить на 1:
    unsigned int g;
    g = litra.get_god();
    ++g;
    litra.set_god(g);
    // ...
}



Ого! Спасибо!! Но возник вопрос такого плана.. Каким образом лучше в моем случае реализовать функцию такого плана: Мне надо отсортировать массив обьектов по обьекту god и при этом должно иметь место перестановка полей данного элемента массива обьектов(т.е.FIO,Nazv,Izd) в соответствии с перестановкой поля god. Как это можно реализовать?

12K
11 октября 2009 года
Ghox
297 / / 26.07.2009
Цитата: s.v.korobkov
Ого! Спасибо!! Но возник вопрос такого плана.. Каким образом лучше в моем случае реализовать функцию такого плана: Мне надо отсортировать массив обьектов по обьекту god и при этом должно иметь место перестановка полей данного элемента массива обьектов(т.е.FIO,Nazv,Izd) в соответствии с перестановкой поля god. Как это можно реализовать?


Как вариант - реализовать в классе функцию перестановки полей одного объекта с другим:

Код:
class info {
// В этом классе происходит описание информационных полей===================
    char FIO[20];
    char Nazv[20];
    char Izd[20];
    unsigned int god;
public:
    // ...
    // перестановка полей текущего объекта с объектом,
    // задаваемым в качестве аргумента функции:
    void replace(info & r) // передаем аргумент по ссылке
    {
        if(*this == r) // если объект совпадает с объектом - аргументом
            return;    // то можно ничего не делать
        unsigned int i;
        // перестановка FIO:
        for(i = 0; i < 20; ++i)
        {
            char c = FIO;
            FIO = r.FIO;
            r.FIO = c;
        }
        // аналогично сделать для Nazv и Izd

        // перестановка God:
        i = god;
        god = r.god;
        r.god = i;
    }
    // ...
};

int main()
{
    // ...
    // допустим есть элементы litra и litra[j]
    // и нужно переставить местами их поля, если litra.god > litra[j].god:
    if(litra.get_god() > litra[j].get_god())
        litra.replace(litra[j]);
    // ...
}

Другой вариант - переставлять в массиве не поля объектов, а сами объекты. Для этого реализовать в классе операцию присваивания, и с помощью нее переставлять объекты:
Код:
class info {
    // ...
public:
    // ...
    info operator=(const info& r)
    {
        if(*this == r)    // если объект совпадает с объектом - аргументом
            return *this; // то ничего делать не нужно
        unsigned int i;
        // присваивание FIO, Nazv, Izd:
        for(i = 0; i < 20; ++i)
        {
            FIO = r.FIO;
            Nazv = r.Nazv;
            Izd = r.Izd;
        }

        // присваивание god:
        god = r.god;

        return *this;
    }
    // ...
};

int main()
{
    // ...
    if(litra.get_god() > litra[j].get_god())
    {
        info tmp;
        tmp = info;
        info = info[j];
        info[j] = tmp;
    }
    // ...
}

P.S. Приведенный код в компиляторе не проверял, не исключены небольшие огрехи.

Update. Приведенные примеры можно упростить, если для присваивания C-строк FIO, Nazv, Izd использовать функцию strcpy из библиотеки string из C, вместо обхода элементов строк в циклах.
В первом примере
 
Код:
char buf[20]; // строка-буфер для проведения перестановки

        // перестановка FIO:
        strcpy(buf, FIO);
        strcpy(FIO, r.FIO);
        strcpy(r.FIO, buf);
        // аналогично для Nazv, Izd

Во втором примере
 
Код:
// присваивание FIO, Nazv, Izd:
        strcpy(FIO, r.FIO);
        strcpy(Nazv, r.Nazv);
        strcpy(Izd, r.Izd);
42K
12 октября 2009 года
goodking
19 / / 09.06.2009
Цитата: Kogrom
Вот! Что-то изменилось и это хорошо. Если предположить, что вместо Port_IO_Init() использовалось Port_IO_Init, только в коде, выложенном в Интернет, то сразу появляется подозрения, что ошибка из-за настроек. Например, переместились на другую страницу (банк) памяти и не вернулись. При этом пытаемся читать какие-то данные из P3, который в другом банке памяти.




Так как все-таки можно сделать, чтобы диод горел не только при нажатии, но и при отпущенной кнопке (ну и выключался таким же образом)? :)

87
12 октября 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: goodking
Так как все-таки можно сделать, чтобы диод горел не только при нажатии, но и при отпущенной кнопке (ну и выключался таким же образом)?



Сделать флаг-защелку (какую-нибудь переменную). Нажал - флаг установился и до следующего нажатия мы ничего не меняем. Флаг сбрасывать при отпускании кнопки.

Ну и почитать описание работы с контроллером внимательнее. И пойти на форум, где программирование контроллеров обсуждается. Здесь больше ПО для компов обсуждают.

42K
12 октября 2009 года
goodking
19 / / 09.06.2009
Цитата: Kogrom
Сделать флаг-защелку (какую-нибудь переменную). Нажал - флаг установился и до следующего нажатия мы ничего не меняем. Флаг сбрасывать при отпускании кнопки.

Ну и почитать описание работы с контроллером внимательнее. И пойти на форум, где программирование контроллеров обсуждается. Здесь больше ПО для компов обсуждают.




Но вопросы то у меня не по работе контроллеров а по C, какая разница:)

53K
12 октября 2009 года
transfix
4 / / 12.10.2009
Есть класс String, класс PString наследует String. Сей код работает не так, как ожидается. Проблема в том,что в конструкторе класса PString в строке
else String(s);
почему-то вызывается конструктор без параметров
String()
{ str[0] = '\0'; }
Подскажите, пожалуйста, что не так:)

Код:
#include <iostream>
#include <string.h>
using namespace std;

////////////////////////////////////////////////////////////////////////////////////////////////////
class String
{
 protected:
     enum{SZ = 80};
     char str[SZ];
 public:
     String()
      { str[0] = '\0'; }
     String(char s[])
      { strcpy(str, s); }
     void display()
     {
         cout << str << "\n";
     }
     operator char*()
      { return str; }
 };
////////////////////////////////////////////////////////////////////////////////////////////////////
 class PString : public String
 {
  public:
     PString( char s[] )
     {
         if(strlen(s) > (SZ - 1))
         {
             for(int j = 0; j < SZ; j++)
                 str[j] = s[j];
         }
         else String(s);
     }
     
 };
 ////////////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    PString s1 = "12345678901234567890";
    s1.display();
   
    return 0;

}
54K
12 октября 2009 года
mozgabyte
1 / / 09.10.2009
Доброго времени суток! Уважаемые, нужен совет бывалого программиста :)

В общем, я хочу попытаться освоить C#, но есть некоторые нюансы и вопросы. Итак..[INDENT] 1) С чего лучше всего начать? (Легко усваиваемая литература (для новичка), каким образом организовывать практикум (построение алгоритмов-> консольные приложения->..)) В общем все для полного нуба
2) Сложно ли освоить С# без знания C/C++, и имея знания и практику по программированию и алгоритмизации на 3 с минусом Может рано я берусь за это..
3) Какую среду разработки использовать для начала (сейчас осваиваю MSVC# 2008 EE)? Возможно для начала нужно что-то попроще?
4) Какое Ваше мнение об C# и .NET платформе в общем? Перспективность, сложность изучения и т.д.?
5) Кроссплатформенность, универсальность и т.п.
6) Достоинства и недостатки данного языка и платформы в целом?
7) Можно ли создавать на C# приложения работающие без .Net Framework'а?
[/INDENT]
Спасибо за внимания и ответы :) Буду рад любым комментариям

P.S. Извиняюсь, если вопросы задаю непонятно/некорректно..
9
12 октября 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: mozgabyte
Доброго времени суток! Уважаемые, нужен совет бывалого программиста :)

В общем, я хочу попытаться освоить C#, но есть некоторые нюансы и вопросы. Итак..[INDENT] 1) С чего лучше всего начать? (Легко усваиваемая литература (для новичка), каким образом организовывать практикум (построение алгоритмов-> консольные приложения->..)) В общем все для полного нуба
2) Сложно ли освоить С# без знания C/C++, и имея знания и практику по программированию и алгоритмизации на 3 с минусом Может рано я берусь за это..
3) Какую среду разработки использовать для начала (сейчас осваиваю MSVC# 2008 EE)? Возможно для начала нужно что-то попроще?
4) Какое Ваше мнение об C# и .NET платформе в общем? Перспективность, сложность изучения и т.д.?
5) Кроссплатформенность, универсальность и т.п.
6) Достоинства и недостатки данного языка и платформы в целом?
7) Можно ли создавать на C# приложения работающие без .Net Framework'а?
[/INDENT]
Спасибо за внимания и ответы :) Буду рад любым комментариям

P.S. Извиняюсь, если вопросы задаю непонятно/некорректно..


Надеюсь, гнев коллег не заставит покраснеть убеленого сединами старпера. Отвечу по совести, пардон, по-пунктам:

1. Полный нуб != невменяемый идиот. Остальное - по-списку.
2. Не сложно. Читать внимательно литературу по C# и не оглядываться на C++. Совет, в общем-то, универсальный.
3. Удобно? С возможностями разобрался? Пользуй.
4. Использовать удобно. Причина: все придумано за вас, нефиг...
5. Адресный вопрос... Но! Важно понимать, что .Net задумка Microsoft, по сему, вопрос переносимости - открыт. Ссылок - предостаточно.
6. Вам зачем, собственно?
7. Ответ искать в ссылках с пункта №5.

Надеюсь, что сей развернутый ответ, подстегнет к дальнейшему самостоятельному обучению в виде самостоятельного поиска информации в сети Интернет.

288
13 октября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: transfix

Подскажите, пожалуйста, что не так:)



Просто потому что String() будет вызываться в любом случае перед выполнением PString(char s[]), если не указано обратное что-то другое в списке инициализаторов PString(char s[]). А вот этим

 
Код:
else String(s);

вы просто создаете временный объект, который тут же разрушается, а не вызываете конструктор базового класса.

Вообщем бегом читать про наследование в C++.
53K
13 октября 2009 года
transfix
4 / / 12.10.2009
Цитата:
вы просто создаете временный объект, который тут же разрушается, а не вызываете конструктор базового класса.


можно поподробнее...:)

34K
13 октября 2009 года
muturgan
96 / / 01.10.2009
Доброго времени суток. У меня есть такой xml-файл:
 
Код:
<Tests>
    <Capability>false</Capability>
    <PIN>00826673</PIN>
</Tests>



Подскажите пожалуйста, как мне, используя библиотеку tinyxml, можно получить (желательно в формате char*) содержимое тэгов Capability и PIN ?
288
13 октября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: transfix
можно поподробнее...:)



строка String(s); просто создает временный объект класса String и тут же его уничтожает.
Если хотите вызвать конструктор базового класса, делайте так:

 
Код:
public:
     PString( char s[] ): String(s)
     {


Хотя это конечно и не впишется в вашу логику, просто потому, что она изначально неверна. Конструктор базового класса всегда вызвается до конструктора производного.
288
13 октября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: muturgan
Доброго времени суток. У меня есть такой xml-файл:
 
Код:
<Tests>
    <Capability>false</Capability>
    <PIN>00826673</PIN>
</Tests>



Подскажите пожалуйста, как мне, используя библиотеку tinyxml, можно получить (желательно в формате char*) содержимое тэгов Capability и PIN ?



Открываем гугл, набираем tinyxml, переходим по первой же ссылке и потом еще по одной с названием "Documentation". :)

http://www.grinninglizard.com/tinyxmldocs/index.html

54K
13 октября 2009 года
Linger
2 / / 12.10.2009
Здравствуйте. Мне нужно реализовать различные сортировки на связном списке. для этого, как советует преподаватель, мне необходимо написать универсальную функцию вставки n-го элемента после k-го. тут и возникла проблема: не получается перенаправлять ссылки. Поможите чем можите))
34K
13 октября 2009 года
muturgan
96 / / 01.10.2009
Цитата: Linger
Здравствуйте. Мне нужно реализовать различные сортировки на связном списке. для этого, как советует преподаватель, мне необходимо написать универсальную функцию вставки n-го элемента после k-го. тут и возникла проблема: не получается перенаправлять ссылки. Поможите чем можите))



Приложите код, как именно Вы пытаетесь перенаправить ссылки, чтобы было проще понять где у Вас ошибка.

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