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

#321
Para que la función retorne el resultado correcto debes cambiar su prototipo y definición indicando que su tipo de retorno es float:
float Recursivo(int v[],int i, float N, float p);

También debes cambiar el cuerpo de la función (ya que solo retorna un valor en una de las ramas de ejecución) a:
float Recursivo(int v[], int i, float N, float p)
{
   if (i<N){
      p=p+v[i];
      p=Recursivo(v,i+1,N,p);
   }else
      p=p/N;
   
   return p;
}


O bien:
float Recursivo(int v[], int i, float N, float p)
{
   return (i < N) ? Recursivo(v, i + 1, N, p + v[i]) : p / N;
}


Por ultimo si tienes alguna duda o problema con un programa en C/C++ utiliza el foro Programación C/C++.

Un saludo
#322
Debes utilizar secuencias de escape donde el primero carácter es '^' seguido del carácter en cuestión, por ejemplo:
system("title ^<Titulo^>");

Para conocer a detalle que caracteres deben escaparse en esa forma revisa la documentación del interprete de comandos.

Un saludo
#323
Cita de: Caster en 12 Mayo 2014, 23:49 PMsin embargo si introduces los números 15 y 1, el total es 16 por lo tanto al dividir 15/16 en los alumnos aprobados el resultado es 0.9... lo que redondea a 1
No, como ya te comento Blaster en la división entera la parte decimal se descarta, el resultado de 15 / 16 es 0.

Un saludo
#324
Cita de: Drewermerc en 11 Mayo 2014, 20:27 PMnose si  sabes de algun libro que me recomiendes donde vengane stos temas de estructuras, sockets, manejo de archivos, memoria dinamica, threads y semafros.
Primero enfocate en aprende C estándar ya que esa es la base garantizada sin importar el compilador. Recomendaciones hay varias en la base de datos de los foros, solo es cuestión de utilizar el motor de búsqueda.

Después de eso ya puedes enfocarte en temas particulares del compilador/plataforma como sockets, threads, semaforos, etc.

Y por ultimo no es molestia. Cada uno aporta su granito de arena a la comunidad.

Un saludo
#325
Por cierto en ese bucle:
Código (cpp) [Seleccionar]
while (!Datos.eof())
   if ( Datos.read((char*)&Load, sizeof(Load)) )
      InsertarFinal(Lista, Load);

No es necesario utilizar la función miembro eof, se puede acortar a:
Código (cpp) [Seleccionar]
while (Datos.read((char *) &Load, sizeof(Load)))
   InsertarFinal(Lista, Load);


Un saludo
#326
Los dos ejemplos que pones de calloc son idénticos.

Me refería a que en la sentencia:
cuno = (char *) calloc(sizeof(char), sizeof(char));
La conversión "(char *)" no es necesaria, ademas "sizeof(char)" siempre es igual a uno. Hay que cambiar esa llamada a:
cuno = calloc(1, 1);

De todos modos las llamadas a calloc resultan inútiles ya que lo siguiente que haces en el programa es utilizar realloc, para el caso mejor utilizar una sola llamada a función (a malloc).

Un saludo
#327
Porque en C los indices validos van de 0 a N-1 con N igual al numero de elementos. Si tu declaras un array:
int a[10];
Este tiene 10 elementos y se accede a ellos con a[0], a[1], ... a[9].

Un saludo
#328
El error que mencionas se debe a que el numero de elementos de los arrays están mal:
n_dias dia[2];

/* ... */

destinos destino[4];


Hay que cambiar esas dos lineas a:
n_dias dia[3];

/* ... */

destinos destino[5];


Un saludo
#329
Cita de: Drewermerc en 11 Mayo 2014, 03:37 AMaun que intente de varias formas al ultimo se soluciono con asignarle la misma direccion de memoria que la de la primera estructura.
lo que no entiendo bien es si lo que hace es tener  la misma direccion de memoria que la  primera estructura, no se supone que  tiene acceso a esas datos  por lo tanto al momento de decirle que agrege  a la variable nom el nombre se debera de modificar lo valores de hay.
o acaso lo unico que sucede es que al aiganarle la misma direccion  de memoria pero lo que hace es usarla para almacenare la estructura pero con sus respectivas variables nose si me puedas explicar bien esto.
Lo primero que debes hacer es explicarte de una forma mas clara ya que apenas se entiende ese texto y por favor (y lo digo en buen plan) consigue un libro de calidad, no hay mejor forma de aprender que esa.

struct datos uno, dos;
struct da *d;
d = &dos;

Ahí declaras un puntero, una variable que debe almacenar una dirección en memoria, eso lo consigues con la asignación "d = &dos". Después de eso al aplicar indirección con "*d." o "d->" ya no estas trabajando con la dirección en memoria de "dos" sino con el objeto "dos". En resumen puntero + indirección == objeto apuntado.

Cita de: Drewermerc en 11 Mayo 2014, 03:37 AMcomo hago para que el texto si se pueda ver en el archivo, bueno yo revise el codigo y no encuentro esos errores menores que dices y por lo tanto no los e podido corregir  nose si me pdrias decir mis errores para intentar corregirlos.
Las partes a cambiar en tu ultimo programa sobre archivos son:
* Reservas memoria en dos ocasiones consecutivas cuando una sola basta.
* En C las conversiones explicitas al utilizar malloc, calloc y realloc no son necesarias y no se recomiendan.
* Si ocurre un error al tratar de abrir un archivo no tienes porque generar el mensaje manualmente, deja que perror lo haga.
* No hay necesidad de vaciar el bufer correspondiente con fflush.
* Abres al archivo en modo "a", ello implica que todas las operaciones de escritura se realizaran al final del archivo sin importar si utilizas fseek directa o indirectamente (via rewind).

Para almacenar las dos lineas en modo texto lo usual es fprint, por ejemplo:
#include <stdio.h>
#include <stdlib.h>

#define NOM_ARCHIVO  "hola"

int main(void)
{
   FILE  *archivo;
   char a[]= "Primera linea";
   char b[]= "Segunda linea";
   char c[sizeof a];
   
   if ((archivo = fopen(NOM_ARCHIVO, "a")) == NULL){
      perror(NOM_ARCHIVO);
      return EXIT_FAILURE;
   }
   fprintf(archivo, "%s\n", a);
   fprintf(archivo, "%s\n", b);
   fclose(archivo);
   
   if ((archivo = fopen("hola", "r")) == NULL){
      perror(NOM_ARCHIVO);
      return EXIT_FAILURE;
   }
   
   puts("Las lineas en el archivo son:");
   while (fgets(c, (int) sizeof c, archivo) != NULL)
      printf("%s", c);
   fclose(archivo);
   
   return EXIT_SUCCESS;
}

Si al ejecutarlo ocurre un error al abrir el archivo la función perror te dará (al menos en teoría) una idea de cual es.

Un saludo
#330
Cita de: Drewermerc en 10 Mayo 2014, 19:45 PMpero intente hacer esto.
struct da *d;   /* 1 */

/* ... */

d->nom = "sfa"; /* 2 */

pero al ejecutarlo me  dice violacion de segmento segun yo es lo mismo que en el ejemplo anterio pero no se por que me da error
El programa revienta porque el valor inicial de la variable "d" es no definido o basura (1), despues cuando aplicas indireccion con el operador "->" (2) resulta en "(*BASURA).nom" y eso genera UB (en tu caso el programa revienta).

Cita de: Drewermerc en 10 Mayo 2014, 19:45 PMbuen con respecto al siguiente codigo ya lo intente de varias formas manejado memoria dinamica arays,  y nadamas con puro texto enviado por la funciones como fprintf, fputs, y fwrite y ninguna imprime el segunda linea.
Acabo de ejecutar ese programa y aun con los detalles menores (por supuesto se deben corregir) se crea el archivo "hola" en el directorio actual y este contiene los 30 bytes, que no se vean como texto es normal.

Un saludo