코드 오류 질문
조회수 483회
int driverage(int age) { age = (rand() % (maxim - minim)) + minim;
return age;
}
//민감도 구하기 float varalpha(int age) {
float alpha;
if (age >= 20 && age <= 39)
alpha = 0.50;
else if (age >= 40 && age <= 64)
alpha = 0.40;
else if (age >= 65)
alpha = 0.31;
return alpha;
}
//차량의 속도 구하기
float getVelocity(float acc, int t, float maxSpeed) { if ((acc*t) < maxSpeed) return acc * t; else return maxSpeed; }
//차량의 위치 구하기
float getPosition(float acc, int t, float maxSpeed) { float tmax = maxSpeed/acc;
if ((acc*t) < maxSpeed)
{
return (acc *t*t) / 2;
}
else
{
return ((acc *tmax*tmax) / 2 + maxSpeed*(t - tmax));
}
}
struct car { int age; int goalT;//지정위치 도착 시간 float velocity[500]; float accel; float position[500]; float constantT; float decel; float alpha;
};
typedef struct car car;
float getAcc(float v1, float v2, float alpha) { return alpha*(v1 - v2); }
car cars[15];
int main() {
//변수, 구조체 선언
int age = 0;
float maxvel, drivetime;
float velMperSec;//단위변환용 변수(km/h -> m/s)
int maxT;//최대속도에 도달했을 때의 시간
int decelT;//감속 시간
int minToSec;//분->초
int safedistance;
//driverage 안에 있는 랜덤함수를 위해 랜덤시간 생성
srand(time(NULL));
//구조체 초기화
int tempPos = 0;
//모든 차를 정지 상태로 초기화
for (int i = 0; i < 15; i++)
{
age = driverage(age);
cars[i].age = age;
cars[i].goalT = 0;
cars[i].accel = 0;
cars[i].decel = 0;
cars[i].alpha = varalpha(cars[i].age);
for (int j = 0; j < 500; j++)
{
cars[i].velocity[j] = 0;
cars[i].position[j] = tempPos;
}
tempPos--;
}
//첫 차를 초기 설정으로
//첫 차의 가속도 설정
printf("Please input first acceleration : ");
scanf_s("%f", &cars[0].accel);
//첫 차량의 최고 속도 설정
printf("Please input maximum velocity : ");
scanf_s("%f", &maxvel);
//등속운전시간 설정
printf("Please input drive time : ");
scanf_s("%f", &cars[0].constantT);
//감속 설정
printf("Please input deceleration : ");
scanf_s("%f", &cars[0].decel);
safedistance = maxvel;//안전거리는 m단위이기 때문
velMperSec = (maxvel*10)/36;//km/h를 m/s로 단위 변환
minToSec = 60 * cars[0].constantT;//등속운동시간
maxT = velMperSec / cars[0].accel;//가속시간
decelT = velMperSec / cars[0].decel;//감속시간
int wholeT = minToSec + maxT + decelT; //전체 시간
//첫차 초기화
for (int t = 0; t < 500; t++)
{
//시간에 따른 속도 계산
if (t < maxT)
{
cars[0].velocity[t+1] = cars[0].velocity[t] + cars[0].accel;
}
else if (maxT <= t && t < (maxT + minToSec))
{
cars[0].velocity[t+1] = velMperSec;
}
else if ((maxT + minToSec) <= t)
{
if (cars[0].velocity[t] - cars[0].decel > 0)
{
cars[0].velocity[t + 1] = cars[0].velocity[t] - cars[0].decel;
}
else
cars[0].velocity[t + 1] = 0;
}
cars[0].position[t + 1] = cars[0].position[t] + cars[0].velocity[t] + (t*cars[0].accel) / 2;//거리 계산
if ((cars[0].position[t] > 100) && cars[0].goalT == 0)//0미터에 처음 도착한 시간(첫 차)
{
cars[0].goalT = t;
}
}
for (int i = 1; i < 30; i++)
{
for (int t = 0; t < 1000; t++)
{
if (((cars[i - 1].position[t] - cars[i].position[0]) > maxvel) || cars[i].velocity[t] != 0)//안전거리 처음 차이가 나자마자 후미차량 출발,
{
cars[i].accel = getAcc(cars[i - 1].velocity[t], cars[i].velocity[t], cars[1].alpha);
cars[i].velocity[t + 1] += cars[i].accel;
if (cars[i].velocity[t + 1] < 0)
{
cars[i].velocity[t + 1] = 0;
}
cars[i].position[t + 1] = cars[i].position[t] + cars[i].velocity[t] + (t*cars[i].accel) / 2;//거리 계산
if ((cars[i].position[t] > 0) && cars[i].goalT == 0)//0미터에 처음 도착한 시간(이후 차량)
{
cars[i].goalT = t;
}
}
}
}
int record[20];
for (int i = 0; i < 30; i++)
{
record[i] = 0;
}
for (int i = 0; i < 30; i++)
{
if (cars[i].goalT != 0)
{
record[cars[i].goalT / 60]++;
}
}
return 0;
}
과제를 위해서 코드를 작성하는 도중,
- 구조체 안의 배열 내에 이상한 값이 들어감
- 중간에 구조체 내부 값 accel의 값이 0으로 초기화됨
- record 배열 선언시 예외가 발생
위의 문제가 일어납니다. 무엇이 문제일까요???
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력