ЛЮДИ, разбирающиеся в С++ ХЕЛП

Эlton

I'll be back
ПОМОГИТЕ пожалуста!!! Ну очень надо, иначе зачёта не увидеть мне
Если вы девушка, то в принципе помочь можно... Девушек всё-равно на ответственные посты не назначают и вреда от них большого производству не бывает. А если вы юноша, то... нафига нашей стране такие программисты?! :angry: Как мы с такими "специалистами" Америку перегонять будем? :huh:

Упс! Начало топика датировано 2007 годом! Чела либо уже давно выгнали из инста, либо он уже стал "программистом". :D
 

sami

Местный
Если вы девушка, то в принципе помочь можно... Девушек всё-равно на ответственные посты не назначают и вреда от них производству большого не бывает. А если вы юноша, то... нафига нашей стране такие программисты?! :angry: Как мы с такими "специалистами" Америку перегонять будем? :huh:
Разве только программисты через зачет по C++ проходят?
Да и потом, какая там Америка с уровнем "сдал зачет по C++". До Индии бы дотянуться!
 

Эlton

I'll be back
Разве только программисты через зачет по C++ проходят?
Да какая разница? Замените слово "программист" на подходящее другое. Полюбому чел не в кулинарном техникуме учится.
(Ненавижу объяснять очевидные вещи. <_< Этим, прежде всего, я унижаю собеседника, имхо.)
 

tomcat

far away...
Команда форума
Мульти модератор
MS Visual C++ x.x, если кто пожертвует дистрибутив. Или ставите что-нибудь типа vmware, а в ней win98, под которой досовский борланд (или чего там у вас) пойдёт на ура.
 

Cttacutejib

Пользователь
в общес среду нашел, спасибо) теперь тупой вопрос, как задать ОЧЕНЬ большое число, "long int pkv" маловато..(
 

sami

Местный
too many types in declaration
эм.. если это важно, среда программирования borland C
В текущем стандарте C++ его нет, но многие компиляторы уже поддерживают C++0x, в котором он введен. На счет Borland C - не знаю.

Какой диапазон нужен? И для чего собственно?
 

Cttacutejib

Пользователь
В текущем стандарте C++ его нет, но многие компиляторы уже поддерживают C++0x, в котором он введен. На счет Borland C - не знаю.

Какой диапазон нужен? И для чего собственно?
обычная домашка по введению в си, мне дан диапазон чисел от 150 до 200, нужно найти все числа кратные 7 и перемножить их квадраты, long int не хватает и пишется ноль(
можно конечно огромным алгоритмом вычислить кол-во миллиардов, миллионов итп а потом поставить всё в одну строчку, как будто одно число но ээ...нее)
компилятор сменить не могу учитель ъочет что-бы работали именно для того, что в вузе, а то не защититься(
 

sami

Местный
обычная домашка по введению в си, мне дан диапазон чисел от 150 до 200, нужно найти все числа кратные 7 и перемножить их квадраты, long int не хватает и пишется ноль(
можно конечно огромным алгоритмом вычислить кол-во миллиардов, миллионов итп а потом поставить всё в одну строчку, как будто одно число но ээ...нее)
компилятор сменить не могу учитель ъочет что-бы работали именно для того, что в вузе, а то не защититься(
в стандарте С99 есть тип "long long". Поддерживает ли его borland - фиг знает. Но что-то мне кажется что задача на то и рассчитана, что стандартного типа данных не должно хватить.
 

Cttacutejib

Пользователь
в стандарте С99 есть тип "long long". Поддерживает ли его borland - фиг знает. Но что-то мне кажется что задача на то и рассчитана, что стандартного типа данных не должно хватить.
врятли, мы только 2 месяца работаем на си, причем в суууупер медленном темпе, только вот недавно оператор switch изучили.. и задачи на такую логику.. к этому учительница нас бы подготовила.. ладно всё= спасибо большое, притворюсь что не понял, и найду произведение просто чисел кратных 7 из этого диапазона:) но как задавать числа аналогично long long обязательно спрошу:)
ну чееееерт, даже для обычного произведения не хватило памятиxDD
 

sami

Местный
врятли, мы только 2 месяца работаем на си, причем в суууупер медленном темпе, только вот недавно оператор switch изучили.. и задачи на такую логику.. к этому учительница нас бы подготовила.. ладно всё= спасибо большое, притворюсь что не понял, и найду произведение просто чисел кратных 7 из этого диапазона:) но как задавать числа аналогично long long обязательно спрошу:)
Для озвученной задачи этого типа не хватит.
unsigned long long дает диапазон
0-18446744073709551615
ваш ответ примерно такой
24152738626737411192963901440000
 

sami

Местный
жаль, спасибо большое за помощь)
да не за что.
Вот, кстати, решение задачи на haskell:
Код:
product $ map (\x -> x * x) $ filter (\x -> rem x 7 == 0) $ [150..200]
читать так:
произведение $ квадратов $ значений, что делятся на 7 $ из списка 150..200

Успехов ;)
 

QweRius

Пользователь
Написал пару программ на си, все компилировалось, работало, пока не перешел с 64-битного archlinux на 32-битный debian. Сейчас программа компилируется, но при её запуске пишет "ошибка сегментирования". Какой командой компилировал в арче не помню, но сейчас так:
Код:
gcc -o prog code.c -I /usr/include/GL/ -L /usr/include/GL/ -lglut -lGL -lGLU -lX11 -lm
исходный код одной
#include <GL/glut.h>
#include <stdio.h>
#include <math.h>


// Molek number
//******************************
#define N 64

// Molek mass
//******************************
#define M 10.0


// Temperature
//******************************
#define T0 300.0


// Step dt
//******************************
#define dt 0.001
#define STEP 10

// Borders
//******************************
#define X_MIN 0
#define X_MAX 10
#define Y_MIN 0
#define Y_MAX 10
#define Z_MIN 0
#define Z_MAX 10

#define kBoltzmann 1.3806504
double x[N], y[N], z[N];
int nm, nmi, step, step1, i, rnx, rny, rnz;
float vx[N], vy[N], vz[N], V0, rsx[N], rsy[N], rsz[N], rs, U, Usave, W, dW, dU, dx[N], dy[N], dz[N], xsave[N], ysave[N], zsave[N], dx10[N], dy10[N], dz10[N], dx10kv[N], dy10kv[N], dz10kv[N], drkv[N], dRkv[N], D, x10[N], y10[N], z10[N], dRsrkv;
FILE *file;

void MolekCreate() {

V0=pow(3.0*T0*kBoltzmann*100/M,1.0/2.0);
printf("\nV (t=0) = %f\n\n",V0);
x[0]=0;y[0]=2;z[0]=2;
for (nm = 1; nm <= N; nm++) {
x10[nm]=x[nm]=x[nm-1]+2;
y10[nm]=y[nm]=y[nm-1];
z10[nm]=z[nm]=z[nm-1];
if (x[nm] > 8) {x[nm] = 2; y[nm]=y[nm-1]+2;}
if (y[nm] > 8) {x[nm] = 2; y[nm]=2; z[nm]=z[nm-1]+2;}
xsave[nm]=x[nm]; ysave[nm]=y[nm]; zsave[nm]=z[nm];}
for (nm=1; nm<=N; nm++) {
for (nmi=nm; nmi<=N; nmi++) {
rsx[nmi]=x[nm]-x[nmi];
rsy[nmi]=y[nm]-y[nmi];
rsz[nmi]=z[nm]-z[nmi];

rs=pow(rsx[nmi]*rsx[nmi]+rsy[nmi]*rsy[nmi]+rsz[nmi]*rsz[nmi],1.0/2.0);
if (rs==0) {rs=9999;}
Usave = Usave + 1/pow(rs,12.0)-1/pow(rs,6.0);}}

}



void Calc() {
V0=pow(3.0*T0*kBoltzmann*100/M,1.0/2.0);
for (i=0; i<=(N-1); i++) {U=0;
dx=(rand()%9999-5000.0)/5000.0*V0*dt;
dy=(rand()%9999-5000.0)/5000.0*V0*dt;
dz=(rand()%9999-5000.0)/5000.0*V0*dt;
x=x+dx;
y=y+dy;
z=z+dz;
// Borders
if (x <= X_MIN) {x=X_MIN+X_MIN-x;}
if (y <= Y_MIN) {y=Y_MIN+Y_MIN-y;}
if (z <= Z_MIN) {z=Z_MIN+Z_MIN-z;}
if (x >= X_MAX) {x=X_MAX-(x-X_MAX);}
if (y >= Y_MAX) {y=Y_MAX-(y-Y_MAX);}
if (z >= Z_MAX) {z=Z_MAX-(z-Z_MAX);}

for (nmi=1; nmi<=N; nmi++) {
rsx[nmi]=x-x[nmi];
rsy[nmi]=y-y[nmi];
rsz[nmi]=z-z[nmi];
rs=pow(rsx[nmi]*rsx[nmi]+rsy[nmi]*rsy[nmi]+rsz[nmi]*rsz[nmi],1.0/2.0);
U = U + 1/pow(rs,12.0)-1/pow(rs,6.0);}
dU=U-Usave;
if (dU>0) {W=exp(-dU/8.5*0.00001*T0); dW=(rand()%9999)/10000.0;
if (W<dW) {x=xsave; y=ysave; z=zsave; U=Usave;printf("\t### LOADED ###\n");}}

//printf ("step %d %d\t%f\n",step,i+1,Usave);
}}

void display() {

glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(-5, -5, -30);
for (nm=1; nm<= N; nm++) {
glBegin(GL_POINTS);
glVertex3f(x[nm],y[nm],z[nm]);
glEnd(); }
glPopMatrix();
glutSwapBuffers();}

void timer() {
Calc();
step=step+1;
step1=step1+1;
if (step>=STEP) {
for (nm=1;nm<=N;nm++) {
for ( nm = 1; nm <= N; nm++ ) {
dx10kv[nm]=(x[nm]-x10[nm])*(x[nm]-x10[nm]);
dy10kv[nm]=(y[nm]-y10[nm])*(y[nm]-y10[nm]);
dz10kv[nm]=(z[nm]-z10[nm])*(z[nm]-z10[nm]);

x10[nm]=x[nm];y10[nm]=y[nm];z10[nm]=z[nm];

drkv[nm]=(dx10kv[nm] + dy10kv[nm] + dz10kv[nm]);//printf("molek%d %f\n",nm,z[nm]);
dRkv[nm]=dRkv[nm-1]+drkv[nm];}}

dRsrkv=dRkv[64]/N;
D=dRsrkv/(6*STEP);
file = fopen("out.txt","a+");
fprintf(file, "%f\n", D);
fclose(file);
printf("%d %f\n",step1,D);step=0;
}
display();
glutTimerFunc(10, timer, 0);
}

void mainc()
{int argc; char **argv;printf(" ************ OK *************");
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(200, 200);
glutInitWindowPosition(20, 210);
glutCreateWindow("ex6 - 64 molek");
glClearColor(0, 0, 0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//glOrtho (-100, 100, -100, 100, -100, 100);
gluPerspective(45, 1, 0, 100);
glutDisplayFunc(display);
timer(0);
glutMainLoop();
}

int main () {
MolekCreate();
mainc();}

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

Попробовал прогнать через GNU Project Debugger :
Код:
V (t=0)  = 111.471313


Program received signal SIGSEGV, Segmentation fault.
0xb7fb190a in glutInit () from /usr/lib/libglut.so.3
(gdb)
 

sami

Местный
Попробовал прогнать через GNU Project Debugger :
Код:
V (t=0)  = 111.471313


Program received signal SIGSEGV, Segmentation fault.
0xb7fb190a in glutInit () from /usr/lib/libglut.so.3
(gdb)

А на что вы рассчитывали, подавая в gluInit мусор?
Код:
void mainc()
{int argc; char **argv[/u];printf(" ************ OK *************");
glutInit(&argc, argv);
 

QweRius

Пользователь
#include <GL/glut.h>
#include <stdio.h>
#include <math.h>


// Molek number
//******************************
#define N 64

// Molek mass
//******************************
#define M 10.0


// Temperature
//******************************
#define T0 300.0


// Step dt
//******************************
#define dt 0.001
#define STEP 10

// Borders
//******************************
#define X_MIN 0
#define X_MAX 10
#define Y_MIN 0
#define Y_MAX 10
#define Z_MIN 0
#define Z_MAX 10

#define kBoltzmann 1.3806504
double x[N], y[N], z[N];
int nm, nmi, step, step1, i, rnx, rny, rnz;
float vx[N], vy[N], vz[N], V0, rsx[N], rsy[N], rsz[N], rs, U, Usave, W, dW, dU, dx[N], dy[N], dz[N], xsave[N], ysave[N], zsave[N], dx10[N], dy10[N], dz10[N], dx10kv[N], dy10kv[N], dz10kv[N], drkv[N], dRkv[N], D, x10[N], y10[N], z10[N], dRsrkv;
FILE *file;

void MolekCreate() {

V0=pow(3.0*T0*kBoltzmann*100/M,1.0/2.0);
printf("\nV (t=0) = %f\n\n",V0);
x[0]=0;y[0]=2;z[0]=2;
for (nm = 1; nm <= N; nm++) {
x10[nm]=x[nm]=x[nm-1]+2;
y10[nm]=y[nm]=y[nm-1];
z10[nm]=z[nm]=z[nm-1];
if (x[nm] > 8) {x[nm] = 2; y[nm]=y[nm-1]+2;}
if (y[nm] > 8) {x[nm] = 2; y[nm]=2; z[nm]=z[nm-1]+2;}
xsave[nm]=x[nm]; ysave[nm]=y[nm]; zsave[nm]=z[nm];}
for (nm=1; nm<=N; nm++) {
for (nmi=nm; nmi<=N; nmi++) {
rsx[nmi]=x[nm]-x[nmi];
rsy[nmi]=y[nm]-y[nmi];
rsz[nmi]=z[nm]-z[nmi];

rs=pow(rsx[nmi]*rsx[nmi]+rsy[nmi]*rsy[nmi]+rsz[nmi]*rsz[nmi],1.0/2.0);
if (rs==0) {rs=9999;}
Usave = Usave + 1/pow(rs,12.0)-1/pow(rs,6.0);}}

}



void Calc() {
V0=pow(3.0*T0*kBoltzmann*100/M,1.0/2.0);
for (i=0; i<=(N-1); i++) {U=0;
dx=(rand()%9999-5000.0)/5000.0*V0*dt;
dy=(rand()%9999-5000.0)/5000.0*V0*dt;
dz=(rand()%9999-5000.0)/5000.0*V0*dt;
x=x+dx;
y=y+dy;
z=z+dz;
// Borders
if (x <= X_MIN) {x=X_MIN+X_MIN-x;}
if (y <= Y_MIN) {y=Y_MIN+Y_MIN-y;}
if (z <= Z_MIN) {z=Z_MIN+Z_MIN-z;}
if (x >= X_MAX) {x=X_MAX-(x-X_MAX);}
if (y >= Y_MAX) {y=Y_MAX-(y-Y_MAX);}
if (z >= Z_MAX) {z=Z_MAX-(z-Z_MAX);}

for (nmi=1; nmi<=N; nmi++) {
rsx[nmi]=x-x[nmi];
rsy[nmi]=y-y[nmi];
rsz[nmi]=z-z[nmi];
rs=pow(rsx[nmi]*rsx[nmi]+rsy[nmi]*rsy[nmi]+rsz[nmi]*rsz[nmi],1.0/2.0);
U = U + 1/pow(rs,12.0)-1/pow(rs,6.0);}
dU=U-Usave;
if (dU>0) {W=exp(-dU/8.5*0.00001*T0); dW=(rand()%9999)/10000.0;
if (W<dW) {x=xsave; y=ysave; z=zsave; U=Usave;printf("\t### LOADED ###\n");}}

//printf ("step %d %d\t%f\n",step,i+1,Usave);
}}

void display() {

glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(-5, -5, -30);
for (nm=1; nm<= N; nm++) {
glBegin(GL_POINTS);
glVertex3f(x[nm],y[nm],z[nm]);
glEnd(); }
glPopMatrix();
glutSwapBuffers();}

void timer() {
Calc();
step=step+1;
step1=step1+1;
if (step>=STEP) {
for (nm=1;nm<=N;nm++) {
for ( nm = 1; nm <= N; nm++ ) {
dx10kv[nm]=(x[nm]-x10[nm])*(x[nm]-x10[nm]);
dy10kv[nm]=(y[nm]-y10[nm])*(y[nm]-y10[nm]);
dz10kv[nm]=(z[nm]-z10[nm])*(z[nm]-z10[nm]);

x10[nm]=x[nm];y10[nm]=y[nm];z10[nm]=z[nm];

drkv[nm]=(dx10kv[nm] + dy10kv[nm] + dz10kv[nm]);//printf("molek%d %f\n",nm,z[nm]);
dRkv[nm]=dRkv[nm-1]+drkv[nm];}}

dRsrkv=dRkv[64]/N;
D=dRsrkv/(6*STEP);
file = fopen("out.txt","a+");
fprintf(file, "%f\n", D);
fclose(file);
printf("%d %f\n",step1,D);step=0;
}
display();
glutTimerFunc(10, timer, 0);
}

void mainc()
{ int argc; char **argv[/u];printf(" ************ OK *************");
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(200, 200);
glutInitWindowPosition(20, 210);
glutCreateWindow("ex6 - 64 molek");
glClearColor(0, 0, 0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//glOrtho (-100, 100, -100, 100, -100, 100);
gluPerspective(45, 1, 0, 100);
glutDisplayFunc(display);
timer(0);
glutMainLoop();
}

int main () {
MolekCreate();
mainc();}

Код:
code.c:136: error: expected expression before ‘/’ token
code.c:137: error: ‘argv’ undeclared (first use in this function)
code.c:137: error: (Each undeclared identifier is reported only once
code.c:137: error: for each function it appears in.)

Честно говоря, в opengl я не разбирался, взял готовый код и подстроил под свои нужды.
http://code.google.com/p/cplusplus-lessons/source/browse/lesson30/lesson30.cpp
 

sami

Местный
Код:
code.c:136: error: expected expression before ‘/’ token
code.c:137: error: ‘argv’ undeclared (first use in this function)
code.c:137: error: (Each undeclared identifier is reported only once
code.c:137: error: for each function it appears in.)

Честно говоря, в opengl я не разбирался, взял готовый код и подстроил под свои нужды.
http://code.google.com/p/cplusplus-lessons/source/browse/lesson30/lesson30.cpp
Я процитировал и что бы показать где ошибка, попытался подчеркнуть текст. Не вышло, и забыл убрать закрывающий тег [[/u].
Не думал, что вы попытаетесь это скомпилировать.
В OpenGL не надо разбираться, что бы понять что в glutInit пойдет мусор.

Подставьте в объявление mainc аргументы как в примере
Код:
int main(int argc, char **argv)
и уберите объявление локальных переменных.
 

QweRius

Пользователь
Я процитировал и что бы показать где ошибка, попытался подчеркнуть текст. Не вышло, и забыл убрать закрывающий тег [[/u].
Не думал, что вы попытаетесь это скомпилировать.
В OpenGL не надо разбираться, что бы понять что в glutInit пойдет мусор.

Подставьте в объявление mainc аргументы как в примере
Код:
int main(int argc, char **argv)
и уберите объявление локальных переменных.
Собственно я тоже не понял смысла строки, поэтому и добавил, что не разбирался с opengl :)

В объявление mainc уже подставлял - не работало.
Все содержимое mainc вывалил в main - заработало. Спасибо!
Только вот раньше все работало в первоначальном варианте. Может gcc разных версий..
 
Сверху