elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: [1] 2 3
1  Programación / Programación C/C++ / Re: Archivos temporales en: 25 Noviembre 2024, 18:51 pm
Gracias por responderme,

Solo una ultima pregunta, tengo este codigo:

#define _CRT_NO_SECURE_WARNINGS

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

#define MAX_SIZE 999

void nyuarchivo1(char* nyuadnsips) {

   printf("El archivo dnsips.txt ya ha sido creado, adivina acontinuacion nombre y ubicacion ");

   if (fgets(nyuadnsips, MAX_SIZE, stdin) == NULL) {

      printf("No se guardo ni el nombre ni la ubicacion");

      return;

   }

   nyuadnsips[strcspn(nyuadnsips, "\n")] = '\0';

   printf("El nombre que figura dentro de la cadena es: %s", nyuadnsips);
   printf("\n \n");

   FILE* archivo1 = fopen(nyuadnsips, "r");

   if (archivo1 == NULL) {

      printf("ERROR, el archivo realmente noe existe");

      return;

   }

   int c;

   while ((c = fgetc(archivo1)) != EOF) {

      putchar(c);

   }

   fclose(archivo1);
}

void adns(char* pings, char* dns, char* primernetsh) {

   snprintf(pings, MAX_SIZE, "ipconfig");

   system(pings);

   printf("¿Que adaptador de red que quiere modificar?");

   if (fgets(dns, MAX_SIZE, stdin) == NULL) {

      printf("Mal, mal empezamos no es un buen reciclaje");

      return;

   }

   dns[strcspn(dns, "\n")] = '\0';

   printf("El nombre que figura dentro de la cadena es: %s", dns);
   printf("\n \n");

   snprintf(primernetsh, MAX_SIZE, "netsh interface ip show dns name= \"%s\"", dns);

   int resultado = system(primernetsh);

}

void ccpings(char* cadena1, char* cadena2, char* cadena3, char* cadena4, char* ping1, char* ping2, char* ping3, char* ping4) {

   FILE* temporal = tmpfile();

   if (temporal == NULL) {

      printf("Primer archivo temporal fallido");

      return;

   }

   printf("El siguiente paso es hacer un ping a las IPs, por eso las pondremos en cadenas, despues usaremos la sentencia snprintf, para construir los comandos pings que comprobaran cuales son viables, sera hacer la cadena y hacer el ping a esa cadena, no esperaremos a tenerlas todas, asi de esa manera trabajamos con ellas individualmente: ");
   printf("\n");
   printf("Cadena 1: ");

   if (fgets(cadena1, MAX_SIZE, stdin) == NULL) {

      printf("Mal, mal empezamos no es un buen reciclaje");

      return;

   }

   cadena1[strcspn(cadena1, "\n")] = '\0';

   printf("\n \n");
   printf("YYY  la  IP numero 1   essss: %s", cadena1);
   printf("\n \n");
   printf("Y Ahoora el ping");
   printf("\n \n");

   snprintf(ping1, MAX_SIZE, "ping -n 4 %s", cadena1);
   int valor1 = system(ping1);

   if (valor1 != 0) {

      fprintf(temporal, "%s", cadena1);

      return;
   }
   printf("\n");
   printf("Cadena 2: ");

   if (fgets(cadena2, MAX_SIZE, stdin) == NULL) {

      printf("Mal, mal empezamos no es un buen reciclaje");

      return;

   }

   cadena2[strcspn(cadena2, "\n")] = '\0';

   printf("\n \n");
   printf("IP numero 2: %s", cadena2);
   printf("\n \n");
   printf("Y Ahoora el piing");
   printf("\n \n");

   snprintf(ping2, MAX_SIZE, "ping -n 4 %s", cadena2);
   int valor2 = system(ping2);

   if (valor1 != 0) {

      fprintf(temporal, "%s", cadena2);

      return;

   }
   printf("\n");
   printf("Cadena 3: ");

   if (fgets(cadena3, MAX_SIZE, stdin) == NULL) {

      printf("Mal, mal empezamos no es un buen reciclaje");

      return;

   }

   cadena3[strcspn(cadena3, "\n")] = '\0';

   printf("\n \n");
   printf("IP 3: %s", cadena3);
   printf("\n \n");
   printf("Y Ahoora el piiing");
   printf("\n \n");

   snprintf(ping3, MAX_SIZE, "ping -n 4 %s", cadena3);
   int valor3 = system(ping3);

   if (valor1 != 0) {

      fprintf(temporal, "%s", cadena3);

      return;

   }
   printf("\n");
   printf("Cadena 4: ");

   if (fgets(cadena4, MAX_SIZE, stdin) == NULL) {

      printf("Mal, mal empezamos no es un buen reciclaje");

      return;

   }

   cadena4[strcspn(cadena4, "\n")] = '\0';

   printf("\n \n");
   printf("IP 4: %s", cadena4);
   printf("\n \n");
   printf("Y Ahoora el piiiing");
   printf("\n \n");

   snprintf(ping4, MAX_SIZE, "ping -n 4 %s", cadena4);
   int valor4 = system(ping4);

   if (valor1 != 0) {
      printf("\n");
      fprintf(temporal, "%s", cadena4);
      printf("\n");
      return;

   }

   fclose(temporal);

}

void punto8(char* comandotracert1, char* comandotracert2, char* comandotracert3, char* comandotracert4, const char* cadena1, const char* cadena2, const char* cadena3, const char* cadena4) {

   printf("\n");
   printf("Acontinuacion compararemos als dices IP con un tracert: ");
   printf("\n");

   FILE* temporal = tmpfile();

   if (!temporal) {
      printf("\n");
      perror("entonces no hase falta decir nada mazss");
      printf("\n");
      return;

   }

   snprintf(comandotracert1, MAX_SIZE, "tracert %s", cadena1);
   system(comandotracert1);
   printf("\n");
   snprintf(comandotracert2, MAX_SIZE, "tracert %s", cadena2);
   system(comandotracert2);
   printf("\n");
   snprintf(comandotracert3, MAX_SIZE, "tracert %s", cadena3);
   system(comandotracert3);
   printf("\n");
   snprintf(comandotracert4, MAX_SIZE, "tracert %s", cadena4);
   system(comandotracert4);

   fclose(temporal);
}

void punto10a(const char* dns, char* ipr, char* mdrr, char* gwr) {

   printf("\n");
   printf("Introduce la nueva IP para tu adaptador de red");
   printf("\n");

   if (fgets(ipr, MAX_SIZE, stdin) == NULL) {

      printf("Error la direccion no se guardo");

      return;

   }

   ipr[strcspn(ipr, "\n")] = '\0';

   printf("La nueva ip que tendra el adaptador es: %s", ipr);
   printf("\n");

   printf("\n");
   printf("Introduce la nueva Mascara de Red para tu adaptador de red");
   printf("\n");

   if (fgets(mdrr, MAX_SIZE, stdin) == NULL) {

      printf("Error la direccion no se guardo");

      return;

   }

   mdrr[strcspn(mdrr, "\n")] = '\0';

   printf("\n");
   printf("La nueva Mascara de Red que tendra el adaptador es: %s", mdrr);
   printf("\n");

   printf("\n");
   printf("Introduce la nueva direccion de puerta de enlace predeterminada para tu adaptador de red: ");
   printf("\n");

   if (fgets(gwr, MAX_SIZE, stdin) == NULL) {

      printf("Error la direccion no se guardo");

      return;

   }

   gwr[strcspn(gwr, "\n")] = '\0';

   printf("\n");
   printf("La nueva Puerta de enlace que tendra el adaptador es: %s", gwr);
   printf("\n");

   

}

void punto10b(char* comandonetsh2, const char* dns, const char* ipr, const char* mdrr, const char* gwr) {

   snprintf(comandonetsh2, MAX_SIZE, "netsh interface ip set address name=\"%s\" static %s %s %s", dns, ipr, mdrr, gwr);

   printf("Ejecute el comando: %s\n", comandonetsh2);

   printf("\n");

   int resultado3 = system(comandonetsh2);

   if (resultado3 != 0) {

      printf("Error: el comando no es correcto\n");

   }



}


int main() {


   int resultado3;
   char nyuadnsips[MAX_SIZE] = "D:\\Dnsips.txt";
   char dns[MAX_SIZE];
   char primernetsh[MAX_SIZE];
   static char cadena1[MAX_SIZE];
   static char cadena2[MAX_SIZE];
   static char cadena3[MAX_SIZE];
   static char cadena4[MAX_SIZE];
   char ping1[MAX_SIZE];
   char ping2[MAX_SIZE];
   char ping3[MAX_SIZE];
   char ping4[MAX_SIZE];
   char pings[MAX_SIZE];
   char comandotracert1[MAX_SIZE];
   char comandotracert2[MAX_SIZE];
   char comandotracert3[MAX_SIZE];
   char comandotracert4[MAX_SIZE];
    static char ipr[MAX_SIZE];
   static char mdrr[MAX_SIZE];
   static char gwr[MAX_SIZE];
   char comandonetsh2[MAX_SIZE];

   printf("\n");
   nyuarchivo1(nyuadnsips);
   printf("\n");
   adns(pings, dns, primernetsh);
   printf("\n");
   ccpings(cadena1, cadena2, cadena3, cadena4, ping1, ping2, ping3, ping4);
   printf("\n");
   punto8(comandotracert1, comandotracert2, comandotracert3, comandotracert4, cadena1, cadena2, cadena3, cadena4);
   printf("\n");
   punto10a(dns, ipr, mdrr, gwr);
   punto10b(comandonetsh2, dns, ipr, mdrr, gwr);
   system("ipconfig");

   free(comandonetsh2);

   return 0;
}

Mi pregunta es: ¿De usar ese programa con mi adaptador Wi-Fi Funcionara y cambiara los parametros del adaptador W-Fi O hara que ese adaptador deje de funcionar?, esque me preocupa un poco hacer algo irremediable, si alguien que si sepa lo que hace pudiera mirarse las ultimas 2 funciones y decirme si pueod ejecutar el porgrama sin temor o si ve algo mal, lo agradeceria
2  Programación / Programación C/C++ / Archivos temporales en: 18 Noviembre 2024, 20:35 pm
Buenas, estoy intentando desarrollar un programa que crea un archivo temporal y guarda en el los ping que responden correctamente:

#define _CRT_NO_SECURE_WARNINGS

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

#define MAX_SIZE 999

void nyuarchivo1(char* nyuadnsips) {

   printf("El archivo dnsips.txt ya ha sido creado, adivina acontinuacion nombre y ubicacion ");

   if (fgets(nyuadnsips, MAX_SIZE, stdin) == NULL) {

      printf("Mal, mal empezamos no se guardo ni el nombre ni la ubicacion");

      return;

   }

   nyuadnsips[strcspn(nyuadnsips, "\n")] = '\0';

   printf("El nombre que figura dentro de la cadena es: %s", nyuadnsips);
   printf("\n \n");

   FILE* archivo1 = fopen(nyuadnsips, "r");

   if (archivo1 == NULL) {

      printf("ERROR, el archivo realmente noe existe");

      return;

   }

   int c;

   while ((c=fgetc(archivo1)) != EOF) {

      putchar(c);

   }

   fclose(archivo1);
}

void adns(char* dns, char* primernetsh) {

   printf("¿Que adaptador de red que quiere modificar?");

   if (fgets(dns, MAX_SIZE, stdin) == NULL) {

      printf("Mal, mal empezamos no es un buen reciclaje");

      return;

   }

   dns[strcspn(dns, "\n")] = '\0';

   printf("El nombre que figura dentro de la cadena es: %s", dns);
   printf("\n \n");

   snprintf(primernetsh, MAX_SIZE, "netsh interface ip show dns name= \"%s\"",dns);
   
   int resultado=system(primernetsh);

}

void ccpings(char* cadena1, char* cadena2, char* cadena3, char* cadena4, char* ping1, char* ping2, char* ping3, char* ping4) {

   FILE* temporal = tmpfile();

   if (temporal == NULL) {

      printf("Primer archivo temporal fallido");

      return;

   }

   printf("AHORA, el siguiente paso   es hacer un ping a las IPs, para eso, hay que ponerlas en cadenas, despues sera necesario, usar la snetencia snprintf, otra vez, para construir los comandos pings que comprobaran cuales son viables, ¿OK? y si sera hacer la cadena y hacer el ping a esa cadena, no esperaremos a tenerlas todas, asi de esa manera trabajamos con ellas individualmente: ");

   printf("Cadena 1: ");

   if (fgets(cadena1, MAX_SIZE, stdin) == NULL) {

      printf("Mal, mal empezamos no es un buen reciclaje");

      return;

   }

   cadena1[strcspn(cadena1, "\n")] = '\0';

   printf("\n \n");
   printf("YYY  la  IP numero 1   essss: %s", cadena1);
   printf("\n \n");
   printf("Y Ahoora el piing");
   printf("\n \n");

   snprintf(ping1, MAX_SIZE, "ping -n 4 %s", cadena1);
   int valor1 = system(ping1);

   if (valor1 != 0) {

      fprintf(temporal, "%s", cadena1);
      
   }

   fclose(temporal);
}


int main() {

   
   char nyuadnsips[MAX_SIZE]="D:\\Dnsips.txt";
   char dns[MAX_SIZE];
   char primernetsh[MAX_SIZE];
   char cadena1[MAX_SIZE];
   char cadena2[MAX_SIZE];
   char cadena3[MAX_SIZE];
   char cadena4[MAX_SIZE];
   char ping1[MAX_SIZE];
   char ping2[MAX_SIZE];
   char ping3[MAX_SIZE];
   char ping4[MAX_SIZE];
   

   printf("\n");
   nyuarchivo1(nyuadnsips);
   printf("\n");
   adns(dns, primernetsh);
   ccpings(cadena1, cadena2, cadena3, cadena4, ping1, ping2, ping3, ping4);

   return 0;
}

Estoy buscando el archivo temporal en C: Windows Temp pero no me sale ningun archivo creado con el nombre temporal quisiera saber, ¿Mi codigo es correcto?, ¿Hay algo mal en la funcion ccpings, que haga que no se cree el archivo temporal?
3  Programación / Programación C/C++ / sentencia switch en: 27 Septiembre 2024, 18:21 pm
Hola

tengo el siguiente codigo:


int main(void) {

   int numero;
   numero = 0;

   char nyu[MAX_SIZE]="D:\\producto2.txt"; //esta es la cadena donde guardaremos la ubicación y nombre del archivo
                                           //debido a que le daremos esa información concreta, "hay que iniciarla" 

   printf("A continuación se mostraran diferentes opciones, cada una hace una cosa diferente \n");
   printf("Opción 1: Insertar la hora y la fecha en el documento de salida: producto2.txt \n");
   printf("Opción 2: Comprobar e informar por pantalla sobre cuáles de una lista de máquinas referenciadas por su IP escrita en un archivo de texto, contestan positivamente a un ping lanzado por la aplicación que estás programando \n");
   printf("Opción 3: Mostrar y guardar en un fichero llamado adaptador.txt, la configuración de red de la máquina local para un adaptador que previamente se preguntará al usuario \n");

   printf("Selecciona una opción : \n");
   
   if(scanf("%d", &numero) != 1) {
   
      printf("ERROR: Programa mal escrito\n");
      
      return 0;
   
   }

   switch(numero){

   case 1:

      printf("A continuación, se creara un archivo, para ello se te pedira el nombre y la ubicación  \n \n");

      printf("Introduce el nombre y la ubicación del archivo \n");

   

   break;



   }

   

   return 0;

}

Mi pregunta es ¿Por que si en vez de tener el código como lo tengo, pongo: (scanf("%d", &numero), me dice que le falta un argumento,

¿switch requiere de if?
4  Programación / Programación C/C++ / Opinion en: 16 Julio 2024, 18:56 pm
Buenas tardes estoy haciendo este programa que deberia:


Preguntar el nombre y la ruta del archivo dnsips.txt y mostrar  el contenido de este archivo por pantalla.

Preguntar al usuario el adaptador de red que quiere modificar y mostrar los servidores DNS configurados en este.

y me gustaria conocer vuestras opiniones y sugerencias


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


#define MAX_SIZE 130



void nombreyubicacion();
void adaptador();

void nombreyubicacion() {
   
    char archivo[MAX_SIZE];

    printf("Introduce el nombre que tendra tu archivo Y el buffer en el que se almacenara: \n\n");

    if (fgets(archivo, MAX_SIZE, stdin) != NULL) {
   
        size_t len = strlen(archivo);
       
        if (len > 0 && archivo[len - 1] == '\n') {
       
            archivo[len - 1] = '\0';
       
        }

        printf("B\n\n");
    }

    FILE* descargado = fopen(archivo, "r");
 
    if (descargado == NULL) {
   
        printf("A\n");
       
        return;
   
    }

   int c;

   while ((c = fgetc(descargado)) != EOF) {
   
      putchar(c);
   
   }

   fclose(descargado);
}

void adaptador() {

    char adaptador[MAX_SIZE];

    system("ipconfig");

    printf("Escribe el nombre del adaptador de red que vas a modificar: \n\n");

    if (fgets(adaptador, MAX_SIZE, stdin) != NULL) {
     
        size_t len = strlen(adaptador);

        if (len > 0 && adaptador[len - 1] == '\n') {

            adaptador[len - 1] = '\0';
        }

        printf("Adaptador de red introducido: %s\n", adaptador);
    }
    else {

        printf("B\n");

    }
}


int main() {

   

   nombreyubicacion();
 
    adaptador();

    return 0;
   
5  Programación / Programación C/C++ / Re: Funcion en C que pide al usuario un numero introducido por pantalla en: 11 Julio 2024, 12:30 pm
Entonces ¿dentro del int main hago un int variable = valor devuelto del scanf ?

6  Programación / Programación C/C++ / Re: Funcion en C que pide al usuario un numero introducido por pantalla en: 9 Julio 2024, 13:20 pm
entonces le añado a la funcion una amnera de verificar si guardo el dato?
7  Programación / Programación C/C++ / Re: Funcion en C que pide al usuario un numero introducido por pantalla en: 7 Julio 2024, 18:17 pm
Dumy: no pruebes eso, scanf tiene que cambiar el valor de la variable numero y necesita que la pases por referencia como hiciste y no por valor. En el primer enlace lo dice claramente, se ve que Daniel no lo leyo o no lo entiende.

Y como dice EdePC pega el mensaje exacto ... con el nivel 4 de advertencias sale C4189 (variable local inicializada pero no referenciada, simplemente que no usas num posteriormente a asignarle el resultado de pedir_numero).


Me sale una advertencia

Este  es el mensaje que em da el visual estudio, el código es C6031:
Advertencia   C6031   Se omitió el valor devuelto: 'scanf'.   verano7   C:\Users\Siseo\source\repos\verano7\pruebacodigodesarrolladoenotraaplicaiconc.cpp   33      
8  Programación / Programación C/C++ / Funcion en C que pide al usuario un numero introducido por pantalla en: 5 Julio 2024, 12:00 pm
Buenos días estoy intentando hacer una función que pida al usuario ingresar un numero por pantalla, pero Visual estudio me dice que se omite el valor  devuelto scanf,

Esta es la función:

int pedir_numero() {

    int numero;

    printf("dime un numero: ");
    scanf("%d", &numero);

    return numero;

}

y este es el código al completo:


#define _CRT_SECURE_NO_WARNINGS

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

void cotorreo();
int pedir_numero();
void fechayhora();

void cotorreo() {

    printf("En este programa hay 3 opciones diferentes que se detallan a continuación, para acceder a ellas, se te pedira un numero que tiene que estar entre el 1 y el 3, introducelo \n \n");

    printf("Opción 1: Insertar la fecha y la hora en el documento de salida: producto2.txt \n \n");
    printf("Opción 2: Comprobar e informar por pantalla sobre cuáles de una lista de máquinas referenciadas por su IP escrita en un archivo de texto, contestan positivamente a un ping lanzado por la aplicación que estás programando. Se recomienda generar un submenú donde se solicite el nombre y ubicación de dicho archivo. \n \n");
    printf("Opción 3: Mostrar y guardar en un fichero llamado adaptador.txt, la configuración de red de la máquina local para un adaptador que previamente se preguntará al usuario \n \n");

}

int pedir_numero() {

    int numero;

    printf("dime un numero: ");
    scanf("%d", &numero);

    return numero;

}

void fechayhora() {

    time_t t = time(NULL);
    struct tm tm = *localtime(&t);

}



int main(void) {


    cotorreo();
    int num = pedir_numero();
    fechayhora();

    return 0;

}


Sospecho que la razón es un error lógico, probablemente que le falte algo a al función, pero e probado diferentes soluciones como añadir punteros, iniciar el valor etc. y me sigue apareciendo, ¿Alguien puede decirme el error?


9  Programación / Programación C/C++ / Algoritmo de numeros compuestos en: 14 Noviembre 2023, 23:31 pm
Hola de nyevo:

Estoy intentando codificar en C este algoritmo:


      
Código:
algoritmo  BuscaDivisoresMultiplicadosIgualesNumero
            var
                        num, divisor1, divisor2, divisor3: entero;
            fvar


            num := leerEntero( );

            mientras  (num ≠ -1) hacer    
                        buscadivisor1(num, divisor1, divisor2,divisor3);  

                        si loEs(num, divisor1, divisor2,divisor3)  entonces
                                          printaExito(num, divisor1, divisor2,divisor3

                        sino
                                          printaFracaso(num);

                         fsi  


                         num := leerEntero( );

            fmientras


       falgoritmo
 

      accion printaExito( ent a: entero, ent b: entero, ent c: entero, ent d: entero )


                  escribirCadena(‘El número: ‘);
                  escribirEntero(a);

                  escribirCadena(‘ es igual a  ‘);

                  escribirEntero(b);

                  escribirCadena(‘ multiplicado por  ‘);

                  escribirEntero(c);  

                  escribirCadena(‘ y por ‘);

                  escribirEntero(d);  

            fsi        

      faccion


      accion printaFracaso(ent a: entero)
            escribirCadena(‘El número: ‘);
            escribirEntero(a);
            escribirCadena(‘ no tiene divisores diferentes de 1 que multiplicados sean igual a el. ‘);
      faccion


      funcion loEs(ent x: entero,ent y:entero,ent z: entero, ent w: entero): booleano;

                        retorna x = (y * z * w);            
      ffuncion


      accion buscadivisor1(ent n: entero, sal d1: entero, sal d2: entero, sal d3: entero )
            var

                   encontrado: booleano;
            fvar

            encontrado:=falso;

            d1:=2;

            d2:=2;

            d3:=2;

            mientras  d1<=(n div 2) y no encontrado  hacer
                  buscadivisor2 (n,d1,d2,d3);
                  encontrado:= loEs (n,d1,d2,d3);

                   si   no encontrado  entonces

                           d1:=d1+1;

                   fsi  
            fmientras
      faccion
 

      accion buscadivisor2( ent num: entero, ent d1: entero, sal d2: entero, sal d3: entero  )

            var

                   encontrado: booleano;
            fvar

            encontrado:=falso;

            d2:=2;

            d3:=2;

            mientras  d2 <= (num div 2) y no encontrado  hacer
                  buscadivisor3(num,d1,d2,d3);  

                 encontrado:= loEs (num,d1,d2,d3);
                  si no encontrado  entonces
                        d2:=d2+1;
                  fsi      
            fmientras
      faccion

 

      accion buscadivisor3( ent num: entero, ent d1: entero, sal d2: entero, sal d3: entero  )

            var

                   encontrado: booleano;
            fvar

            encontrado:=falso;

            d3:=2;

            mientras  d3 <= (num div 2) y no encontrado  hacer

                 encontrado:= loEs (num,d1,d2,d3);
                  si no encontrado  entonces
                        d3:=d3+1;
                  fsi      
            fmientras
      faccion

Tengo la teoria de que en la prkmera oarte hay que yacer un bucle while que busque divisores, lo de printar  las cadenas  eso lo tengo solucionado, pero lo qye desconozco es como codificar el resto, el resultado, deberia dar un programa el cual te muestra 3 numeros que multiplicados entre si dan el numero introducido

¿Alguien puede ayudarme a codificar el algoritmo?
10  Programación / Programación C/C++ / Re: Contador en: 14 Noviembre 2023, 20:55 pm
Hola gracuas por responder, esa parte la solucione, ahora lo que tengo es problemas de entender oarametro de entrada y salida es una funcion
Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines