import UIKit


class ViewController: UIViewController

{

    @IBOutlet weak var display: UILabel!

    //weak 메모리 관리를 알아서 해준다 var 변수의미

    //let 상수를 의미한다. display 라벨의 이름이다

    

    var userIsInTheMiddleOfTypingANumber: Bool = false

    //swfit에서는 모든 것들이 초기화 되어야 한다

  // 위의 변수가 초기화 되지 않으면 에러가 표시된다

    @IBAction func appendDigit(sender: UIButton) {

        let digit = sender.currentTitle!

        

        if userIsInTheMiddleOfTypingANumber

        {

            display.text = display.text! + digit

        } else

        {

            display.text = digit

            userIsInTheMiddleOfTypingANumber = true

        }

        

        //display.text = display.text + digit

        //에러

        

        println("digit =  \(digit)")

    }

}


처음 예제는 Label과 버튼을 활용한 화면 구성과 간단한 Swift의 문법에 대해서 강의했다.
일단 Swift의 label과 버튼의 추가는 매우 쉽다. 간단한 드래그와 컨트롤 키를 활요한 클릭으로 화면에 알맞는 비율의 배치를 손 쉽게 설정할 수 있다. 

또한 View Controller를 통해 배치가 잘못된 버튼 등을 알려주기도 한다.(오른쪽 노란색 삼각형이 warning표시 라고 생각하면 된다)


Swift에서 사용되는 문법에 대해 알아보자.

일단 캡처된 사진을 봐 보자.




가운데 화면의 왼쪽은 앱의 화면이, 오른쪽엔 코드가 있다.
xcode에서 버튼을 생성한 뒤 버튼을 클릭하고 드래그 하여 코드까지 끌어오면 코드 상에 버튼에 대한 코드가 생성된다! (정말 획기적인듯) 잘 보이진 않겠지만 19라인을 보면 19라인을 알려주는 숫자 19 왼쪽에 조그마난 동그라미가 있다. 마우스를 저 위로 올리면 왼쪽 화면 처럼 버튼이 파란색으로 바뀌어 표시된다(해당 코드는 버튼에 관한 코드임을 알려주게 된다)

개발자의 편의성을 높여준 xcode의 센스를 엿볼 수 있다.

문법에 대해 알아보자. 처음으로 Swift에선 모든 변수와 클래스 등이 반드시 초기화 되어야 한다.
var로 생성된 변수가 초기화 되지 않으면 xcode에서 에러 표시를 해준다.

또한 var와 let의 차이는 바로 변수와 상수의 차이이다.(스탠포드 교수는 let이란 표현을 아주 좋아했다)

또한 weak이라는 표현은 바로 메모리관리에 관한 문법이었는데, weak으로 선언이 된다면 ARC를 이용, 메모리 관리에 힘 쓸 필요가 없다고 한다. (스위프트 자체가 메모리 관리에 민감한듯 하다)  

Swift에서 선언된 변수, 상수는 타입을 가지고 있을 것이고 함수 또한 리턴 타입에 대해 정의 될 것이다.
하지만 스위프트에선 타입을 지정하지 않고서도 해당 타입을 유추해 자동으로 인식하는 기능이 있다.

바로 Optional이라는 것인데 해당 값이 nil일수도 타입을 가지고 있을 수도 있다는 것이다.
(option키를 활용하여 타입이 어떻게 정의되어 있는지 알아 볼 수 있다)

어떤 변수 hi에 ?가 붙어 있다면 optional로 정의가 되어 있어 정확한 타입을 모르겠다는 것이다.
하지만 변수에 hi!처럼 느낌표를 붙이면 개발자가 이 값에는 타입이 있다! 라고 알려주는 것이다.
하지만 실행중 크래쉬가 일어날 가능성은 감수해야 한다.


※ 해당 글은 애플에서 iTunes로 제공되는 스탠포드의 Swift강의를 정리한 것입니다. 
강의가 영어로 진행되며 Swift자체를 공부중인 내용을 정리한 것이니 틀린 내용이 있으면 지적해 주시기 바랍니다. 틀린 내용이 있다면 앞으로 공부 하면서 틀린 내용을 자체적으로 꾸준히 수정 할 예정입니다.


'Programing > Swift' 카테고리의 다른 글

Swift 스탠포드 강의 #01  (0) 2015.07.16
Posted by thread1525

댓글을 달아 주세요

#include <iostream>

#include <Windows.h>

#include <random>

#include <time.h>

#include "Console.h"

//#include "enemy.h"

//#include "player.h"

#define ENEMY_COUNT 10

#define PLAYER_LIFE 1

using namespace std;


