Pascal/Turbo Pascal - ¿?¿?¿?

   
Vista:

¿?¿?¿?

Publicado por Luis (33 intervenciones) el 30/05/2012 03:46:39
Como hago para q este codigo me quede en espiral¿? y no en columnas como aparece utilizando los mismos datos y los mismo for y el array osea sin modificar casi nada el codigo ayudaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

program matrices;
uses crt;
type
tabla=array [1..4,1..4]of integer;
var
matiz:tabla;
i,j:integer;
begin
clrscr;
for i:=1 to 4 do
for j:= 1 to 4 do
begin
gotoxy(25, 10);
write('matriz[',i,',',j,']=');
readln(matiz[i,j]);
end;
clrscr;
writeln('la matiz':31);
writeln; writeln;
for i:=1 to 4 do
begin
for j:= 1 to 4 do
write(matiz[i,j]:10);
writeln
end;
readkey
end.
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

¿?¿?¿?

Publicado por ramon (2072 intervenciones) el 30/05/2012 16:30:04
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
{Esto es lo mínimo que puedo hacer sin tocar demasiado el programa fíjate que
para escribir de la forma de espiral se tiene que diseccionar la posición del cursor
a la zona deseada yo te lo realizo por mediación de una constante tu puedes intentarlo
de otra forma.
El array que pongo es para poder leer y presentar los datos.}
 
program matrices;
uses crt;
const
    espira : array[1..16] of array[1..2] of integer = (
      (1,1),(4,1),(7,1),(10,1),(10,3),(10,5),(10,7),
      (7,7),(4,7),(1,7),(1,5),(1,3),(4,3),(7,3),
      (7,5),(4,5));
type
tabla=array [1..4,1..4]of integer;
var
matiz:tabla;
t, y, i,j:integer;
numeros : array[1..16] of integer;
 
begin
clrscr;
for i:=1 to 4 do
for j:= 1 to 4 do
begin
gotoxy(25, 10); write('matriz[',i,',',j,']=');
gotoxy(38,10);readln(matiz[i,j]);
gotoxy(25,10);clreol;
end;
clrscr;
writeln('la matiz':31);
writeln; writeln;
  i := 1;
  for t := 1 to 4 do
    for y := 1 to 4 do
    begin
    numeros[i] := matiz[t,y];
    i := i + 1;
    end;
       t := 1;
       y := 1;
       for i := 1 to 16 do
       begin
       t := espira[i][1];
       y := espira[i][2];
       gotoxy(5 + t,5 + y);write(numeros[i]);
       end;
writeln;
readkey
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

¿?¿?¿?

Publicado por Luis (33 intervenciones) el 31/05/2012 02:59:30
1 2 3 4



2 3 4 1



1 2 1 2



4 3 2 1





Osea una forma de visualizarla mejor, por lo menos que cuando valla introduciendo los numero me lo valla escribiendo en un lado para q se valla viendo mejor que se esta creando un espiral o que cuando termine de introducir los datos por medio de un delay el valla creando el espiral de manera q se vea que se creo de manera espiral; si puedes colocarlo de las 2 maneras mejor gracias ramon
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

¿?¿?¿?

Publicado por Luis (33 intervenciones) el 31/05/2012 03:28:16
disculpa el spam; podrias a parte de lo otro q te estoy pidiendo colocar los numeros mas separados no tan pegados y si no es muy problematico para ti explicarme como funcionan esos for,la tabla, loas t las y, osea explicarme el ejercicio y si yo quisiera que comenzara el espiral de adentro hacia afuera como haria¿?¿?¿?; Gracias Ramon de antemano se q he molestado mucho pero quiero aprender Saludos y disculpa tanta molestia
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

¿?¿?¿?

Publicado por ramon (2072 intervenciones) el 31/05/2012 16:04:34
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
{Comento esta son las formas de manejar la espiral en modo texto o por lo menos bajo mi criterio
lo cual no quite que otro criterio pueda ser mejor.
Como podrás ver se efectúa de fuera a dentro y de dentro a fuera su presentación. }
 
program espiral;
 uses
   crt;
   const
      espira : array[1..16] of array[1..2] of integer = (
      (1,1),(6,1),(11,1),(16,1),(16,4),(16,7),(16,10),
      (11,10),(6,10),(1,10),(1,7),(1,4),(6,4),(11,4),
      (11,7),(6,7));
  var
    numeros : array[1..16] of integer;
    tec : char;
    valor : word;
    ii : integer;
 
   procedure presentafueradentro(cop, n : integer);
   var
     x1, y1 : integer;
   begin
       x1 := 20 + espira[cop][1];
       y1 := 10 + espira[cop][2];
       gotoxy(x1,y1);write(n);
   end;
 
   procedure presentadentrofuera(co, s : integer);
   var
     zs, x2, y2 : integer;
   begin
        zs := 17 - co;
        x2 := 50 + espira[zs][1];
        y2 := 10 + espira[zs][2];
        gotoxy(x2,y2);write(s);
   end;
 
   procedure entranumeros;
   var
      nu : integer;
   begin
       nu := 1;
       clrscr;
       writeln('  Entre 16 numeros ');
       writeln;
       while nu <> 17 do
       begin
       gotoxy(3,3);write(' N§ : ',nu,' : ');
       gotoxy(14,3);readln(numeros[nu]);
       gotoxy(14,3);clreol;
       presentafueradentro(nu, numeros[nu]);
       presentadentrofuera(nu, numeros[nu]);
       nu := nu + 1;
      end;
   end;
 
   procedure presentaenespiralfd;
   var
      t, y, i : integer;
   begin
       t := 1;
       y := 1;
       for i := 1 to 16 do
       begin
       t := espira[i][1];
       y := espira[i][2];
       gotoxy(5 + t,5 + y);write(numeros[i]);
  end;
 end;
 
   procedure presentaenespiraldf;
   var
      t, y, i : integer;
   begin
       t := 1;
       y := 1;
       for i := 16 downto 1 do
       begin
       t := espira[i][1];
       y := espira[i][2];
       gotoxy(45 + t,5 + y);write(numeros[(16 - i) + 1]);
  end;
 end;
 
 
  begin
      clrscr;
      entranumeros;
      clrscr;
      writeln('Pulse CTRL + F9');
      repeat
      tec := readkey;
      if tec = #0 then
      valor := word(ord(readkey)) shl 8
    else
      valor := ord(readkey);
      writeln(valor);
      until valor = 26112;
      clrscr;
      writeln;
      for ii := 1 to 16 do
      write('  ',numeros[ii]);
      writeln;
      presentaenespiralfd;
      presentaenespiraldf;
      gotoxy(4,18);write('Pulse [Enter]');
      readln;
  end.
 
 {La constante contiene las posiciones de los números en este caso pero que igual podrían
ser letras o signos ya que solo representa su posición en la espiral.
 El array números recejo los valores de la matriz para su presentación según su entrada.
  Los procedimientos presentafueradentro y presentadentrofuera realizan la presentación
 de los números en espiral de fuera a dentro y dentro a fuera solamente.
 El procedimiento entranumeros recibe los números del emisor y presenta en espiral
 tanto la de fuera dentro como la de dentro fuera.
 Las funciones presentaenespiralfd y presentaenespiraldf realizan la presentación del
contenido insertado cuando pulsas CTRL + F9 esa es su misión.
 
 Y el final controlamos la entrada de datos y la pulsación de las teclas CTRL + F9 .
 Los for son para realizar procesos que se repiten una cantidad fija de veces tanto en
 aumento como en decremento el caso de for  i := 1 to 16 do que se ejecutara 16 veces a
 adelante y  for i  := 16 downto 1 do a atrás.
 El ultimo for  ii := 1 to 16 do se encarga de recoger los valores del array y presentarlos
 en espiral.
Espero esto te sirva para comprender como funciona este pequeño programa.}
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