Usando vectores en Pascal
Después de putear un poco con la sintáxis de Pascal pude resolver el problema que nos plantearon ayer en "Laboratorio de Computación 1" de la ORT.
Se trata de hacer un programa que: 1. lea 10* números por teclado; 2. informe el número máximo y su posición de ingreso; 3. informe el número mínimo y su posición de ingreso; 4. informe el promedio de los números ingresados; 5. informe la cantidad de números mayores, iguales y menores al promedio obtenido.
Jaja, me acuerdo de Koblinc y sus enunciados locos del tipo "Hacer un programa que pida el nombre de 30 vacas, que calcule su producción de leche, indique el estado civil de cada vaca y si tienen muchos amigos". Ahh, que grosa que era la E.E.T. N°6 "Chacabuco" de Morón. Barreto y Salerno, no se mueran nunca!
Basta de joda, a continuación el código en Pascal:
Program TestVector; {Uso de vectores}
Uses
Crt;
Const
VecMin = 1;
VecMax = 10;
Var
i : integer;
Datos : Array [VecMin..VecMax] of real;
DatosIngresados : integer;
Promedio : real;
DatoIdMax, DatoIdMin : integer;
CantMenorProm, CantMayorProm, CantIgualProm : integer;
Begin
ClrScr;
DatosIngresados := 0;
CantMenorProm := 0;
CantMayorProm := 0;
CantIgualProm := 0;
For i := VecMin to VecMax Do {Leo los datos por teclado}
Begin
Write('Ingrese un numero: ');
ReadLn(Datos[i]);
inc(DatosIngresados);
End;
For i := VecMin to VecMax Do {Sumo los datos ingresados para después calcular el promedio}
Begin
Promedio := Promedio + Datos[i];
End;
Promedio := Promedio / DatosIngresados; {Calculo el promedio}
For i := VecMin to VecMax Do {Busco el dato mayor y el menor}
Begin
If i = 1 Then
Begin
DatoIdMax := 1;
DatoIdMin := 1;
End
Else
Begin
If Datos[i] > Datos[DatoIdMax] Then
Begin
DatoIdMax := i;
End
Else If Datos[i] < Datos[DatoIdMin] Then
Begin
DatoIdMin := i;
End;
End;
End;
For i := VecMin to VecMax Do {Cuento los máximos, iguales y mínimos respecto al promedio}
Begin
If Datos[i] > Promedio Then
Begin
inc(CantMayorProm);
End
Else If Datos[i] < Promedio Then
Begin
inc(CantMenorProm);
End
Else
Begin
inc(CantIgualProm);
End;
End;
WriteLn('El mayor es: ', Datos[DatoIdMax]:6:2, '. Su posicion es ', DatoIdMax);
WriteLn('El menor es: ', Datos[DatoIdMin]:6:2, '. Su posicion es ', DatoIdMin);
WriteLn('El promedio es: ', Promedio:6:2);
WriteLn('Mayores al promedio: ', CantMayorProm);
WriteLn('Iguales al promedio: ', CantIgualProm);
WriteLn('Menores al promedio: ', CantMenorProm);
ReadLn;
End.
Veamos, antes de que intenten lincharme voy a explicar por qué hice un "for de fores". A primera vista pude resultar un derroche de recursos, ya que leo dato a dato varias veces. Si bien podría haberme ahorrrado un par, lo importante es que es limpio, no tiene grandes rebusques, permite modificar funcionalidades del programa sin afectar otras y, lo más importante, funciona correctamente. Recuerden la gloriosa frase de Donald Knuth: "Preoptimization is the root of all evil".
Para más comodidad les dejo el código fuente para descargar. Cualquier duda hagan su consulta, hasta la próxima.
* No se especificó, pero de última se puede cambiar el For por un While y listo
No trackbacks yet.
October 25th, 2007 - 09:21
je je je, yo te busque la concepcion de hombre de ese pascal! jaja =? jajaja, capaz.
ahora me voy a hacer programadora te amo
October 25th, 2007 - 10:41
Muy bueno el site man! segui asi que te vas para arriba
December 2nd, 2007 - 18:23
buena man muchas gracias
estaba medio preocupado..pero me aclaraste muchas dudas con el simple inc que le pusiste.. yo lo modifico un poco , le hago variable:=variable+1 asi le puedo restar uno o hacer un display en pantalla en el momento que se requiera… en fin te pasaste y sigue asi man y muchas gracias otra vez
January 8th, 2008 - 17:55
hola me gusta mucho tu pag,pero mira yo estoy estudiando para tecnico en informatica,y me lleve pasacal a marzo,por que el profesor me pide que utilize vectores pero asi por ej:array[1..5]of integer,que los numeros sean cargados en el vector por teclado,y que saque el valor maximo,el min y el promedio de los numeros si me podes ayudar te agradeceria mucho….
desde ya gracias esteban