typedef struct enemy{

int x, y;

char name = 'e';

char blank = ' ';

}enemy;


typedef struct player{

int x= 40, y= 19;

char name = 'p';

int life = PLAYER_LIFE;

}player;


typedef struct player_shoot{

int x, y;

char name = '.';

};


typedef struct enemy_shoot{

int x, y;

int flag = 0;

char name = '*';

};


void enemy_shoot_initial();

void enemy_shoot_move();

int move_flag = 0;

int shoot_flag = 0;

int _gameover = 1;

void enemy_initial();

void enemy_move();

void player_shoot_initial();

void player_shoot_move();

void player_shoot_check();


enemy e;

player p;

player_shoot p_s;

enemy_shoot e_s[10];

enemy e_member[ENEMY_COUNT];


int main()

{

enemy_initial();

while (_gameover)

{

Initial();

for (int i = 0; i < 10; i++){

MoveCursor(e_member[i].x, e_member[i].y);

cout << e_member[i].name;

}

enemy_move();

MoveCursor(p.x, p.y);

cout << p.name;

MoveCursor(p_s.x, p_s.y);

if (GetAsyncKeyState(VK_CONTROL)){

player_shoot_initial();

}

cout << p_s.name;

if (GetAsyncKeyState(VK_UP)){ p.y -= 1; }

if (GetAsyncKeyState(VK_DOWN)){ p.y += 1; }

if (GetAsyncKeyState(VK_LEFT)){ p.x -= 1; }

if (GetAsyncKeyState(VK_RIGHT)){ p.x += 1; }


enemy_shoot_initial();

enemy_shoot_move();

player_shoot_move();

player_shoot_check();

ClearScreen();

}

cout << "gameover";

}


void enemy_move()

{

if (move_flag == 0){

for (int i = 0; i < 10; i++)

{

e_member[i].x += 1;

}

if (e_member[9].x == 80)

move_flag = 1;

}

if (move_flag == 1){

for (int i = 0; i < 10; i++)

{

e_member[i].x -= 1;

}

if (e_member[0].x == 2)

move_flag = 0;

}

}

void enemy_initial()

{

for (int i = 0; i < 10; i++)

{

e_member[i].x = 20 + (i*2) ;

e_member[i].y = 5;

e_member[i].name = 'e';

}

}


void player_shoot_initial()

{

p_s.x = p.x;

p_s.y = p.y;

}

void player_shoot_move()

{

p_s.y -= 1;

}



void player_shoot_check()

{

for (int i = 0; i < 10; i++){

if (p_s.x == e_member[i].x && p_s.y == e_member[i].y)

e_member[i].name = e_member[i].blank;

}

}



void enemy_shoot_initial()

{

int select;

srand(time(NULL));

select = rand() % 10;

e_s[select].flag = 1;

e_s[select].x = e_member[select].x;

e_s[select].y = e_member[select].y;

}

void enemy_shoot_move()

{

for (int i = 0; i < 10; i++)

{

if (e_s[i].flag == 1)

{

MoveCursor(e_s[i].x, e_s[i].y);

cout << e_s[i].name;

e_s[i].y += 1;

if (e_s[i].y == 22 )

{

e_s[i].name = ' ';

e_s[i].y = 0;

e_s[i].flag = 0;

}

if ((p.x == e_s[i].x && p.y == e_s[i].y))

{

p.life -= 1;

if (p.life == 0){

_gameover = 0;

}

}

}

}

}


구조체로 구현한 Invader 게임입니다. 버퍼를 따로 생성하지 않아 끊기는 현상이 있는데, 버퍼를 구현해서 끊기지 않도록 해야겠습니다.



'Programing > C++' 카테고리의 다른 글

-> , * 연산자 오버로딩  (0) 2015.09.02
간단한 오버라이딩  (0) 2015.09.02
구조체로 구현한 Invader  (0) 2015.06.09
클래스 template  (0) 2015.04.27
함수 Template  (0) 2015.04.27
이차원 동적 배열 입력 받아 생성하기  (0) 2015.02.10
Posted by thread1525

댓글을 달아 주세요

Template <typename T>

class C{

public:

.

.

.

.

};


로 구현한다. 클래스 선언 앞에 키워드만 붙이면 된다.


Template <typename T = double, int size = 10> 처럼 디폴트 매개변수의 값을 지정 할 수 있다.

'Programing > C++' 카테고리의 다른 글

간단한 오버라이딩  (0) 2015.09.02
구조체로 구현한 Invader  (0) 2015.06.09
클래스 template  (0) 2015.04.27
함수 Template  (0) 2015.04.27
이차원 동적 배열 입력 받아 생성하기  (0) 2015.02.10
Tree 구현하기  (0) 2015.02.10
Posted by thread1525

댓글을 달아 주세요

2015.04.27 23:34 Programing/C++

함수 Template

 template <typename T [ parameters ]> [return type] Function ( T a [ arguments ] ) { }


template 키워드와 함께 <> 안에 템플릿 파라미터 목록을 적게된다.

템플릿 파라미터로는 'typename T'와 같은 데이터 타입이 올 수도 있지만, int N처럼 데이터 타입이 아닌 파라미터나 'template class Unit'과 같은 템플릿 템플릿 파라미터가 올 수도 있다.


다음은 큰 값을 리턴하는 템플릿의 예제이다.


#include <iostream> using namespace std;    

template <typename T>      T max(T const& a, T const& b)      {        return a < b ? b : a;      } int main() { cout<< max(3, 4) << endl; }



'Programing > C++' 카테고리의 다른 글

구조체로 구현한 Invader  (0) 2015.06.09
클래스 template  (0) 2015.04.27
함수 Template  (0) 2015.04.27
이차원 동적 배열 입력 받아 생성하기  (0) 2015.02.10
Tree 구현하기  (0) 2015.02.10
C++ 문자형을 int형으로  (0) 2015.02.10
Posted by thread1525

댓글을 달아 주세요

//

//  main.c

//  project euler

//

//  Created by 김일호 on 2015. 4. 25..

//  Copyright (c) 2015 김일호. All rights reserved.

//


#include <stdio.h>


int main(int argc, const char * argv[]) {

    int product = 0;

    

    for(int i =1; i<1000; i++)

        for (int j = 1; j<1000; j++){

            for (int k = 1; k<1000; k ++)

            {

                if( j < i && k < j)

                    break;

                if((i * i) + (j * j) == (k*k))

                {

                    product = i+j+k;

                    if(product == 1000)

                    {

                        printf("%d %d %d",i, j, k);

                        return 0;

                    }

                }

                else if (k+j>1000)

                {product = 0;break;}

                else if (k+i>1000)

                {product = 0;break;}

                product = 0;

            }

            if(i+j>1000){

                product = 0;

               break;

            }

        }

    return 0;

}



'Programing > Algorithm' 카테고리의 다른 글

Selection Sort  (0) 2015.09.27
프로젝트 오일러 10번  (0) 2015.07.29
프로젝트 오일러 9번  (0) 2015.04.25
Recursive Fibonacci  (0) 2015.04.06
순환/재귀 팩토리알 구현  (0) 2015.04.06
3개의 숫자를 내림차순으로 정렬  (0) 2015.04.06
Posted by thread1525

댓글을 달아 주세요

중위  표기식을 후위 효기식으로 변환하는 알고리즘은 다음과 같다.


1. 식을 모두 괄호로 묶는다.

2. 이항 연산자들은 모두 그들 오른쪽에 있는 괄호와 대체시킨다.

3. 모든 괄호를 삭제한다.


a/b-c+d*e-a*c를 모두 괄호로 묶으면 다음과 같다.

((((a/b)-c+(d*e))-(a*c))

2단계 3단계를 실행하면 다음과 같다.

ab/c-de*+ac*-

'Programing > Data Structure' 카테고리의 다른 글

중위 표기에서 후위 표기로의 변환  (0) 2015.04.06
Posted by thread1525

댓글을 달아 주세요

#include <stdio.h>


int fibonacci(int n);

int main()

{

    int number;

    int total = 0;

    printf("input the number\n");

    scanf("%d", &number);

    printf("recursive fibonacci = %d \n", fibonacci(number));

}


int fibonacci(int n){

    if (n < 3)

        return 1;

    else return fibonacci(n-2) + fibonacci(n-1);

}


/*C++ 피보나치 합 구하기*/

#include <iostream>

using namespace std;


int fibonacci(int n);


int main()

{

int total = 0;

int n = 0;

for (int i = 0; i <= 5; i++)

{

n = fibonacci(i);

total += n;

}

cout << total << endl;

}


int fibonacci(int n)

{

if (n == 1 || n == 2)

return 1;

else if (n == 0)

return 0;

else

return fibonacci(n - 1) + fibonacci(n - 2);

}

'Programing > Algorithm' 카테고리의 다른 글

프로젝트 오일러 10번  (0) 2015.07.29
프로젝트 오일러 9번  (0) 2015.04.25
Recursive Fibonacci  (0) 2015.04.06
순환/재귀 팩토리알 구현  (0) 2015.04.06
3개의 숫자를 내림차순으로 정렬  (0) 2015.04.06
프로젝트 오일러 7번  (0) 2015.02.10
Posted by thread1525

댓글을 달아 주세요


#include <stdio.h>


int factorial(int x);

int main()

{

    printf("input the number\n");

    int size;

    scanf("%d", &size);

    

    int total = 1;

    for(int i = size; i>1; i--)

        total *= i;

    

    printf("%d recursive factorial is %d \n", size, factorial(size));

    printf("%d iterative factorial is %d \n", size, total);

}


int factorial(int x){

    if (x>1)

        return x * factorial(x-1);

    else return x;

}

'Programing > Algorithm' 카테고리의 다른 글

프로젝트 오일러 9번  (0) 2015.04.25
Recursive Fibonacci  (0) 2015.04.06
순환/재귀 팩토리알 구현  (0) 2015.04.06
3개의 숫자를 내림차순으로 정렬  (0) 2015.04.06
프로젝트 오일러 7번  (0) 2015.02.10
프로젝트 오일러 6번  (0) 2015.02.10
Posted by thread1525

댓글을 달아 주세요


#include <stdio.h>

void sort(int *x, int *y, int *z);


int main()

{

    int x=4, y=11, z=8;

    sort(&x, &y, &z);

    printf("%d %d %d\n",x,y,z);

}



void sort(int *x, int *y, int *z){

    int temp;

    if(*x < *y){

        temp = *x;

        *x = *y;

        *y = temp;

        sort(x, y, z);

    }

    else if(*y < *z){

        temp = *y;

        *y = *z;

        *z = temp;

        sort(x, y, z);

    }

    else if(*x < *z){

        temp = *x;

        *x = *z;

        *z = temp;

        sort(x, y, z);

    }

}



'Programing > Algorithm' 카테고리의 다른 글

Recursive Fibonacci  (0) 2015.04.06
순환/재귀 팩토리알 구현  (0) 2015.04.06
3개의 숫자를 내림차순으로 정렬  (0) 2015.04.06
프로젝트 오일러 7번  (0) 2015.02.10
프로젝트 오일러 6번  (0) 2015.02.10
프로젝트 오일러 5번  (0) 2015.02.10
Posted by thread1525

댓글을 달아 주세요

2015.03.31 18:47 Programing/OS

스케쥴러

스케쥴러

.프로세스 스케쥴러는 이용 가능한 프로세스를 실행 시키기 위해서 선택한다

->프로세스가 가장 효율적이고 CPU를 몽땅 사용할 수 있도록 CPU를 선택

.스케쥴링 큐는 대체적으로 링크드 리스트를 사용한다

.long term scheduler는 해당 알고리즘에 따라서 메모리에 올릴지 결정한다

->cpu의 상태로는 new에서 ready로 가는 것을 승인한다

.short term scheduler는 닥치고 메모리에 바로바로 올려서 실행시키는거

->cpu의 상태로는 ready에서 running으로 가는 상태로 전이

.long term schedouler는 자주 쓰이지 않는다.

.context switch는 cpu를 프로세스의 현재 상태를 저장 시키고 다른 프로세스를 복구시켜서 바꾸는거임

.context switch의 속도는 하드웨어 지원에 높은 의지를 한다.

.프로세스가 새로운 프로세스를 생성시킨다면 이는 tree같이 생겼다

.프로세스가 새로운 프로세스를 만들 때 가능한 상황들

-> 부모는 자식과 함께 계속해서 실행한다.

-> 자식들이 종료될 때 까지 부모는 계속해서 기다린다.

.프로세스의 주소 공간에서 일어날 수 있는 일들

-> 자식 프로세스는 부모프로세스의 복제

-> 자식 프로세스는 새로운 프로그램을 복제한 공간(메모리)에 넣는다

.fork 시스템의 프로세스 상태

-> fork가 되면 부모는 wait상태가 되고 자식은 exec()나 등등 일처리를 함

-> 자식 프로세서가 exit가 되면 부모 프로세서에서 기다리고 있다가 resume

.프로세서를 죽일려면  exit() 시스템 콜을 이용한다



'Programing > OS' 카테고리의 다른 글

스케쥴러  (0) 2015.03.31
Process의 실행 관련  (0) 2015.03.31
프로세스의 개념  (0) 2015.03.31
Thread 생성 방법  (0) 2015.03.31
Posted by thread1525

댓글을 달아 주세요

이전버튼 1 2 3 4 5 6 7 이전버튼

블로그 이미지
1525번 thread 입니다.
thread1525

공지사항

Yesterday9
Today1
Total6,171

달력

 « |  » 2019.10
    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 31    

최근에 달린 댓글

최근에 받은 트랙백

글 보관함