Me puse a ver estudiar de pascal como para fijar conocimientos y estaba haciendo un ejercicio que encontre que dice:
Cita: Realice un programa en Pascal en donde se defina un tipo de dato registro para identificar los datos de un alumno de un instituto de enseñanza. Los datos que interesan de cada alumno son: matricula, apellido, nombres, domicilio, localidad, provincia, codigo postal y teléfono. Se deberá solicitar el ingreso de un número N (entero), el cual indicará indicará la cantidad de registros que se cargarán desde el programa. Se pide: cargar los N registros e imprimir la cantidad de alumnos que viven en la provincia de Buenos Aires.
Lo primero que se me ocurrio fue usar records y procedures e hice esto:
Código:
Program Alumnos;
Var
n, i, p : integer; {n=registros, i=contador, p=provincia}
Type
datos = Record
matricula:integer;
apellido:String;
nombres: String;
domicilio: String;
localidad: String;
provincia: String;
c_postal: String;
telefono: integer;
End;
Var
alumno[n] : datos;
{********************************************************}
Procedure Lee_Datos;
Begin
Writeln('Numero de Martricula: '); Readln(alumno[i].matricula);
Writeln('Apellido: '); Readln(alumno[i].apellido);
Writeln('Nombres: '); Readln(alumno[i].nombres);
Writeln('Domicilio: '); Readln(alumno[i].domicilio);
Writeln('Localidad: '); Readln(alumno[i].localidad);
Writeln('Provincia: '); Readln(alumno[i].provincia);
If (alumno[i].provincia='Buenos Aires') Or (alumno[i].provincia='buenos aires') Or (alumno[i].provincia='Bs As') Then
p:=p+1;
End;
Writeln('Codigo Postal: '); Readln(alumno[i].c_postal);
Writeln('Telefono: '); Readln(alumno[i].telefono);
End;
{********************************************************}
Begin
p:=0;
Writeln('Indique la cantidad de registros que va a ingresar: ');
Readln(n);
For i := 1 to n Do
Lee_Datos;
End;
Writeln('En Buenos Aires viven: ', p);
End;
Pero me da error por todos lados, por lo que modifique he hice esto:
Código:
Program Alumnos;
Var
n, i, p : integer;
Type
datos = Record
matricula:integer;
apellido:String;
nombres: String;
domicilio: String;
localidad: String;
provincia: String;
c_postal: String;
telefono: integer;
End;
Var
alumno : datos;
{*******************************************************}
Procedure Lee_Datos;
Begin
Writeln('Numero de Matricula: '); Readln(alumno.matricula);
Writeln('Apellido: '); Readln(alumno.apellido);
Writeln('Nombres: '); Readln(alumno.nombres);
Writeln('Domicilio: '); Readln(alumno.domicilio);
Writeln('Localidad: '); Readln(alumno.localidad);
Writeln('Provincia: '); Readln(alumno.provincia);
If (alumno.provincia='Buenos Aires') Or (alumno.provincia='buenos aires') Or (alumno.provincia='Bs As') Then
p:=p+1;
Writeln('Codigo Postal: '); Readln(alumno.c_postal);
Writeln('Telefono: '); Readln(alumno.telefono);
End;
{*******************************************************}
Begin
p:=0;
Writeln('Indique la cantidad de registros que va a ingresar: ');
Readln(n);
For i := 1 to n Do
Lee_Datos;
Writeln('En Buenos Aires viven: ', p);
End.
Este funciona perfecto salvo que no cumple con lo que se me pide ya que al escribir por ejemplo Readln(alumno.telefono) supuestamente esta sobre escribiendo el valor de telefono con cada nueno N registro. Hasta donde yo sabia para accesar un registro en una determianda posición de un array se tenia que escribir por ejemplo Readln(alumno[25].telefono); pero me da error.
Por otro lado yo sabia que para definir una tabla con N elementos se debia hacer asi:
alumno[n]:datos;
pero tambien me da error.
¿alguien tiene idea en que estoy fallando?
gracias
El Chaval