30/09/2018, 16:24

Viết một chương trình in ra chữ cái đầu tiên trong họ của bạn?

em mới học c nên còn gà lắm. mn có thể giúp em bài này được không ạ.
viết một chương trình in ra chữ cái đầu tiên trong họ của bạn, kích thước 9x9 bằng ký tự *. ví dụ như chữ V. vì em họ vũ.@@

Nguyễn Minh Dũng viết 18:25 ngày 30/09/2018

Eo, đọc cái đề không hiểu lắm. Cái câu “kích thước 9x9 bằng ký tự *” có nghĩa là gì thế?

maivanquan viết 18:27 ngày 30/09/2018

cai nay minh dung 9 mang , moi mang gom 9 phan tu dc ko nhi

Gió viết 18:29 ngày 30/09/2018

Bạn cần có 1 bảng mã bitmap cho từng kí tự

ví dụ chữ A

  **    
 ****   
**  **  
**  **  
******  
**  **  
**  **  

ta chuyển về 1 dòng là 1 số biểu diễn trạng thái bit của dòng đó

char font[][8]={
    {0b001100,
     0b011110,
     0b110011,
     0b110011,
     0b111111,
     0b110011,
     0b110011}
};

bây giờ để hiện lên bảng ta viết hàm print_font như sau:

void print_font(char *bitmap){
    int i,j;
    for(j=0;j<8;++j){
        for(i=7;i>=0;--i){
            putchar((bitmap[j]&(1<<i))?'*':' ' ); /* lay bit thứ i */
        }
        printf("\n");
    }
}

###=> chương trình đầy đủ: mình in bảng 8x8. 9x9 cũng tương tự thôi

#include <stdio.h>

/*
  **    
 ****   
**  **  
**  **  
******  
**  **  
**  **  

*/
char font[][8]={
    {0b001100,
     0b011110,
     0b110011,
     0b110011,
     0b111111,
     0b110011,
     0b110011}
};

void print_font(char *bitmap){
    int i,j;
    for(j=0;j<8;++j){
        for(i=7;i>=0;--i){
            putchar((bitmap[j]&(1<<i))?'*':' ' );/* lay bit thứ i */
        }
        printf("\n");
    }
}
int main(void) {
    print_font(font[0]);
    return 0;
}
Nguyễn Minh Dũng viết 18:26 ngày 30/09/2018

Wow, ý tưởng rất hay @Gio ơi

maivanquan viết 18:40 ngày 30/09/2018

vay lam sao minh nhan biet dc chi nao la chu cai dau tien cua day ky tu ten cua minh a ? , e chua ro lam ve cai nay

Gió viết 18:34 ngày 30/09/2018

Cái này chắc dễ làm mà.

+giả sử chuỗi tên: Ten
+lay ki tự đầu tiên:
  i=0;
  while (!isalpha(Ten[i])) ++i;
+ in ten:
   - ta co bang font là biểu diễn tương ứng trạng thái của từng kí tự:
        VD: A->0,B->1...

chuong trinh day du

#include <stdio.h>

/*
  **    
 ****   
**  **  
**  **  
******  
**  **  
**  ** 

******  
 **  ** 
 **  ** 
 *****  
 **  ** 
 **  ** 
****** 

*/
char font[][8]={
    {
    0b001100,
    0b011110,
    0b110011,
    0b110011,
    0b111111,
    0b110011,
    0b110011
    },
    {
    0b111110,
    0b011011,
    0b011011,
    0b011110,
    0b011011,
    0b011011,
    0b111110
    }
/** bo sung cac ki tu vao day **/
};

void print_font(char *bitmap){
    int i,j;
    for(j=0;j<8;++j){
        for(i=7;i>=0;--i){
            putchar((bitmap[j]&(1<<i))?'*':' ' );
        }
        printf("\n");
    }
}
void first_char(char* ten){
    int i=0;
    while(!isalpha(ten[i]))i++;
    print_font(font[ten[i]-'A']);
}
int main(void) {
    char ten[100];
    int n=100;
    fgets(ten,n,stdin);
    first_char(ten);
    return 0;
}

Programmer Riot viết 18:40 ngày 30/09/2018

mới đầu đọc tựa đề tưởng bài này đơn giản, vào xem ms thấy bài này thâm thúy thật,.
À mà cho e hỏi cái hàm fgets(ten, n, stdin) là hàm gì thế ??

Nguyễn Minh Dũng viết 18:27 ngày 30/09/2018

À mà cho e hỏi cái hàm fgets(ten, n, stdin) là hàm gì thế ??

Ở đây có giải thích qua nè @Programmer_Riot

Từ bài @nhatlonggunz hỏi ở đây [Video] Ngôn Ngữ C - 24 - Hàm nhập vào từ bàn phím, scanf: Đạt đã trả lời ở đây Nhưng mà Đạt chưa hướng dẫn cách sử dụng hàm fgets một cách chi tiết. Nhiều bạn mới học hay dùng scanf để nhập chuỗi. Nhưng đó không phải là cách đúng để nhập chuỗi. Có bạn nào có thể giúp mình giải thích cách sử dụng hàm fgets không?

Bài liên quan
0