Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 30 из 87<  1 ... 27  28  29  30  31  32  33 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 11.07.2004
Откуда: Воронеж
Приамбула:
С языком С/С++ не знаком ваще, только много слышал :(
Суть проблемы:
Слышал что языков С несколько модификаций, в связи с этим возник вопрос
на какой написан данный фрагмент кода?
Код:
#pragma    chip PIC16F73

void millisleep(char x)
/*
  Delays a multiple of 1 millisecond using instruction cycle counting
  Clock: 11059200 Hz
  1 ms = 11059200/1000/4 IS = 2764.8 IS
*/
{
   // for optimizing compiler
   do {
        char j = 35;             // 2 IS
      do {
         char i = 25;           // 2 IS
         do ; while (--i > 0);  // 25 * 3 - 1 = 74 IS
      } while (--j > 0);       // 2 + 35 * (74+2+3) - 1 = 2766 IS
   } while (--x > 0);        // 2766 + 3 = 2769 IS

/*
// for non-optimizing compiler
    do    {
        char j = 89;       // 4 IS
        do    {
          char i = 5;    // 4 IS
          do ; while (--i > 0); // 5 * 5 - 1 = 24 IS
           }
        while (--j > 0);   // 4 + 89 * (24+4+3) - 1 = 2762 IS
       }
    while (--x > 0);       // 2762 + 3 = 2765 IS
*/
}

_________________
Удачи и мудрости.



Партнер
 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Koval Язык C один и тот же везде, твой фрагмент скомпилируется в любом компиляторе. Другое дело, что подобные аппаратно-зависимые задержки обычно рассчитаны на конкретный компилятор, в данном случае, судя по прагме, на этот.


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
В данном случае это маразм - делать такие извороты ради компилятора. Гораздо легче писать такие фрагменты на асме, тем более что у пиков он достаточно понятный(приходилось как-то писать для 16-ой серии пару лет назад).


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Судя по PIC16F73 это какой-то С для embeded платформ.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
mein Скорее всего это код из примеров к компайлеру. :)


 

Member
Статус: Не в сети
Регистрация: 12.12.2003
Откуда: Уфа
Помогите разобраться с проблемой.. я уже спрашивал по этому поводу пару месяцев назад, появились новые вопросы. У меня есть базовый класс Object, от которого наследованы разные классы. Все объекты разных классов хранятся в векторе указателей на эти объекты:
vector<Object*> objects.
Когда мне надо отобразить все объекты полиморфизм работает удобно - у каждого класса есть своя функция Draw, а у базового класса Object она объявлена как виртуальная, поэтому проходишься по всему вектору с объектами и вызываешь функцию Draw, которая реализована для каждого порожденного класса. Но если мне надо будет получить доступ к специфическим свойствам какого-то конкретного дочернего класса, указатель типа Object не даст мне такой возможности? Как быть в этом случае?


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Возможно в данном случае, это далеко не лучший выход, но исходя из того, что ты тут написал, могу посоветовать следующее.
Код:
class Object
{
public:
    virtual void Draw() = 0;
    virtual ULONG GetType() = 0;
};

class ConcreteObject : public Object
{
public:
    ConcreteObject(ULONG type) : type_(type)
    {
    }
    virtual void Draw()
    {
       //Drawing
    }

    virtual ULONG GetType()
    {
         return type_;
    }
private:
    ULONG type_;
};


GetType это к примеру для идентификации типа объекта, затем когда тебе нужен доступ к специфическому методу:

Код:
enum
{
    oTypeConcreteObject1,
    oTypeConcreteObject2
};

.
.
.

for(std::vector<Object *>::iterator i = objects.begin(); i != objects.end(); i++)
{
    (*i)->Draw();
    if ((*i)->GetType() == oTypeConreteObject2)
    {
         ConcreteObject2 *obj2 = dynamic_cast<ConcreteObject2 *>(*i);    //downcasting
         //Далее я думаю понятно
    }
}

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Доступ к специфическим свойствам лучше всё же делать в самом классе. Хотя, конечно, из такого краткого описания выводы делать сложно.


 

Member
Статус: Не в сети
Регистрация: 11.07.2004
Откуда: Воронеж
Билли Бонс
Ну это фрагмент программы для обмена с флешпамятью по интерфейсу I2C.
впринципе код понятен, а вот с программной средой где это сделано:
Билли Бонс писал(а):
судя по прагме, на этот.

Не открывается ссылка :(
mein писал(а):
Гораздо легче писать такие фрагменты на асме,

у меня задание на C написать....

_________________
Удачи и мудрости.


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Koval писал(а):
Не открывается ссылка
Хмм... У меня и дома, и на работе открывается нормально.


 

Member
Статус: Не в сети
Регистрация: 11.07.2004
Откуда: Воронеж
Билли Бонс писал(а):
Хмм... У меня и дома, и на работе открывается нормально.

Сходил к соседу, у него открылось все :)
Ты угодал-это что мне нужно-спасибо :)

_________________
Удачи и мудрости.


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
LiS95 писал(а):
Но нам оказывается нельза юзать библиотеки функции для работы со строками (словами)Прошу можно написать ту же самую прогу, используя только библиотеку STDIO.H

Чтобы не было конфликтов добавил в название функций букву "m":
Код:
int mstrlen(const char* str)
{
    int ret;
    for( ret=0; str[ret] != 0; ret++ );
    return ret;
}
char *mstrcat(char *strDestination, const char *strSource)
{
     int i, dlen, slen;
     dlen = mstrlen(strDestination);
     slen = mstrlen(strSource);
     for( i=0; i < slen; i++ ) strDestination[dlen+i] = strSource[i];
     strDestination[dlen+i] = 0;
     return strDestination;
}
char *mstrstr(const char *str, const char *strSearch)
{
     unsigned int i, len, j;
     len = mstrlen(strSearch);
     if( ( !len ) || ( len > mstrlen(str) ) ) return 0;
     for( i=0; i < mstrlen(str) - len + 1; i++ ){
         if(strSearch[0] == str[i]){
             for( j=0; j < len; j++ )
                 if(strSearch[j] != str[i+j])
                     break;
             if(j==len)
                 return (char*)(str+i);
         }
     }
     return 0;
}

вот реализация всех(нам нужных) функци из string.h . В том примере останется только добавить буквы "m" в соответствующих местах.

зы: mstrstr - может и не самое быстрое решение - делал по быстрому :) .


 

Member
Статус: Не в сети
Регистрация: 12.12.2003
Откуда: Уфа
Daemon
Спасибо! Буду еще читать про dynamic_cast.


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
kexman Лучше что-нибудь по проектированию почитай. :)


 

Member
Статус: Не в сети
Регистрация: 12.12.2003
Откуда: Уфа
Daemon
Кстати, хочу еще раз сказать огромное спасибо за то, что тогда вовремя рассказал мне про QT, я теперь огромный фанат этой библиотеки, хотя и знаю ее еще процента на 2-3 максимум от ее возможностей, все равно, это лучшее, что я видел, прогшраммировать одно удовольствие стало после MFC)
Добавлено спустя 9 минут, 45 секунд
Билли Бонс По проектированию книжки непонятные, вообще :( Сколько не пытался читать. Пока еще не дорос видимо :)


 

Member
Статус: Не в сети
Регистрация: 09.08.2005
Откуда: Земля
MEIN, спасибо, буду пробывать.
:beer:
Помогите написать ещё одну программу на двухмерный массив.

Вообщем дана прямоугольная матрица(максимальный размер массива 10*10) Теукущая размерность массива задаётся пользователем. Элементы массива вещественного типа(числа) Ввод значений с клавиатуры.

Нужно определить 1)количество строк, содержащих хотя бы один нулевой элемент
2)номер столбца,в котором находится самая длинная серия одинаковых элементов.


 

Member
Статус: Не в сети
Регистрация: 24.09.2004
Откуда: Belarus, Mensk
LiS95 Отсюда оттолкнись: http://www.gotdotnet.ru/Forums/Common/419071.aspx
Добавлено спустя 3 минуты, 1 секунду
kexman См. http://www.pdfchm.com/book/c-gui-progra ... qt-4-6310/ (зарегестрируйся, чтобы можно было скачать и качай только в 1 поток).

_________________
ruSpiegel.net - русское зеркало дотнета
Ваши любимые статьи и блоги, посвященные Microsoft .NET Framework, теперь и на русском языке.


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
kexman писал(а):
Кстати, хочу еще раз сказать огромное спасибо за
Всегда пожалуйста :)


kexman писал(а):
Билли Бонс По проектированию книжки непонятные, вообщ
Давай ты детальнее здесь опишешь проблему с обходом по вектору и доступу к конкретным методам, а потом подумаем, что тут лучше предпринять.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 09.08.2005
Откуда: Земля
Люди помогите. Напишите хотя бы как найти номер столбца,в котором находится самая длинная серия одинаковых элементов. У меня j столбцы, i строки.


 

Member
Статус: Не в сети
Регистрация: 12.12.2003
Откуда: Уфа
Daemon
Да я почитал, в принципе, как раз в случаях доступа к членам классов-потомков и используется dynamic_cast.
Вопросика 2 появилось.
1)
Код:
//объявление класса:
class MModel : public MObject
{
public:
                enum GeometryType { proportional, followTop, followBottom };

   MModel(MGrid topGrid, MGrid bottomGrid, GeometryType type);
   ~MModel();
   GeometryType geomStruct;

private:
   double *top, *bottom;
   int numX, numY, numZ;
};

//Реализация
MModel::MModel(MGrid topGrid, MGrid bottomGrid, GeometryType type)
{
   switch(type) {
   case GeometryType::proportional:
      minX = topGrid.minX<bottomGrid.minX ? topGrid.minX : bottomGrid.minX;
      break;
   }
}

Выдает предупреждение warning C4482: nonstandard extension used: enum 'MModel::GeometryType' used in qualified name.

2) У меня есть тот пресловутый вектор указатель на объекты vector<Object*> objects. Эти объекты отображаются в виджете TreeView, с помощью архитектуры model/view. Каждому объекту Object соответствует объект - TreeViewItem. В классе TreeViewItem я делаю поле - указатель на объект Object*, для этого мне надо заинклудить файл "object.h". По логике программы мне нужно аналогично в классе Object добавить указатель на TreeViewItem, для этого мне надо заинклудить файл "treeviewitem.h" - получается как бы перекрестное включение, программа конечно же не работает. Пояснение:

Код:
//object.h
#include "treeviewitem.h"

class Object
{
public:
   Object();
   ~Object();
   TreeViewItem *item;
};

Код:
//treeviewitem.h
#include "object.h"

class TreeViewItem
{
public:
   TreeViewItem();
   ~TreeViewItem();
   Object *object;
};

Это приводит к ошибке ессесно. Вижу только одно решение, вместо TreeViewItem *item написать void *item, а затем преобразовать с помощью static_cast<TreeViewItem>(*item) уже в программе. Или есть другой, более правильный вариант?


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 30 из 87<  1 ... 27  28  29  30  31  32  33 ... 87  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan