Pascal/Turbo Pascal - Error en free pascal?

   
Vista:

Error en free pascal?

Publicado por diego diegocej@hotmail.com (3 intervenciones) el 23/05/2012 22:58:14
buenas. Hace unos dias rendi un parcial en la facultad sobre pascal.
me pedian obtener un vector conociendo otro vector con sus componentes( llamado v ) y un valor x
.al vector desconocido (vector w) lo tenia que pasar las componentes del vector conocido hasta que uno coincidiera con x y repetirlo tanta veces como indique el indice de dicha componente con la primera componente y seguir pasando los restantes componentes hasta formar todo el vector.

por ejemplo
el vector ''v'' (conocido) es 1 2 3 4 5 6 7 8 9 10
y x :=4
entonces w es 1 2 3 4 1 1 1 1 5 6 7 8 9 10

otro ej
v es 5 7 8 4 2 1 6 8 4 3
x:=8
w sera 5 7 8 5 5 5 4 2 1 6 8 4 3

mi programa lo hice asi:

program PARCIALVECTORES2012;
uses crt;
type
vector=array[1..100] of integer;
var
v,w:vector;
i,k,n,x:integer;
bol:boolean;
begin
clrscr;
bol:=true;
writeln('ingrese la cantidad de vectores');
readln(n);
writeln('ingrese el valor de cada componente');
for i:=1 to n do
readln(v[i]);
writeln('ingrese el valor de x (x>0)');
readln(x);
while bol do
if (x>0) then
begin
bol:=false;
for i:=1 to n do
begin
w[i]:=v[i];
writeln (w[i]);
if (v[i]=x) then
for k:=1 to i do
begin
w[i+k]:=v[1];
writeln(w[i+k]);
end;
end;

end
else
begin
writeln('dato erroneo, intente de nuevo');
readln(x);
end;
readln
end.

lo que esta en negrita es lo que me dice el profesor que esta mal, que se pisan los datos por el valor que va tomando i. yo lo intente con un lote de prueba y tiene razon.
Pero resulta que cuando lo compilo y ejecuto en pascal me escribe el vector tal cual tiene que ser
porque pasa eso?
talvez viendo este tema me levante 3 puntos en la prueba
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

Error en free pascal?

Publicado por ramon (2072 intervenciones) el 24/05/2012 13:24:26
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
{A ver si entendí bien el tema mira las modificaciones que ice}
 
program PARCIALVECTORES2012;
 uses crt;
    const
       nn = 100;
 type
    vector = array[1..nn] of integer;
  var
     v, w : vector;
     s, i, k, n, x : integer;
       bol : boolean;
 begin
   clrscr;
    bol := true;
    write('ingrese la cantidad de vectores 1..50 : ');
    readln(n);
    write('ingrese el valor de cada componente : ');
    for i := 1 to n do
    read(v[i]);
    write('ingrese el valor de x ( x > 0)');
    readln(x);
    s := 1;
    while bol do
    if x > 0 then
    begin
      bol := false;
     for i := 1 to n do
     begin
       w[s] := v[i];
       write(' ',w[s]);
       s := s + 1;
     if v[i] = x then
      for k := 1 to x do
      begin
       w[s] := v[1];
       write(' ',w[s]);
       s := s + 1;
      end;
     end;
  end
else
   begin
    writeln('dato erroneo, intente de nuevo');
    readln(x);
   end;
   readln
   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

Error en free pascal?

Publicado por Diego (3 intervenciones) el 24/05/2012 15:08:36
gracias por responder!
Bien mirando los dos programas, el que hice hay un error en que se pisan los datos, pero porque cuando los compilo y los ejecuto hacen lo mismo? no logro entender eso. se supone que no tendria que ocurrir. Intente con un lote de pruebas a lapiz y papel, y no me aparece lo mismo que en el 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

Error en free pascal?

Publicado por ramon (2072 intervenciones) el 24/05/2012 16:13:32
for i:=1 to n do
begin
w[i]:=v[i];
writeln (w[i]);
if (v[i]=x) then
for k:=1 to i do
begin
w[i+k]:=v[1];
writeln(w[i+k]);
end;
end;

Mira este párrafo del programa for i incrementa en 1 cada pasada pero cuando se ejecuta
for k estas colocando w[i + k] el valor v[1] pero cuando retorna al for i no incrementa la
cantidad de k sino que sigue con i ejemplo :
si i tiene 4 cuando pasa a k si entras en el array los datos que quieres en las posiciones
i + k pero al retornar a i el prosimio que entra pisara al entrado en k llague i sigue siendo 4
no 4 + k pero i no puede aumentar si no los números que se encuentren en las posiciones
i asta i + k se perderían en el paso por ello lo que te pongo es una variable que cuenta las
entradas en w sin afectar a salidas de v.
Espero te ayude lo explicado pero mira y compara los dos programas y veras lo que te comento.
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