Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: ianmorar03 en 18 Abril 2016, 21:34 PM

Título: [AYUDA] piramide en c++?
Publicado por: ianmorar03 en 18 Abril 2016, 21:34 PM
Hola! quisiera saber como hacer una piramide en c++?
pidiendo en un char la letra o lo que quiera (en este caso un asterisco'*') y en otra pidiendo la dimension; por ejemplo si es 7 seria algo asi como:
*
**
***
****
*****
******
*******

Sin hacer uso de for, unicamente con while y sin las librerias de c(conio.h y stdio.h)
Título: Re: [AYUDA] piramide en c++?
Publicado por: HardForo en 18 Abril 2016, 21:43 PM

#include <iostream>
using namespace std;

int main(void)
{
   int cols = 7,e,i;
   char c = '*';    

e = 0;  
while (e<cols){    
            i = 0;
            while (i<e){
        cout << c;
        i++;
    }
    cout << endl;
    e++;
   }        

   return 0;
}
Título: Re: [AYUDA] piramide en c++?
Publicado por: crack81 en 18 Abril 2016, 23:07 PM
Hola te dejo el primer ejemplo hecho en C el segundo te toca a ti, es practicamente los mismo.

Si te cuesta realizar el segundo necesitas repasar nuevamente tus conceptos de programacion.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,j=0;
    char caracter;

    printf("Ingrese un caracter \n");
    scanf("%c",&caracter);

    for(i=0;i<10;i++){
        for(j=0;j<i;j++){
            printf("%c",caracter);
        }
       printf("\n");//saltamos de linea
    }
    //###############################################

    return 0;
}
Título: Re: [AYUDA] piramide en c++?
Publicado por: ianmorar03 en 19 Abril 2016, 01:27 AM
Cita de: boctulus en 18 Abril 2016, 21:43 PM

#include <iostream>
using namespace std;

int main(void)
{
    int cols = 7,e,i;
    char c = '*';     

e = 0; 
while (e<cols){   
    i = 0;
        while (i<e){
        cout << c;
        i++;
}
cout << endl;
e++;
    }       

    return 0;
}


@boctulus es lo que necesito, sin embargo no entiendo muy bien la funcion de las variables i y e en el codigo.

@crack81 muchas gracias por la respuesta, igual use tu codigo, cambiandolo a c++ y los for a while y me funciono aunque sigo con la pregunta de que es la i y la j en el codigo.
Título: Re: [AYUDA] piramide en c++?
Publicado por: fary en 19 Abril 2016, 09:59 AM
Uno es el contador de las columnas horizontales y el otro el contador de los asteriscos que tiene que imprimir.

saludos.
Título: Re: [AYUDA] piramide en c++?
Publicado por: HardForo en 19 Abril 2016, 12:38 PM
i,j o e,i son variables de control de lazo (bucle, ciclo)

Se podria haber hecho con un solo while() si sabes cuantos caracteres esperas al final:


#include <iostream>
using namespace std;

int main(void)
{
   int num = 5, pad, inc, row, tmp;
   char c = '*';    

// cantidad de caracteres =  suma de los n primeros naturales: n(n+1)/2
pad = num * (num+1) * 0.5;

inc = 0; row =1; tmp = 1;
while (inc<pad){
cout << c;
if (tmp==row){
cout << endl;
tmp=0;
row++;
}
inc++;
tmp++;
}

   return 0;
}



Este tipo de problemas se puden resolver con 2 bucles pero tambien con 1 bucle + 1 if() interno y seria como hacer una transformacion del mundo (x,y) al (u,v) :


(bucle externo, bucle interno) ---> (bucle externo 2, if interno)


El bucle externo no es el mismo y por tanto el if() interno no reemplaza (estoy editando mi respuesta) al bucle interno. Por esto se puede hablar de transformación (https://es.wikipedia.org/wiki/Transformaci%C3%B3n_(funci%C3%B3n)) en sentido matematico.


PD:  ya habia dado una respuesta......... pero no daré respuestas a ejercicios completos en otros hilos.  Me disculpo por eso.
Título: Re: [AYUDA] piramide en c++?
Publicado por: MAFUS en 20 Abril 2016, 12:18 PM
Os propongo un ejecicio:
Realizar la figura que se muestra a continuación en el ejemplo.
El programa debe aceptar un entero que representa la altura de los triangulos pequeños que forman el total.
Así, con la entrada de un 5 se consigue:

         *
        ***
       *****
      *******
     *********
    *         *
   ***       ***
  *****     *****
*******   *******
********* *********


Con una entrada de un 3:

     *
    ***
   *****
  *     *
***   ***
***** *****
Título: Re: [AYUDA] piramide en c++?
Publicado por: HardForo en 20 Abril 2016, 17:05 PM
Lo mas facil seria crear una matriz bidimensional de 2H*2H siendo H la altura del trinangulo, hacer una simple funcion que cree el triangulo con un caracter, y colocar el "cursor" dentro de la matriz  donde se necesite  e ir pintando cada triangulo

(sin son los llenos con asteriscos son solo 3 de ellos, si son rellenos con espacios sobre un fondo de asteriscos son mas triangulos y ni siquiera son equilateros)
Título: Re: [AYUDA] piramide en c++?
Publicado por: ivancea96 en 20 Abril 2016, 18:58 PM
Por qué no jaja

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

void printWithStrings(unsigned short height, char c = '*'){
int k = height*2-1;
int p = k;
for(int i=0; i<height; i++)
cout << string(k-i, ' ') << string(i*2+1, c) << '\n';
for(int i=0; i<height; i++){
const string &&s = string(i*2+1, c);
cout << string(k/2-i, ' ') << s << string(k-i*2, ' ') << s << '\n';
}
flush(cout);
}

void print(unsigned short height, char c = '*'){
int k = height*2-1;
int p = k;
char bSpace[k],
  bChar[k];
for(int i=0; i<k; i++){
bSpace[i] = ' ';
bChar[i] = c;
}
for(int i=0; i<height; i++){
cout.write(bSpace, k-i);
cout.write(bChar, i*2+1);
cout << '\n';
}
for(int i=0; i<height; i++){
cout.write(bSpace, k/2-i);
cout.write(bChar, i*2+1);
cout.write(bSpace, k-i*2);
cout.write(bChar, i*2+1);
cout << '\n';
}
flush(cout);
}

int main(){
print(5);
printWithStrings(5);
}


Una forma eficiente y otra menos eficiente xD
Título: Re: [AYUDA] piramide en c++?
Publicado por: MAFUS en 20 Abril 2016, 19:43 PM
Esta es mi solución:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void printchars(int __char, int ntimes) {
    for(int i = 0; i < ntimes; ++i)
        putchar(__char);
}

int main()
{
    int N;
    int nspaces;
    int nasterisks;
    scanf("%d", &N);
   
    nspaces = N * 2 - 1;
   
    nasterisks = 1;
    for(int i = 0; i < N; ++i) {
        printchars(' ', nspaces);
        printchars('*', nasterisks);
        --nspaces;
        nasterisks += 2;
        putchar('\n');
    }
   
    nasterisks = 1;
    for(int i = 0; i < N; ++i) {
        printchars(' ', nspaces);
        printchars('*', nasterisks);
        printchars(' ', (N - i) * 2 - 1);
        printchars('*', nasterisks);
        --nspaces;
        nasterisks += 2;
        putchar('\n');
    }
   
    return 0;
}


Animaos a publicar vuestros códigos. El ejercicio es interesante.
Título: Re: [AYUDA] piramide en c++?
Publicado por: HardForo en 20 Abril 2016, 22:07 PM
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 (http://foro.elhacker.net/programacion_cc/dibuje_una_piramide_rombo_pacman_xd-t451426.0.html)
Título: Re: [AYUDA] piramide en c++?
Publicado por: MAFUS en 20 Abril 2016, 23:00 PM
Like this! Viene bien, de vez en cuánto realizar pequeños rompecabezas, hace más emocionante esta sección :D
Título: Re: [AYUDA] piramide en c++?
Publicado por: ivancea96 en 20 Abril 2016, 23:08 PM
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:
   *
  ***
*   *
*** ***