Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: megadethrust1 en 22 Abril 2016, 02:37 am



Título: programando en c
Publicado por: megadethrust1 en 22 Abril 2016, 02:37 am
como podria hacer un rombo de asteriscos en c de dimension arbitraria pero en el eje x=0 poner "+" y el el punto (0,0) poner "&".




Título: Re: programando en c
Publicado por: engel lex en 22 Abril 2016, 02:39 am
movido... las preguntas de c, van en el subforo de c


Título: Re: programando en c
Publicado por: HardForo en 22 Abril 2016, 12:58 pm
Cuál es la duda ? se nota es una tarea que te dieron pero igual te ayudo desde la algoritmica: un rombo esta formado por 4 lineas diagonales, y ......


- Cada linea se hace con un simple bucle (solo una variable de control de bucle)

- El punto final de una, es el punto inicial de la otra

- Las pendientes son -1 o +1 (o sea... subes +1 en Y por cada 1 de variacion de X o bajas 1 en Y)


* Hay formas incluso mas simples de hacerlo con solo 2 bucles


Título: Re: programando en c
Publicado por: MAFUS en 22 Abril 2016, 14:38 pm
¿Así?
Código:
&  *
+ ***
+*****
+ ***
+  *

¿O así?
Código:
& *
+***
+****
+***
+ *


Título: Re: programando en c
Publicado por: HardForo en 22 Abril 2016, 15:08 pm
No queda claro si es lleno o vacio el rombo y lo que interpreto es que los ++++++ atraviesan el rombo al medio y el & esta justo en su centro (aunque tampoco esta bien especificado el origen de coordenadas)

MAFUS: trocaste el eje X con el Y


Título: Re: programando en c
Publicado por: MAFUS en 22 Abril 2016, 15:35 pm
Dice cuando x = 0.


Título: Re: programando en c
Publicado por: HardForo en 22 Abril 2016, 17:51 pm
MAFUS Tenes toda la razon  ;D



Tengo poco tiempo... pero me pude poner un rato y lo saqué  :xD

Código
  1. int main(void) {
  2. int diag = 6;
  3.  
  4. make_board(diag+1,diag+1,' ');
  5.  
  6. // rombo
  7. line(diag/2,0,1,1,diag/2,'a');
  8. line(diag,diag/2,-1,1,diag/2,'b');
  9. line(diag/2,diag,-1,-1,diag/2,'c');
  10. line(0,diag/2,1,-1,diag/2,'d');
  11.  
  12. // linea para x=0
  13. yblock(0,0,diag+1,'+');
  14.  
  15. //centro
  16. yblock(0,0,1,'&');
  17.  
  18. render();
  19.  
  20. release();
  21.    return 0;
  22. }
  23.  


Uso una implementación similar a la del problema de la pirámide y la definicion de line() es esta:

Código
  1. // Las lineas pueden ser discontinuas con deltas <> -1,0,+1 (por diseño)
  2. void line(int x1, int y1, int delta_x, int delta_y, int len, char c = '*'){
  3.  

Otras implementaciones de lineas que me hice fueron para:

Código
  1. void sline(int x1,int y1, int x2, int y2, char c = '*');
  2. void xblock(int x, int y, int len, char c = '*');
  3. void yblock(int x, int y, int len, char c = '*')
  4.  

Obviamente todo se puede hacer con line() y no se necesita más pero para lineas verticales y horizontales usar yblock() y xblock() puede ser mas comodo.

Si lo tuviera que re-hacer, dejaria un cursor en la posicion final de cada punto, linea, figura dibujada para no tener que calcular a mano ese valor de nuevo como punto de inicio de otras subsiguientes.

Obviamente el programa no compila porque no lo posté completo haciendo caso a recomendaciones del staff


Título: Re: programando en c
Publicado por: megadethrust1 en 22 Abril 2016, 20:18 pm
No queda claro si es lleno o vacio el rombo y lo que interpreto es que los ++++++ atraviesan el rombo al medio y el & esta justo en su centro (aunque tampoco esta bien especificado el origen de coordenadas)

MAFUS: trocaste el eje X con el Y
En realidad queria un reloj de arena.
Ya hice mi codigo use for, if,else, pero quiero que en el eje x=0 imprima + y en el punto (0,0) imprima &.


Título: Re: programando en c
Publicado por: HardForo en 23 Abril 2016, 02:10 am
Creo puedes hacer el reloj de arena más facil que con bucles, mirá aqui (http://foro.elhacker.net/programacion_cc/dibuje_una_piramide_rombo_pacman_xd-t451426.0.html)

Si le hago la funcion Pintar(), y borras y redibujas la pantalla.... hasta puede tener movimiento tu reloj de arena (que creo es lo que quieres hacer en ultimo caso)

Si lo miras...... la forma de trabajar se ha simplificado del todo