Đánh giá, nhận xét, review các công ty tuyển dụng
Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: Xuất ra tam giác cân chiều cao nhập từ bàn phím trên C++?

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    5

    Unhappy Xuất ra tam giác cân chiều cao nhập từ bàn phím trên C++?

    cho em hỏi nguyên tắc và cách thức xuất ra mà hình hình :
    ...............................*
    .............................*...*
    ...........................*.......*
    .........................*...........*
    .......................* * * * * * *
    với chiều cao h nhập từ bàn phím dấu "." là space nha và dòng 1 là 1"*"
    dòng 2 là 1"*"+" "+"1*"
    dòng 3 là 5 kí tự gồm 2 "*" và 3" "
    tương tự đến dòng thứ h
    xin giúp em em mới vào học còn quá gà! mong anh chị thông cảm~~!
    Đã được chỉnh sửa lần cuối bởi zhirakiz : 21-12-2007 lúc 06:44 PM.

  2. #2
    Ngày gia nhập
    06 2007
    Bài viết
    14

    Bài này bạn hãy sử dụng phối hợp 2 vòng lặp lồng nhau, hãy xem xét từng hàng để rút ra quy luật cho vòng lặp (quy nạp)
    ví dụ : bạn thấy
    - hàng i=1 : xuất n-1 " ", rồi xuất 1 "* "
    - hàng i=2 : xuất n-2 " ", xuất 1 "* ", tiếp tục xuất 1 " ", rồi xuất 1 "* "
    - hàng i=3 : xuất n-3 " ", xuất 1 "* ", tiếp tục xuất 3 " ", rồi xuất 1 "* "
    - hàng i=4 : xuất n-4 " ", xuất 1 "* ", tiếp tục xuất 5 " ", rồi xuất 1 "* "
    ...........
    Như vậy ta thấy có quy luật :
    Hàng i : xuất n-i " ", xuất 1 "* ", tiếp tục xuất 2(i-1)-1 " ", rồi xuất 1 "* "
    Tuy nhiên hàng 1 và n có chút khác biệt, ta cần thêm điều kiện cho đúng.
    Cố gắng làm ra nha bạn, code chỉ để tham khảo thôi.
    Chúc bạn thành công!


    Code:
    #include "iostream.h"
    
    int main ()
    {
    	int n;
    	cout<< " n = ";
    	cin>> n;
    	int i,j;
    	for (i = 0 ; i < n ; i++ )
    	{
    		for (j = 0 ; j < n-i ; j++ )
    			cout<< "  ";
    		cout<< "* ";
    		for (j = 1 ; j < 2*i ; j++)
    		{
    			if (i < n-1)
    				cout<< "  ";
    			else
    				cout<< "* ";
    		}
    		if (i > 0)
    			cout<< "* ";
    		cout<< endl;
    	}
    	
    	return 1;
    }
    Ta là ai không quan trọng, điều ta làm sẽ khẳng định con người ta!

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    5

    cảm ơn nha! em đã hiểu được cấu trúc rồi quy luật rồi!

  4. #4
    Ngày gia nhập
    12 2007
    Nơi ở
    Tp.HCM
    Bài viết
    24

    Bạn giải thích rất dễ hiểu, nhưng code sử dụng hơi nhiều vòng lặp. Mình có đoạn code bằng C, cũng in hình tam giác cân đó, nhưng không thể hiểu được cái điều kiện của nó, bạn nào biết giải thích giùm cái, thanks:

    Code:
    #include <stdio.h>
    int main()
    {
    	int n,i,j;
    	printf ("Nhap n: ");
    	scanf ("%d",&n);
    	for (i=1; i<=n; i++)
    	{
    		for (j=1; j<=n+i-1; j++)
    			printf ( (j<n-i+1)? " " : "* ");
    		printf ("\n");
    	}
            return 0;
    }

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    47

    Biểu thức:

    (BTĐK)?a:b có nghĩa nếu BTĐK đúng thì = a, nếu sai thì = b

    Như vậy câu lệnh printf ( (j<n-i+1)? " " : "* "); có nghĩa:
    if (j<n-i+1) prinft(" ");
    else printf("* ");

    Code của bạn in ra tam giác cân, nhưng không phải dấu " " ở giữa mà là dấu "*". Ko phù hợp với đề bài

  6. #6
    Ngày gia nhập
    12 2007
    Nơi ở
    Tp.HCM
    Bài viết
    24

    Mặc định Xuất ra tam giác cân chiều cao nhập từ bàn phím trên C++?

    Đúng là đoạn code của mình nó in ra hình tam giác cân đặc, còn hình tam giác cân rỗng như chủ đề này thì điều kiện phải là:

    Code:
    for (i=1;i<=n;i++)
    {
    	for (j<=1; j<=n+i-1; j++)
    		printf ((j==n-i+1 || j==n+i-1 || i==n) ? "*" : " ");
    		printf ("\n");
    }
    @metal_shield: Mình không hỏi biểu thức (BTĐK)?a:b mà là điều kiện khi nào in ra dấu * khi nào in ra khoảng trắng. Nếu giải thích theo góc độ toán học thì như thế nào?

  7. #7
    Ngày gia nhập
    03 2009
    Bài viết
    15

    Trích dẫn Nguyên bản được gửi bởi zhirakiz Xem bài viết
    cho em hỏi nguyên tắc và cách thức xuất ra mà hình hình :
    ...............................*
    .............................*...*
    ...........................*.......*
    .........................*...........*
    .......................* * * * * * *
    với chiều cao h nhập từ bàn phím dấu "." là space nha và dòng 1 là 1"*"
    dòng 2 là 1"*"+" "+"1*"
    dòng 3 là 5 kí tự gồm 2 "*" và 3" "
    tương tự đến dòng thứ h
    xin giúp em em mới vào học còn quá gà! mong anh chị thông cảm~~!

    Bạn chia tam giác cân thành 2 tam giác thường 1 tam giac vuông bên phải và 1 tam giác vuông bên trái sẽ giúp bạn giải quyết bài toán dễ hơn
    Code:
      1   2   3   4   5
    1                   *
    2               *  
    3          *        
    4     *             
    5  * *   *   *  *
    Code:
        1   2   3   4   5
    1  *
    2      *
    3          *
    4               *
    5  *  *   *   *   *
    ghép 2 hình lại ta dc 1 tam giác cân

    Code:
     	// Tam Giac Can Rong
    
    
    #include <stdio.h>
    #include <conio.h>
    	void main()
    {
    		int c,d,N;
    
    	scanf("%d",&N);
    
    for (d=1;d<=N;d++)
    
    	{
    
    		printf ("\n");
    		
    		for (c=1;c<N;c++) 
    			if(c+d==N+1 || d==N)
    				printf ("*");
    			else
    				printf (" ");
    		
    		for (c=1;c<=N;c++) 
    			if (c==d || d==N)
    				printf ("*");
    			else
    				printf(" ");
    
    	}
    		
    		getch();
    }
    Đã được chỉnh sửa lần cuối bởi Zell : 10-05-2009 lúc 10:27 AM.

  8. #8
    Ngày gia nhập
    05 2009
    Bài viết
    8

    hoan hô, chỉ vô đây có mấy ngày mà mình sáng mắt hẳn ra
    cám ơn các bạn up bài cũng như các bạn giải đáp rất nhiều
    i love people

  9. #9
    Ngày gia nhập
    09 2010
    Bài viết
    8

    Mình xin cái Code chuẩn nhất..dễ hiểu.
    Sao cái for thứ 2 để in * lại để j = 1,chẳng phải trùng với for trc sao.phải từ n-i --> n+i

  10. #10
    Ngày gia nhập
    04 2011
    Bài viết
    1

    Mặc định Cái này mình làm bên Java bạn coi giải thuật rồi chuyển qua C

    import java.io.*;

    public class tamgiac{
    public static void main(String[] args) throws IOException {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

    int n;

    System.out.println("Nhap vao n (N>0) :");
    n = Integer.parseInt(in.readLine());
    System.out.println("Tam giac "+n);


    for (int i=1;i<=n-1;i++){
    for (int j=1;j<=n*2-1;j++){
    if(((j<=n-i)||(j>=n+i))||((n-i+1)<j&&j<(n+i-1)))
    System.out.print(" ");
    else
    System.out.print("*");

    }
    System.out.println();
    }
    for (int i=0;i<=n*2-1;i++){
    if (i%2==0){
    System.out.print("*");}
    else {
    System.out.print(" ");}
    }
    System.out.println();

    }
    }

    Cái này mình làm bên Java bạn coi giải thuật rồi chuyển qua C

Các đề tài tương tự

  1. Bài tập C++ Tạo ống 1 chiều nhập chữ thường và xuất ra chữ hoa
    Gửi bởi chewinggum trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 1
    Bài viết cuối: 06-01-2014, 03:28 PM
  2. nhập xuất mảng một chiều
    Gửi bởi dibo_ngaodu94 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 17-06-2013, 05:23 PM
  3. Nhập chiều dài cạnh xuất ra hình vuông
    Gửi bởi kingwarcraft trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 11-01-2012, 01:29 AM
  4. nhập xuất mảng 2 chiều
    Gửi bởi cttd trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 25-09-2011, 12:42 AM
  5. Mảng 1 chiều,nhập xuất tập hợp??
    Gửi bởi rogerminh2401 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 03-01-2011, 01:31 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn