• Lunes 29 de Abril de 2024, 22:04

Autor Tema:  Alguien Puede Ayudarme Con El Codigo  (Leído 2954 veces)

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Alguien Puede Ayudarme Con El Codigo
« en: Viernes 28 de Mayo de 2004, 13:59 »
0
Hola buenas, el codigo es, este no se donde me da error, el programa no me compila bien.Tengo que escribir en una matriz tridimensional los datos de alumnos, junto con los cursos y asignaturas.


#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<conio.h>



struct alumno
{

  char DNI[10];
  char nombre[25];
  char apellidos[50];
  int numero_agno;
 
 };
 
 typedef struct alumno DATOSALUMNO;
 

 
main()
{

FILE *fp;
FILE *ficbin;
DATOSALUMNO *d;
char car;
char dni[10];
int i,j,k,a;
char nombre[25];
char apellidos[50];
int numero_agno;


if((fp=fopen("alumnos.txt", "r"))== NULL)
{
    printf("El fichero alumnos.txt no existe\n"); //abrimos el fichero texto para lectura
   getch();
 return -1;
   
}
else
{
    i= 0;
    while(!feof(fp))//cuenta cuantos alumnos hay en el archivo
    {
        fscanf(fp, "%d %s", &j, dni); /*j sera para el numero identificativo*/
     i++; /*i cuenta las filas*/
     }
     d = (DATOSALUMNO*)malloc(sizeof(DATOSALUMNO)*i); // crea una estructura de
                                                  //tipo  puntero
                                                  //para guardar los alumnos
       
     fseek(fp, 0, SEEK_SET); //posiciona el puntero
     for(j=0; j<i; j++) //inicializa la estructura a 0
     {
          d[j].DNI[0] = '\0';
          d[j].nombre[0] = '\0';
          d[j].apellidos[0] = '\0';
          d[j].numero_agno = '\0';
     }
     i = 0; /*cuenta las filas*/
     while(!feof(fp)) //coloca los datos en la estructura
     {
         fscanf(fp, "%d %s", &j, d.DNI);
         i++;    
     }
   fclose(fp);
         
  if((ficbin =fopen("alumnos.bin", "wb"))== NULL)
 {
    printf("El fichero no se puede crear\n"); //abrimos el fichero texto para lectura
   getch();
  return -1;
}
else
{
    for(j=0;j<i;j++)//pide los datos restantes
    {
        system("clear");
        fflush(stdin);
        printf("Datos del alumnos con DNI: %s\n\n",d[j].DNI);
        printf("Introduzca los Apellidos: ");
       gets(d[j].apellidos);
      fflush(stdin);
       printf("Introduzca el Nombre: ");
         gets(d[j].nombre);
      fflush(stdin);
         printf("Introduzca el Numero de años: ");
        scanf("%d",&d[j].numero_agno);
        fflush(stdin);
    fwrite(&d, sizeof(DATOSALUMNO), 1, ficbin); /*guarda los datos en
                                                  un archivo binario*/
     }

}
fclose(ficbin);
free(d);


}



float ***M;
**M=(float *)malloc(sizeof(float) *a);

(for j =0; j<a; j++)
{
    *M[j] = (float)malloc(sizeof(float)*3);
    for(k=0; k<d[j].numero_agno; k++)
    M[j][k]=(float*)malloc(sizeof(float)*5);
}
/*i es la cantidad de alumnos M[3][5]*/
/*M[5][2][3] seria la 4ºasignatura del 3º año del sexto alumno*/

     
   



Por favor,si alguien puede ayudarme, se lo agradeceria mucho.
Saludos Mercedes

Zholo

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #1 en: Sábado 29 de Mayo de 2004, 00:35 »
0
Código: Text
  1. Hola
  2.  
  3. Segun lo que estuve revisando, si no esta el fichero no hace nada, (por los return -1, que hacen que se salga solo), por eso queria ver si tienes un archivo de ejemplo.
  4.  
  5. lo otro es que si no existe el fichero trata igual de ller desde el, por lo tanto pondria esos ciclos dentro del if que pregunta si existe o no el archivo o como un else.
  6.  
  7. tb, preguntas por un .txt para abrir y luego creas un .bin.
  8.  
  9. si puedes explicarme mejor tu idea te ayudaria mas.
  10.  

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #2 en: Sábado 29 de Mayo de 2004, 17:24 »
0
Cita de: "Zholo"
Código: Text
  1. Hola
  2.  
  3. Segun lo que estuve revisando, si no esta el fichero no hace nada, (por los return -1, que hacen que se salga solo), por eso queria ver si tienes un archivo de ejemplo.
  4.  
  5. lo otro es que si no existe el fichero trata igual de ller desde el, por lo tanto pondria esos ciclos dentro del if que pregunta si existe o no el archivo o como un else.
  6.  
  7. tb, preguntas por un .txt para abrir y luego creas un .bin.
  8.  
  9. si puedes explicarme mejor tu idea te ayudaria mas.
  10.  
Gracias por responderme,aqui te mando el enunciado de la practica q tengo q hacer.Ahora voy a domir la siesta,luego cuando me conecte vere si me has contestado,y te sigo explicando,muchas gracias por tu ayuda.
Saludos Mercedes
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Zholo

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #3 en: Sábado 29 de Mayo de 2004, 19:43 »
0
Hola

lo que lei me dio a entender mucho mejor tu situacion, lo que puedo hacer por ahora es darte como los pasos ya que no tengo donde dessarrollarlo para darte con ejemplos.

Primero ver si existe el archivo si no, mandas mensaje de que no encontro el archivo., pero si existe lo comienzas a leer y guardar los datos en la matriz.
luego comienzas con todo el ingreso de nombres y demas segun lo que te piden. Y aqui recien creas el archivo Bin.

Luego realizas las consultas y estadisticas que te piden y vas guardando en el archivo resultados.

espero que te sirva pero para el codigo necesito un poco de tiempo......

trata con la idea y yo lo hago en mi casa esta tarde y veo si te lo puedo enviar en la tarde.

Zholo

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #4 en: Domingo 30 de Mayo de 2004, 03:37 »
0
:comp: Hola otra vez

Ahi te mando un codigo que te servira para abrir el archivo y guardar los datos que necesitas, solo faltan las notas, espero que te sirva.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #5 en: Lunes 31 de Mayo de 2004, 18:57 »
0
Cita de: "Zholo"
:comp: Hola otra vez

Ahi te mando un codigo que te servira para abrir el archivo y guardar los datos que necesitas, solo faltan las notas, espero que te sirva.
Muchas gracias por tu ayuda, eres muy amable, pero no entiendo muy bien el codigo, es que es muy diferente al mio. Me podrías decir, que le falta al mio, y explicarme un poco el tuyo.Por cierto, la practica es en lenguaje c, lo digo porque como el archivo tiene extensión, .cpp. Bueno, muchas muchas gracias, por tu ayuda, eres el primero que me ayuda tanto, desde que estoy en el foro.
Saludos Mercedes.

Zholo

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #6 en: Lunes 31 de Mayo de 2004, 21:32 »
0
Hola mira el .cpp o .c son cosas de uso de intrucciones, pero el que te envie es en C.

te lo explico a continuacion:
Esta es tu estructura que la utilize como la tenias tu

Citar
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<conio.h>
#include<malloc.h>

struct alumno
{

char DNI[11];
char nombre[25];
char apellidos[50];
int numero_anyo;

};
typedef struct alumno DATOSALUMNO;



Aqui pregunto si el Archivo Alumnos.txt existe

Citar
void main(void)
{

FILE *fp;
FILE *ficbin;
DATOSALUMNO *d;
char dni[10];
int i,j;

textcolor(WHITE);
textbackground(BLUE);
clrscr();
if((fp=fopen("alumnos.txt", "r"))== NULL)//abrir fichero
{
  printf("El fichero alumnos.txt no existe\n");
  getch();
  return ;
}

Si existe lo leeo y se guarda en la estructura que definimos arriba, y en la linea del malloc creo el arreglo dinamico. y si no entiendes lo del fseek es una funcion para posicionarce dentro del archivo y lo utilizo para ponerlo al comienzo despues de recorrerlo

Citar
else
{
  i=0;
  while(!feof(fp))//cuenta cuantos alumnos hay en el archivo
   {
    fscanf(fp, "%d %s", &j, dni);
    i++;
   }
  d=(DATOSALUMNO*)malloc(sizeof(DATOSALUMNO)*i);//crea un areglo para guardar a los alumnos
  fseek(fp, 0L, SEEK_SET);
  for(j=0;j<i; j++)//limpia ese arreglo
   {
     d[j].DNI[0]='\0';
     d[j].nombre[0]='\0';
     d[j].apellidos[0]='\0';
     d[j].numero_anyo=0;
   }
  i=0;
  while(!feof(fp))//coloca los datos del archivo en el arreglo
   {
    fscanf(fp, "%d %s", &j, d.DNI);
    i++;
   }
}
fclose(fp);

y aca se comienza a pedir los datos de los alumnos y se van guardando en el archivo Alumnos.bin, y el fflush se utiliza para limpiar el cache del sistema en este caso el de ingreso por eso lleva el (stdin), ya que al utilizar gets y scanf se tienden a saltar ingresos por eso hay que limpiarlo con el fflush.

Citar
ficbin=fopen("Alumnos.bin", "wb");
for(j=0;j<i;j++)//pide los datos restantes
 {
   clrscr();
   fflush(stdin);
   printf("Datos del alumno con DNI    : %s\n\n", d[j].DNI);
   printf("Introduzca los Apellidos    : ");
   gets(d[j].apellidos);
   printf("\n");
   printf("Introduzca el Nombre        : ");
   gets(d[j].nombre);
   printf("\n");
   printf("Introduzca el Numero de a¤os: ");
   scanf("%d",&d[j].numero_anyo);
   fprintf(ficbin,"%s %s %s %d \n",d[j].DNI,d[j].apellidos,d[j].nombre,d[j].numero_anyo);//guarda los datos en archivo binario
 }
fclose(ficbin);
free(d);
return;
}


Cualquier duda que tengas dimelo no mas, tratare de responderte lo mas claro posible.

Gracias....

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #7 en: Lunes 31 de Mayo de 2004, 22:01 »
0
Cita de: "Zholo"
Hola mira el .cpp o .c son cosas de uso de intrucciones, pero el que te envie es en C.

te lo explico a continuacion:
Esta es tu estructura que la utilize como la tenias tu

Citar
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<conio.h>
#include<malloc.h>

struct alumno
{

char DNI[11];
char nombre[25];
char apellidos[50];
int numero_anyo;

};
typedef struct alumno DATOSALUMNO;



Aqui pregunto si el Archivo Alumnos.txt existe

Citar
void main(void)
{

FILE *fp;
FILE *ficbin;
DATOSALUMNO *d;
char dni[10];
int i,j;

textcolor(WHITE);
textbackground(BLUE);
clrscr();
if((fp=fopen("alumnos.txt", "r"))== NULL)//abrir fichero
{
  printf("El fichero alumnos.txt no existe\n");
  getch();
  return ;
}

Si existe lo leeo y se guarda en la estructura que definimos arriba, y en la linea del malloc creo el arreglo dinamico. y si no entiendes lo del fseek es una funcion para posicionarce dentro del archivo y lo utilizo para ponerlo al comienzo despues de recorrerlo

Citar
else
{
  i=0;
  while(!feof(fp))//cuenta cuantos alumnos hay en el archivo
   {
    fscanf(fp, "%d %s", &j, dni);
    i++;
   }
  d=(DATOSALUMNO*)malloc(sizeof(DATOSALUMNO)*i);//crea un areglo para guardar a los alumnos
  fseek(fp, 0L, SEEK_SET);
  for(j=0;j<i; j++)//limpia ese arreglo
   {
     d[j].DNI[0]='\0';
     d[j].nombre[0]='\0';
     d[j].apellidos[0]='\0';
     d[j].numero_anyo=0;
   }
  i=0;
  while(!feof(fp))//coloca los datos del archivo en el arreglo
   {
    fscanf(fp, "%d %s", &j, d.DNI);
    i++;
   }
}
fclose(fp);

y aca se comienza a pedir los datos de los alumnos y se van guardando en el archivo Alumnos.bin, y el fflush se utiliza para limpiar el cache del sistema en este caso el de ingreso por eso lleva el (stdin), ya que al utilizar gets y scanf se tienden a saltar ingresos por eso hay que limpiarlo con el fflush.

Citar
ficbin=fopen("Alumnos.bin", "wb");
for(j=0;j<i;j++)//pide los datos restantes
 {
   clrscr();
   fflush(stdin);
   printf("Datos del alumno con DNI    : %s\n\n", d[j].DNI);
   printf("Introduzca los Apellidos    : ");
   gets(d[j].apellidos);
   printf("\n");
   printf("Introduzca el Nombre        : ");
   gets(d[j].nombre);
   printf("\n");
   printf("Introduzca el Numero de a¤os: ");
   scanf("%d",&d[j].numero_anyo);
   fprintf(ficbin,"%s %s %s %d \n",d[j].DNI,d[j].apellidos,d[j].nombre,d[j].numero_anyo);//guarda los datos en archivo binario
 }
fclose(ficbin);
free(d);
return;
}


Cualquier duda que tengas dimelo no mas, tratare de responderte lo mas claro posible.

Gracias....
Muchas gracias por tu ayuda, pero hay algunas sentencias que no las uso yo, si se debe de escribir en el fichero binario, porque usas fprintf, porque una vez se han leido los datos de teclado, se pasan todos al fichero binario, y de ahi empieza a crear la matriz tridimensional.
Gracias, por toda la ayuda que me estás prestando. Seguiremos en contacto.
Saludos Mercedes

Zholo

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #8 en: Lunes 31 de Mayo de 2004, 22:11 »
0
Yo siempre utilizo fprintf para escribir en los archivos ya que asi les doy el formato que yo desee

Lo otro que deseaba preguntarte es que datos eran los que guardas en la matriz de tres dimensiones y si se podria utilizar nodos en vez de matrices.

Espero tu respuesta gracias.....

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #9 en: Martes 1 de Junio de 2004, 12:48 »
0
Cita de: "Zholo"
Yo siempre utilizo fprintf para escribir en los archivos ya que asi les doy el formato que yo desee

Lo otro que deseaba preguntarte es que datos eran los que guardas en la matriz de tres dimensiones y si se podria utilizar nodos en vez de matrices.

Espero tu respuesta gracias.....
Verás en la matriz se debe guardar, en la primera dimensión el número identificativo de los alumnos, en la segunda el curso al que pertenecen, (que es de 1 a 3), y en la tercera respresenta una asignatura concreta (de 5 que hay).
Entoncs sabemos que la matriz será M [][3][5], más o menos.

Entonces en la matriz se meten estos datos, para calcular las calificaciones de cada alumno, en cada curso y por cada asignatura.

Espero que esto te ayude a enteder un poco más el problema.
Gracias a ti, por toda la ayuda que me estás prestando.
Saludos

Zholo

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #10 en: Viernes 4 de Junio de 2004, 22:08 »
0
Hola

disculpa la tardanza

lo de la matriz es algo asi

M[a][c]

donde a es por el numero del alumno
donde b es por el numero de periodo(1 a 3 o sea para los indices de 0 a 2)
donde c es la nota de uno de los 5

ejemplo

M[0][0][0] //es la nota de la primera asignatura, del primer alumno, en el primer periodo
M[0][0][1]//es la nota de la segunda asignatura, del primer alumno, en el primer periodo

espero que me entiendas.


lo que podrias hacer para validar que el periodo sea de 1 a 3 es cuando te ingresen algo diferente lo pides de nuevo o quiebras el ciclo con un break

QliX=D!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #11 en: Viernes 4 de Junio de 2004, 23:44 »
0
Bien!, le hiciste la tarea mientras ella dormia la siesta.. que lindo. :blink:
QliX=D! - From the top of Tsunami

The Black Boy

  • Miembro de PLATA
  • *****
  • Mensajes: 1043
  • Nacionalidad: co
    • Ver Perfil
    • http://www.mslatam.com/latam/technet/mva2/Microsite.aspx?alias=JairoDiaz
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #12 en: Sábado 5 de Junio de 2004, 00:39 »
0
Citar
Bien!, le hiciste la tarea mientras ella dormia la siesta.. que lindo
mmm... :think:  pero no fue del todo ya que ella ya tenia algo echo..
El inteligente no es aquel que lo sabe todo
sino aquel que   sabe utilizar lo poco que sabe.


Espacio Personal

si necesitas algo de programacion click aqui, si no esta aqui no existe

Programacion]

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Alguien Puede Ayudarme Con El Codigo
« Respuesta #13 en: Jueves 10 de Junio de 2004, 13:53 »
0
Cita de: "Zholo"
Hola

disculpa la tardanza

lo de la matriz es algo asi

M[a][c]

donde a es por el numero del alumno
donde b es por el numero de periodo(1 a 3 o sea para los indices de 0 a 2)
donde c es la nota de uno de los 5

ejemplo

M[0][0][0] //es la nota de la primera asignatura, del primer alumno, en el primer periodo
M[0][0][1]//es la nota de la segunda asignatura, del primer alumno, en el primer periodo

espero que me entiendas.


lo que podrias hacer para validar que el periodo sea de 1 a 3 es cuando te ingresen algo diferente lo pides de nuevo o quiebras el ciclo con un break
Hola muchas gracias por toda la ayuda que me estás prestando, verás he estado de examenes y por eso no podia ver lo que me mandaste con tranquilidad.
Aqui he intentdo compilarlo y no me deja, te pongo el codigo, y me dices que tal,  si es que tengo algun error. Ok?. Muchas gracias.
Mercedes.

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<conio.h>



struct alumno
{

  char DNI[10];
  char nombre[25];
  char apellidos[50];
  int numero_agno;
 
 };
 
 typedef struct alumno DATOSALUMNO;
 

 
main()
{

FILE *fp;
FILE *ficbin;
DATOSALUMNO *d;
char car;
char dni[10];
int i,j;
char nombre[25];
char apellidos[50];
int numero_agno;


if((fp=fopen("alumnos.txt", "r"))== NULL)
{
    printf("El fichero alumnos.txt no existe\n"); //abrimos el fichero texto para lectura
   getch();
 return -1;
   
}
else
{
    i= 0;
    while(!feof(fp))//cuenta cuantos alumnos hay en el archivo
    {
        fscanf(fp, "%d %s", &j, dni); /*j sera para el numero identificativo*/
     i++; /*i cuenta las filas*/
     }
     d = (DATOSALUMNO*)malloc(sizeof(DATOSALUMNO)*i); // crea una estructura de
                                                  //tipo  puntero
                                                  //para guardar los alumnos
       
     fseek(fp, 0, SEEK_SET); //posiciona el puntero
     for(j=0; j<i; j++) //inicializa la estructura a 0
     {
          d[j].DNI[0] = '\0';
          d[j].nombre[0] = '\0';
          d[j].apellidos[0] = '\0';
          d[j].numero_agno = '\0';
     }
     i = 0; /*cuenta las filas*/
     while(!feof(fp)) //coloca los datos en la estructura
     {
         fscanf(fp, "%d %s", &j, d.DNI);
         i++;    
     }
   fclose(fp);
         
  if((ficbin =fopen("alumnos.bin", "wb"))== NULL)
 {
    printf("El fichero no se puede crear\n"); //abrimos el fichero texto para lectura
   getch();
  return -1;
}
else
{
    for(j=0;j<i;j++)//pide los datos restantes
    {
        system("clear");
        fflush(stdin);
        printf("Datos del alumnos con DNI: %s\n\n",d[j].DNI);
        printf("Introduzca los Apellidos: ");
       gets(d[j].apellidos);
      fflush(stdin);
       printf("Introduzca el Nombre: ");
         gets(d[j].nombre);
      fflush(stdin);
         printf("Introduzca el Numero de años: ");
        scanf("%d",&d[j].numero_agno);
        fflush(stdin);
    fwrite(&d, sizeof(DATOSALUMNO), 1, ficbin); /*guarda los datos en
                                                  un archivo binario*/
     }


fclose(ficbin);
free(d);
}

}



Por favor, mira a ver porque no me compila bien.