Step by step

My diary

...

Search

breakinformation. Powered by Blogger.

Step by step

2018년 10월 17일 수요일

bubble sort animation


123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122#include <Windows.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#define MAXIMUM 20 + 1 struct Chart {     int Data[MAXIMUM];    int Space[MAXIMUM][MAXIMUM]; }; /* Sort */void Bubble_Sort(struct Chart* _chart, int Array_Size); void Swap(int* current, int* next);////////// int Insert_Random_Numbers_In_A_Chart(struct Chart* _chart, int The_Number_Of);int Draw_chart(struct Chart* _chart); int Print_Space(struct Chart* _chart, int limit_horizon); int main(void) {     struct Chart chart = { .Data = { 0, },.Space = { 0, } };     Insert_Random_Numbers_In_A_Chart(&chart, 20); // max = 20, MAXIMUM     Bubble_Sort(&chart, 20); // max = 20, MAXIMUM     //Draw_chart(&chart);    //Print_Space(&chart, 50);     return 0;} void Bubble_Sort(struct Chart* _chart, int Array_Size) {     int All_Element = 0, Partial_Element = 0;    for (All_Element = 0; All_Element < Array_Size; All_Element++) {        for (Partial_Element = 0; Partial_Element < Array_Size - 1; Partial_Element++) {             if (_chart->Data[Partial_Element] <= _chart->Data[Partial_Element + 1]) {                 /* animation */                Sleep(10);                system("cls");                 Draw_chart(_chart);                Print_Space(_chart, Array_Size);                ///////////////                 Swap(&_chart->Data[Partial_Element], &_chart->Data[Partial_Element + 1]);            }        }    }     return;}int Draw_chart(struct Chart* _chart) {     // clear    int row = 0, column = 0;    for (column = 0; column < MAXIMUM; column++) {        for (row = 0; row < MAXIMUM; row++) {             _chart->Space[column][row] = 0;        }    }     // draw    int index = 0;    for (index = 0; _chart->Data[index] != 0; index++) {         _chart->Space[_chart->Data[index] - 1][index] = _chart->Data[index];    }     return 0;}int Insert_Random_Numbers_In_A_Chart(struct Chart* _chart, int The_Number_Of) {     srand((unsigned)time(NULL));     int loop = 0, Random_Number = 0, MAX = MAXIMUM;    for (loop = 0; loop < The_Number_Of; loop++) {         Random_Number = (rand() % (MAX - ((MAX / 3) - ((MAX / 3) % 10)))) + ((MAX / 3) - ((MAX / 3) % 10));        _chart->Data[loop] = Random_Number;    }     return 0;}int Print_Space(struct Chart* _chart, int limit_horizon) {     int row = 0, column = 0;    for (column = MAXIMUM - 1 - 1; column > 0; column--) {        for (row = limit_horizon; row > 0; row--) {             if (_chart->Space[column][row] == 0) {                 printf("   ");                continue;            }            printf("%3d", _chart->Space[column][row]);        }        printf("\n");    }     return 0;}void Swap(int* current, int* next) {     int temporary = 0;     temporary = *current;    *current = *next;    *next = temporary;     return;}Colored...

2018년 10월 16일 화요일

drawing sign


1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495#include <stdio.h>#include <math.h>#define MAXIMUM 1000#define PI 3.14159265359 struct Trigonometric_Function {        float sign[MAXIMUM];    float cosign[MAXIMUM];    float tangent[MAXIMUM];}; int Function_Sign (struct Trigonometric_Function* _trigonometric, int Angle); int Drawing_Sign (struct Trigonometric_Function* _trigonometric, char space[][MAXIMUM], int the_number_of_sign); void Space_Print (char space[][MAXIMUM], int limit_horizon);void Drawing_Graticule (char space[][MAXIMUM]); void print (struct Trigonometric_Function* _trigonometric); // int main (void) {        struct Trigonometric_Function trigonometric = { .sign = { 0, }, .cosign = { 0, }, .tangent = { 0, } };    char Space[40 + 1][MAXIMUM] = { (char) 0, };    int radian = 360;        int the_number_of_sign = Function_Sign (&trigonometric, radian);        Drawing_Graticule (Space);    Drawing_Sign (&trigonometric, Space, the_number_of_sign);        Space_Print (Space, 51);    //print (&trigonometric); // testing        return 0;} int Drawing_Sign (struct Trigonometric_Function* _trigonometric, char space[][MAXIMUM], int the_number_of_sign) {        int index = 0;    for (index = 0; index < the_number_of_sign; index++) {                _trigonometric->sign[index] *= 20;        space[(40 / 2) - (int)_trigonometric->sign[index]][index] = 's';    }        return 0;}int Function_Sign (struct Trigonometric_Function* _trigonometric, int Angle) {        int The_Number_Of_Sign = 0;    int loop = 0, index = 0, unit = 10;    for (loop = 0, index = 0; loop < Angle + 1; loop += unit, index++) {                _trigonometric->sign[index] = sin(PI * loop / 180.f);        The_Number_Of_Sign++;    }        return The_Number_Of_Sign;}void Space_Print (char space[][MAXIMUM], int limit_horizon) {        int row = 0, column = 0;    for (column = 0; column < 40 + 1; column++) {        for (row = 0; row < limit_horizon; row++) {                        printf ("%2c", space[column][row]);        }        printf ("\n");    }}void Drawing_Graticule (char space[][MAXIMUM]) {        int loop = 0;    for (loop = 0; loop < 40 + 1; loop++) {                space[loop][0] = '[';    }    for (loop = 0; loop < MAXIMUM; loop++) {                space[(40 + 1 - 1) / 2][loop] = '-';    }        return;} void print (struct Trigonometric_Function* _trigonometric) { // testing        int loop = 0;    for (loop = 0; loop < 19; loop++) {                printf ("%f\n", _trigonometric->sign[loop]);    }}Colored...

