Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];

Вниз

Базовые зниния 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.037 c
15-1154692230
grisme
2006-08-04 15:50
2006.09.03
Базовые зниния C++


15-1154700286
AntiUser
2006-08-04 18:04
2006.09.03
Тест скорости интернет соединения.


1-1153459612
KygECHuK
2006-07-21 09:26
2006.09.03
Как получить иконку ?


2-1155663864
ArtemESC
2006-08-15 21:44
2006.09.03
Нет ли модуля, для работы c Png форматом?


2-1155641597
Zilog
2006-08-15 15:33
2006.09.03
Как в ListBox программно поменять цвет выделенной строчки?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский