2019년 3월 28일 목요일

마크업과 마크다운

 드디어 전공 동아리 숙제가 나왔다. 지금까지 뭘 해야 될지 몰라서 갈팡질팡하고 있었는데 드디어 할게 생겼다. 그리고 오늘 동아리 백엔드를 맡고 있는 형한테 들은게 있는데 프론트엔드는 백엔드를 안 해도 되는데 백엔드는 프론트엔드도 알아야 되고 네트워크도 알아야 되고 뭐 다 알아야 된다는 것이었다. 그걸 듣고 힘들겠다는 생각도 났지만 그만큼 다재다능해질 수 있다는 얘기니까 그런 점은 좋았다.
 본론으로 들어가서 오늘 받았던 숙제 내용은 마크다운과 github에 대해서 조사를 하고 할 수 있는 만큼 정리를 하라는 숙제였다. 우선 마크다운을 조사하다 보니까 마크다운이 마크업 언어의 일종이라는 것을 알게 됐다. 근데 마크업 언어의 뜻도 제대로 모르는데 마크다운을 배운다는게 말이 안된다고 생각이 되서 먼저 마크업에 대해서 알아봤다. 마크업은 문서가 화면에 표시되는 형식을 나타내거나 데이터의 논리적인 구조를 명시하기 위한 규칙들을 정의한 언어의 일종이라고 한다. 사실 아직 제대로 이해하지는 못했지만 결국 PC랑 서버가 주고받는 정보를 우리가 볼 수 있는 가상의 공간인 인터넷에 표시할 수 있게 해주는 언어라는 말인 것 같다. 이런 마크업 언어에 HTML, 마크다운 같은게 있는 것이다.
 마크다운도 HTML과 비슷한 마크업 언어인데 마크다운으로 작성하면 더 간결하게 작성할 수 있고 HTML 같은 다른 문서형태로 변환도 가능하다. 마크다운의 장점은 앞서 말한 간결하다는 점, 다양한 형태로 변환이 가능하다는 점, 텍스트로 저장되서 용량이 적다는 점, 지원하는 프로그램과 플랫폼이 다양하다는 점 등이 있다. 반면에 단점도 있는데 먼저 비표준이라는 점이고 비표준이 이기 때문에 도구에 따라서 변환방식이나 생성물이 다르다는 단점이 있다. 그리고 모든 HTML 마크업을 대신하지 못한다는 단점도 있다.
 아직은 자료를 보고 내용을 정리할 수 없지만 동아리 활동 열심히 하다보면 자료 안보고도 내용을 정리할 수 있게 될테니까 열심히 해야겠다.

2019년 3월 27일 수요일

C언어 배우기 (마지막 별찍기)

오늘 게시할 내용은 주말 동안 하고, 학교에서도 했던 별찍기들에 관한 내용이다. 그리고 이번 게시물이 마지막 별찍기 게시물이 될 것 같다. 왜냐하면 원래 백준 별찍기 문제를 다 풀 때까지 올리려고 생각을 했는데 그러면 너무 별찍기만 올릴 것 같기 때문이다. 그래서 내일부터는 별찍기가 아니라 다른 내용으로 올리려고 생각하고 있다.
 저번 주말부터 오늘까지 별찍기 문제를 5문제 정도 푼 것 같다. 한 번 풀리니까 계속 잘 풀렸다. 사진으로 올린 코드는 숫자(n)를 입력하면 2 x n - 1줄 만큼 다이아몬드 모양으로 별을 찍는 코드다. 개인적으로 제일 공들였고 어려운 코드였다고 생각해서 대표로 넣었다. 전에 올렸던 별찍기는 if문 없이 for문만 이용해서 풀었는데 이번 별찍기는 중간부터 규칙이 달라지기 때문에 if문까지 포함해서 작성했다.
 그리고 별찍기를 계속하면서 느낀건 규칙만 찾으면 되는 문제인데 그 규칙 찾기가 너무 힘들다는 것이다. 아직은 조금 쉬운 별찍기를 해서 규칙찾기가 엄청 어렵지는 않지만 좀 어려운 별찍기를 하면 하루종일 규칙만 찾다가 하루가 끝날 것 같다.
 별찍기가 우려먹기 좋은 소재이고 별찍기하면서 배우는 것도 많지만 계속 별찍기만 올리면 나도 지겨워서 못할 것 같다.
 내일부터 다른 소재로 게시물을 올릴 거지만 별찍기도 틈틈이 하면서 백준 별찍기 문제를 다 풀어봐야겠다.

2019년 3월 26일 화요일

방과후 HTML 첫 시간

오늘 8, 9, 10교시에 방과후 html 첫 수업을 했다. 재미없고 지루하면 어떡하나 생각했었는데 생각보다 재밌었다. 오늘은 첫 수업이기 때문에 아주 기초적인 것들만 했다. 처음 해봤을 때 느낀건 html은 c언어나 c++, 파이썬 같은 것들이랑은 코드를 작성하는 것부터 전혀 다르다는 것이었다. c언어처럼 ;도 안붙이고 변수 선언 같은 것도 없었다. 아직 첫 수업이라서 없는 것일 수도 있지만 왠지 없을 것 같다.
 배운 건 먼저 visual studio가 아니라 visual studio code라는 프로그램을 이용해서 만든다는 것이다. 아직은 차이점을 모르겠다. 그리고 html은 처음에 !를 적고 탭키를 누르면 기본적인 틀이 저절로 생긴다.
 기본적인 틀의 처음에는 title이 나오는데 title과 /title 사이에 아무 내용이나 적으면 그 내용이 웹의 이름이 된다.
 그 다음엔 body가 나오는데 이 부분이 내가 만든 사이트에 나올 내용이다. h1과 /h1사이에 시간이란...이라는 단어가 적혀있는데 이러면 사이트에 두껍고 큰 글씨로 시간이란...이 제목으로 나타난다. 그리고 h1 h2 h3 이렇게 숫자가 커질수록 글씨의 두께와 크기는 작아진다. 숫자는 최대 6까지 가능하다. 그리고 p가 나오는데 p는 본문을 적는 것이다. p를 한번 쓰고 다음 줄에 바로 또 p를 쓰면 한 줄 개행되고 문장이 나온다. 중간에 br은 한 줄 개행을 뜻한다. 마지막으로 img가 있는데 얘는 말 그대로 이미지를 나타낸다.

 오늘은 좀 너무 형식적으로 적은 느낌이 있는데 배우다보면 형식적인게 아니라 좀 획기적인 내용이 나올 수 있을것 같다.
 첫 수업의 느낌은 처음이라 그런거일지도 모르지만 나름 흥미로웠다. 이런 마음이 계속 유지된다면 참 좋을 것 같다.

2019년 3월 25일 월요일

C언어 배우기 (또 별찍기)

오늘도 또 별찍기다. 웬만하면 당분간은 별찍기만 올리게 될 것 같다. 이번 별찍기 문제는 주말에 집으로 노트북 가져가서 푼 문제다. 문제는 전 문제랑 다르게 피라미드를 거꾸로 출력하는 문제다. 이번 문제의 답을 구할 수 있었던 건 전에 답을 봤던 피라미드 문제에서 힌트를 얻어서 구할 수 있었다. 피라미드 문제에서 얻었던 구체적인 내용은 for문에서 j를 증가하게 두고 옆에 반복할 횟수를 구하는 식을 넣어준다는 것이다.
 오늘은 간만에 나 혼자서 답을 구해내서 기분이 좋다.



---------------------------------------------------------------------------------------------------
별찍기 외에 오늘 알게 된 것이 있는데 바로 3항 연산자다. 3항 연산자를 쓰는 방법은
(조건식) ? 참일 때 실행문 : 거짓일 때 실행문
이다. 뭔가 방학 때 최호성의 C프로그래밍에서 이미 배운 것 같지만 오늘 재훈이가 3항 연산자로 문제를 풀어서 다시 떠올랐다. 그리고 비트 연산자의 사용법도 알게 됐다.

저번주 주간 목표가 C언어 교재 한 번 쭉보기 였는데 무리였던 것 같다. 그냥 천천히 읽어서 4월 중반 전까지 한 번 다볼수 있도록 해야겠다.

2019년 3월 22일 금요일

C언어 배우기 (별찍기 2)

.오늘은 학교에서 못썼고 집으로 가져온 노트북은 네트워크 연결이 안되고 집 컴퓨터는 켜지지가 않아서 휴대폰으로 쓰게됐다. 오늘 12교시 프로그래밍 시간에 했던 것도 별찍기 였다. 결론부터 말하자면 또 답을 못구했다. 오늘은 저번 별찍기랑 다르게 5를 입력하면 피라미드처럼 별이 찍히게 해야한다. 코드를 사진에 나온것처럼 작성했더니 조금 비슷한 것 같지만 다른 답이 나왔다. 이번 별찍기는 저번 별찍기랑 다르게 중첩 for문을 써봤지만 조건식 같은걸 잘못 작성한 것 같다.  그리고 요즘 어려운 문제를 풀어서 그런지 몇시간 동안 해도 한 문제도 못 풀때가 많아진 것 같다. 이번 별찍기 문제는 주말동안 꼭 답을 구해봐야겠다.

2019년 3월 20일 수요일

C언어 배우기 (별찍기 분석)

잘 안보이지만 저번 별찍기 문제의 답에 하나하나 주석을 달아봤다.
하나하나 주석 다는건 재훈이가 해보라고 해서 해봤는데 아직 효과가 있는지는 모르겠다.
그래도 한다고 안 좋을건 없으니까 계속 해봐야 겠다.
우선 내가 어제 만들었던 소스코드랑 다른 점은 첫 번째 for문 안에 for문이 2개 들어가 있다는 점이다. 그리고 첫 번째 for문 안에 들어있는 2개의 for문이 둘 다 int형 변수 j를 선언하고 1로 정의 한다. 그런데 조건식을 다르게 해서 답을 구해낸다. 이런 걸 보면 어제 내가 했던 방식(두 번째 for문 안에 if문 사용)으로 해도 잘만 하면 답이 나올 것 같다.

이번에 별찍기 문제 답을 분석하면서 새롭게 알게 된게 있다. 먼저 for문에서 변수를 선언, 정의 할 수 있다는 점이다. 그리고 지금까지 for문을 두개 연달아 붙인다는 걸 생각해 본적이 없는데 이번 별찍기 문제 답을 보면서 좀 더 다양한 생각을 해야 겠다고 느꼈다.

C언어 배우기 (별찍기편)

오늘은 별찍기 문제를 풀어보았다.
문제의 답을 얻진 못했지만 답에 근접한 답을 얻었다.
여러가지 삽질을 했다. 답답하지만 이 또한 경험이라고 생각한다.

문제는
첫째 줄에는  N둘째 줄에는  N-1, ..., N번째 줄에는  1개를 찍는 문제
다.

원래 5를 입력하면 
*****
 ****
  ***
   **
    *
이런 식으로 별들이 오른쪽으로 정렬된 채로 계단 형식으로 출력돼야 한다.
근데 내가 만든 소스코드에 5를 입력하면 별들이 왼쪽으로 정렬된 계단이 출력된다.

내가 만든 소스코드는
#include <stdio.h>

int main()
{
    int n, i, k;
    scanf("%d", &n);
    for(i = 0; n > i; i++)
    {
        for(k = n; k >= 1; k--)
        {
            if(k - i > 0)
            {
                printf("*");
            }
            else printf(" ");
        }
        printf("\n");
    }

}
이거다. 
문제의 답을 구하지 못했기 때문에 이 문제의 답을 검색해본 다음에 그 답을 하나하나 분석해야 겠다. 내일은 문제의 답을 분석해 본 다음에 별찍기 다음 문제를 풀어봐야 겠다.
삽질을 많이 했지만 충분히 좋은 삽질이었던 것 같다.

2019년 3월 17일 일요일

C언어 배우기 (1)

#include <stdio.h>

int main()
{
    int n1, n2;
    int sum, minus, mul;
    double div;
    system("color 1F");
    puts("=================================================================");
    puts("====      ====  =  =======   ======  ========          ===  =====");
    puts("========  ==    =  ======  ==  ====  ================  ===  =====");
    puts("=======  =====  =  ====  =====  ===     ============  ====  =====");
    puts("=====  =====    =  ===  =======  ==  ==============  =====  =====");
    puts("==============  =  ================  =============  ======  =====");
    puts("==============  =  =====  =======================  =======  =====");
    puts("=================  =====  =======================================");
    puts("========================              ===========================");
    puts("======================================C로 만든 간단 계산기=======");
    _getch();
    system("cls");

    printf("input 2 data : ");
    scanf("%d %d", &n1, &n2);

    sum = n1 + n2;
    minus = n1 - n2;
    mul = n1 * n2;
    div = (double)n1 / n2;

    printf("\nn%d + %d = %d\n", n1, n2, sum);
    printf("%d - %d = %d\n", n1, n2, minus);
    printf("%d * %d = %d\n", n1, n2, mul);
    printf("%d / %d = %.2f\n\n", n1, n2, div);
    system("pause>nul");
    return 0;
}

오늘 배운 건 계산기 만들기다. 계산기를 만드는 과정에서 시스템 함수의 여러 기능을 알게 됐다. (color를 통해서 콘솔창의 색깔을 바꾸는 것, cls로 콘솔창에 써있는 것을 싹 지우는 것 등) 그리고 원래 알고 있었지만 형변환을 다시 되새길수 있었다.

2019년 3월 13일 수요일

C언어 수업 세 번째(3월 14일 목요일 1교시)

이번 수업 시간에는 프로그래밍 언어의 분류를 배웠다.
프로그래밍 언어는 기계어, 어셈블리어, 고급언어로 분류되어있다.
사람이 알아듣기 쉬운 말일수록 고급언어라고 한다. 그리고 기계어와 어셈블리어는 저급언어라고 한다.
프로그래밍 언어의 분류 다음에 배운 것은 IDE(Integrated Development Environment)이다.
IDE라는 것은 프로그램 개발에 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어이다. 예를 들면 비주얼 스튜디오, Dev c++, 코드블럭, 넷빈즈 등등이 있다.
옛날에는 소스파일을 빌드할 때 전처리기 따로, 컴파일러 따로, 링커를 따로 실행해서 했다고 한다.  역시 세상의 발전은 놀랍다고 느꼈다.
C표준에서 함수의 값을 반환하도록 되어있다고 한다. 그래서 원래는 void를 main함수의 자료형으로 사용했었는데 이제부터 int를 사용하는 것으로 습관을 만들어야 겠다.

IDE는 정말 좋은 프로그램이다. 전처리기, 컴파일러, 링커를 모두 합쳐놓은 프로그램이기 때문이다. 그리고 컴파일러가 정말 친절한 프로그램이라는 것을 느꼈다.

2019년 3월 12일 화요일

C언어 수업 두 번째(3월 12일 화요일 7교시)

이번 두 번째 시간에는 printf를 이용한 예제를 풀어보았다.
개행(\n)을 해서 입력하는 방법이나 공간을 두고 문자를 입력하는 방법(%숫자d) 등을 이용했다.
이 과정에서 서식 문자(%s, %d, %f 등등)의 의미를 찾아보면서 머리 속에 새겨두었다.
또한 자주 헷갈렸던 큰따옴표와 작은따옴표의 의미도 완벽히 깨달았다.
큰따옴표 : 문자열
작은따옴표 : 문자
그리고 컴퓨터 구조에 대해서도 공부했다.
비트는 컴퓨터의 정보를 처리하는 가장 작은 단위이고 1비트당 0과 1 두개의 정보를 가진다. 그리고 바이트는 1바이트당 8비트다. 그래서 처리할 수 있는 정보의 수는 2의 8제곱이다.
윈도우 32비트는 쓸 수 있는 메모리 주소의 사이즈가 4기가 바이트다. 그래서 만약에 32비트 윈도우로 16기가 바이트짜리 램을 사용하면 나머지 12기가 바이트는 사용하지 못한다.

이번 시간에는 printf에 대한 예제와 함께 간단한 컴퓨터 구조에 대해서 배워보았다. 마지막에 적었던 16기가 바이트 램 얘기는 처음 들어본 얘기라서 매우 신기했다.

2019년 3월 11일 월요일

C언어 수업 첫 번째(3월 12일 화요일 6교시)

이번 시간에는 C언어의 기본을 배웠다.
프로그래밍을 하는 데 필요한 프로그램인 코드블럭을 설치 했다.
코드블럭을 켜고 처음 했던 것은 가장 기본인 Hello World 예제였다.
그리고 내가 입력한 코드가 프로그램으로 실행되는 과정을 배웠다.
-과정
 1. 내가 작성한 코드의 소스 파일을 전처리한다.
 2. 전처리한 소스 파일을 컴파일해서 개체 파일로 만든다.
 3. 컴파일한 개체 파일을 링크해서 프로그램(exe파일)로 만든다.
이 모든 과정을 통틀어서 빌드라고 한다.
그리고 이 과정을 배우는 과정에서 전처리기와 헤더 파일의 의미를 알게 됐다.

프로그래밍의 기본기를 다질 수 있는 유익한 시간이었다.