Kaixo!

El caso es que estoy "haciendo" un programilla en C que haga ciertos
cálculos. Éstos son los que nos nos piden en las prácticas de una
asignatura. Al ser unas cuantas prácticas, he metido cada una en un fichero
diferente, dejando otro para algunas funciones comunes, además de la
principal. Como mis conocimientos de programación se resumen en una
asignatura cuatrimestral, hay ciertas cosas que, aunque funcionan, han
quedado feas y no sé cómo mejorarlas. Paso a describirlas para ver si a
alguien le apetece echarme una mano.

NOTA: Podéis encontrar todos los ficheros
aquí<http://mod-pc.com/reviews/opositivo/ZTPK/>.


- Aunque he definido algunas constantes en la función principal, a la hora
de compilar me exige ponerlas también en aquellos ficheros donde esté la
función que haga uso de esa constante. No me extrañaría si lo hiciera en
todos los casos, pero sólo lo hace a veces. En "bederatzipraktika.h", por
ejemplo, no me compila si quito la definición, pero en "hamarpraktika.h" no
me da ningún problema, pese a no estar definida la constate PI. Es más, los
cálculos los hace sin problemas. Me gustaría poder quitar las definiciones
de todas las "librerías" y dejarlas sólo en el fichero principal.

- En la función principal tengo incluidas las librerías que necesito: una
por cada práctica, la común, math.h, string.h, stdio.h y stdlib.h.
Haciéndolo así, no me da ningún problema a la hora de llamar a cualquier
función que se encuentre en otro fichero. Desde la función principal llamo a
las funciones de cada práctica y funciona sin problemas. Sólo hay un caso
donde no me lo permite. En "komunak.h", la función "aukeakgaldetu" pregunta
qué se quiere calcular, y ofrece diferentes opciones en función de la
práctica que sea.

*Código:*

int aukerakgaldetu(int zenba)
{
int metodoa;
printf("Zein kalkulu burutu nahi duzu?\n\n");
aukerakbatuposible(zenba);
printf("\nAukera: ");
fflush(stdin);
scanf("%i",&metodoa);
return metodoa;
}

void aukerakbatuposible(int zenbb)
{
if(zenbb==2){aukerakbi();}
if(zenbb==4){aukeraklau();}
if(zenbb==5){aukerakbost();}
if(zenbb==6){aukerakbost();}
if(zenbb==7){aukerakzazpi();}
if(zenbb==8){aukerakzortzi();}
if(zenbb==11){aukerakhamaika();}
if(zenbb==14){aukerakhamasei();}
if(zenbb==15){aukerakhamabost();}
if(zenbb==16){aukerakhamasei();}
if(zenbb==17){aukerakhamazazpi();}
if(zenbb==18){aukerakhamasei();}
if(zenbb==21){aukerakhogeitabat();}
if(zenbb==22){aukerakhogeitabat();}
}

Si pongo cualquiera de las funciones "aukerak*" en sus respectivos ficheros,
es decir, "aukerakbi" dentro de "bipraktika.h", "aukeraklau" dentro de
"laupraktika.h" , etc. no me compila. Me dice lo siguiente:

*Código:

*70 c:\dev-c_~1\include\komunak.h
implicit declaration of function `int aukerakhamaika(...)'*
*
Eso si pongo tanto la función en sí como su declaración en otro fichero. Si
pongo la declaración en "komunak.h" y luego la función en otro fichero, no
me da ningún problema. Léase:

*Código:

*En komunak.h

void aukerakhamaika(void);

Y

void aukerakhamaika()
{
printf("1. Potentzia aktiboaren kalkulua\n");
printf("2. Kosinuaren kalkulua\n");
printf("3. Potentzia eta kosinuaren kalkulua\n");
}

FUNCIONA

*Código:*

En komunak.h

void aukerakhamaika(void);

Y en hamaikapraktika.h

void aukerakhamaika()
{
printf("1. Potentzia aktiboaren kalkulua\n");
printf("2. Kosinuaren kalkulua\n");
printf("3. Potentzia eta kosinuaren kalkulua\n");
}

FUNCIONA

*Código:*

En hamaikapraktika.h

void aukerakhamaika(void);

Y

void aukerakhamaika()
{
printf("1. Potentzia aktiboaren kalkulua\n");
printf("2. Kosinuaren kalkulua\n");
printf("3. Potentzia eta kosinuaren kalkulua\n");
}

NO FUNCIONA
*
*Me gustaría pode hacer lo de la tercera opción y que cada práctica tenga
las opciones en su fichero. Luego que la función "aukerakbatuposible" llame
si es necesario y así se muestren.

- En la séptima práctica, zazpipraktika.h, necesito en una función comparar
el string recogido con una serie de strings que tengo yo. Recoger el string
no me supone ningún problema, ni tampoco compararlos. Lo que no consigo es
"rellenar" los strings con los que se ha de comparar sin tener que hacerlo
carácter por carácter. Ahora mismo está así:

*Código:*

char
zilarra[8];zilarra[0]='Z';zilarra[1]='I';zilarra[2]='L';zilarra[3]='A';zilarra[4]='R';zilarra[5]='R';zilarra[6]='A';zilarra[7]='\0';

char
urrea[6];urrea[0]='U';urrea[1]='R';urrea[2]='R';urrea[3]='E';urrea[4]='A';urrea[5]='\0';

char
beltza[7];beltza[0]='B';beltza[1]='E';beltza[2]='L';beltza[3]='T';beltza[4]='Z';beltza[5]='A';beltza[6]='\0';

char
marroia[8];marroia[0]='M';marroia[1]='A';marroia[2]='R';marroia[3]='R';marroia[4]='O';marroia[5]='I';marroia[6]='A';marroia[7]='\0';

char
gorria[7];gorria[0]='G';gorria[1]='O';gorria[2]='R';gorria[3]='R';gorria[4]='I';gorria[5]='A';gorria[6]='\0';

char
laranja[8];laranja[0]='L';laranja[1]='A';laranja[2]='R';laranja[3]='A';laranja[4]='N';laranja[5]='J';laranja[6]='A';laranja[7]='\0';

char
horia[6];horia[0]='H';horia[1]='O';horia[2]='R';horia[3]='I';horia[4]='A';horia[5]='\0';

char
berdea[7];berdea[0]='B';berdea[1]='E';berdea[2]='R';berdea[3]='D';berdea[4]='E';berdea[5]='A';berdea[6]='\0';

char
urdina[7];urdina[0]='U';urdina[1]='R';urdina[2]='D';urdina[3]='I';urdina[4]='N';urdina[5]='A';urdina[6]='\0';

char
morea[6];morea[0]='M';morea[1]='O';morea[2]='R';morea[3]='E';morea[4]='A';morea[5]='\0';

char
grisa[6];grisa[0]='G';grisa[1]='R';grisa[2]='I';grisa[3]='S';grisa[4]='A';grisa[5]='\0';

char
zuria[6];zuria[0]='Z';zuria[1]='U';zuria[2]='R';zuria[3]='I';zuria[4]='A';zuria[5]='\0';

char ez[3];ez[0]='E';ez[1]='Z';ez[2]='\0';

Me gustaría saber si hay alguna forma de hacerlo similar a esto:

*Código:*

char zilarra[8]="ZILARRA";
char urrea[6]="URREA";
char beltza[7]="BELTZA";
char marroia[8]="MARROIA";
char gorria[7]="GORRIA";
char laranja[8]="LARANJA";
char horia[6]="HORIA";
char berdea[7]="BERDEA";
char urdina[7]="URDINA";
char morea[6]="MOREA";
char grisa[6]="GRISA";
char zuria[6]="ZURIA";
char ez[3]="EZ";

Lo he intentado, pero el compilador me dice que "ISO C++ forbids assignment
of arrays" y se queda tan ancho.

Por si alguien echa un vistazo al código de esta práctica y no sabe euskera,
su función es convertir resistencias de código de colores a valor en ohminos
con tolerancia y temperatura, y viceversa. Siento que esté tan desordenado y
caótico. He ido escribiéndolo según me venía a la cabeza, sin ningún
planteamiento previo. Ahora me toca limpiarlo y dejarlo lo más limpio que me
sea posible. Tengo una versión más "ordenada" pero está sin subir

Por otra parte, todo esto lo he hecho con Dev-C++ bajo Windows, pues es así
como aprendí. Me gustaría saber si habría algún problema para compilarlo y
ejecutarlo desde GNU/Linux. Supongo que no debería haber ningún problema y
bastará con compilarlo con GCC o algo similar. Pero prefiero preguntar, by
the flies.

Antes de terminar, también quisiera enterarme sobre cómo funciona el tema de
licenciar un programa y documentarlo. Parece absurdo hacer siquiera ese
curro para un programilla de mierda como es éste, pero ya que me he puesto
me gustaría hacerlo, pues nunca me he hecho nada parecido. Así, si algún día
me da por hacer algo más importante ya sé cuáles son los pasos. Conozco
algunas de las licencias más utilizadas y en trabajos y presentaciones lo
que hago es añadir una nota al final indicando bajo qué licencia distribuyo
la "obra". Pero con un programa no sé qué se hace/debería hacer, ni qué
licencias son las más utilizadas/adecuadas.

Y por último ya, esto con algo/bastante más de margen, simplemente quería
preguntar si alguien ha trabajado con curses, ncurses o pdcurses. Cuando
termine con estos problemillas y arregle el código para quitar todas las
cosas repetidas, me gustaría hacer un poco más presentable el programilla y
quitar esos caracteres ascii por alguna ventana cutre pero no rancia. No sé
si tengo conocimientos suficientes de programación para meterme en ello o si
va a requerir que meta más horas de las que dispongo.

Sin nada más, y a la espera de que no haya resultado demasiado chapa,

un saludo
_______________________________________________
Itsas-core mailing list
[email protected]
http://bipt106.bi.ehu.es/mailman/listinfo/itsas-core

Responder a