코드 오류 질문

조회수 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;

}

과제를 위해서 코드를 작성하는 도중,

  1. 구조체 안의 배열 내에 이상한 값이 들어감
  2. 중간에 구조체 내부 값 accel의 값이 0으로 초기화됨
  3. record 배열 선언시 예외가 발생

위의 문제가 일어납니다. 무엇이 문제일까요???

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)