Code vẽ hình chữ nhật rỗng bị sai

Em vẽ không ra đầu trên đầu dưới của hình chữ nhật. Mọi người chỉnh code giúp em với ạ. Em cảm ơn

#include <iostream>
using namespace std; 
int main () { 
  int cd; 
  int cr; 
  cout << "\n nhap chieu dai: "; 
  cin >> cd; 
  cout << "\n nhap chieu rong: "; 
  cin >> cr; 


  for ( int i = 1; i<=cr; i++ ) { 
   for ( int j = 1; j<=cd;j++) { 
   if (i !=1 ||i!=cr) { 
       if (j==1||j==cd) {
	   cout << "*"; 
    } else cout << " ";
   } else cout << "*"; 
  }
  cout << "\n"; 
   }
   return 0; 
} 

Sao đăng code rồi lại xoá đi vậy bạn. Nếu do bị mất thì dùng markdown nha. Đăng mỗi ảnh vậy không tốt tí nào. Link hướng dẫn markdown Cách post Code dùng Markdown trong Category Programming
Đặt title gọn lại nhé. Những cái linh tinh như đề bài hay thông tin cần thiết thì bỏ vào phần nội dung, không để tiêu đề dài như vậy.
Post tạm code cho mọi người dễ nhìn.

#include<iostream>

using namespace std;

int main(void){
    int cd;
    int cr;
    cin >> cd >> cr;

    for(int i = 1 ; i <= cr ; i++ ){
        for(int j = 1 ; j<= cd ;j++){
            if(i != 1 ||i != cr){
                if(j ==1 || j ==cd){
                    cout << "*";
                }
                else cout << " ";
            }
            else cout << "*";
        }
        cout << endl;
    }
    return 0;
}
6 Likes

Thứ một: đặt tên biến “tường minh” (ý là rõ ràng ấy) xíu bạn. bạn đặt vậy lúc làm app bự thì sao. “cái lông mày” thì thành “clm” hử hử ?
Thứ 2: mình ngu học chưa nắm được ý tưởng của bạn, bạn có thể giải thích bằng chữ ra được không ?

5 Likes

Vâng em cảm ơn đã góp ý ạ

Em sửa lại r ạ :smiley:

Bạn hiểu dòng điều kiện này thế nào?
i khác 1 hoặc i khác chiều rộng phải không?
Vậy thì điều kiện này luôn đúng, tức là chẳng khác gì bạn viết if(true).
Vì sao nó luôn đúng thì bạn cứ thử gán 1 giá trị bất kì và xét nó (trên giấy) xem.

6 Likes

Thì in hai cạnh ngang riêng :smiley:

7 Likes

Bạn nghĩ thử xem trong những giá trị nào của chiều dài, hoặc chiều rộng thì in ký tự *
Theo như 2 vòng lặp for của bạn thì chiều rộng là hàng dọc, chiều dài là hàng ngang.

6 Likes

Nếu không phải thế thì làm cách nào ở trong một vòng for thôi hay phải chạy 2 vòng for riêng biệt ạ

1 for: Lấy giấy kẻ ô vẽ hệ trục tọa độ và suy ra quy luật :slight_smile:
3 for: Cách này dễ viết và đọc code hơn.

7 Likes

Ở đoạn này:

for(int i = 1; i <= cr; i++ ){ 
    for(int j = 1; j<= cd; j++){

Hình như cr là chiều rộng, cd là chiều dài. Khi làm mấy bài vẽ hình trên console thì thường người ta sẽ vẽ từng hàng một chứ nhỉ? Muốn vẽ từng cột tất nhiên vẫn được, nhưng rối rắm hơn chút, và không thể hoán đổi chiều dài và chiều rộng như đoạn code trên. Muốn biết lí do vì sao thì chỉ cần kẻ ô vuông (hoặc bảng) trên giấy rồi đánh số trên từng hàng, từng cột rồi thử đánh dấu * hay cái gì đó là hiểu.

6 Likes

Mà đặt chiều cao (height) với chiều ngang (width) mới phải :smiley: dài rộng chỉ là so độ dài thôi, chứ không biết là hình đứng hay ngang.

7 Likes

Code ở trên là em nghĩ là em vẽ mỗi chiều rỗng là em sẽ vẽ một chiều * chứ đâu có vẽ chiều dọc gì đâu ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?