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


 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con archivos: Reposicionamiento del puntero de registro activo.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con archivos: Reposicionamiento del puntero de registro activo.  (Leído 369 veces)
FranAI

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Problema con archivos: Reposicionamiento del puntero de registro activo.
« en: 21 Octubre 2020, 01:22 »

Tengo un  archivo  con  la  siguiente  información  en  cada registro:  Legajo  del  alumno,  altura  y  peso.  Debo determinar  el  peso máximo  y  el  mínimo. Primero ordené los registros con un algoritmo de ordenamiento y luego reposiciono el puntero al comienzo y al final del registro para obtener el alumno de menor y mayor peso. El problema se dá en el dato de mayor peso, no me devuelve el dato correcto y no veo que puede estar mal.
Este es el cpp de carga:
Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. using namespace std;
  6. struct registro{
  7. int legajo, altura, peso;
  8. };
  9.  
  10. int main()
  11. {
  12. FILE *p = fopen("registros2.dat", "ab");
  13. if(p == NULL)
  14. {
  15. cout << "Error al abrir el archivo.";
  16. exit(1);
  17. }
  18. else
  19. {
  20. registro alumnos[10];
  21. for(int i = 0; i < 10; i++)
  22. {
  23. cout << "Legajo alumno "<< i+1 <<": ";
  24. cin >> alumnos[i].legajo;
  25. cout << "Altura: ";
  26. cin >> alumnos[i].altura;
  27. cout << "Peso: ";
  28. cin >> alumnos[i].peso;
  29. fwrite(&alumnos[i], sizeof(registro), 1, p);
  30. }
  31. fclose(p);
  32. }
  33. system("pause");
  34. return 0;
  35. }
  36.  
cpp de proceso:
Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <conio.h>
  5. using namespace std;
  6. struct registro{
  7. int legajo, altura, peso;
  8. };registro alumnos[10];
  9.  
  10. void peso_mayor_menor(FILE *p)
  11. {
  12. int aux=0, aux1=0, aux2=0, res=0;
  13. while(feof(p)==0)
  14. {
  15. fread(&alumnos, sizeof(registro), 1, p);
  16. for (int i = 0; i < 9; i++)
  17.     {
  18.         for (int j = i + 1; j < 10; j++)
  19.         {
  20.             if (alumnos[i].peso > alumnos[j].peso)
  21.             {
  22.                 aux = alumnos[i].peso;
  23.                 alumnos[i].peso = alumnos[j].peso;
  24.                 alumnos[j].peso = aux;
  25.  
  26.                 aux1 = alumnos[i].legajo;
  27.                 alumnos[i].legajo = alumnos[j].legajo;
  28.                 alumnos[j].legajo = aux1;
  29.  
  30.                 aux2 = alumnos[i].altura;
  31.                 alumnos[i].altura = alumnos[j].altura;
  32.                 alumnos[j].altura = aux2;
  33.             }
  34. }
  35. }
  36. }
  37. for(int i = 0; i < 10; i++)
  38. {
  39. cout << "Legajo " << ": " << alumnos[i].legajo << endl;
  40. cout << "Peso " << ": " << alumnos[i].peso << endl;
  41. cout << "Altura " << ": " << alumnos[i].altura << endl << endl;
  42. }
  43. long tam = 0 * sizeof(registro);
  44. res = fseek (p,  tam, SEEK_CUR);
  45.  
  46. if (res == 0)
  47. {
  48. fread (&alumnos, sizeof (registro), 1, p);
  49. cout << "ALUMNO DE MENOR PESO" << endl;
  50. cout << "Legajo: " << alumnos[tam].legajo << endl;
  51. cout << "Peso: " << alumnos[tam].peso << endl << endl;
  52.  
  53. }
  54. rewind(p);
  55. long tam1 = 0 * sizeof(registro);
  56. int res1 = fseek (p, tam1, SEEK_CUR);
  57. if(res==0)
  58. {
  59. fread (&alumnos, sizeof (registro), 1, p);
  60. cout << "ALUMNO DE MAYOR PESO" << endl;
  61. cout << "Legajo: " << alumnos[tam1].legajo << endl;
  62. cout << "Peso: " << alumnos[tam1].peso << endl << endl;
  63. }
  64. }
  65. //void altura_mayor_menor(FILE *p)
  66. //{
  67.  
  68. //}
  69. int main()
  70. {
  71. FILE *p = fopen("registros2.dat", "rb");
  72. if(p == NULL)
  73. {
  74. cout << "Error al abrir el archivo.";
  75. exit(1);
  76. }
  77. else
  78. {
  79. peso_mayor_menor(p);
  80. //altura_mayor_menor(p);
  81. }
  82. system("pause");
  83. fclose(p);
  84. return 0;
  85. }
  86.  


En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 322


Ver Perfil WWW
Re: Problema con archivos: Reposicionamiento del puntero de registro activo.
« Respuesta #1 en: 23 Octubre 2020, 05:43 »

Tienes los datos en un archivo, los pasas a un arreglo, lo ordenas en memoria, no en disco.
No tiene sentido desplazarte en el disco con fseek si los datos ya los tienes en memoria ordenados.

Los datos en disco no se mueven de ninguna manera, tengo la impresion que crees que cuando intercambias en el arreglo, estas intercambiando en el archivo y por eso te mueves al final o al inicio para recuperar el menor o mayor, cuando en realidad deberias preguntarle directamente al arreglo por esos valores (si es que esta bien la ordenacion que hiciste).


En línea

FranAI

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Problema con archivos: Reposicionamiento del puntero de registro activo.
« Respuesta #2 en: 23 Octubre 2020, 23:02 »

Muchas gracias!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
F1 - Problema con puntero a Función C#
.NET (C#, VB.NET, ASP)
Maurice_Lupin 0 1,349 Último mensaje 17 Mayo 2012, 16:14
por Maurice_Lupin
Problema Incrementar puntero
Programación C/C++
x64core 5 1,774 Último mensaje 16 Junio 2012, 20:32
por david_BS
Problema con variables puntero
Programación C/C++
oxi12pek 7 1,291 Último mensaje 5 Noviembre 2012, 17:26
por BatchianoISpyxolo
Problema de puntero
Programación C/C++
erest0r 9 2,008 Último mensaje 7 Noviembre 2013, 17:52
por erest0r
Problema en C puntero a punteros.
Programación C/C++
Sicherer 7 2,468 Último mensaje 29 Septiembre 2017, 00:37
por AlbertoBSD
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines