FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
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:
Espero que te sirva yo lo haria asi, si no entiendes me lo dices.Ya me diras algo. Un Saludo |
#3
|
|||
|
|||
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. |
#4
|
|||
|
|||
olvidaba
ese codigo es parte de mi procedimiento
y la letra 'a' es una cadena ,donde estan las notas a modo de cadena |
#5
|
|||
|
|||
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' |
#6
|
|||
|
|||
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? |
#7
|
|||
|
|||
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 :
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:
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: Espero que te haya quedado mas claro, ya me contaras. Un Saludo. |
#9
|
|||
|
|||
Noten que uso el div (división entera) en lugar de "/"
por que esa es división en flotante. Y prefiero bajar el "begin".
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. |
|
|
|