how to make a christmas tree using loop in c program - c

I'm a freshmen student and we have an activity in intro pro.. We were tasked to create a Christmas tree using a loop...
I have my code here:
#include<stdio.h>
int main ()
{
int rows,a,b,space;
clrscr();
printf("Enter a number of rows:");
scanf("%d",&rows);
space=rows-1
for(b=space;b>=1;b--)
{
for(a=rows;a>=1;a--)
space--;
printf("");
for(a=2*(rows-b)-1;a>=1;a--)
printf("*",a);
printf("\n");
space = space-1;
}
getche();
return 0;
}
This code was given to us by our professor... the program runs, but the output is wrong. Can you help me?
when i run this program, the output was like this:
*
***
*****
******
*******

You have to find a pattern. Say you want a tree with n rows. Last row is going to have 2n-1 stars. Row before it will have 2n-3 and so on. To print a row, first you print a number of spaces, then a number of stars. For last row, you print 0 spaces and 2n-1 stars. For row before it, you print 1 space and 2n-3 stars and so on.
for(int i = 0; i < n; i++)
{ for(int j = i + 1; j < n; j++)
printf(" ");
for(int j = 0; j <= 2*i; j++)
printf("*");
if(i < n - 1) puts("");
}

The Code is a little bit to messed up for me, but this should work:
#include<stdio.h>
int main() {
/*Variables*/
int rows, starNumber, spaceNumber;
int rowCount, spaceCount, starCount, treeTrunkCount, treeTrunkSpaceCount;
printf("Enter Rows:\n>");
scanf("%d",&rows);
for(rowCount = 1; rowCount <= rows; rowCount++) {
starNumber = rowCount * 2 - 1;
spaceNumber = rowCount + rows - starNumber;
for(spaceCount = 0; spaceCount < spaceNumber; spaceCount++)
printf(" ");
for(starCount = 0; starCount < starNumber; starCount++)
printf("%c",'*');
printf("\n");
}
for(treeTrunkCount = 0; treeTrunkCount < 3; treeTrunkCount++) {
for(treeTrunkSpaceCount = 0; treeTrunkSpaceCount < (rows * 2 + 1)/2; treeTrunkSpaceCount++)
printf(" ");
printf("%c\n",'*');
}
}

This is the simplest solution to your program..
#include <stdio.h>
int main()
{
int i=-1,j=0,rows;
printf("Enter Rows:\n");
scanf("%d",&rows);
while(j++<rows) // Moving pointer for the first '*'
{
printf(" ");
}
printf("*"); // This prints the first '*'
while(++i<rows)
{
for(j=-2;++j<rows-i;) // This loop will print Spaces before '*' on each row
printf(" ");
for(j=0;++j<2*i;) // This loop will print * on each row
{
printf("*");
}
printf("\n"); // This printf will take you to the next Line
}
}

This is the shortest and simplest solution for your question:
#include<stdio.h>
#include<conio.h>
void main(){
int count;
int i,j;
printf("enter the numbers of line");
scanf("%d",&count);
for(i=1;i<=count;i++){
for(j=1;j<=i;j++){
printf("*");
}
printf("\n");
}
getch();
}

You forgot a space between "".
for(a=rows;a>=1;a--)
space--;
printf("");
should be
for(a=rows;a>=1;a--)
space--;
printf(" ");

#include <stdio.h>
int main() {
int n = 50;
for (int i = 0; i <= n; ++i) {
for (int k = i; k < n; ++k)
printf(" ");
for (int j = 0; j < i; ++j)
printf("*");
for (int j = 1; j < i; ++j)
printf("*");
printf("\n");
}
for (int l = 1; l < n/2; ++l) {
for (int i = 1; i < n; ++i)
printf(" ");
printf("[|]\n");
}
return 0;
}

A simple tree can be made up with for loop, Christmas may need more symbol...
//Linux C program to print a tree
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <string.h>
int pcenter(char *s) {
struct winsize w;
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
int ct = w.ws_col;
int sl = strlen(s) / 2;
printf("%*s%*s\n", ct / 2 + sl, s, ct / 2 - sl, "");
return 0;
}
int ptree(char s, char t, int l, int r) {
int i;
for (i = 1; i <= l; i++) {
int j = 2 * i - 1;
char *p = malloc(j);
memset(p, s, j);
pcenter(p);
free(p);
}
for (i = 1; i <= r; i++) {
int j = 1;
char *p = malloc(j);
memset(p, t, j);
pcenter(p);
free(p);
}
return 0;
}
int main() {
// system("clear");
ptree('*', '|', 10, 5);
return 0;
}

#include<stdio.h>
main()
{
int n,i, j, space=1;
printf("Enter the number of rows: ");
scanf("%d",&n);
space=n-1;
for(i=1;i<=n;i++)
{
for(j=1;j<=space;j++)
{
printf(" ");
}
space--;
for(j=1;j<=2*i-1;j++)
{
printf("*");
}
printf("\n");
}
for(i=1;i<=n-3;i++)
{
for(j=1;j<=10;j++)
{
printf(" ");
}
for(j=1;j<=1;j++)
{
printf("*");
}
for(j=1;j<=1;j++)
{
printf("*");
}
for(j=1;j<=1;j++)
{
printf("*");
}
printf("\n");
}
}

#include<stdio.h>
int main()
{
int i,j,k,l=1,a,b;
for(i=8;i>=0;i--)
{
for(j=0;j<=i;j++)
{
printf(" ");
}
k=0 ;
while(k<l)
{
printf("*");
k=k+1;
}
l=l+2;
printf("\n");
}
i=8;
for(b=0;b<=3;b++)
{
for(a=0;a<=i-1;a++)
{
printf(" ");
}
printf("***");
printf("\n");
}
}

Related

Star pyramid program in c

I have output in image, but code is not proper
i want code for the given output
#include <stdio.h>
int main() {
int i, space, rows, k = 0;
printf("Enter the number of rows: ");
scanf("%d", &rows);
for (i = 1; i <= rows; ++i, k = 0) {
for (space = 1; space <= rows - i; ++space) {
printf(" ");
}
while (k != 2 * i - 1) {
printf("* ");
++k;
}
printf("\n");
}
return 0;
}
The question was a little difficult to understand, I'm assuming you're asking how to get the output as described in the image. This code does that:
#include <stdio.h>
int main() {
int rows;
printf("Enter the number of rows: ");
scanf("%d", &rows);
for (int i=0; i<rows; ++i) {
for(int j=0; j<rows*2-1; ++j) {
if (j <= i || j >= rows*2-2-i) {
printf("* ");
} else {
printf(" ");
}
}
printf("\n");
}
return 0;
}

Adding or removing method that is sequentially last renders C program useless

I have a simple software for printing e circuit board in the console. I run the program below with the addBoard() (poorly named method for adding component) and it just runs printing nothing. Even though it is last in the sequence. If I comment it out the program works fine and prints everything out in the Visual Studio Code terminal window.
What could this be due to? (also any pointers on my usage of pointers hehe... or anything else that isn't best practice is hugely appreciated.) Thanks!
#include <stdio.h>
#include <stdlib.h>
char *posArr[10][30];
void printInstructions(){
printf("Hello and welcome! Here you can configure your own breadboard\n");
printf("To do this you will use coordinates using this syntax:\n");
printf("width: 3\n");
printf("height: 5\n");
printf("After that a component will be choosen.\n");
printf("It would look like below:\n");
}
void printBoard(){
for (int i = 1; i <= 10; i++) //Height
{
printf("\n");
for (int j = 1; j <= 30; j++) //Width
{
printf("%s", posArr[i][j]);
}
}
}
void clearBoard(){
for (int i = 1; i <= 10; i++) //Height
{
for (int j = 1; j <= 30; j++) //Width
{
posArr[i][j] = ". ";
}
}
}
void buildBoard(int *width, int *height){
//*height -= 1;
//*width -= 1;
for (int i = 1; i <= 10; i++) //Height
{
//printf("\n");
for (int j = 1; j <= 30; j++) //Width
{
if (*height == i && *width == j){
posArr[i][j] = "¤ ";
//printf("¤ ");
}
else {
posArr[i][j] = ". ";
//printf(". ");
}
}
}
}
void addBoard(){
int h, w;
while(1)
{
printf("Width: ");
scanf("%d", w);
printf("Height: ");
scanf("%d", h);
buildBoard(&w,&h);
//Add length later
printBoard();
}
}
int main() {
printInstructions();
int a=3, b=5;
buildBoard(&a,&b);
printBoard();
clearBoard();
//addBoard();
}
You can try this code (Slightly modifying your code)
#include <stdio.h>
#include <stdlib.h>
char *posArr[10][30];
void printInstructions(){
printf("Hello and welcome! Here you can configure your own breadboard\n");
printf("To do this you will use coordinates using this syntax:\n");
printf("width: 3\n");
printf("height: 5\n");
printf("After that a component will be choosen.\n");
printf("It would look like below:\n");
}
void printBoard(){
for (int i = 0; i < 10; i++)
{
printf("\n");
for (int j = 0; j < 30; j++)
{
printf("%s", posArr[i][j]);
}
}
}
void clearBoard(){
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 30; j++)
{
posArr[i][j] = ". ";
}
}
}
void buildBoard(int *width, int *height){
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 30; j++)
{
if (*height == i && *width == j){
posArr[i][j] = "¤ ";
}
else {
posArr[i][j] = ". ";
}
}
}
}
int main() {
printInstructions();
int a=3, b=5;
buildBoard(&a,&b);
printBoard();
clearBoard();
}

Printing 2d array box

I am new to programming. Figuring on how can I print out the box using for loop so it makes a big box? I had attached the sample below. I really need help.
#include <stdio.h>
int main()
{
int a;
printf("\n --- \n");
for(a=1;a<=1;++a)
printf("\n| |\n");
printf("\n --- ");
return 0;
}
Example output:
Something like this could work. You need basic understanding of nested loops to be able to do this question.
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char const *argv[]) {
int rows, cols, i, j;
printf("Enter rows for box: ");
if (scanf("%d", &rows) != 1) {
printf("Invalid rows\n");
exit(EXIT_FAILURE);
}
printf("Enter columns for box: ");
if (scanf("%d", &cols) != 1) {
printf("Invalid columns\n");
exit(EXIT_FAILURE);
}
printf("\n2D Array Box:\n");
for (i = 1; i <= rows; i++) {
for (j = 1; j <= cols; j++) {
printf(" --- ");
}
printf("\n");
for (j = 1; j <= cols; j++) {
printf("| |");
}
printf("\n");
}
/* bottom "---" row */
for (i = 1; i <= cols; i++) {
printf(" --- ");
}
return 0;
}
first character(' ') and repeat string ("--- ")
first line and repeat contents line and bar line.
#include <stdio.h>
#define MARK "X O"
//reduce code
#define DRAW_H_BAR()\
do {\
putchar(' ');\
for(int i = 0; i < cols; ++i)\
printf("%s ", h_bar);\
puts("");\
}while(0)
void printBoard(int rows, int cols, int board[rows][cols]){
const char *h_bar = "---";
const char v_bar = '|';
DRAW_H_BAR();//first line
for(int j = 0; j < rows; ++j){
//contents line
putchar(v_bar);
for(int i = 0; i < cols; ++i)
printf(" %c %c", MARK[board[j][i]+1],v_bar);
puts("");
DRAW_H_BAR();//bar line
}
}
int main(void){
int board[8][8] = {
{1,0,1,0,1,0,1,0},
{0,1,0,1,0,1,0,1},
{1,0,1,0,1,0,1,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,-1,0,-1,0,-1,0,-1},
{-1,0,-1,0,-1,0,-1,0},
{0,-1,0,-1,0,-1,0,-1}
};
int rows = sizeof(board)/sizeof(*board);
int cols = sizeof(*board)/sizeof(**board);
printBoard(rows, cols, board);
}

I want to print pattern of numbers using c program

If n=3,the output is
1*2*3
7*8*9
4*5*6
If n=5,the output is
1*2*3*4*5
11*12*13*14*15
21*22*23*24*25
16*17*18*19*20
6*7*8*9*10
CODE:
int i, j, a[50][50], k = 1, m = 0;
for (i = 0; i < n; i += 2) {
for (j = 0; j < n; j++) {
a[i][j] = k;
k++;
}
printf("\n");
}
m = k;
for (i = 1; i <= n; i += 2) {
for (j = 0; j < n; j++) {
a[i][j] = m;
m++;
}
printf("\n");
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%d", a[i][j]);
}
printf("\n");
}
I am not so good in c language, but i think it will help you.
please have a look, and you can do making some change if any syntax error occurs but logic is clear.
#include <stdio.h>
#include <math.h>
void printOutput(int n){
int k = ceil(n/2);
int m =1;
int j =1;
int l =k;
int i;
int b;
for(i=1;i<=n;i++){
for(b=m;b<=m+n;b++){
printf(b);
}
printf("\n");
if(i<k){
j= (2*j);
m =n*j+1;
} else{
int z = n-i-1;
m= n+1 +n*(2)*z;
l =z-2;
}
}
}
void main(){
int input;
printf("Enter a Value : ");
scanf(" %d",&input);
printOutput(input);
}
#include<stdio.h>
#include<conio.h>
int k=1;
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n/2+1;i++){
for(int j=1;j<=n;j++){
if(j!=1&&j!=n+1){
printf("*");
}
printf("%d",k);
k++;
}
printf("\n \n");
k=k+n;
}
k=k-3*n;
for(int i=1;i<=n/2;i++){
for(int j=1;j<=n;j++){
if(j!=1&&j!=n+1){
printf("*");
}
printf("%d",k);
k++;
}
printf("\n \n");
k=k-(n/2+1)*n;
}
}
This is a rough sketch of what you should do, there are some minor flaws with it... However, the functionality is there. Next time, if you can't understand what algorithm the code calls for, I suggest you write this array out on a sheet of paper and follow each row. Notice where each row gets placed, you should start to come up with a way to do this (there are more ways than this one...) It may seem hard at first, but if you want to be in this field, you have to have the mindset for it. I agree with the others, this is NOT a homework site, rather a site to help build off the knowledge you know, so begin to actually try to write the program, and then submit it here if you're having trouble with it.
#include <stdio.h>
void loadNprint(int size, int a[][size]){
int i,j,count=1,down=size-1, up =0;
for(i=0; i<size; i++){
for(j=0;j<size; j++){
if((i%2) == 0)a[up][j] = count;
if((i%2) == 1)a[down][j]= count;
count++;
}
if((i%2) == 0)up++;//keeping track of the rows in ascending order
if((i%2) == 1)down--;//keeping track of rows in descending order
}
for(i=0; i<size; i++){
for(j=0; j<size; j++){
printf("%4d",a[i][j]);
}
printf("\n");
}
}
void main(){
int input;
printf("Enter a Value : ");
scanf(" %d",&input);
int myarray[input][input];
loadNprint(input,myarray);
}
This program works perfect. But if you want make some changes..do it yourself.
Next time please try some coding yourself before asking. This will print a different pattern for even numbers.
#include<stdio.h>
#include<conio.h>
int n,beginnew,cpy;
int main()
{
printf("Please enter a value : ");
scanf("%d",&n);
//process
beginnew=n-n/2+1;//beginning of new pattern
cpy=n-1;
for(int i=1;i<n+1;i++)
{
if(i<beginnew)
{
for(int h=n-1;h>=0;h--)
printf("%d * ", (n*(2*i-1)-h) );
}
else
{
for(int h=n-1;h>=0;h--)
printf("%d * ",(n*(cpy)-h) );
cpy=cpy-2;
}
printf("\n");
}
getch();
return 0;
}
//this code print Diagonal Pattern if matrix is
1 2 3
4 5 6
7 8 9
output is :
1
4 2
7 5 3
8 6
9
import java.util.*;
class DiagonalPattern
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
int x[][];
int i,j,row,col,p,temp=1,last=0;
System.out.println("how many array wants to create and size of array");
row=sc.nextInt();
col=sc.nextInt();
x=new int[row][col];
System.out.println("Enter " +row*col+ " elements of array of array");
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
x[i][j]=sc.nextInt();
last=j;
}
}
for(i=0;i<row;i++)
{
System.out.println("");
int k=i;
for(j=0;j<=i;j++,k--)
{
if(j==col)
{
break;
}
else
{
System.out.print(x[k][j]);
System.out.print(" ");
}
}
}
for(p=x.length;p>0;p--,temp++)
{
System.out.println("");
i=x.length-1;
int k=i;
for(j=temp;j<=last;j++,k--)
{
System.out.print(x[k][j]);
System.out.print(" ");
}
}
}
}

Making A square with asterisk in C

I am new to C language ,please help me .
Well i am writing a code to make a square of asterisks. but i can't figure how to make the square completely. Here's my code :
#include<stdio.h>
int main(void){
int n;
for(n=1;n<5;n++){
printf("*");
}
for (n=1;n<4;n++){
printf("*\n");
}
for (n=1;n<=5;n++){
printf("*");
}
for(n=5;n<=1;n--){
printf("*\n");
}
getchar();
return 0;
}
Thanks !!
it Should Exacxtly be Like
*****
* *
* *
* *
*****
Since you wish to create a hollow square of asterisks:
Think about how you'd create it. After some thought, you'll realize that:
The first and last rows are all asterisks.
For all other rows, the first and last columns of those rows are all asterisks.
Everything else is a space.
Using that, we can construct:
const int n = 5;
for(int i=0; i < n; i++) {
for(int j=0; j < n; j++) {
if (i == 0 || i == n - 1) {
printf("*");
}
else if(j == 0 || j == n - 1) {
printf("*");
}
else {
printf(" ");
}
printf(" ");
}
printf("\n");
}
Which can be put into a general solution for a n*m case:
const int ROWS = 5;
const int COLS = 5;
for(int i=0; i < ROWS; i++) {
for(int j=0; j < COLS; j++) {
if (i == 0 || i == ROWS - 1) {
printf("*");
}
else if(j == 0 || j == COLS -1) {
printf("*");
}
else {
printf(" ");
}
printf(" ");
}
printf("\n");
}
You're making it overly complicated - try this:
#include <stdio.h>
int main(void)
{
printf("*****\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("*****\n");
return 0;
}
#include <stdio.h>
#include <string.h>
#define LINE_SIZE 32
int main(void){
int i, n = 5;
char line1[LINE_SIZE] = {0}, line2[LINE_SIZE] = {0};
memset(line1, ' ', sizeof(line1)-1);
memset(line1+sizeof(line1)-n-1, '*', n);
memcpy(line2, line1, sizeof(line1));
memset(line2+sizeof(line2)-n, ' ', n-2);
puts(line1);
for(i = n-2; i ; --i)
puts(line2);
puts(line1);
return 0;
}
void print_square(int size)
{
int i;
int j;
for(i = 0; i < size; i++)
{
printf("*");
}
printf("\n");
for(i = 1; i < size - 1; i++)
{
printf("*");
for(j = 1; j < size - 1; j++)
{
printf(" ");
}
printf("*");
printf("\n");
}
for(i = 0; i < size; i++)
{
printf("*");
}
printf("\n");
}
#include<stdio.h>
main()
{
int n;
for(n=1;n<4;n++){
printf("*");
}
for (n=1;n<4;n++){
printf("* *\n");
}
for (n=1;n<=5;n++){
printf("*");
}
for(n=5;n<4;n--){
printf("*\n");
}
getch();
}
#include<stdio.h>
#include<string.h>
#define row 70
#define coloumn 70
#define buff_size row*coloumn
int draw_Box(int x,int y,int height,int width,int pixel_width,char *);
typedef struct
{
char r;
char g;
char b;
char a;
}rgba_t;
typedef struct
{
int x;
int y;
int height;
int width;
int pixel_width;
char * base_ptr;
}box_t;
rgba_t *rgba_ptr;
unsigned char data[buff_size]={1};
void main()
{
long unsigned int status,i,j=0;
memset(data,' ',sizeof(data));
if(status = draw_Box(28,28,15 ,15,3,data))
{
printf("out of boundary");
return ;
}
for(i=0;i<buff_size;i++)
{
if(i%coloumn==0)
{
if(i==0)
{
}
else
{
printf("%3d\n\n",(j++));
}
}
printf("%2c ",data[i]);
}
printf("%3d\n\n",j);
for(i=0;i<coloumn;i++)
{
printf("%2d ",i);
}
return ;
}
int draw_Box(int x,int y,int height,int width,int thick,char *base_ptr)
{
int x1,y1,i,j;
x1 = x + height-1;
y1 = y + width-1;
// char *box_base_ptr = (base_ptr+((x*10)+y));
if((x1)>row || (y1) >coloumn)
{
return 1;
}
#if 1
for(j=0;j<thick;j++)
{
for(i=x+j;i<=x1-j;i++)
{
*(base_ptr+(i*coloumn)+y+j)=0x31+j;
*(base_ptr+(i*coloumn)+y1-j)=0x31+j;
}
}
#endif
#if 1
for(j=0;j<thick;j++)
{
for(i=y+1+j;i<y1-j;i++)
{
*(base_ptr+((x+j)*coloumn)+i)=0x31+j;
*(base_ptr+((x1-j)*coloumn)+i)=0x31+j;
}
}
#endif
return 0;
// for(i=x;)
}

Resources