Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-12-2004
perudelphi perudelphi is offline
Miembro
 
Registrado: dic 2004
Posts: 19
Poder: 0
perudelphi Va por buen camino
Post tengo un problema con el comando VAL

holas a todos
mi problema es el siguiente
me piden sacar promedio de notas de varios alumnos el detalle está en que el nombre y las notas del alumno se ingresan como cadena:
POR EJM:
JUANCARLOS,13,14,20

ya borré el nombre ahora tengo:

,13,14,20
pero ¿como usar VAL? si se supone que desconozco el valor de las notas ingresadas

osea para usar val debe ser asi
VAL(cad,num,code)

donde:cad es la cadena
num es el valor numerico
code error

el problema esta en 'num' pues se supone que yo tengo que poner un numero ,,, pero ¿cual? poner si desconozco el valor del numero que el ususario va a ingresar (soy novato si necesito un comando que desconozco por favor pongan tambien como se utiliza ese NUEVO COMANDO)

muchas gracias perudelphi
Responder Con Cita
  #2  
Antiguo 07-12-2004
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
No se para que quieres usar Val, pero yo para sacar el promedio de las Notas pasaria la cadena a entero, Supongo que cuando tu pones:

Cita:
se ingresan como cadena:
POR EJM:
JUANCARLOS,13,14,20
Es todo la misma cadena ¿No?,y dices que ya te has quedado con los número solo, pues yo utilizaria el siguiente Código:
Código Delphi [-]
Str:=',13,14,20';//Me guardo la cadena en la varible Str del tipo String
Aux1:=Copy(Str,1,2);//Me copio el 13 en aux1 que sera de tipo String
//El 1 es el caracter 1 y el 2 porque es una cadena de 2 caracteres
Nota1:=Strtoint(Aux1);//Paso la cadena '13' a entero Nota 1 debe ser integer
 
//Hago lo mismo con la segunda nota
Aux2:=Copy(Str,4,2);
Nota2:=Strtoint(Aux2);
 
//Y lo mismo con la tercera
//...Despues Opero lo que quiero por que ya tengo enteros
Espero que te sirva yo lo haria asi, si no entiendes me lo dices.Ya me diras algo.
Un Saludo
Responder Con Cita
  #3  
Antiguo 07-12-2004
perudelphi perudelphi is offline
Miembro
 
Registrado: dic 2004
Posts: 19
Poder: 0
perudelphi Va por buen camino
entendi pero......

Nota1:=Strtoint(Aux1);

que cosa haces ahi????
strtoint ¿es un comando?,no creo pues me pide ke declare strtoint
probé escribiendo str to int (aux1) ,por ke seguro talvees te habias confundido pero nada


ojo: el copy(Cad,PosIni,NumCar)
donde Cad: es la cadena donde se va a aejecutar el copy
PosIni: es la POSICION desde donde se va a copiar
NumCar: es la cantidad de caracteres a copiar
observa parte de mi codigo:

begin
repeat //asi es como borro el nombre del alumno
delete(a,1,1);
x:=pos(',',a);
until x=1; //hasta aca es la logica para borrar el nombre
str:=a; //aqui cominzo lo que me dices
aux1:=copy(str,2,2); //observa el copy
write(' ',aux1,' '); //esto es solo para confimar que voy bien
nota1:=str to int (aux1);//aqui aparece un error que dice:[Error] alumnado.dpr(18): Incompatible types: 'Integer' and 'String'


write(' ',nota1,' '); //esto ya no importa
readln;
end.

muchas gracias por la ayuda pues aprendi que una variable string puede contener una cadena ,, nunca se me habia ocurrido hacer eso
porfa respondeme la pregunta y gracias.
Responder Con Cita
  #4  
Antiguo 07-12-2004
perudelphi perudelphi is offline
Miembro
 
Registrado: dic 2004
Posts: 19
Poder: 0
perudelphi Va por buen camino
olvidaba

ese codigo es parte de mi procedimiento

y la letra 'a' es una cadena ,donde estan las notas a modo de cadena
Responder Con Cita
  #5  
Antiguo 07-12-2004
perudelphi perudelphi is offline
Miembro
 
Registrado: dic 2004
Posts: 19
Poder: 0
perudelphi Va por buen camino
otro problema

tengo otro problema

'a' es un cadena

long:length(a);
for n:= 1 to (long/2) do


si a 'n' la declaro como byte sale de error:
[Error] letraspares.dpr(20): Incompatible types: 'Byte' and 'Extended'


si a 'n' la declaro como integer sale de error:
[Error] letraspares.dpr(20): Incompatible types: 'Integer' and 'Extended'


si a 'n' la declaro como real sale de error:

[Error] letraspares.dpr(20): Incompatible types: 'Integer' and 'Extended'
Responder Con Cita
  #6  
Antiguo 07-12-2004
perudelphi perudelphi is offline
Miembro
 
Registrado: dic 2004
Posts: 19
Poder: 0
perudelphi Va por buen camino
el ultimo error estaba mal


[Error] letraspares.dpr(20): For loop control variable must have ordinal type

entonces que hacer

for n:= 1 to (long/2) do
for s:= (2*n) to long do
write(' ',nombre[s],' ');

con este codigo lo ke quiero es escribir las letras pares de una cadena
nombre es un vector que tiene 20 espacios (max de caracteres) y en cada espacio del vector esta una letra de la cadena
pero el problema es la 'n' dado que no puedo poner byte no integer pues long esta dividido pero tampoco puede ser real por ke dice que un loop debe ser un numero ordinal ¿que hacer?
Responder Con Cita
  #7  
Antiguo 07-12-2004
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
A ver StrToint lo que hace es pasarte un dato del tipo cadena a un dato de tipo entero, por ejemplo si yo tengo '13' y lo quiero tener 13 lo que hago es :

Código Delphi [-]
 Notas1:=strtoint('13');

Mira he echo un ejemplo muy simple con dos edit y un boton, dandole dos veces alboton entras en el evento oNCLICK del boton y escribes el siguiente código:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var
Notas1:integer;
Notas2:integer;
aux1:integer;
begin
     Notas1:=  Strtoint(Edit1.text);
     aux1:=Notas1+2;
     Edit2.Text:=inttostr(aux1);
end;

Si ejecutas este programa y escribes numeros enteros en el edit1 y luego le das al boton te sumara 2 y te lo pondra en el edit 2.

Para tu programa ocurre igual, una vez que hemos pasado la cadena que queremos a la variable aux1 la transformamos en entero y se lo asignamos a Nota 1, te quedaria de la siguiente forma:
Código Delphi [-]
Procedure.....
Var
Str,Aux1,Aux2:string
Notas1,Notas2,NotaFinal:integer;
Begin
Str:=',13,14,20';//Me guardo la cadena en la varible Str del tipo String
Aux1:=Copy(Str,1,2);//Me copio el 13 en aux1 que sera de tipo String
//El 1 es el caracter 1 y el 2 porque es una cadena de 2 caracteres
Notas1:=Strtoint(Aux1);//Paso la cadena '13' a entero Nota 1 debe ser integer
 
//Hago lo mismo con la segunda nota
Aux2:=Copy(Str,4,2);
Notas2:=Strtoint(Aux2);
//Y ahora puedo hacer lo siguiente
NotaFinal:=(Notas1+Notas2)/2
end;
Espero que te haya quedado mas claro, ya me contaras.

Un Saludo.
Responder Con Cita
  #8  
Antiguo 07-12-2004
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
A ver el For se declara en delphi asi:

Código Delphi [-]
For n=0 to (long/2) do begin
//las setencias que quieras introducir en t bucle...
end;

A ver si asi te funciona
Responder Con Cita
  #9  
Antiguo 08-12-2004
<Sergio> <Sergio> is offline
Miembro
 
Registrado: sep 2004
Posts: 72
Poder: 21
<Sergio> Va por buen camino
Noten que uso el div (división entera) en lugar de "/"
por que esa es división en flotante.

Y prefiero bajar el "begin".
Código Delphi [-]
for n:=0 to (long div 2) do
begin//Lugar adecuado para algunos comentarios 
  Procedimiento1;
end;//for

Usando val tienes el caracter erróneo en code, con strtoint
utilizas excepciones que tienes que capturar, sino la capturas
sale un mensajito que puede que no te guste.

Tienes que definir una variable code.
No es necesario inicializar code o num, sólo cad.

val(cad,num,code);

Luego obtienes el número contenido en cad en num
(que puede ser entero o flotante). Si ocurrio un error
en code devuelve la posición del caracter que no va.
Asi que luego puedes tener por ejemplo un:

if code<>0 then num:=ValorPredeterminado;

O simplemente ignorar el valor de num y seguir con el
siguiente número de tu lista.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:11:57.


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
Copyright 1996-2007 Club Delphi