elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
12 Octubre 2008, 08:46  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General (Moderadores: Hendrix, E0N)
| | |-+  Matrices en Pascal (duda)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Imprimir
Autor Tema: Matrices en Pascal (duda)  (Leído 1762 veces)
Lauta

Desconectado Desconectado

Mensajes: 343



Ver Perfil
Re: Matrices en Pascal (duda)
« Respuesta #15 en: 19 Mayo 2008, 00:14 »

Tengo otro problemita, que es que el programa tiene un menú y cuando uno realiza una acción y termina de ejecutarla tiene que preguntar si se desea seguir y en caso afirmativo mostrar de nuevo el menú, pero mi programa no pregunta y muestra de nuevo el menú directamente  >:(

Dejo el código del cuerpo principal del programa, cualquier cosa pongo el código entero lo que pasa es que es muy largo...(menu es un procedimiento :P)

Código:
while Ingreso<>'n' do
           begin
                menu(Eleccion);
                clrscr;
                writeln('Desea seguir utilizando el programa? s/n ');
                read(Ingreso);
           end;
En línea

TODOS LOS MANUALES DE PROGRAMACION!!!

Quieres ganar dinero? Clickea en alguno de los enlaces y empieza ya!!!
Daddybux
Bux.to
Adverbux
Dailyclick
barbate

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: Matrices en Pascal (duda)
« Respuesta #16 en: 19 Mayo 2008, 00:30 »

Sí, pero el que dije yo también funciona :D

Código:
Procedure Maximo(a:TMatriz;var b:TPosiciones;n,m:integer);
Var i,j,k,max,posicion:integer;
Begin
     Max:=a[1,1];
     posicion:=0;

     for i:=1 to n do
         for j:=1 to m do
             begin
                  if a[i,j]>max then
                     begin
                          max:=a[i,j];
                          posicion:=1;
                          b[posicion].fila:=i;
                          b[posicion].columna:=j;
                     end
                  else if a[i,j]=max then
                          begin
                               posicion:=posicion+1;
                               b[posicion].fila:=i;
                               b[posicion].columna:=j;
                          end;
             end;
         writeln('El valor maximo es: ',max,' y aparece en las posiciones: ');
         for k:=1 to posicion do writeln('[',b[k].fila,',',b[k].columna,']');
End;

 ;)

En el ultimo for, para imprimir los datos, puedes utilizar i o j para ahorrarte una variable.

s2
En línea
barbate

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: Matrices en Pascal (duda)
« Respuesta #17 en: 19 Mayo 2008, 00:36 »

Tengo otro problemita, que es que el programa tiene un menú y cuando uno realiza una acción y termina de ejecutarla tiene que preguntar si se desea seguir y en caso afirmativo mostrar de nuevo el menú, pero mi programa no pregunta y muestra de nuevo el menú directamente  >:(

Dejo el código del cuerpo principal del programa, cualquier cosa pongo el código entero lo que pasa es que es muy largo...(menu es un procedimiento :P)

Código:
while Ingreso<>'n' do
           begin
                menu(Eleccion);
                clrscr;
                writeln('Desea seguir utilizando el programa? s/n ');
                read(Ingreso);
           end;

esto mejor con un repeat, ya que el codigo se ejecuta por lo menos una vez.

s2
En línea
Shiro_himura

Desconectado Desconectado

Mensajes: 77



Ver Perfil WWW
Re: Matrices en Pascal (duda)
« Respuesta #18 en: 19 Mayo 2008, 00:43 »

barbate tiene razón, si hay algo que como mínimo se va ejecutar una vez un repeat, de todas formas yo necesito más código para saber que falla puesto que ahí no veo ningún error.
En línea



sudo rm -r ./religiones

No eres Dios, así que te jodes >_<
cΔssiΔnі

Desconectado Desconectado

Mensajes: 548


Ver Perfil
Re: Matrices en Pascal (duda)
« Respuesta #19 en: 19 Mayo 2008, 00:45 »

Si es muy largo subelo a algún servidor y colocas el enlace acá...  :rolleyes:
En línea
Lauta

Desconectado Desconectado

Mensajes: 343



Ver Perfil
Re: Matrices en Pascal (duda)
« Respuesta #20 en: 19 Mayo 2008, 02:49 »

Acá dejo el link al código. No es que sea muy largo, pero para el foro me parece que sí :P

En cuanto a lo del repeat, tendré en cuenta la sugerencia, no sé porque no me gusta usar repeats :P, pero igual creo que ese no es el error.

http://rapidshare.com/files/115928040/TP2.txt.html

Gracias por las ayudas!
En línea

TODOS LOS MANUALES DE PROGRAMACION!!!

Quieres ganar dinero? Clickea en alguno de los enlaces y empieza ya!!!
Daddybux
Bux.to
Adverbux
Dailyclick
cΔssiΔnі

Desconectado Desconectado

Mensajes: 548


Ver Perfil
Re: Matrices en Pascal (duda)
« Respuesta #21 en: 19 Mayo 2008, 06:06 »

A ver pruebalo así...

Código
repeat
  clrscr;
  menu;
  clrscr;
  write('Desea seguir utilizando el programa? No --> n');
until upcase(readkey) = 'N'

Hay pequñeses en el code haciendo cosas que no deberian, pero tengo sueño, trata de resolverlo.  :-\

¿Qué le pasas como parámetro a la rutina menu?  :huh:

tengo sueño.. saludos!!!  ;)

pd: después sigo revisando, tienes una sopa de letra...  :P
« Última modificación: 19 Mayo 2008, 06:09 por cΔssiΔnі » En línea
Lauta

Desconectado Desconectado

Mensajes: 343



Ver Perfil
Re: Matrices en Pascal (duda)
« Respuesta #22 en: 20 Mayo 2008, 01:39 »

A ver pruebalo así...

Código
repeat
  clrscr;
  menu;
  clrscr;
  write('Desea seguir utilizando el programa? No --> n');
until upcase(readkey) = 'N'

Hay pequñeses en el code haciendo cosas que no deberian, pero tengo sueño, trata de resolverlo.  :-\

¿Qué le pasas como parámetro a la rutina menu?  :huh:

tengo sueño.. saludos!!!  ;)

pd: después sigo revisando, tienes una sopa de letra...  :P

A menu le paso la variable eleccion como parametro, quizás me confundi y no la puse. En cuanto a lo de la sopa de letras :P si me señalas más errores te lo agradezco.


EDITO: cuando en el:
   write('Desea seguir utilizando el programa? No --> n');
until upcase(readkey) = 'N'

presiono una tecla que no sea n, me repite la pregunta. en cambio, si aprieto n se sale solo...
« Última modificación: 20 Mayo 2008, 02:23 por Lauta » En línea

TODOS LOS MANUALES DE PROGRAMACION!!!

Quieres ganar dinero? Clickea en alguno de los enlaces y empieza ya!!!
Daddybux
Bux.to
Adverbux
Dailyclick
Shiro_himura

Desconectado Desconectado

Mensajes: 77



Ver Perfil WWW
Re: Matrices en Pascal (duda)
« Respuesta #23 en: 20 Mayo 2008, 10:18 »



EDITO: cuando en el:
   write('Desea seguir utilizando el programa? No --> n');
until upcase(readkey) = 'N'

presiono una tecla que no sea n, me repite la pregunta. en cambio, si aprieto n se sale solo...


until significa que sigue realizando el repeat hasta que, en este caso, readkey = N, por tanto cuando pulsas N es cuando se sale.

En línea



sudo rm -r ./religiones

No eres Dios, así que te jodes >_<
Lauta

Desconectado Desconectado

Mensajes: 343



Ver Perfil
Re: Matrices en Pascal (duda)
« Respuesta #24 en: 20 Mayo 2008, 22:32 »


until significa que sigue realizando el repeat hasta que, en este caso, readkey = N, por tanto cuando pulsas N es cuando se sale.


Sí, pero tendría que comenzar el ciclo de nuevo, no saltar al write y readkey directamente, tendria que ir al procedimiento menu

Código:
repeat
   clrscr;
   menu(eleccion);
   clrscr;
   write('Desea seguir utilizando el programa? No --> n');
until upcase(readkey) = 'N'
En línea

TODOS LOS MANUALES DE PROGRAMACION!!!

Quieres ganar dinero? Clickea en alguno de los enlaces y empieza ya!!!
Daddybux
Bux.to
Adverbux
Dailyclick
cΔssiΔnі

Desconectado Desconectado

Mensajes: 548


Ver Perfil
Re: Matrices en Pascal (duda)
« Respuesta #25 en: 20 Mayo 2008, 23:21 »

Sigo sin entender para que haces esto:
Código
menu(eleccion);

A mi parecer no hace falta que le pases algo como parámetro.  :P

Por alguna razón luego de mostrarte el mensaje, muestra el menú, pero no captura la selección, por eso sale de la rutina menú y te vuelve a mostrar el mensaje de salida.

Para solucionarlo, cambia el tipo de la variable "eleccion" a integer y obviamente deberás retocar el case dentro de la rutina menú, ya que no podrás hacer comparaciones usando comillas simples (simplemente quítaselas), te recomiendo que le hagas una 7ma opción al menú, que sea "Salir del programa o algo así" y dentro de ella colocas el write que hace la famosa pregunta de confirmación de salida, sino te sale vuelve a preguntar, como te dije antes, mientras tenga un poco de tiempo te ayudo.

¡Saludos!
En línea
Shiro_himura

Desconectado Desconectado

Mensajes: 77



Ver Perfil WWW
Re: Matrices en Pascal (duda)
« Respuesta #26 en: 21 Mayo 2008, 10:42 »

Haz lo que te ha dicho cassiani me parece correcto, aunque yo creo que el problema es el segundo clrscr, por alguna razón (la desconozco)lo hace seguidamente al menú. Me explico: sale el menú elección pero como luego esta el clrscr, te limpia la pantalla y te sale la pregunta de si quieres continuar.
En línea



sudo rm -r ./religiones

No eres Dios, así que te jodes >_<
Lauta

Desconectado Desconectado

Mensajes: 343



Ver Perfil
Re: Matrices en Pascal (duda)
« Respuesta #27 en: 21 Mayo 2008, 14:06 »

Bueno, creo que ya lo solucioné gracias a sus ayudas  ;D

Acá el código funcionando bien:

Ah, alguién me podría explicar un poco el tema de VALIDAR en Pascal?

Código:
Program TP2;

Uses crt;

Type
    TRegUsuario= record
                 usuario:string[20];
                 clave:string[20];
                 end;
    TArrayUsuario=array[1..4]of TRegUsuario;
    TMatriz=array[1..100,1..100]of integer;
    TVector=array[1..100]of integer;
    TRegPosiciones=record
                   fila:integer;
                   columna:integer;
                   end;
    Tposiciones=array[1..100]of TRegPosiciones;

Var n,m:integer;
    Usuarios:TArrayUsuario;
    Ingreso:boolean;
    Posiciones:TPosiciones;
    Fila,Columna:integer;
    Matriz1,Matriz2,Matriz_Suma:TMatriz;
    Vector:TVector;

Procedure Usuario(a:TArrayUsuario;var Ingreso:boolean);
Var
   i:integer;
   usuario,clave:string[20];

Begin
     Ingreso:=false;
     i:=1;
     repeat
           begin
                writeln('Recuerde que el usuario y clave son CASE SENSITIVE.');
                writeln('Ingrese el usuario: ');
                readln(usuario);
                writeln('Ingrese la clave');
                readln(clave);
                clrscr;
                if (usuario=a[1].usuario)and(clave=a[1].clave)then
                   begin
                        Ingreso:=true;
                        i:=4;
                        writeln('Ingreso exitoso');
                   end;
                if (usuario=a[2].usuario)and(clave=a[2].clave)then
                   begin
                        Ingreso:=true;
                        i:=4;
                        writeln('Ingreso exitoso');
                   end;
                if (usuario=a[3].usuario)and(clave=a[3].clave)then
                   begin
                        Ingreso:=true;
                        i:=4;
                        writeln('Ingreso exitoso');
                   end;
                if (usuario=a[4].usuario)and(clave=a[4].clave)then
                   begin
                        Ingreso:=true;
                        i:=4;
                        writeln('Ingreso exitoso');
                   end
                   else i:=i+1;
           End;
      until (i>3) or (Ingreso=true);
      clrscr;
End;

Procedure Dimension(var n:integer;var m:integer);
Begin
     Writeln('Ingrese el numero de filas de la matriz');
     Read(n);
     Writeln('Ingrese el numero de columnas de la matriz');
     Read(m);
End;

Procedure Imprime_Matriz(a:TMatriz;n,m:integer);
Var i,j:integer;
Begin
     For i:=1 to n do
         begin
              if i<>1 then writeln();
              For j:=1 to m do
                  write(a[i,j],' ');
         end;
End;

Procedure Carga_Matriz(var a:TMatriz;n,m:integer);
Var i,j:integer;
Begin
     For i:=1 to n do
         for j:=1 to m do
             begin
                  Writeln('Ingrese el elemento [',i,',',j,']');
                  Read(a[i,j]);
             end;
End;

Procedure Suma_Matrices(Matriz1,Matriz2:TMatriz;var c:TMatriz;n,m:integer);
Var i,j:integer;
Begin
     for i:=1 to n do
         begin
              for j:=1 to m do
                  begin
                       c[i,j]:=Matriz1[i,j]+Matriz2[i,j];
                  end;
         end;
End;

Function Suma_Fila(a:TMatriz;m,fila:integer):integer;
Var i,suma:integer;
Begin
     suma:=0;
     for i:=1 to m do suma:=suma+a[fila,i];
     Suma_Fila:=suma;
End;

Function Suma_Columna(a:TMatriz;n,columna:integer):integer;
Var i,suma:integer;
Begin
     suma:=0;
     for i:=1 to n do suma:=suma+a[i,columna];
     Suma_Columna:=suma;
End;

Function Diagonal(a:TMatriz;n,m:integer):longint;
Var i:integer;resultado:longint;
Begin
     resultado:=1;
     if n<m then
        for i:=1 to n do resultado:=resultado*a[i,i]
     else
         for i:=1 to m do resultado:=resultado*a[i,i];
     Diagonal:=resultado;
End;

Procedure Pasar_Vector(a:TMatriz;var b:TVector;n,m:integer);
Var i,j,k,dim_vector:integer; suma:longint; promedio:real;
Begin
     suma:=0;
     For i:=1 to n do For j:=1 to m do suma:=suma+a[i,j];
     promedio:=suma/(n*m);
     Writeln('El promedio es: ',promedio:2:2);

     k:=0;
     for i:=1 to n do
         for j:=1 to m do
             if a[i,j]<promedio then
                begin
                     k:=k+1;
                     b[k]:=a[i,j];
                end;
     dim_vector:=k;

     for k:=1 to dim_vector do write(b[k],' ');
End;

Procedure Maximo(a:TMatriz;var b:TPosiciones;n,m:integer);
Var i,j,k,max,posicion:integer;
Begin
     Max:=a[1,1];
     posicion:=0;

     for i:=1 to n do
         for j:=1 to m do
             begin
                  if a[i,j]>max then
                     begin
                          max:=a[i,j];
                          posicion:=1;
                          b[posicion].fila:=i;
                          b[posicion].columna:=j;
                     end
                  else if a[i,j]=max then
                          begin
                               posicion:=posicion+1;
                               b[posicion].fila:=i;
                               b[posicion].columna:=j;
                          end;
             end;
         writeln('El valor maximo es: ',max,' y aparece en las posiciones: ');
         for k:=1 to posicion do writeln('[',b[k].fila,',',b[k].columna,']');
End;

Procedure Menu;
Var eleccion:integer;
Begin
     Writeln('¿Que operacion desea realizar? ');
     Writeln('1-Suma de matrices');
     Writeln('2-Valor maximo');
     Writeln('3-Sumar una fila a elegir');
     Writeln('4-Sumar una columna a elegir');
     Writeln('5-Pasar a un vector los valores de las posiciones que estan por debajo del promedio');
     Writeln('6-Multiplicar los elementos de la diagonal principal e informar el resultado');
     Readln(eleccion);
     clrscr;

     case eleccion of
     1: begin
              Dimension(n,m);
              clrscr;
              writeln('Ingrese los valores de la Matriz 1: ');
              Carga_Matriz(Matriz1,n,m);
              clrscr;
              writeln('Ingrese los valores de la Matriz 2: ');
              Carga_Matriz(Matriz2,n,m);
              clrscr;
              writeln('Matriz 1: ');
              Imprime_Matriz(Matriz1,n,m);
              writeln();
              writeln('Matriz 2: ');
              Imprime_Matriz(Matriz2,n,m);
              writeln();
              writeln('Presione una tecla para continuar ');
              readkey();
              Suma_Matrices(Matriz1,Matriz2,Matriz_Suma,n,m);
              clrscr;
              writeln('Resultado: ');
              Imprime_Matriz(Matriz_Suma,n,m);
         end;
     2 :begin
              Dimension(n,m);
              clrscr;
              writeln('Ingrese los elementos de la Matriz: ');
              Carga_Matriz(Matriz1,n,m);
              clrscr;
              Imprime_Matriz(Matriz1,n,m);
              writeln();
              writeln('Presione una tecla para continuar ');
              readkey();
              Maximo(Matriz1,Posiciones,n,m);
         end;
     3 :begin
              Dimension(n,m);
              clrscr;
              Carga_Matriz(Matriz1,n,m);
              clrscr;
              Imprime_Matriz(Matriz1,n,m);
              writeln();
              writeln('Presione una tecla para continuar ');
              readkey();
              Writeln('Ingrese el numero de fila que desee sumar: ');
              Readln(Fila);
              clrscr;
              Writeln('El resultado de sumar la fila ',fila,' es: ',Suma_Fila(Matriz1,m,fila));
         end;
     4: begin
              Dimension(n,m);
              clrscr;
              Carga_Matriz(Matriz1,n,m);
              clrscr;
              Imprime_Matriz(Matriz1,n,m);
              writeln();
              writeln('Presione una tecla para continuar ');
              readkey();
              Writeln('Ingrese el numero de columna que desee sumar ');
              Readln(Columna);
              clrscr;
              Writeln('El resultado de sumar la columna ',columna,' es: ',Suma_Columna(Matriz1,n,columna));
         end;
     5: begin
              Dimension(n,m);
              clrscr;
              Carga_Matriz(Matriz1,n,m);
              clrscr;
              Imprime_Matriz(Matriz1,n,m);
              writeln();
              writeln('Presione una tecla para continuar ');
              readkey();
              clrscr;
              Pasar_Vector(Matriz1,Vector,n,m);
         end;
     6: begin
              Dimension(n,m);
              clrscr;
              Carga_Matriz(Matriz1,n,m);
              clrscr;
              Imprime_Matriz(Matriz1,n,m);
              writeln();
              writeln('Presione una tecla para continuar ');
              readkey();
              writeln();
              Writeln('El resultado de multiplicar todos los elementos de la diagonal es: ',Diagonal(Matriz1,n,m));
         end;
     end; //Fin Case
End;

Begin //PROGRAMA PRINCIPAL!!!!!!
     Usuarios[1].usuario:='Administrador';
     Usuarios[1].clave:='AyPI';
     Usuarios[2].usuario:='algo1';
     Usuarios[2].clave:='7540';
     Usuarios[3].usuario:='7540';
     Usuarios[3].clave:='03';
     Usuarios[4].usuario:='uba';
     Usuarios[4].clave:='fiuba';

     textcolor(11);
     Usuario(Usuarios,Ingreso);
     if Ingreso then
     begin
          repeat
                 clrscr;
                 menu;
                 readkey();
                 clrscr;
                 write('Desea seguir utilizando el programa? s/n');
          until upcase(readkey)='N';
     end;
End.
En línea

TODOS LOS MANUALES DE PROGRAMACION!!!

Quieres ganar dinero? Clickea en alguno de los enlaces y empieza ya!!!
Daddybux
Bux.to
Adverbux
Dailyclick
Lauta

Desconectado Desconectado

Mensajes: 343



Ver Perfil
Re: Matrices en Pascal (duda)
« Respuesta #28 en: 22 Mayo 2008, 21:14 »

A ver tengo que validar los valores para la matriz que son ingresados por teclado, hice este código:

Código:
Procedure Carga_Matriz(var a:TMatriz;n,m:integer);
Var i,j:integer;validar:string;code:integer;
Begin
     For i:=1 to n do
         for j:=1 to m do
             begin
                  code:=1;
                  while code<>0 do
                        begin
                             Writeln('Ingrese el elemento [',i,',',j,']');
                             Read(validar);
                             val(validar,a[i,j],code);
                        end;
             end;
End;

Pero cuando lo ejecuto entra en un bucle sin fin de impresiones de 'Ingrese el elemento...' y me ignora las otras dos acciones dentro del while. Alguna ayuda?
En línea

TODOS LOS MANUALES DE PROGRAMACION!!!

Quieres ganar dinero? Clickea en alguno de los enlaces y empieza ya!!!
Daddybux
Bux.to
Adverbux
Dailyclick
barbate

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: Matrices en Pascal (duda)
« Respuesta #29 en: 24 Mayo 2008, 17:18 »

code simpre vale 0?
En línea
Páginas: 1 [2] 3 Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC
Free counter and web stats