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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 ... 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [45] 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ... 102
441  Programación / Programación C/C++ / Re: Unir dos matrices en una matriz mas grande en c en: 3 Diciembre 2019, 16:39 pm
El problema está en la línea 256.
Estás accediendo fuera de los límites de matriz1 al empezar el bucle con o = 5.
Además esa función es muy ineficiente...
442  Media / Multimedia / Re: Problema para reproducir vídeos de disco duro en tv en: 1 Diciembre 2019, 06:30 am
Por ejemplo, Samsung TV tiene una pobre compatibilidad con Dolby True Audio y DTS Audio, y si estos códecs de audio están presente en el archivo MKV, no pueden ser reproducidos en el Samsung TV.
Por lo tanto creo que tu problema esta en el codec de vídeo. El vídeo se habrá comprimido en un codec que tu televisor no puede comprender. Por lo tanto no puede descomprimirlo y reproducirlo en tiempo real.

Prueba a pasar cualquier vídeo con otro tipo de codec, a ver si funciona. Pero igualmente es tontería, si pasándolo a mp4 te da la solución, al fin y al cabo estas haciendo lo mismo, convertir.

De todas maneras estaría bien saber si funciona pasandolo a otro codec. Y por si acaso mira la velocidad de bits y la tasa de fotogramas en detalles, en propiedades de algún vídeo que tengas que no se reproduce con el formato mkv. Mira que no sobrepase el máximo que soporta tu TV.

Un saludo.
Supongo que te referías al codec de audio en el segundo párrafo. Las propiedades de vídeo las puse en el primer mensaje y tengo vídeos con el mismo codec de vídeo que sí se reproducen.
No sabía si podía deberse al codec de audio ya que imaginaba que en caso de tener problemas, no se oiría pero la imagen sí se vería...
He estado mirando el resto de propiedades de los vídeos que sí puedo reproducir y los que no y de momento he visto que los que no puedo reproducir tienen codec de audio: MPEG-1 Layer 3 (MP3) y los que sí se reproducen tienen otros como por ejemplo MPEG-4 por lo que estoy probando a cambiar el codec de audio a ver si el problema estaba ahí.
También he notado que estos vídeos que no puedo reproducir son los únicos que tienen una tasa de 25 fps mientras que los que sí puedo reproducir tienen una tasa de 24 fps. Probaré también a reducir los fps a ver si funciona.
La tasa de bits no puedo compararla ya que me aparece como N/D...

Y es cierto que pudiendo convertir los vídeos a mp4, ya puedo reproducirlos pero voy a intentar descubrir cuál era el problema. Cuando tenga algunos resultados, los comentaré por si hay algún interesado.

Gracias.
443  Programación / Programación C/C++ / Re: ayuda con programa con arreglos porfa en: 29 Noviembre 2019, 05:25 am
Utiliza las etiquetas de Código GeSHi para poner el código. Tienes una lista desplegable que se llama "Código GeSHi" encima del cuadro de texto para elegir el lenguaje...

No sé exactamente qué entradas le das y qué salidas obtienes así que te comento cosas que puedes mejorar:
  • No utilices la cabecera <conio.h>. No es estándar por lo que hay sistemas operativos e IDEs que no pueden trabajar con ella.
  • Utiliza constantes para definir los tamaños. Así podrás en cualquier momento cambiar el tamaño del problema sin tener que tocar todo el código. Además veo que los nombres están compuestos de 2 caracteres.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. // Definicion de constantes
  6. #define NUMERO_ALUMNOS 4 // Sin = y sin ;
  7. #define SIZE_ALUMNO 20 // Nombres de 2 caracteres me parece un poco escaso pero si es tu caso, pues pones 2
  8. #define NUMERO_NOTAS 2 // El numero de filas no lo definimos porque parece que siempre sera el mismo que NUMERO_ALUMNOS

  • Utiliza las constantes para crear los arrays y para los bucles. Así al cambiar algún valor de las constantes, el programa se adaptará solo.
Código
  1. int main(){
  2.    char alumnos[NUMERO_ALUMNOS][SIZE_ALUMNO];
  3.    float notas[NUMERO_ALUMNOS][NUMERO_NOTAS];
  4.    //...
  5.    for(int i = 0; i < NUMERO_ALUMNOS; ++i){
  6.        //...
  7.    }
  8. }

  • Para pedir cadenas de caracteres, utiliza la función fgets() mejor que gets().
Código
  1. char alumnos[NUMERO_ALUMNOS][SIZE_ALUMNO];
  2. for(int i = 0; i < NUMERO_ALUMNOS; ++i){
  3.    printf("Introduce el nombre %d: ", i+1);
  4.    fgets(alumnos[i], SIZE_ALUMNOS, stdin);
  5. }

  • Para pedir las notas usas una función que parece que va a devolver un float pero acaba devolviendo un char. Creo que ahí tienes el problema. De todas maneras para pedir valores numéricos puedes usar scanf() de manera más sencilla.
Código
  1. float notas[NUMERO_ALUMNOS][NUMERO_NOTAS];
  2. for(int i = 0; i < NUMERO_ALUMNOS; ++i){
  3.    for(int j = 0; j < NUMERO_NOTAS; ++j){
  4.        printf("Introduce la nota %d para el alumno %d: ", j+1, i+1);
  5.        scanf("%f", &notas[i][j]);
  6.    }
  7. }

  • Para calcular la suma, estás sumando 2 veces cada nota. Es mejor que primero pidas las notas y luego en un bucle calculas la media aunque no tienes dónde guardarla. Si guardas la primera media en <prom> y tienes 2 alumnos o más, el siguiente modificará el valor de <prom> y el siguiente y el siguiente y al final tendrá la media del último alumno sólo. Tendrías que calcular la media justo antes de mostrarla para poder utilizar la variable o sino crear otro array para guardar las medias de cada alumno.
Código
  1. float medias[NUMERO_ALUMNOS] = {0}; // pone todas las posiciones a 0
  2. for(int i = 0; i < NUMERO_ALUMNOS; ++i){
  3.    for(int j = 0; j < NUMERO_NOTAS; ++j)
  4.        medias[i] += notas[i][j];
  5.    medias[i] /= NUMERO_NOTAS;
  6. }

  • Si quieres mostrar la suma de las notas también debes hacer lo mismo que en el paso anterior. O bien calculas cada suma justo antes de mostrarla o creas otro array para las sumas. Esto te lo dejo a ti y si tienes problemas, coloca tu código en el mensaje (entre etiquetas) y a ser posible una explicación del problema para poder ayudarte.
  • Automatiza todo el proceso de mostrar los resultados con dos bucles para que puedas mostrar diferentes cantidades de notas y de alumnos. Inténtalo también y si tienes problemas pues lo mismo.
444  Media / Multimedia / Re: Problema para reproducir vídeos de disco duro en tv en: 29 Noviembre 2019, 01:43 am
Es más fácil si nos dices que televisión tienes para ver la documentación de la televisión.
La televisión es una Samsung J5200. He intentado buscar información acerca de los formatos que admite y he encontrado la siguiente página de Samsung: https://www.samsung.com/ar/support/tv-audio-video/samsung-smart-tv-video-formats-admitted-in-samsung-smart-tv/
No sé si esa tabla es igual para todos los modelos ya que no he encontrado nada sobre este modelo específicamente...

Buenas,

Has probado a convertir esos vídeos de mkv a mp4, a ver si de esa forma se ve?

Saludos.
Acabo de convertir el vídeo a mp4 mediante VLC y la televisión sí ha sido capaz de reproducirlo en este formato.

Sin embargo, son muchos vídeos los que tengo en .mkv (porque hasta ahora sí había podido reproducirlos) y no me gustaría tener que convertirlos todos a mp4... No sé si hay alguna otra solución o alguna forma de saber qué vídeos en .mkv sí puede reproducir y cuáles no.

De todas formas, muchas gracias por la alternativa y aprovecho para dar las gracias a todos los que han intervenido también.
445  Media / Multimedia / Re: Problema para reproducir vídeos de disco duro en tv en: 28 Noviembre 2019, 15:00 pm
Sí, lo he comprobado. Mi tv reproduce los vídeos (que yo haya probado) en avi, mkv y mp4; y estos vídeos con los que tengo problemas están en mkv.
446  Media / Multimedia / Problema para reproducir vídeos de disco duro en tv en: 28 Noviembre 2019, 00:04 am
Buenas, me ha surgido un problema y ya adelanto que no tengo muchos conocimientos sobre este tema... :rolleyes:
Tengo una serie de vídeos guardados en el disco duro que puedo reproducir sin problemas en el ordenador. El problema viene cuando los conecto por USB a la tv e intento reproducirlos en ella.
Me he fijado en las propiedades de vídeo y son las siguientes:
  • Dimensiones: 1280 x 720
  • Códec: H.264 (Main Profile)
  • Tasa fotogramas: 25 fotogramas/s
  • Tasa bits: N/D
Me comentaron que podía ser por el códec, que igual la tv no era capaz de reproducirlo pero he visto otros vídeos que sí puedo reproducir en ella y tienen el mismo códec. También he podido reproducir vídeos con las mismas dimensiones y no sé si puede estar relacionado con esas tasas... :-\
No sé si alguien puede ayudarme o si es necesario que aporte más información.
447  Programación / Programación C/C++ / Re: ayuda rellenar ficheros C en: 27 Noviembre 2019, 14:14 pm
Bueno, te dejo aquí un ejemplo:
Código
  1. #define SIZE 100
  2. int main(){
  3.    char frase[SIZE];
  4.    FILE *fichero = fopen("clientes.txt", "a"); // el segundo parametro = a -> agrega texto al final / = w -> borra lo que hay y agrega el nuevo texto
  5.  
  6.    printf("Introduce una frase: ");
  7.    fgets(frase, SIZE, stdin); // las cadenas se guardan con fgets()
  8.  
  9.    fprintf(fichero, "%s", frase); // agrega una linea al final del fichero con la cadena guardada en frase
  10.  
  11.    fclose(fichero);
  12. }
Además la función fgets() almacena también el ENTER de la entrada como un salto de línea al final de la cadena, por lo que cada frase se guardará en una línea diferente.
Cuando quieras evitar esto, puedes eliminar el salto de línea de la cadena así:
Código
  1. // Cabecera necesaria para utilizar la funcion strrchr()
  2. #include <string.h>
  3. //...
  4. char *puntero = strrchr(frase, '\0'); // puntero que apunta al '\0' de la frase. El '\0' es siempre el ultimo caracter de una cadena en C
  5. --puntero; // nos movemos una posicion a la izquierda para apuntar al salto de linea '\n' que esta justo antes del '\0'
  6. *puntero = '\0'; // modificamos el '\n' por '\0' para indicar que la cadena termina ahi

Si por el contrario quieres guardar un dato en cada línea de un fichero y el valor no tiene el salto de línea implícito:
Código
  1. int main(){
  2.    int edad;
  3.    FILE *fichero = fopen("edades.txt", "a");
  4.  
  5.    printf("Introduce tu edad: ");
  6.    scanf("%d", &edad);
  7.  
  8.    fprintf(fichero, "%d\n", edad); // Se agrega el salto de linea ahi
  9.  
  10.    fclose(fichero);
  11. }
448  Programación / Programación C/C++ / Re: cadenas y uso de MAYUSCULA en: 26 Noviembre 2019, 19:42 pm
Buscar el ultimo espacio en blanco podria fallar si la frase tiene solo 1 palabra, sin espacio alguno.

Tal vez resulte mejor poner un puntero al final y devolverse hasta llegar o al inicio de la palabra o bien a un espacio en blanco.
Cierto, se podría arreglar así:
Código
  1. char *puntero = strrchr(frase, ' ');
  2. if(puntero == NULL)
  3.    puntero = frase;
La otra manera que comentabas también es posible.
449  Programación / Programación C/C++ / Re: ayuda rellenar ficheros C en: 26 Noviembre 2019, 18:17 pm
Todo depende de cómo te estén dando la información. Tienes que ser más específico...
Revisa la librería <stdio.h> y las funciones que tiene. Avanza algo, lo que puedas, y coloca tus avances entre etiquetas de Código GeSHi para poder ayudarte mejor.
450  Programación / Programación C/C++ / Re: cadenas y uso de MAYUSCULA en: 25 Noviembre 2019, 02:39 am
Las palabras en C se toman en un array de char, o lo que es lo mismo, una cadena de caracteres, un vector. Cada posición de la cadena contiene un caracter, pongamos el típico ejemplo: "hola mundo". Al guardar esto en C quedaría así:
Código
  1. char frase[] = "hola mundo";
  2. // Internamente queda guardado como:
  3. // frase = |'h'|'o'|'l'|'a'|' '|'m'|'u'|'n'|'d'|'o'|'\0'|
El último es un carácter especial que utiliza C para saber donde acaba la cadena. Se pone implícitamente.
Entonces si haces:
Código
  1. printf("%s", frase); // muestra: "hola mundo" sin las comillas
  2. //pero si haces:
  3. printf("%s", frase+5); // muestra: "mundo" sin las comillas porque empieza a mostrar 5 posiciones mas a la derecha

Como puedes usar las funciones que te dije anteriormente, sólo tienes que crear un puntero que como su nombre indica apunta y hacer que apunte al comienzo de la última palabra:
Código
  1. char frase[] = "hola mundo";
  2. char *puntero = strrchr(frase, ' '); // devuelve un puntero apuntando al ultimo espacio de la frase
  3. ++puntero; // incrementas el puntero para que apunte a la primera letra de la palabra
  4. while(*puntero != '\0'){ // mientras no acabe la cadena
  5.    *puntero = toupper(*puntero); // modificas el valor de cada celda por su mayuscula correspondiente
  6.    ++puntero; // sigues avanzando
  7. }

Al final resulta que prácticamente te lo he dado hecho pero me parecía que sino te ibas a liar con lo de punteros, el asterisco, los incrementos, las funciones esas, etc.
El puntero es como una variable que en vez de guardar un valor como tal, guarda una posición de memoria. Para acceder al contenido de dicha posición de memoria se utiliza el asterisco (lo que se conoce como desreferenciar el puntero).
Código
  1. char letra = 'a';
  2. char *puntero = &letra; // el asterisco determina que se trata de un puntero y el & devuelve la direccion de memoria de la variable (letra en este caso)
  3. printf("%d", puntero); // posicion de memoria de la variable letra
  4. printf("%c", *puntero); // contenido de la variable a la que apunta el puntero (letra)

Estoy intentando aclararlo pero cuanto más escriba creo que más complejo lo voy a dejar así que si hay cosas que de momento no entiendes, no te preocupes. Ya irás avanzando en el curso y al final verás como esto es una tontería.

PD: Para pedir valores se suele usar <scanf()> pero si se trata de una cadena, lo recomendable y seguro es hacerlo con <fgets()>:
Código
  1. char cadena[50]; // cadena de longitud maxima 50
  2. printf("Introduce una cadena: ");
  3. fgets(cadena, 50, stdin);
Lo malo de esta función es que también guarda el ENTER que pulsas al final por lo que si introduces "hola", en la cadena se guardaría como:
cadena = |'h'|'o'|'l'|'a'|'\n'|'\0'|
La '\n' determina un salto de línea. Para eliminar eso es muy sencillo ahora que ya te he mostrado como funciona <strrchr()>:
Código
  1. // supongamos que el usuario introduce "hola mundo". La cadena quedaria:
  2. char cadena[] = "hola mundo\n"; // recordemos que siempre acaba en '\0'
  3. char *final = strrchr(cadena, '\0'); // busca el '\0' que siempre va a estar el ultimo
  4. *(--final) = '\0'; // nos vamos una posicion para atras y ponemos el '\0' ahi para eliminar el '\n'
Páginas: 1 ... 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [45] 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines