Ayudenme con Pascal

lindurita
15 de Julio del 2003
Wenas, tengo un problema relacionado con Maximos en pascal.Es un pequeño ejercicio que tengo para la uni, y la cosa es que me parece que todo esta bien,y no encuentro el fallo.

El problema es el siguiente: tengo un array de dos dimensiones, y quiero buscar los dos valores mas altos,erl maximo lo consigo facil, pero el segundo maximo pues no.

Si el maximo es la primera posicion,el segundo siempre sale mal,pero si el maximo es otra posicion, pues entonces sale bien.

De todas maneras si alguien me puede o quiere echar un mano, pues ya le enviaria el ejercicio. con lo que sea postead aqui.

Gracias y saludos en esta mi primera visita al foro!

Lindurita
15 de Julio del 2003
les ahorro toda la chapada del texto principal y pongo lo importante. Es un programa que te pide una clave,luego le introduces : disco/grupo/ventas, siendo un array de dos dimensiones, y mas tarde lo mismo con las puntuaciones.

Entonces el programa debe calcular lo siguiente:

a) grupo con mayor numero de copias vendidas
b) los dos discos mas vendidos
y lo mismo con las puntuaciones, pero eso ya seria (creo) lo mismo que con las ventas.
c)mas cosas, pero que ahora mismo no influyen en el ejercicio.

(una ultima anotacion,el apartado de grupos son dos, y lo mismo para los discos. yo les doy unas ventas de este modo:
disco/grupo/ventas
1 1 25
1 2 50
2 1 100
2 2 150

porque si pongo el que mayor ventas como grupo 1, disco 1, el segundo con mas ventas pues me sale uno cualquiera, o uno que no es el segundo con mas ventas: ESE es el fallo.
ahi va el ejercicio:

program InforBETA01;

uses wincrt;

const ClaveP='Tolkien';
TopeGrupos=3;
TopeDiscos=3;
TopePuntuacion=5;
CPuntuacion:array[1..TopePuntuacion] of string[100]=('Ni se te ocurra comprarlo','No merece la pena',
'Para fanaticos del grupo','Muy bueno','Excelente'); {CPuntuacion=Calificacion de la puntuacion}


var ClaveU:string[9]; {ClaveU=Clave Usuario}
ContOpor:byte; {ContOpor=Contador Oportunidades}
nVentas:array[1..TopeGrupos,1..TopeDiscos] of word; {Numero de Ventas de cada disco}
VentasGrupo:array[1..TopeGrupos] of longint;
Puntuaciones:array[1..TopeGrupos,1..TopeDiscos] of word; {Puntuaciones para cada disco}
PuntuacionesGrupo:array[1..topeGrupos] of longint;
dato,g,d,p,lider,mejorG1,mejorD1,mejorG2,mejorD2:longint; {g=Grupo;d=Disco;p=Puntuacion;v=variable para contar ventas,
lider=lider en ventas,mejorGrupo1,mejorDisco1}
v:word;

begin {Programa Principal}

{Comprobacion de la clave del usuario}

contopor:=0;
Repeat
writeln ('Introduce una clave:');Readln(ClaveU);
contopor:=contopor+1;
Until (claveU=ClaveP) or (contopor=3);
If ClaveU=ClaveP then
begin
writeln('Felicidades,has acertado');
Clrscr;
writeln('Pulsa una tecla para continuar');
ReadKey;

{Entrada de Datos}

For dato:=1 to (TopeGrupos*TopeDiscos) do
begin
writeln('Introduce grupo/disco/ventas');
read(g,d,v);
nVentas[g,d]:=v;
end;
For g:=1 to topegrupos do
begin
for d:=1 to topediscos do
write(nVentas[g,d]:6);
writeln;
end;
{Ventas de cada Grupo}
For g:=1 to TopeGrupos do
begin
VentasGrupo[g]:=0;
For d:=1 to TopeDiscos do
VentasGrupo[g]:=VentasGrupo[g]+nVentas[g,d];
end;

{Grupo con mas ventas}
lider:=1;
For g:=1 to TopeGrupos do
begin
If VentasGrupo[g]>VentasGrupo[lider] then
lider:=g;
end;
writeln('El grupo lider en ventas es: ',lider);
writeln('Las ventas del grupo lider son: ',VentasGrupo[lider],' copias.');

{Los dos discos mas vendidos}
{Disco 1º}

MejorG1:=1;MejorD1:=1;
For g:=1 to TopeGrupos do
begin
For d:=1 to TopeDiscos do
begin
IF nVentas[g,d]>nVentas[mejorG1,mejorD1] then
begin
mejorG1:=g;
mejorD1:=d;
end;
end;
end;

{Disco 2º}

writeln('Unidades del disco mas vendido:',nVentas[mejorG1,mejorD1]);
mejorG2:=1;mejorD2:=1;
If(mejorG1=1) and (mejorD1=1) then
mejorD2:=2;
writeln('Posicion mejorG2: ',mejorG2,'mejor discoD2: ',mejord2);
For g:=1 to TopeGrupos do
begin
For d:=1 to TopeDiscos do
begin
If (nVentas[g,d]>nVentas[mejorG2,mejorD2]) and (nVentas[mejorG1,mejorD2]<>nVentas[mejorG2,mejorD2]) then
begin
mejorG2:=g;
mejorD2:=d;

end;
end;
end;
writeln('Unidades del segundo disco mas vendido: ',nVentas[mejorG2,mejorD2]);

{ahora proceso con puntuaciones}
For dato:=1 to (TopeGrupos*TopeDiscos) do
begin
writeln;
writeln('Introduce Grupo/Disco/Puntuacion');
read(g,d,p);
puntuaciones[g,d]:=p;
end;

{Puntuacion de cada grupo}
For g:=1 to topeGrupos do
begin
PuntuacionesGrupo[g]:=0;
For d:=1 to TopeDiscos do
Puntuacionesgrupo[g]:=puntuacionesgrupo[g]+Puntuaciones[g,d];
end;

{Grupo con mas puntuacion}
lider:=1;
For g:=1 to topeGrupos do
begin
If PuntuacionesGrupo[g]>PuntuacionesGrupo[lider] then
lider:=g;
end;
writeln('El grupo con mas puntuacion es: ',lider);
writeln('La puntuacion del grupo lider es: ',Puntuacionesgrupo[lider]);

{Los dos discos con mas puntuacion}

{Disco 1º}

mejorG1:=1;MejorD1:=1;
If(mejorG1=1) and (mejorD1=1) then
For g:=1 to TopeGrupos do
begin
For d:=1 to topeDiscos do
begin
IF puntuaciones[g,d]>puntuaciones[mejorG1,mejorD1] then
begin
mejorG1:=g;
mejorD1:=d;
end;
end;
end;
writeln('La puntuacion del mejor disco es: ',puntuaciones[mejorG2,mejorD2]);

{Disco 2º}

mejorG2:=1;mejorD2:=1;
If(mejorG1=1) and (mejorD1=1) then
mejorD2:=2;

For g:=1 to TopeGrupos do
begin
For d:=1 to topeDiscos do
begin
If (Puntuaciones[g,d]>Puntuaciones[mejorG2,mejorD2]) and (g<>mejorG1) and (d<>mejorD1) then
begin
mejorG2:=g;
mejorD2:=d;

end;
end;
end;
writeln('Puntuacion del segundo disco: ',Puntuaciones[mejorG2,mejorD2]);

end
Else
writeln('Mala suerte,no has acertado');
write('Adios');

end.


Espero no haberme liado con la parte del enunciado, pero es que como no lo tengo aqui mismo delante, pues es como me ha salido.
Y gracias por intentar escharme una mano!!

Salu2


Tambien por ahi me han respondido lo siguiente:
Pues el fallo puede ser que:

Disco 2º}

writeln('Unidades del disco mas vendido:',nVentas[mejorG1,mejorD1]);
mejorG2:=1;mejorD2:=1;
If(mejorG1=1) and (mejorD1=1) then
mejorD2:=2;
writeln('Posicion mejorG2: ',mejorG2,'mejor discoD2: ',mejord2);
For g:=1 to TopeGrupos do
begin
For d:=1 to TopeDiscos do
begin
If (nVentas[g,d]>nVentas[mejorG2,mejorD2]) and (nVentas[mejorG1,mejorD2]<>nVentas[mejorG2,mejorD2]) then
begin
mejorG2:=g;
mejorD2:=d;

end;
end;
end;
writeln('Unidades del segundo disco mas vendido: ',nVentas[mejorG2,mejorD2]);

El if primero lo puedes quitar y poner directamente mejorD2:=2;
El fallo creo que lo puedes solucionar haciendo para el segundo disco como para el primero, pero tambien diciendola al programa que es menor el 1º disco que el 1º . a ver por ejemplo:



For i:=1 to Topegrupos do
For f:=1 to topediscos do
If (Nvetas[g,d]>nventas[mejorg2,mejord2]) and (Nventas[g,d]<nventas[mejorG1,Mejord1]) then

mejorG2:=g;
mejorD2:=d;

Creo que es asi no se si me he hecho un lio, pero bueno me parece que asi sale si no es asi que alguien me corrija o me lo dices.
venga suerte y un saludo
;


Espero que no este muy lioso, y muchas gracias por vuestra ayuda,de todas maneras deciros que hoy a la noche lo probare, ya que ahora mismo no puedo. con lo que sea posteare.

salu2