함수를 배웠다. 선언, 정의, 호출을 배웠다. 선언할 때는 반환 자료형, 함수이름, 매개변수, 세미콜론으로 선언을 한다. 정의를 할 때는 반환 자료형, 함수이름, 매개변수, 그리고 함수로 할 동작들을 작성한다.
GetData라는 함수로 수를 입력 받고 GetMax라는 함수로 입력받은 수 중에서 가장 큰 값을 얻는다. 이번엔 특별히 전역 변수를 선언해서 MAX값을 구해보았다. 원래 프린트에는 그냥 매개변수 세 개를 받아서 그 중에 가장 큰 값을 구하게 되어 있는데 매개변수 하나만 받아서 가장 큰 값을 구했다. 전역변수는 코드의 어디서든 사용할 수 있고 갑자기 생각나서 한 번 사용해 봤다.
GetMax를 통해서 가장 큰 값을 구해서 nMax에 넣고 PrintData함수에 입력 받은 수와 그 수중에 가장 큰 수를 출력하도록 했다.
2019년 4월 30일 화요일
2019년 4월 25일 목요일
C언어 배우기 (성실한 개미)
오늘은 코드업에 있는 성실한 개미 문제를 풀어보았다. 10*10 크기로 맵을 입력 받는다. 먼저 겉에는 1로 되어 있고 속에 0과 1과 2로 이루어져 있는데 0은 개미가 돌아다닐 수 있는 공간이고 1은 벽이라서 움직일 뚫고 갈 수가 없고 2는 먹이다. 개미는 무조건 기본적으로 오른쪽으로 가는데 만약에 1을 만나면 아래로 내려간다. 그리고 개미가 지나간 곳은 9로 채워지고 개미가 멈추는 곳은 맵의 가장 오른쪽 밑이거나 먹이를 만나거나 더이상 움직일 수 없는 곳에서 멈춘다.
먼저 10*10의 맵을 만들고 개미가 움직이기 시작할 곳인 startx와 starty를 선언해서 둘다 1로 정의 했다. 그리고 맵을 입력받는다. 그 다음에 while문을 열어서 개미가 오른쪽 가장 밑에 갈 때까지 반복한다. 그리고 만약에 개미의 오른쪽이 장애물이고 아래에 먹이가 있으면 멈추도록 if문을 만들었고 만약에 그런게 아니고 개미 오른쪽에 장애물만 있다면 그냥 밑으로 가도록 했다. 그리고 오른쪽이 비어있으면 그냥 startx를 증가시키고 원래 있던 곳을 9로 만든다. 개미의 움직임이 끝나면 그 결과를 출력한다. 이 문제의 예는 밑에 있다.
입력
출력
먼저 10*10의 맵을 만들고 개미가 움직이기 시작할 곳인 startx와 starty를 선언해서 둘다 1로 정의 했다. 그리고 맵을 입력받는다. 그 다음에 while문을 열어서 개미가 오른쪽 가장 밑에 갈 때까지 반복한다. 그리고 만약에 개미의 오른쪽이 장애물이고 아래에 먹이가 있으면 멈추도록 if문을 만들었고 만약에 그런게 아니고 개미 오른쪽에 장애물만 있다면 그냥 밑으로 가도록 했다. 그리고 오른쪽이 비어있으면 그냥 startx를 증가시키고 원래 있던 곳을 9로 만든다. 개미의 움직임이 끝나면 그 결과를 출력한다. 이 문제의 예는 밑에 있다.
입력
출력
2019년 4월 23일 화요일
배열의 선언 방법
형식 : 자료형/배열이름[배열크기];
배열의 이름 == 주소
int a;
scanf("%d", &a); //십진수 정수를 입력받아 a라는 변수의 주소를 &로 찾아서 메모리에 접근하여 값을 삽입하는 함수.
printf("%d\n", &a);
//a라는 변수가 메모리에 할당되어 받는 주소를 출력하는 과정
& 주소 연산자 => 앰퍼샌드
변수의 주소값을 찾아주는 특수 문자
* : 에스터리스크 : 주소를 참조하여 변수의 값을 가져온다.
& : 앰퍼샌드 : 변수의 주소를 가져온다.
상호 보완 관계 => 상쇄
int b;
scanf("%d", *b);
printf("%d", *&b);
int b[3];
배열의 이름 == 주소
scanf("%d", b);
scanf("%d", &b[0]);
scanf("%d", b+1);
scanf("%d", &b[1]);
scanf("%d", b+2);
scanf("%d", &b[2]);
#include <stdio.h>
int main()
{
int arr[3];
scanf("%d", arr);
//scanf("%d", &arr[0]);
printf("%d", arr[0]);
printf("%d", *arr);
printf("%d", *&arr[0]);
&arr[0] == arr
&arr[1] == arr + 1
&arr[i] == arr+i
}
배열의 이름 == 주소
int a;
scanf("%d", &a); //십진수 정수를 입력받아 a라는 변수의 주소를 &로 찾아서 메모리에 접근하여 값을 삽입하는 함수.
printf("%d\n", &a);
//a라는 변수가 메모리에 할당되어 받는 주소를 출력하는 과정
& 주소 연산자 => 앰퍼샌드
변수의 주소값을 찾아주는 특수 문자
* : 에스터리스크 : 주소를 참조하여 변수의 값을 가져온다.
& : 앰퍼샌드 : 변수의 주소를 가져온다.
상호 보완 관계 => 상쇄
int b;
scanf("%d", *b);
printf("%d", *&b);
int b[3];
배열의 이름 == 주소
scanf("%d", b);
scanf("%d", &b[0]);
scanf("%d", b+1);
scanf("%d", &b[1]);
scanf("%d", b+2);
scanf("%d", &b[2]);
#include <stdio.h>
int main()
{
int arr[3];
scanf("%d", arr);
//scanf("%d", &arr[0]);
printf("%d", arr[0]);
printf("%d", *arr);
printf("%d", *&arr[0]);
&arr[0] == arr
&arr[1] == arr + 1
&arr[i] == arr+i
}
2019년 4월 22일 월요일
C언어 배우기 (랜덤 함수)
오늘은 랜덤함수에 대해 배워보았다. 랜덤함수를 쓰기 위해서는 우선 stdlib.h, time.h라는 헤더 파일이 추가로 필요하다. 이 소스코드는 로또 번호를 추첨하는 소스코드다. 그리고 만약에 같은 번호가 나오면 다시 추첨하는 코드다.
srand는 난수 기준값을 초기화하는 함수다. rand를 그냥 사용하면 랜덤은 랜덤인데 맨날 같은 값만 나온다. 그래서 srand에 time(NULL)을 넣어 줌으로써 난수를 계속 초기화시키는 것이다. time을 넣어주는 이유는 time은 계속해서 변하는 수이기 때문에 난수를 계속 다르게 초기화할 수 있다. rand() % n + 1을 해주면
1 ~ n까지의 랜덤값을 받을 수 있다.
마지막으로 같은 번호가 나왔을 때 다시 추첨하는 방법은 먼저 처음 번호가 나왔을 때는 비교할 대상이 없으니까 그냥 출력을 하고 그 다음부터는 나온 수와 같은지 비교를 해서 만약에 같으면 check2라는 변수를 1씩 높이고 만약에 check2가 0이 아니면 i값을 낮추고 다시 추첨을 하는 형식이다.
srand는 난수 기준값을 초기화하는 함수다. rand를 그냥 사용하면 랜덤은 랜덤인데 맨날 같은 값만 나온다. 그래서 srand에 time(NULL)을 넣어 줌으로써 난수를 계속 초기화시키는 것이다. time을 넣어주는 이유는 time은 계속해서 변하는 수이기 때문에 난수를 계속 다르게 초기화할 수 있다. rand() % n + 1을 해주면
1 ~ n까지의 랜덤값을 받을 수 있다.
마지막으로 같은 번호가 나왔을 때 다시 추첨하는 방법은 먼저 처음 번호가 나왔을 때는 비교할 대상이 없으니까 그냥 출력을 하고 그 다음부터는 나온 수와 같은지 비교를 해서 만약에 같으면 check2라는 변수를 1씩 높이고 만약에 check2가 0이 아니면 i값을 낮추고 다시 추첨을 하는 형식이다.
2019년 4월 18일 목요일
재밌는 Node.js (가위바위보 구현)
var scanf = require('scanf'); let check = 1; while(check) { console.log('도전자1 :'); let challenger1 = scanf('%s'); console.log('도전자2 :'); let challenger2 = scanf('%s'); if(challenger1 === challenger2) { console.log('무승부'); console.log('다시 할거면 1, 안할거면 0'); check = scanf('%d'); continue; } else if(challenger1 === '가위') { if(challenger2 === '바위') { console.log('도전자2 승'); console.log('다시 할거면 1, 안할거면 0'); check = scanf('%d'); continue; } else if(challenger2 === '보자기') { console.log('도전자1 승'); console.log('다시 할거면 1, 안할거면 0'); check = scanf('%d'); continue; } } else if(challenger1 === '바위') { if(challenger2 === '가위') { console.log('도전자1 승'); console.log('다시 할거면 1, 안할거면 0'); check = scanf('%d'); continue; } else if(challenger2 === '보자기') { console.log('도전자2 승'); console.log('다시 할거면 1, 안할거면 0'); check = scanf('%d'); continue; } } else if(challenger1 === '보자기') { if(challenger2 === '가위') { console.log('도전자2 승'); console.log('다시 할거면 1, 안할거면 0'); check = scanf('%d'); continue; } else if(challenger2 === '바위') { console.log('도전자1 승'); console.log('다시 할거면 1, 안할거면 0'); check = scanf('%d'); continue; } } }
오늘은 자바스크립트를 웹이 아닌 환경에서 사용할 수 있게 해주는 Node.js에 대해서 올릴 것이다. 코드를 대충 보면
원래 하던 C언어랑 비슷해 보이는데 다른 점은 먼저 변수의 자료형을 개발자가 지정해주는 것이 아니라는 점이고 자바
스크립트는 printf대신에 console.log를 사용해서 콘솔에 출력을 한다. 그리고 코드를 보면 scanf라는 익숙한 친구가
보이는데 scanf는 원래 자바스크립트에는 없는 것인데 Node.js에만 있는 npm(Node Package Manager)이라는 프로그램을
통해서 scanf를 불러온 것이다. scanf를 불러온 부분이 제일 처음에 나오는 var scanf = require('scanf');부분이다.
아직 한지 얼마 안되서 잘 모르기는 한데 npm을 많이 사용할 것 같다. 그리고 ===이라는 건 C언어에는 없는 것이다.
===은 ==이랑 비슷한데 양 옆의 두 값이 같으면 참을 보낸다. ==은 두 값의 타입은 안보고 값만 비교하는 것이고
===은 두 값의 타입과 값을 둘 다 보는 것이다. 자세히 말하자면 ==은 두 값을 강제 형변환을 통해서 서로 같은 형으로
변환을 한 다음에 값을 비교한다.
위에 설명한 것들을 제외하고 나머지 코드들은 C언어와 비슷하다. 가위바위보를 하려면 두 사람이 있어야 하니까
도전자1과 도전자2를 선언하는 동시에 scanf를 통해서 가위, 바위, 보자기 중에서 무엇을 낼 것인지 입력을 받는다.
입력을 받으면 가위바위보의 모든 경우의 수를 if else문들을 써서 도전자1과 도전자2의 가위바위보 결과를 내놓는다.
그리고 처음에 선언해둔 check변수에 1 또는 0을 입력 받아서 반복문을 계속 반복할 것인지 멈출 것인지를 결정한다.
오늘 처음 Node.js로 제대로 된 걸 만들어 봤는데 새로운 부분도 많고 C언어와 비슷한 부분도 많아서 재미가 있었다.
2019년 4월 16일 화요일
C언어 배우기 (윤년 달력 문제)
오늘은 윤년 달력 문제를 풀었다. 수업 시간에 풀었다. 먼저 몇 년을 입력하고 그 다음에 몇 달을 입력해서 그 연도, 그 달의 날수를 구하는 것이다. 특별히 배열을 선언해서 풀은 문제다. 먼저 연도를 입력받을 year이라는 변수를 선언하고 달마다 일 수로 배열, month를 초기화 했다. 그리고 while문을 조절할 check라는 변수를 선언했다. 먼저 연도를 입력하고 월을 입력한 다음에 만약에 월이 1보다 작거나 12보다 크면 다시 입력할 수 있도록 continue를 적어줬다. 그리고 if문으로 year가 윤년이면 2월을 29일로 바꾸었다. 근데 지금 보니까 실수한 것 같은게 만약에 while문을 다시 돌리면 2월을 초기화 해줘야 되는데 그걸 깜빡한 것 같다. 아무튼 그 다음에 for문을 다시 열어서 i가 11보다 작거나 같으면 반복하도록 해서 12번 반복하도록 했다. 그리고 입력된 연도와 월의 날 수를 출력하도록 했다. check에 1을 입력하면 참이 되기 때문에 다시 반복하고 0이 입력되면 거짓이기 때문에 반복을 멈추고 프로그램을 종료한다.
2019년 4월 15일 월요일
C언어 배우 (배열)
오늘은 백준 배열 문제를 여러개 풀어봤다. 방학 때 들은 강의에서 배열에 대한 강의도 들었는데 그때도 제대로 이해 안됐었고 지금은 거의 가물가물해서 여러 문제 풀어봤다.
여러개 풀어본 문제 중에 정답률이 제일 낮은 문제를 풀어봤다. 문제는 문자열을 입력받고 그 문자열의 단어의 개수를 구하는 문제다. 조건은 공백이 연속해서 나오는 경우는 없고 문자열의 앞과 뒤에 공백이 있을 수 있다는 조건이다.
문자열의 길이가 1000000이 넘지 않는다는 조건에 따라서 1000001byte길이의 char 변수를 선언했다. 그리고 반복문에 사용할 i와 문자열에서 단어의 개수와 직접적으로 연관된 spacebar라는 변수를 선언했다. 왜냐하면 단어는 띄어쓰기 한 개로 구분된다는 조건이 있었기 때문이다.
먼저 gets로 처음에 선언한 문자열 a에 입력을 받는다. 그리고 변수 i를 a의 인덱스로 이용해서 문자열의 끝인 NULL이 나올때 까지 for문을 반복한다. 그리고 for문 안에는 if문으로 인덱스가 0이 아니고 문자열에서 공백이 나왔을 때 spacebar를 증가시킨다. 문자열의 인덱스가 0이 아닐 때를 포함시킨 이유는 문자열의 처음 공백이 단어 수로 들어가면 안 되기 때문이다. 그리고 문자열의 공백의 수만큼 spacebar를 다 증가시켰으면 만약 문자열의 끝에 공백이 있을 때를 생각해야 한다. 그래서 for문이 끝난 후에 if문을 열어서 만약 문자열의 끝인 NULL에서 한 인덱스 전에 들어있는게 공백이면 spacebar를 감소시키게 만들었다. 이 if문이 따로 바깥으로 빠져있는 이유는 for문이 다 끝날 때까지 a의 끝을 알 수 없기 때문이다. 그래서 for문이 다 끝난 후에 NULL의 인덱스를 구했다. 마지막으로 spacebar + 1을 출력해주면 문자열의 단어의 개수를 알 수 있다.
2019년 4월 12일 금요일
C언어 배우기 (이중 for문)
오늘 코드는 이중 for문을 이용한 코드다. 생긴게 별찍기랑 비슷한데 출력도 계단 모양으로 만드는 별찍기에서 별 대신 숫자를 쓴 형태다.
먼저 총 몇 줄을 출력할 지 나타내는 변수 n을 입력 받는다. 그리고 for문을 열어서 i = 1을 선언하고 for문이 한 루프 돌아갈 때마다 i를 1씩 증가시키고 n이 i와 같거나 i보다 작아질 때까지 반복한다. 그리고 첫번째 for문을 한 번 반복할 때마다 개행을 해준다.
첫 번째 for문 안에 for문이 하나 더 들어있다. j = 1을 선언하고 i가 n과 같거나 n보다 작아질 때까지 반복을 한다. 그 이유는 줄이 1줄 늘어났을 때 한 줄에 들어가는 숫자도 1개씩 늘어나야 하기 때문이다. 그리고 반복하면서 처음에 선언해 둔 k를 출력한다. 그리고 k++을 통해서 숫자를 계속 늘려준다.
아래는 n에 5를 입력했을 때 출력값이다.
먼저 총 몇 줄을 출력할 지 나타내는 변수 n을 입력 받는다. 그리고 for문을 열어서 i = 1을 선언하고 for문이 한 루프 돌아갈 때마다 i를 1씩 증가시키고 n이 i와 같거나 i보다 작아질 때까지 반복한다. 그리고 첫번째 for문을 한 번 반복할 때마다 개행을 해준다.
첫 번째 for문 안에 for문이 하나 더 들어있다. j = 1을 선언하고 i가 n과 같거나 n보다 작아질 때까지 반복을 한다. 그 이유는 줄이 1줄 늘어났을 때 한 줄에 들어가는 숫자도 1개씩 늘어나야 하기 때문이다. 그리고 반복하면서 처음에 선언해 둔 k를 출력한다. 그리고 k++을 통해서 숫자를 계속 늘려준다.
아래는 n에 5를 입력했을 때 출력값이다.
2019년 4월 10일 수요일
오늘은 교과서 풀이
교과서 문제 풀이를 했다. 오늘 처음 들어본 건 Xcode다. Xcode도 IDE인데 맥 운영체제에서 사용할 수 있는 무료 통합 개발 환경이라고 한다. 예제를 하나 보니까 C언어 Hello World예제를 쓰는거랑 똑같이 소스코드가 작성되어 있는데 결과가 좀 길고 신기하게 생겼다. 이 긴 결과들의 의미가 궁금하지만 지금은 아니고 언젠가 알아봐야겠다.
그리고 펌웨어라는 개념도 새로 알게 됐다. 펌웨어는 소프트웨어랑 하드웨어가 결합된 형태라고 한다. 하드웨어 안에 소프트웨어가 탑제?되어 있는 형식인 것 같다. 펌웨어가 어떻게 생겼는지 한 번 보고싶다.
웹 전용 프로그래밍 언어에 대해서도 배웠는데 JSP, CSS, PHP, JavaScript 등이 있다. JSP는 오늘 처음 들어봤다. JSP는 Java Server Pages의 약자다. 보니까 서버를 만드는 언어인 것 같다. 앞으로 내가 1년 동안 보게 될 언어들이다. 친하게 지내야 겠다.
나머지 문제들은 다 알고 있는 문제들이었다. 시험 문제는 여기서 조금 변형해서 나온다고 하니까 교과서를 잘 보면 시험도 잘볼 수 있을 것 같다.
그리고 펌웨어라는 개념도 새로 알게 됐다. 펌웨어는 소프트웨어랑 하드웨어가 결합된 형태라고 한다. 하드웨어 안에 소프트웨어가 탑제?되어 있는 형식인 것 같다. 펌웨어가 어떻게 생겼는지 한 번 보고싶다.
웹 전용 프로그래밍 언어에 대해서도 배웠는데 JSP, CSS, PHP, JavaScript 등이 있다. JSP는 오늘 처음 들어봤다. JSP는 Java Server Pages의 약자다. 보니까 서버를 만드는 언어인 것 같다. 앞으로 내가 1년 동안 보게 될 언어들이다. 친하게 지내야 겠다.
나머지 문제들은 다 알고 있는 문제들이었다. 시험 문제는 여기서 조금 변형해서 나온다고 하니까 교과서를 잘 보면 시험도 잘볼 수 있을 것 같다.
2019년 4월 9일 화요일
C언어 배우기 (do while문)
오늘 올릴 게시물은 do while문에 관한 것이다.
do while문은 방학 때 최호성 강의에서도 이미 배운적이 있는 내용이다. 그런데 오늘 do while문에 대해서 올리게 된 이유는 오늘 do while문의 필요성을 느끼게 되었기 때문이다.
do while문과 while문의 차이점은 먼저 do while문은 조건식이 틀리든 안 틀리든 무조건 한 번은 실행문을 수행한다는 점이다. 그리고 do while문의 형식은
do
{
실행문;
} while(조건식);
이다. 여기서 중요한 건 while문과 다르게 do while문은 while뒤에 ;을 붙여야 된다.
이게 오늘 do while문을 사용해본 코드다. 처음엔 그냥 for문으로 해야겠다고 생각했다가 하다보니까 막히는 부분이 생겨서 생각이 난게 do while문이다. 코드를 보면 아까 말한 do while문의 형식처럼 do를 쓰고 실행문을 여러개 적은 다음에 끝에 while(조건식)을 써주고 ;으로 마무리한다.
솔직히 오늘 내용은 그렇게 대단한 발견 같은건 아닌데 do while문이 쓰일 곳이 있구나 라는 걸 느꼈다. 그리고 오늘은 코드가 머리에서 좀 잘 나온 날이라서 좋았다.
2019년 4월 8일 월요일
C언어 배우기 (백준 소수 구하기 문제)
이 코드는 백준에 올라와 있는 소수 구하기 문제를 풀기 위해서 작성한 코드다. 답은 맞게 나오는데 백준에 제출해 봤더니 시간 초과가 나와서 정답은 안나왔다.
문제 내용은 최소(M)와 최대(N)를 받아서 최소로 받은 수에서 최대로 받은 수까지 소수를 출력하는 것이다.
먼저 i를 최소인 M으로 오버라이트 해주고 최대인 N이 i보다 크거나 같을 때까지 반복한다. 여기서 i는 소수인지 아닐지 검사할 때 쓰는 수다. 그리고 i가 소수이면 i를 출력한다. 내가 소수를 검출해낸 방법은 i를 1부터 i까지 나눠 보면서 i를 j로 나눠서 나머지가 0이면 미리 선언했던 변수 k에 1씩 더한다. 일단 모든 수는 1과 자신으로 나누면 나머지가 0이기 때문에 마지막 if문에 k가 3보다 작을 때 소수인 i를 출력하는 방식이다.
뭔가 내가 생각하면서 쓴 소스코드를 글로 표현하려니까 좀 어려운 것 같다.
다음엔 이 문제를 시간 초과가 안나오게 다듬어서 백준에 제출해야 겠다.
문제 내용은 최소(M)와 최대(N)를 받아서 최소로 받은 수에서 최대로 받은 수까지 소수를 출력하는 것이다.
먼저 i를 최소인 M으로 오버라이트 해주고 최대인 N이 i보다 크거나 같을 때까지 반복한다. 여기서 i는 소수인지 아닐지 검사할 때 쓰는 수다. 그리고 i가 소수이면 i를 출력한다. 내가 소수를 검출해낸 방법은 i를 1부터 i까지 나눠 보면서 i를 j로 나눠서 나머지가 0이면 미리 선언했던 변수 k에 1씩 더한다. 일단 모든 수는 1과 자신으로 나누면 나머지가 0이기 때문에 마지막 if문에 k가 3보다 작을 때 소수인 i를 출력하는 방식이다.
뭔가 내가 생각하면서 쓴 소스코드를 글로 표현하려니까 좀 어려운 것 같다.
다음엔 이 문제를 시간 초과가 안나오게 다듬어서 백준에 제출해야 겠다.
2019년 4월 4일 목요일
정보 처리 기능사 공부1
원래 프로그래밍 관련된 글만 올리고 싶었는데 요즘 그게 안된다. 핑계라고 할 수도 있지만 정보 처리 기능사 공부를 하거나 전공 동아리 숙제를 하느라 코드를 짤 시간이 없다. 그래서 오늘은 정보 처리 기능사 공부를 한 내용을 복습 겸 적어보려고 한다.
오늘 배웠던 건 DOS랑 UNIX에 관한 내용이다. DOS는 Disk Operating System의 약자다. 이름 그대로 디스크 운영 체제라고 한다. 그리고 UNIX도 운영체제다.
DOS에서 정보를 저장하는 공간을 디렉토리(Directory)라고 한다. 그리고 DOS는 여러 명령어를 이용해서 디스크와 디렉토리를 관리한다. DIR이라는 명령어를 통해서 디렉토리 안에 있는 파일과 하위 디렉토리의 목록을 볼 수 있다. 그리고 이런 디렉토리를 만들기 위해서는 MD라는 명령어를 사용하고 디렉토리를 지우기 위해서는 RD라는 명령어를 사용한다. 영어를 몰랐다면 MD를 그냥 외웠을텐데 영어를 배우긴 했으니까 느낌으로 Make Directory, Remove Directory라는게 느껴져서 지금까지의 영어 공부가 헛되지 않았다는 느낌을 줬다. 이외에도 FIND(문자열 검색), SORT(정렬), VER(버전 확인) 같은 명령어도 공부했다.
그리고 UNIX는 C언어 기반으로 만들어진 운영 체제라서 이식성이 좋고 확장성이 좋다. 그리고 내가 알기로는 UNIX를 만들기 위해서 C언어가 만들어진 거라고 들었다. 아마도? UNIX도 DOS처럼 다양한 명령어를 가지고 있다.
사실 아직 UNIX 부분을 다 본게 아니라서 별로 정리를 못했다. 내일은 코드를 짜거나 아니면 정보 처리 기능사 내용을 좀 더 제대로 공부해서 글을 올려야 겠다.
오늘 배웠던 건 DOS랑 UNIX에 관한 내용이다. DOS는 Disk Operating System의 약자다. 이름 그대로 디스크 운영 체제라고 한다. 그리고 UNIX도 운영체제다.
DOS에서 정보를 저장하는 공간을 디렉토리(Directory)라고 한다. 그리고 DOS는 여러 명령어를 이용해서 디스크와 디렉토리를 관리한다. DIR이라는 명령어를 통해서 디렉토리 안에 있는 파일과 하위 디렉토리의 목록을 볼 수 있다. 그리고 이런 디렉토리를 만들기 위해서는 MD라는 명령어를 사용하고 디렉토리를 지우기 위해서는 RD라는 명령어를 사용한다. 영어를 몰랐다면 MD를 그냥 외웠을텐데 영어를 배우긴 했으니까 느낌으로 Make Directory, Remove Directory라는게 느껴져서 지금까지의 영어 공부가 헛되지 않았다는 느낌을 줬다. 이외에도 FIND(문자열 검색), SORT(정렬), VER(버전 확인) 같은 명령어도 공부했다.
그리고 UNIX는 C언어 기반으로 만들어진 운영 체제라서 이식성이 좋고 확장성이 좋다. 그리고 내가 알기로는 UNIX를 만들기 위해서 C언어가 만들어진 거라고 들었다. 아마도? UNIX도 DOS처럼 다양한 명령어를 가지고 있다.
사실 아직 UNIX 부분을 다 본게 아니라서 별로 정리를 못했다. 내일은 코드를 짜거나 아니면 정보 처리 기능사 내용을 좀 더 제대로 공부해서 글을 올려야 겠다.
2019년 4월 2일 화요일
C언어 배우기 (수업시간 내용)
오늘 6, 7교시에 프로그래밍을 했다. 프로그래밍 시간에 여러 예제를 풀었는데 그중에 가장 헤맸던 평균 구하기 문제에 대해서 글을 올리기로 했다.
사실 보통 평균 구하기 문제는 scanf로 입력받고 입력받은 수들을 더해서 입력받은 수들의 갯수 만큼 나눠주면 쉽게 구하는 문제인데 오늘 했던 평균 구하기 문제는 처음에 입력받을 수들의 갯수를 입력받고 평균을 구하는 문제였다. 아래의 소스코드가 최종적으로 구한 답인데 이렇게 되는데 꽤 시간이 걸렸다. 왜냐하면 이걸 굳이 배열을 이용해서 풀려고 했기 때문이다. 처음에 했던 생각은 먼저 입력받을 수들의 갯수를 입력받고 그 입력받은 값으로 int형 배열을 선언하려고 했다.(예 : int a[i]) 그리고 배열을 선언하고 for문을 열어서 배열에 값들을 입력받으려고 했는데 오류가 나서 결국 다시 생각해서 이 소스코드를 작성했다.
이렇게 배열로 삽질을 했으니 배열에 대해서 다시 공부를 해봤다. 그리고 내가 썼던 소스코드가 왜 오류를 냈는지 바로 알 수 있었다. 배열의 길이를 선언할 때는 상수만 사용해야 했기 때문이다. 그런데 내 기억으로는 어디선가 인덱스 넣는 대괄호 안에 변수를 넣는 걸 본적이 있는 것 같아서 헷갈린다. 아니면 처음에 배열을 선언할 때만 배열의 길이를 상수로 적어야 하고 그냥 인덱스 넣어줄 때는 변수가 들어가도 되는 것일지도 모른다. 이거에 대해서는 좀 더 알아봐야 겠다. 그리고 배열을 조사하면서 또 알게된 점은 C 컴파일러가 배열의 길이를 전혀 신경쓰지 않는다는 점이다. 예를 들면 배열의 길이를 3으로 정해서 인덱스는 0, 1, 2까지 밖에 없는데 인덱스를 3으로 해서 초기화하면 그게 그대로 적용이 된다.
오늘 아래 문제를 풀면서 배열로 삽질을 좀 했는데 삽질도 도움이 된다는 걸 몸소 느꼈다.
사실 보통 평균 구하기 문제는 scanf로 입력받고 입력받은 수들을 더해서 입력받은 수들의 갯수 만큼 나눠주면 쉽게 구하는 문제인데 오늘 했던 평균 구하기 문제는 처음에 입력받을 수들의 갯수를 입력받고 평균을 구하는 문제였다. 아래의 소스코드가 최종적으로 구한 답인데 이렇게 되는데 꽤 시간이 걸렸다. 왜냐하면 이걸 굳이 배열을 이용해서 풀려고 했기 때문이다. 처음에 했던 생각은 먼저 입력받을 수들의 갯수를 입력받고 그 입력받은 값으로 int형 배열을 선언하려고 했다.(예 : int a[i]) 그리고 배열을 선언하고 for문을 열어서 배열에 값들을 입력받으려고 했는데 오류가 나서 결국 다시 생각해서 이 소스코드를 작성했다.
이렇게 배열로 삽질을 했으니 배열에 대해서 다시 공부를 해봤다. 그리고 내가 썼던 소스코드가 왜 오류를 냈는지 바로 알 수 있었다. 배열의 길이를 선언할 때는 상수만 사용해야 했기 때문이다. 그런데 내 기억으로는 어디선가 인덱스 넣는 대괄호 안에 변수를 넣는 걸 본적이 있는 것 같아서 헷갈린다. 아니면 처음에 배열을 선언할 때만 배열의 길이를 상수로 적어야 하고 그냥 인덱스 넣어줄 때는 변수가 들어가도 되는 것일지도 모른다. 이거에 대해서는 좀 더 알아봐야 겠다. 그리고 배열을 조사하면서 또 알게된 점은 C 컴파일러가 배열의 길이를 전혀 신경쓰지 않는다는 점이다. 예를 들면 배열의 길이를 3으로 정해서 인덱스는 0, 1, 2까지 밖에 없는데 인덱스를 3으로 해서 초기화하면 그게 그대로 적용이 된다.
오늘 아래 문제를 풀면서 배열로 삽질을 좀 했는데 삽질도 도움이 된다는 걸 몸소 느꼈다.
2019년 4월 1일 월요일
API 조사
오늘 전공 동아리 숙제중에 하나인 API알아보기를 해봤다. API를 이해하기 위해서 유튜브에 생활코딩이라는 채널에서 약 25분짜리 영상을 봤다. 상당히 이해하기 좋게 잘 설명을 해주는 것 같다.
API는 Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스라고 한다. 그리고 영상에 API랑 같이 UI라는 개념도 나와있었다. UI는 User Interface, 사용자인터페이스라고 한다. UI는 사람과 컴퓨터 사이에서 의사소통을 할 수 있도록 해주는 인터페이스다. 예를 들면 키보드의 백스페이스키나 엔터키 같은 거는 하드웨어적 UI이고 브라우저에 뒤로가기 버튼이나 닫기 버튼 같은 것은 소프트웨어적 UI이다.
브라우저에서 검색창에 javascript:alert("Hello world"); 를 입력하면 화면 한 가운데에 Hello world와 함께 경고창이 뜬다. 근데 이런 경고창을 띄우기 위해서는 화면 가운데의 좌표를 알아내서 그곳에 위치하도록 설정을 해줘야 되고 경고창에 나와있는 !표시도 넣어주어야 한다. 하지만 alert라는 명령어 하나 만으로 저 모든 과정을 퉁칠 수 있다. 여기서 alert라는 명령어를 API라고 한다. 이런 API는 크롬, 파이어폭스, 인터넷 익스플로러 같은 브라우저를 만든 개발자들이 만들어 놓은 것이다. API의 정의는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 웹 개발자들은 alert같은 API를 응용하여 브라우저의 기능을 제어한다.
API는 Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스라고 한다. 그리고 영상에 API랑 같이 UI라는 개념도 나와있었다. UI는 User Interface, 사용자인터페이스라고 한다. UI는 사람과 컴퓨터 사이에서 의사소통을 할 수 있도록 해주는 인터페이스다. 예를 들면 키보드의 백스페이스키나 엔터키 같은 거는 하드웨어적 UI이고 브라우저에 뒤로가기 버튼이나 닫기 버튼 같은 것은 소프트웨어적 UI이다.
브라우저에서 검색창에 javascript:alert("Hello world"); 를 입력하면 화면 한 가운데에 Hello world와 함께 경고창이 뜬다. 근데 이런 경고창을 띄우기 위해서는 화면 가운데의 좌표를 알아내서 그곳에 위치하도록 설정을 해줘야 되고 경고창에 나와있는 !표시도 넣어주어야 한다. 하지만 alert라는 명령어 하나 만으로 저 모든 과정을 퉁칠 수 있다. 여기서 alert라는 명령어를 API라고 한다. 이런 API는 크롬, 파이어폭스, 인터넷 익스플로러 같은 브라우저를 만든 개발자들이 만들어 놓은 것이다. API의 정의는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 웹 개발자들은 alert같은 API를 응용하여 브라우저의 기능을 제어한다.
피드 구독하기:
덧글 (Atom)