[ Foro de Pascal ]

funcion o procedimiento

07-Feb-2014 16:15
Invitado (Liliana(peru))
4 Respuestas

hola buenas soy liliana desde peru , queria pedir ayuda a este foro y es que tengo un ejercicio de vectores que dice lo siguiente:

crear una funcion o procedimiento que indique y permita:
- si el primer elemento de un vector v1 dado es diferente de 1 y
-si el siguiente valor y el anterior son 4 y 2 respectivamente y
-agregar al vector un 0 (cero) en los elementos pares del resto de los valores de v1 y elimine los valores impares del resto del vector.

soy nueva en esto de la programacion y  cualquier ayuda se las agradezco, yo intento hacer aunque aun si saber si pueda hacerlo en una funcion o procedimiento por que la verdad no se como hacerlo:

 
program vector;
 
var i,j,n:integer;
      V:array[1..n]  of integer;
begin
write('digite el tamaño del vector :');
readln(n);
for i:=1 to n do
 begin
    write('escriba el elemento ,i, ':');
    readln(V[i]);
end;
 
cumple:=false
j:=1;
while j<n do
   for i:=2 to n do
    begin
     if  (V[ j ]<>1) and (V1[i-1]=4) and (V[i+1]=2) then
      cumple= true;


  no se como hacer luego, si es que mi codigo anterior esta bien, y para saber a partir de cuando es el resto del verctor para intentar luego mirar a partir de ahi cuales son las posiciones pares ( se que con if V1[i] mod 2 = 0, verificaria que es un valor par ...) y cambiar sus valores por 0 y lo deeliminar ni idea , por favor si me ayudan sera mucho para mi, agradecida con uds Liliana.


08-Feb-2014 12:45
Nacho Cabanes (+32)

Por una parte, como puedes ver en los colores del fuente, hay una comilla mal cerrada en la línea del "write".

Por otra parte, con " if V1[i] mod 2 = 0" miras si el valor es par, pero no si la posición es par. Eso sería simplemente " if i mod 2 = 0"

Cambiar los valores de las posiciones pares por cero es fácil:

 
if i mod 2 = 0 then
    v1[i] := 0;
 


Lo de "eliminar" valores es un tanto ambiguo.  Supongo que se refiere a que un array que contiene (1,2,4,11,15) se convierta en algo como (2,4), si es eliminar los valores impares, o algo como (2,11) si es eliminar las posiciones impares.

En cualquier caso, para eliminar un valor de un array necesitas dos cosas:

- Mover todos los valores siguientes a su posición anterior. Por ejemplo, para eliminar el 4, que está en la tercera posición, moverías el 11 de la posición 4 a la 3, y después el 15 de la posición 5 a la 4.

- Con eso, tu array se ha convertido en (1,2,11,15,15), de modo que necesitas un "contador" que indique cual es el tamaño de tu array, porque ahora "no está lleno": tiene capacidad para 5 datos, pero sólo 4 son datos "de verdad", el quinto dato es falso, porque hemos borrado uno. Por tanto, necesitas algo como "cantidadDeDatos := 4" (o, en general, "cantidadDeDatos := cantidadDeDatos - 1") para saber que el array no contiene todos los datos que podría contener, sino que hay "huecos" al final, porque tu array realmente debería ser (1,2,11,15,[hueco no usado])


09-Feb-2014 01:15
natalia tavora


 
program vector;
 
var i,j,n:integer;
      V:array[1..n]  of integer;// que el profesor nacho me corrija si me equivoco pero estoy casi segura que no podes hacer esto porque ... podrias hacerlo si de antemano vos le das un valor a n como una constante....
begin
write('digite el tamaño del vector :');
readln(n);
for i:=1 to n do
 begin
    write('escriba el elemento ,i, ':');
    readln(V[i]);
end;
 
cumple:=false
j:=1;
while j<n do
   for i:=2 to n do
    begin
     if  (V[ j ]<>1) and (V1[i-1]=4) and (V[i+1]=2) then
      cumple= true;



09-Feb-2014 15:50
Invitado (Liliana(peru))

hola  desde peru. gracias por responder profesor, es verdad que tu explicacion es muy buena pero en palabras quede algo en las mismas, en cosas como:
Mover todos los valores siguientes a su posición anterior. Por ejemplo, para eliminar el 4, que está en la tercera posición, moverías el 11 de la posición 4 a la 3, y después el 15 de la posición 5 a la 4.
pues en palabras parece facil pero en terminos de lenguaje ya usando el for y el arreglo como podria ser?

respecto a la compañera natalia la pregunta que hace al profesor segun lo que me dijo mi profesor si que se puede hacer:
var i,j,n:integer;
    V:array[1..n]  of integer;// que el profesor nacho me corrija si me equivoco pero estoy casi segura que no podes hacer esto porque ... podrias hacerlo si de antemano vos le das un valor a n como una constante....

sin embargo esperemos que nos puede decir el profesor nacho, muy agradecida con este foro


10-Feb-2014 00:30
natalia tavora


 
(*crear una funcion o procedimiento que indique y permita: 
- si el primer elemento de un vector v1 dado es diferente de 1 
-si el siguiente valor y el anterior son 4 y 2 respectivamente y 
-agregar al vector un 0 (cero) en los elementos pares del resto de los valores de v1 y elimine los valores impares del resto del vector. *)
en todos los casos se refiere a los elementos no a las posiciones....
te dice que el vector ya te lo dan por  lo que no es necesario que pidas cargar los numeros, yo le asigne valores al azar para probar que funcionen bien las funciones.
program fucn;
uses crt;
type
vector=array [0..5]of integer;
var
Numeros:vector;
posicion:integer;
function PrimerElemento(numeros:vector):char;// devuelve verdadero si el numero que le pasas es uno y falso si no es
var
es:char;
begin
if (numeros[0]=1)then
Begin
	es:='s';
end;
if (numeros[0]<>1)then
Begin
	es:='n';
end;
PrimerElemento:=es;
end;
function Anterior(Numeros:vector;posicion:integer):char;
var
es:char;
begin
if (numeros[posicion-1]=4)then
Begin
	es:='s';
end;
if (numeros[posicion-1]<>4)then
Begin
	es:='n';
end;
Anterior:=es;
end;
function posterior(Numeros:vector;posicion:integer):char;
var
es:char;
begin
if (numeros[posicion+1]=2)then
Begin
	es:='s';
end;
if (numeros[posicion+1]<>2)then
Begin
	es:='n';
end;
posterior:=es;
end;
 
Begin
clrscr;
Numeros[0]:=1;
Numeros[1]:=2;
Numeros[2]:=4;
Numeros[3]:=6;
Numeros[4]:=7;
Numeros[5]:=10;
if(PrimerElemento(numeros)='s')then
begin
	writeln('El numero es 1');
end;
if(PrimerElemento(numeros)='c')then
begin
	writeln('El numero es distinto de 1');
end;
writeln('eleji la posicion del 0 al 5 del numero que queres averiguar el anterior y el posteriori');
readln(posicion);
if(Anterior(Numeros,posicion)='s')then
begin
	writeln('El numero anterior a la posicion ', posicion,'es igual a 4');
end;
if(Anterior(Numeros,posicion)<>'s')then
begin
	writeln('El numero anterior a la posicion ', posicion,'es distinto de 4');
end;
/////////
if(posterior(Numeros,posicion)='s')then
begin
	writeln('El numero posterior a la posicion ', posicion,'es igual a 2');
end;
if(posterior(Numeros,posicion)<>'s')then
begin
	writeln('El numero posterior a la posicion  ', posicion,'es distinto de 2');
end;
readln;
end.
 



me faltaria el ultimo punto....






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)