Halaman

C++ tugas

 C++ segitiga aplhabet dengan tinggi di-input keyboard :
 segitiga alphabet dengan menginput tinggi segitiga ^^v

#include <stdio.h>
#include <windows.h>

#define MAX 25
#define ALPHA 26
#define HORIZONTAL 0
#define VERTICAL 1

void FillBuffer(char*, int, int);
void DisplayBuffer(const char*, int, int);
void FlipBuffer(char*, int, int, int);
void Delay(void);

int main(int argc, char *argv[]) {
    char buffer[MAX][MAX];
    int max;
    printf("-> Tinggi : ");
    scanf("%d",&max);
    if((max > 0) && (max <= 25)) {
        FillBuffer((char*)buffer,max,max);
        printf("-> Pertama :\n");
        DisplayBuffer((char*)buffer,max,max);
        FlipBuffer((char*)buffer,max,max,HORIZONTAL);
        printf("\n-> Kedua :\n");
        DisplayBuffer((char*)buffer,max,max);
    } else {
        printf("\n-> I am Sorry!\n");
    }
    system("PAUSE");
    return 0;
}

void FillBuffer(char* buffer, int rows, int cols) {
    int row, col, idx = 0;
    memset(buffer,' ',rows*cols);
    for(row = 0; row < rows; ++row) {
        for(col = 0; col < row+1; ++col) {
            *(buffer+cols*row+col) = 'a'+idx;
            idx = (idx+1)%ALPHA;
        }
    }
}

void DisplayBuffer(const char* buffer, int rows, int cols) {
    int row, col;
    for(row = 0; row < rows; ++row) {
        for(col = 0; col < cols; ++col) {
            printf("%2c",*(buffer+cols*row+col));
            Delay();
        }
        printf("\n");
    }
}

void FlipBuffer(char* buffer, int rows, int cols, int direction) {
    switch(direction) {
        case HORIZONTAL : {
            int row;
            for(row = 0; row < rows; ++row) {
                int begin = 0, end = cols-1;
                while(begin < end) {
                    int idx = cols*row;
                    char tmp = *(buffer+idx+begin);
                    *(buffer+idx+begin) = *(buffer+idx+end);
                    *(buffer+idx+end) = tmp;
                    ++begin;
                    --end;
                }
            }
        } break;

        case VERTICAL : {
            int col;
            for(col = 0; col < cols; ++col) {
                int begin = 0, end = rows-1;
                while(begin < end) {
                    char tmp = *(buffer+rows*+col+begin);
                    *(buffer+rows*+col+begin) = *(buffer+rows*+col+end);
                    *(buffer+rows*+col+end) = tmp;
                    ++begin;
                    --end;
                }
            }
        } break;

        default :
            break;
    }
}

void Delay(void) {
    int i = 0;
    while(i < 10000000) {
        ++i;
    }
}

2 komentar: