Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   [delphi] visibilidad y alcance de identificadores (https://www.clubdelphi.com/foros/showthread.php?t=88317)

franco_cvm 19-05-2015 21:00:10

[Delphi] ejercicio de procedimientos y funciones.
 
necesitaría su ayuda con un ejercicio del practico, que verdaderamente no entiendo, dice:

crear un procedimiento que tenga dos parámetros o argumentos en la lista de llamada: un parámetro que pasa por valor y corresponde con el valor de n y otro parámetro que pasa por referencia, en el cual se carga el valor calculado de n!. analizar los efectos secundarios o colaterales de usar este procedimiento en vez de usar la función anterior.

cuando dice la funcion anterior, se refiere a esta:

Código Delphi [-]
function factorial (n:integer):integer;
var
i,f:integer;
begin
f:=1;
for i:= 2 to n do
f:=f*i;
factorial:=f;
end;

o a esta:
Código Delphi [-]
function factorial (n:integer):integer;
begin
if n<= 1 then
factorial:=1
else factorial:=n*factorial(n-1);
end;

el procedimiento que me pide el ejrcicio( esta mal seguro):

Código Delphi [-]
procedure factorial(n:integer;var n1:integer);
begin
n:=StrToInt(edit1.text);
if n<=1 then
begin
factorial:=1;
n1:=factorial;
end;
if n>1 then
begin
factorial:=n*factorial(n-1);
n1:=factorial;
end;
end;

franco_cvm 19-05-2015 21:11:22

[delphi] visibilidad y alcance de identificadores
 
el ejercicio pide determinar que variables y parametros son visibles desde la funcion p, el procedimiento q y el procedimiento test. y en que orden se imprimira en memo1.

el ejercicio:

Código Delphi [-]
procedure test;
var
 x,y,z:integer;
 
 function q(var y:integer):integer;
 var
  x:integer;
 begin
  x:=8;
  y:=y+1;
  memo1.lines.add(y);
  q:=y+x;
 end;
 procedure p(x:integer; var y:integer);
 begin
  y:=2;
  z:=x+y;
  memo1.lines.add(z);
  memo1.lines.add(q(z));
  memo1.lines.add(z);
 end;

begin
 x:=1;
 y:=3;
 z:=20;
 p(x,y);
 memo1.lines.add(x,' ',y,' ',z)
end.

Casimiro Notevi 19-05-2015 21:16:46

¿Y tú qué opinas?

Casimiro Notevi 19-05-2015 21:18:12

Y no repitas hilos, gracias ;)

Te recuerdo nuestras normas.



.

nlsgarcia 19-05-2015 21:41:06

franco_cvm,

Cita:

Empezado por franco_cvm
...procedimientos y funciones...visibilidad y alcance de identificadores...

:rolleyes:

Revisa esta información:
Espero sea útil :)

Nelson.

franco_cvm 19-05-2015 21:56:37

¿que hilo repetí?

Casimiro Notevi 19-05-2015 23:00:48

Con repetir, me refería a repetir preguntas del tipo: "hacedme estos ejercicios".
Los hilos en sí, no estaban repetidos, sino la temática y la forma de realizar las preguntas, que no son válidas según las normas de los foros, no está bien que vengas a decir: "Tengo estos ejercicios, dadme una solución", eso demuestra poco interés por tu parte en esforzarte por aprender.
Saludos.

franco_cvm 20-05-2015 06:43:35

podría ser este el código que busco??? con respecto a lo de visibilidad y alcance no logro hacerlo.

Código Delphi [-]
procedure factorial(n:integer;var res:integer);
var
i,a:integer;
begin
if n<=1 then
res:=1
else
begin
a:=1;
for i:=1 to n do
a:=a*(i);
res:=a;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
a,res:integer;
begin
a:=StrToInt(edit1.Text);
factorial(a,res);
showmessage(IntToStr(res));
end;

Casimiro Notevi 20-05-2015 09:29:02

Cita:

Empezado por franco_cvm (Mensaje 492311)
podría ser este el código que busco??? con respecto a lo de visibilidad y alcance no logro hacerlo.

Es que no se trata de "hacer", sino de "saber".
Para saber la respuesta a tu pregunta, con los enlaces que te ha pasado nlsgarcia tienes más que suficiente porque está explicado perfectamente.
Obviamente, tienes que leerlos.

franco_cvm 20-05-2015 13:59:14

están todos en ingles

Casimiro Notevi 20-05-2015 14:02:32

Y Delphi también está todo en inglés :)

De todas formas, en nuestro FTP encontrarás gigas de información, libros completos, etc. donde aprender todo lo que se te pase por la cabeza sobre delphi.
Te aconsejo este libro, es uno de los mejores que encontrarás, y es gratis.

Por cierto, he seguido algunos de los enlaces y hay bastantes en español.

Lepe 20-05-2015 21:08:20

franco, la verdad es que si estás estudiando esto es para aprender, no para que te lo den hecho.

Buscar, echarle horas y entender las preguntas que te hacen, forma parte del aprendizaje. El truco está en no dejar de pelearte hasta estar seguro de todo, de lo que preguntan y de lo que has hecho.

Algunas preguntas no se entienden hasta que has indagado por tu cuenta y llevas varias horas/días con ello.

Te pongo un ejemplo real: Nos pidieron hacer una práctica en la Universidad con rutinas para administrar una agenda:
- crear citas
- mover citas
- eliminar citas

Cada rutina las pedía con parámetros distintos, en total unas 10 funciones.

Una vez terminada todas las rutinas, corregidos los errores, etc. Me pongo a darle una vuelta de tuerca y leo de nuevo todas las especificaciones y las rutinas que nos pedían... pues resultó que solo había que implementar 3 rutinas nada más, el resto se podía hacer llamando a esas 3 rutinas :eek: .Había echado 2 tardes en las 10 funciones, cada una con su código, cuando en realidad se podía hacer en 30 minutos la práctica completa.

Después de entregar la memoria lo comenté con los compañeros y me ponían de loco, no se podía hacer con 3 funciones nada más.

Moraleja: Cuando algo esté terminado, es cuando debes volver al inicio y repensarlo todo.

Si no entiendes la pregunta, es que no tienes los conocimientos necesarios para entenderla, por lo que tienes que esforzarte más que otro.

Casimiro Notevi 20-05-2015 22:18:06

Cita:

Empezado por Lepe (Mensaje 492337)
Moraleja: Cuando algo esté terminado, es cuando debes volver al inicio y repensarlo todo.
Si no entiendes la pregunta, es que no tienes los conocimientos necesarios para entenderla, por lo que tienes que esforzarte más que otro.

^\||/^\||/^\||/

ecfisa 21-05-2015 01:49:32

Hola franco_cvm.
Cita:

Empezado por franco_cvm (Mensaje 492316)
están todos en ingles

Aunque no debería ser un inconveniente, teniendo a mano traductores como Google Translate, te agrego unos enlaces en la lengua de Cervantes.
Saludos :)


La franja horaria es GMT +2. Ahora son las 12:00:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi