Trang ChínhTrang Chính  CalendarCalendar  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Thành viênThành viên  NhómNhóm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  

Share | 
 

 In tam giác-(Câu lệnh lặp FOR-WHILE)

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
Tboy
Cá voi
Cá voi
avatar


Nam Tổng số bài gửi : 178
Cảm ơn : 413
Danh vọng : 4
Join date : 03/01/2011
Age : 26
Đến từ : TPHCM

Bài gửiTiêu đề: In tam giác-(Câu lệnh lặp FOR-WHILE)   Tue Jan 04, 2011 10:54 am

Tue Jan 04, 2011 10:54 am » In tam giác-(Câu lệnh lặp FOR-WHILE)
Đề bài: Nhập số nguyên dương n.Hãy in các tam giác cân và vuông cân bằng dấu "*" có chiều cao là n. 🐷
Yêu cầu:sử dụng câu lệnh if,for.


Code:
//IN TAM GIAC
#include <stdio.h>
#include <conio.h>
void main()
{
  int n,i,j;
  printf("Nhap vao so nguyen duong n: ");
  scanf("%d",&n);
  for (i=1;i<=n;i++)
  {
        for (j=1;j<=i;j++)
           printf(" *");
       printf("\n");
  }
  printf("\n");
  for (i=1;i<=n;i++)
  {
        for (j=1;j<=(n-i);j++)
           printf("  ");
       for(int d=1;d<=(2*i-1);d++)
            printf(" *");
         printf("\n");
  }
  getch();
}


Hướng giải: Ta cần in dấu *, khoảng trắng và dấu xuống hàng \n
Với tam giác vuông cân: ta thấy dấu * và khoảng trắng liền nhau nên gộp chung lại trong lệnh printf("* ");(có khoảng trắng kế bên dấu *) để in ra nhìu dấu "* " ta dùng 1 câu lệnh for
Khi in hết "* " ta cho in \n,cứ dòng này đến dòng khác lặp lại như vậy nên ta dùng vòng lặp for cho biến i tương ứng là số thứ tự dòng chạy từ 1 đến n, bên trong là vòng lặp in "* " và lệnh printf("\n")
Với tam giác cân: ta làm tương tự như cần 1 vòng lặp in khoảng trắng xong tới 1 vòng lặp in dấu * , là lệnh printf("\n") khi hai lệnh for kết thúc, cả 3 nằm trong một lệnh for với biến i là số thứ tự dòng chạy từ 1 đến n. Dấu * và khoảng trắng in ra phải theo qui luật, ta xem tương ứng giữa biến i và số khoảng trắng, số dấu sao vì mỗi dòng thì in khác nhau.

Code update IN tam giác cân

Code:
#include <stdio.h>
#include <conio.h>
void main()
{
  int n;
  printf("Nhap vao n: ");
  scanf("%d",&n);
  for(int i=1;i<=n;i++)
  {
      for(int j=1;j<=n+i-1;j++)
        if(j<=n-i)
            printf("  ");
        else printf("* ");
      printf("\n");
  }
  getch();
}
Hướng giải: Dùng 2 vòng lặp, vòng xuống dòng và dòng in kí tự, dùng if để chọn in khoảng trắng hay in *
In cả 2 tam giác cùng lúc

Code:
//IN CAC TAM GIAC
#include <stdio.h>
#include <conio.h>
void main()
{
  int n;
  printf("Nhap vao so nguyen duong n: ");
  scanf("%d",&n);
  for (int i=1;i<=n;i++)
  { 
      for (int vuong=1;vuong<=i;vuong++)
        printf("* ");
      for (int kt=1;kt<=2*(n-i);kt++)
        printf("  ");
      for(int can=1;can<=(2*i-1);can++)
        printf(" *"); 
      printf("\n");
  }
  getch();
}

Code update:


Code:
//IN CAC TAM GIAC
#include <stdio.h>
#include <conio.h>
void main()
{
   int n;
   printf("Nhap vao so nguyen duong n: ");
   scanf("%d",&n);
   for (int i=1;i<=n;i++)
   {
      for (int j=1;j<=i+2*n;j++)
         if(j<=i||j>2*n-i+1)
            printf("* ");
         else printf("  ");
      printf("\n");
   }
   getch();
}


Tboy



Được sửa bởi Tboy ngày Wed Jan 19, 2011 9:21 pm; sửa lần 10.
Về Đầu Trang Go down
Xem lý lịch thành viên http://taplaptrinh.forumvi.com
theday38
Vịt cồ
Vịt cồ
avatar


Tổng số bài gửi : 8
Cảm ơn : 10
Danh vọng : 0
Join date : 06/01/2011

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Thu Jan 06, 2011 9:29 pm

Thu Jan 06, 2011 9:29 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
Cho mình xin hỏi quý đồng đạo có cách nào làm được như thế này không? Share mình với...
Mình sợ bác Luận nhà ta bắt bẻ không giống sách sad



theday38

Về Đầu Trang Go down
Xem lý lịch thành viên
Tboy
Cá voi
Cá voi
avatar


Nam Tổng số bài gửi : 178
Cảm ơn : 413
Danh vọng : 4
Join date : 03/01/2011
Age : 26
Đến từ : TPHCM

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Thu Jan 06, 2011 9:36 pm

Thu Jan 06, 2011 9:36 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
leocot thanks vì đã có ý kiến thảo luận, mình sẽ suy nghĩ code

thatvong mà sa0 in được màn hình thế lại hem bit code


Tboy

Về Đầu Trang Go down
Xem lý lịch thành viên http://taplaptrinh.forumvi.com
theday38
Vịt cồ
Vịt cồ
avatar


Tổng số bài gửi : 8
Cảm ơn : 10
Danh vọng : 0
Join date : 06/01/2011

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Thu Jan 06, 2011 9:41 pm

Thu Jan 06, 2011 9:41 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
Tại vì code ngoài khả năng hiểu biết...
Ổng hỏi thì chết sad


theday38

Về Đầu Trang Go down
Xem lý lịch thành viên
Tboy
Cá voi
Cá voi
avatar


Nam Tổng số bài gửi : 178
Cảm ơn : 413
Danh vọng : 4
Join date : 03/01/2011
Age : 26
Đến từ : TPHCM

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Thu Jan 06, 2011 9:46 pm

Thu Jan 06, 2011 9:46 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
Post cái code đó lên cho mình tham khảo đi!! puanchan


Tboy

Về Đầu Trang Go down
Xem lý lịch thành viên http://taplaptrinh.forumvi.com
theday38
Vịt cồ
Vịt cồ
avatar


Tổng số bài gửi : 8
Cảm ơn : 10
Danh vọng : 0
Join date : 06/01/2011

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Thu Jan 06, 2011 9:54 pm

Thu Jan 06, 2011 9:54 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
Mời bạn chém :)
Code:
void gotoxy(short x,short y)
{
   HANDLE h;
   COORD pos={x,y};
   h=GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleCursorPosition(h,pos);
}


theday38

Về Đầu Trang Go down
Xem lý lịch thành viên
Tboy
Cá voi
Cá voi
avatar


Nam Tổng số bài gửi : 178
Cảm ơn : 413
Danh vọng : 4
Join date : 03/01/2011
Age : 26
Đến từ : TPHCM

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Thu Jan 06, 2011 10:10 pm

Thu Jan 06, 2011 10:10 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
Code đó mình viết chung lên bài chính lun roy` đó, coi đi traitim

Có điều chạy là sẽ ko hiện đủ màn hình nếu n lớn thui


Tboy

Về Đầu Trang Go down
Xem lý lịch thành viên http://taplaptrinh.forumvi.com
Lynrch
Cá mập
Cá mập
avatar


Nam Tổng số bài gửi : 59
Cảm ơn : 116
Danh vọng : 0
Join date : 05/01/2011
Age : 26
Đến từ : HCM

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Thu Jan 06, 2011 10:17 pm

Thu Jan 06, 2011 10:17 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
Cái code tọa độ ngoài tầm rồi làm zô ổng hỏi la cứng họng ngay =))..............


Lynrch

Về Đầu Trang Go down
Xem lý lịch thành viên
theday38
Vịt cồ
Vịt cồ
avatar


Tổng số bài gửi : 8
Cảm ơn : 10
Danh vọng : 0
Join date : 06/01/2011

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Thu Jan 06, 2011 10:24 pm

Thu Jan 06, 2011 10:24 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
@Tboy: Cám ơn nhá :face: Ngưỡng mộ quá chừng chừng...


theday38

Về Đầu Trang Go down
Xem lý lịch thành viên
Tboy
Cá voi
Cá voi
avatar


Nam Tổng số bài gửi : 178
Cảm ơn : 413
Danh vọng : 4
Join date : 03/01/2011
Age : 26
Đến từ : TPHCM

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Thu Jan 06, 2011 10:26 pm

Thu Jan 06, 2011 10:26 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
Nãy post mà chưa kịp đọc lại, bạn coi lại code đi mình mới chỉnh


Tboy

Về Đầu Trang Go down
Xem lý lịch thành viên http://taplaptrinh.forumvi.com
theday38
Vịt cồ
Vịt cồ
avatar


Tổng số bài gửi : 8
Cảm ơn : 10
Danh vọng : 0
Join date : 06/01/2011

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Thu Jan 06, 2011 10:32 pm

Thu Jan 06, 2011 10:32 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
:-P Được mà, mình chỉ cần ý tưởng...
Lúc đầu cũng nghĩ 4 for lồng mà thấy...nó chạy chậm quá...nên thôi.
Kệ cũng mở mang được chút chút :)


theday38

Về Đầu Trang Go down
Xem lý lịch thành viên
Tboy
Cá voi
Cá voi
avatar


Nam Tổng số bài gửi : 178
Cảm ơn : 413
Danh vọng : 4
Join date : 03/01/2011
Age : 26
Đến từ : TPHCM

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Fri Jan 07, 2011 12:49 am

Fri Jan 07, 2011 12:49 am » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
Mình đã update code rùi đó, thế này là ok rùi nhen moon


Tboy

Về Đầu Trang Go down
Xem lý lịch thành viên http://taplaptrinh.forumvi.com
Lynrch
Cá mập
Cá mập
avatar


Nam Tổng số bài gửi : 59
Cảm ơn : 116
Danh vọng : 0
Join date : 05/01/2011
Age : 26
Đến từ : HCM

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Fri Jan 07, 2011 2:27 am

Fri Jan 07, 2011 2:27 am » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
9 work all :lol!:


Lynrch

Về Đầu Trang Go down
Xem lý lịch thành viên
LeeSub
Cá chép
Cá chép
avatar


Tổng số bài gửi : 24
Cảm ơn : 37
Danh vọng : 4
Join date : 11/01/2011

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Fri Jan 14, 2011 3:42 pm

Fri Jan 14, 2011 3:42 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
Ngồi ngẫm một hồi mới hiểu... Trước đó toàn bám theo công thức toán...hix hix
Coi dùm tui coi tui suy luận đúng hông nha...Mấy cái bài này ác độc quá:
Trích dẫn :

Nguyên tắc "vẽ" của bài này: Không hề liên quan đến các công thức toán học! Chỉ là sự kết hợp giữa dấu "*" và Khoảng trắng " " (Không có thì cũng ra tam giác nhưng không cân) và một vài giới hạn để có được một tam giác "trong mơ"...♥

Cách mà ct "vẽ" Tam giác Vuông: Đầu tiên cho một số "i" bắt đầu bằng 1. Tiếp theo sẽ là số "j" cũng bắt đầu bằng 1. "j" sẽ chịu ảnh hưởng của "i" theo điều kiện: "j nhỏ hơn hay bằng i" (VD: i=2 thì j sẽ có thể bằng 1 hoặc 2). Tương tự vậy, khi "i" tăng dần giá trị (i++) thì "j" cũng theo điều kiện đó mà tăng dần lên (j++). Cứ như vậy mà in ra số ngôi sao trên từng dòng màn hình. VD: i=1 thì in 1 "*", i=2 thì in 2 "*" v.v.... Lưu ý là cần thêm câu lệnh xuống dòng (\n) sau câu lệnh in dấu "*" để khi cứ hết mọt vòng lặp thì CT sẽ tự xuống hàng để có thể tạo thành hình tam giác như mong muốn...


LeeSub

Về Đầu Trang Go down
Xem lý lịch thành viên
Tboy
Cá voi
Cá voi
avatar


Nam Tổng số bài gửi : 178
Cảm ơn : 413
Danh vọng : 4
Join date : 03/01/2011
Age : 26
Đến từ : TPHCM

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Fri Jan 14, 2011 8:43 pm

Fri Jan 14, 2011 8:43 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
chuanwa Cách giải thích của An đúng đó
Theo kinh nghiệm làm bài in ra dấu * dạng hình học thì tất cả có thể qui về dùng 2 vòng lặp for(vì số vòng lặp là biết trước): một vòng lớn theo biến i đếm số dòng ( biến i mang vai trò là số thứ tự dòng), số dòng trong đoạn [1...n] nên ta có for(int i=1; i<=n;i++);bên trong vòng lặp lớn thực hiện 2 lệnh: in ra màn hình dấu * hoặc khoảng trắng( ta có vòng lặp for với biến j) và xuống dòng printf("\n"); nên gộp chung trong dấu {..}
Điều kiện trong vòng for với biến j phụ thuộc vào số lượng in ra bao gồm dấu * và khoảng trắng, hay biến j mang vai trò là số kí tự in ra màn hình, điều kiện này thường liên quan đến i, n.
Điều khó nhất là điều kiện chọn in ra dấu * hay là khoảng trắng, ta sẽ dùng câu lệnh if và đi tìm điều kiện theo sự biến thiên của dấu * hay khoảng trắng.
Ví dụ:
Ở bài tam giác vuông cân:
Code:
  for (i=1;i<=n;i++)
  {
        for (j=1;j<=i;j++)
          printf(" *");
      printf("\n");
  }
Vì số lượng dấu * in ra biến thiên theo số dòng ( dòng 1: * , dòng 2: * *...) nên có điều kiện j<= i, còn khoảng trắng thì gộp chung với dấu * trong lệnh printf("* ");

Ở bài in tam giác cân:


Code:
  for(int i=1;i<=n;i++)
  {
      for(int j=1;j<=n+i-1;j++)
        if(j<=n-i)
            printf("  ");
        else printf("* ");
      printf("\n");
  }
Tổng số lượng in ra mỗi dòng lại tăng một, biến thiên như biến i nên trong điều kiện có biến i; ta có thể dễ dàng nhận ra số lượng in ra bằng n+i-1.
Ta đi tìm điều kiện in dấu * hoặc khoảng trắng. Số lượng khoảng trắng ban đầu là n và giảm dần theo số dòng nên ta có điều kiện if (j<=n-i) thì in khoảng trắng, ngược lại in dấu *
Qui trình chạy trên 1 dòng của biến j:
j chạy từ 1 đến n-i thì thực hiện in ra khoảng trắng
j chạy từ n-i+1 ( j>n-i) đến n+i-1 thì in ra dấu *
Kết thúc vòng for in ra trên 1 dòng thì xuống hàng, thực hiện in ở dòng kế.

Chú ý: biến i hoặc j trong bài ta cho bắt đầu từ 1 đến điều kiện, ta có thể cho giá trị khác và sửa lại ở điều kiện lặp cho phù hợp số lượng in ra, ở một số bài việc cho biến i hoặc j mang giá trị khác 1 lại giúp bài toán dễ tìm điều kiện hơn như code sau chẳng hạn:
Code:
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
{
   int n;
   printf("Nhap vao n: ");
   scanf("%d",&n);
   for(int i=-n;i<=n;i++)
   {
      for(int j=0;j<=abs(i);j++)
         printf("* ");
      printf("\n");
   }
}


Tboy

Về Đầu Trang Go down
Xem lý lịch thành viên http://taplaptrinh.forumvi.com
LeeSub
Cá chép
Cá chép
avatar


Tổng số bài gửi : 24
Cảm ơn : 37
Danh vọng : 4
Join date : 11/01/2011

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Fri Jan 14, 2011 9:08 pm

Fri Jan 14, 2011 9:08 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
Vẫn chưa hiểu phương pháp tính toán của Tam giác Cân...
Nếu ta nhập n=chiều cao tam giác vậy thì đỉnh của tam giác (tức dấu "*" đầu tiên) sẽ bằng số "*" ở dòng cuối cùng (tức n) chia đôi. Nhưng ở đây ta "vẽ" bằng khoảng trắng và dấu "*" nên vị trí của đỉnh sẽ là khoảng trống giữa n/2-1 và n/2+1 (tức n/2), n/2-1 và n/2+1 sẽ là khoảng trắng. Dùng if để biết đâu là "*" đâu là khoảng trắng để xuất ra màn hình cho khi nào đủ dòng n thì thôi.
Cách của Thái là đặt điều kiện "n-i+1" và "n+i-1" <--- mình chưa hiểu. "i" là giá trị cho trước để giới hạn "j", và vị trí xuất hiện đầu tiên của "i" sẽ là cạnh trái của màn hình, vậy như thế nào để cho "i" đầu tiên nằm ở đúng vị trí mong muốn (tức ở vị trí đỉnh của tam giác)!?
Thái giải thích một cách đơn giản hóa dùm mình nha, đừng nói theo cách chuyên môn, mình mù tịt :farao:


LeeSub

Về Đầu Trang Go down
Xem lý lịch thành viên
Tboy
Cá voi
Cá voi
avatar


Nam Tổng số bài gửi : 178
Cảm ơn : 413
Danh vọng : 4
Join date : 03/01/2011
Age : 26
Đến từ : TPHCM

Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   Fri Jan 14, 2011 9:22 pm

Fri Jan 14, 2011 9:22 pm » Re: In tam giác-(Câu lệnh lặp FOR-WHILE)
thatvong cặn kẽ lắm rùi mà An ko hỉu se0 daika2 mún chết ko
daudon thui mai lên trường mình đàm đạo đi uong

pheo Mà sao chỗ này thấy ko đúng rùi nè
Trích dẫn :
Nếu ta nhập n=chiều cao tam giác vậy thì đỉnh của tam giác (tức dấu "*" đầu tiên) sẽ bằng số "*" ở dòng cuối cùng (tức n) chia đôi
Số * ở dòng cuối cùng sẽ là n+2 chứ


Tboy

Về Đầu Trang Go down
Xem lý lịch thành viên http://taplaptrinh.forumvi.com
Sponsored content




Bài gửiTiêu đề: Re: In tam giác-(Câu lệnh lặp FOR-WHILE)   

» Re: In tam giác-(Câu lệnh lặp FOR-WHILE)


Sponsored content

Về Đầu Trang Go down
 

In tam giác-(Câu lệnh lặp FOR-WHILE)

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
 :: Cơ sở lập trình 1 :: Bài tập thực hành-