Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   alguien se anima a ayudarme? (https://www.clubdelphi.com/foros/showthread.php?t=86575)

vbeta 03-09-2014 16:33:52

alguien se anima a ayudarme?
 
hola y muy buenas a todos soy nuevo en el forro, y si estoy faltando a una regla lo siento (me lei parte de las reglas)
bueno el problema que tengo es en una con matrices la pregunta resumida va haci.


leer n notas de barios alumnos e introducir en una matriz donde la primer columna sea el nombre y las siguientes sus notas
a)sumarlas y calcular el promedio de cada alumno y colocarla en otra matriz
b)mostrar la mayor y menor nota mostrando el nombre y la nota del alumno en showmessage

si no es molestia pido el código para introducir a delphi lo que yo hice no me termina de hacer lo que dice las preguntas


seguramente para algunos sera tonta por que les es fácil, pero yo acabo de avanzar matrices y algo e entendido y me urge xq es lo ultimo de mi practico
seguramente muchos pasaran de mi (xq soy tonto) pero a ese alguien que me ayude le doy muchas gracias x su tiempo

duilioisola 03-09-2014 17:47:35

Lloran sangre mis ojos al leer tu mensaje :eek: :
"la pregunta resumida va haci" --> "va así"
"de barios alumnos" --> "de varios alumnos"

duilioisola 03-09-2014 17:57:07

En cuanto a la pregunta que haces:
Muestra el código que has hecho hasta ahora y dinos qué parte es la que no hace lo que quieres.

En cuanto a matrices:
En Pascal, tienen que ser de un mismo tipo, por lo que mezclar caracteres (nombre) con números (notas) no es posible en una sola.
Una cosa que puedes hacer es una matriz de 2 x n elementos de tipo string y luego transformar las notas de número a string para guardarlas y de string a número para calcularlas.

Otra opción es tener dos matrices de n elementos. Una de tipo string para los nombre y otra de tipo numérico (double, por ejemplo) para las notas.
Esta última opción no es lo que te piden, pero es una forma práctica de solucionar el tema.

Buscar el menor/mayor, lo puedes hacer con un bucle FOR que recorra la matriz y guarde la posición del mayor/menor.
El promedio se soluciona de la misma forma. Recorres los elementos con un bucle FOR y vas acumulando los valores. Una vez tengas la suma, la divides por la cantidad de elementos y le presentas..

vbeta 03-09-2014 19:15:33

Código Delphi [-]
var
  n,m,i,j,nota,apro,repro: Integer;
begin
  n:= StrToInt(txt1.Text);
  m:= StrToInt(txt2.Text);
  gr1.RowCount:= n;
  gr1.ColCount:= m;
  i:= 0;
  j:= 0;
  apro:= 0;
  repro:= 0;
  while (i < n) Do
  Begin
    notas[i,j]:= InputBox('Notas','Ingrese El Nombre','');
    gr1.cells[j,i]:= notas[i,j];
    i:= i+1;
  End;
  i:=0;
  j:=1;
  while (i < n) Do
  Begin
    nota:= StrToInt(InputBox('Notas','Ingrese La Nota',''));
    If ((nota>=0) And (nota<=10)) Then
    Begin
      matriz[i,j]:= nota;
      gr1.cells[j,i]:= IntToStr(matriz[i,j]);
    End
    Else
    Begin
      Showmessage('La nota es erronea');
      nota:= StrToInt(InputBox('Notas','Ingrese La Nota',''));
      notas[i,j]:= IntToStr(nota);
      gr1.cells[j,i]:= notas[i,j];
    End;
    i:= i+1;
    If (nota >= 5) Then
    Begin
      apro:= apro+1;
    End
    Else
    Begin
      repro:= repro+1;
    End;
  End;
  txta.Text:= IntToStr(apro);
  txtr.Text:= IntToStr(repro);

mi problema es que solo estoy llenando una columna y deja de pedirme las notas y lo que quiero es llenar la cantidad de columnas según yo decida cuantas columnas introducir (si c me entiende?)
perdón por lo de tus ojos espero que te mejores :)

juanelo 03-09-2014 20:02:13

Cita:

Empezado por vbeta (Mensaje 480690)
perdón por lo de tus ojos espero que te mejores :)

:D:D:D ... me he partido de la risa ... :p

ecfisa 03-09-2014 20:10:45

Hola vbeta, bienvenido a Club Delphi :)

Una consulta, en la grilla que creo es un StringGrid, ¿ Las columnas representan los nombres de alumnos y las filas a las notas, o es al revés ?



(fuera de tópico)
Cita:

Empezado por vbeta (Mensaje 480690)
perdón por lo de tus ojos espero que te mejores :)

Eso ha sido muy considerado de tu parte... :D

Saludos :)

vbeta 03-09-2014 20:22:45

1 Archivos Adjunto(s)
si eso mismo es un stringGrid e ingreso la dimensión de la matriz y la primer columna es de los nombres y las filas es de notas pero solo consigo 1 nota y termina el bucle ...como se ve en mi imagen

Casimiro Notevi 03-09-2014 20:32:56

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

ecfisa 03-09-2014 21:56:08

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; //+2 por nombre y promedio
    RowCount:= StrToInt(EditNroAlum.Text)+ 1; // +1 por los títulos
    // títulos
    Cells[0,0]:= 'Nombre';
    for c:= 1 to ColCount-1 do Cells[c, 0]:= 'Nota '+IntToStr(c);
    Cells[ColCount-1,0]:= 'Promedio';
    //carga
    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;
    // promedio en la última columna
    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;
  // notas mínima y máxima en dos labels
  LabelMinNota.Caption:= Format('Nota máxima: %8.2f',[max]);
  LabelMaxNota.Caption:= Format('Nota mínima: %8.2f',[min]);
end;



Saludos :)

vbeta 03-09-2014 22:44:20

jaja muchas gracias
estaba apunto de salir y vi tu respuesta gracias por la molestia tu respuesta me ayuda bastante :D


La franja horaria es GMT +2. Ahora son las 07:14:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi