[AYUDA] piramide en c++?

Iniciado por ianmorar03, 18 Abril 2016, 21:34 PM

0 Miembros y 1 Visitante están viendo este tema.

HardForo

#10
No se si es "eficiente" pero esta bien estructurado (a mejorar: no usar variables globales)


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;


struct matrix {
int rows,cols;
char **cells;
};

matrix m;

void make_board(int h,char c=' ');
void put_block(int x,int y, int len, char c = '*');
void triangle(int x,int y, int h, char c = '*');
void render(void);
void release(void);


int main(void) {
int h = 4;
make_board(h);
triangle(h*2-1,0,h);
triangle(h-1,h,h);
triangle(h*3-1,h,h);
render();
release();
   return 0;
}

void make_board(int h, char c=' ')
{
int i,j;

m.cols = h*4-1; m.rows = h*2;
m.cells = (char**) malloc(m.cols* sizeof(char*));
for (i=0; i<m.cols; i++)
m.cells[i] = (char*) malloc(m.rows * sizeof(char));

for (i=0; i<m.rows; i++)
for (j=0; j<m.cols; j++)
m.cells[i][j]= c;

}

void release(void){ free(m.cells); }

void render(void)
{
int i,j;
for (i=0; i<m.rows; i++){ // fila
for (j=0; j<m.cols; j++) // columna
cout << m.cells[i][j];
cout << endl;
   }
}

void put_block(int x,int y, int len, char c = '*'){
int ix, iy=y;
for (ix=x; ix<x+len; ix++){
m.cells[iy][ix] = c;
}
}

void triangle(int x,int y, int h, char c = '*')
{
int ix=x,iy,len=1;
for (iy=y; iy<y+h; iy++){
put_block(ix,iy,len,c);
ix--;
len+=2;
}
}



UPDATE: hay una mini-libreria que he hecho y sirve para hacer eso mucho mas facil aun, aqui
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

MAFUS

Like this! Viene bien, de vez en cuánto realizar pequeños rompecabezas, hace más emocionante esta sección :D

ivancea96

Venga, ahora que se reciba otro entero, que será las filas de triángulos que habrá.

Para altura 2 y 1 fila:
*
***

Para altura 2 y 2 filas:
   *
  ***
*   *
*** ***