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ú

Mensajes - K-YreX

#871
Windows / Restaurar Windows 10
29 Noviembre 2018, 23:17 PM
Estoy usando un laptop nuevo que tiene Windows 10 preinstalado y posiblemente más adelante instale alguna distribución GNU/Linux. Entonces para prevenir he pensado en crear una unidad usb con la que poder recuperar el sistema tal y como está ahora. Me he puesto a investigar ya que es algo que nunca he hecho y me he encontrado con varias opciones; una de ellas es crear una unidad de recuperación (que por lo que he entendido sirve para poder arrancar en caso de error del sistema operativo), también he leído que si al hacer la unidad de recuperación seleccionas la opción de "crear copia de seguridad de los archivos del sistema en la unidad de recuperación" se puede volver a instalar el sistema operativo a partir de esa copia. En cambio en otros sitios he leído que lo que hay que hacer es crear una imagen del sistema (pero para esta opción no me deja seleccionar el usb).

Mi objetivo es tener un usb desde el que poder reinstalar el sistema operativo de Windows tal y como está ahora. El problema es que no sé si para lo que yo quiero conseguir tengo que crear una unidad de recuperación o una imagen del sistema.
Gracias a quien pueda guiarme un poco en esto. :-X

PD: Si creo el usb y después reinstalo el sistema, mantengo la licencia de Windows?
#872
El cuerpo del <if> está vacío, es decir que no sé cual es el propósito de la función. Además de eso declaras:
Código (cpp) [Seleccionar]

unsigned char Validar;
static const char *Valida = ".com";

Y no veo el uso de ninguna de las dos variables en toda la  función.

Si lo que no entiendes del código es el uso de la función <strchr> puedes buscar por internet y hay muchas páginas donde te explican lo que hace esa función. La función <strchr(cadena, caracter)> devuelve un puntero a la posición de <cadena> donde aparece <caracter> y si no aparece devuelve el final de cadena. Entonces en ese código compruebas que correo tenga '@'.

Tampoco sé a que llamas tú validar un correo. Entonces eres tú quien tiene que decidir que cosas tiene que tener un correo para que sea válido e implementarlas en una función.
#873
Una opción es que uses memoria dinámica y entonces puedes pasar como parámetro un doble puntero. Sin embargo si no has dado memoria dinámica lo que se suele hacer para casos de estos es declarar una matriz más grande de lo necesaria.

const int TAM = 100;

void mostrarMatriz(int[][TAM], int, int);

int main(){
   int matriz[TAM][TAM];
   int fila = 10, col = 10;

   mostrarMatriz(matriz, fila, col);
}

void mostrarMatriz(int matriz[][TAM], int fila, int col){
   for(int i = 0; i < fila; i++){
       for(int j = 0; j < col; j++)
           printf("%d  ", matriz[i][j]);
       printf("\n");
   }
}


Es un desperdicio de memoria pero recuerdo que cuando yo estudiaba los temas de arrays n-dimensionales sin memoria dinámica siempre se hacía así. Creas un tamaño inicial más grande de lo necesario y con otra u otras variables indicas cuál es la parte útil.

Espero que te sirva.

PD: Si prefieres usar memoria dinámica y quieres que te ayude con eso coméntamelo.
#874
Programación C/C++ / Re: Resolver C++
27 Noviembre 2018, 19:23 PM
Como comprenderás el foro no está para que te hagamos la tarea.
Te recomiendo que comentes lo que entiendes tú de ese código y te podremos ayudar a entenderlo y resolverlo.
#875
Te mostré como se hacía esto en el tema que iniciaste anterior a este... :silbar:
#876
Temas a tratar:
- El código siempre entre etiquetas GeSHi. Puedes seleccionarlas encima del cuadro de texto cuando estás escribiendo un mensaje.
- Lo de no usar <conio.h> ya te lo han comentado. Sustituye <getche()> por <getchar()> y adiós <conio.h>.

- La función <registro()> devuelve un <float>. No tiene ningún sentido si siempre va a devolver 0. Si quieres modificar un <Usuario> o haces que <registro()> devuelva un Usuario y se lo asignas a un Usuario en el <main> o pasas un <Usuario> por referencia para poder modificarlo y que los cambios se guarden.
- No sé si programas en C usando <iostream> o programas en C++ usando <gets>. Si estás con C++ usa un <string> para el nombre y <cin> para las entradas de datos. Si es C y tienes que usar <gets>, usa <fgets>.
Código (cpp) [Seleccionar]

void registro(Usuario &user){
    cout << "Nombre: ";
    fgets(user.nombre, 100, stdin);
    cout << "Edad: ";
    scanf("%d", &user.edad);
    cout << "Registrado Usuario: " << user.nombre << " Edad: " << user.edad << endl;
}

En este trozo de código te dejo la respuesta a como concatenar variables con cadenas de texto usando <cout>.

- El uso de <while> no es este. <while> se usa para un bucle que se repite. Lo que tú quieres usar aquí es un simple <if>.
Código (cpp) [Seleccionar]

while(res == 'N' || res == 'n'){
cout<<"\n\nOk, que tenga un buen dia.";
return 0;

// Forma correcta
if(res == 'N' || res == 'n')
    // todo lo demas
}


- En el caso de que la respuesta sea <S> más de lo mismo, se utiliza un <if> no un <while>. En tu caso con el <if> cuando hayas elegido una opción te pedirá otra y otra y otra y otra. Aunque bueno sólo tienes definida la primera opción (imagino que el resto no lo has puesto por no hacer el código más largo :silbar:)

- No uses <if> para comprobar las opciones. Usa un <switch>.
Código (cpp) [Seleccionar]

switch(opcion){
    case 1:
        // lo que sea si la opcion es 1
        break;
    case 2:
        // lo que sea si la opcion es 2
        break;
    // asi con todas las opciones que tengas y finalmente
    default:
        // lo que sea si la opcion no es ninguna de las anteriores
        break; // este es opcional
}


- Además y si a la primera pregunta no se responde ni <N> ni <S>? :huh:. Se sale también pues entonces haz que si la respuesta es <S> se ejecute el resto del programa y sino, <else>, se salga y no uses tanto <if>.

- Siguiente trozo de código.
Código (cpp) [Seleccionar]

if(opcion == 1);{
cout<<"\nUsted quiere ver la de Venom..."<<endl;
if(regis.edad<18){
cout<<"Lo siento pero no puedes verla, esta bien grotesca para alguien como usted"<<endl;
}
else{
cout<<"Perfecto, son $40"<<endl;
}
return 0;
}

- El punto y coma que va después del <if> de fuera sobra.
- El problema de la edad ya está arreglado con el cambio que he hecho a la función <registro()>.
- Concatenar el valor de la constante ya te lo he mostrado también.
- Hacer un descuento?? Pues vaya complicación.
Código (cpp) [Seleccionar]

else
    cobrar();
// el resto del programa

// funcion cobrar()
void cobrar(){
    const double DESCUENTO = 0.5;
    double precio = PRECIO; // PRECIO yo lo pondría <double> por si no es un entero.
    char respuesta;
    cout << "Eres estudiante (s/n)? ";
    respuesta = getchar();
    if(respuesta == 'S' || respuesta == 's')
        precio *= DESCUENTO;
    cout << "Perfecto, son $" << precio << endl;
}

- Y una vez se ha elegido pagado, te echa del sistema con un <return> así que el <while> de antes para meter varios usuarios ha quedado inservible. Más vale que nadie quiera ver la de Venom porque sino el siguiente que venga se encuentra con el sistema caído y se queda sin peli.

- Hasta aquí todo bien, bueno contando todos estos fallos...
- Pero ahora, si la opción es 1 destruimos el sistema y si no es 1: creamos un usuario nuevo (y al anterior que le den por no saber elegir), creamos unas variables nuevas con el nombre de las viejas pero encima con los tipos cambiados. Una pena ya que iba a molar mucho que si el primero dice que quiere comprar un boleto y la máquina le echa por elegir mal el siguiente que venga compra sí o sí gracias al <while> (debe de ser una medida para recaudar más boletos ;-)).

- Y ya después de confundir un poco al compilador y hacer que se enfade y nos escupa unos cuantos errores llegaríamos al final. Una pena que nunca lleguemos al final ya que el programa nunca llega a compilar. Aunque han usado medidas para vender más boletos al final si no funciona la máquina se quedan sin vender ninguno... :-\

Ya tienes corregidos los errores pequeños y unas cuantas y repito, CUANTAS, recomendaciones para que ese código funcione mejor sólo te queda arreglar la función principal para que funcione. Vaya así dicho parece como si mi esfuerzo no hubiese servido de nada...  :-(

PD: No había visto el <getch()> del final. Cambialo por <cin.get()> y manda a <conio.h> al quinto...
Código (cpp) [Seleccionar]
conio :silbar:
#877
Programación C/C++ / Re: Por favor, ayuda
25 Noviembre 2018, 13:50 PM
No. Tienes que modificar el mensaje y donde pone "Código GeSHi" despliegas el menú y eliges C y te saldrán dos etiquetas entre corchetes [ ].
Tienes que poner tu código entre los corchetes, es decir, [...] <tu código> [...].
Puedes darle a previsualizar para ver como ha quedado y el código tiene que quedar así:

// tu codigo
#878
Programación C/C++ / Re: Por favor, ayuda
25 Noviembre 2018, 13:44 PM
Modifica el mensaje y mete el código entre etiquetas GeSHi para que podamos verlo bien.
#879
Programación C/C++ / Re: Ayuda con programa
25 Noviembre 2018, 13:43 PM
Lo primero que no sé que idea tienes en la cabeza entonces no sé por qué haces algunas de las cosas que haces:
- El prototipo de la función <abrir()> no tiene parámetros, pero la definición de la función <abrir()> tiene un parámetro de tipo <int>. :huh:
- La función <menu()> está casi bien. Si la opción es 0 cambias el valor a una variable de tipo bool que no sé cual es su utilidad.  :huh:
- Además según tú, la función <abrir()> devuelve un valor de tipo <int> y tu función no devuelve nada. :huh:
- En la función <abrir()> compruebas que la variable <modo> sea 1 pero la variable <modo> no está inicializada.  :huh: Ahí lo único que tendría un poco de sentido sería que en vez de <modo == 1> quieras hacer <menu == 1>. Pero tienes que corregirlo.
- Y por último en todo el programa no llamas a la función <abrir()>  :huh:
#880
Programación C/C++ / Duda cstdlib y srand (C++)
25 Noviembre 2018, 07:33 AM
Esto puede parecer una tontería ya que no tiene mucha complicación usar la librería de C++ <cstdlib> y las funciones <srand> y <rand> para generar números aleatorios. Pero qué pasa si no usas <cstdlib> o usas la función <time()> sin incluir <ctime>?? :huh:
Estaba haciendo un programa en el que iba a generar unos números aleatorios pero se me ha olvidado incluir tanto la librería <cstdlib> como la función <srand> es decir que únicamente he usado la función <rand> sin más... Y el programa ha funcionado. :o
Me he puesto a hacer pruebas y os dejo los resultados (compilado desde Ubuntu 18.04 con g++ <programa.cpp> -o <programa>):
Código (cpp) [Seleccionar]

#include <iostream>
#include <list>

using namespace std;

int main(){
const int MAX_ELEMENTS = 10;
const int LIMIT_INF = 0, LIMIT_SUP = 5;

list<int> myList;

for(size_t i = 0; i < MAX_ELEMENTS; i++)
myList.push_back(LIMIT_INF + rand() % (LIMIT_SUP - LIMIT_INF + 1));

for(auto it = myList.cbegin(); it != myList.cend(); it++)
cout << *it << "  ";
cout << endl;
}


Con este código compila el programa sin errores ni warnings pero sí es cierto que los números son siempre los mismos (lógico por no usar srand).

Entonces he probado a incluir la semilla sin nada más, es decir, como se ve aquí:
Código (cpp) [Seleccionar]

#include <iostream>
#include <list>

using namespace std;

int main(){
const int MAX_ELEMENTS = 10;
const int LIMIT_INF = 0, LIMIT_SUP = 5;

list<int> myList;

srand(time(NULL));

for(size_t i = 0; i < MAX_ELEMENTS; i++)
myList.push_back(LIMIT_INF + rand() % (LIMIT_SUP - LIMIT_INF + 1));

for(auto it = myList.cbegin(); it != myList.cend(); it++)
cout << *it << "  ";
cout << endl;
}

Y ahora tengo un programa que compila sin errores ni warnings y que genera los números aleatorios distintos cada vez que se ejecuta el programa (sin compilarlo antes de cada ejecución). ;-)
También si os dais cuenta tampoco he incluido <ctime> para usar la función <time()>. :silbar:
He estado investigando <iostream> por si incluía <cstdlib> pero no he encontrado nada. Lo de usar <list> es simplemente porque era lo que estaba usando cuando me he dado cuenta de esto y no he querido quitarlo por si tenía algo que ver con la respuesta aunque tampoco he encontrado nada al respecto.