Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.03;
Скачать: CL | DM;

Вниз

Базовые зниния C++   Найти похожие ветки 

 
grisme ©   (2006-08-04 15:50) [0]

Устроился в компанию.) Написание большой системы проектирование, расчетов для нефтяной компании. Моя часть - программинг матаппарата(исходя из работы инженеров) и движка на OpenGL(моделирование, 3D построения, etc.) в среде Delphi. Но до оформления(в понедельник) попросили написать подпрограмму для расчета течения жидкости(нефти, скажем прямо :0) в различных условиях(давления, сечения труб, процента смешения, типа скважин и прочего много-много параметров - это не важно), но в среде MSVC 6 (сам знаю - изврат :0), просто мол пока я свободен дома до срока начала - помочь им..
так вот, Cи я знаю на уровне "почитать документацию",т.е. "голый Си", но конкретностей, к сожалению не ведаю..

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


 
grisme ©   (2006-08-04 17:16) [1]

пока сам варганил, посмотрел в готовых модулях - константы объявляются,как #define, ф-ии как обычно,но при компиляции MSVC ругался сразу на заголовок первой же ф-ии, он считал ее константой. как указать, что сейчас идет уже основная (implementation) часть модуля, т.е. где сам код подпрограмм лежит? и еще, нужно ли заголовки подпрограмм выносить (ака interface в delphi-модулях) в "интерфейсную" часть заголовочника(ежели такая вообще имеется)?


 
DesWind ©   (2006-08-04 17:16) [2]

Наверно лучше всетаки книгу полистать хоть глазами пробежаться....

Лучше пол дня потерять, потом за пол часа долететь(с)


 
StriderMan ©   (2006-08-04 17:19) [3]


> подпрограмму для расчета течения жидкости(нефти, скажем
> прямо :0) в различных условиях(давления, сечения труб, процента
> смешения, типа скважин и прочего много-много параметров
> - это не важно)

за выходные???? а ты в гидродинамике сечешь? это ж убойнешие дифуры!!!


 
Jeer ©   (2006-08-04 17:25) [4]


> это ж убойнешие дифуры!!!


Это для студентов.

Для инженеров - обычные методики, разработанные "убойными" специалистами по "истечению жидкостей".


 
grisme ©   (2006-08-04 17:27) [5]

я же сказал, что по результатам работы инженеров...:0) даны расчетные выкладки, просто их "завернуть" в приложеньице нужно..:0) но вот незадача, им обязательно на MSVC...:0) отказаться не предлагайте..:0)

p.s. попробовал обернуть в #ifdef <имя модуля> #endif
теперь без ошибок, подозреваю, что "обернул" в implementation. Это так?)


 
Bless ©   (2006-08-04 17:31) [6]


> grisme ©   (04.08.06 17:16) [1]
>
> пока сам варганил, посмотрел в готовых модулях - константы
> объявляются,как #define, ф-ии как обычно,но при компиляции
> MSVC ругался сразу на заголовок первой же ф-ии, он считал
> ее константой. как указать, что сейчас идет уже основная
> (implementation) часть модуля, т.е. где сам код подпрограмм
> лежит? и еще, нужно ли заголовки подпрограмм выносить (ака
> interface в delphi-модулях) в "интерфейсную" часть заголовочника(ежели
> такая вообще имеется)?


.h-файл - это и есть "интерфейсная часть". А "implementation-часть модуля"
идет в другом файле .cpp
//-----------simple_lib.h-------------
...
void f();
...

//-----------simple_lib.cpp-------------
...
void f(){
cout<<"body of function f"<<endl;
};
....

//--------main.cpp-------------
....
#include "simple_lib.h"
int main(){
 f();
};
...


Приблизительно так, видимо.


 
DesWind ©   (2006-08-04 17:31) [7]

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


 
grisme ©   (2006-08-04 17:31) [8]

ценю ваше внимание, но дайте пожалуйста ответ(лучше примерный модуль)..:0)

инженеры строят "фундамент", затем уже мне на результатах производить совсем другие расчеты, но это уже другая история и на Delphi :0)


 
grisme ©   (2006-08-04 17:34) [9]

Bless ©   (04.08.06 17:31) [6]
DesWind ©   (04.08.06 17:31) [7]

Спасибо..:0)


 
isasa ©   (2006-08-04 17:35) [10]

grisme ©   (04.08.06 15:50)  
... для расчета течения жидкости(нефти, скажем прямо :0) в различных условиях(давления, сечения труб, процента смешения,...


Тебе конкретную мат. аппарат хоть дали, для подпрограммы. Потому, что с фантазией здесь, подход не на один год.
Особенно процента смешения. :) Жидкость неопределенного состава.


 
Bless ©   (2006-08-04 17:35) [11]

Что касается общих переменных, то с ними все аналогично функциям:
объявление - в h-файле, определение - в .cpp
Т.е. так:
---simple_lib.h
...
extern int my_variable;
...

---simple_lib.cpp
...
int my_variable;
...


PS Я в cpp совсем-совсем новичок да и пишу не проверяя, так что имей в виду :)


 
grisme ©   (2006-08-04 17:40) [12]

Матаппарат этот не такой уж нетривиальный.:0) там еще огурцы-там просто матмодели течения в трубе, в основном. у них есть еще матмодель, привязанная к грунту, где от толщины грунта нужно изменять факторы и параметры труб, и затем уже эту матчасть(которую мне оборачивать) подключать...:0) хотя можно и в обратной логике все представить..


 
Piter ©   (2006-08-04 17:48) [13]

Jeer ©   (04.08.06 17:25) [4]
> это ж убойнешие дифуры!!!

Это для студентов.

Для инженеров - обычные методики, разработанные "убойными" специалистами по "истечению жидкостей".


ну не надо. Это действительно задача не на 3 дня. И проблем возникнет предостаточно.

Я видел коммерческий софт за килобаксы, который выполняет эти задачи... Конечно, функционал не сравнить, но тем не менее...


 
StriderMan ©   (2006-08-04 17:58) [14]

Звали меня в такую сферу. Дали рюхать учебник по гидродинамике. А я к тому времени только что диплом защитил, естесственно на второй странице я учебник закрыл, т.к. почувствовал себя обманутым - только учеба кончилась а тут на тебе....

Короче отказался. Может конечно я ленивый раздолбай и упустил свою синию птицу (все же нефть...), но не жалею если честно.


 
grisme ©   (2006-08-04 18:02) [15]

Софт тоже коммерческий..:0)
Господа, с матаппаратом проблем нету. На данный момент довольно глупая проблема - незнание синтаксиса..:0)
если Освященный© прав, то подтвердите его слова..:0)
Bless, не в обиду, просто ты сам признался, что новичек..:0)


 
isasa ©   (2006-08-04 18:04) [16]

Piter ©   (04.08.06 17:48) [13]
Название софта, или ссылки на сайт не подбросишь. Аж любопытно стало.

Зависимости - это одно(теория), а практика это чуть другое(обычно, это решение этой белиберды в нескольких точках, при наборе заданных входных).


 
Jeer ©   (2006-08-04 18:16) [17]

Piter ©   (04.08.06 17:48) [13]

Если есть инженерная методика расчета, то все намного проще, чем решение нелинейных дифуров с использованием МКР


 
grisme ©   (2006-08-04 18:32) [18]

Подскажите, учебник же не качать/искать ради этого..:0) мне же в итоге, не на C писать потом..:0) Версия Bless© отказывается собираться..:0( т.е. растащил по 2-м модулям *.cpp и *.h. в h оставил только головы функций, константы и тела функций вынес в cpp. на cpp компилятор ругается, что неожиданный конец файла, и что нужно поставить точку с запятой перед константой(???) указывая мне на заголовок фунции(которая с телом)..:0)
P.S. на всякий случай, точка с запятой стоит..:0)


 
Jeer ©   (2006-08-04 18:33) [19]


> учебник же не качать/искать ради этог


Почему - нет ?


 
grisme ©   (2006-08-04 18:38) [20]

>Почему - нет ?

Потому что если и буду переходить на эту среду, то, по крайней мере, не сейчас(в частности, выходные)..:0)


 
Bless ©   (2006-08-04 18:51) [21]


> grisme ©   (04.08.06 18:32) [18]


Приведи фрагмент кода, чтоб я мог у себя попробовать.


 
grisme ©   (2006-08-04 19:04) [22]

Пишу с той же конструкцией..:0)
//---------------test.cpp-----
#include <трали-вали>
... //другие модули
#define ...;
...//другие константы

int Sum(int a,int b)  //ну это например..:0)
{
int c;
  c=a+b;
  return (c);    
}

//-----------------------test.h
#include ... //тоже чего-нибудь
int sum(int a,int b);

вот, примерно такого вида конструкция. затем уже в основных модулях подключаю модуль test.h и юзаю sum(тоже например привел)..:0)


 
Bless ©   (2006-08-04 19:09) [23]

Не, "трали-вали" тут мне не поможет:)
Я хочу ошибку у себя увидеть, тогда может чем помочь смогу.
Т.е. сделай простейший рабочий пример, который генерирует ошибку и запости его сюда. Должно, видимо, быть три файла test.cpp, test.h и basic_module.cpp


 
Bless ©   (2006-08-04 19:09) [24]

Кстати, после #define...
никаких ";" с запятой быть не должно!


 
Bless ©   (2006-08-04 19:11) [25]

Кстати, после #define...
никаких ";" с запятой быть не должно!
#define x 5; - заменяет в тексте имя x на то, что идет после этого имени в директиве #define, т.е. в этом случае на "5;"
И пример
z=x+y; после обработки препроцессором будет выглядеть как
z=5;+y,
что естественно даст ошибку


 
Bless ©   (2006-08-04 19:13) [26]

";" с запятой
читать как
точек с запятой


 
Piter ©   (2006-08-04 19:24) [27]

isasa ©   (04.08.06 18:04) [16]
Название софта, или ссылки на сайт не подбросишь. Аж любопытно стало


к сожалению, не помню :(
Нам на практике показывали.

Jeer ©   (04.08.06 18:16) [17]
Если есть инженерная методика расчета, то все намного проще, чем решение нелинейных дифуров с использованием МКР


кто же спорит. Но даже если есть эмпирическое формулы на все случаи жизни - просто задолбаешься все это собирать по различным источникам. И методик этих - туча немерянная.


 
grisme ©   (2006-08-04 19:35) [28]

fatal error C1010: unexpected end of file while looking for precompiled header directive

Эта ошибка на последнюю строку в модуле cpp, после описания всех тел ф-й


 
vidiv ©   (2006-08-04 19:52) [29]


> grisme ©   (04.08.06 19:35) [28]

а ты опиши функции в основной программе и отдай. там ж мастера - сами все сделают :)


 
Bless ©   (2006-08-04 19:53) [30]

Слушай, эта ошибка мне ни о чем не говорит.
Ну сделай ты три простейших файла и приведи здесь их текст. Неужели это трудно?
Я попробовал у себя:
//--------------head.cpp----------------
#include "head.h"
#define x 5; // хоть так и неправильно, но я x нигде не использую
int sum(int a,int b)  //ну это например..:0)
{
 int c;
 c=a+b;
 return (c);
}

//------------head.h-------------------
#include <iostream>
int sum(int a, int b);

//-----------main.cpp--------------------
#include <iostream>
#include "head.h"

int main(){
std::cout << sum(2,3) << std::endl;
return 0;
}


Все работает.


 
vidiv ©   (2006-08-04 19:57) [31]


> std::cout << sum(2,3) << std::endl;

я с Си чуть чуть тоже знаком. такой синтаксис меня пугает, объясни что к чему, пожалуйста :)


 
Bless ©   (2006-08-04 20:12) [32]


> акой синтаксис меня пугает, объясни что к чему, пожалуйста
> :)


Что именно пугает?
std:: ?

Так было не всегда и в старых версиях можно было писать так:
cout << sum(2,3) <<endl;

Я еще до namespace-ов не дошел :), но в общем так:
все классы стандартной библиотеки (и cout в том числе) объявлены в пространстве имен std.
Пространства имен (namespace) ограничивают видимость имен, объявленных внутри него. Обратиться к имени, объявленному внутри namespace-а, можно только явно указав имя namespace-а конструкцией вида <имя_namespace-а>::<имя чего_то_там>

Можно было бы написать так:
using namespace std
cout << sum(2,3) << endl;


Или тебе сама строчка cout << sum(2,3) << endl;
тоже не понятно?


 
vidiv ©   (2006-08-04 20:15) [33]

не...
вот это
std::cout  - мне примерно понятно, а вот знаки
<< вообще нет, даж пугают


 
Bless ©   (2006-08-04 20:23) [34]

Ну с этими знаками ты по C должен быть знаком: << - это операция сдвига влево.
Но C++ позволяет перегружать операции, т.е. придавать им какой тебе нравится смысл.
Т.е. ты обяъвляешь класс, внутри него перегружаешь операцию какую-либо и теперь везде, где эта операция будет применяться к твоему классу, она будет означать не то, что обозначала изначально, а то, как ты ее переопределил.
cout - это класс (стандартный  выходной поток).
Внутри него перегружена операция "<<" и она обозначает применительно к этому классу не "сдвинуть влево", а "вывести в выходной поток".
Строчка
cout << sum(2,3) << endl;
означает просто "вывести в выходной поток cout(на экран) значение функции sum(2,3) и символ новой строки endl"


 
Bless ©   (2006-08-04 20:25) [35]

Короче это c++-ная альтернатив c-шной функции
printf("%d\n", sum(2,3);



Страницы: 1 вся ветка

Текущий архив: 2006.09.03;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.07 c
2-1155730366
AlexanderMS
2006-08-16 16:12
2006.09.03
Ошибка : Class TColorDialog not found .


15-1155108043
Red_imp
2006-08-09 11:20
2006.09.03
VBA vs Other


3-1146930148
parovoZZ
2006-05-06 19:42
2006.09.03
Кодировка таблиц


9-1134733120
julai
2005-12-16 14:38
2006.09.03
Статьи по OpenGL


3-1151191604
antoxa2005
2006-06-25 03:26
2006.09.03
Подскажите, а как указывать путь с клиента к MySQL?