Viết chương trình vẽ một tam giác cân bằng dấu "*"

viết chương trình vẽ một tam giác cân bằng dấu “*”.trong ngôn ngữ C nha
Các bậc tiền bối giúp với ạ.Bài này trong bài 17 list youtube học lập trình C của anh đạt

2 Likes

Bây giờ bạn lấy giấy và bút ra nhé, bạn chia tờ giấy thành cách hàng và cột như cờ cá rô ấy.
Giờ hãy lấy vd về tam giác của bạn, lấy chiều cao tùy vào số hàng của bảng và chiều rộng tùy vào số cột.
Bạng vẽ tam giác ra, rồi tính mấy bao nhiêu ô trống thì đến ngôi sao
vd: tam giác cao 5 hàng,
dòng đầu tiên có 1 ngôi sao (đỉnh tam giác)
dòng thứ 2 thì có 2 ngôi sao( số ngôi sao +1 và số ô trống -1)
và cứ tiếp như thế.

Bạn hay nháp ra giấy trước khi viết code, như làm toán vậy. Khó quá thì hẵng đem ra hỏi nhé.

3 Likes

Tam giác giống vậy hả ?
VD: n=5

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

Cái này thì đơn giản quá mình chỉ gợi ý cho bạn biết cách nhìn thôi, để ý thì:

  • Kí tự được in ra: * và " "
  • Hàng trên có số lượng * luôn bé hơn hàng dưới 2 sao. => tính được số * từng bậc.
  • Nhìn vào nửa bên trái từ trên xuống thì kí tự " " giảm đi 1 đến hàng cuối thì không còn. => tính được số " " từng bậc.
5 Likes

Cho mình hỏi ngu tí, mò từ sáng giờ mà không ra :frowning: làm sao in được 1 kí tự mà ra thành nhiều lần vậy bạn?

Cụ thể bạn gợi ý cho mình cách in * hay " " ra nhiều lần như trong bài tập anh Đạt được không bạn?

Mình cũng mới học C, chưa nắm rõ lắm, đọc gợi ý trên của bạn có hiểu rõ hơn về việc dùng 2 biến làm 2 số lượng của 2 kí tự * và " " nhưng vẫn chưa biết cách in nó ra nhiều lần như thế nào vậy? Có dùng loop hay gì không bạn?

Biếu là có đáp án trên diễn đàn luôn rồi nhưng mình muốn được gợi ý rồi tự mò ra hơn là xem đáp án thì chán lắm :smile:

Thanks.

Đúng rồi dùng vòng lặp đó. Cụ thể là 3 vòng lặp.

  • 1 vòng dùng để in từng dòng
  • 1 vòng dùng để in kí tự khoảng trắng " "
  • 1 vòng dùng để in kí tự *
    Chắc bài 17 anh Đạt đang dạy về vòng lặp.
    Chúc làm tốt. :grin:
2 Likes

Hì, cả tuần nay bận quá chả làm ăn gì được, chiều giờ mình mới ngồi mò lại theo hướng dẫn của bạn (vẫn chưa xem đáp án :smile: )

Đây là k.quả, bạn xem giúp mình xem có cách nào tối ưu chương trình (như giảm số dòng code, bỏ các phần dư thừa) của mình hay bạn có cách nào khác chỉ mình luôn nha bạn :blush:

Lần thử đầu:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n; int q = 0;
    printf("Chuong trinh nay se in ra tam giac vuong can\n");
    printf("Nhap chieu cao tam giac cua ban: \n");
    scanf("%d",&n);

    while (n > 0)
    {
        for (int i = 1; i<n; i++)
            printf("%c ", ' ');
        for (int k = 0; k <= q; k ++)
            printf("%c ", '*');
        for (int k = 0; k < q; k ++)
            printf("%c ", '*');
        n -- ;
        q ++ ;
        printf("\n");
    }
return 0;

}

Lần thử thứ 2:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n; int q = 0;
    printf("Chuong trinh nay se in ra tam giac vuong can\n");
    printf("Nhap chieu cao tam giac cua ban: \n");
    scanf("%d",&n);

    while (n > 0)
    {
        for (int i = 1; i<n; i++)
            printf("%c ", ' ');
        for (int k = 0; k <= q; k ++)
            printf("%c ", '*');
        n -- ;
        q += 2 ;
        printf("\n");
    }

    return 0;
**strong text**
}

Mà làm sao cho nó ra tam giác nhọn ta? :frowning:

Update: sorry, nãy tại để dư khoãng trống nên thành ra nó ra vuông cân :slight_smile:

Thử lần 3:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n; int q = 0;
    printf("Chuong trinh nay se in ra tam giac can\n");
    printf("Nhap chieu cao tam giac cua ban: \n");
    scanf("%d",&n);

    while (n > 0)
    {
        for (int i = 1; i<n; i++)
            printf("%c", ' ');
        for (int k = 0; k <= q; k ++)
            printf("%c", '*');
        n -- ;
        q += 2 ;
        printf("\n");
    }

    return 0;

}   
1 Like

Bài này còn đơn giản đó.
Nếu vẽ tam giác cân rỗng mới nhức đầu :slight_smile:

2 Likes

Có nữa hả, wow thanks bạn, để mình thử, mà cái này cũng làm với vòng lặp hả bạn? Tại mình mới học tới vòng lặp à :slight_smile:

1 Like

Khoảng 2 tiếng nữa mình upload cho bạn khoảng 4 - 5 bài về vẽ hình tam giác + chữ nhật.
Chỉ dùng vòng lặp thôi ! Nhưng mình dùng thêm hàm cho nó tiện :slight_smile:

3 Likes

bạn ghi đề ra trước hết được không bạn? xong đáp án ở sau nha :smile: mình sợ đọc nhầm là mất hay

Không sao đâu, mình up đề lên đây luôn. Còn code giải mình sẽ để trong codepad.org , mà bạn học được những kiến thức gì rồi. Biết cout . cin hay scanf chưa ?
Code giải của mình là bên C++, mình làm biến chuyển qua C lắm

1 Like

scanf à bạn, nhưng mấy cái kia có gì nếu cần mình tra rồi học cũng được.
Mà mình mới học C à bạn :frowning: C++ thua

Uhm. Thực ra kiến thức cho newbie thì C với C++ chỉ khác nhau ở chỗ printfcoutscanfcin thôi. Vậy thì trong code giải, bạn thấy chỗ nào là cout thì chuyển thành printfcin chuyển thành scanf thôi, không khó khăn lắm đâu :slight_smile:
Kiến thức thì chỉ cần if else, vòng lặp và hàm thôi (hàm cũng không cần thiết lắm)
Nếu bạn thấy khó thì chút nữa mình reply, ban bookmark cái comment của mình lại, và cứ để đó, học hết playlist C của anh Đạt rồi bật lên xem.
Nếu vẫn không hiểu, tạo Topic hỏi nhé :slight_smile:

3 Likes

Uhm ok bạn, còn bài tam giác cân ban đầu bạn xem giùm mình luôn nha :slight_smile:

Dưới đây là code của mình, mình mới học, có ai xem giúp mình rồi chỉnh lại mấy chỗ thừa hay có cách nào ngắn hơn chỉ mình với nha :smile:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n; int q = 0;
    printf("Nhap chieu cao tam giac cua ban: \n");
    scanf("%d",&n);
    int a = n-2;

    for (int c = 1; c < n; c ++)
        printf("%c",' ');
    printf("%c",'*');
    printf("\n");

    while (a > 0)
    {
        for (int i = 0; i<a; i++)
            printf("%c", ' ');
        printf("%c", '*');
        for (int k = 0; k <= q; k ++)
            printf("%c", ' ');
        printf("%c", '*');
        a -- ;
        q += 2;
        printf("\n");
    }
    for (int b = 2*n-1; b > 0; b --)
        printf("%c",'*');


    return 0;
}

Bài đó đơn giản lắm. Mình chỉ hướng dẫn sơ thôi nhé :slight_smile:
Ban đầu bạn tạo 1 vòng lặp mẹ ở ngoài để lặp chiều cao tam giác, ví dụ chiều cao tam giác là 5 thì lặp từ 1 đến 5.
Trong vòng lặp mẹ sẽ có 2 vòng lặp con, 1 vòng lặp con sẽ lặp khoảng trắng, sau khi lặp xong sẽ run sang vòng lặp con thứ 2 dùng để lặp dấu *

Bố cục của nó là như thế này

for (int i = ? i <= ?; i++)
{
       for (int j = ?; j <= ?; j++)
            printf(" ");
       for (int x = ?; x <= ?; x++)
            printf("*");
       printf("\n");
}

Những chỗ ? bạn tự điền nhé !

Bài tập:

Bài 1 : Nhập vào m và n. In ra hình chữ nhật đặc kích thước m x n.
VD: Nhập vào m & n là 4 & 5 => In ra:

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

Bài 2 : Giống bài 1 nhưng là hình chữ nhật rỗng
VD: Nhập m & n là 4 & 5 => In ra:

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

Bài 3 : Nhập vào độ dài cạnh n, in ra tam giác vuông cân.
VD: Nhập n là 4 => In ra:

*
* *
* * *
* * * *

Bài 4 : Nhập vào chiều cao n. In ra tam giác cân (giống bài của bạn)

Bài 5 : Giống bài 4, nhưng là tam giác cân rỗng
VD: Nhập chiều cao là 4 => In ra:

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

Bài 6 : Giống bài 1 nhưng là hình vuông

Bài 7 : Giống bài 2 nhưng là hình vuông.

Hiện tại chỉ có nhiêu đây, đã khuya + mệt nên có gì mai mốt mình sẽ update thêm nhiều bài tập cho bạn !

Còn Source code giải mình sẽ upload sau hoặc khi nào bạn cần mình sẽ up !

Xin lỗi vì chậm trễ :slight_smile:

4 Likes

Ý bạn là bài tam giác mà không có khoảng trống ở giữa phải không bạn?

Bài tam giác cân rỗng mình cũng có làm và đăng code ở trên rồi bạn mà hơi dài :frowning: không biết có thừa chỗ nào hay có cách nào ngắn hơn không nhỉ?

À mấy bài tập thanks bạn nhiều :smile: có bài làm là quá hay rồi bạn. Khi nào bạn rảnh bạn cứ up bài giải nha, mình bookmark lại rồi xem sau cũng được, chứ làm tới đâu lại hỏi sợ phiền bạn nữa :blush:

Cảm ơn bạn nhiều nghen.

2 Likes

Souce code giải: http://codepad.org/PCWXo4Fn

Chúc bạn học tốt :slight_smile:

Có thắc mắc cứ hỏi mình

p/s: Nói thêm là mấy bài này mình làm lâu lắm rồi nên source code giải có thể “lỗi thời”, tự bạn cải tiến và phát triển thêm nhé, xem nó như tham khảo thôi :slight_smile:

2 Likes

Ok, thanks bạn, có gì không hiểu chắc minh làm cái post trên diễn đàn hỏi. :smile:

1 Like

Dễ, chỉ cần print" * "… :joy:

Nhìn vào comment như bên dưới, thì bạn sẽ biết làm(không dám bảo đảm). Còn mình không code C không được mà bạn học C nên không dám post code java(Xin lỗi nhé). Dùng mảng hai chiều là chủ yếu, thay mấy con số đó bằng ký tự " ". Dùng hai vòng lập for để gán giá trị, xong rồi dùng hai vòng lập for nữa để xuất giá trị. Có thể dùng char hoặc String. Bạn tìm trên mạng có nhiều mà.

/**
         *  0 1 2 * 4 5 6 
         *  0 1 * * * 5 6 
         *  0 * * * * * 6 
         *  * * * * * * * 
         */
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?