'Programing > C++' 카테고리의 다른 글
템플릿(Template) -클래스 템플릿, 템플릿의 특수화 (0) | 2016.11.30 |
---|---|
템플릿(Template) - 함수 템플릿, 클래스 템플릿, 템플릿의 특수화 (0) | 2016.11.30 |
클래스 (0) | 2016.11.30 |
구조체 (0) | 2016.11.30 |
함수오버로딩 (0) | 2016.11.30 |
템플릿(Template) -클래스 템플릿, 템플릿의 특수화 (0) | 2016.11.30 |
---|---|
템플릿(Template) - 함수 템플릿, 클래스 템플릿, 템플릿의 특수화 (0) | 2016.11.30 |
클래스 (0) | 2016.11.30 |
구조체 (0) | 2016.11.30 |
함수오버로딩 (0) | 2016.11.30 |
템플릿(Template) -클래스 템플릿, 템플릿의 특수화 (0) | 2016.11.30 |
---|---|
템플릿(Template) - 함수 템플릿, 클래스 템플릿, 템플릿의 특수화 (0) | 2016.11.30 |
클래스 (0) | 2016.11.30 |
구조체 (0) | 2016.11.30 |
함수 오버로딩, SWAP (0) | 2016.11.30 |
#include <stdio.h>
#include <stdio.h>
#include <windows.h>
void main()
{
int mainarray[100000] ;
//루틴의속도측정을위해사용
LARGE_INTEGER liCounter1, liCounter2, liFrequency;
QueryPerformanceFrequency(&liFrequency);
QueryPerformanceCounter(&liCounter1);
//10000000000 번의for 루프
for(int i=0; i <100000 ; i++)
{
mainarray[i] =0;
}
QueryPerformanceCounter(&liCounter2);
//측정결과
printf("c 언어수행시간= %f 초\n", (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart);
//어셈블리루틴속도측정을위해사용
QueryPerformanceFrequency(&liFrequency);
QueryPerformanceCounter(&liCounter1);
//어셈루틴번의루프
register int k;
int mainarray2[100000] ;
_asm{
mov dword ptr [k],0
mov eax,dword ptr [k]
mov dword ptr mainarray2[eax*4],0
L1 : cmp eax,99999
je loop_end
add eax,1
mov dword ptr [k],eax
mov eax,dword ptr [k]
mov dword ptr mainarray2[eax*4],0
jmp L1
loop_end:
}
QueryPerformanceCounter(&liCounter2);
//결과
printf("어셈수행시간= %f 초\n", (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart);
}
우호호호 이렇게 중간에 뭔가 해줘야 어셈이 빠르시군요
C언어 ,c++ 어셈블리 변환 (0) | 2016.11.30 |
---|---|
어셈블리와 c언어 속도 비교 (0) | 2016.11.30 |
띄어쓰기까지 입력가능한 scanf (0) | 2016.11.30 |
데이터형 (0) | 2016.11.30 |
반복문 (0) | 2016.11.30 |
#include <stdio.h>
#include <stdio.h>
#include <windows.h>
void main()
{
//루틴의속도측정을위해사용
LARGE_INTEGER liCounter1, liCounter2, liFrequency;
QueryPerformanceFrequency(&liFrequency);
QueryPerformanceCounter(&liCounter1);
//10000000000 번의for 루프
for(int i=1000000000; i > 0; i--)
{
}
QueryPerformanceCounter(&liCounter2);
//측정결과
printf("c 언어수행시간= %f 초\n", (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart);
}
위의 코드를 어셈블리 언어로 변환하는 간단한 방법~
위와 같이 명령 프롬프트에 프로젝트 폴더로 이동하여 cl main.cpp /FAs 라는 명령어를 통해 어셈블리 언어로 변환이 가능하다.
명령어를 수행하면 위와같이 성공적으로 됬단다 라는 말이 나오는데 에러가 있는 부분은 어디어디 에러있으니 고치세요~ 라고 나온다
변환후 폴더에 들어가보면 main.exe, main.asm 이라는 2개의 파일과 object 파일이 생성되는데 뭐 exe파일은 실행이고 asm 파일이 우리가 원하는
어셈블리로 변환된 파일이 되겠다~
변환된 모습~아오 하나도모르겟다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
빠염~
어셈블리 c언어 속도측정결과 (0) | 2016.11.30 |
---|---|
어셈블리와 c언어 속도 비교 (0) | 2016.11.30 |
띄어쓰기까지 입력가능한 scanf (0) | 2016.11.30 |
데이터형 (0) | 2016.11.30 |
반복문 (0) | 2016.11.30 |
#include <stdio.h>
#include <stdio.h>
#include <windows.h>
void main()
{
//루틴의속도측정을위해사용
LARGE_INTEGER liCounter1, liCounter2, liFrequency;
QueryPerformanceFrequency(&liFrequency);
QueryPerformanceCounter(&liCounter1);
//10000000000 번의for 루프
for(int i=10000000000; i > 0; i--)
{
}
QueryPerformanceCounter(&liCounter2);
//측정결과
printf("c 언어수행시간= %f 초\n", (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart);
//어셈블리루틴속도측정을위해사용
QueryPerformanceFrequency(&liFrequency);
QueryPerformanceCounter(&liCounter1);
//어셈루틴번의루프
register int r1=0;
_asm{
mov r1, 10000000000;
L1 : cmp r1,0 // r1 값을0과비교
je loop_end; // r1 0 일경우loop_end
dec r1; // 1을감소시키고다시저장
jmp L1;
loop_end:
}
QueryPerformanceCounter(&liCounter2);
//결과
printf("어셈수행시간= %f 초\n", (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart);
}
어셈블리 c언어 속도측정결과 (0) | 2016.11.30 |
---|---|
C언어 ,c++ 어셈블리 변환 (0) | 2016.11.30 |
띄어쓰기까지 입력가능한 scanf (0) | 2016.11.30 |
데이터형 (0) | 2016.11.30 |
반복문 (0) | 2016.11.30 |
C언어 ,c++ 어셈블리 변환 (0) | 2016.11.30 |
---|---|
어셈블리와 c언어 속도 비교 (0) | 2016.11.30 |
데이터형 (0) | 2016.11.30 |
반복문 (0) | 2016.11.30 |
재귀함수사용한 덧셈 (0) | 2016.11.30 |
어셈블리와 c언어 속도 비교 (0) | 2016.11.30 |
---|---|
띄어쓰기까지 입력가능한 scanf (0) | 2016.11.30 |
반복문 (0) | 2016.11.30 |
재귀함수사용한 덧셈 (0) | 2016.11.30 |
c언어 별찍기, 피라미드 (0) | 2016.11.30 |
띄어쓰기까지 입력가능한 scanf (0) | 2016.11.30 |
---|---|
데이터형 (0) | 2016.11.30 |
재귀함수사용한 덧셈 (0) | 2016.11.30 |
c언어 별찍기, 피라미드 (0) | 2016.11.30 |
c 윤달 구하기, 윤달계산 (0) | 2016.11.30 |
int re=0;
if(number-1 != num-1){
printf("%d + ",number);
re = sum(num,number+1);
}
return re+=number;
int number,i=1;
int result=0;
printf("Enter a natural number : ");
scanf("%d",&number);
result =sum(number,1);
printf("%d = %d\n",number,result);
데이터형 (0) | 2016.11.30 |
---|---|
반복문 (0) | 2016.11.30 |
c언어 별찍기, 피라미드 (0) | 2016.11.30 |
c 윤달 구하기, 윤달계산 (0) | 2016.11.30 |
#undef , 전처리문 (0) | 2016.11.30 |
다중 for문을 이용. 탑의 높이(n)을 받아서 받은만큼의 탑모양을 별(*)로 찍기.
ex )
n=3
n=5
n=10
방법 1)
i가 1~n까지 반복한다고 했을 때,for(i=1; i<=n; i++)
각 줄의 공백( )의 개수는 n-i개이고 for(j=1; j<=n-i; j++)
공백이 찍힌 뒤에 찍히는 별의 개수는i*2-1개 for(j=1; j<=i*2-1; j++)
인 점을 이용.
:맨 처음 문제를 봤을 때 가장 먼저 떠오른 방법입니다.
#include
void main(){
int i,j,n;
cout << "N = ";
cin >> n;
for(i=1; i<=n; i++){
for(j=1; j<=n-i; j++)
cout << " ";
for(j=1; j<=i*2-1; j++)
cout << "*";
cout << "\n";
}
}
방법 2)
i가 2*n-1 까지 2만큼 증가하면서 반복. for(i=1; i<=2*n-1; i+=2) --> 2 만큼 증가하기 때문에 n만큼의 줄을 만들 수 있다.
위 방법으로 반복한다고 할 때,
공백( )의 개수는 2*n-i를 2로 나눈 몫만큼for(j=1; j<=(2*n-i)/2; j++),
별(*)의 개수는 항상 i의 값만큼(2*n-1)인 것을 이용.for(j=1; j<=i; j++)
#include
void main(){
int i,j,n;
cout << "N = ";
cin >> n;
for(i=1; i<=2*n-1; i+=2){
for(j=1; j<=(2*n-i)/2; j++)
cout << " ";
for(j=1; j<=i; j++)
cout << "*";
cout << "\n";
}
}
방법 3)for문 안에 if문 사용.
i가 n부터 1씩 줄어들면서 1에 도달할 때까지 반복 --> 반복 횟수는 위의 방법들과 같음.for(i=n; i>=1; i--)
각 줄에서 모든 출력이 끝나는 점이 2*n-i인 점을 이용해서 반복문을 한번 더 써줌. for(j=1; j<=2*n-i; j++)
i가 n부터 1씩 줄어들면서 1에 도달할 때까지 반복할 때, 공백( )은 항상j가 i보다 작을 때 찍힘.if(j
j가 i보다 크거나 같을 때(공백을 다 찍은 후) *을 찍음. --> 모든 출력이 끝나는 점이 2*n-i인 점을 고려해서 반복문을 한번 더 써줬기 때문에 공백을 찍고 남은 부분 모두 *을 찍으면 원하는 *의 갯수가 나온다. else cout << "*"
#include
void main(){
int i,j,n;
cout << "N = ";
cin >> n;
for(i=n; i>=1; i--){
for(j=1; j<=2*n-i; j++){
if(j
else cout << "*";
}
cout << "\n";
}
}
참고 - <역삼각형 만들기>
ex)
n=3
n=5
n=10
i가 n에서 1씩 감소하면서 1까지 갈 때까지 반복한다고 할때, for(i=n; i>=1; i--)
공백( )의 개수는 (n-i)개 for(j=1; j<=n-i; j++)
*의 개수는 (2*i-1)개 for(j=1; j<=2*i-1; j++)
인 규칙을 이용.
#include
void main(){
int i,j,n;
cout<<"N = ";
cin>>n;
for(i=n; i>=1; i--){
for(j=1; j<=n-i; j++)
cout << " ";
for(j=1; j<=2*i-1; j++)
cout << "*";
cout << "\n";
}
}
반복문 (0) | 2016.11.30 |
---|---|
재귀함수사용한 덧셈 (0) | 2016.11.30 |
c 윤달 구하기, 윤달계산 (0) | 2016.11.30 |
#undef , 전처리문 (0) | 2016.11.30 |
짝수 합 홀수 합 구하기 (0) | 2016.11.30 |