Foros del Web » Programación para mayores de 30 ;) » Programación General »

Lenguaje C, problema al pasar de un tipo de valor a otro

Estas en el tema de Lenguaje C, problema al pasar de un tipo de valor a otro en el foro de Programación General en Foros del Web. Buenos días otra vez, jejeje. Vereán, tengo que realizar la representación de una función senoidal, para ello tengo que meter unos parametros en la aplicación, ...
  #1 (permalink)  
Antiguo 30/12/2004, 05:35
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Lenguaje C, problema al pasar de un tipo de valor a otro

Buenos días otra vez, jejeje.

Vereán, tengo que realizar la representación de una función senoidal, para ello tengo que meter unos parametros en la aplicación, dependiendo de cuantos parametros haya metido, las filas y columnas serán mas largas.

Una vez metidos esos parametros, tengo que calcular en que columna tengo que marcar un * para representar la función senoidal.

Es decir:

./aplicaion 10 25 30 45

__*_
___*
__*_
___*

Para ello tengo esta formula:

columna = ( sin(parametroX)-1/2 ) * (numeroparametrosmetidos-1)(numeroparametrosmetidos-1)


Bien, creo que lo tengo casi todo bien, pero tengo un problema, al intentar hacer el sin(ValorDelParametro) me dice que el parametro pasado a sin tiene que ser de tipo double, y claro, yo lo tengo de tipo entero.

Hice esto, pero no funciona, si pueden resolver la duda, se lo agradecería muchisimo:


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define PI 3.1415

void main(int argc, char *argv[]){
int i, j, col;
if(argc-1<2){
printf("Has de insertar dos parametros \n");
}else{
for(i=0; i<argc-1; i++){
for(j=0; j<argc-1; j++){
//*** AQUI FALLA NO ME LO PASA A DOUBLE
col=(sin((double)argv[j+1])-1/2) * (argc-1)+(argc-1);
if(col=j+1){
printf("*");
}else{
printf("_");
}
}
printf("\n");
}
}
}


El error es: Se uso un valor de apuntador cuando se esperaba un valor de coma flotante.

Como ven, yo puse: (double)argv[j+1] para ver si me convertia el tipo argv a double, pero no funciona.

¿Alguien sabe como podría cambiarlo, please?
__________________
Charlie.
  #2 (permalink)  
Antiguo 30/12/2004, 05:47
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
El principal problema es que partis de una premisa falsa argv[] es un puntero a una cadena de caracteres no un entero.

El error que me devuelve VC++ es este:
C2440: 'type cast': cannot convert from 'char *' to double

Con este código si compila (no he probado el funcionamiento):

double numero = atof(argv[j+1]);
col=(sin(numero)-1/2) * (argc-1)+(argc-1);
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 30/12/2004, 06:01
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Bien, asi si me compila, sin embargo, al ejecutarlo me da el siguiente erroro:

violación de segmento.

¿Tendré que usar el malloc o algo asi?
__________________
Charlie.
  #4 (permalink)  
Antiguo 30/12/2004, 06:05
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Primero y principal DE NADA, no por esta respuesta sola sino por todas.

A mi no me genera ninguna excepción, ¿Que parámetros estas usando y que compilador?

PD. if(col=j+1){ esto hace que le des a col el valor j+1 y nunca va a ser falso.

if (col==j+1) supongo que quisiste poner, eso es para comparar una igualdad.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 30/12/2004 a las 06:06
  #5 (permalink)  
Antiguo 30/12/2004, 06:25
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Tienes razón Eternal_Idol, no te he dado las gracias y es una falta de consideración por mi parte, por lo pronto, te expongo mis excusas, ya que en estos dos días he aprendido mucho de ti y de los demás, con sus respuestas.

Verás, es que tengo que resolver el ejercicio a una chavala (Y en el trabajo hacen oidos sordos de que no se C) y estoy muy desesperado tio, por eso se me ha ido mucho la pinza, sin embargo, quiero que tengas presente que te estoy muy agradecido por la ayuda que me brindas y me disculpes por no habertelas dado hasta tu llamada de atención, se que es una falta de consideración por mi parte, por lo que me quito el sombrero, gracias de verdad.

Lo de col=1 tienes razón, lo cambié justo despues de poner el post y se me fue la pinza y no lo cambie aqui.

Estoy compilando con gcc en Linux:
gcc cadenas.c -o cadenas -lm

Hasta ahora no me da ningún problema ese compilador.


No me da error al compilar ni al ejecutar, algo debería de haber puesto algo mal, creo que fue que puse: valor = atof(*argv[j+1]); y hable antes de tiempo.

Sin embargo, hago un printf("%d", valor); por cada argumento pasado y todos me devuelven el valor 0.

Debería devolverme parametro.00 en todo caso, ¿Verdad?
__________________
Charlie.
  #6 (permalink)  
Antiguo 30/12/2004, 06:30
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Vale, creo que ahora va bien:

hago un printf("%f", valor); en vez de %d y me muestra todo.
__________________
Charlie.
  #7 (permalink)  
Antiguo 16/02/2011, 19:20
 
Fecha de Ingreso: febrero-2011
Mensajes: 2
Antigüedad: 13 años, 2 meses
Puntos: 0
Pregunta Respuesta: Lenguaje C, problema al pasar de un tipo de valor a otro

Cita:
Iniciado por Eternal Idol Ver Mensaje
El principal problema es que partis de una premisa falsa argv[] es un puntero a una cadena de caracteres no un entero.

El error que me devuelve VC++ es este:
C2440: 'type cast': cannot convert from 'char *' to double

Con este código si compila (no he probado el funcionamiento):

double numero = atof(argv[j+1]);
col=(sin(numero)-1/2) * (argc-1)+(argc-1);
hola me llamo miguel mejor conocido en el bajo mundo como mikerk bueno trata de lo siguiente:
soy nuevo en esto, apenas estoy aprendiendo lenguje c, lo que estoy haciendo se basa en una tarea la cual consiste en ver si tu ¿te haces responsable de la informacion brindada?ya que vi tu respuesta de la pregunta de el amigo, y por lo cual quiero saber tu respuesta de la pregunta que te hice y como no se nada espero y me contestes bueno mil gracias espero tu respuesta grxx..
  #8 (permalink)  
Antiguo 16/02/2011, 19:23
 
Fecha de Ingreso: febrero-2011
Mensajes: 2
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Lenguaje C, problema al pasar de un tipo de valor a otro

oye te dejo mi correo: [email protected] para saber tu respuesta mil graxx
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:55.