• Sábado 21 de Diciembre de 2024, 17:35

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - i82maria

Páginas: 1 2 3 [4] 5
76
C/C++ / Re: Alguien Usa El Programa Dev-cpp
« en: Domingo 6 de Junio de 2004, 01:12 »
Cita de: "Rataman"
Es que no entiendo para que sirve la condicion de que sea menor de 3 años... que quieres exactamente que haga cuando es menor? En el codigo original no es k no salga del bucle, es k sale del primer while, pero no del segundo (el de feof). ¿podrias especificar lo k pretendes al controlar lo de los tres años?  ;)
Verás lo que pretendo es poner alguna condición de salida,para que en un momento dado deje preguntar datos, los meta en el fichero binario. Y se guarden bien. Me inventé lo de los 3 años, porque como son 3 años de carrera, pues solo pueden como minimo debian llevar 3 años, porque la practica pone que son 3 años lectivos. En fin, era por poder salir del bucle.
Gracias

77
C/C++ / Re: Ayuda Uso De Matriz Tridimensional En C
« en: Sábado 5 de Junio de 2004, 14:32 »
Cita de: "Zholo"
Hola


float ***M;
int i, j, k;
int tamaño;

la forma de pedir memoria seria asi

Código: Text
  1. **M=(int *)malloc(sizeof(float)*i);
  2.  
  3. for(j=0;j<i;j++)
  4.  {
  5.   *M[j]=(int *)malloc(sizeof(int)*d[j].numero_anyo);
  6.   for(k=0;k<d[j].numero_anyo;k++)
  7.    M[j][k]=(int*)malloc(sizeof(int)*5);
  8.  }
  9.  


donde i es la cantidad de alumnos

y para liberar la memoria seria

Código: Text
  1. for(j=0;j<i;j++)
  2.  {
  3.   for(k=0;k<d[j].numero_anyo;k++)
  4.    free(M[j][k]);
  5.   free(*M[j]);
  6.  }
  7. free(**M);
  8.  

y para ver la nota de algun alumno

seria algo asi:

M[0][0][0]//la nota de la primera asignatura del primer periodo del primer alumno

M[5][2][3]//la nota de la cuarta asignatura del tercer periodo del sexto alumno


espero que esto te aclara algunas dudas

cualquier cosa estoy para servirte........
Muchas gracias, por todo lo que me stás ayudando, pero pasando a float, lo que me dijiste, la manera de reservar la matriz podria ser esta?.

float ***reservaMatriz(int a, int b, int c)
{

  float ***M;
  int i, j;
  M =(float ***)malloc(a*sizeof(float**));
  for(i=0; i<a; i++)
  M = (float**)malloc(b*sizeof(float*));
   for(j=0;j<b;j++)
   M[j] = (float *)malloc(c*sizeof(float));
   return M;
}
Por fa, cuando puedas me lo miras a ver si está bien.
Gracias

78
C/C++ / Re: Alguien Usa El Programa Dev-cpp
« en: Sábado 5 de Junio de 2004, 14:19 »
Cita de: "Rataman"
He estado mirando tu codigo, y tu problema es k cuando es menor de 3 años, se sale del primer bucle, pero como tienes otro while mas abajo que controla el fin de fichero pues vuelve a empezar. Otra cosa que e visto es k si introduces unos datos en los que la persona tiene mas de 3 años no guarda los datos en el fichero, y te vuelve a pedir apellidos y demas, no creo k sea eso lo que pretendes.

Lo de controlar el fin de fichero no te hace falta a la hora de escribir, solo cuando kieras leer el fichero. En vez de controlar si es fin de fichero, haz algo asi:

Código: Text
  1.  
  2.    printf(&#34;¿Quiere introducir otra persona? (s/n):&#34;);
  3.    }while(getchar!='n');
  4.  
  5.  

No se si es algo asi lo k pretendes de todas formas espero servirte de ayuda

 :hola:
Hola de nuevo, te refires a una cosa asi:

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<conio.h>
#define TAMANYODNI 10


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;
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;
   
      
}
   
if((ficbin =fopen("alumnos.bin", "wb"))== NULL)
{
    printf("El fichero no se puede crear\n"); //abrimos el fichero texto para lectura
   getch();
  return -1;
}   


do {

 while((car = fgetc(fp)) != '\n')  /*se lee del fichero texto*/
  {    
      if(isspace (car) == 0) //si c es un espacio en blanco
      /*car == " ") si c es un espacio en blanco*/  
      {
     
   do{      
   for(i = 0; i<TAMANYODNI; i++)
         {
             dni = fgetc(fp);
            
         }
        strcpy(d.DNI, dni);  
         
          

            printf("Introduzca los Apellidos: ");
             
           gets(apellidos);
         fflush(stdin);
      
            printf("Introduzca el Nombre: ");
                 gets(nombre);
         fflush(stdin);

            printf("Introduzca el Numero de años: ");
           scanf("%d",&numero_agno);
              fflush(stdin);

/*        }while(numero_anyo>3);*/
    strcpy(d.nombre, nombre);
    strcpy(d.apellidos, apellidos);
    d.numero_agno = numero_agno;
   
       }while(numero_agno >= 3);

       
    fwrite(&d, sizeof(DATOSALUMNO), 1, ficbin);
   
   
    }//cierre del if
  } //cierre del while
  printf("\n¿Quiere introducir otra persona\n");
}while(getchar() != 'n');

 
 fclose(ficbin);
 fclose(fp);
 return 0;
 
}

Pues es que sigo sin entender porque no se sale bien del bucle, cuando el numero de años es menor de 3.
Gracias.Espero tu respuesta.

79
C/C++ / Re: Alguien Usa El Programa Dev-cpp
« en: Sábado 5 de Junio de 2004, 13:04 »
Cita de: "Jevi"
He depurado tu programa, parando la ejecución en la línia 34
Código: Text
  1. if((fp=fopen(&#34;alumnos.txt&#34;, &#34;r&#34;))== NULL)
  2.  
veo que como el fichero alumnos.txt no existe, te escribe el mensaje
Código: Text
  1. printf(&#34;El fichero alumnos.txt no existe&#092;n&#34;);
  2.  
y luego salta a final del programa con return -1;

Si pones un getche(); después de cada printf, el programa esperará a presiones una tecla y te dará tiempo a visualizar los mensajes. Eso, o aprender a leer ultrarápidamente  :D

Un saludo.
Hola muchas gracias, por responderme, pero tengo otro problema, ahora en el dev cpp, uno el archivo alumnos.txt, pero no me lo reconoce, asi que cuando compilo el programa y ejecuto, me sale. que el archivo alumnos.txt, no existe. Como debo linkarlo el archivo alumnos.txt, para que la práctica me funcione?. Muchas gracias, por ser tan amable conmigo.Me estás ayudando mucho. Gracias.
Espero tu respuesta para cuando puedas.
Ya acabo de solucinar ese problema, pero sigue sin ejectarme bien. Debe de salirse del programa, cuando el numero_agno, sea menor de 3. Por favor, te mando de nuevo el codigo que tengo y me dices, porque no sale.
Vale. DE NUEVO muchas gracias.

80
C/C++ / Re: Alguien Usa El Programa Dev-cpp
« en: Sábado 5 de Junio de 2004, 13:01 »
Cita de: "Rataman"
Cita de: "Jevi"
...un getche();...

supongo que habra sido un error pero es getch(); no getche(); y otra cosa para usar getch() debes incluir un #include <conio.h> al principio del codigo (que supongo k tambien se sabe, pero por si alguien no lo sabe)   :hola:
Hola muchas gracias, por responderme, pero tengo otro problema, ahora en el dev cpp, uno el archivo alumnos.txt, pero no me lo reconoce, asi que cuando compilo el programa y ejecuto, me sale. que el archivo alumnos.txt, no existe.
Y se sale. Por favor, respondeme si sabes como debo hacerlo.
Gracias

81
C/C++ / Alguien Usa El Programa Dev-cpp
« en: Martes 1 de Junio de 2004, 13:36 »
Esto que puse antes, ya lo tengo resuelto, muchas gracias, por la ayuda qye me habeis prestado todos.

82
C/C++ / Re: Hola, Necesito Ayuda Con El Devcpp
« en: Martes 1 de Junio de 2004, 12:59 »
Cita de: "i82maria"
Cita de: "Ruben3d"
Hola.

Entra en la web oficial
Downloads
y descarga e instala la versión 4.9.8.0.

A continuación descargate el parche para aumentar a la versión 4.9.8.9, de la sección llamada Latest update : version 4.9.8.9.

Un saludo.

Ruben3d
Gracias por tu ayuda, yo me bajo el programa version 4.9.8.0, y luego una vez lo tengo instalado que hago?. Me bajo lo otro. Pero como lo actualizo?.
Saludos
Gracias por tu ayuda ya lo logré. Un saludo Mercedes

83
C/C++ / Re: Alguien Puede Ayudarme Con El Codigo
« en: Martes 1 de Junio de 2004, 12:48 »
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

84
C/C++ / Re: Ayuda Uso De Matriz Tridimensional En C
« en: Martes 1 de Junio de 2004, 12:44 »
Cita de: "Zholo"
Hola la forma de hacr la matriz de 3 dimensiones seria algo asi

Citar
int ***M;
int i, j;
int tamaño;

M=(int ***) malloc (tamaño);

for(i=0; i< tamaño; i++)
  M=(int **) malloc(tamaño);

for(i=0; i< tamaño; i++)
 for(j=0; j< tamaño; j++)
   M[j]= (int *) malloc(tamaño);


y asi obtienes una matriz de tres dimensiones de tipo entero.

espero que te sirva.
Gracias por tu respuesta, eres muy amable, me es de gran ayuda. Y ahora para acceder a ella, como lo haria?. Porque verás se trata de una matriz tridimensional que gestiona la calificacion de los alumnos que están en tres cursos lectivos, la primera dimensión se refiere a los alumnos(numero identificativo de los alumnos), la segunda representa el curso en el que están (1 a 3), y la tecera representa una asignatura concreta de las 5 posibles. Entonces me piden obtener la califiaciónd e cada alumnos, en cada curso y por cada asignatura.
Yo quisiera saber si a la hora de reservar la memoria, en este caso seria:
M = (float ***)malloc(a*b*c*sizeof(float));

porque a, b, c son las tres dimensiones.
Pero como hago para obtener la nota, seria una cosa asi?
*(M +a *b*c+b*c+c) = nota;

Por favor, contestame en cuanto puedas.
Un saludos Mercedes

85
C/C++ / Re: Hola, Necesito Ayuda Con El Devcpp
« en: Martes 1 de Junio de 2004, 12:32 »
Cita de: "Ruben3d"
Hola.

Entra en la web oficial
Downloads
y descarga e instala la versión 4.9.8.0.

A continuación descargate el parche para aumentar a la versión 4.9.8.9, de la sección llamada Latest update : version 4.9.8.9.

Un saludo.

Ruben3d
Gracias por tu ayuda, yo me bajo el programa version 4.9.8.0, y luego una vez lo tengo instalado que hago?. Me bajo lo otro. Pero como lo actualizo?.
Saludos

86
C/C++ / Re: Alguien Puede Ayudarme Con El Codigo
« en: Lunes 31 de Mayo de 2004, 22:01 »
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

87
C/C++ / Hola, Necesito Ayuda Con El Devcpp
« en: Lunes 31 de Mayo de 2004, 21:35 »
Alguien sabe donde puedo bajarme una buena version, del programa Dev Cpp. Es que yo tengo la versión 4.9.8.0 pero desde hace unas semanas, no sé porqie el programa no me compilar, quisiera saber si alguien me puede ayudar, por favor, es muy urgente. Muchas gracias.

88
C/C++ / Re: Ayuda Uso De Matriz Tridimensional En C
« en: Lunes 31 de Mayo de 2004, 19:31 »
Cita de: "QliX=D!"
Si queres el vector inicializado de esa forma podrias utilizar directamente cmalloc.
Perdona, pero te insisto que la practica es en lenguaje C, con lo cual, no me vale en C++. De todos modos muchsa gracias.

89
C/C++ / Re: Alguien Puede Ayudarme Con El Codigo
« en: Lunes 31 de Mayo de 2004, 18:57 »
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.

90
C/C++ / Re: Alguien Puede Ayudarme Con El Codigo
« en: Sábado 29 de Mayo de 2004, 17:24 »
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

91
C/C++ / Re: Problemas Para Usar El While En C
« en: Viernes 28 de Mayo de 2004, 19:40 »
Cita de: "patitofeo"
Hola, vale ya entendí un poco más el problema.

 :hola:
He encontrado varios fallos:

1- :question:

 en esta condición:
Código: Text
  1.  
  2. ...
  3. while((car = fgetc(fp) != '&#092;n')) /*se lee del fichero texto*/
  4. {
  5. ...
  6.  
  7.  

colocas los parentesis juntos (uno te sobraria) y lo que haces es meter en car, el resultado de la evaluación fgetc(fp) != '\n' que solo puede ser 0 si es falsa o 1 si es cierta.

¿entiendes?

deberias escribirlo:

Código: Text
  1.  
  2. ...
  3. while((car = fgetc(fp)) != '&#092;n') /*se lee del fichero texto*/
  4. {
  5. ...
  6.  
  7.  
:D

2- :question:

Después, cuando entras en el bucle

Código: Text
  1.  
  2. do{
  3. printf(&#34;Introduzca los Apellidos: &#34;);
  4. gets(apellidos);
  5. printf(&#34;&#092;n&#34;);
  6. printf(&#34;Introduzca el Nombre: &#34;);
  7. gets(nombre);
  8. printf(&#34;&#092;n&#34;);
  9. printf(&#34;Introduzca el Numero de años: &#34;);
  10. scanf(&#34;%d&#34;,&numero_anyo);
  11.  
  12. strcpy(d.nombre, nombre);
  13. strcpy(d.apellidos, apellidos);
  14. d.numero_anyo = numero_anyo;
  15.  
  16.  
  17. fwrite(&d, sizeof(DATOSALUMNO), 1, ficbin);
  18.  
  19. }while(numero_anyo &#62;=3);
  20.  
  21.  

no sales de aqui hasta que numero_anyo es menor que 3. de forma que si lee el primer dni y es correcto estaria pidiendo datos hasta que numero_anyo fuera menor de 3 sin leer ningún dni más ¿entiendes?
el do deberia estar antes de leer el dni y la llave que cierra el if más abajo.

3- :question:

Por ultimo.

lo que tienes que esperar es el fin del fichero alumnos.txt que es del que lees y no del .bin

osea que seria:

Código: Text
  1.  
  2. ...
  3. }while(!feof(fd));
  4. ...
  5.  
  6.  

en vez de

Código: Text
  1.  
  2. }while(!feof(ficbin));
  3.  
  4.  
.


Con esto el programa ya funcionaria más o menos.


otra cosa:

yo no habia oido hablar de la función isspace asique la cambie por  
Código: Text
  1.  
  2. car==' '
  3.  
  4.  

Otra cosa, si en el archivo colocas algun espacio despues del dni en vez de directamente un salto de linea te da error. Deberias buscar una forma mejor de leer los caracteres del fichero alumnos.txt
 :alien:  :alien:  :alien:  :alien:  :alien:  :alien:  :alien:  :alien:
Por supuesto no te voy a enviar el codigo corregido.

creo que tienes mucho que aprender aun. tanto como yo:hitcomp:

Pero para cualquier consulta preguntame que tratare de ayudarte

Suerte. :smartass:   :comp:

 :suerte:  :hola:
Gracias por tu ayuda,pero sigue sin salirme, veras ahora el codigo queda asi.

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define TAMANYODNI 10

struct alumno
{

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

 
main()
{

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


if((fp=fopen("alumnos.txt", "r"))== NULL)
{
    printf("El fichero alumnos.txt no existe\n"); //abrimos el fichero texto para lectura
   return -1;
}
   
if((ficbin =fopen("alumnos.bin", "wb"))== NULL)
{
    printf("El fichero no se puede crear\n"); //abrimos el fichero texto para lectura
   return -1;
   
}


do {

 while((car = fgetc(fp)) != '\n')  /*se lee del fichero texto*/
  {    
      if(isspace (car) == 0) //si c es un espacio en blanco
      /*car == " ") si c es un espacio en blanco*/  
      {
     
   do{      
   for(i = 0; i<TAMANYODNI; i++)
         {
             dni = fgetc(fp);
            
         }
        strcpy(d.DNI, dni);  
         
         
      

            printf("Introduzca los Apellidos: ");
           gets(apellidos);
         fflush(stdin);
      
            printf("Introduzca el Nombre: ");
            gets(nombre);
         fflush(stdin);

            printf("Introduzca el Numero de años: ");
           scanf("%d",&numero_anyo);
              fflush(stdin);

/*        }while(numero_anyo>3);*/
    strcpy(d.nombre, nombre);
    strcpy(d.apellidos, apellidos);
    d.numero_anyo = numero_anyo;
   
       }while(numero_anyo > 3);
    fwrite(&d, sizeof(DATOSALUMNO), 1, ficbin);
   
   
    }//cierre del if
  } //cierre del while
   
}while(!feof(fp));

 
 fclose(ficbin);
 fclose(fp);
 
 return 0;
 
}

No toma la condición del while.En fin,sé que no me puedes hacer el código y lo comprendo,pero si me puedes dar alguna idea,te lo agradezco.Ahora no puedo seguir,porque tengo que hacer unas cosas.Mañana seguiré.Muchas gracisa

92
C/C++ / Re: Problemas Para Usar El While En C
« en: Viernes 28 de Mayo de 2004, 19:15 »
Cita de: "patitofeo"
Hola, vale ya entendí un poco más el problema.

 :hola:
He encontrado varios fallos:

1- :question:

 en esta condición:
Código: Text
  1.  
  2. ...
  3. while((car = fgetc(fp) != '&#092;n')) /*se lee del fichero texto*/
  4. {
  5. ...
  6.  
  7.  

colocas los parentesis juntos (uno te sobraria) y lo que haces es meter en car, el resultado de la evaluación fgetc(fp) != '\n' que solo puede ser 0 si es falsa o 1 si es cierta.

¿entiendes?

deberias escribirlo:

Código: Text
  1.  
  2. ...
  3. while((car = fgetc(fp)) != '&#092;n') /*se lee del fichero texto*/
  4. {
  5. ...
  6.  
  7.  
:D

2- :question:

Después, cuando entras en el bucle

Código: Text
  1.  
  2. do{
  3. printf(&#34;Introduzca los Apellidos: &#34;);
  4. gets(apellidos);
  5. printf(&#34;&#092;n&#34;);
  6. printf(&#34;Introduzca el Nombre: &#34;);
  7. gets(nombre);
  8. printf(&#34;&#092;n&#34;);
  9. printf(&#34;Introduzca el Numero de años: &#34;);
  10. scanf(&#34;%d&#34;,&numero_anyo);
  11.  
  12. strcpy(d.nombre, nombre);
  13. strcpy(d.apellidos, apellidos);
  14. d.numero_anyo = numero_anyo;
  15.  
  16.  
  17. fwrite(&d, sizeof(DATOSALUMNO), 1, ficbin);
  18.  
  19. }while(numero_anyo &#62;=3);
  20.  
  21.  

no sales de aqui hasta que numero_anyo es menor que 3. de forma que si lee el primer dni y es correcto estaria pidiendo datos hasta que numero_anyo fuera menor de 3 sin leer ningún dni más ¿entiendes?
el do deberia estar antes de leer el dni y la llave que cierra el if más abajo.

3- :question:

Por ultimo.

lo que tienes que esperar es el fin del fichero alumnos.txt que es del que lees y no del .bin

osea que seria:

Código: Text
  1.  
  2. ...
  3. }while(!feof(fd));
  4. ...
  5.  
  6.  

en vez de

Código: Text
  1.  
  2. }while(!feof(ficbin));
  3.  
  4.  
.


Con esto el programa ya funcionaria más o menos.


otra cosa:

yo no habia oido hablar de la función isspace asique la cambie por  
Código: Text
  1.  
  2. car==' '
  3.  
  4.  

Otra cosa, si en el archivo colocas algun espacio despues del dni en vez de directamente un salto de linea te da error. Deberias buscar una forma mejor de leer los caracteres del fichero alumnos.txt
 :alien:  :alien:  :alien:  :alien:  :alien:  :alien:  :alien:  :alien:
Por supuesto no te voy a enviar el codigo corregido.

creo que tienes mucho que aprender aun. tanto como yo:hitcomp:

Pero para cualquier consulta preguntame que tratare de ayudarte

Suerte. :smartass:   :comp:

 :suerte:  :hola:
Hola muchas gracias,acabo de verlo,y antes de probarlo,queria agradecerte, las molestias.Voy a probarlo, y ahora te digo,el resultado.
Saludos Mercedes

93
C/C++ / Alguien Puede Ayudarme Con El Codigo
« en: Viernes 28 de Mayo de 2004, 13:59 »
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

94
C/C++ / Re: Alguien Sabe Como Funciona El Dev Cpp?
« en: Jueves 27 de Mayo de 2004, 13:21 »
Cita de: "Blag"
El mejor consejo que te puedo dar es que lo desinstales, reinicies tu PC y vuelvas a instalarlo.......si los problemas continuan.....pues espero que alguien sepa la respuesta......porque yo nunca he tenido problemas.

En el todo caso, trata de bajarte la última versión.

Saludos,

Blag  :devil:
Hola, yo ya me he bajado, tengo la version 4.9.8.0, y de verdad, antes me funcionaba, y ahora no sé porque no me funciona, si conoces de alguien, o algo por favor, dimelo. Ok?.
Gracias

95
C/C++ / Alguien Sabe Como Funciona El Dev Cpp?
« en: Jueves 27 de Mayo de 2004, 00:30 »
Hola, tengo un problema con el programa Dev Cpp, no me compila y me da un error que dice
                                  unable to run program file


Antes me funcionaba bien, pero ese error, me da desde hace una semana. Y no se muy bien porque pasa eso.Por favor, si alguien lo sabe, que me lo diga, que me hace mucha falta, ese programa. Porque soy estudiante de informatica, y necesito el compilador, para hacer mis practicas.
Muchas gracias. Saludos Mercedes

96
C/C++ / Re: Problemas Para Usar El While En C
« en: Jueves 27 de Mayo de 2004, 00:25 »
Cita de: "patitofeo"
Podrias decirme que formato tiene el fichero alumnos.txt?

no entiendo muy bien el bucle del

Código: Text
  1.  
  2. }while(!feof(ficbin));
  3.  
  4.  

se supone que el EOF se le marcas tú ¿no?

¿no estas esperando a que llegue?

mandame el fichero alumnos.txt y le hecho un vistazo haber si puedo ayudarte


saludos
Hola, mira aqui te mando el enunciado de la practica, asi lo entenderas mejor.
Vale?. Gracias por tu ayuda.

97
C/C++ / Re: Ayuda Uso De Matriz Tridimensional En C
« en: Martes 25 de Mayo de 2004, 20:58 »
Cita de: "juank"
vas mal  :(

memset sirve para llenar un area de memoria con repeticiones de nu valor especifico.

mejor has un pequeño ejercicio con lo del vector bidimencional que te coloque en el post de teleport media y maneja solo alumnos y cursos...
una vez lo tengas hecho ampliale la funcionalidad a 3 dimensiones incluyendo materias.


fijate en el codigo del post.. va uno tras otro solo que lo separe para explicar cada parte.

sigue intentandolo animo!!!

Hola Juan, aqui estoy de neuvo, lo sigo intentando, y ahora entre unos apuntes de clase, y lo que me dijiste obtengo esto.
Por favor dime si es´ta bien.
Gracias

float ***reservaMatriz(int a, int b, int c)
{

  float ***M;
  int i, j;
  M =(float ***)malloc(a*sizeof(float**));
  for(i=0; i<a; i++)
  M = (float**)malloc(b*sizeof(float*));
   for(j=0;j<b;j++)
   M[j] = (float *)malloc(c*sizeof(float));
   return M;
}

98
C/C++ / Tengo Un Problema Con El Progrma Dev Cpp
« en: Martes 25 de Mayo de 2004, 19:43 »
Hola, tengo un programa llamado Dev Cpp, q es el q todo el mundo recomienda para usar como compilador de C.pues bien,desde hace unos dias, cuando le doy al compilar,abajo, me aparece un errro,que pone:

unable to run program file

Estoy un poco agobiada,porque no sé porque antes si compilaba y ahora no.

Si alguien puede ayudarme,se lo agradeceria,estudio informatica, y necesito un compilador de C,para mis practicas.

Gracias

99
C/C++ / Re: Ayuda Uso De Matriz Tridimensional En C
« en: Martes 25 de Mayo de 2004, 18:20 »
Cita de: "juank"
ok..
por cierto que el codigo que colocaste antes no sirve.
Hola juan,seria algo parecido,a esto:

/*MATRIZ TRIDIMENSIONAL*/
float ***M;

/*reservamos memoria*/
m =(float***)malloc(sizeof(float**)*a*b*c));

for(k=0;k<c;k++)
{
 for(j=0;j<b;j++)
 {
 for(i=0;i<a;i++)
  {
   m[a][c]='\0';
  }
 }
}


a =identificador del alumno
b = curso
c =asignatura

La nota se haria asi?
*(m + a*b*c+ b*c +c) = nota

Pero,una cosa,el memset,no lo conozco pa q sirve exactamente?.
Porfa,dime si voy por buen camino.Para poder empezar a averiguar las calificaciones de cada alumno.Gracias
Saluods

100
C/C++ / Re: Ayuda Uso De Matriz Tridimensional En C
« en: Martes 25 de Mayo de 2004, 17:25 »
Cita de: "juank"
http://teleportmedia.com/foro/viewtopic.php?t=223
revisa el link por favor..
solo si entiendes como hacer una matriz bidimensional dinamicamente podras intentar hacer una de tres dimeniones..
si aprendes y entiendes lo que esta en el link hacer en 3 dimensiones es pan comido.
Te podria hacer todo el codigo yo, y te garantizo que no me tardaria mas de 15 minutos siendo exagerado, pero no acostumbro a hacerlo, es mejor que aprendas con tu esfuerzo, porque si te dan todo el codigo hecho te garantizo que no aprenderas nada.  :smartass:
Bueno gracias,de momento,voy a mirar de nuevo,el codigo q me dices de la matriz bidimensional,y una vez lo haya hecho te lo mando,para qe me digas si está bien.Para mi es muy importante conseguir hacer esta practica,y me gustaria mucho aprender,por eso estoy contenta desde que me apunté a este foro.Muchas gracias,por tu consejo,en cuanto lo tenga te lo mando.
Saludos :hola:

Páginas: 1 2 3 [4] 5