Qn: Write the C++ program logic to print stars as follows
Type-1
*               *
* *           * *
* * *       * * *
* * * *   * * * *
* * * * * * * * *

Type-2
* * * * * * * * *
* * * *   * * * *
* * *       * * *
* *           * *
*               *
-By Dharani, Last Update On 11th June,2019 10:52 am

Type-1

இதை கீழ்க்கண்டவாறு கவனியுங்கள்

* s s s s s s s *        
* * s s s s s * *      
* * * s s s * * *    
* * * * s * * * *  
* * * * * * * * *

மேலே கொடுக்கப்பட்டுள்ளவையில் n=5. அதே போல் s என்பது space-ஐ குறிக்கும். இதில் ஒவ்வொரு row-விழும் space-க்கு முன்பாகவும் பின்பாகவும் ஒரே number of stars-தான் print செய்யப்பட்டுள்ளது. ஆகையால் star print செய்யப்படும் logic ஒன்றுதான் ஆனால் space-க்கு முன்பு space-க்கு பின்பு என இருமுறை பயன்படுத்திக்கொள்ளவேண்டும்.

இப்பொழுது print ஆகும் no. of stars ஆனது space-க்கு முன்னும் பின்னும் முதல் row-ல் 1, 2-வது row-ல் 2, 3-வது row-ல் 3, 4-வது row-ல் 4. ஆனால் 5-வது row-ல் மட்டும் 0 space வருவதால் before 5 + after 5 = 10 என்று print ஆகாமல் 9-ஆக print ஆகின்றது. ஆகவே இந்த கடைசி row-விற்கு மட்டும் தனியான print logic, கடைசியில் தான் எழுதவேண்டும். ஆகவே முதல் 4 row-விற்கு மட்டும் loop சுற்றினால் போதுமானது. அதாவது row 1 லிருந்து துவங்கி (n-1)-ல் முடியவேண்டும்.

மத்தியில் உள்ள space-ஐ கவனியுங்கள். இவை அனைத்தும் odd numbers 7,5,3,1,0 என முடிகிறது. இதற்க்கு logic row-ன் values-ஐ அடிப்படையாக கொண்டு எழுதவேண்டும். அப்பொழுது தான் ஒவ்வொரு row-விற்கும் odd number of space வரும். இப்பொழுது logic-ஐ கண்டறியவேண்டும். அதாவது முதல் row-ல் (i.e row=1) நமக்கு வரவேண்டிய space 7. இதை கொடுக்கப்பட்டுள்ள row-ன் values-ஐ வைத்து தான் கொண்டுவரவேண்டும். ஆனால் நமக்கு கொடுக்கப்பட்டுள்ள இன்னொரு hint is n=5. ஆகவே n-ஐ 2-ஆல் multiply செய்து, row-ஐ 2-ஆல் multiply செய்து கழித்துவிடுங்கள். பிறகு அதில் 1-ஐ add செய்துகொள்ளுங்கள். அதாவது (2*n-2*row)+1. இது ஒவ்வொரு row-விற்கு தேவையான space-ஐ தந்துவிடும். ஆகவே space ன் loop ஆனது 1-லிருந்து துவங்கி (2*n-2*row)+1 முடியவேண்டும்.

கடைசி row-ல் எப்பொழுதும் (n*2)-1 stars தான் print ஆகும். ஆகவே loop ஆனது 1 லிருந்து (n*2)-1ல் முடிந்தால் போதுமானது.

for(row=1;row<=n-1;row++){
    for(col=1;col<=row;col++){
    Logic to print stars here..
    }
    for(s=1;s<=(2*n-2*row)-1;s++){
    Logic to print space here..
    }
    for(col=1;col<=row;col++){
    Same Logic to print stars here..
    }
    cout<<endl;
}
for(p=1;p<=(2*n)-1;p++){
    Logic to print last row stars here..
}

Complete Program

#include<iostream.h>
#include<conio.h>
int main(){
  int n,row,col,s,p;
  cout<<"Enter how many rows you want: ";
  cin>>n;    
  //row should end with n-1 its important
  for(row=1;row<=n-1;row++){
      //print stars
      for(col=1;col<=row;col++){
        cout<<"*";
      }
      //print space
      for(s=1;s<=(2*n-2*row)-1;s++){
         cout<<" ";
      }
      //print stars
      for(col=1;col<=row;col++){
          cout<<"*";
      }
      cout<<endl;
  }
  //print last row stars
  for(p=1;p<=(2*n)-1;p++){
      cout<<"*";
  }
return 0;
}
Output:
Enter how many rows you want: 5
*               *
* *           * *
* * *       * * *
* * * *   * * * *
* * * * * * * * *

Type-2

இதை கீழ்க்கண்டவாறு கவனியுங்கள்

* * * * * * * * *
* * * * s * * * *    
* * * s s s * * *    
* * s s s s s * *
* s s s s s s s * 

Type-1ன் logic-ஐ தலைகீழாக செய்வதே Type-2. அதாவது கடைசி row-ல் print செய்யகூடிய stars இப்பொழுது முதல் row-லே print செய்யவேண்டும். அதே போல் row-ன் value n-1ல் துவங்கி 1-ல் முடியவேண்டும்

for(p=1;p<=(2*n)-1;p++){
    Logic to print first row stars here..
}
cout<<endl;
for(row=n-1;row>=1;row--){
    for(col=1;col<=row;col++){
    Logic to print stars here..
    }
    for(s=1;s<=(2*n-2*row)-1;s++){
    Logic to print space here..
    }
    for(col=1;col<=row;col++){
    Same Logic to print stars here..
    }
    cout<<endl;
}

Complete Program

#include<iostream.h>
#include<conio.h>
int main(){
  int n,row,col,s,p;
  cout<<"Enter how many rows you want: ";
  cin>>n;
  //print first row stars
  for(p=1;p<=(2*n)-1;p++){
      cout<<"*";
  }
 cout<<endl;
  //row should start with  n-1 end with 1. its important
  for(row=n-1;row>=1;row--){
      //print stars
      for(col=1;col<=row;col++){
         cout<<"*";
      }
      //print space
      for(s=1;s<=(2*n-2*row)-1;s++){
        cout<<" ";
      }
      //print stars
      for(col=1;col<=row;col++){
        cout<<"*";
      }
      cout<<endl;
  }
return 0;
}
Output:
Enter how many rows you want: 5
* * * * * * * * *
* * * *   * * * *
* * *       * * *
* *           * *
*               *

Pgcomments

Comments