Ayuda porfa :), duda con programacion HPGCC
- Inicie sesión o regístrese para enviar comentarios
Tengo una gran duda, como puedo ingresar un numero imaginario al realizar un programa en hpgcc, por ejemplo para un entero es muy facil (int x), y despues con printf podemos imprimir un cierto numero, pero con los numeros complejos como le hago?
, como puedo declarar un complejo?, operaciones entre complejos?, y mostrar numeros complejos?, por favor ayuda,:'(, necesito saber como
, grax
- Inicie sesión o regístrese para enviar comentarios
Otros temas de interes
- como hacer una barra de menus ??
- Nueva Calculadora HP?? HP 39gII spécification
- ROM 2.10-7 Spreadsheet & Geometry manuales y biblioteca.
- Ayuda con Raices
- [PROYECTOS] EoEiProEngLib, MathEngProLib, EquatnEngProLib & and HP50GNKLib
- ayuda con integral exponencial
- programa tipo excell que permita introducir formulas en las tablas
- como aprender tantos comandos en SYSTEM?
- [PROYECTO] Universal Font Library for HP50G CAS para recuperar "Hello World" 3 ->GROB de la HP48GX (1994)
Hola Elias, no conozco mucho sobre este lenguaje y su uso en la calculadora, estoy aprendiendo igual que tú, pero vi algo relacionado con tu pregunta en la página:
En el indice verás en la parte 2:
Extend your 50g with C - Part 2
How to Follow the Examples
The Examples
Example: Real and Complex LogGamma
Este ejemplo habla sobre como manipular complejos pero es descargando un archivo dado en la misma sección, lo pongo por si acaso:
http://www.hydrix.com/Download/Hp/hpgcc/arm-elf-toolchain.4.2.2.linux.ta...
Este solo sirve para el compilado utilizando cygwin, bueno toda la información detallada la encuentras en está página, que a mi me está sirviendo mucho, saludos.
- Inicie sesión o regístrese para enviar comentarios
Holas, despues de mucho tiempo vuelvo a este negocio jejeje (estaba falto de tiempo) y queria una ayuda con este codigo, porque me sale error en una de las funciones.
#include hpgcc49.h
#define MAXCADENA 200
enum { Ver=1, Alta, Buscar, Salir} ;
struct Entrada {
char * nombre;
char * direccion;
char * telefono;
};
struct NodoAgenda {
struct Entrada datos;
struct NodoAgenda * sig;
};
typedef struct NodoAgenda * TipoAgenda;
void quita_fin_de_linea(char linea[])
{
int i;
for (i=0; linea[i] != '\0' ; i++)
if (linea[i] == '\n') {
linea[i] = '\0';
break;
}
}
void muestra_entrada(struct NodoAgenda * e)
// POdríamos haber pasado e por valor, pero resulta más eficiente (y no mucho más
// incómodo) hacerlo por referencia: pasamos así sólo 4 bytes en lugar de 12.
{
printf("Nombre : %s\n", e->datos.nombre);
printf("Direccion: %s\n", e->datos.direccion);
printf("Telefono : %s\n", e->datos.telefono);
}
void libera_entrada(struct NodoAgenda * e)
{
int i;
free(e->datos.nombre);
free(e->datos.direccion);
free(e->datos.telefono);
free(e);
}
TipoAgenda crea_agenda(void)
{
return NULL;
}
TipoAgenda anyadir_entrada(TipoAgenda agenda, char nombre[],
char direccion[], char telefono[])
{
struct NodoAgenda * aux, * e;
/* Averiguar si ya tenemos una persona con ese nombre */
if (buscar_entrada_por_nombre(agenda, nombre != NULL))
return agenda;
/* SI llegamos aquí, es porque no teníamos registrada a esa persona. */
e = malloc(sizeof(struct NodoAgenda));
e->datos.nombre = malloc((strlen(nombre)+1)*sizeof(char));
strcpy(e->datos.nombre, nombre),
e->datos.direccion = malloc((strlen(direccion)+1)*sizeof(char));
strcpy(e->datos.direccion, direccion);
e->datos.telefono = malloc((strlen(telefono)+1)*sizeof(char));
strcpy(e->datos.telefono, telefono);
e->sig = agenda;
agenda = e;
return agenda;
}
void muestra_agenda(TipoAgenda agenda)
{
struct NodoAgenda * aux;
for (aux = agenda; aux != NULL; aux = aux->sig)
muestra_entrada(aux);
}
struct NodoAgenda * buscar_entrada_por_nombre(TipoAgenda agenda, char nombre[])
{
struct NodoAgenda * aux;
for (aux = agenda; aux != NULL; aux = aux->sig)
if (strcmp(aux->datos.nombre, nombre) == 0)
return aux;
return NULL;
}
void libera_agenda(TipoAgenda agenda)
{
struct NodoAgenda * aux, *siguiente;
aux = agenda;
while (aux != NULL) {
siguiente = aux->sig;
libera_entrada(aux);
aux = siguiente;
}
}
void escribe_agenda(TipoAgenda agenda, char nombre_fichero[])
{
struct NodoAgenda * aux;
FILE * fp;
fp = fopen(nombre_fichero, "w");
for (aux=agenda; aux!=NULL; aux=aux->sig)
fprintf(fp, "%s\n%s\n%s\n", aux->datos.nombre,
aux->datos.direccion,
aux->datos.telefono);
fclose(fp);
}
TipoAgenda lee_agenda(char nombre_fichero[])
{
TipoAgenda agenda;
struct Entrada * entrada_leida;
FILE * fp;
char nombre[MAXCADENA+1], direccion[MAXCADENA+1], telefono[MAXCADENA+1];
int longitud;
agenda = crea_agenda();
fp = fopen(nombre_fichero, "r");
while(1) {
fgets(nombre, MAXCADENA, fp);
if (feof(fp)) break; // Si se acabó el fichero, acabar la lectura.
quita_fin_de_linea(nombre);
fgets(direccion, MAXCADENA, fp);
quita_fin_de_linea(direccion);
fgets(telefono, MAXCADENA, fp);
quita_fin_de_linea(telefono);
agenda = anyadir_entrada(agenda, nombre, direccion, telefono);
}
fclose(fp);
return agenda;
}
/**********************
* Programa principal *
**********************/
int main(void)
{
TipoAgenda miagenda;
struct NodoAgenda * encontrada;
int opcion;
char nombre[MAXCADENA+1];
char direccion[MAXCADENA+1];
char telefono[MAXCADENA+1];
char linea[MAXCADENA+1];
clear_screen();
miagenda = lee_agenda("agenda.txt");
do{
printf("Menu:\n");
printf("1) Ver contenido completo de la agenda.\n");
printf("2) Dar de alta una persona.\n");
printf("3) Buscar telefonos de una persona.\n");
printf("4) Salir.\n");
printf("Opcion: ");
gets(linea); sscanf(linea, "%d", &opcion);
switch(opcion) {
case Ver:
muestra_agenda(miagenda);
break;
case Alta:
printf("Nombre : "); gets(nombre);
printf("Direccion: "); gets(direccion);
printf("Telefono : "); gets(telefono);
miagenda = anyadir_entrada(miagenda, nombre, direccion, telefono);
break;
case Buscar:
printf("Nombre: "); gets(nombre);
encontrada = buscar_entrada_por_nombre(miagenda, nombre);
if (encontrada == NULL)
printf("No hay nadie llamado %s en la agenda.\n", nombre);
else
muestra_agenda(encontrada);
break;
}
} while (opcion != Salir);
escribe_agenda(miagenda, "agenda.txt");
libera_agenda(miagenda);
while(!keyb_isON());
}
Porque error en la funcion: "buscar_entrada_por_nombre()"
Lo copie de un ejemplo en un libro, pero parece que esta mal, lo probe con devc++ y me sale el mismo error.
Gracias por adelantado por la ayuda.
- Inicie sesión o regístrese para enviar comentarios
Hola Angel,
En la línea 60 usted tiene
/* Averiguar si ya tenemos una persona con ese nombre */ if (buscar_entrada_por_nombre(agenda, nombre != NULL)) return agenda;
debería ser:
/* Averiguar si ya tenemos una persona con ese nombre */ if (buscar_entrada_por_nombre(agenda, nombre) != NULL) return agenda;
Ahora estas tratando de usar la función "buscar_entrada_por_nombre()" en la línea 60, la cual no ha sido declarada, aparece declarada en la línea 84, entonces para solucionar esto una posibilidad es declarar esta función al principio en la línea 20 después de definir TipoAgenda, quedaría así:
typedef struct NodoAgenda * TipoAgenda; struct NodoAgenda * buscar_entrada_por_nombre(TipoAgenda agenda, char nombre[]);
Los otros ya son Warming, de variables no usadas, hay que agregarle un enter al final del documento, y al final de la función main agregar return 0; ya que main() retorna un entero.
- Inicie sesión o regístrese para enviar comentarios
Holas aprovechando que Edwin esta contestando
y hice un programa para ahorrar pilas:
#include
int pr( char ch );
int letra( char ch );
void redibujador(int no, double *datos);
int main(){
char linea[100];
char ch;
/* an es auxiliar de los numeros*/
double an,datos[200];
int cedun,cedul,sig,c,no=0,pos=0,aoa=0,t=0,ac;
/* no es la cantidad de niveles ocupados */
/* cedun Carga Exitosa De Un Numero*/
/* cedul Carga Exitosa De Un Letra*/
clear_screen();
for(c=7;c>0;--c) printf("%d:\n",c);
while(!keyb_isON()){
gets(linea);
t=0;
while(linea[t]!='\0')t++;
pos=0;
while(linea[pos]!='\0' && pos <= t ){
cedun=cedul=c=aoa=0;
sig=1.,an=ac=0;
ch=linea[pos];
if(ch=='-'){sig=-1.;
pos++;
ch=linea[pos];}
while(pr(ch)){if(ch=='.'){c++;
pos++;
ch=linea[pos];}
if(pr(ch)){if(c){an=(an*pow(10,c)+ch-'0')/pow(10,c);
c++;}
else an=an*10.+ch-'0';
cedun=1;
pos++;
ch=*(linea+pos);}
}/* */
if(cedun==1){for(c=no;c>0;--c)datos[c]=datos[c-1];
datos[0]=an*sig;
no++;
redibujador(no,datos);}
else{if(sig==-1.){datos[0]=datos[1]-datos[0];
if(no>2)for(c=2;c2)for(c=2;c0;--c)datos[c]=datos[c-1];
++no;
redibujador(no,datos);
break;
case 'S'+'W'+'A'+'P': an=datos[1];
datos[1]=datos[0];
datos[0]=an;
redibujador(no,datos);
break;
case 'R'+'O'+'T': an=datos[2];
datos[2]=datos[1];
datos[1]=datos[0];
datos[0]=an;
redibujador(no,datos);
break;
case 'U'+'N'+'R'+'O'+'T': an=datos[0];
datos[0]=datos[1];
datos[1]=datos[2];
datos[2]=an;
redibujador(no,datos);
break;
case 'S'+'Q': datos[0]=datos[0]*datos[0];
redibujador(no,datos);
break;
case 'S'+'Q'+'R'+'T': datos[0]=sqrt(datos[0]);
redibujador(no,datos);
break;
case 'S'+'I'+'N': datos[0]=sin(datos[0]*3.141592/180.);
redibujador(no,datos);
break;
case 'C'+'O'+'S': datos[0]=cos(datos[0]*3.141592/180.);
redibujador(no,datos);
break;
case 'T'+'A'+'N': datos[0]=tan(datos[0]*3.141592/180.);
redibujador(no,datos);
break;
}
}
if(ch==' '){ pos++; }
} /* fin del while segundario*/
} /* fin del while principal*/
return 0; } /* fin de la funcion main() */
int pr( char ch ){ return ( '0'<=ch && ch<='9' ) || (ch == '.') ; }
int letra( char ch ){ return ( 'A'<=ch && ch<='Z' ); }
void redibujador(int no, double *datos){
int c;
clear_screen();
if(no<7){
for(c=0;c<7;++c)
if(7>(no+c)) printf("%c:\n",'7'-c);
else printf("%c: %f\n",'7'-c,*(datos+6-c));
}
else { for(c=0;c<7;++c)printf("%c: %f\n",'0'+7-c,*(datos+6-c)); }
}
Pero cuando yeve el programa a la calculadora me di con una sorpresa y fue no poder teclear el caracter '/', ¿como se puede teclear este caracter en la calculadora?
- Inicie sesión o regístrese para enviar comentarios
Hola Luis,
No a mi no me compila ni siquiera el programa, veo unos errores en los ciclos for de la línea 47, y además veo que usas el case, pero en ningún momento declaro el switch. Me muestra los siguientes errores:
> "dmake" test2.o arm-elf-gcc -mtune=arm920t -mcpu=arm920t -mlittle-endian -fomit-frame-pointer -msoft-float -Wall -Os -pipe -mthumb-interwork -mthumb -IC:\HPGCC-2.0-native-win32-SP2/include -I.. -c test2.c -o test2.o test2.c: In function 'main': test2.c:47: error: 'c2' undeclared (first use in this function) test2.c:47: error: (Each undeclared identifier is reported only once test2.c:47: error: for each function it appears in.) test2.c:47: error: expected ';' before ')' token test2.c:47: error: 'c0' undeclared (first use in this function) test2.c:52: error: case label not within a switch statement test2.c:58: error: case label not within a switch statement test2.c:65: error: case label not within a switch statement test2.c:72: error: case label not within a switch statement test2.c:75: error: case label not within a switch statement test2.c:78: error: case label not within a switch statement test2.c:81: error: case label not within a switch statement test2.c:84: error: case label not within a switch statement test2.c:114:2: warning: no newline at end of file make: *** [test2.o] Error 1 > Process Exit Code: 2 > Time Taken: 00:00
- Inicie sesión o regístrese para enviar comentarios
aqui nuevamente el codigo:
http://rapidshare.com/files/412449632/codigo.txt
- Inicie sesión o regístrese para enviar comentarios
Gracias Edwin por la ayuda, si yo sabia que iba por ahi el problema pero plantee mal la solucion. Ahora el problema que me presenta es que... no funciona el programa
, parece que es un error de punteros jijiji, tendre que hacer una revision total de todo.
Nuevamente gracias Edwin y un saludo.
- Inicie sesión o regístrese para enviar comentarios
Si ahora si me compila, 0 errores 0 warnings. Pero el problema que tienes es la implementación para la calculadora del comando gets(). Ya que para la calculadora comparte la tecla 'Z' y '/'. Y el comando gets() lo toma siempre como Z. Como solución puedes reprogramar el comando gets con comandos como:
keyb_isAnyKeyPressed()
keyb_isKeyPressed(a,b)
...
- Inicie sesión o regístrese para enviar comentarios
Esta bien gracias Edwin
- Inicie sesión o regístrese para enviar comentarios
Gracias Edwin por la ayuda, si yo sabia que iba por ahi el problema pero plantee mal la solucion. Ahora el problema que me presenta es que... no funciona el programa, parece que es un error de punteros jijiji, tendre que hacer una revision total de todo.
Nuevamente gracias Edwin y un saludo.
Hola Angel, estuve probando el programa y funciona bien, lo que necesita es que exista por lo menos un archivo agenda.txt vació en la tarjeta SD.
- Inicie sesión o regístrese para enviar comentarios
Ahora si! gracias Edwin eres un grande!.
- Inicie sesión o regístrese para enviar comentarios
soy nuevo aqui , se que aprendere mucho GRACIAS A TODOS linda comunidad
- Inicie sesión o regístrese para enviar comentarios