calculation


123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176/* calculation */#include <stdio.h>#include <stdlib.h>#include <string.h> #define MAXSIZE 1000 struct _CALCULATOR {     float Number[(MAXSIZE / 2)];    char Operator[(MAXSIZE) / 2];}; char* String_Tokenize(char* String, char const* _Delimiter);int Number_in_Calculator(struct _CALCULATOR* _calculate, char* _paper);int Operator_in_Calculator(struct _CALCULATOR* _calculate, char* _paper); void Nagative_Number_Distinction(struct _CALCULATOR* _calculate, int sign);float Priority_Operation(struct _CALCULATOR* _calculate, int The_Number_Of, int sign); void print_testing(struct _CALCULATOR* _calculate); int main(void) {     struct _CALCULATOR calculate = { .Number = { 0, },.Operator = { (char) 0, } };    char Paper[MAXSIZE] = "- 1 + 2 + 3 * 2 - 1 + 9 / 2 - 10 ";    char Copy_Paper[MAXSIZE] = { NULL, };    char Start_Sign = Paper[0];     memcpy(Copy_Paper, Paper, sizeof(Paper));     int Count_Number = 0, Count_Operator = 0;    Count_Number = Number_in_Calculator(&calculate, Paper);    Count_Operator = Operator_in_Calculator(&calculate, Copy_Paper);     int Sign = 0;    if (Start_Sign != '-') Sign = 1;     Nagative_Number_Distinction(&calculate, Sign);    //print_testing(&calculate);     if (Sign == 0) Sign = 1;    else Sign = 0;     float result = 0;    result = Priority_Operation(&calculate, Count_Number, Sign);     printf("%.3f\n", result);     //print_testing(&calculate);     return 0;} float Priority_Operation(struct _CALCULATOR* _calculate, int The_Number_Of, int sign) {     int index = 0;    for (index = 0; _calculate->Operator[index] != NULL; index++) {         if (_calculate->Operator[index] == '*') {             _calculate->Number[index - sign] *= _calculate->Number[index - sign + 1];            _calculate->Number[index - sign + 1] = 0;        }        else if (_calculate->Operator[index] == '/') {             _calculate->Number[index - sign] /= _calculate->Number[index - sign + 1];            _calculate->Number[index - sign + 1] = 0;        }    }        float Calculation_Result = 0.f;    for (index = 0; index < The_Number_Of; index++) {         Calculation_Result += _calculate->Number[index];    }     return Calculation_Result;}void Nagative_Number_Distinction(struct _CALCULATOR* _calculate, int sign) {     int index = 0;    for (index = 0; _calculate->Operator[index] != NULL; index++) {         if (_calculate->Operator[index] == '-') {             _calculate->Number[index + sign] *= -1;        }    }     return;}int Number_in_Calculator(struct _CALCULATOR* _calculate, char* _paper) {     char* Pointer = NULL;    Pointer = String_Tokenize(_paper, " +-*/=");     int index = 0, The_Number_Of_Count = 0;    while (Pointer != NULL) {         if (atof(Pointer)) {             _calculate->Number[index++] = atof(Pointer);            The_Number_Of_Count++;        }        Pointer = String_Tokenize(NULL, " +-*/=");    }     return The_Number_Of_Count;}int Operator_in_Calculator(struct _CALCULATOR* _calculate, char* _paper) {     char* Pointer = NULL;    Pointer = String_Tokenize(_paper, " 0123456789=");     int index = 0, The_Number_Of_Count = 0;    while (Pointer != NULL) {         if (*Pointer) {             _calculate->Operator[index++] = *Pointer;            The_Number_Of_Count++;        }        Pointer = String_Tokenize(NULL, " 0123456789=");    }     return The_Number_Of_Count;}char* String_Tokenize(char* _String, char const* _Delimiter) {     char static* String = NULL;    char const* Delimiter = NULL;     if (_String == NULL) {         _String = String;    }    else {         String = _String;    }     if (*_String == NULL) return NULL;     while (*String) {         Delimiter = _Delimiter;        while (*Delimiter) {             if (*String == *Delimiter) {                 *String = NULL;                String++;                return _String;            }            Delimiter++;        }        String++;    }     return _String;}void print_testing(struct _CALCULATOR* _calculate) {     int loop = 0;    for (loop = 0; _calculate->Number[loop] != 0; loop++) {         printf("%.2f\n", _calculate->Number[loop]);    }    for (loop = 0; _calculate->Operator[loop] != 0; loop++) {         printf("%c\n", _calculate->Operator[loop]);    }     return;}Colored...