Autor Tema: :: simpre carga -121 :: [SOLUCIONADO]  (Leído 2231 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
:: simpre carga -121 :: [SOLUCIONADO]
« en: 16 de Julio de 2012, 13:35:46 »
hola
Estoy con un programa sencillo el cual mediante una operacion
 carga valores a un vector la cosa rara es que en su ultima posicion
simpre carga -121.
lo depure con proteus y si carga -1 20
y printea -121 y no se de donde lo saca ya que previamente formateo el vector
para que no nos meta cosas raras...

que explicacion podria tener esto, que cosa más rara..?

Un Saludo..
« Última modificación: 23 de Agosto de 2012, 13:21:18 por pajaro »

Desconectado electroipod

  • PIC16
  • ***
  • Mensajes: 166
Re: :: simpre carga -121 ::
« Respuesta #1 en: 16 de Julio de 2012, 14:04:48 »
deberias ser mas especifico para poder ayudarte por lo menos pon el codigo para saber que es lo que estas haciendo.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: simpre carga -121 ::
« Respuesta #2 en: 16 de Julio de 2012, 14:32:06 »
Hola

Se trata de un programa que genera un vector
que pasa a un vector definido anteriormente por parametro..


Código: C++
  1. //main
  2. int8 angulo[7];
  3. ..
  4. ..
  5.  
  6. asig_angulo(angulo,7);
  7.  
  8. ...


Código: C++
  1. /// 45,60,75,90,105,120,135
  2. void asig_angulo(int8 *v[],int8 t){
  3. int8 t_ang_v[7];     // temporal angulo
  4. int8 mi_ang;         // var para for
  5. int8 opera_ang;      // guarda operacion
  6.  
  7.    ini_v(t_ang_v,7,0);     //inicializa vector
  8.    muestra_v(t_ang_v,7);   //muestra vector ---debug
  9.    
  10.    for(mi_ang=0;mi_ang<7;mi_ang++){
  11.    opera_ang =((45)+(15 * mi_ang));
  12.       t_ang_v[mi_ang]=opera_ang ;
  13.       printf("\n\r t_ang_v[%d]: %d"mi_ang, t_ang_v[mi_ang]); //---debug
  14.    }//fin for
  15.    //copia a vector de salida;
  16.    copy_v( t_ang_v,v,7);
  17. }

lo demas parece que lo hace bien lo raro es porque genera -121 si deberia de  ser 135

depuro con proteus

Un Saludo


« Última modificación: 17 de Julio de 2012, 10:18:56 por pajaro »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: :: simpre carga -121 ::
« Respuesta #3 en: 16 de Julio de 2012, 15:06:12 »
  No será por el tipo de variable. Suponiendo que "int8" sea entero de 8 bits... ¿es con o sin signo? Probá de definir una variable unsigned..

  Fijate que 135 supera el valor para una variable de 8 bits con signo cuyo rango sería de -127 a 128
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: simpre carga -121 ::
« Respuesta #4 en: 16 de Julio de 2012, 16:06:20 »
Hola  :oops:

llevas razon NO me percate de ese detalle,
 hice esta prueba:


Citar
//main
prueba_1()
mi funcion

Citar
void prueba_1(){
int8 a=0;
while(a<300){
a=a+1;
printf("\n\r valor de a: %d "a);
}


si no quisiera despilfarrar memoria se podria utilizar algun truco?

con el ejemplo anterior

con int8 a 125 no llega pero de debug de proteus muestra el -120

porque llega desde : con el ultimo ejemplo. se muestra en proteus

1
2
3
4
..
127
-128
-127
-126
..
..
-1
0
1
2
3
4


asi hasta infinito

trasponiendo eso a mi problema
-120 debe de ser mi 135
por lo tanto

135-127=8
128 el maximo

nos muestra -128
entonces -128+8= -120

hay alguna forma de obtener mi 135
135= positivo 126 + negativo 120

algun truquillo debe de haber..

2 exp 8= 256 -> 1-127  /  -128->-1

int8 =256 -> 1111 1111

 256 -> 0xFF

¿se podra acumular en hexadecimal y mostrar en decimal?

alguna idea..

sigo rulando la idea..


« Última modificación: 17 de Julio de 2012, 10:21:34 por pajaro »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: :: simpre carga -121 ::
« Respuesta #5 en: 16 de Julio de 2012, 16:39:48 »
y utilizar int16?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: :: simpre carga -121 ::
« Respuesta #6 en: 16 de Julio de 2012, 16:49:48 »
Código: C
  1. void asig_angulo(int8 *v,int8 t){
  2. int8 mi_ang;         // var para for
  3.  
  4.    for(mi_ang=0;mi_ang<t;mi_ang++){
  5.       *v=((45)+(15 * mi_ang));
  6.       printf("\n\r v[%u]: %u",mi_ang, *v); //---debug
  7.       v++;
  8.    }
  9. }

Es lo mismo, más rápido y menos gasto de memoria. Si tu variables es sin signo utiliza %u.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: simpre carga -121 ::
« Respuesta #7 en: 17 de Julio de 2012, 10:30:32 »
hola
Gracias a todos, por compartir y colaborar.

Si, en este ejemplo uso enteros sin signo y al imprimir con %d me sacaba el -120.

Una pregunta

si defino unsigned int8, ¿es lo mismo que si imprimiera con %u ?
o lo que hace es.. ¿acotarme la variable a los positivos?

es decir:

int8 : 1-127 y -128 -1
pero si uso
unsigned int8 1-256

ambas variables ocupan lo mismo verdad?
pero su representacion al imprimirlas es diferente..!

un saludo

« Última modificación: 17 de Julio de 2012, 10:33:05 por pajaro »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: :: simpre carga -121 ::
« Respuesta #8 en: 17 de Julio de 2012, 20:12:19 »
 Cualquiera de las dos variables ocupan lo mismo, 8 bits.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: simpre carga -121 :: [SOLUCIONADO]
« Respuesta #9 en: 23 de Agosto de 2012, 13:22:25 »
Hola
gracias nuevamente por su colaboración,
este hilo queda completado.

Un Saludo.