24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 801  |  回复: 6
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

WANGGUANG123

金虫 (正式写手)


[求助] microsoft visual 2013已停止正常工作 已有2人参与

#include<iostream>
#include<fstream>
#include<math.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#define N 10
using namespace std;
double Min(double array[], int n)
{

                double min = array[1];
                if (n > 2)
                {
                        for (int i = 1; i < n; ++i)
                        {
                                if (array < min)
                                        min = array;

                        }
                }
                return min;

}
void main()
{
        //输出文件流 输出到data.txt
        ofstream outfilex,outfiley,outfilez;
        outfilex.open("x.txt";
        outfiley.open("y.txt";
        outfilez.open("z.txt";
        srand((unsigned)time(NULL));
        double  x[N], y[N], z[N];//定义1000个粒子的三个坐标数组
        double r;//半径大小
        double step, R;//步长和容限
        cout << "输入半径r:" << "  ";
        cin >> r;
        cout << endl << "输入移动步长step:" << "  ";
        cin >> step;
        cout << endl << "输入容量大小R:" << "  ";
        cin >> R;
        cout << endl;
        for (int i = 0; i < N; i++)//将每个粒子的坐标先全定义成000
        {
                x = 0; y = 0; z = 0;
        }
        int  a = 2;
        while (1)
        {
                //int hh = 0;
                x[a] = (rand() % 20000 - 10000) / 10000.0*R;//定义下一个粒子的随机坐标
                y[a] = (rand() % 20000 - 10000) / 10000.0*R;
                z[a] = (rand() % 20000 - 10000) / 10000.0*R;

                while (1)
                {
                        double distance[N];
                        for (int c = 1; c < a; c++)
                        {
                                distance[c] = (x[a] - x[c])*(x[a] - x[c]) + (y[a] - y[c])*(y[a] - y[c]) +(z[a] - z[c])*(z[a] - z[c]);//求两粒子间的距离
                        }
                        if (Min(distance,a)<4.0* r*r)//如果和之前所有粒子的距离小于球心距,则此粒子生成成功,产生下一个粒子判定
                        {
                                cout << a << "  ";       
                                cout << Min(distance, a)<<"  "<<x[a]<<" "<<y[a]<<"  "<<z[a]<<endl;
                                a++;
                                break;
                                }
                       
                       
                        else//否则在该粒子位置处随机运动给定步长,进行下一次判定
                        {
                                double theta = (rand() % 1000) / 1000.0*6.28;
                                double fy = (rand() % 1000) / 1000.0*6.28;
                                x[a] = x[a] + step*sin(theta)*cos(fy);
                                y[a] = y[a] + step*sin(theta)*sin(fy);
                                z[a] = z[a] + step*cos(theta);
                                if (abs(x[a]) >= R || abs(y[a]) >= R || abs(z[a]) >= R)
                                        break;
                        }
                }

                if (a == N+1)//到1000个粒子,退出
                        break;

        }
        system("pause";
        cout << "x y z坐标分别为" << endl;
        for (int j = 1; j < N+1 ; j++)
        {

                cout << j<< "  " << x[j] << "  " << y[j] << "  " << z[j] << endl;
                //system("pause";
                //输出到文件
                outfilex << x[j] << endl;
                outfiley << y[j] << endl;
                outfilez<<z[j] << endl;
               
        }
        //关闭输出文件流
    outfilex.close();
        outfiley.close();
        outfilez.close();
    system("pause";
}









结果能运行出来,但是在关闭运行框的时候会报错
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

WANGGUANG123

金虫 (正式写手)


引用回帖:
2楼: Originally posted by zzy滴号 at 2015-11-15 10:48:04
代码中有两处发生了内存泄露。
1、if (a == N+1)处将N+1改为N;
2、for (int j = 1; j < N+1 ; j++)处同样将N+1改为N。

哦哦,是不是同样的可以直接改成double x【N+1】,这样 ,把数组长度加一

发自小木虫IOS客户端
6楼2015-11-17 07:19:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 7 个回答

zzy滴号

金虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
代码中有两处发生了内存泄露。
1、if (a == N+1)处将N+1改为N;
2、for (int j = 1; j < N+1 ; j++)处同样将N+1改为N。
天道酬勤
2楼2015-11-15 10:48:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lvweizhong

铜虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
C/C++中,所有对长度为N的数组全体元素的操作首元素编号为0,尾元素为N-1

发自小木虫Android客户端
3楼2015-11-15 18:32:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lvweizhong

铜虫 (著名写手)

【答案】应助回帖

引用回帖:
2楼: Originally posted by zzy滴号 at 2015-11-15 10:48:04
代码中有两处发生了内存泄露。
1、if (a == N+1)处将N+1改为N;
2、for (int j = 1; j < N+1 ; j++)处同样将N+1改为N。

这种行为叫做操作越界,不算内存泄漏……

发自小木虫Android客户端
4楼2015-11-15 18:33:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 085600专硕材料与化工348分求调剂 +9 上学啦! 2026-04-01 10/500 2026-04-03 01:13 by BruceLiu320
[考研] 338求调剂,一志愿能源动力,外语是日语203 +3 zzz,,r 2026-04-02 3/150 2026-04-02 22:23 by ZXlzxl0425
[考研] 考研调剂 +3 李木子0120 2026-04-02 5/250 2026-04-02 21:45 by dongzh2009
[考研] 工科 267求调剂 +3 wanwan00 2026-04-02 5/250 2026-04-02 21:42 by wanwan00
[考研] 材料调剂 +10 一样YWY 2026-04-02 10/500 2026-04-02 20:58 by dongzh2009
[考研] 288求调剂 一志愿哈工大 材料与化工 +31 洛神哥哥 2026-03-31 33/1650 2026-04-02 20:00 by tianyyysss
[考研] 283求调剂 +3 jiouuu 2026-04-02 4/200 2026-04-02 14:08 by 哒哒哒呱呱呱
[考研] 271求调剂 +15 勒布朗@ 2026-03-31 20/1000 2026-04-02 11:24 by Sammy2
[考研] 英一数一408,总分284,二战真诚求调剂 +12 12.27 2026-03-30 14/700 2026-04-02 00:18 by 欣喜777
[考研] 292求调剂 +17 木虫er12138 2026-04-01 17/850 2026-04-01 21:37 by 七度不信任
[考研] 求调剂0703 +5 周嘉尧 2026-03-31 8/400 2026-04-01 20:32 by ltltkkk
[考研] 350求调剂 +7 阿佳~ 2026-03-31 7/350 2026-04-01 16:12 by yanflower7133
[考研] 285求调剂 +5 FZAC123 2026-03-30 5/250 2026-04-01 15:50 by 韩雨涵
[硕博家园] 博一被送出联培感觉不适应怎么办 +3 全村的狗 2026-03-31 3/150 2026-04-01 10:44 by 328838485
[考研] 求0861交通运输专硕or材料专硕调剂 +4 勒布朗@ 2026-03-31 4/200 2026-04-01 09:54 by 一只好果子?
[考研] 0856 335分 +9 cccchenso 2026-03-29 9/450 2026-03-31 16:37 by lishahe
[考研] 一志愿南昌大学324求调剂 +6 hanamiko 2026-03-29 6/300 2026-03-31 16:35 by hypershenger
[考研] 英一数一总分334求调剂 +4 陈阳坤 2026-03-31 4/200 2026-03-31 14:22 by 记事本2026
[考研] 286求调剂 +5 丢掉懒惰 2026-03-27 8/400 2026-03-31 11:27 by Delta2012
[考研] 298调剂 +3 jiyingjie123 2026-03-27 3/150 2026-03-27 11:57 by wxiongid
信息提示
请填处理意见