Hola se que este post es bastante antiguo, pero el codigo que aparece no soluciona lo que pide el ejercicio e incluso entra en un loop infinito.
La estrategia para resolverlo está inicialmente en pensarlo como un Lote de números dividido por 0 pero inicialmente completos con valores en cada sublote. Una vez se lo tiene diagramado y con la estrategia armada ver en que partes es necesario mostrar por pantalla antes ya que no se está usando memoria dinámica ni archivos. Los nombres de las variables en c o pascal son algo dificil de elegir, no son aveces lo suficientemente expresivos.. les dejo el codigo del ejercicio de Lotes que funciona correctamente sin el uso de procedimientos ni funciones.
Program MI23;
Uses
Crt;
Var
Nro, Suma, Mayor,Minimo:Longint;
PrimerMin,PrimerMy:Boolean;
Cont,Sublote,PosLote,PosMy,SubloteMy:Word;
Begin
Writeln('Ingrese un entero para el lote, Finalize con uno negativo o Separe sublotes con un cero :');
Readln(Nro);
ClrScr;
If Nro = 0 Then
Begin
Sublote:=1;
Writeln('El Sublote ',Sublote,'° no tiene datos.');
Writeln('Aprete enter para continuar.');
Readln;
ClrScr;
end
Else
Begin
Sublote:=0;
end;
PrimerMy:=True;
While Nro >= 0 do
Begin
Sublote:=Sublote + 1;
PrimerMin := true;
posLote:= 0;
suma:= 0;
Cont:=0;
repeat
Begin
If nro <>0 then
Begin
suma:=suma + Nro;
Cont:=Cont + 1;
PosLote:=PosLote + 1;
If PrimerMy or (Nro>Mayor) Then
Begin
Mayor:=Nro;
PosMy:=PosLote;
SubloteMy:= Sublote;
PrimerMy:=False
end;
If PrimerMin or (Nro<Minimo) Then
Begin
Minimo:=Nro;
PrimerMin:=False;
End;
end;
Writeln('Ingrese otro entero para el lote, Finalize con uno negativo o Separe sublote con un Cero:');
Readln(Nro);
ClrScr;
end;
until nro <= 0;
If Cont<>0 Then
Begin
Writeln('El promedio del sublote es:',suma/cont:10:2);
Writeln('El Valor minimo del sublote ',Sublote,' es ',Minimo,'.');
Writeln('Presione enter para continuar.');
Readln;
ClrScr;
end
Else
Begin
Writeln('El sublote ', Sublote,'° no tiene datos.');
Writeln('Aprete enter para continuar.');
REadln;
ClrScr;
End;
ClrScr;
end;
If PrimerMy Then
If Sublote = 0 Then
Writeln('El Lote esta vacio.')
Else
Writeln('Hay ',Sublote,' sublotes vacios.')
Else
Begin
Writeln('Hay ', sublote,' sublotes y el valor mayor ingresado es ',mayor,'.');
Writeln('se encontro en el sublote ',SubloteMy,'° en ',PosMy,'° Posicion.');
end;
Readln;
end.]