Grandes dudas en C antes de un examen.

Esoty haciendo el examen del año pasado ( asignatura de C), que segun parece sera parecido al que pondran este año, y tampoco es que lo lleve muy bien ( y eso que ya el jueves lo tengo), dentro del examen tengo dos grandes dudas que si me solucionarais os lo agradeceria un monton, hay van;

- Me pide una funcion que comprueba cuantas pesetas son, pasarlos a euros, y aplicar el redondeo, la cuestion es; ¿Como hago dentro de un "int" para coger el tercer decimal ? ¿Y despues como modifico el segundo decimal para arriba o para abajo segun el caso? El nivel se supone bajo, asi que la solucion deberia ser lo mas simple posible; lo mas lejos que hemos llegado es a #include , y algo de estructuras de fichero y lectura/escritura de ficheros.

-Y otra funcion que comprueba que en el campo de numero de cuenta de la estructura de ficheros empleado2001 ( o sea, empleado2001.numerocuenta [20]), compruebe que contiene 20 digitos y en caso contrario escribir en dicho campo la cadena "talon". Pero, que yo sepa en un int cuenta [20] no puedo poner " talon", porque esto ultimo seria char talon [20], ¿no? ¿Se podria usar directamente char tambien para introducir los numeros de cuenta ( son caracteres, al fin y al cabo) o habria que hacer algo extraño para cambiar la variable de "int" a "char"

Gracias de antemano y un saludo [bye]
1º si trabajas kn decimales usa float
2º como vas a usar int en un string????
no puede ser int talon[20] ,eso es char talon [20]
los int son los para numeros no decimales

a un char cuenta [20] puedes meterle la cadena tablon perfectamente


PD: un consejo con eso que nus dices te podemos ayudar poco..eso ke nos dices no son funciones muy largas si las posteas creo ke se te podria ayudar mejor aunke..antes del examen hay que prepararse mejor ;)
Jejej das el jueves?! Eres de los mios... X-D

Mi politica es: para que estudiar anticipadamente, si lo puedes hacer el dia antes del examen sudando de los nervios y llorando porque no llegas?!?! Es un placer. [looco]

No, de veras... creo que la proxima tendrias que prepararte con un poquito mas de anticipacion, te veo un poco confundido... o quiza no te hayas explicado bien.

salu2[bye] y que la fuerza te acompañe.
Hola, no me digais que no he estudiado que estoy de C hasta los mismisimos desde Navidades... Seguramente me he explicado mal, aunque lo unico que he hecho es poner los enunciados del examen. El examen son dos partes, el primero con apartados donde hacer pequeñas funciones y el otro donde juntar todo para hacer un programa.

En mi primera duda, ya se que hay que usar float para numeros con decimales, la cuestion es ¿Se puede hacer de alguna manera que del numero ( por ejemplo 150'347 coga solo el tercer decimal ( el '7'), para que vea si es mas grande que cinco o no para aplicar el redondeo, o como habria que hacerlo.

Y en la segunda, en un principio dentro de la struct trabajadores, todos tienen un numero de cuenta. Hay que comprobar si efectivamente eso es asi ( o sea, si tiene 20 digitos), y si no es así, poner "talon" en esa variable, y si lo hubiera declarado como un int cuenta [20] dentro del struct trabajadores, no podria meter esos caracteres, poner el int es para numeros enteros.

Aun y todo, cuando llegue a casa posteo el enunciado. Gracias!!!

Salu2 [bye]
No me acuerdo muy bien de los comandos, pero si tu te los sabes te digo como tienes que hacer, en el primero, debes de dividir entre 10 y te quedas con el resto, creo que se hacia poniendo (n % 10, siendo n la variable en la que tienes el numero a dividir)para ir sabiendo los numeros que estan en los decimales, si sabes el total de decimales que tienes, controla el numero de decimal que te interesa para hacer que el otro, el segundo sume 1 mas o menos.

En el segundo, te dire, que puedes poner numeros en una cadena de caracteres, ' ' ya sabes, asi pones un caracter concreto, " " asi una cadena, entonces puedes contar el numero de caracteres con una funcion creo que era algo asi como strleng o algo parecido, te devuelve un numero, lo otro que puedes hacer es ir moviendo el puntero y comparando con el intervalo de ascii de los numeros, si no lo encuentra en uno de los 20 le pones un else y le dices que lo que tiene que hacer es poner la frase que quieres y que salga del bucle para que no sea ciclico y se te pete el programa.

Espero te haya servido de algo.

Un saludo.
lo más facil para lo del redondeo del euro es "engañar" al usuario y cuando te meta el numero, meterlo en un char en vez de un float. Así podras recorrer el array de chars buscando la "," o el "." decimal y cuando lo hayas encontrado, recorres tres veces más el array y ya tienes el número.


Si te lo tienes que meter en int por webos, puedes usar un sprintf(cadenita,"%d",numerito), y ya tienes el numerito en un char...


en el segundo ejercicio, yo optaría por usar char nuemerocuenta[20] y santas pascuas... no te compliques la vida. Lo más fácil no es siempre lo evidente...


Saludos
Puedes usar esta función:

INT(3) Manual del Programador de Linux RINT(3)



NOMBRE
rint - redondea al entero más cercano

SINOPSIS
#include

double rint(double x);

DESCRIPCIÓN
La función rint() redondea x a un valor entero de acuerdo
con el modo prevaleciente de redondeo. El modo de redondeo
por defecto es redondear al entero más cercano.

VALOR REGRESADO
La función rint() devuelve el valor entero como un número
en coma flotante.



Multiplicas el número por 100 lo redondeas y luego divides

Redondeo = ceil (valor*100)/100;

Más fácil imposible (peor me temo que no es ANSI)

Para hacerlo sin esta funcón observa este ejemplo:

#include
#include

int main (void){


int temp=0;
float valor=15.435;

printf ("%g \n",valor);

valor = (valor * 1000); //necesitamos los 3 últimos decimales
temp = valor;



if (temp%10>=5){ //comprobamos el último digito
temp+=10;
}




temp = temp / 10; //quitamos el último decimal
valor = temp;
valor = valor /100; //si divdimos antes perdemos todos los decimales

printf ("%g\n",valor);

return 0;
}

Observa que el dividir y multiplicar con la variable float
y asignar despues no es por capricho es para evitar que
se pierdan decimales (C por defecto trunca)
Gracias a todos!!!!!! [beer]

Veo que las respuestas de Harl y Billyberjas son como mas "tecnicos", pero para mi nivel es perfecto como lo ha dicho timytoon, sencillo, pero efectivo. Ya se hacerlo mas o menos, asi que a por el cinco se puede ir ;-)

Lo dicho, gracias!!!

Salu2
7 respuestas