KOREA University/C++2008. 10. 3. 02:36
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
 int nums[50];
 int a, b, t;
 int size;
 size = 50;
 for(t=0; t<size; t++) nums[t] = rand();
 cout << "Original array is : \n ";
 for(t=0; t<size; t++) cout << nums[t] << " ";
 cout << "\n";
 for(a=1; a<size; a++)
  for(b=size-1; b>=a; b--)
  {
   if(nums[b-1] > nums[b])
   {
    t = nums[b-1];
    nums[b-1] = nums[b];
    nums[b] = t;
   }
  }
 cout << "\nSorted array is : \n ";
 for(t=0; t<size; t++) cout << nums[t] << " ";
 cout << "\n";
 return 0;
}

버블정렬은 아주 간단한 원리이기 때문에 함수를 쓸 필요가 없다.
Posted by 정훈승
KOREA University/C++2008. 9. 26. 15:00
#include <iostream>
#include <cctype> // isupper를 위해서
#include <cstring> // strcpy를 위해서
using namespace std;
int main()
{
 char str[100], insert[100];
 int i, count;
 cout << "Insert : ";
 gets(insert); // cin을 쓰면 공백을 무시해버린다
 strcpy(str, insert); // insert값을 받는다
 count = 0;
 for(i=0; str[i]; i++)
 {
  if(isupper(str[i])) count++; // 대문자 개수를 샌다
 }
 cout << str << " contains " << count << " uppercase letters.\n";
 return 0;
}


입력한 문자열에서 대문자 개수를 구하는 소스다.
이런 졸라 쉬운 소스를 올리는 이유는?
숙제였으니까 ㅋㅋㅋ

사실 C++가 객채지향 개념이 나올때까지는 C랑 완전 똑같다고 보면 된다.
그러므로 cout과 printf를 바꿀 줄만 안다면 C언어배우는 학생들은 내 쏘스 그대로 갖다붙혀도 됨
(물론 객채지향 개념이 없을 경우에만)
Posted by 정훈승
KOREA University/C++2008. 9. 25. 22:16
#include <iostream>
#include <cctype> // touuper 또는 tolower를 위해
using namespace std;
int main()
{
 char str1[100], str2[100]; // 100글자까지
 char *p1, *p2;
 /* 포인터를 주는 이유는 문자열이 같다고 쳐도 실제 컴퓨터에 저장된 주소가
    다르기 때문이다. 컴퓨터는 문자열이 달라도 주소가 같으면 같다고 한다. */

 int i;
 cout << "첫번째꺼 입력 : ";
 cin >> str1;
 cout << "두번째꺼 입력 : ";
 cin >> str2;
 for(i=0; str1[i] && str2[i]; i++)
 {
  str1[i] = toupper(str1[i]);
  str2[i] = toupper(str2[i]); // 대문자로 일괄 변경
 }
 p1 = str1;
 p2 = str2; // 포인터로 해줘야 컴퓨터가 주소값이 같은줄 안다
 while(*p1, *p2)
 {
  if(*p1!=*p2)
  {
   cout << "다르다\n";
   goto exit; // 다르다 값이 1개라도 나오면 바로 exit
  }
  p1++;
  p2++;
 }
 cout << "같다\n";
 exit: // 다르다 값이 1개라도 나오면 같다 값 재끼고 바로 끝
 
 return 0;
}

아...이거 하는데 은근히 머리 굴렸다.
네이버나 구글에 똑바로된 쏘스 하나도 없네. (내가 못찾은 것일까)

어쨋든 내 쏘스는 갖다 붙혔을때 100% 돌아가는 안전빵 쏘쓰다.
Posted by 정훈승
KOREA University/C++2008. 9. 23. 16:42
#include <iostream>
using namespace std;
int main()
{
 int dan, no;
 for(dan=2; dan<=9; dan++)
 {
  cout << dan << "단\n";
  for(no=1; no<=9; no++)
  {
   cout << dan << " x " << no << " = " << dan*no << "\n";
  }
  cout << "\n";
 }
 return 0;
}


그냥 넘어가기 쉬우면서도 실제로도 졸라 쉬운 이중 for문
가장 대표적인 예가 바로 구구단이다.
Posted by 정훈승
KOREA University/C++2008. 9. 19. 14:55
#include <iostream>
using namespace std;
int main()
{
 char no;
 for(;;)
 {

  cout << "      ━━━━━━\n";
  cout << "        뮤직차트\n";
  cout << "      ━━━━━━\n";
  cout << " ━━━━━━━━━━━━━\n";
  cout << "   1위. 서태지 - 난 알아요\n";
  cout << "   2위. 쿨 - 해변의 여인\n";
  cout << "   3위. 박효신 - 눈의 꽃\n";
  cout << "   4위. 이효리 - 유고걸\n";
  cout << "   5위. 빅뱅 - 하루하루\n";
  cout << " ━━━━━━━━━━━━━\n\n";
  cout << " 순위를 입력하시면 해당 정보를 볼 수 있습니다.\n";
  cout << " ('q'를 누르면 종료됩니다.)\n\n";
 

  cout << " 순위를 입력하세요 : ";
  cin >> no;
  switch(no)
  {
   case '1' :
    cout << "  1위. 서태지 - 난 알아요\n";
    cout << " ㆍ가수 : 서태지\n";
    cout << " ㆍ작곡 : 서태지\n";
    cout << " ㆍ작사 : 서태지\n"; break;
   case '2' :
    cout << "  2위. 쿨 - 해변의 여인\n";
    cout << " ㆍ가수 : 쿨\n";
    cout << " ㆍ작곡 : 이재훈\n";
    cout << " ㆍ작사 : 김성수\n"; break;
   case '3' :
    cout << "  3위. 박효신 - 눈의 꽃\n";
    cout << " ㆍ가수 : 박효신\n";
    cout << " ㆍ작곡 : 외국곡\n";
    cout << " ㆍ작사 : 박효신\n"; break;
   case '4' :
    cout << "  4위. 이효리 - 유고걸\n";
    cout << " ㆍ가수 : 이효리\n";
    cout << " ㆍ작곡 : 옥주현\n";
    cout << " ㆍ작사 : 옥주현\n"; break;
   case '5' :
    cout << "  5위. 빅뱅 - 하루하루\n";
    cout << " ㆍ가수 : 빅뱅\n";
    cout << " ㆍ작곡 : 양현석\n";
    cout << " ㆍ작사 : 양현석\n"; break;
   case 'q': goto stop; // 여기가 포인트
   default :
    cout << " ***잘못입력하셨습니다. 1부터 5까지 중에서 선택하세요.\n";
  }
 }
 stop: cout << "종료되었습니다.\n"; // 이렇게 써먹는다
 return 0;
}


인덱스에서 해당 번호를 입력하면 번호에 대한 정보가 나오게 하는 소스다.
정상적인 이론에 의하면 for문을 여러번 써서 쪼끔(?) 복잡해지게 되는데
단 1번의 for문을 이용해서 강제종료 시킬 수 있다.

바로 goto 를 쓰면 된다. 이거 존나 유용하다.
Posted by 정훈승
KOREA University/C++2008. 9. 18. 16:19
x = 10
y = 3
z = 3
일때

x - ++y = 6 이고, x - z++ = 7 이다.

++(증가연산)가 앞에 붙으면 +1을 해주고
뒤에 붙으면 계산이 모두 끝난 후에 비로소 +1을 해준다.

++가 앞에 붙는다면 그냥 간단하게 +1을 해주면 된다.

++가 뒤에 아무리 붙었다면, 계산할때 무시해도 좋다.
단, 실제값은 +1씩 해줘야 한다. 결과값으로 보여질땐 +1이 적용되지 않는다.

이는 C나 C++의 시험문제 중에 주로 나오는 패턴으로
정확히 이해하지 않으면 아주 햇깔리다.
이 기회에 아주 정확하게 원리를 이해해야 한다.
Posted by 정훈승
KOREA University/C++2008. 9. 11. 21:56
#include <iostream>
using namespace std;
int main()
{
 int number,i,j,k;
 
 cout << "입력해봐 : ";
 cin >> number;
 if (number == 1)
 {
  cout << "1\n"; // 1도 소수다
 }
 else if (number <= 0)
 {
  cout << "에러!\n"; // 0이나 음수는 에러!
 }
 else
 {
  cout << "1 "; // 1도 포함해주는 센스
  for(i=2; i<=number; i++)
  {
   k = 0;
   for(j=2; j<=(i/2); j++)
   {
    if ( i%j == 0 )
    {
     k = 1; // 이해안되면 그냥 외워주는 센스
    }
   }
   if (k == 0) cout << i << " ";
  }
  cout << "\n"; // 마지막에 줄바꿈 해주는 센스
 }
 return 0;
}

그대로 복사-붙여넣기 했는데 안돌아가는 잡소스때문에 빡돌았다면,
그대로 복사-붙여넣기 했을때 바로바로 돌아가는 소스를 찾고 있었다면,
내 글을 본 순간 비명을 질러도 좋다.

하지만 그대로 배끼기만 하고 연구를 게을리 하면 소인배다.
Posted by 정훈승
KOREA University/C++2008. 9. 11. 20:43
#include <iostream>
using namespace std;
main()
{
 int number, i, j, k;
 cout << "입력해봐 : ";
 cin >> number;
 if (number==1)
 {
  cout << number << "은 소수가 맞다.\n";
 }
 else if (number<=0)
 {
  cout << "에러\n";
 }
 else
 {
  for(i=2; i<=number; i++)
  {
   j = number/i;
   k = number%i;
   if (j==1 && k==0 && i==number)
   {
    cout << number << "은 소수가 맞다.\n";
   }
   else if (j!=1 && k==0)
   {
    i=number;
    cout << number << "은 소수가 아니다.\n";
   }
  }
 }

 return 0;
}

소수인지 아닌지 판별하는 소스
소소는 1과 자기자신으로만 나눠지는 수다.

0이나 음수같은 것을 넣으면 에러가 나온다.
네이버나 다음까페에 떠도는 대충짠 잡소스는 꺼지라 그러고
섬세하고 배려가 넘치는 내 소스

자~ 슬슬 소스가 복잡해진다 ㅎㅎ
Posted by 정훈승
KOREA University/C++2008. 9. 10. 18:27
사용자 삽입 이미지

x에다가 가로길이, y에다가 세로길이를 주면
빗변길이 z를 구할 수 있다.

여기서 인클루드에 cmath 를 입력했는데 이건 c++에서 수학적인 함수를 이용할때 써준다.
sqrt함수가 대표적인 cmath 헤더파일에 들어있는 함수다.

세로값과 가로값을 직접 입력하고 싶다면
cin >> x 또는 y 이런식으로 쓰면 되겠지?

초반에 c++ 너무 쉽고 재밌다고 자만하지 맙시다.
Posted by 정훈승
KOREA University/C++2008. 9. 10. 18:24
사용자 삽입 이미지

흔히 n! 라고 불리는 팩토리얼 함수.
참 재밌는 C++
초반에 너무 쉽다고 자만하지 맙시다.

1부터 입력한 수까지 다 더하는 소스와 다른점이 있다면
초기값이 0이 아니라 1이라는 것이다.
왜냐하면 0을 곱해버리면 값이 0이 되기 때문이다.
Posted by 정훈승