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 - eferion

#951
Cita de: edr89 en 13 Septiembre 2013, 09:11 AM
Se deben inicializar las variables al crear una estructura?, si a x,y les doy el valor de cero el compilador me da error, hay algun problema si no inicializo el arreglo nombre y las variables enteras?

A ver, si por inicializarlas te refieres a algo tal que:


typedef struct coordinate
{
  char nombre[15];
  int x = 0,y = 0;
}coordinate;


Pues no va a funcionar porque ahí estás definiendo el formato de la estructura, pero no estás reservando memoria para su uso.

Sin embargo cuando sí puedes inicializarla es una vez hayas creado alguna instancia de dicha estructura:


void func( )
{
  coordinate estructura;
  *estructura.nombre = 0;
  estructura.x= 0;
  estructura.y= 0;

  // ...
}


Los beneficios de inicializar las variables es que así garantizas que tienen valores válidos... esto es especialmente importante con punteros.

Cita de: edr89 en 13 Septiembre 2013, 09:11 AM
La sentencia typedef esta bien dentro de main? o debo declarar la estructura fuera como prototipo?

Lo lógico y normal es declarar las estructuras fuera de las funciones, de esta forma puedes utilizar dicha estructura desde cualquier parte del código simplemente poniendo el include correspondiente.

Además poniendo las estructuras fuera de las funciones consigues un código más legible.
#952
Programación C/C++ / Re: ejercicio de pozos ayuda
13 Septiembre 2013, 08:29 AM

int main( int argc, char** argv )
{
  // Tu codigo aqui
}


La chicha de este ejercicio es leer un archivo de texto y procesarlo, ya que en él se encuentra toda la información que necesitas.

Una vez lo has procesado y has almacenado todo en variables toca hacer sumas, resta, divisiones y comparaciones para calcular lo que te piden.


#953
Cita de: arthu16 en 12 Septiembre 2013, 17:55 PM
y por cierto si que trabajo con memoria dinamica, las matrices para los numeros estan hechas con memoria dinamica con valores de n+1, dado que n=5.

Si trabajas con vectores y estos no son de caracteres no es necesario hacer n+1. Eso solo pasa con los caracteres y es porque las funciones de c interpretan que una cadena de caracteres termina cuando encuentran un caracter nulo, luego para que entre ese caracter nulo necesitas n+1 huecos mínimo en el vector.

en tu caso si trabajas con matrices dinamicas necesitas, en primer lugar definir la cantidad de cadenas que tienes en este caso 5... y luego para cada una de esas 5 tienes que reservar memoria para poder almacenar las cadenas.

En cuanto al desarrollo, pues varía de si empleas o no estructuras.

Cita de: arthu16 en 12 Septiembre 2013, 17:48 PM
podrias decirme que funcion en c realiza eso?
Gracias.

strtok.

Cita de: arthu16 en 12 Septiembre 2013, 17:48 PM
creo que lo de los numeros, si supiese la funcion, seria simplemente con dos bucles for uno con i y otro con j por ejemplo y recorrer la matriz de datos entera poniendolos en su sitio, me equivoco?

Si vas línea a línea te sobra el segundo bucle e incluso te podrías permitir el lujo ( y sana costumbre de paso ) de crear una función específica que procesase línea a línea las secuencias de números y los colocase en su sitio.
#954
Cita de: sora_ori en 12 Septiembre 2013, 16:46 PM
No he podido arreglarlo  :-\

Lo más normal en cualquier tipo de aplicación es que le des la oportunidad al usuario de rectificar un dato que ha metido ( por si le da por equivocarse ).

Si tu en vez del scanf pones un getch o similar el usuario no puede rectificar su entrada y eso suele causar muy mala impresión en un programa.
#955
el scanf espera a que se pulse el enter.

Si quieres que no espere, usa getch ... pero mírate la interfaz que no es la que estabas usando al principio:

getch("%c", &otroProducto); // Esto esta mal
#956
Las variables no se inicializan solas en c.

Tienes que darles tu un valor inicial.

tu tienes seguramente un 'int acumulado;', pero cuando el programa reservan memoria para ese int no la 'limpia' y en consecuencia puede tener cualquier valor.

si quieres que sume bien prueba a hacer:

int acumulado = 0;

Es una buena práctica inicalizar TODAS las variables que uses en tu programa... puede que en un principio algunas no sea necesario inicializarlas... pero luego el programa cambia y eso te puede dar problemas.
#957
Echa un vistazo a opencv.

Tiene multitud de métodos y algoritmos de reconocimiento de patrones.
#958
No se hacen tareas... se resuelven dudas. Por este motivo no te voy a poner una sola línea de código.

Una vez has leído el 5, ya deberías saber que en la siguiente línea te vas a encontrar 5 ciudades. Dado que no creo que trabajes con memoria dinámica me ahorro los pormenores.

Presupongo que las ciudades están delimitadas por espacios o saltos de línea... facil, lee toda la línea y trocéala por los espacios, cada trozo de cadena será una de las ciudades ( hay una función en c para hacerlo ).

Después de eso ya solo tienes que recoger los datos numéricos... más de lo mismo: lees toda la línea, troceas por los espacios y recorres los trozos resultantes... si es un punto haces una cosa, si no... conviertes la cadena a números.

El último paso lo repites hasta que hayas procesado todo el archivo y... listo.

Fácil, no?
#959
Tienes que encerrar todo el proceso en un bucle.

En c tienes dos tipos de bucles: for y while.

En mi opinión for se debe emplear cuando se sabe el número de iteraciones del bucle... recorrer un vector por ejemplo, mientras que los while se deben emplear el resto de casos, es decir, cuando el número de repeticiones es indeterminado.

En este caso, dado que a priori no puedes saber cuántos elementos va a querer introducir el usuario, deberías usar un while.

El bucle while tiene dos variantes:


// Este bucle comprueba, al principio de cada iteracion, si se cumple la condicion.
// Se repite mientras se cumpla la condicion
while ( condicion )
{
  // contenido
}

// Este bucle ejecuta el contenido al menos una vez, dado que la condicion se
// comprueba al final de cada iteracion.
// Nota que esta configuracion termina con ';' despues del while
do
{
  // contenido
} while ( condicion );


En tu caso, como la pregunta la haces al final, podrías poner un bucle do-while. Puedes usar también el otro... pero tendrías que asegurarte de la condición da true en la primera pasada.


int otroProducto;

do
{
  // Se recopilan datos sobre el producto
  // Se calcula su beneficio, etc.

  printf ( "¿Quieres seguir introduciendo productos? " );
  // recuperar el dato del teclado y comprobar si hay que continuar o no.
  // si hay que meter otro producto, otroProducto debe valer 1,
} while ( otroProducto == 1 );


Con la configuración que te he puesto arriba el programa va a estar pidiendo datos hasta que 'otroProducto' sea diferente de 1.

Nota: Tu código tiene un error:

acomulado = beneficio + otroProducto;

Si 'acomulado' ( se escribe acumulado ) debe almacenar el beneficio total no tiene sentido que en esa ecuación aparezca 'otroProducto', ya que esa es una variable que usas para otras cosas.

si quieres llevar un total de beneficios es tan sencillo como esto:


acomulado = acomulado + beneficio;

// o en version simplificada
acomulado += beneficio;


Nota2: otroProducto lo estás usando para almacenar números o valores ??

al principio compruebas si es igual a 1... y al final almacenas un caracter... y compruebas si es 's'... no tiene sentido.

Si usas otroProducto para almacenar caracteres... ciñete a caracteres.

Con todos estos cambios el código resultante queda más o menos así:


char otroProducto;
do
{
  printf("Precio de compra: ");
  scanf("%d", &compra);
  printf("Precio de venta: ");
  scanf("%d", &venta);
  printf("Unidades vendidas: ");
  scanf("%d", &unidades);
  beneficio = (venta-compra)*unidades;
  printf("Beneficio: %d", beneficio);
  acomulado += beneficio;
  printf("\nBeneficio acomulado: %d", acomulado);

  printf("\nQuieres introducir otro producto (s/n)? ");
  getch("%c", &otroProducto);
} while ( otroProducto == 's' );


Esta solución no funciona con mayúsculas, pero es una mejora que puedes plantearte.   
#960
Programación C/C++ / Re: Ayuda - Crear un chat en C++
11 Septiembre 2013, 17:01 PM
Pues a ver, los que sean clientes tienen que conocer la dirección ip del servidor... se la tendrá que pedir al usuario.

El servidor almacena en una lista los clientes para notificarles los nuevos mensajes ( un cliente no debería recibir sus propios mensajes ).

Yo la conexión la haría por TCP. Aunque es más pesado que UDP te garantizas que los mensajes llegan y, si por algún casual, un cliente se cae te enterarás porque se cerrará la conexión.

Y poco más que contar... el sistema en si no es complicado.

Ah bueno si, las conexiones no las hagas bloqueantes, si el servidor se encuentra con problemas para enviar algo podría dejar de enviar / recibir mensajes.