일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 802.3
- 802.3 이더넷
- Address Resolution Protocol
- adodb 설치
- AES 암호
- Alternatively build in profile or release modes to enable launching from the home screen
- Android Studio 몰입모드
- Android Studio 몰입모드 설정
- Android Studio 상태바 없애기
- Android Studio 자동 정렬
- android studio 자동정렬
- Android Studio 자동정렬 단축키
- Android Studio 코드 자동정렬
- Android Studio 타이틀바 없애기
- Android Studio 하단 바 없애기
- Android Studio 홈버튼 없애기
- Angler EK
- Angler EK 악성코드
- Angler EK이란
- apache2 tomcat9
- apache2 tomcat9 설치
- apache2 tomcat9 연동
- API
- apk 에러
- apk 오류
- ARP
- arp cache poisoning
- ARP Poisoning
- ARP Request
- ARP 구조
- Today
- Total
지나가는 이야기
[C] 엘리베이터 프로그램 본문
엘리베이터에 대한 프로그램을 짜 보도록 하겠습니다.
[상황]
10층 건물에 엘리베이터가 두대(1호기, 2호기)가 있는데, 엘리베이터를 움직이게 하는 버튼은 하나입니다. 그리고 다른 층에서 엘리베이터를 타는 사람은 없습니다. (엘리베이터는 1층에서 10층까지 전층 운행한다.)
[조건]
1. 현재 나의 위치는 키보드에서 직접 입력으로 받는다.
2. 건물은 1층에서 10층까지 입니다. 1~10 사이의 숫자 이외의 숫자나 문자가 입력되면 에러를 발생하고 다시 입력을 받는다.
3. 각각의 엘리베이터의 위치는 랜덤으로 받는다.
4. 나의 층에서 가장 가까운 엘리베이터 하나만 움직이며, 만약 두 대의 엘리베티어가 같은 층일 시 1호기가 움직인다.
5. 나의 층수, 각각 엘리베이터의 층수, 어떤 엘리베이터가 움직였는지 문자로 출력한다.
6. 1, 2호기 엘리베이터가 몇 층에 있었는지를 배열에 10개만 저장하고 이것을 출력한다. 프로그램은 사용자가 0을 입력할 때까지 반복한다. 하지만 0을 입력할 때까지 반복하므로 10개 이상의 데이터가 발생할 수 있다. 따라서 10개 이상이 발생하게 되면 10개만 배열에 저장한다. 그리고 저장된 10개를 출력한다.
먼저 첫 번째 조건인, 키보드에 현재 층을 입력을 받기 위해 정수형 변수를 만들고 scanf_s()함수로 입력을 받는다.
int floor;
printf("What floor are you on ? : ");
scanf_s("%d", &floor)
현재 위치를 반환하는 함수를 만들었다.
int Location(int number) {
return printf("Your location : %d\n", number);
}
다음으로 두 번째, 세 번째 조건을 만족 시키기 위해 if문을 이용한다. 그리고 0을 입력하면 종료되게 만들었다.
(추가로 배열에 엘리베이터의 값들을 저장하였다.)
// 1~10까지의 랜덤한 숫자 생성
el_1 = rand() % 10 + 1;
el_2 = rand() % 10 + 1;
if (scanf_s("%d", &floor) == 0) { // 숫자가 아닌 문자를 입력 받을 시 오류 문구 출력
printf("Error!!!\n");
rewind(stdin); // 입력 버퍼 지우기
printf("\n\n");
}
else {
if (floor == 0) { // 0을 입력시 반복문 탈출
printf("\n\n");
break;
}
if (floor >= 1 && floor <= 10) {
Location(floor); // 현재 위치를 입력받아 리턴하는 함수호출
printf("First elevator : %d \t Second elevator : %d \n", el_1, el_2);
// 엘리베이터의 정보를 배열에 저장
el_1_array[i] = el_1;
el_2_array[i] = el_2;
}
else{
printf("Error!!\n");
printf("\n\n");
}
}
그리고 네 번째 조건을 만족하기 위해 두 대의 엘리베이터와 나의 층수를 뺀 값에 절대값을 씌워 가장 가까운 엘리베이터가 움직이게 출력하였다.
// 두 개의 엘리베이터와 나의 위치를 계산 후 절대값을 이용하여 가까운 엘리베이터를 구함
result_1 = floor - el_1;
result_2 = floor - el_2;
if (abs(result_1) < abs(result_2)) {
printf("Move First elevator.");
}
if (abs(result_2) < abs(result_1)) {
printf("Move Second elevator.");
}
if (abs(result_1) == abs(result_2)) {
printf("Move First elevator.");
}
배열의 출력은 for문을 통해 출력을 했다.
printf("=====================Result=====================");
printf("\nFirst elevator : ");
// 반복문을 이용해서 배열을 출력
for (int j = 0; j < 10; j++) {
if (el_1_array[j] < 1 || el_1_array[j] > 10) { // 엘리베이터의 위치를 구하는 반복문에서 배열을 꽉채우지 않고 나올시
el_1_array[j] = ' '; // 아직 안채워진 배열은 공백으로 만듬
}
else {
printf("%3d", el_1_array[j]);
}
}
printf("\nSecond elevator : ");
for (int j = 0; j < 10; j++) {
if (el_2_array[j] < 1 || el_2_array[j] > 10) {
el_2_array[j] = ' ';
}
else {
printf("%3d", el_2_array[j]);
}
}
printf("\n\n");
전체 코드는 아래와 같다.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// [상황]
// 10층 건물 한 건물에 두 대의 엘리베이터가 있다.
// 두대(1호기, 2호기)의 엘리베이터는 움직이는 버튼이 하나이다.
// 다른층에 엘리베이터는 타려는 사람은 없다.
// 1호기는 1층에서 10층까지 움직인다.
// [문제]
// 1) 현재 나의 위치(층수)는 키보드에서 직접 입력 받는다.
// 건물은 1층에서 10츱입니다.이외 층수가 입력되면 에러를 발생하고 다시 입력 받는다.
// 단, 0층이 입력될때까지 프로그램은 계속 됩니다.
// 나의 위치를 입력 받아 리턴하는 함수를 작성합니다.
// 2) 각각의 엘리베이터의 위치(층수)는 랜덤하게 발생합니다.사용자는 엘리베이터의 위치를 알 수 없다.
// 엘리베이터 위치발생에 필요한 사항
// #include <stdlib.h>
// #include <math.h>
// srand((unsighed int)time(NULL));
// rand()%10+1
// 3)나의 위치와 가까운 엘리베이터가 움직인다.
// 만일 나의 위치와, 엘리베이터 1호기와 2호기의 위치가 서로 같다면 1호기가 움직인다.
// 4) 나의 층수, 각각 엘리베이터의 층수를 출력하고 어떤 엘리베이터가 움직였는지 문자로 출력한다.
// 5) 1, 2호기 엘리베이터가 몇층 몇층 발생했는지 배열에 10개만 저장하고 마지막에 이것을 출력한다.
// 프로그램은 사용자가 0을 입력 할때까지 반복되므로 10개이상의 데이터가 발생할 수 있다.
// 따라서 10개 이상이 발생하면 10개만 배열에 저장합니다. 그리고 저장된 10개를 각각 출력한다.
// 현재 위치를 입력받아 리턴하는 함수
int Location(int number) {
return printf("Your location : %d\n", number);
}
int main() {
int floor;
int el_1, el_2;
int el_1_array[10];
int el_2_array[10];
int i = 0;
int result_1;
int result_2;
while (true){
// 1~10까지의 랜덤한 숫자 생성
el_1 = rand() % 10 + 1;
el_2 = rand() % 10 + 1;
printf("What floor are you on ? : ");
if (scanf_s("%d", &floor) == 0) { // 숫자가 아닌 문자를 입력 받을 시 오류 문구 출력
printf("Error!!!\n");
rewind(stdin); // 입력 버퍼 지우기
i--;
printf("\n\n");
}
else {
if (floor == 0) { // 0을 입력시 반복문 탈출
printf("\n\n");
break;
}
if (floor >= 1 && floor <= 10) {
Location(floor); // 현재 위치를 입력받아 리턴하는 함수호출
printf("First elevator : %d \t Second elevator : %d \n", el_1, el_2);
// 엘리베이터의 정보를 배열에 저장
el_1_array[i] = el_1;
el_2_array[i] = el_2;
// 두 개의 엘리베이터와 나의 위치를 계산 후 절대값을 이용하여 가까운 엘리베이터를 구함
result_1 = floor - el_1;
result_2 = floor - el_2;
if (abs(result_1) < abs(result_2)) {
printf("Move First elevator.");
}
if (abs(result_2) < abs(result_1)) {
printf("Move Second elevator.");
}
if (abs(result_1) == abs(result_2)) {
printf("Move First elevator.");
}
printf("\n\n");
}
else { // 1~10 사이의 숫자가 아닌 수를 입력시 오류 출력
i--;
printf("Error!!\n");
printf("\n\n");
}
}
i++;
if (i == 10) {
break;
}
}
// 결과 출력
printf("=====================Result=====================");
printf("\nFirst elevator : ");
// 반복문을 이용해서 배열을 출력
for (int j = 0; j < 10; j++) {
if (el_1_array[j] < 1 || el_1_array[j] > 10) { // 엘리베이터의 위치를 구하는 반복문에서 배열을 꽉채우지 않고 나올시
el_1_array[j] = ' '; // 아직 안채워진 배열은 공백으로 만듬
}
else {
printf("%3d", el_1_array[j]);
}
}
printf("\nSecond elevator : ");
for (int j = 0; j < 10; j++) {
if (el_2_array[j] < 1 || el_2_array[j] > 10) {
el_2_array[j] = ' ';
}
else {
printf("%3d", el_2_array[j]);
}
}
printf("\n\n");
return 0;
}
위 영상 두개를 보면 정상적으로 작동하는지 볼 수 있다.
'Computer language : 컴퓨터 언어 > C' 카테고리의 다른 글
[C] 숫자 피라미드 출력 / C언어 기초 (0) | 2022.01.24 |
---|---|
[C] 내림차순 정렬하기 / 버블 정렬 사용하기 (0) | 2020.10.15 |
[C] 오름차순 정렬하기 / 버블 정렬 사용하기 (0) | 2020.10.14 |
[C언어] 범위에 속한 숫자 개수 구하기 / 1~N에 속하는 숫자 M의 개수 구하기 (0) | 2020.09.03 |