//단순 4칙연산 수식 계산기
//입력: 124+324/4*3-2345     츨력: -2009.000000
//4칙연산 순서구분 없음
#include <stdio.h>
#include <stdlib.h>

char n[100];
char *pn=n;

int c;
double result=0,i=0,j;
 
char main()
{
 gets(n);
 result+=atoi(pn);
 for(c=0;c<=100;c++)
 {
  if(n[c]=='-')
  {
   j=atoi(pn+c+1);
   result-=j;
   printf("%lf\n",result);

  }
  else if(n[c]=='+')
  {
   j=atoi(pn+c+1);
   result+=j;
   printf("%lf\n",result);
  }
  else if(n[c]=='*')
  {
   j=atoi(pn+c+1);
   result*=j;
   printf("%lf\n",result);
  }
  else if(n[c]=='/')
  {
   if(j==0)
   {
   result=0;
   printf("%lf\n",result);
   }
   else{
   j=atoi(pn+c+1);
   result/=j;
   printf("%lf\n",result);}   
  }
  else
  {}
 }
}

'프로그래밍 > C' 카테고리의 다른 글

enum을 이용한 while( true or false ) 구현 과 boolean 구현  (0) 2017.09.18
sort  (0) 2017.09.18
수식계산기 v0.8  (0) 2017.09.18

재대후 처음 자바를 공부하면서 만든 간단한 Java 계산기 프로그램

//Main

package calculator;

import java.util.Scanner;

public class CalMain {

public static void main(String[] args) {

double num1;
double num2;
double result;

Cal cal= new Cal();
Scanner input=new Scanner(System.in);
String c="@";
System.out.println("숫자를 입력해 주세요 :\t");
num1 = input.nextDouble();
do{
if(c=="#")
break ;
System.out.println("연산자 :\t");
c=input.next();
System.out.println("숫자를 입력해주세요\t");
num2=input.nextDouble();
System.out.println("결과값 :\t");
switch(c){
case "+":
result = cal.add(num1, num2);
System.out.println(result);
num1=result;
break;
case "-":
result = cal.minus(num1, num2);
System.out.println(result);
num1=result;
break;
case "*":
result = cal.multi(num1, num2); 
System.out.println(result);
num1=result;
break;
case "/":
result = cal.division(num1, num2);
System.out.println(result);
num1=result;
break;
case "c":
System.out.println("초기화\t");
System.out.println("숫자를 입력해주세요\t");
num1 = input.nextDouble();
break;
case "#":
System.out.println("끝\t");
c="#";
break;
default:
System.out.println("잘못된 연산입니다 연산자부터 다시 입력해 주세요\t");
break ;
}
}while(true);

}

}

//////////////////////////////////////////////////////////////////////////

//Class

package calculator;

public class Cal {
double result;

double add(double num1, double num2){
result = num1 + num2;
return result;
}
double minus(double num1, double num2){
result = num1 - num2;
return result;
}
double multi(double num1, double num2){
result = num1 * num2;
return result;
}
double division(double num1, double num2){
result = num1 / num2;
return result;
}
double clear(){
result = 0;
return result;
}
}
////////////////////////////////////////////////////////////////////

뼈대만 만들었다 자잘한건 아직....



유니티를 개발하게 되면서 IEnumerator와 IEnumerable에 대해 공부하게되었다.


간단하게 요약하자면 Custom한 state를 만들어 while이나 foreach문으로 편리하게 쓰거나 Coroutine으로 사용하는

Interface의 일종  


IEnumerator가 가지는 state의 초기값은 -1이다.



사용하는 방법을 코드로 풀어보면

 
    private int[] data = { 5, 4, 3, 2, 1 };

    public IEnumerator GetEnumerator()
    {
        int i = 0;
        while (i < data.Length)
        {
            Debug.Log(data[i]);    //MoveNext.했을때 진행이 끝나는 지점.
            yield return data[i];    //Current에 접근했을때 진행이 끝나는 지점
            ++i;
        }
    }

    private void Start()
    {
        IEnumerator it = data.GetEnumerator();

        it.MoveNext(); // 내부적인 state가 이때 -1에서 0이 된다.
        Debug.Log(it.Current);    // data[i]의(i = 0) 값인 5가 리턴되어 나오고
        it.MoveNext();
        Debug.Log(it.Current);    // data[i]의(i = 1) 값인 4이 리턴되어 나오고
        it.MoveNext();
        Debug.Log(it.Current);    // data[i]의(i = 2) 값인 3이 리턴되어 나온다
    }


C#에서 list들은

IEnumerator를 원래 가지고있어

(int[] dat = { 1, 2, 3, 4, 5 };

dat.GetEnumerator(); //이렇게 나온다)


IEnumerator를 만들어 주지 않아도 된다.(위의 GetEnumerator는 대충 어떻게 동작하는지 보여주기 위한 구현)


IEnumerator를 사용하는 반복문의 2가지 예

 
private int[] data = { 5, 4, 3, 2, 1 };

//예_1
IEnumerator it = data.GetEnumerator();
while(it.MoveNext())
{
    Debug.Log(it.Current);
}

//예_2
foreach(var num in data)
{
    Debug.Log(num);
}


그리고 IEnumerable 이라고


public IEnumerable<int> GetNumber()

    {

        int i = 0;

        while (i < data.Length)

        {

            yield return data[i];

            ++i;

        }

    }

해서

foreach (int num in GetNumber())

{

    Debug.Log(num);

}

이렇게 쓰는 방법도 있다.


다시 돌아와서 IEnumerator를 코루틴으로 돌리면

StartCoroutine(GetEnumerator());//이렇게 하면 되고 이때 쓰는 GetEnumerator()는 만들어 줘야함

물론  StartCoroutine(data.GetEnumerator());//이렇게 쓰면 안만들어줘도 된다.


하지만 커스텀 하고싶으면 위의 GetEnumerator()처럼

IEnumerator 만들어서 입맛대로 yield return 해줘야 된다.

'프로그래밍 > C#' 카테고리의 다른 글

return default(T);란?  (0) 2018.08.02
C# string 사용법  (0) 2018.06.27
C# const, readonly 차이  (0) 2018.06.04
C# 문법 참고 사이트  (0) 2018.06.01
C# 자료구조별 속도  (0) 2018.03.20

+ Recent posts