Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/06/2005, 18:31
Avatar de chaval
chaval
 
Fecha de Ingreso: febrero-2003
Ubicación: en elgun lugar del cyberespacio
Mensajes: 118
Antigüedad: 22 años
Puntos: 0
pascal: record y procedure

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
__________________
CHAVAL
Buenos Aires, Argentina, América, La Tierra,
Via Lactea, Universo Tridemensional... :pensando: