Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: Ntony
Дата сообщения: 01.11.2009 18:23
ну я впринципе понял что адреса, только вот почему то не мог нормально переделать))спасибо большое..
Автор: Umbrall
Дата сообщения: 01.11.2009 19:34
пожалуйста на толкните на нужную мысль
дали задание на писать программу которая будет создавать массив размером 16,32,64,128 килобайта, который будет содержать адрес размещения следующей ячейки в памяти

если варианты найти адрес размещения ячейки в памяти?? поиски в мсдне не дали толкового результата, а гугл совсем иное выдает
Автор: Eminence
Дата сообщения: 01.11.2009 21:23
Оператор взятия адреса &.

int a[5];
void* p=&a[4];
p содержит адрес 4-й ячейки

void* u[5];
u[4]=&u[5];
ячейка 4 будет содержать адрес ячейки 5
Автор: Eminence
Дата сообщения: 02.11.2009 21:42
akaGM
map<double,int> valueMap;
double Values[100];
valueMap[Values[i]] = i

Выглядит как запись в массив, но это просто перегруженный оператор, где Values[i] - это ключ, i - его значение. В теории часто такую структуру называют ассоциативный массив, но это не совсем корректно и вызывает путаницу. В действительности в дереве нет линейной области памяти, как в массиве, там каждый элемент представляется специальной структурой с ключом, значением ключа, двумя указателями на левую/правую дочернюю вершину дерева.
В зависимости от реализации алгоритма в структуре, описывающей вершину, могут добавляться другие данные. В частности, в STL map реализована как красно-черное дерево (там в вершине дополнительно хранится "цвет" листа).
Код valueMap[Values[i]] = i приводит к созданию новой вершины, корректировке указателей и вращению элементов дерева для сохранения сбалансированности
Автор: SIgor33
Дата сообщения: 03.11.2009 13:42
Помогите. В Ineterbase есть такая процедура на С++

ISC_QUAD*    EXPORT fn_doubletodate(ARG(double*, d))
ARGLIST(double* d)
{
    ISC_QUAD *bufquad = (ISC_QUAD *) MALLOC (sizeof(ISC_QUAD));
    bufquad->gds_quad_high = *d;
    *d = (*d - bufquad->gds_quad_high) * msec_in_day;
    bufquad->gds_quad_low = ROUND(*d, 0);

    return bufquad;
}
Я в си ноль хотелось бы понять как они осуществляют процедуру преоброзования числа в дату. если можно алгоритм
Автор: karakurt2
Дата сообщения: 03.11.2009 14:51
Насколько я понял, дата представляется как (вещественное) число дней, прошедшего с начала отсчёта до некоторого момента, не помню сейчас, с какого именно. Эта процедура возвращает указатеть на структуру, состоящую из двух полей. В старших двух байтах возвращается целое число дней, в младших двух байтах возвращается число целое секунд (округлённо).
Автор: SIgor33
Дата сообщения: 03.11.2009 15:29
karakurt2
А у си отсчет с какой даты начинается? в delphi например 30.12.1899
Автор: karakurt2
Дата сообщения: 03.11.2009 16:15
SIgor33, совершенно аналогично. Я так подозреваю, это стандартное представление даты, не зависящее от языка программирования. Вот статья из Microsoft Developer Network по этому вопросу.
Автор: akaGM
Дата сообщения: 03.11.2009 16:21
а, например, в сях юникса с 1 января 1970г., которое так и называется "unix-time"
---
вернее, "юникс-эпоха":
http://ru.wikipedia.org/wiki/UNIX-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F
Автор: Infinite Retrieval
Дата сообщения: 03.11.2009 22:12
Вот задали поиграться с конструкторами копии, и не компилится мой код. Ошибку пометил в коментарии. Заранее спасибо.

Код:
#include <iostream>
#include <string.h>
#include <windows.h>
class CMyString
{
char *pStr;
protected:
static int Q_OBJ;
public:
CMyString();
static char CON_C[100], DES[100], ADR[100], ADR_C[100], ADR_T[100], CON[100];
static int ShowNumberOfObj() { return Q_OBJ; }
static void Qpp() { Q_OBJ++; }
static void Qmm() { Q_OBJ--; }


CMyString(const CMyString &);
~CMyString();
void Set(char *);
};

int CMyString::Q_OBJ = 0;

char CMyString::CON[100] = "The constructor of new object was called, now the number of objects is ";
char CMyString::CON_C[100] = "The constructor of copy was called, now the number of objects is ";
char CMyString::DES[100] = "The destructor was called, now the number of objects is ";
char CMyString::ADR[100] = "The adress of new object is ";
char CMyString::ADR_C[100] = "This constructor of copy was called by the object with the adress ";
char CMyString::ADR_T[100] = "The adress of temprary object, that was created by the constructor of copy is ";


CMyString::CMyString()
{
char buf[20];
pStr = new char[1];
Qpp();
strcat(CON, itoa(ShowNumberOfObj(), buf, 10));
MessageBoxA(NULL, CON, "Constructor", MB_OK);
CON[72] = 0; //72 is lenth of CON


}
CMyString::~CMyString()
{
char buf[20];
Qmm();
strcat(DES, itoa(ShowNumberOfObj(), buf, 10));
MessageBoxA(NULL, DES, "Destructor", MB_OK);
DES[57] = 0; //57 is lenth of DES

delete pStr;

}
void CMyString::Set(char *pNewStr)
{
int i, s;
s = strlen(pNewStr);
delete pStr;
pStr = new char[s+1];
for(i=0; i<=s; i++)
*(pStr + i) = *(pNewStr + i);
}
CMyString::CMyString(const CMyString &Source)
{
char buf[20], q_str[12];
Qpp();
strcat(CON_C, itoa(ShowNumberOfObj(), buf, 10));
MessageBoxA(NULL, CON_C, "Constructor of copy", MB_OK);
CON_C[65] = 0; //65 is lenth of CON

strcat(ADR_C, itoa((int)(&Source), buf, 16));
MessageBoxA(NULL, ADR_C, "Constructor of copy", MB_OK);
ADR_C[67] = 0;

strcat(ADR_T, itoa((int)this, buf, 16));
MessageBoxA(NULL, ADR_T, "Constructor of copy", MB_OK);
ADR_T[79] = 0;

pStr = new[strlen(Source.pStr)]; // ОШИБКА!!!!!!!!!!!!!! ПОЧЕМУ?
strcpy(pStr, Source.pStr);

}
void swap(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}

int main()
{
CMyString obj1;
CMyString obj2 = obj1;
return 0;
}
Автор: Abs62
Дата сообщения: 03.11.2009 22:20
Infinite Retrieval

Цитата:
pStr = new[strlen(Source.pStr)]; // ОШИБКА!!!!!!!!!!!!!! ПОЧЕМУ?

Может, всё-таки new char[strlen(Source.pStr)]?
Автор: Infinite Retrieval
Дата сообщения: 03.11.2009 22:36

Цитата:
Может, всё-таки new char[strlen(Source.pStr)]?

Ё-маё..... башка уже не варит, спасибо.
Да, раз уж вы тут, не подскажите, как можно генерировать в студии код, чтобы пихнуть его в первый сектор жёсткого диска, тобишь как написать собственный загрузщик? Давно хотел с этим поиграться, привез ненужный системник. Насколько я понимаю, нужно просто сгенерировать bin файл с нулевым смещением и то, что атм написанно будет исполняться пи загрузке. Общение с пользователем можно проводить только через прерывания клавиатуры? На экран выводить можно только через тоже соотвествующее прерывание? Наверника же подобные программы пишутся не на fasm, а на C. Каким образом общаются с пользователем? Через какую-нибудь библиотеку общения с портами? Вообщем подскажите с чего начать и как делать. Для начала хочу просто понять как по шагам добиться исполнения собственного кода в начала загрузки, а уж дальше можно передавть джампы на системы.
Автор: Abs62
Дата сообщения: 03.11.2009 23:14
Infinite Retrieval

Цитата:
Насколько я понимаю, нужно просто сгенерировать bin файл с нулевым смещением и то, что атм написанно будет исполняться пи загрузке.

Да. Надо только учитывать, что там ещё и таблица разделов должна находиться.

Цитата:
Общение с пользователем можно проводить только через прерывания клавиатуры? На экран выводить можно только через тоже соотвествующее прерывание?

Разумеется, работать можно только с BIOS. Int 10h - вывод на экран, int 16h - клавиатура, int 13h - работа с диском.

Цитата:
Наверника же подобные программы пишутся не на fasm, а на C.

Уж MBR-то точно на ассемблере пишется.
Автор: Infinite Retrieval
Дата сообщения: 04.11.2009 12:10
000h 446 Код загрузчика
1BEh 64 Таблица разделов
16 Раздел 1
1CEh 16 Раздел 2
1DEh 16 Раздел 3
1EEh 16 Раздел 4
1FEh 2 Сигнатура (55h AAh)



00h 1 Признак активности раздела
01h 1 Начало раздела — головка
02h 1 Начало раздела — сектор (биты 0-5), дорожка (биты 6,7)
03h 1 Начало раздела — дорожка (старшие биты 8,9 хранятся в байте номера сектора)
04h 1 Код типа раздела
05h 1 Конец раздела — головка
06h 1 Конец раздела — сектор (биты 0-5), дорожка (биты 6,7)
07h 1 Конец раздела — дорожка (старшие биты 8,9 хранятся в байте номера сектора)
08h 4 Смещение первого сектора
0Ch 4 Количество секторов раздела


Код файловой системы используемой на данном разделе. В случае расширенного раздела принимает значение 05h.
А если обычный????



тобишь я должен уместить свой код до 1BE.

обишь я пишу прогу общения, затем пишу

org 0x1BE
db 1;
db 1; //как выбрать головку?
db 00000001b; // 1ый сектор (нулевой уже занят) нулевая дорожка
и так далее

Помогите, пожалуйста, каким-нибудь примером заглушкой.
Автор: Abs62
Дата сообщения: 04.11.2009 12:26
Infinite Retrieval
Я такие вещи не писал. Погугли, найти, думаю, не так уж сложно. Например, вот ссылка на первой же странице.
Автор: Infinite Retrieval
Дата сообщения: 04.11.2009 12:38
Ведь можно взять и дизасеблить свой диск!!!!!
Автор: Lyrik
Дата сообщения: 04.11.2009 12:44
Infinite Retrieval
в данной теме, это оффтоп, имхо.

Цитата:
А если обычный????

что значит обычный? это код устанавливается в зависимости от файловой системы

Цитата:
Помогите, пожалуйста, каким-нибудь примером заглушкой.

посмотрите загрузчик от винды, от довольно понятно написан. загрузчик в мбр должен проверять корректность главной мбр и передавать управление на активный раздел
Автор: Infinite Retrieval
Дата сообщения: 04.11.2009 13:38

Цитата:
в данной теме, это оффтоп, имхо.

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

Автор: optimized
Дата сообщения: 04.11.2009 15:54
киньте пожалуйста ссылки на теорию по разработке контроллера, никак ничего дельного найти не могу (теги по теме Разработка модели контроллера для управления очередностью
выполнения процессов; диспетчер ресурсов)
Автор: Vilian
Дата сообщения: 07.11.2009 12:52
Народ, что посоветуете из учебников. рекомендуется с самого начала, т.е. с нуля. Так же интересуют учебники по визуальному программированию.
p.s. Знаю только некоторые азы c++.
Автор: Abs62
Дата сообщения: 07.11.2009 13:31
Vilian
Для начала стоит полистать эту тему.
Автор: eightysix
Дата сообщения: 07.11.2009 14:26
Помогите пожалуйста, мне нужно смоделировать поведение толпы, ну например пользователь кидает в толпу палку колбасы или какое-то другое действие,нужно сделать наглядную модль этого процесса,подскажите с чего мне начать,что взять за основу!!!Пожалуйста,очень прошу!
Автор: RFTP
Дата сообщения: 07.11.2009 19:38
eightysix, в простейшем случае за основу следует взять двумерный массив символов, который будет отображаться на экране и обновляться при нажатии клавиши или прошествии какого-либо времени. Например, символ "1" будет означать колбасу, "0" - человека, а пробел - пустое пространство. При формировании следующего "кадра" определяется на какую клетку может перейти каждый человек таким образом, чтобы он не столкнулся с другим и одновременно стремился убежать подальше от брошенной палки колбасы.
Автор: C4rn1v0r4
Дата сообщения: 11.11.2009 19:35
подскажите, пожалуйста, вот такой код:
Код: someClass::someClass(int variable)
{
some_otherClass.method();
some_classVariable1=5;
some_classVariable2=variable;
}
Автор: Lyrik
Дата сообщения: 11.11.2009 23:11
C4rn1v0r4

Цитата:
или же есть какие-то существенные различия?

результат на выходе будет один и тот же. только вот производительность во втором случае всегда не ниже первой, но чаще выше. если к примеру у вас some_classVariable1 - это объект какого-то класса, то в первом случае будет вызван конструктор по умолчанию для этого класса, а потом оператор присваивания. т.е. компилятор сгенерирует такой код:

Код: someClass::someClass(int variable) :
some_otherClass(),
some_classVariable1(),
some_classVariable2(),
{
some_otherClass.method();
some_classVariable1=5;
some_classVariable2=variable;
}
Автор: C4rn1v0r4
Дата сообщения: 12.11.2009 00:22
Lyrik
о, как. буду знать.
спасибо большое за ответ.
Автор: Denchik
Дата сообщения: 12.11.2009 11:57
Lyrik
небольшое уточнение, не придирки ради

Цитата:
т.е. компилятор сгенерирует такой код:

Код: someClass::someClass(int variable) :
some_otherClass(),
...
Автор: Ntony
Дата сообщения: 15.11.2009 18:03
А мне вот такой вопрос задали...какие ограничения существуют при передаче параметров по ссылке и по значению? то есть что можно и что нельзя передавать при передаче этими двумя способами((((по википедии шарил, так и не нашел ответа на этот вопрос.
Автор: akaGM
Дата сообщения: 15.11.2009 18:52
Ntony

Цитата:
по википедии шарил, так и не нашел ответа на этот вопрос

а по книгам не пробовал? иногда помогает...
Автор: Denchik
Дата сообщения: 15.11.2009 19:49
Ntony
Да, вроде, никаких ограничений, кроме невозможности преобразования типов аргументов. Также
по ссылке нельзя передавать константы как неконстантный аргумент, например:


Код: void f1(int& i){}
void f2(const int& i){}

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.