Todoexpertos.com
http://www.todoexpertos.com
La respuesta está en Internet
Información de la pregunta
Título: una duda con las matrices en pascal
Experto: sergioyoplay
Valoración: 5
Fecha: 29/05/2009


una duda con las matrices en pascal
hola....mira mi problema esta en como puedo hacer para que un usuario me pida una matriz NxM y el programa me la llene auntomaticamente....tambien puede ser que el usuario la llene pero me intereza mas que la llene el programa por si solo
 
osea cual es la estructura de un programa asi....yo lo puedo hacer cuando NxM son iguales pero si son distintas no me sale
 
te pongo un ejemplo para que me entiendas
 
suponte que el usuario ingrese
 
N:=4 y M:=2
 
entonces la matriz me deberia quedar algo asi
 
1 2 3 4
 
1 2 3 4
 
como hago eso?????
 
tambien pueden ser otras NxM...con numeros muchos mas grandes y distintos
 
agradesco tu respuesta

una duda con las matrices en pascal
Verás. Esto son ARRAYS DINÁMICOS.
Veo que ya conoces lo que es un arreglo (ARRAY en inglés)-
Pues esta temática, he estado tratando de resolverla durante un largo rato, buscando información, y salvo que te metas con punteros (memoria dinámica) no podría ayudarte. Y no creo que sea lo que te piden, así que la única solución que te puedo ofrecer es que declares un array más grande de lo que prevéas que el usuario va a introducir, y para que la máquina lo rellene por sí sola, hagas algo así:
(...)
BEGIN
RANDOMIZE;//Crea una nueva semilla de números aleatorios
(...)
FOR i:=1 TO m DO
 FOR j:=1 TO n DO
  BEGIN
   matriz[m,n]:=RANDOM(HIGH(INTEGER));//Número aleatorio desde 0 hasta el más alto del tipo INTEGER -1 ya que RANDOM utiliza MOD por dentro.
   IF Random(2)=0 THEN  matriz[m,n]:=-matriz[m,n];//Para los signos, ya que el Random utiliza la operación algebraica MOD (Módulo)
  END;
(...)
END.

una duda con las matrices en pascal
yava...explicamelo otra vez q pascal me da un poco de errores cuando lo compilo
 
me da error cuando coloco esto
 
matriz[m,n]:=RANDOM(HIGH(INTEGER));
 
si me puedes colocar el programa especifico de como se crea la matriz...asi ya con todas las variables declaradas, y ya todo hecho...es para verlo mejor
 
agradesco tu respuesta

una duda con las matrices en pascal
Un ejemplillo compilado con FreePascal 2.2.0 (mi favorito^^)
PROGRAM Crea_Array_Aleatorio;
USES crt;
CONST m=3;
      n=3;
TYPE TMatriz=ARRAY[1..m,1..n] OF INTEGER;
VAR i,j:WORD;
    matriz:TMatriz;
PROCEDURE Rellenar_Matriz_RANDOM(VAR matriz:TMatriz);
 VAR i,j:WORD;
 begin
  RANDOMIZE;
  for i:=1 TO m DO
   for j:=1 TO n DO
    begin
     matriz[i,j]:=RANDOM(HIGH(INTEGER)+1);
     IF RANDOM(2)=0 THEN matriz[m,n]:=-matriz[m,n];
    end;
 end;
PROCEDURE Escribir_Matriz(matriz:TMatriz);
 VAR i,j:WORD;
 begin
  for i:=1 TO m DO
   begin
    for j:=1 TO n-1 DO
     begin
      write(matriz[i,j],'  ');
     end;
    writeln(matriz[i,n]);
   end;
 end;
begin
 CLRSCR;
 Rellenar_Matriz_RANDOM(matriz);
 Escribir_Matriz(matriz);
 write('Pulse una tecla para finalizar el programa...');
 READKEY;
end.
Cualquier duda, no dudes en preguntar xD

una duda con las matrices en pascal
gracias esta bastante bueno....pero se me originan dos dudas
 
1. porq los numero q me salen son mayormente negtivo e inmensos....en cual de todos los random hago para poder decir hasta donde quiero q lleguen los numero
 
2. como hago para q el NxM lo introduzca el usuario....osea si lo ejecuta bien...pero uno tiene q ingresar el numero....y si el usuario no quiere esa matriz si no una q el quiera en  donde modifico pra q me haga eso
 
gracias de antemano

una duda con las matrices en pascal
Respuesta 1: RANDOM(x) devuelve un número natural que ca desde 0..x-1 hasta x-1. Entonces, si quieres que te salgan números más pequeños, pues la "x" la pones más pequeña. El siguiente RANDOM (RANDOM(2)) es para que devuelva 2 valores: 0 ó 1, y dependiendo, le ponga signo negativo o no, porque como acabamos de ver, el RANDOM devuelve SOLO POSITIVOS. De algna manera había que meter los engativos aleatoriamente también, ¿no?
Respuesta 2: Las constantes m y n las pones GRANDES, como para que el usuario pueda meter el nº que quiera y siempre sea menor. Debes ser consciente de que está consumiendo TODA LA MEMORIA, aunque lego el usuario solo emplee "un trocito" (por si te lo preguntan, que sepas que no es lo más eficiente).
Entonces, el usuario metería el "mmax" y el "nmax", que podrían tomar valores entre 1..m y 1..n, de forma que el usuario pueda "crear" una "submatriz" dentro de la tuya. Solo le estás limitando en la grande, nada más. Entonces, en el procedimiento de crear aleatoriamente la matriz, le tendrías que añadir los 2 parámetros que metió el usuario:
PROCEDURE Rellenar_Matriz_RANDOM(VAR matriz:TMatriz;mmax,nmax:WORD{los "máximos" de la matriz del usuario});
Y en los bucles FOR que hay, pues en vez de hasta m y n, hasta mmax y nmax (que, repito, son más pequeñas o iguales a m y n); y al mostrar la matriz, igual. Que escriba soo los valores hasta los que escribió el usuario.

una duda con las matrices en pascal
igual que antes....me perdi en el ejercicio y no encontre el RANDOM (x) del que me hablas....tampoco pude hacer que me dejara de imprimir numero negativos...por mas que le haga cada vez que lo corro TODOS me dan numero NEGATIVOS
 
y tampoco tengo la mas minima idea de como hacer que lea una matriz NxM y que el N yel M los introduza el usuario
 
igual que antes me puedes colocar un ejercicio donde me aparesca esas cosas
 
disculpa la molestia....pero tiene que salir todo perfecto....XD

una duda con las matrices en pascal
Busca bien anda, que el RANDOM está dentro del procedimiento de rellenar la matriz.
No siempre salen negativos, ni siempre salen positivos. Es "aleatorio".
Si no quieres que salgan negativos, quita la parte del "IF RANDOM(2)=0 THEN (...);"

una duda con las matrices en pascal
ok....ya encontre en donde cambiarle lo del ramdom y ya vi cual era el q me colocaba los numero en negativos....ahora lo unico q me falta es saber el ciclo q tengo q hacer para q el NxM lo ingrese el usuario por pantalla y no sea predeterminao (con esto me refiero a q en el programa ya esta explicito q tiene q ser de ese tamaño)....yo se q se puede cambiar y ser mas grande la matriz
 
pero como te dije antes el programa tiene q ser perfecto y ese es el unico error q le queda

una duda con las matrices en pascal
PROGRAM Array_RANDOM;
USES crt;
CONST m=10;
            n=10;
VAR maxm,maxn:WORD;
PROCEDURE Rellenar_Matriz_RANDOM(VAR matriz:TMatriz;maxm,maxn:WORD);
 VAR i,j:WORD;
 begin
  RANDOMIZE;
  for i:=1 TO maxm DO
   for j:=1 TO maxn DO
    begin
     matriz[i,j]:=RANDOM(HIGH(INTEGER)+1);
     IF RANDOM(2)=0 THEN matriz[m,n]:=-matriz[m,n];
    end;
 end;
PROCEDURE Escribir_Matriz(matriz:TMatriz;maxm,maxn:WORD);
 VAR i,j:WORD;
 begin
  for i:=1 TO maxm DO
   begin
    for j:=1 TO maxn-1 DO
     begin
      write(matriz[i,j],'  ');
     end;
    writeln(matriz[i,maxn]);
   end;
 end;
begin
CLRSCR;
writeln('Introduzca el máximo de filas [1..',m,']:');
readln(maxm);
writeln('Introduzca el máximo de columnas [1..',n,']:');
readln(maxn);
//maxm y maxn deben ser menores o iguales a m y n respectivamente
CLRSCR;
Rellenar_Matriz_RANDOM(matriz,maxm,maxn);
 Escribir_Matriz(matriz,maxm,maxn);
 write('Pulse una tecla para finalizar el programa...');
 READKEY;
end;

Pregunta finalizada. Valoración: 5
gracias man....aunq el programa q me pasastes le faltaba declararle algunas variables....pero no importa....eran errores minimos q se solucionaban facil
 
en fin....te doy las 5 estrellas...y disculpa las molestias
 
proximamente te estare preguntando otra vez
 
saludos


Volver al mensaje
http://www.todoexpertos.com/categorias/tecnologia-e-internet/programacion/pascal/respuestas/2104126/una-duda-con-las-matrices-en-pascal