Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - clodan

#1
Hardware / Crossfire 5770 o 5870???
19 Octubre 2010, 15:35 PM
Bueno, lo que tengo pensado hacer es lo siguiente:

En este momento tengo de mother el 770-C45

Entonces, cambiar el mother (no se por cual)

Comprar otra 5770

y ponerle el Crossfire.

Que dicen?


o es mas conveniente comprar la 5870 directamente?
#2
existe alguna manera de limpiar la pantalla en C sin utilizar el system("cls"); ???
#3
Bueno, este es el codigo que tengo:

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

struct sis{
       int cod;
       char titu[25];
       char aut[25];
       char edit[25];
       int ano;
       char gene[25];
       };

int agregar();
int ver();

char * prog="DATA.file";
FILE * pf = NULL;

struct sis base[3000]={0};

int main(int argc, char *argv[]){
 
  int x;
  pf = fopen( prog, "a+b");
  if (pf==NULL){
        printf("Error al Crear, Abrir o Modificar el Archivo");
        while (getchar()!='\n');
        return 0;
        }
  printf("DATA.file abierto.\n");
  printf("Leyendo Datos de DATA.file. Por favor espere...\n\n");
  while (!feof(pf)){
        fread(&base, sizeof(base), 1, pf);
        }
 
 
 
  printf("....Sistema Interno....\n\n");
  printf("Eliga la opcion que desea realizar:\n");
  printf("1.Agregar Libro Nuevo\n");
  printf("2.Ver Libros Actuales\n");
  scanf("%d",&x);
  switch (x){
         case 1:{
            agregar();
            break;
         }
         case 2:{
            ver();
            break;
         }
  }
 
  fclose(pf);
  system("PAUSE");
  return 0;
}

int agregar(){
    int z=0,y=0;
    if (base[z].cod==0){
       y=z;
       }
    else {
       z++;
       }
   
    base[y].cod=y+1;   
    printf("Ingrese el Titulo del Libro\n");
    scanf("%s",&base[y].titu);
    printf("Ingrese el Autor del Libro\n");
    scanf("%s",&base[y].aut);
    printf("Ingrese la Editorial del Libro\n");
    scanf("%s",&base[y].edit);
    printf("Ingrese el ano del Libro\n");
    scanf("%d",&base[y].ano);
    printf("Ingrese el genero del Libro\n");
    scanf("%d",&base[y].gene);
   
    fwrite (base, 1 , sizeof(base) , pf );
   
    system("PAUSE");
    return 0;
    }

int ver(){
    int i=0;
    int z=0,y=0;
    if (base[z].cod==0){
       y=z;
       }
    else {
       z++;
       }
       
    for (i=0; i<=y; i++){
    printf("%d \t %s \t %s \t %s \t %d \t %s\n",base[i].cod,base[i].titu,base[i].aut,base[i].edit,base[i].ano,base[i].gene );
    }
   
    return 0;
    }



El gran problema, es qe me sobreescribe la informacion que ya esta en el archivo, osea... lo que necesito es...

que lea los datos del archivo y los meta en el struct BASE. Despues, cuando se desea hacer algo, que el programa vea cual es el ultimo registro, y agregue algo despues de ese. Finalmente que lo guarde en el archivo sobreescribiendo lo anterior.

Lo que sucede es que abre el archivo, lo lee, pero cuando escribe, me escribe arriba de lo que ya estaba antes :s
#4
Cuando yo inicializo un arreglo en base a una estructura, como se llama el espacio qe qeda dentro en vacio...

osea, yo necesito un codigo que genere automaticamente un codigo para un libro, y para eso necesito saber cual fue el ultimo que se hizo, pero no se como hacerlo ¬¬ a ver... muestro el codigo qe tengo hasta ahora:

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

struct sis{
      char cod;
      char titu;
      char aut;
      char edit;
      int ano;
      char gene;
      };

int agregar ();
int ver();

char * prog="DATA.file";
FILE * pf = NULL;
struct sis base[3000];
int main(int argc, char *argv[]){
 int x;
 pf = fopen( prog, "a+b");
 if (pf==NULL){
       printf("Error al Crear, Abrir o Modificar el Archivo");
       while (getchar()!='\n');
       return 0;
       }
 printf("DATA.file abierto.\n");
 printf("Leyendo Datos de DATA.file. Por favor espere...\n\n");
 while (!feof(pf)){
       fread(&base, sizeof(base), 1, pf);
       }
 
 
 printf("....Sistema Interno....\n\n");
 printf("Eliga la opcion que desea realizar:\n");
 printf("1.Agregar Libro Nuevo\n");
 printf("2.Ver Libros Actuales\n");
scanf("%d",&x);
 switch (x){
        case 1:{
             agregar ();
             break;
        }
        case 2:{
             ver ();
             break;
        }
 }

 while (getchar()!='\n');
 return 0;
}

int agregar(){
   
   ACA ES DONDE TENGO QUE PONER EL CODIGO QUE LES DIGO
   PARA QUE ME GENERE AUTOMATICAMENTE EL CODIGO DEL LIBRO :S
   
   printf("Ingrese el titulo del Libro\n");
   return 0;
   }

int ver(){
   
   return 0;
   }


A lo que me refiero es que necesito saber qe valor se guarda temporalmente en una variable hasta que se le asigna algo.

Osea, como se le dice?? EOF???
#5
Programación C/C++ / Problemita con FILES
6 Octubre 2010, 18:42 PM
bueno, este es mi code:

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

struct sis{
       char cod;
       char titu;
       char aut;
       char edit;
       int ano;
       char gene;
       };

char * prog="DATA.file";
FILE * pf = NULL;

int main(int argc, char *argv[]){
  struct sis base[3000];
  pf = fopen( prog, "ab");
  if (pf=NULL){
        printf("Error al Crear, Abrir o Modificar el Archivo");
        while (getchar()!='\n');
        return 0;
        }
  printf("DATA.file abierto.\n");
  printf("Leyendo Datos de DATA.file. Por favor espere...\n");
  while ( !feof(pf)){
        fread( &base, sizeof(base), 1, pf);
        }
  printf("Sistema Interno...\n");
  printf("Eliga la opcion que desea realizar:\n");
  printf("1.");
  while (getchar()!='\n');
  return 0;
}


cada vez que lo pongo a funcionar me tira error y se queda en el momento que tiene que leer los datos. Estamos recien arrancando con lectura y modificacion de archivos asi que por favor, todo en castellano basico! jejejeje

gracias!!!!
#6
Hardware / Overclocking Phenom 945 x4 3.0Ghz
26 Septiembre 2010, 16:49 PM
Bueno, no se mucho de OC a procesadores, me conviene subirle el multiplayer o el clock a los cores?? el mother me da las 2 opciones en la BIOS =D

salu2!

de no ser ninguna de las 2, pueden darme algun tipo de miniguia jejeje quiero ver cuanto soporta el amigo :P
#7
VENDIDA

CitarBueno, estoy vendiendo una xbox 360 a $2.000,00 con 16 juegos, caja original y todo adentro, el joystick etc...

NO esta baneada de xbox live, por lo tanto puede usarse en internet... emm

Es la Xbox 360 ARCADE PLACA JASPER!

Tiene a penas 3 meses de uso!!!

Dejo el link de la venta en mercado libre al que le interese!

http://articulo.mercadolibre.com.ar/MLA-95412911-xbox-360-3-meses-de-uso-impecablee-sin-baneo-_JM

Salu2!
#8
Programación C/C++ / Problema con estructuras
8 Septiembre 2010, 16:58 PM
Bueno, para el segundo trabajo de la facultad, nos dieron como consigna tratar de simular un sistema de un cajero de supermercado, donde la compra maxima es de 12 articulos.

Ahora, el problema qe tengo es cuando sumo los totales, y cuando los muestro.

Yo sospecho que el problema viene por los scanf, lo que supongo es qe hay numeros largos qe sobrepasan el espacio reservado y se meten en el lugar de otro, generando cualquier resultado.

Dejo el code:

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

struct Compra {
      int codprod;
      int cantidad;
      float precio;
      };

struct Factura {
      int fecha[2];
      int cuil[6];
      struct Compra lista[12];
      float total;
      };

struct Factura leerdatos();
float calctot ( struct Compra lista [], int n);
     
int main() {
 int i;
 struct Factura fachoy;
 fachoy=leerdatos();
 fachoy.total=calctot( fachoy.lista, 12);  
 printf("Los productos que Ud. lleva son: \n");
 for (i=0; i<12; i++){
     printf("%d - %d - $%d\n\n",fachoy.lista[i].cantidad ,fachoy.lista[i].codprod ,fachoy.lista[i].precio);
 }
 printf("TOTAL ---------------- $%d\n", fachoy.total);
 
 system("PAUSE");
 return 0;
}

struct Factura leerdatos(){
     struct Factura temp;
     int x;
     int i;
     printf("Ingrese el dia, luego el mes y finalmente el año.\nEspaciandolos con ENTER. EN NUMEROS\n");
     for (i=0; i<3; i++){
         scanf("%d",&temp.fecha[i]);
     }      
     printf("Fecha ingresada: %d/%d/%d\n\n",temp.fecha[0],temp.fecha[1],temp.fecha[2]);
     printf("Ingrese el numero de CUIL\n");
     scanf("%s",&temp.cuil);
     printf("CUIL Ingresado: %s\n\n",temp.cuil);
     for (i=0; i<12; i++){
         printf("Producto Numero %d\n",(i+1));
         printf("Ingrese el Codigo del Producto.\n");
         scanf("%d",&temp.lista[i].codprod);
         printf("Ingrese la cantidad.\n");
         scanf("%d",&temp.lista[i].cantidad);
         printf("Ingrese el precio.\n");
         scanf("%d",&temp.lista[i].precio);
     }
}
float calctot (struct Compra lista [], int n){
     float suma;
     for (n=0; n<12; n++){
         suma+=(lista[n].cantidad)*(lista[n].precio);
     }
     return suma;
}


Lh: No hagas doble post, utiliza el botón modificar.

ya lo solcione, me faltaba el retorno de leer_datos  ;-) ;-) ;-) ;-) ;-)
#9
Bueno, queria ver que les parecia el codigo antes de que lo entregue la semana que viene...
El programa debia calcular los primeros 100 numeros primos, y de ellos, clasificarlos en:
* menores a 100,
* mayores a 100 y menores a 500,
* mayores a 500 y menores a 1000,
Aparte, cada numero primo debia ser colocado en un arreglo, uno atras del otro (no se puede usar string.h)

HE AQUI EL CODIGO... MARAVILLAOS MORTALES!!! ;-) ;-) ;-) ;-) ;-)

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

int func1(int x);

int main(int argc, char *argv[]){
 int primos[100];
 int x=2, y, pos=0, cont=1;
 while (cont<=100){
       y=func1(x);
       switch (y){
              case 1:{
                   primos[pos]=x;
                   pos=pos+1;
                   if (x<100){
                              printf("%d)El numero %d es primo menor a 100\n", cont, x);
                              x=x+1;
                              cont=cont+1;
                              }
                   else if ((x>100) && (x<500)){
                              printf("%d)El numero %d es primo menor a 500 y mayor a 100\n", cont, x);
                              x=x+1;
                              cont=cont+1;
                              }
                   else if ((x>500) && (x<1000)){
                              printf("%d)El numero %d es primo menor a 1000 y mayor a 500\n", cont, x);
                              x=x+1;
                              cont=cont+1;
                              }
                   else {
                              printf("%d)El numero %d es mayor a 1000", cont, x);
                              x=x+1;
                              cont=cont+1;
                              }
                   break;
              }
              case 0:{
                   x=x+1;
                   break;
              }              
              default: {
                   printf("Opcion erronea");
                   break;
              }
       } //end switch
 } //end while
 
 printf("\n\nPresione ENTER para finalizar la operacion\n");
 while (getchar()!='\n'){}
 return 0;
}

int func1(int x){
   int y=2;
   while (x!=y){
         if ((x%y)>0){
               y=y+1;
         }
         else {
              return 0;
         }
   }
return 1;
}
#10
Bueno, estuve averiguando hace unos dias (hace mucho que no tocaba el CS:S) despues de instalarlo, que me saltaba un error de version erronea o que no concuerda con el servidor...

Entonces, para ver qe pasaba empeze a buscar en internet. Me entere que habian lanzado una version nueva, la 18v.

La instale y me seguia tirando el error de version erronea. Entonces, ante la duda de haber cagado algo en la instalacion, lo borre y lo instale de vuelta, reiniciando la compu como siempre y bla bla...

Pero nada... investigue un poco mas a fondo, y me encontre con la sorpresa de que supuestamente ya no se podia jugar mas en online con los NO-Steam  >:( >:( >:(

Si alguien sabe que onda, aviseme, sino de donde puedo bajarlo full para poder jugarlo :s
#11
Programación C/C++ / Pregunta Cadenas
26 Agosto 2010, 15:59 PM
Wenas... bueno, por lo que estuve viendo de strings en C, el programa C toma un arreglo y le agrega el caracter '\0' atras, lo cual entiendo que es la unica diferencia.

Para practicar estoy tratando de hacer un programa que me diga la cantidad de caracteres que tiene una frase (Incluyendo espacios). Pero al ejecutar el programa solo me cuenta la primer palabra y me ignora todo despues del espacio.

El otro problema que tengo es que me recomendaron dejar de usar los comandos system, y para reemplazar el pause vi que tambien puede usarse el getchar(); Pero cuando llega al punto ese lo esquiva, osea no frena el programa y sale automaticamente...


aca el codigo:

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


char sta[50];
int y=0;
main (){
     printf("Ingrese la frase a la cual desea contarle las letras\n");
     scanf("%s",sta);
     while (sta[y]!='\0'){
           y++;
           }
     printf("La frase tiene %d caracteres\n", y);
     
     getchar();
     return 0;
}
#12
Bueno, comparto este codigo que hice en C, simplemente te devuelve los valores de x para las raices y los valores de y para la ordenada al origen.

En caso de que sea polinomica y teniendo en cuenta el siguiente modelo: ax^2 + bx + c. Y en el programa se debera ingresar los valores para a, b, c.

Y en el caso de la racional, teniendo el cuenta el siguiente modelos:
(ax^2+bx+c)/(ax^2+bx+c). Y tendremos que ingresar los valores a,b,c del numerador y del denominador.
Aqui el codigo:

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


float divis(float numa,float numb,float numc,float dena,float denb,float denc);
float div0(float numa,float numb,float numc,float dena,float denb,float denc);
float divt(float numa,float numb,float numc,float dena,float denb,float denc);
float diva(float numa,float numb,float numc,float dena,float denb,float denc);
float var10(float b,float c);
float var20(float a,float c);
float vartrue(float a,float b,float c);
float a;
float b;
float c;
float raiz1;
float raiz2;
float ordenada;
float numa;
float numb;
float numc;
float dena;
float denb;
float denc;
float asihor;
float asiver1;
float asiver2;
int x;

int main(int argc, char *argv[]){ //comienzo funcion main
  prin: //menu principal
  system("cls");
  printf ("    *****************Version 2.0*******************\n\a");
  printf (" ----------------------------------------------------\n| Si desea calcular una funcion polinomica ingrese 1.|\n| Si desea calcular una funcion racional ingrese 2.  |\n ----------------------------------------------------\n");
  scanf ("%d",&x);
  switch (x){ 
         case 1:
              goto poli;
         case 2:
              goto raci;
         case 1992:
              goto rights;       
         default:
              goto prin;
              }
  rights: //Rights
         system("cls");
         printf ("PROGRAMADO Y DISEÑADO POR ALEJANDRO BENTIVENGO ^^ \n");
         system("PAUSE");
         goto prin;
 
  poli:  //ACA EMPIEZA LA SELECCION DE LAS POLINOMICAS
  system("cls");
  printf ("Esta opcion unicamente calcula los valores correspondientes a funciones polinomicas de hasta grado 2\n\a");
  printf ("Ingrese el valor a de la funcion\nEn caso de que no exista colocar 0\n");
  scanf ("%f",&a);
  printf ("Ingrese el valor b de la funcion\nEn caso de que no exista colocar 0\n\a");
  scanf ("%f",&b);
  printf ("Ingrese el valor c de la funcion\nEn caso de que no exista colocar 0\n\a");
  scanf ("%f",&c);
  if (a==0) {
            var10(b,c);
            goto pregunta;
  }
  else if (b==0){
            var20(a,c);
            goto pregunta;
  }
  else {
            vartrue(a,b,c);
            goto pregunta;
  }
  pregunta: //PREGUNTA PARA ARRANCAR DE VUELTA
  system("cls");
  printf ("     ********************************************\n     * Si desea resolver otra funcion ingrese 1.*\n     *        Si desea salir ingrese 2.         *\n     ********************************************\n\a");
  scanf ("%d",&x);
  switch (x){
         case 1:
              goto prin;
         case 2:
              return (0);
         default:
                 goto pregunta;
         }
 
  raci: // Comiendo funciones RACIONALES
  system("cls");
  printf ("Esta opcion unicamente calcula los valores correspondientes a funciones racionales de hasta grado 2\nEste programa expresa: Las asintotas, las raices, y la ordenada al origen.\n\a");
  printf ("Comenzando por el numerador, ingrese a.\nEn caso que no exista colocar 0.\n\a");
  scanf ("%f",&numa);
  printf ("Ingrese el b del numerador.\nEn caso que no exista colocar 0.\n\a");
  scanf ("%f",&numb);
  printf ("Ingrese el c del numerador.\nEn caso que no exista colocar 0.\n\a");
  scanf ("%f",&numc);
  printf ("Siguiendo por el denominador, ingrese el a del mismo.\nEn caso que no exista colocar 0.\n\a");
  scanf ("%f",&dena);
  printf ("Ingrese el b del denominador.\nEn caso que no exista colocar 0.\n\a");
  scanf ("%f",&denb);
  printf ("Ingrese el c del denominador.\nEn caso que no exista colocar 0.\n\a");
  scanf ("%f",&denc);
  if (numa==0 && dena==0){
              divis(numa,numb,numc,dena,denb,denc);
              goto pregunta;
  }
  else if (numa==0 && dena!=0){
              div0(numa,numb,numc,dena,denb,denc);
              goto pregunta;
  }
  else if (numa!=0 && dena==0){
              diva(numa,numb,numc,dena,denb,denc);
              goto pregunta;
  }
  else {
              divt(numa,numb,numc,dena,denb,denc);
              goto pregunta;
  }
}

float var10(float b,float c){
      system("cls");
      raiz1=((0-c)/b);
      ordenada=c;
      printf ("La raiz esta en %f\nY la ordenada al origen en %f\n\a", raiz1, ordenada);
      system("PAUSE");
      return (0);
}
float var20(float a,float c){
      system("cls");
      raiz1=(-4*(a*c));
      if (raiz1>0){
           raiz1=sqrt(raiz1);
           raiz1=0-raiz1;
           raiz1=raiz1/(2*a);
      }
      else {
           ordenada=c;
           printf ("La funcion no tiene raices.\nLa ordenada esta en %f\n\a", ordenada);
           system("PAUSE");
           return (0);
      }
      raiz2=(-4*(a*c));
      raiz2=sqrt(raiz2);
      raiz2=0+raiz2;
      raiz2=raiz2/(2*a);
      ordenada=c;
      printf ("La raiz 1 esta en %f\nLa raiz 2 esta en %f\nY la ordenada al origen en %f\n\a", raiz1, raiz2, ordenada);
      system("PAUSE");
}

float vartrue(float a,float b,float c){
      system("cls");
      raiz1=((b*b)-4*(a*c));
      if (raiz1>0){
           raiz1=sqrt(raiz1);
           raiz1=(0-b)-raiz1;
           raiz1=raiz1/(2*a);
      }
      else {
           ordenada=c;
           printf ("La funcion no tiene raices.\nLa ordenada esta en %f\n\a", ordenada);
           system("PAUSE");
           return (0);
      }
      raiz2=((b*b)-4*(a*c));
      raiz2=sqrt(raiz2);
      raiz2=(0-b)+raiz2;
      raiz2=raiz2/(2*a);
      ordenada=c;
      printf ("La raiz 1 esta en %f\nLa Raiz 2 esta en %f\nY la ordenada al origen en %f\n\a", raiz1, raiz2, ordenada);
      system("PAUSE");
}
           
float divis(float numa,float numb,float numc,float dena,float denb,float denc){
      system("cls");
      asiver1=((0-denc)/denb);
      asihor=(numa/dena);
      raiz1=((0-numc)/numb);
      ordenada=(numc/denc);
      printf ("La raiz se encuentra en %f.\nLa asintota Vertical en %f y la horizontal en %f.\nLa ordenada esta en %f\n\a", raiz1, asiver1, asihor, ordenada);
      system("PAUSE");
}

float div0(float numa,float numb,float numc,float dena,float denb,float denc){
      system("cls");
      asihor=0;
      asiver1=((denb*denb)-4*(dena*denc));
      if (asiver1>0){
                    asiver1=sqrt(asiver1);
                    asiver1=((0-denb)-asiver1);
                    asiver1=asiver1/(2*dena);
                    asiver2=((denb*denb)-4*(dena*denc));
                    asiver2=sqrt(asiver2);
                    asiver2=((0-denb)+asiver2);
                    asiver2=asiver2/(2*dena);
                    printf ("Existe asintota Vertical en %f y %f\n\a", asiver1, asiver2);
      }
     
      else {
           printf ("No existe Asintota Vertical\n\a");
      }
      raiz1=((0-numc)/numb);
      ordenada=(numc/denc);
      printf ("La asintota horizontal se encuentra en %f.\nLa raiz se encuentra en %f.\nLa ordenada se encuentra en %f\n\a",asihor,raiz1,ordenada);
      system("PAUSE");
}

float divt(float numa,float numb,float numc,float dena,float denb,float denc){
      system("cls");
      asihor=numa/dena;
      asiver1=((denb*denb)-4*(dena*denc));
      if (asiver1>0){
                    asiver1=sqrt(asiver1);
                    asiver1=((0-denb)-asiver1);
                    asiver1=asiver1/(2*dena);
                    asiver2=((denb*denb)-4*(dena*denc));
                    asiver2=sqrt(asiver2);
                    asiver2=((0-denb)+asiver2);
                    asiver2=asiver2/(2*dena);
                    printf ("Existe asintota Vertical en %f y %f\n\a", asiver1, asiver2);
      }
     
      else {
           printf ("No existe Asintota Vertical\n\a");
      }
      raiz1=((numb*numb)-4*(numa*numc));
      if (raiz1>0){
                   raiz1=sqrt(raiz1);
                   raiz1=((0-numb)-raiz1);
                   raiz1=(raiz1/(2*numa));
                   raiz2=((numb*numb)-4*(numa*numc));
                   raiz2=sqrt(raiz2);
                   raiz2=((0-numb)+raiz2);
                   raiz2=(raiz2/(2*numa));
                   printf ("Existe raiz en %f y %f\nCUIDADO!: Si el valor de las raices es igual al de las asintotas\nentonces no es una raiz!!!\n\a",raiz1,raiz2);
      }
      else {
           printf ("No existen raices\n\a");
      }
      ordenada=(numc/denc);
      printf ("La ordenada se encuentra en %f\nY la asintota horizontal en %f.\n\a", ordenada, asihor);
      system("PAUSE");
}
     
float diva(float numa,float numb,float numc,float dena,float denb,float denc){
      system("cls");
      printf ("No existe asintota horizontal\n\a");
      raiz1=((numb*numb)-4*(numa*numc));
      if (raiz1>0){
                   raiz1=sqrt(raiz1);
                   raiz1=((0-numb)-raiz1);
                   raiz1=(raiz1/(2*numa));
                   raiz2=((numb*numb)-4*(numa*numc));
                   raiz2=sqrt(raiz2);
                   raiz2=((0-numb)+raiz2);
                   raiz2=(raiz2/(2*numa));
                   printf ("Existe raiz en %f y %f\nCUIDADO!: Si el valor de las raices es igual al de las asintotas\nentonces no es una raiz!!!\n\a",raiz1,raiz2);
      }
      else {
           printf ("No existen raices\n\a");
      }
      asiver1=((0-denc)/denb);
      ordenada=numc/denc;
      printf ("Existe asintota vertical en %f\nYla ordenada al origen en %f\n\a",asiver1,ordenada);
      system("PAUSE");
}



El programa esta 100% probado y resuelve las funciones con un 99.9999% de exito.

Espero respuestas =)