[AYUDA] piramide en c++?

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

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

ianmorar03

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)
Aquellos que estan locos como para pensar que pueden cambiar el mundo , son los que lo hacen.

HardForo

#1

#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;
}
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

crack81

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;
}
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

ianmorar03

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.
Aquellos que estan locos como para pensar que pueden cambiar el mundo , son los que lo hacen.

fary

Uno es el contador de las columnas horizontales y el otro el contador de los asteriscos que tiene que imprimir.

saludos.
Un byte a la izquierda.

HardForo

#5
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 en sentido matematico.


PD:  ya habia dado una respuesta......... pero no daré respuestas a ejercicios completos en otros hilos.  Me disculpo por eso.
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

MAFUS

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:

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

HardForo

#7
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)
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

ivancea96

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

MAFUS

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.