Pascal/Turbo Pascal - Declarar array con varios valores en cada índice.

   
Vista:

Declarar array con varios valores en cada índice.

Publicado por Er_jaunker (2 intervenciones) el 07/09/2012 21:04:00
Holaa.
Después de hacer este programa me ha surgido una duda.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Type Alumno = record
 
	Nombre:string;
	Nota:real;
 
	end;
 
Var
        TablaAlumnos : array [1..MAximoAlum] of Alumno;
	Ident:Alumno;
        i:integer;
 
Procedure RegistrarAlumno;
 
   Begin
      for i:=1 to 2 do
         Begin
	   Writeln('Escribe el nombre del alumno: ');
	   readln(TablaAlumnos[i].Nombre);
	   Writeln('Escribe la nota del alumno: ');
	   readln(TablaAlumnos[i].Nota);
	 end
   End;
 
Procedure ConsultarAlumno;
Begin
 
	Writeln('Escribe el nombre del alumno para saber su nota');
	read(Ident.Nombre);
        for i:=1 to MaximoAlum do
            Begin
                 If (TablaAlumnos[i].Nombre) = Ident.Nombre then
                    begin
                         Writeln(TablaAlumnos[i].Nota:1:2)
                    end
                 else;
            end
end;
 
BEGIN
  RegistrarAlumno;
  ConsultarAlumno;
  readln();
 
END.


Como se ve, he hecho una tabla vacia y he llenado 2 posiciones de la tabla.Y en cada posición hay dos tipos de datos, es decir, en la posición 1 de la tabla hay escrito una variable del tipo String y Otra del tipo Real.
Bien pues poniendo por ejemplo --TablaAlumnos[1].Nombre-- accedo al nombre que hay guardado en la primera posición de la tabla y si escribo --TablaAlumnos[2].Nota-- obtengo la nota de la segunda posición de la tabla.
Hasta aquí todo bien y la duda que tengo es la siguiente:

Si en vez de declarar una tabla vacía lo hago como constante, es decir:

Const
TablaAlumnos2: array [1..MAximoAlum] of Alumno

y quiero definir la tabla ya desde el principio y que en cada índice se tengan el dato de Nombre y Nota,¿cómo lo hago?

Ejemplo

TablaAlumnos2 : array [1..MAximoAlum] of Alumno = (pepito 4, jaimito 5)

esta tabla tiene dos indices pero si escribo eso en el programa me lo tomaria unicamente como la variable Nombre porque detectaria que es un String.

Tiene que ser algo así:
TablaAlumnos2 : array [1..MAximoAlum] of Alumno = ('pepito';4, 'jaimito'; 5);

En definitiva, lo que quiero es separar las diferentes variables en el mismo índice de la tabla pero no sé no doy con la forma, o quizás es que no se puede hacer.

Espero haberme explicado bien xD.

saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Declarar array con varios valores en cada índice.

Publicado por ramon (2072 intervenciones) el 09/09/2012 17:02:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
{Esto como valores en constantes del record pero no es nada recomendado
 para un registro de daros como tu as puesto pero suerte.}
 
 uses
   crt;
Type
   Alumno = record
	Nombre:string;
	Nota:real;
	end;
 
  const
     MAximoAlum = 5;
     TablaAlumnos : array[1..MAximoAlum] of Alumno = (
     (nombre : 'Juan'; nota : 5.3),
     (nombre : 'Antonio'; nota : 7.1),
     (nombre : 'Pedro'; nota : 8.0),
     (nombre : 'Andres'; nota : 5.9),
     (nombre : 'Ramiro'; nota : 4.7));
 
     Var
	Ident:Alumno;
        i:integer;
 
Procedure RegistrarAlumno;
   Begin
      for i:=1 to 2 do
         Begin
	   Writeln('Escribe el nombre del alumno: ');
	   readln(TablaAlumnos[i].Nombre);
	   Writeln('Escribe la nota del alumno: ');
	   readln(TablaAlumnos[i].Nota);
	 end
   End;
 
Procedure ConsultarAlumno;
Begin
	Writeln('Escribe el nombre del alumno para saber su nota');
	read(Ident.Nombre);
        clrscr;
        for i := 1 to MaximoAlum do
            Begin
                 If (TablaAlumnos[i].Nombre) = Ident.Nombre then
                    begin
                         writeln('  ',TablaAlumnos[i].Nombre);
                         Writeln('  ',TablaAlumnos[i].Nota:1:2);
                    end
                 else;
            end;
      end;
 
BEGIN
  clrscr;
  ConsultarAlumno;
  readkey;
 
END.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Declarar array con varios valores en cada índice.

Publicado por Er_jaunker (2 intervenciones) el 11/09/2012 17:31:32
Gracias!

Aunque no sea la mejor forma de hacerlo me resulta más sencillo tener una tabla ya hecha porque sino en cada ejecución del programa tengo que estar introduciendo los datos y es un follón!.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Declarar array con varios valores en cada índice.

Publicado por ramon (2072 intervenciones) el 11/09/2012 18:12:02
Disculpa pero eso se soluciona creando un archivo de datos con lo cual siempre lo tendrás
tanto para corregirlo como para añadir mas gente a la lista eso seria por ejemplo así.

var
f : file of Alumno;
daentrada : alumno;

procedure guardaalumnos;
begin
assign(f,'Mialumno.lit'); {El archivo se llamara Mialumno.lit}
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin {A qui guardamos el primero que carguemos}
rewrite(f);
seek(f,0);
write(f,daentrada);
close(f);
end
else
begin {A qui guardamos el resto que carguemos}
seek(f,filesize(f));
write(f,daentrada);
close(f);
end;
end;

procedure entraalumno;
begin
write('Nombre : ');
readln(daentrada.Nombre);
write('Nota : ');
readln(daentrada.Nota);
guardaalumnos;
end;

begin
entraalumno;
end.
{Esto creara un archivo que contendrá todo lo que tu quieras guardar }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar