Pascal/Turbo Pascal - urgente para examen

 
Vista:
sin imagen de perfil

urgente para examen

Publicado por marios (58 intervenciones) el 31/03/2014 20:08:57
hola buenas amigos, alguien podria decirme como puedo rotar cada elemento de una matriz ingresa por teclado, una posicion adelante. es decir, llevar el elemento 2 a la posición 3 , luego llevar lo de la posición 3 a la 4, de la 4 (ídem) a la 5, de la 5 a la 6... de la última a la primera, y de la primera a la segunda.


cualquier ayuda es importante para avanzar gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

urgente para examen

Publicado por ramon (2158 intervenciones) el 01/04/2014 13:20:21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
{A ver si esto sirve}
 
program rotarmatriz;
 uses
    crt;
  const
     nume = 6;
  var
    matriz : array[0..nume - 1] of integer;
    i, t : integer;
 
  procedure entradamatriz(var s : array of integer);
  begin
     clrscr;
     i := 0;
     while i < nume do
     begin
         write('  Entre Num. ',i + 1,' : ');
         readln(s[i]);
         i := i + 1;
     end;
  end;
 
  procedure rotamatriz(d : array of integer);
  var
     h : integer;
     tec : char;
  begin
     i := 0;
   repeat
       t := d[i];
       repeat
          d[i] := d[i + 1];
          i := i + 1;
       until i > nume - 1;
       d[i - 1] := t;
       for i := 0 to nume - 1 do
       write(' ',d[i]);
       i := 0;
       writeln;
       writeln('  Para Segir Rotacion Pulse [S] Para Salir Pulse [N]');
       repeat
           tec := upcase(readkey);
       until tec in['S','N'];
       clrscr;
   until tec = 'N';
  end;
 
  begin
      entradamatriz(matriz);
      clrscr;
      rotamatriz(matriz);
  end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

urgente para examen

Publicado por marios (58 intervenciones) el 01/04/2014 14:39:19
hola ramon ante todo muchas gracias tio, eres increible de ayudar a los demas. ramon podrias indicarme el codigo de como seria imprimir toda la matriz, es decir es lo que tu haces en el codigo pero si fuera posible podrias indicarme la modificacion del codigo para que se imprima directamente la matriz, es decir:

si se da la matriz:
1 2 3
4 5 6
7 8 9

que el resultado fuera:

9 1 2
3 4 5
6 7 8

mil gracias ramon me salvas con esto creeme
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

urgente para examen

Publicado por Diego (98 intervenciones) el 01/04/2014 21:53:17
Buenas tardes, la matriz que ví en el código anterior es una matríz de 1x1 (osea un arreglo de 1 dimesión); y luego lo que hace en ese código es rotar hacia la izquierda; no hacia la derecha como al parecer se dice;
Para realizar el corrimeinto de la matriz primero tenes que saber de cuanto es (solo para declararla bien y que a la hora de imprimir te quede en la forma que quieres que se vea la matríz); ej : la matriz que escribiste es una matriz de 3x3;

comenzando del ultimo elemento de la última columna guardas todo los elementos en un arreglo de una dimension (vector) y retrocedes a la fila anterior hasta llegar a la primera fila.
luego dentro de los for downto que comienza en la anteultima columna lo único que tendrías que hacer es asignarle el valor que está en la posicion actual a la posición siguiente en esa fila; haciendo todo esa simple asignación hasta que se acaben los for down to te van a quedar casi odenados, pero la primera primera columna te va a quedar con el valor original; ahora lo que tenés que hacer es simplemente reemplazar los valores de la primera columna por los que guardaste en el arreglo y ya te queda ordenada.

Todo lo que te acabo de decir lo pensé así nomás, puede que no sea la manera más eficiente de realizarlo, pero si no me equivoco cumple con el objetivo; aunque creo es eficiente; si alguien nota algo malo o inecesario hagamelo saber.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

urgente para examen

Publicado por ramon (2158 intervenciones) el 02/04/2014 12:28:37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
{Mira esto es lo que quieres}
 
program rotarmatriz;
 uses
    crt;
  const
     nume = 9;
  var
    matriz : array[0..nume - 1] of integer;
    i, t : integer;
    lamatriz : array[1..nume div 2,1..nume div 2] of integer;
 
  procedure entradamatriz(var s : array of integer);
  begin
     clrscr;
     i := 0;
     while i < nume do
     begin
         write('  Entre Num. ',i + 1,' : ');
         readln(s[i]);
         i := i + 1;
     end;
  end;
 
  procedure rotamatriz(d : array of integer);
  var
     k, h : integer;
     tec : char;
  begin
     i := nume - 1;
   repeat
       t := d[i];
       repeat
          d[i] := d[i - 1];
          i := i - 1;
       until i < 0;
       d[i + 1] := t;
       i := 0;
       for k := 1 to (nume div 2) - 1 do
       begin
         for h := 1 to (nume div 2)  - 1 do
         begin
         lamatriz[k,h] := d[i];
         i := i + 1;
         end;
        end;
       for k := 1 to (nume div 2) - 1 do
       begin
         for h := 1 to (nume div 2) - 1 do
         begin
           write(' ',lamatriz[k,h]);
         end;
         writeln;
       end;
       i := nume - 1;
       writeln;
       writeln('  Para Segir Rotacion Pulse [S] Para Salir Pulse [N]');
       repeat
           tec := upcase(readkey);
       until tec in['S','N'];
       clrscr;
   until tec = 'N';
  end;
 
 
 
  begin
      entradamatriz(matriz);
      clrscr;
      rotamatriz(matriz);
  end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

urgente para examen

Publicado por marios (58 intervenciones) el 02/04/2014 15:23:59
mil gracias ramon , era lo que necesitaba, me has salvado, sin embargo y espero no incomodarte, podrias explicarme esta parte del codigo que hace:
1
2
3
4
5
6
7
8
i := 0;
for k := 1 to (nume div 2) - 1 do
begin
for h := 1 to (nume div 2) - 1 do
begin
lamatriz[k,h] := d[i];
i := i + 1;
end;
que es o que almacenas en d[i], aparte claro de ser un array

un abrazo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

urgente para examen

Publicado por marios (58 intervenciones) el 02/04/2014 17:07:15
ademas por favor explicame por que defines:

matriz : array[0..nume - 1] of integer; no seria lo mismo que de 1..nume?

y

lamatriz : array[1..nume div 2,1..nume div 2] of integer; porque o para que haces lo del div en la definicion de esta ,matriz, ??? gracias por resolver mis dudas para entender mas tu solucion, un abrazo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

urgente para examen

Publicado por marios (58 intervenciones) el 02/04/2014 17:32:43
OK RAMON YA ENTENDI LO QUE ESTAS HACIENDO., SIN EMBARGO ME GUSTARIA PEDIRTE SI PUDIERAS MODIFICAR TU SOLUCION TRABAJANDO DIRECTAMENTE LAS ROTACIONES DESDE LA MATRIZ SIN USAR UN VECTOR AUXILIAR, COMO PODRIA SER DE ESA FORMA RAMON?????

MUY AGRADECIDO CONTIGO HERMANO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

urgente para examen

Publicado por ramon (2158 intervenciones) el 03/04/2014 00:44:51
Intentare pasarte lo que pides.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

urgente para examen

Publicado por ramon (2158 intervenciones) el 03/04/2014 00:43:10
matriz : array[0..nume - 1] of integer; no seria lo mismo que de 1..nume? si seria lo mismo empezando en 1..nume

lamatriz : array[1..nume div 2,1..nume div 2] of integer; porque o para que haces lo del div en la definición de esta ,matriz,

la division es porque el array es de el doble que la matriz.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

urgente para examen

Publicado por ramon (2158 intervenciones) el 03/04/2014 00:38:24
Primero lo presento así para poder aumentar el valor de la matriz al aumentar nume sin tocar mas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

urgente para examen

Publicado por marios (58 intervenciones) el 03/04/2014 22:33:05
ok ramon espero tu solucion directamente operando desde la matriz muy amable de ante mano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar