Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: tadprox en 2 Junio 2013, 17:04 PM

Título: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: tadprox en 2 Junio 2013, 17:04 PM
Pues, es algo extenso el programa... ya que tiene que ser una especie de modulo que permita graficar... es decir, como una cabecera... grafico.h que contenga todas las funciones para graficar y todo eso.. Pero el problema es que no sabria como cargar el eje cartesiano... Les paso una imagen de como seria mas o menos, la grafica, tiene que ser en la terminal de la consola... no se puede llamar a la libreria grafica.

(http://i39.tinypic.com/2ronf3q.png)

Asi tiene que ser, claro, las funciones que va a graficar, no las tiene que interpretar, tiene que estar predefinidas por el usuario. Tienen alguna idea de como puedo empezar??

Recien lo que hice fue una funcion Gotoxy aqui en Debian (Linux) que me permite posicionar el texto o algo donde yo quiera.. Pero no se como graficar esas funciones asi de esa forma

Porque el programa no es un interpretador de funciones, las mismas, como las que se muestran en la imagen... Tienen que estar ya predefinidas en el paquete o modulo de la graficadora...
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: pacoperico en 2 Junio 2013, 17:55 PM
Pues entonces a hacer uso de printf(). Empieza por la linea horizontal de arriba la de 40, tienes que mirar cuantos caracteres hay en cada linea, la recorres con un ciclo while utilizando una variable contador y comparandola con el numero maximo de caracteres que puedes escribir en cada linea, haces un if...else if en cada ciclo del while para comprobar si ese punto coincide o no con alguna de las dos funciones. Si coincide con la primera funcion escribes el simbolo '+' con un printf(), si es con la segunda el simbolo '*' y si no coincide con ninguna escribes el simbolo '-'. Cuando llegues al final de la linea haces un salto de linea. Y repites todo lo anterior dentro de otro ciclo while.
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: tadprox en 2 Junio 2013, 19:37 PM
Cita de: pacoperico en  2 Junio 2013, 17:55 PM
Pues entonces a hacer uso de printf(). Empieza por la linea horizontal de arriba la de 40, tienes que mirar cuantos caracteres hay en cada linea, la recorres con un ciclo while utilizando una variable contador y comparandola con el numero maximo de caracteres que puedes escribir en cada linea, haces un if...else if en cada ciclo del while para comprobar si ese punto coincide o no con alguna de las dos funciones. Si coincide con la primera funcion escribes el simbolo '+' con un printf(), si es con la segunda el simbolo '*' y si no coincide con ninguna escribes el simbolo '-'. Cuando llegues al final de la linea haces un salto de linea. Y repites todo lo anterior dentro de otro ciclo while.

Algun ejemplo en codigo de lo que mencionas porfavor?
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: tadprox en 2 Junio 2013, 19:39 PM
Ademas recuerda que no solo tengo que graficar esa funcion, que muestra la imagen, puedo tambien graficar cualquiera... Que yo haya pre-establecido... Por ejemplo un ciruclo y eso..

Ademas, la cuadricula, tiene que tener un maximo y el usuario, puede elegir, graficar hasta ese maximo por ejemplo

Si yo digo que en el eje X sean 50 y en el eje Y 50 entonces, el usuario puede escoger graficar entre 0 y 50 o entre 0 y 40... Y ademas puede ser cualquier funcion que yo haya pre-escrito en el codigo fuente... No es hacer solamente el dibujo
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: pacoperico en 2 Junio 2013, 20:46 PM
Asi seria para graficar una funcion y=x.

Código (cpp) [Seleccionar]
#include <stdio.h>

int main()
{
int x, y=20;
while(y >= 0){
x = 0;
while(x <= 20){
if( x == y )
printf("+");
else if( x != y)
printf("-");
x++;
}
printf("\n");
y--;
}
return 0;
}
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: amchacon en 2 Junio 2013, 20:54 PM
Cita de: pacoperico en  2 Junio 2013, 20:46 PM
Código (cpp) [Seleccionar]
if( x == y )
 printf("+");
else if( x != y)
printf("-");

Si x == y es falso, entonces tiene que ser forzosamente x != y. El segundo if sobra  :silbar:
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: pacoperico en 2 Junio 2013, 20:58 PM
Cita de: amchacon en  2 Junio 2013, 20:54 PM
Si x == y es falso, entonces tiene que ser forzosamente x != y. El segundo if sobra  :silbar:

Completamente cierto, lo puse asi para que quedara mas claro.
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: tadprox en 3 Junio 2013, 00:30 AM
Bien, pero como dibujo la cuadricula, para que pueda graficar? y que supongamos pueda graficar almenos las 2 funciones que muestro en la imagen?
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: leosansan en 3 Junio 2013, 07:26 AM

Porfa, que fulminen el post anterior y le bloqueen la dirección ya que no desaprovecha ocasión para meternos su estúpida propaganda,

Saluditos! .... ..
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)

P.D: Gracias" a los de arriba" por la prontitud en la reacción. Aclaro que cuando me refiero al post anterior era a uno de propaganda de teléfonos que ya han borrado.
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: pacoperico en 3 Junio 2013, 12:15 PM
Cita de: cc12ful en  3 Junio 2013, 00:30 AM
Bien, pero como dibujo la cuadricula, para que pueda graficar? y que supongamos pueda graficar almenos las 2 funciones que muestro en la imagen?

Eso ya es cosa tuya, aqui nadie va a hacerte la tarea. Ya tienes lo basico de como poder graficar una funcion en modo consola, solo has de usar la funcion printf() y ponerle las condiciones necesarias para que te dibuje en pantalla lo que tu quieras.

Quieres por ejemplo que de cada cinco lineas horizontales, una de ellas este compuesta por el simbolo '-' y las cuatro restantes por espacios en blanco ' ', pues usa if y pones en su condicion todo esto ultimo.
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: tadprox en 3 Junio 2013, 23:26 PM
Cita de: pacoperico en  3 Junio 2013, 12:15 PM
Eso ya es cosa tuya, aqui nadie va a hacerte la tarea. Ya tienes lo basico de como poder graficar una funcion en modo consola, solo has de usar la funcion printf() y ponerle las condiciones necesarias para que te dibuje en pantalla lo que tu quieras.

Quieres por ejemplo que de cada cinco lineas horizontales, una de ellas este compuesta por el simbolo '-' y las cuatro restantes por espacios en blanco ' ', pues usa if y pones en su condicion todo esto ultimo.

Ok pero, no es solo graficar tal cual como esta en la imagen, porque ademas, deberia tener estas otras 2 opciones

Para la salida se debe poder definir los valores mínimos y máximo de los ejes, intervalos de la rejilla. Pero paquete puede realizar algunos de estos cálculos de forma automática.
- Se podría trabajar con dos ejes en la Y, para lo cual se definir una serie se le puede asociar con cuál de los dos ejes está trabajando.

Y claro, podria hacerlo con un simple printf y las condiciones que me dices, pero como adaptarlo segun esas 2 cosas, que tambien deberia poder hacer? Algun consejo? Y no estoy pidiendo que me lo hagan, sino que me aconsejen, no malinterpretes, no quiero que me lo hagan, solo que me ayuden a entender, y ayudarme...Ayudar no es hacer todo completo.

Saludos!
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: RyogiShiki en 4 Junio 2013, 08:07 AM
Si estás trabajando en Linux, talvés quieras investigar un poco sobre als librerías ncurses. Seguramente te facilitarán muchísimo la tarea.
Documentación: ncurses (http://www.ditec.um.es/~piernas/manpages-es/otros/tutorial-ncurses.html)

Saludos
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: leosansan en 4 Junio 2013, 18:01 PM
Cita de: tadprox en  2 Junio 2013, 17:04 PM

Recien lo que hice fue una funcion Gotoxy aqui en Debian (Linux) que me permite posicionar el texto o algo donde yo quiera.. Pero no se como graficar esas funciones asi de esa forma


Pues te muestro una imagen del seno entre 0 y 2Pi:

(http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/senocongotoxy_zps91ef67d5.jpg)

mejorable eligiendo más adecuadamente los valores de i. Pero de muestra creo que te sirve.

Por cierto, el código de gotoxy es para windows. Tan solo tienes que adaptar tu Goto de linux y el dibujo en sí, con el bucle for, te sirve igual:


Código (cpp) [Seleccionar]
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <windows.h>

int main(){
   float i=0,j=0,seno[100]={0},temp=0;
   int x=0,y=0,cont=0;
   for (i=0;i<=2*3.14165;i+=0.10)
   {
       x=(int)(i*10);
       y=(int)(10-sin (i)*10);
       gotoxy (x,y);
       printf ("*");
   }
   gotoxy (0,20);
   system ("pause");
   return 0;
}
int gotoxy(int x, int y)
{
  COORD coord;
  HANDLE h_stdout;
  coord.X = x;
  coord.Y = y;
  if ((h_stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE)
     return 0;
  if (SetConsoleCursorPosition(h_stdout, coord) == 0)
     return 0;
  return 1;
}



Saluditos! .... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: amchacon en 4 Junio 2013, 18:43 PM
Estoy fascinado Leo, en cada post me sorprendes con algo nuevo  ;-)

Creo que podríamos considerarte el amo del lenguaje C.
Título: Re: Alguien puede ayudarme con este programa ? en C (Linux)
Publicado por: leosansan en 4 Junio 2013, 19:14 PM
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)

Una ligera mejora:

(http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/senocongotoxy2_zpse68578f3.jpg)

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <windows.h>

int main(){
   system("mode 110,40");
   float i=0,j=0,seno[100]={0},temp=0;
   int x=0,y=0,cont=0;
   for (i=0;i<=2*3.14165;i+=0.10)
   {
       x=(int)(i*15);
       y=(int)(15-sin (i)*15);
       gotoxy (x,y+5);
       printf ("*");
       gotoxy (x,20);
       printf ("-");
       gotoxy (0,y+5);
       printf ("|");
   }
   gotoxy (x,20);
       printf ("----> EJE OX");
   gotoxy (0,5);
       printf ("^ EJE OY");
   gotoxy (0,35);
   system ("pause");
   return 0;
}
int gotoxy(int x, int y)
{
  COORD coord;
  HANDLE h_stdout;
  coord.X = x;
  coord.Y = y;
  if ((h_stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE)
     return 0;
  if (SetConsoleCursorPosition(h_stdout, coord) == 0)
     return 0;
  return 1;
}


Saluditos! .... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)

P.D: Penita pena tienes que "estirar" a lo ancho la página  o hacer uso de la barra horizontal de desplazamiento para ver la imagen completa.Bueno, si estas interesado ejecuta el código que, como curiosidad, cambia automáticamente el tamaño de la consola para que se vea la curva entera  :o

P.D:P.D: Es León, no Leo querido colega amchacon .... y gracias por lo dicho por tí, pero no es para tanto, de veras.