패스트캠퍼스

[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 17회차 미션

돌맹이시터 2020. 11. 4. 16:59

 

 

환급미션 17일째..

 

 

 

컴퓨터 구조 - 중앙처리장치 - 프로그래밍 언어와 실행 -1 

컴퓨터 구조 - 중앙처리장치 - 프로그래밍 언어와 실행 -12

 

 

 

 

지금까지와 마찬가지로

이 수업에서는 개요 정도만 다루고, 자세한 건 구글링이나 고급과정으로 넘어가서 배우라고 한다 (...)

 

 

 

우선 소프트웨어 개발 패러다임을 간략하게 살펴보았다.

 

*구조적 기법을 사용하는 방식 

원하는 결과를 위해 일련의 함수를 사용하여 프로그램 작성

데이터, 함수 분리

개발, 유지 보수에 많은 비용이 발생한다고 한다.

ex) 코볼, 파스칼, 코트란 등의 언어

 

*객체지향(opp) 기법을 사용하는 방식

객체(object) - 데이터, 처리 기능(method)을 단위화 하여 캡슐화 시키고

각 기능의 상속(inheritance)으로 기능을 재사용할 수 있다.

ex) C++, Java

 

* 컴포넌트 기법을 사용하는 방식

외부와 interface를 통하여 동작구현 및 시스템의 단순성을 높임 

 

* 분산객체 프레임워크

다른 환경에서 여러 종류의 application을 통합하는 방식

 

 

 

이번 시간엔 특이하게도 실습을 진행하였다.

사실 실습이라기엔....

툴 소개 정도..

 

실습에 사용된 툴은 아래와 같다.

 

Dev C++ (컴파일러, 고급언어 프로그래밍 툴)

x64dbg (Disassembler 프로그램, 고급언어로 작성된 소스를 어셈블리 언어로 확인 가능한 툴)

Wireshark (패킷 분석 툴)

 

-------------------

#include <stdio.h>

#include <conio.h>

 

int main()

{
int a,b,c;

a=83;

b=234;

c=a+b;

 

printf("a+b= %5.2d",c);

 

return 0;

}

----------------------

 

변수 a=83, b=234를 선언하고

두 변수의 합을 출력하는 간단한 코드로 예시를 들었다.

 

출력함수 printf 안에 기재한 %5.2d에 대해 자세히 설명되었는데

전체 5자리, 소수아래 2자리 출력하라는 포맷이다.

 

 

 

 

x64dbg라는 프로그램으로 작성한 소스프로그램을 돌려보면 위와 같이 출력됨을 알 수 있다.

컴퓨터 내부에서 어떤 작업들이 진행되는지 자세하게 확인할 수 있다.

역시 이런게 있다 정도로만 알아둘 것

 

 

wireshark 라는 패킷 분석 툴을 실행한 화면이다.

No. - 패킷을 수집한 순서

Time - 패킷을 수집한 시간

Source, Destination - 수집된 정보가 어디서 발송되어서 어디로 가는지

Protocol - 통신 규약, 어느 경로를 통해 가는지

 

hexadecimal 표현 방식을 사용한다.

 

 

 

 

 

소프트웨어 베이직 - c언어의 기초 - 13. 다차원 배열과 포인터 배열

 

 

2차원 이상의 배열의 표현 방법,

포인터를 이용해 2차원 배열을 다루는 방법을 학습한다.

 

 

 

 

 

- 2차원 배열

행렬 데이터, 그래프 알고리즘, 실생활 데이터 등을 처리할 때 많이 사용된다.

 

 

2차원 배열은 흔히 볼 수 있는 위의 표와 같은 구조를 갖는다.

 

 

 

 

 

자료형 배열이름[행][열] = {

{ 값,...}, {값,....},...

}

또는

int a[10][10];

 

위와 같은 형태로 2차원 배열을 초기화한다.

행, 열에는 각각 행과 열의 인덱스 값이 들어간다.

 

 

 

 

 

- 2차원 배열의 사용

 

 

* 이중 for문과 함께 많이 사용된다.

 

-------------

#include <stdio.h>

int a[3][3] = { {1,2,3}, {4,5,6}, {7,8,9} };

 

int main()

{

int i,j;

for (i=0;i<3;i++)

 {

   for (j=0;j<3;j++)

    printf("%d", a[i][j]);

  printf("\n");

 }

return 0;

}

----------------

위의 코드에 이중 for문이 사용되었는데, 2차원 배열 a를 출력한다.

 

 

 

 

- 다차원 배열

 

2차원 배열 이상의 배열을 의미

컴퓨터는 화면에 2차원 형태만 출력할 수 있지만, 내부적으로 다차원 구조로 동작한다.

 

 

 

 

- 포인터 배열의 구조 분석

 

배열은 포인터와 동일한 방식으로 동작

포인터는 변수, 배열의 이름은 상수이다. 따라서 배열의 이름은 다른 주소로 바꿀 수 없다.

배열의 이름은 배열의 첫 번째 원소의 주소가 된다.

 

 

 

 

 

 

 

9번째 줄은 주소를,

10,11번째 줄은 포인터가 가리키는 값을 출력한다. 

결과물의 주소를 살펴보면 자료형인 int의 크기와 같이 4byte씩 커지는 것을 알 수 있다.

포인터는 연산을 통해 자료형의 크기만큼 이동하는 것을 알 수 있다.

 

 

 

 

* 예제1

크기가 10인 double형 배열의 시작 주소값이 x일 때, 배열의 마지막 원소의 주소값은?

-> x+72, 자료형 double의 크기는 8byte이기 때문

 

 

* 예제2

 

위 코드 7,8,9줄의 출력값은?

 

->

1

3

5

 

7번째 줄에서 포인터 b의 값인 첫 번째 값을 출력 후, b가 가리키는 값을 한 칸 이동하여 b는 두 번째 주소값을 가리키게 됨

8번째 줄에서 b의 값인 두 번째 주소값에서 한 칸 이동후 출력, 3을 가리키게 됨

9번째 줄에서 포인터 b가 가리키는 3의 주소값에서 두 칸 이동 후 출력, 5를 출력하게 됨

 

 

 

* 2차원 배열을 포인터로 처리

 

포인터는 포인터의 포인터를 가질 수 있다.

2차원 배열도 내부적으로 주소값을 가지고 있다. 따라서 포인터의 포인터인 2중포인터로 처리할 수 있다.

 

 

특정한 행 (위의 예시에서는 2번째 행)을 가리키는 포인터 b를 선언하고

위와 같이 출력하면 2번째 행의 값인 6,7,8,9,10 이 차례대로 출력된다.

 

만약 위의 코드의 8번째 줄에서

포인터 b의 값을 a[1]이 아닌 a로 초기화한다면,

1,2,3,4,5가 출력될 것이다.

 

 

 

올인원 패키지 : 컴퓨터 공학 전공 필수👉https://bit.ly/3i4sCVE