2019년 7월 7일 일요일

인터넷 속 HTML코드 보기

일단 Chrome 브라우저를 다운로드해줍니다.
(다른 것도 될 수는 있는데 일단 내가 Chrome을 쓰기때문에)
크롬 다운로드
눈에 보이는 문구 중 신기한 효과를 발견했다면 마우스로 우클릭 > 검사
를 누른다면 화면 오른쪽에 HTML 코드들이 보이는데
코드 위에 마우스를 가져다 대면 그 코드가 화면 중 어디를 나타내고
무엇을 의미하는지 알 수 있습니다.
이런 식으로 신기했던 효과들이 있다면 검사를 통해 HTML 코드를 구경해보고 나중에
연습하여 자신만의 방식으로 써먹으면 좋습니다.

HTML이용 구글 블로그 접기/펼치기

구글 블로그 관리 화면 > 테마 > HTML 편집

아래의 스크립트를 <head>태그 안에 붙여넣고 테마 저장
<script language="JavaScript" type="text/javascript">
function layer_toggle(obj) {
  if (obj.style.display=='none') obj.style.display = 'block';
  else if (obj.style.display=='block') obj.style.display = 'none';
}
</script>
그 다음 글 작성을 시작하고 HTML을 통한 글쓰기로 넘어가서
<div style="display: block" id="mms-1">
   <a onclick="layer_toggle(document.getElementById('mms-1'));layer
_toggle(document.getElementById('mms-2')); return false;" href="#">
      <p>제목 펼치기</p>
   </a>
</div>
<div style="display: none" id="mms-2">
   <a onclick="layer_toggle(document.getElementById('mms-1')); layer
_toggle(document.getElementById('mms-2')); return false;" href="#">
      <p>제목 닫기</p>
   </a>
   <p> 내용 </p>
</div> 
이런 식으로 붙여넣고 mms부분을 자신이 원하는 대로 설정하여 사용하면 됨

HTML 글자 색 지정

글자색 직접 지정
<span style="color:원하는 색깔코드"> 내용 </span>

본문의 태그인 body 속 글자 색 변경
body { color:원하는 색깔코드; }

배경색 변경
<body style="background-color:원하는 색깔코드">

약간 큰 문자 출력
<h3> 내용 </h3>

2019년 7월 1일 월요일

[컴퓨터공학]프로그래밍#15(구조체)

*구조체
여러 종류의 변수를 모아서 새로운 데이터 타입 정의
하나의 주제로 연관된 여러 개의 데이터를 모아서 사용할 때 유용
학생정보, 도서정보, 생산제품정보 등 여러가지 데이터가 하나의 정보가 되는 경우 사용함

*구조체 선언
생성하고자 하는 구조체의 타입을 선언함
선언하고자 하는 구조체의 이름과 구조체 내에 포함하고 싶은 변수를 선언
구조체 선언은 컴파일러에게 구조체 정보를 알려 주는 것
실제 메모리에 생성되지 않음 (실제 생성은 구조체 변수 정의에서 생성됨)

*구조체 변수 정의 및 사용
구조체 변수 정의
실제 코드상에서 구조체를 사용하기 위해서는 구조체 변수를 정의해야 함
struct student s1 = {“Jin”, 0x12345678, “aa”};

구조체 변수 사용
s1.name[0] = ‘H’;
s1.studentId = 20196502;
printf(“%s”, s1.email);

*구조체의 활용
1.여러 개의 관련된 데이터를 하나로 묶음
관련된 데이터를 하나로 묶으면 관리 및 사용하기 편리함
10명의 학생 정보를 배열을 사용하는 경우
학생 1명의 정보가 하나의 구조체로 묶여 있어 이해가 편리함
배열을 사용하는 경우 배열의 인덱스가 몇 번째 학생인지를 결정하며, 정보 입 력 및 사용시 항상 주의해야함

2.여러가지 데이터 정보를 함수 파라미터로 전달할 때 구조체 활용
10개의 int 형 변수를 전달하려면 10개의 파라미터를 기입해야 함
10개의 변수를 1개 구조체로 생성하여 전달하면 파라미터 개수를 줄일 수 있음
일반적으로 구조체로 묶이는 변수는 서로 연관관계가 있는 변수임
Call by reference (주소 전달 방식), call by value (값 전달 방식) 을 쉽게 선택하여 다수의 변수를 전달할 수 있음
구조체 변수를 복사 방식으로 전달 가능
➢ void func(struct student a);
구조체 변수를 주소 전달 방식으로 전달 가능
➢ void func(struct student *a);
구조체 내에 배열이 있는 경우도 복사 방식 전달 가능함
➢ 구조체가 아닌 경우 항상 주소만 복사함

3.Linked list 등 고급 데이터 표현 방식 사용시 활용
많은 정보를 효율적으로 저장하고 사용하기 위해서는 linked list 등과 같은 고급 데이터 표현 방식을 사용함
일반적으로 배열은 프로그램 실행 도중 필요에 따라 크기를 증가시키거나 축소하기 어려움
이와 같은 문제를 해결하기 위해 구조체를 이용하여, 새로운 데이터 추가가 필요한 경우 메모리에서 구조체를 만큼 메모리를 할당 받아 기존의 데이터 에 연결함 (Linked list)
사용이 종료된 데이터는 list 에서 연결을 끊고, 해당 구조체용 메모리를 운 영체제에 반납함

*함수로 구조체 전달 예제

[컴퓨터공학]프로그래밍#14(함수)

*함수 (Function)
하나의 특정 작업을 수행하도록 독립적으로 설계된 프로그램 코드의 단위
C언어 (절차지향 언어)는 함수를 건축물 벽돌처럼 사용
만들어진 함수를 쉽게 재사용(re-use) 가능
입력 / 출력만 알면 내부는 블랙박스처럼 모르고 사용 가능

*함수의 필요성
반복 작업 용이
함수를 이용하여 작성하면 여러 번 반복 사용이 용이

재사용성(reusability) 용이
printf(), scanf() 함수를 쉽게 여러 번 사용이 가능함
C언어에서 다양한 함수를 제공

가독성(readability) 증대
함수는 입력과 출력으로 동작하는 일종의 블랙박스와 같이 동작
각 함수의 세부 내용을 이해할 필요 없음
함수를 이용하면 소프트웨어의 흐름을 이해하기 용이함

*함수 선언
함수도 변수처럼 데이터 타입 정보를 포함하고 있음
함수를 사용하기 전에 컴파일러에게 어떤 데이터 타입을 사용하는지 알림
stdio.h 파일 내에 printf(), scanf()의 함수 선언이 포함되어 있음
printf(), scanf() 사용전에 #include <stdio.h> 추가해야 함

*함수 정의
함수가 실행되는 경우 동작하는 코드 작성

*함수 호출
정의한 함수를 실제 호출하여 사용함

*함수의 인자 전달
함수 호출 시 전달인자가 호출된 함수로 복사됨
호출된 함수내에 새로운 변수(저장 공간)이 만들어지고 값만 복사됨

*함수 호출 시 변수 저장
스택 (Stack) 메모리
함수 별 저장 공간을 제공하기 위해 사용하는 데이터 구조
아래에서 위 방향으로 커지며, 후입선출 (last in – first out) 방식으로 동작
함수가 종료되면 해당 메모리 공간은 제거됨
새로운 함수가 호출되면 스택에 전용 공간을 할당함

*함수 호출 시 값 전달 방법
값에 의한 호출 (call-by-value)
인자의 값이 호출한 함수의 Local 변수로 복사하여 사용
인자의 데이터 사이즈가 큰 경우 복사 오버헤드 큼 (메모리, 복사 시간)
복사본을 사용하기 때문에 동일한 변수를 여러 함수에서 접근해 발생하는 문제 방지 가능

참조에 의한 호출(call-by-reference)
인자의 주소 값을 호출한 함수의 Local 변수로 복사하여 사용
주소 정보를 이용하여 원본에 직접 접근 가능
구조체, 배열 등 큰 데이터 타입을 매개변수로 활용하는 경우 사용
기본 데이터 타입의 값을 호출한 함수 내에서 변경할 때 사용

포인터 reference

참조 reference

*재귀함수
순환(recursion) 함수
함수 수행 도중 자기 자신 다시 호출하여 문제를 해결하는 기법
재귀함수 (Recursion Function) 이라고도 부름
순환 함수가 종료하는 조건이 반드시 필요함
종료 조건이 없거나 잘못되는 경우 메모리 오버플로우 발생

재귀호출출(recursive call)
함수 안에서 함수 자기자신을 호출하는 방식

일반적으로 이해가 어렵고, 오류 발생 가능성이 높아 사용 X

2019년 6월 30일 일요일

[컴퓨터공학]프로그래밍#13(포인터와 참조자)

*포인터
주소를 저장하는 변수
*p : 해당 주소에 있는 값
p : 포인터에 저장되어 있는 주소 값

다음과 같은 데이터 저장 상황에서의 변수 값

i = 10
&i = 0x100
p : 0x100
&p : 0x200
*p : 10
p++ : 104
sizeof(p) : 4
sizeof(*p) : 1

*포인터 관련 연산자
간접 참조 연산자 (*)
포인터에 저장된 주소에 저장된 값을 참조
주소 연산자 (&)
해당 변수의 주소 (Address)
포인터 증감 연산자 (++, --, +, -)
선언된 타입의 크기 만큼 주소가 증가함


*const 포인터
const 객체에 대한 포인터


객체를 가리키는 const 포인터


*void 포인터
데이터형을 명시하기 어려운 경우 사용함
모든 데이터 타입을 다 담을 수 있음
C++ 에서는 묵시적인 포인터 변환 허용되지 않음

*참조자
변수에 별명을 붙이는 것

int &ref = var;
참조자 ref는 변수 var의 별명(alias)임

참조자는 반드시 선언과 동시에 초기화
int &ref; // 오류!
포인터는 변경될 수 있지만 참조자는 변경이 불가능하다.
int &ref = var1; ref = var2; // 오류! 
참조자를 상수로 초기화하면 컴파일 오류
int &ref = 10; // 오류!

*포인터 vs 참조자
가능하면 참조자를 사용하고, 반드시 필요한 경우만 포인터 사용
포인터는 강력한 도구이나, 다양한 문제를 야기할 수 있음
만약 참조하는 대상이 변경되는 경우에는 포인터를 사용
참조자는 대상을 변경할 수 없음
NULL이 될 가능성이 있는 경우에도 포인터를 사용

[컴퓨터공학]프로그래밍#12(문자열 배열)

*문자열 배열
char 형 배열에 문자열을 저장한 것
문자는 ASCII 코드 값이 저장되고, 문자열의 끝은 NULL (0)
5글자를 저장하기 위해 6개 원소를 갖는 char 형 배열 필요함

*문자열 함수
C언어에서 제공하는 문자열 관련 함수
입/출력 함수는 #include <stdio.h>
기타 문자열 함수는 #include <string.h>

*문자열 입력 받을 때 팁
scanf("%s",str); 사용 시 공백을 받지 못하지만
scanf("%[^\n]",str); 사용 시 공백도 받아들임

[컴퓨터공학]프로그래밍#11(디버깅-Visual studio)

*디버깅
컴퓨터 프로그램이나 하드웨어 장치의 잘못된 부분, 즉 버그를 찾아서 수정 하는 과정

필요성
프로그래밍시 한번에 완벽한 프로그램을 작성하는 것은 매우 어려움
초기 개발한 버전에서 테스트 및 디버깅을 통해 완전한 SW로 개선

디버거
디버깅을 할 수 있도록 지원하는 프로그램 또는 장치
Visual studio는 IDE (Integrated Development Environment)로 에디터, 컴파일러, 디버거가 통합되어 지원함

*사용방법1
1.중단점 (break point) 설정
원하는 라인에서 F9 누르거나 우클릭 후 아래와 같이 중단점 삽입

2.디버깅 실행 : 설정된 중단점에서 멈춰서 대기
F5 누르거나 아래와 같이 디버그 -> 디버깅 시작 클릭

3.디버깅 화면 체크
위 레드박스 : 실행중인 소스코드
아래 레드박스 : 실행 시점의 변수 값

*디버깅 방법
한 단계씩 코드 실행 (F11)
함수 내부를 포함하여 C언어 한줄 씩 수행하며 디버깅하고 싶은 경우
함수 내부로 이동하여 디버깅 가능

프로시저 단위 코드 실행 (F10)
함수 내부를 보지 않고 한줄 씩 수행하며 디버깅하고 싶은 경우
함수 내부로 이동하지 않고 함수가 실행
 
*사용방법2
한줄씩 수행하며 아래 사항 확인
각 변수의 값이 의도한 바와 같은지 확인
프로그램의 실행 순서가 의도한 바와 같은지 확인

*디버깅 종료

[컴퓨터공학]프로그래밍#10(제어문)

*continue 문(루프 건너뛰기)
반복문 내에서 특정 조건일때 명령문 수행을 제외하는 용도로 사용

while문과do-while문에서
continue 이후 명령문은 수행되지 않고 즉시 조건문 검사 로직으로 이동

for문에서
continue 이후 명령문은 수행되지 않고 증감연산은 수행하고 조건문 검사 로직으로 이동

*break(루프 자체를 탈출)
현재 반복문을 빠져나올 때 사용
중첩 반복문의 경우 가장 안쪽 반복문을 빠져나옴
for 문에서 break 는 증감 수행 없이 반복문 빠져나옴
특정 조건인 경우 반복문을 종료하기 위해 주로 if 문과 함께 사용

[컴퓨터공학]프로그래밍#9(반복문)

*while문
주어진 조건이 만족되는 동안 문장들을 반복 실행


*do while문
반복 조건을 루프의 끝에서 검사
while(조건)뒤에 꼭 ;(세미콜론)을 붙여줘야함!!

*for문
변수를 증감시키면서 조건식 만족할때까지 반복
가장 많이쓰이는 반복문
초기화:반복문 첫 진입시 실행
조건문:한 사이클 돌때마다 검사
증감:한 사이클이 끝나면 실행

[컴퓨터공학]프로그래밍#8(조건문)

*if-else문
조건식이 참/거짓에 따라 다른 명령을 수행

중첩 if-else문
if 문에 다시 if 문이 포함

*switch문
여러가지 경우 중에서 하나를 선택하는데 사용


다중 선택
복잡한 if 문의 조건식이 정수형인 경우 사용

[컴퓨터공학]프로그래밍#7(관계연산자 및 논리 연산자)

*관계연산자
두 수의 값을 비교하기 위한 연산자
두 수식 간 혹은 두 변수 간의 관계를 참(true) 혹은 거짓(false)으로 나타냄
참 : 1, 거짓 : 0
선택문이나 반복문의 조건식에 주로 사용
관계 연산자(>=) 연산 기호의 순서가 명확해야 함
>=(O), =>(X)
대입 연산자(=)
오른편의 변수 혹은 수식의 값을 왼편 변수에 대입(assignment)

*논리 연산자
여러 개의 조건을 조합하여 참과 거짓을 따지는 연산자
결과값은 참(1) 아니면 거짓(0)

*연산자의 우선순위
수식에서 어떤 연산자를 먼저 계산할 것인지의 문제

*우선순위의 일반적 지침
콤마 < 대입 < 논리 < 관계 < 산술 < 단항
괄호 연산자는 가장 우선순위가 높다.
모든 단항 연산자들은 이항 연산자들보다 우선순위가 높다.
콤마 연산자를 제외하고는 대입 연산자가 가장 우선순위가 낮다.
연산자들의 우선 순위가 생각나지 않으면 괄호를 이용
( x <= 10 ) && ( y >= 20 )
관계 연산자나 논리 연산자는 산술 연산자보다 우선순위가 낮다.
x + 2 == y + 3 
우선 순위가 모호하지 않도록 코딩하는 것이 바람직함 !!

2019년 6월 27일 목요일

[컴퓨터공학]프로그래밍#6(배열)

*배열
여러 개의 데이터를 효율적으로 사용하기 위한 데이터 타입
반복문을 사용해 다수의 변수를 처리함
같은 종류의 데이터들이 순차적으로 저장되어 있는 자료 구조

*배열 선언 : 자료형 변수명[배열크기]
예) int grade[10];
자료형: 배열 원소들이 int형라는 것을 의미
배열 이름: 배열을 사용할 때 사용하는 이름 (grade)
배열 크기: 배열 원소의 개수가 10개

배열 사용 : 변수명[인덱스]
인덱스(배열 번호)는 항상 0부터 시작

예) grade[5] = 80;

*배열의 초기화
배열 크기와 초기값이 동일한 경우


배열 크기보다 초기 값이 적은 경우(나머지 0)


배열의 크기 없이 초기화하는 경우(초기값 개수만큼 배열의 크기 할당)


*2차원 배열


2차원 배열의 초기화


3차원 배열도 아래처럼 선언하고 사용하면 된다.
int s[6][3][5];


[컴퓨터공학]프로그래밍#5(변수)

*변수
프로그램에서 일시적으로 데이터를 저장하는 공간

변수의 필요성
데이터를 저장해야 이후에 사용할 수 있음

변수는 물건을 저장하는 상자와 유사함
변수 타입 : 메모리 크기 및 해당 메모리 데이터 해석 방법 결정
변수 이름 : 컴파일러에 의해 주소로 치환
데이터 : 정수, 실수, 문자열 모두 저장은 바이너리임
           변수 타입에 따라 값의 해석 방법이 다름

변수 타입  변수 이름          데이터

*자료형
데이터의 타입(종류)


*자료형 별 데이터 인식 방법
정수형
Unsigned short : 16bit 모두 양의 정수 표현
Short : 최상위 bit 는 음의 수로 1이면 -32768, 0이면 0
예) 0x8001 수 해석
Unsigned : 32769 (32768 + 1)
Signed : -32767 (-32768 + 1)

부동소수점 (IEEE 754)
예) -118.625 를 32bit IEEE 754 형식 부동 소수점으로 저장
1110110.101  -> 1.110110101 x 26 ( 정규화된 부동소수점)
가수부는 소수점 부분만으로 부족한 bit 0으로 채움 (11011010100000000000000)
지수부는 6에 bias 더함 (6+127 = 133)

문자형
정수형 : 기존 정수형과 동일하며, 1 byte
문자열 : ASCII 코드표를 이용하여 문자로 인식

*변수의 이름짓기
식별자자(identifier): 식별할 수 있게 해주는 이름
변수 이름
함수 이름

가독성을 위해 이해하기 쉽게 변수명 생성이 중요함
예) x, y 등의 이름 대신 sumLength, avgLength 등

*변수 선언
컴파일러에게 어떤 변수를 사용한다고 미리 알림
자료형 변수이름;

변수에 값 저장
char c; // 문자형 변수 c 선언
int i; // 정수형 변수 i 선언
double interest_rate; // 실수형 변수 interest_rate 선언

c = 'a'; // 문자형 변수 c에 문자 'a'를 대입
i = 60; // 정수형 변수 i에 60을 대입
interest_rate = 4.9; // 실수형 변수 interest_rate에 82.9를 대입