Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Delphi 5 errores en u subprograma (https://www.clubdelphi.com/foros/showthread.php?t=50607)

tuflotas 22-11-2007 19:29:37

Delphi 5 errores en u subprograma
 
hola, que tal? Soy nuevo, y es que es el primer año que programo en delphi (bueno, los primros meses...) y aun no entiendo el depurador ni tengo una tabla donde me diga el error en concreto como lo tenia en pascal... bueno, el caso es que no se por qué me sale en este subprograma un error.
El subprograma lo que quiero es que entrando un entero, lo pase a booleano y la forma que le he dado es:

FUNCTION f(Fila:integer):char;
BEGIN
CASE Fila OF
0: f:='0';
1: f:='1';
2: f:='2';
3: f:='3';
4: f:='4';
5: f:='5';
6: f:='6';
7: f:='7';
8: f:='8';
9: f:='9';
end; {case}
END;{function fila}

El error que me da es Ubarquitos.pas (44) Error Return value of function 'f' might be undefinned
cuando pulso el error me sale justo la linea roja en el " END; {function fila} "

No se si lo que tendria que hacer seria, en vez de meterlo directamente en la variable de la funcion f el caracter que quiero que tenga, poner una variable char auxiliar y que al final del case poner f:=variableauxiliar, es que asi me sale otro error, me pone cuando es f:=auxi Not enought actual parameters... que desesperacion ajjajaa

Es que no estoy seguro del todo si eso podria ayudar porque es del mismo tipo

tuflotas 22-11-2007 19:39:18

por si ayuda, este subprograma lo uso en el procedimiento generarflota

en la unidad, en interface he puesto este orden:

VAR
PROCEDURE Inicializa(solucion:TTablero);
PROCEDURE GenerarFlota;
FUNCTION c(columna:integer):char;
FUNCTION f(Fila:integer):char; {igual que la anterior pero para la fila}
procedure colocandobarco(VAR solucion:TTablero;VAR valido:boolean; fila,columna,tipobarco,plusbarco,direccion:integer; c,f:char); {coloca el barco en la matriz}

SI subo c y f a arriba del todo me dice que despues de (columna: integer en vez de ) tengo que poner ; (lo mismo para ambas)

dec 22-11-2007 19:40:52

Hola,

Usa "Result" en lugar de "f". Creo que antes, con Pascal, era posible retornar el valor de una función mediante el nombre de la propia función, pero, en Delphi no sé si hay que "tocar" alguna directiva del compilador o algo así. Pero, como digo, prueba con "Result", que es la forma en que en Delphi se asigna el resultado de las funciones. Por ejemplo:

Código Delphi [-]
function Foo(): boolean;
begin
  Result := true;
end;

jhonny 22-11-2007 19:45:44

Bueno, no es exactamente un Error, es un Warning... el compilador a encontrado que en tu función hace falta asegurar el hecho de que ella te devuelva siempre un valor y por eso te muestra dicha precaución.

Por ejemplo, ¿Que pasaría si alguien coloca como parametro un valor que este fuera del rango del 0..9?, por ejemplo el 1000, seguramente dicha función te devolvera el número que "caiga" luego de pasar 1000 veces evaluando opcion por opcion (La numero 1000 sera tu resultado, en este caso el 8).

Como solucionar este "problemita", asegurandonos que esta función te devuelva un valor "fijo" en caso de que el parametro no tenga un valor que este dentro de ese rango 0..9, asi por ejemplo:

Código Delphi [-]
FUNCTION f(Fila:integer):char;
BEGIN
  CASE Fila of
    0: f:='0';
    1: f:='1';
    2: f:='2';
    3: f:='3';
    4: f:='4';
    5: f:='5';
    6: f:='6';
    7: f:='7';
    8: f:='8';
    9: f:='9';
  else
    f := ' '; //<--- Este y el else anterior son el cambio :).
  end; {case}
END;{Resultunction Resultila}

tuflotas 22-11-2007 19:49:00

ahora lo que si que me salta es un error cuando hago la asignacion para la function

Es decir yo en mi codigo pongo:

f:=fila; que la funcion f use fila, puesme dice [error] Ubarquitos.pas (142) : Not enought actual parameters

jhonny 22-11-2007 19:51:09

Cita:

Empezado por tuflotas (Mensaje 247820)
ahora lo que si que me salta es un error cuando hago la asignacion para la function

Es decir yo en mi codigo pongo:

f:=fila; que la funcion f use fila, puesme dice [error] Ubarquitos.pas (142) : Not enought actual parameters

Lo que dice es que no le estas asignando un parametro a la función f, supongo que lo que quieres hacer es, por ejemplo:

Código Delphi [-]
fila := f(1);

tuflotas 22-11-2007 19:53:29

es que el valor de fila lo saco de un random, es decir

fila:=random(10); {se calcula el punto de partida de la fila}
columna:=random(10); {y el de la columna}
c:=columna; {y se traspasan a char}
f:=fila;

los subprogramas son f y c

tuflotas 22-11-2007 19:56:15

ya lo entendi, jope, no pensaba que estuviera tan oxidado en esto ...

jhonny 22-11-2007 20:27:01

Otra cosa, no se que pretendes con dicha función, pero si lo que quieres es convertir de numerico a caracter, puedes lograr ese efecto usando la función IntToStr que viene con delphi...


La franja horaria es GMT +2. Ahora son las 02:22:30.

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