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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicio archivos (tengo un final ayuda) - Pascal
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejercicio archivos (tengo un final ayuda) - Pascal  (Leído 905 veces)
kofu

Desconectado Desconectado

Mensajes: 9



Ver Perfil
Ejercicio archivos (tengo un final ayuda) - Pascal
« en: 16 Diciembre 2015, 12:04 pm »

Sinceramente me cuesta demasiado pascal. y tengo que rendir un final en unas horas y no encuentro ningun ejercicio completo y sin errores que me pueda ayudar.

El ejercicio que tengo como modelo de final es el siguiente:

Desarrollar un programa en pascal que permita crear y cargar un archivo de alumos para llevar un control de las notas de sus examenes parcials de la asignatura programacion 1. La estructura de los registros sera la siguiente:Nro_DNI, Apellido, Nombre, NP1, NP2:

a) Mediante un procedimiento, al que debera llamar ListadoAprobados, mostrar por pantalla el listado de los alumnos que hayan regularizado la materia, para ello, el promedio de ambas notas dbera ser igual o mayor a 7.

b) Permitir, al usuario realizar la busqueda de alumnos ingresando el numero de DNI. Mostrar los datos encontrados, en caso contrario, el siguiente mensaje "No se encuentran datos del Alumno".


Muy importante. Todo esto se graba en un archivo de datos que despues se lee. Creo que se hacia con un archivo.dat pero no me acuerdo.

Necesito ayuda urgente, por favor...
Desde ya muchas gracias
Facundo


En línea

_TTFH_3500

Desconectado Desconectado

Mensajes: 119



Ver Perfil
Re: Ejercicio archivos (tengo un final ayuda) - Pascal
« Respuesta #1 en: 16 Diciembre 2015, 13:23 pm »

Así es difícil ayudarte, deberías dar la estructura del registro por lo menos, o el rango de notas en los parciales, es decir con 7 apruebas, pero ¿cuánto es lo mínimo y máximo que puedes sacarte?, supongo que el DNI es una identificación ¿cuál es el máximo de dígitos?

Lo de exportar los datos creo que sería mejor usar una gran estructura donde guardarlos y cargarlos desde cmd:

Código
  1. type datos.txt | programa.exe > salida.txt

No dices si tienes permitido usar facilidades del compilador como USES, string, etc. o debes usar arreglos con tope para guardar los nombres.



En línea

kofu

Desconectado Desconectado

Mensajes: 9



Ver Perfil
Re: Ejercicio archivos (tengo un final ayuda) - Pascal
« Respuesta #2 en: 16 Diciembre 2015, 14:21 pm »

El rango de notas es entre 1 y 10.

EL DNI es un numero de identificacion que tiene 8 numeros asi 12345678.

Lo otro nose como respondertelo sinceramente...

Encontre un ejemplo parecido pero que involucra pasar datos de binario a texto y no creo que es lo que me pidan...Mira..
Código
  1. {A ver si esto ayuda}
  2.  
  3.  program archivos;
  4.  uses
  5.     crt;
  6.  type
  7.    regdatos = record
  8.          nombre : string[80];
  9.          cedula : longint;
  10.           notas : array[1..3] of real;
  11.         end;
  12.  
  13.   var
  14.     f : file of regdatos;
  15.   dato : array[1..10] of regdatos;
  16.    tex : text;
  17.  medias : array[1..10] of real;
  18.  nom : array[1..10] of string[80];
  19.  
  20.   procedure entradatos;
  21.   var
  22.      h, cont : integer;
  23.      tec : char;
  24.   begin
  25.       cont := 1;
  26.    repeat
  27.       clrscr;
  28.       write('  Entre Nombre : ');
  29.       readln(dato[cont].nombre);
  30.       write('  Entre Cedula : ');
  31.       readln(dato[cont].cedula);
  32.       write('  Entre notas 1 : ');
  33.       readln(dato[cont].notas[1]);
  34.       write('  Entre notas 2 : ');
  35.       readln(dato[cont].notas[2]);
  36.       writeln;
  37.       writeln('  Dese entrar mas datos [S/N] ');
  38.       repeat
  39.           tec := upcase(readkey);
  40.       until tec in ['S','N'];
  41.       if tec = 'N' then
  42.       tec := #27
  43.     else
  44.       cont := cont + 1;
  45.    until (cont > 10) or (tec = #27);
  46.    assign(f,'Temporal.dat');
  47.   {$I-} reset(f); {$I+}
  48.  if ioresult <> 0 then
  49.  begin
  50.      rewrite(f);
  51.      h := 0;
  52.      repeat
  53.        seek(f,h);
  54.        write(f,dato[h + 1]);
  55.        h := h + 1;
  56.      until h > cont;
  57.      close(f);
  58.  end
  59. else
  60.     begin
  61.        writeln('  El archivo existe desea Anularlo por este [S/N] ');
  62.        repeat
  63.          tec := upcase(readkey);
  64.        until tec in['S','N'];
  65.      if tec in['N'] then
  66.      begin
  67.      end
  68.    else
  69.        begin
  70.           rewrite(f);
  71.           h := 0;
  72.         repeat
  73.             seek(f,h);
  74.             write(f,dato[h + 1]);
  75.             h := h + 1;
  76.         until h > cont;
  77.         close(f);
  78.        end;
  79.     end;
  80.   end;
  81.  
  82.  
  83.   procedure pasaloatexto;
  84.   var
  85.     i, g : longint;
  86.   begin
  87.      assign(f,'Temporal.dat');
  88.   {$I-} reset(f); {$I+}
  89.     if ioresult <> 0 then
  90.     begin
  91.        writeln('  El Archivo No Existe Pulse [Enter] ');
  92.        readln;
  93.        exit;
  94.     end
  95.   else
  96.      begin
  97.         assign(tex,'temporal.txt');
  98.         rewrite(tex);
  99.        for i := 0 to filesize(f) - 2 do
  100.        begin
  101.            seek(f,i);
  102.            read(f,dato[i + 1]);
  103.            writeln(tex,dato[i + 1].nombre);
  104.            writeln(tex,dato[i + 1].cedula);
  105.            writeln(tex,dato[i + 1].notas[1]:3:2);
  106.            writeln(tex,dato[i + 1].notas[2]:3:2);
  107.         end;
  108.         close(f);
  109.         close(tex);
  110.         writeln('Archivo De Binario A Texto');
  111.      end;
  112.   end;
  113.  
  114.   procedure sacamedia;
  115.   var
  116.     p, i : integer;
  117.     nomb : string[80];
  118.     cod : longint;
  119.     n1, n2 : real;
  120.   begin
  121.      assign(tex,'temporal.txt');
  122.   {$I-} reset(tex); {$I+}
  123.   if ioresult <> 0 then
  124.   begin
  125.       writeln('  Error El Archivo No Existe Pulse [Enter]');
  126.       readln;
  127.       exit;
  128.   end
  129. else
  130.    begin
  131.        p := 1;
  132.        while not eof(tex) do
  133.        begin
  134.           read(tex,nomb);
  135.           read(tex,cod);
  136.           read(tex,n1);
  137.           read(tex,n2);
  138.           readln(tex);
  139.           nom[p] := nomb;
  140.           medias[p] := (n1 + n2) / 2;
  141.           writeln(nom[p],'   La Media Es    =  ',medias[p]:3:2);
  142.           p := p + 1;
  143.           if p > 10 then
  144.           p := 10;
  145.        end;
  146.        close(tex);
  147.      end;
  148.   end;
  149.  
  150.   procedure menu;
  151.   var
  152.     te : char;
  153.   begin
  154.     repeat
  155.         clrscr;
  156.         writeln('****** Menu General ******');
  157.         writeln;
  158.         writeln('  1 = Entrada De Datos');
  159.         writeln('  2 = Archivo Binario A Texto');
  160.         writeln('  3 = Presenta Las Medias');
  161.         writeln('  4 = Salir');
  162.         writeln;
  163.         writeln('<<<<< Elija Opcion >>>>>');
  164.        repeat
  165.         te := readkey;
  166.        until te in[#49,#50,#51,#52];
  167.    case te of
  168.  #49 : begin clrscr; entradatos; end;
  169.  #50 : begin clrscr; pasaloatexto; writeln(' Pulse [Enter]'); readln; end;
  170.  #51 : begin clrscr; sacamedia; readln; end;
  171.    end;
  172.   until te = #52;
  173.   end;
  174.  
  175.  
  176.  begin
  177.      menu;
  178.  end.
  179.  
  180.  
« Última modificación: 21 Diciembre 2015, 01:13 am por simorg » En línea

kofu

Desconectado Desconectado

Mensajes: 9



Ver Perfil
SOLUCION
« Respuesta #3 en: 20 Diciembre 2015, 23:52 pm »

Me respondieron en otro foro....Pongo la solucion para alguien que busque en google y no encuentre nada como me paso ami...
Gracias...supongo....

PD: Cierren el post y pongan como solucionado.

Código
  1. program alumnos;
  2.  uses
  3.    crt;
  4.  const
  5.     archivo = 'archivo.dat';
  6.  type
  7.    elalumnos = record
  8.           Nro_DNI : longint;
  9.          Apellido : string[80];
  10.            Nombre : string[80];
  11.           NP1,NP2 : real;
  12.             end;
  13.  
  14.   var
  15.     f : file of elalumnos;
  16.     alum : elalumnos;
  17.  
  18.  
  19.  
  20.    function existearchivo : boolean;
  21.    begin
  22.       assign(f,archivo);
  23.     {$I-} reset(f); {$I+}
  24.     if ioresult <> 0 then
  25.     existearchivo := false
  26.   else
  27.     begin
  28.        existearchivo := true;
  29.     end;
  30.    end;
  31.  
  32.   procedure entradadatos;
  33.   var
  34.     tec : char;
  35.   begin
  36.      clrscr;
  37.      writeln('    ****** Entrada Datos Alumno Nuevo ******');
  38.      writeln;
  39.      write('    Ingrese el DNI (Sin Puntos) : ');
  40.      readln(alum.Nro_DNI);
  41.      write('    Ingrese Apellido   : ');
  42.      readln(alum.Apellido);
  43.      write('    Ingrese Nombre     : ');
  44.      readln(alum.Nombre);
  45.      write('    Ingrese Nota 1     : ');
  46.      readln(alum.NP1);
  47.      write('    Ingrese Nota 2     : ');
  48.      readln(alum.NP2);
  49.      writeln;
  50.      writeln('   Se Guardar Los Datos ');
  51.      writeln;
  52.      writeln('   Datos Correctos [S/N]');
  53.      repeat
  54.          tec := upcase(readkey);
  55.      until tec in['S','N'];
  56.      if tec = 'S' then
  57.      begin
  58.        if existearchivo = true then
  59.        begin
  60.           seek(f,filesize(f));
  61.           write(f,alum);
  62.           close(f);
  63.        end
  64.      else
  65.          begin
  66.             rewrite(f);
  67.             seek(f,0);
  68.             write(f,alum);
  69.             close(f);
  70.          end;
  71.      end;
  72.   end;
  73.  
  74.   procedure ListadoAprobados;
  75.   var
  76.     k : longint;
  77.   begin
  78.      if existearchivo = true then
  79.      begin
  80.         writeln('    Los Aprobados Son: ');
  81.         writeln;
  82.         for k := 0 to filesize(f) - 1 do
  83.         begin
  84.            seek(f,k);
  85.            read(f,alum);
  86.            if ((alum.np1 + alum.np2) / 2) >= 7 then
  87.            writeln('   Aprobado : ',alum.nombre,'  ',alum.apellido,'  ',
  88.                        ((alum.np1 + alum.np2) / 2):0:2);
  89.         end;
  90.           close(f);
  91.           readkey;
  92.      end
  93.   else
  94.       begin
  95.         writeln('   No se encuentran datos del Alumno [Pulse Una Tecla]');
  96.         readkey;
  97.       end;
  98.   end;
  99.  
  100.   procedure busqueda_alumno;
  101.   var
  102.     ddn : longint;
  103.     vus : longint;
  104.     encon : boolean;
  105.   begin
  106.      if existearchivo = true then
  107.      begin
  108.        writeln('   Buscar Un Alumno ');
  109.        writeln;
  110.        write('     Ingrese el DNI : ');
  111.        readln(ddn);
  112.        encon := false;
  113.        for vus := 0 to filesize(f) - 1 do
  114.        begin
  115.           seek(f,vus);
  116.           read(f,alum);
  117.           if alum.Nro_DNI = ddn then
  118.           begin
  119.              encon := true;
  120.              break;
  121.           end;
  122.        end;
  123.        if encon = true then
  124.        writeln('DNI: ',alum.Nro_DNI,' Nombre: ',alum.nombre,' ',alum.apellido,' Nota 1: ',
  125.                    alum.np1:0:2,' Nota 2: ',alum.np2:0:2,' Promedio = ',
  126.                    ((alum.np1 + alum.np2) / 2):0:2)
  127.     else
  128.        writeln('   No se encuentran datos del Alumno ');
  129.        close(f);
  130.        writeln;
  131.        writeln('    [Pulse Una Tecla]');
  132.        readkey;
  133.      end
  134.   else
  135.      begin
  136.         writeln('   No se encuentran datos del Alumno [Pulse Una Tecla]');
  137.         readkey;
  138.      end;
  139.   end;
  140.  
  141.  
  142.   procedure menu;
  143.   var
  144.     sal : boolean;
  145.     tecla : char;
  146.     begin
  147.        sal := false;
  148.        repeat
  149.           clrscr;
  150.           writeln('    ***** Menu General *****');
  151.           writeln;
  152.           writeln('   1 = Ingreseo de Alumno');
  153.           writeln('   2 = Ver Aprobados');
  154.           writeln('   3 = Mostrar Un Alumno');
  155.           writeln('   4 = Salir');
  156.           writeln;
  157.           writeln('   >>> Elija Opcion <<<');
  158.         repeat
  159.            tecla := readkey;
  160.         until tecla in['1','2','3','4'];
  161.         clrscr;
  162.     case tecla of
  163.  '1' : entradadatos;
  164.  '2' : ListadoAprobados;
  165.  '3' : busqueda_alumno;
  166.  '4' : sal := true;
  167.     end;
  168.     until sal = true;
  169.   end;
  170.  
  171.  
  172.  
  173.  
  174.   begin
  175.      menu;
  176.   end.
  177.  
« Última modificación: 21 Diciembre 2015, 01:14 am por simorg » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
104 - C Solución cokeing
Ejercicios
Louis_Van_Poll 0 2,687 Último mensaje 25 Septiembre 2004, 13:52 pm
por Louis_Van_Poll
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines