nachopro yendo de la cama a la compu…

25Oct/074

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 ;)

Filed under: Uncategorized Leave a comment
Comments (4) Trackbacks (0)
  1. je je je, yo te busque la concepcion de hombre de ese pascal! jaja =? jajaja, capaz.
    ahora me voy a hacer programadora te amo

  2. Muy bueno el site man! segui asi que te vas para arriba

  3. 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

  4. 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


Leave a comment


*
Before you submit form:
Human test by Not Captcha

No trackbacks yet.

Pages

Categories

Blogroll

Archive

Meta