Hola vbeta.
Hice un ejemplo al vuelo a fin de que te pueda guiar un poco, traté de respetar las formas de tu código. Toma en cuenta que no realiza ningún tipo de verificación de los datos ingresados ni tiene decorado alguno. Y por supuesto, como todo código a las corridas, que no es la única ni la mejor manera de hacerlo.
Tampoco pasa los datos a otro arreglo bidimensional, que es sólo recorrer filas y columnas del StringGrid y copiar valores de celdas, dejo esa tarea (y las que resten) en tus manos
Código Delphi
[-]
procedure TForm1.btnComenzarClick(Sender: TObject);
var
c,f: Integer;
apro, repro: Integer;
nom: string;
nta, max, min, sum: Double;
begin
with StringGrid1 do
begin
FixedCols:= 0;
FixedRows:= 1;
ColCount:= FixedCols + StrToInt(EditNroNota.Text) +2; RowCount:= StrToInt(EditNroAlum.Text)+ 1; Cells[0,0]:= 'Nombre';
for c:= 1 to ColCount-1 do Cells[c, 0]:= 'Nota '+IntToStr(c);
Cells[ColCount-1,0]:= 'Promedio';
min:= MaxInt;
max:= 0;
for f:= FixedRows to RowCount-1 do
begin
c:= 0;
Cells[c,f]:= InputBox('Notas', 'Ingrese El Nombre','');
while c < ColCount-2 do
begin
Inc(c);
Cells[c, f]:= InputBox('Notas','Ingrese La Nota','');
nta:= StrToFloat(Cells[c,f]);
if nta < min then min:= nta;
if nta > max then max:= nta
end;
end;
for f:= FixedRows to RowCount-1 do
begin
sum:= 0;
for c:= FixedCols+1 to ColCount-2 do
sum:= sum + StrToFloat(Cells[c,f]);
Cells[ColCount-1, f]:= Format('%8.2f',[sum/(ColCount-2)]);
end;
end;
LabelMinNota.Caption:= Format('Nota máxima: %8.2f',[max]);
LabelMaxNota.Caption:= Format('Nota mínima: %8.2f',[min]);
end;
Saludos