TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pajaro en 27 de Abril de 2009, 21:11:01

Título: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 27 de Abril de 2009, 21:11:01
Hola amigos

Quisiera hacer en C una función, que me imprimiese los valores de un vector. de forma apilada, y que me valise para diferentes vectores.

tipo a esto :

////////////////////////////////////////////////////////////////////
imprime_vector(int x,int y,int a, int b,char cadena);
const char vactor[4][10]={"El uno","El dos","El tres","El cuatro"};
char cadena,cad;
int valor;

main()
  {
    for(valor=0;valor<5;valor++)
      {
       cad=*vector[valor];
       imprime_vector(3,1,0,valor,cad);
      }
getch(); //si pulsas tecla sale.
  }

imprime_vector(int x,int y,int a, int b,char cadena)
{
gotoxy(x+a,y+b);
printf("%s",cadena);
}

este programa no me funiona, podrian decirme cual es mi error/es.

Un saludo,
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 27 de Abril de 2009, 21:31:00
Hola

Los errores que veo:

const char vactor[4][10]={"El uno","El dos","El tres","El cuatro"};
Debe ser:
const char vector[4][10]={"El uno","El dos","El tres","El cuatro"};

char cadena,cad;
cadena y cad deben ser declarados como apuntadores a char y no como un simple char:
char *cadena, *cad;

cad=*vector[valor];
Es una forma errónea de obtener la dirección ram de vector, si fuera CCS sería doblemente errónea ya que los const se guardan en ROM y no hay forma de direccionar un apuntador desde ram hacia rom directamente. La corrección que yo haría es usar el ampersand & para obtener la dirección ram de memoria y asignarla al apuntador cad.
cad=&vector[valor];
Si usas CCS entonces la constante vector declárala en ram para que el apuntador cad pueda accesarla (quítale el const).

getch();
Desconozco si está función existe en CCS, yo usaría getc() en espera de un char desde rs232.

imprime_vector(int x,int y,int a, int b,char cadena)
El prototipo de imprimevector deberá aceptar una dirección ram en cadena y no un char.
imprime_vector(int x,int y,int a, int b,char *cadena)

Veo que hay muchas dudas con el uso de arreglos de chars y strings. Gera comentó que iba a hacer un tutorial de strings, espero que lo tenga listo pronto.

Me gustaría hacer uno también  :mrgreen:
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 28 de Abril de 2009, 17:16:15
hola amigo

tengo alguna dudilla, con esto de los vectores y las cadenas .
tengo 3 vectores de 5,3,4 elementos:

v1[5][10]={"primero ","segundo ","tercero ","cuarto ","quinto "}
v2[5][10]={"primero ","segundo ","tercero "}
v3[5][10]={"primero ","segundo ","tercero ","cuarto "}

primero me gustaria saber si existe alguna funcion que cuente los elementos de un vector.

Por algun otro foro, me han recomendado que inicialice mi ultimo elemento a "\0", como identificador de fin de cadena.
¿Esto es fiable?¿Hay otra forma de hacerlo?

Pregunto .... seria algo asi..a mi no me rula..


Código: C
  1. e_vector()              //funcion para saber la logitud de un vector
  2.       {
  3. int a=0;              // a es el acumulador, b es la posicion del vector a buscar
  4. char b;
  5.  
  6. while(b!=0)           //mientras sea distinto busca
  7.      {
  8.       if(b!="\0")       //si es distinto
  9.            {
  10.            b=v1[a];
  11.            a=a+1;
  12.            }
  13.       }
  14. }


El segundo problema es, como modificar dicha funcion para pasarle el nombre del vertor a contar.
la funcion seria de salida un entero y de entrada un vector.

Código: C
  1. int e_vector(char v1(n))
  2. {
  3. int a=0;              // a es el acumulador, b es la posicion del vector a buscar
  4. char b;
  5.  
  6. while(b!=0)           //mientras sea distinto busca
  7.      {
  8.       if(b!="\0")       //si es distinto
  9.            {
  10.            b=v1[a];
  11.            a=a+1;
  12.            }
  13.       }
  14. return(a);              //nos da el valor de a, elementosde a.
  15. }

alguien puede aconsejarme o decirme...

es posible convertir una cosntante tipo char a una constante.


Un saludito, a todos




Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 28 de Abril de 2009, 17:55:21
Bueno, no has mencionado qué compilador usas.

¿Primero mencionabas que querías hacer una función que imprimiera valores en printf y luego quieres contar los elementos de una matriz? Creo que no has definido bien tu problema.

Lo que te mencionaron sobre el último elemento de un arreglo de chars siendo un Null char (0x00) es solo para marcar el fin de una cadena y no sirve para contar elementos de una matriz como v1 o v2.

En CCS busqué y no encontré una función que indique el tamaño de un arreglo o matriz. Sí existen en otros compiladores, por ejemplo en C# existe el GetLength().

Voy a hacer un pequeño tutorial de cadenas.
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 28 de Abril de 2009, 19:25:05
Bueno, ya terminé el tutorial. Dale una checada y dime si puedes resolver tus dudas con él.  :mrgreen:

http://www.todopic.com.ar/foros/index.php?topic=25785.new#new
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 28 de Abril de 2009, 21:28:57
Hola amigo

Por fin me deja entrar..ese error de up!..base de...


pues si amigo, para micros uso la programacion de C CCS .
el tuto encontre una "rata" debajo del segundo cuadro gris donde pone novena creo que es octava.
el 4 y 5 cuadro gris me interesa, te explico.


bueno mire tu tuto comprendi muchas cosas de las que explicaste ahi, pero me surgieron otras dudas.

los arregros se pueden llamar string?
son vectores, de constantes de tipo cadena "char", cierto?
tambien pueden ser variables, cierto?,

cadena[]="cadena"
cadena[]={"c","a","d","e","n","a"}

¿estas dos cosas son lo mismo?

se debe de definir la longitud de la cadena, teniendo en cuenta que si definimos 5 elementos el quinto elemento sera un nulo.

pregunto, lo designo yo o lo designa el compilador?

si designo un vector de 5 v1[5]="abcde" //no se si son comillas simples o doble -->corrigeme.
y lo imprimo con un for desde el 0 hasta el 7

//////////////////////////////////////////////////no se si el programa funciona.
for(a=0;a<8;a++) //para que imprima de 0 a 7
{
print("%s \n",v1[a]);
}

///////////////////////////////////////
me imprima Todas las letras o solo las 4 primeras?
el resto de posiciones los llenara con lo de memoria o me los dejara en blanco?

el caso anterior es un vector lleno con letras,
si lo llenamos con cadenas entonces se define como una matriz?

v1[5][10]={uno,dos,tres,cuatro,cinco}//aceptaria sin comillas

si llevara caracter terminador, lo llevaria cada cadena de las 5 ,
en lo leido dice que cada cadena llevara su caracter terminador, correcto lo cogi.

la funcion strlen te cuenta caracteres de una cadena pero te contaria los de todo un vector.


un  saludo, dormir debo.



Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 29 de Abril de 2009, 11:34:29
Cierto, en el tutorial debe decir octava. Lo voy a corregir.

Citar
los arregros se pueden llamar string?

Los arreglos son arreglos. Los strings son la traducción de cadenas en inglés. Solo podrás llamar string a un arreglo de chars que maneje un NULL char al final del texto útil.

Citar
son vectores, de constantes de tipo cadena "char", cierto?

No, son vectores de variables tipo char. El contenido de esas variables se modifica en el programa (sprintf, strcat, funciones manuales, etc.). Ejemplo:

Código: [Seleccionar]
char nombre[50]="Santiago";
...
sprintf(nombre,"%s Todopic",nombre);

Al principio nombre contendrá 'Santiago'. Al final nombre contendrá 'Santiago Todopic'.

Código: [Seleccionar]
cadena[]="cadena"
cadena[]={"c","a","d","e","n","a"}

¿estas dos cosas son lo mismo?

No. La primer cadena está bien declarada. La segunda se debe declarar así:

Código: [Seleccionar]
cadena[]={'c','a','d','e','n','a'}
De tal forma ambas ya será iguales.

Citar
si designo un vector de 5 v1[5]="abcde" //no se si son comillas simples o doble -->corrigeme.
y lo imprimo con un for desde el 0 hasta el 7

Está mal, debes declarar el texto útil + Null. Debe ser así:

v1[6]="abcde";

o que el compilador los cuente solito:

v1[]="abcde"; //aparta 6 bytes para el vector automáticamente (5 letras + null)

Citar
for(a=0;a<8;a++) //para que imprima de 0 a 7
{
print("%s \n",v1[a]);
}

Eso no funciona. Al pedirle a printf que use %s le estás indicando que imprima caracteres hasta encontrar un null char. Debes usar %c para imprimir un solo caracter.

Código: [Seleccionar]
printf("%c",v1[a]);
Citar
si lo llenamos con cadenas entonces se define como una matriz?

v1[5][10]={uno,dos,tres,cuatro,cinco}//aceptaria sin comillas

Sin comillas no te deja compilar. Es una matriz correcta, ponle comillas a cada cadena.

Citar
la funcion strlen te cuenta caracteres de una cadena pero te contaria los de todo un vector.

strlen() solo cuenta caracteres hasta encontrar un NULL char. Solo dice cuántas letras útiles hay.
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 30 de Abril de 2009, 16:58:33
hola amigo MigSantiago

quisisera preguntar una cosilla

si se quisisera hacer una función que imprimiese los valores de un verctor de constantes, como se definiria?

Código: C
  1. cont char menup1[6][]={"uno","dos","tres","cuatro","cinco","seis"};
  2. cont char menup2[6][]={"unoA","dosA","tresA","cuatroA","cincoA","seisA"}
  3.  
  4. apila_vectr(int col,int lin,int posA,int posB,menup1[pos-1]);
  5. {
  6. for(pos=col;pos<col+lin;pos++)
  7.           {
  8.            lcd_gotoxy(posA,posB);                           /// Situa menu 3,posb(1,2,3,4)
  9.            printf(lcd_putc,"%s",menup1[pos-1]);       ///muestra mirecion de menu
  10.            posB=posB+1;                                        ///inc. linea
  11.            if(posB>lin){posB=1;}                             ///limita linea
  12.           }
  13. }

esto te mostraria el contenido del vector? o eso he eintentado
como se le pasaria el volor de otro vector.
la cabecera de la funcion debe de ser incorrecta. 
c de CSS me tira muchos errores


Un saludo amigo
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 30 de Abril de 2009, 18:51:14
Creo que estás complicándote mucho, aunque todavía no entiendo qué quieres que la función haga.

Te pongo un ejemplo de función que imprime una cadena de acuerdo a un entero:

Código: [Seleccionar]
const char cadena[][]=
   {"Este es un UNO",
   "Este es un DOS",
   "Este es un TRES",
   "Y este es el último. Tan Tan."};

void ImprimeLCD(int x, int y, int numero)
{
lcd_gotoxy(x,y);
printf(lcd_putc,"%s", cadena[numero]);
}

Si numero vale 3, entonces la salida será:

Código: [Seleccionar]
Y este es el último. Tan Tan.
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 30 de Abril de 2009, 21:15:40
hola Amigo MigSantiago

esto de la funcion es sencillo se trata de implementar una funcion que la entrada sea un vector diferente segun situacion,
me explico tengo un vector.
menup[][]={"1.-menu1","2.-menu2","3.-menu3","4.-menu4","5.-menu5"};

lo quiero mostrar asi:

_ _ 1.-menu1
_ _ 2.-menu2
_ _ 3.-menu3
_ _ 4.-menu4
_ _ 5.-menu5

esta función la usaría siempre que quìsera leer un menu o un submenu, ya que serían vectores, ambos.

Código: C
  1. cont char menup1[6][]={"uno","dos","tres","cuatro","cinco","seis"};
  2. cont char menup2[6][]={"unoA","dosA","tresA","cuatroA","cincoA","seisA"}
  3.  
  4. apila_vectr(int col,int lin,int posA,int posB,menup1[pos-1]);
  5. {
  6. for(pos=col;pos<col+lin;pos++)
  7.           {
  8.            lcd_gotoxy(posA,posB);                           /// Situa menu 3,posb(1,2,3,4)
  9.            printf(lcd_putc,"%s",menup1[pos-1]);       ///muestra opcion de menu
  10.            posB=posB+1;                                        ///inc. linea
  11.            if(posB>lin){posB=1;}                             ///limita linea
  12.           }
  13. }

pero menup1 no se va ha llamar siempre seria posible hacer


//////////////////////////////////////////////////////////////////////////

cont char menup1[6][]={"uno","dos","tres","cuatro","cinco","seis"};
cont char menup2[6][]={"unoA","dosA","tresA","cuatroA","cincoA","seisA"}

apila_vectr(int col,int lin,int posA,int posB,menup1[pos-1]);
{
for(pos=col;pos<col+lin;pos++)
          {
           lcd_gotoxy(posA,posB);                           /// Situa menu 3,posb(1,2,3,4)
           
           printf(lcd_putc,"%s",menup1[pos-1]);       ///muestra mirecion de menu

           posB=posB+1;                                        ///inc. linea
           if(posB>lin){posB=1;}                             ///limita linea
          }
}

////////////////////////////////////////////////////

menup1 sera esta vez pero otras sera menup2 , que hago declaro una variable vector de intercabio.
o simplemente en entrada declaro como vector

apila_vectr(int col,int lin,int posA,int posB,menup1[8]);

lo malo es que ese vector no simpre va ha ser de 8 sino que va ha variar, y me interesa ahorrar memoria.


tu como lo ves, entiendes ahora lo que intento hacer, basicamente es esto, después tendre que perfecionar más la función.

Un saludo amigo.

Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 01 de Mayo de 2009, 12:15:31
No declaras bien la función.

Código: [Seleccionar]
#
apila_vectr(int col,int lin,int posA,int posB,char *menu);
#
{
#
for(pos=col;pos<col+lin;pos++)
#
         {
#
          lcd_gotoxy(posA,posB);                           /// Situa menu 3,posb(1,2,3,4)
#
          printf(lcd_putc,"%s",menu);       ///muestra opcion de menu
#
          posB=posB+1;                                        ///inc. linea
#
          if(posB>lin){posB=1;}                             ///limita linea
#
         }
#
}
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 01 de Mayo de 2009, 12:30:25
Hola Amigo MigSantiago

Si declaro la cabecera de funcion:

apila_vectr(int col,int lin,int posA,int posB,char *menu);

el vector lo declaramos como un puntero?
entoces con solo pasarle el nombre del vertor, por ejemplo menup01, o menup02, sin ponerle por ejemplo menup01[8];

Amigo Santigo puedes explicarme? te lo agradeceria amigo MigSantiago.

Un saludo, gracias por tu ayuda.
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 01 de Mayo de 2009, 13:08:12
Si le pasas:

Código: [Seleccionar]
apila_vectr(1,2,3,4,menupo1[2]);
Imprimirá

Código: [Seleccionar]
3.-menu3
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 01 de Mayo de 2009, 16:55:32
Hola Amigo MigSantiago

te agradezco tu respuesta,pero yo le quiero pasar el nombre del vector, no un valor del vector, esto es posible?

apila_vectr(1,2,3,4,menupo1[2]);

con esta cabecera le paso a la función una direcion del vector,

apila_vectr(1,2,3,4,menupo1[]);

pero lo que yo quiero hacer es pasarle el nombre del vector solamente,

para posteriormente operar sobre el

/////////////////////////////////////////////////////////////////////////

void pantalla(int col,int lin,int posA,int posB,char menup1[])
{
int pos;
 for(pos=col;pos<col+lin;pos++)                  ///limita las lineas a mostrar con referencia al cursor
   {
    lcd_gotoxy(posA,posB);                           ///posiciona el cursor segun referencia de entrada y linea a mostrar
    printf(lcd_putc,"%s",menup1[pos-1]);       ///muestra  opciones del menu segun las lineas permitidas
    posB=posB+1;                                       ///incrementa la posición del cursor con refercia a la entrada y la linea
   }
}

/////////////////////////////////////////////////////////////////////////

es posible pasarle el nombre del vector, sin pasarle ninguna direccion de este vector

la idea es pasar a la entrada de esta funcion diferentes nombres de vectores con los
que posteriormente se operara, teniendo en cuenta que van ha tener diferente longitud.


tengo otra duda ..

char* ptr   es distinto de char *ptr
me da que si! pero puedes indicarme la diferencia.

Un saludo, amigo MigSantiago

Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 01 de Mayo de 2009, 17:18:50
No, no se puede. En C se mueven datos: contenido de variables o dirección ram de variables, pero no nombres de variables.

Estás planteando mal tu problema.

Lo puedes resolver con el ejemplo de multicadenas del tutorial. Estúdialo otra vez.

Código: [Seleccionar]
char* ptr
 char *ptr

Ambos son idénticos hasta donde yo sé.
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 01 de Mayo de 2009, 18:16:01
hola Amigo MigSantiago
arib
si yo quisiera tipificar un comportamiento.

si tenemos:

tenemos una variable "int n"que puede tomar valores de 1 a 8

si n = 1 entonces el vector a pasar es nenup1[] //vector
si n = 2 entonces el vector a pasar es nenup2[] //vector
si n = 3 entonces el vector a pasar es nenup3[] //vector
si n = 4 entonces el vector a pasar es nenup4[] //vector
si n = 5 entonces el vector a pasar es nenup5[] //vector
..
..

esto podria hacerlo con un switch pero dentro del case..
pregunta?
deberia llamar a la funcion de forma manual

case 1
pantalla(int col,int lin,int posA,int posB,char menup1[]);
breack;
case 2
pantalla(int col,int lin,int posA,int posB,char menup2[]);
break
case 3
pantalla(int col,int lin,int posA,int posB,char menup3[]);
break
...
..

cuando

void pantalla(int col,int lin,int posA,int posB,char menup1[])

Amigo santiago,
Algun consejillo

intento indizar vectores desde dentro de un vector, creo que se llama asi,
sigo dandolo vueltas

un saludo,Amigo MigSantiago.

Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 01 de Mayo de 2009, 18:51:47
A ver si esto te convence.

Código: [Seleccionar]
//Declaración de las cadenas globales
const char menup0[][]={"uno","dos","tres","cuatro","cinco","seis"};
const char menup1[][]={"unoA","dosA","tresA","cuatroA","cincoA","seisA"};
const char menup2[][]={"unoB","dosB","tresB","cuatroB","cincoB","seisB"};

//Prototipo de la función
void ImprimeLCD(int x, int y, int menu, int cadena)
{
lcd_gotoxy(x,y);
switch(menu)
    {
    case 0:
        printf(lcd_putc, "%s ", menup0[cadena]);
        break;
    case 1:
        printf(lcd_putc, "%s ", menup1[cadena]);
        break;
    case 2:
        printf(lcd_putc, "%s ", menup2[cadena]);
        break;
    }
}

//Función principal
void main(void)
{
int x=0;
int y=0;
int Menu=2;
int Cadena=3;

ImprimeLCD(x,y,Menu,Cadena);
}

A la salida de la LCD se verá:

Código: [Seleccionar]
cuatroB

Otro ejemplo de uso:

Código: [Seleccionar]
ImprimeLCD(0,0,0,0);

Entregará:

Código: [Seleccionar]
uno
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 01 de Mayo de 2009, 22:29:46
Hola Amigo MigSantiago

mire el programa y aun no me convence, tengo claro lo que quiero hacer pero no se como llevarlo a cabo,
he pensado que la solucion me la podia dar el uso de un poliedro, sería como una matriz, pero con la diferencia que cada submenu sería una dimesion más:



me explico : p1 es el menu

p1
1 -> 1 2 3 4 5 6 ->sub opciones de p1
2 -> 1 2 3 4 5 6
3 -> 1 2 3 4 5 6
4 -> 1 2 3 4 5 6

5 -> 1 2 3 4 5 6 ->sub opciones de la opcion 5 del menu p1
        | | | | | | |
        vv v v vvv
        1
        2
        3
        4
        |
         L-> sub menus de la opcion 1 del sub menu del menu 5  ,

   
en este video se ve lo que hace el menu

http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=25607.0;attach=9050

aqui solo se muestra la pantalla 1
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 02 de Mayo de 2009, 11:45:36
El programa hace exactamente lo que quieres. Debes pedir en 'menu' el menú principal y en 'cadena' la subopción del menú. Estúdialo de nuevo.

Solo falta que declares una matriz de 3 dimensiones: menú, submenú, submenú del submenú.

El video que adjuntas está corrupto.
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 02 de Mayo de 2009, 16:49:29
Bueno, al querer descomprimir el archivo de 68.8kB, Winrar me dice:

!   C:\Documents and Settings\SanLink\Escritorio\lcd_menu.rar: Invalid or corrupt authenticity information
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 02 de Mayo de 2009, 17:02:18
Hola Amigo MigSantiago

Puedes intentarlo ahora lo modifique, creo que no te dejaba por no tener la misma version de licencia del winrar.

Un saludo, MigSantiago.
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 02 de Mayo de 2009, 19:47:44
El link ya no abre.

http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=25607.0;attach=9030
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 02 de Mayo de 2009, 21:26:23
Hola Amigo MigSantiago

No habia caido, que cada vez que modificas lo que subes, tambien se modifica el enlace,
ahora si funciona o eso creo yo, yo lo probe, y me funciona, dime y me cuentas.

aprovecho el mensaje para hacer una pregunta ¿para contar los elementos de un vector?

valdria el STRLEN(), estube mirando la ayuda del CCs pero no me convence,

se podria hacer un for junto con un break() o un exit(),
pero se necesitaria una refencia de terminacion.

Si al vector[]={"1.menu\0","2.menu\0","3.menu\0","4.menu\0"}
podria usar la funcion
una funcion que me contase "\0"


no encuentro el punto de relacion


Un ayudita.

Un saludo, MigSantiago.


Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 02 de Mayo de 2009, 23:50:30
strlen() sirve para contar caracteres hasta encontrar un null char en una cadena. No sirve para contar elementos de un arreglo.
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 03 de Mayo de 2009, 10:26:25
hola Amigos

MigSantiago estube ojenado tu ejemplo el de la respuesta 16 y si yo quiero utilizar mi funcion, necesitaria usar un switch con el cual pudiera elegir el vector con el cual operar

////////////////////////////////////////funcion de muestra de pantalla////////////////////////
..
..
for(pos=col;pos<col+lin;pos++)                ///limita las lineas a mostrar
          {
           lcd_gotoxy(posA,posB);                           /// Situa menu 3,posb(1,2,3,4)
           printf(lcd_putc,"%s",menup1[pos-1]);        ///muestra mirecion de menu
           posB=posB+1;                                        ///inc. linea
           if(posB>lin){posB=1;}                             ///limita linea
          }


////////////////////////////////////////////////////////////////////////////////////////////

la linea en negrita tendria que cambiarla con una llamada a una funcion de selecion de menu

///////////////////////////////////////////// funcion selecion del menu ///////////////////////////////////////////////
...
..

switch(menu)
    {
    case 0:
        printf(lcd_putc, "%s ", menup0[cadena]);
        break;
    case 1:
        printf(lcd_putc, "%s ", menup1[cadena]);
        break;
    case 2:
        printf(lcd_putc, "%s ", menup2[cadena]);
        break;
    }

////////////////////////////////////////////////////////////////////////////////////////////

y despues volver a retornar al caso anteiror, estro comeria muchos recursos

seria mejor matrices multidimensinales.
matriz [ x ] [y]..[z]

lo malo biene al definirlas, mas bien a inicializarlas.

inicializacion de un vector:

vector[6][7]={"1.menu1","2.menu2","3.menu3","4.menu4","5.menu5","6.menu6"};

seria correcto?

o en realidad seria un matriz[6][7] de dos dimensiones y se deberia de ver asi:
matriz de [filas][columnas] en este caso 6 filas y 1 columna. y en vez de ser [6][7], seria [6][1]

imagino que dependera como definas el dato

   vector[6][7]={"1.menu1",
                         "2.menu2",
                         "3.menu3",
                         "4.menu4",
                         "5.menu5",
                         "6.menu6"};


estube mirando por la red:

http://www.zator.com/Cpp/E4_3_6.htm
http://www.zator.com/Cpp/E4_3_7.htm
http://www.ulpgc.es/otros/tutoriales/mtutor/mt2d.html
http://secciondeprogramacion.blogspot.com/2007/09/lenguaje-de-alto-nivel.html
http://profeblog.es/blog/alfredo/2008/05/10/arrays-bidimensionales-y-multimensionales-en-c/

por Dios, un poco de luz, que alguien me saque de dudas.









Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 03 de Mayo de 2009, 11:26:37
Deberías estudiar más el lenguaje C.

Declara el vector así:

Código: [Seleccionar]
vector[][]={"1.menu1","2.menu2","3.menu3","4.menu4","5.menu5","6.menu6"};
En el tutorial claramente comenté que el compilador cuenta los elementos de la cadena y su null char y les da tamaño automáticamente.

Y los siguientes códigos son idénticos. No importa si están separados con líneas.

Código: [Seleccionar]
vector[][]={"1.menu1","2.menu2","3.menu3","4.menu4","5.menu5","6.menu6"};
Código: [Seleccionar]
   vector[][]={"1.menu1",
                         "2.menu2",
                         "3.menu3",
                         "4.menu4",
                         "5.menu5",
                         "6.menu6"};
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 03 de Mayo de 2009, 11:45:52
Hola MigSantiago

vector[][],

¿Seria un vector o una matriz?


Un saludo
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 03 de Mayo de 2009, 11:47:12
Es un arreglo de 2 dimensiones. El tamaño dependerá de lo que escribas después del =
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 03 de Mayo de 2009, 14:38:15
hola MigSantiago

Podria echarle un vistacico ha este, programica:

http://www.todopic.com.ar/foros/index.php?topic=25607.msg211448#msg211448

alguna recomendacion.

Un saludo
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: migsantiago en 03 de Mayo de 2009, 15:06:49
Código: [Seleccionar]
pantalla(col,lin,posA,posB,menup1[]);
menup1[] no es una variable. Es una declaración de variable que está incorrectamente usada ahí.

Debes poner algo entre los corchetes: menup1[5] por ejemplo.
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 04 de Mayo de 2009, 08:27:28
Hola Amigo MigSantiago

en cabecera de definicion le puse:

///////////////////////////cabecera de definiciones////////////////////////////////////////////
..
..
void pantalla(int col,int lin,int posA,int posB,char* menup1);
..
..
///////////////////////////////////////////////////////////////////////////////////////////////////



en el programa la llamo:

/////////////////////////////////////Programa principal/////////////////////////////////////////

..
....
pantalla(col,lin,posA,posB,*menup1);
...
...

///////////////////////////////////////////////////////////////////////////////////////////////////



terminado el programa principal, tengo las funciones , la función la tengo así:

//////////////////////////////////////Apartado de funciones/////////////////////////////////////
...
...

void pantalla(int col,int lin,int posA,int posB,char* menup1)
{
int pos;
 for(pos=col;pos<col+lin;pos++)                ///limita las lineas a mostrar
   {
    lcd_gotoxy(posA,posB);                        ///posiciona segun refrencia y líneas
    printf(lcd_putc,"%s",menup1[pos-1]);     ///muestra dato
    posB=posB+1;                                     ///incrementa cursor
    if(posB>lin){posB=1;}                          ///limita incremento
   }
}

...
...

////////////////////////////////////////////////////////////////////////////////////////////////////



como la defino en funcion y como la defino en programa?


Un saludo MigSantiago.


Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 05 de Mayo de 2009, 10:35:31
Hola amigos

Yo sigo errre que errre...


* vector --es una variable puntero

para que nos muestre algo previamente debemos pasarle algo?

vector=&vector1  //a la variable vectorl e cargo la direcion de vector1

si hago var1 = *vector ; //nos mostrará el contenido de vector que será el mismo que vector1

si hago * vector // ahora si que me sacará lo contenido en el vector.

Es eso cierto.

alguien me puede confirmar.

un saludo.
Título: Re: Función - Situa posición - imprime valor con formato - Vector
Publicado por: pajaro en 07 de Mayo de 2009, 08:35:01
Hola Amigos

Tras unos dias, de releer este hilo y otros hilos, pense en lo que realmente quería conseguir, para el programita en mente, tambien examine el hilo del tutorial del amigo MigSantiago, asi como sus ejemplos del propio.Asi que una vez más. "Divide y venceras".Problema grande suma de problemas pequeños.

Que es lo que quiero?
como lo quiero?
como lo voy ha hacer?

quiero un menu que tenga anidamos menus.Correcto.
Como lo quiero! quiero un menu desplegable, cada menu tendría sus opciones que te pueden llevar a otro menu o no, es decir puede llevarte a otro menu o ejecutar una funcion concreta.

como lo hare, menu principal con n opciones, esas n opciones puden contener subopciones y estas a otras en el peor de los casos, en el mejor de los casos no llamar a otro menu sino que ejecuta una una orden, dicho en pocas palabras nos hace un evento, cambio de configuracion, de hora u otros.

si pongo cada menu en un vector o arreglo, despues tengo que lincarlos con un if usando otra variable, o usando un switch y con sus cases.
La primera idea es llamar al nombre del vector y operar sobre el, la elección del menu o la de opcion se va a producir simpre de la misma forma aumentado la posicion del vector y leccionandola.

1.- seleciono vector 2.- seleccino posicion
si cambio de menu cambio de vector incrementaria posicion de la coordenada si fuese una matriz.

reducimos intermediarios,Reducimos problemas.
defino una sola variables que contenga todos los menus y opciones.
 en realidad estamos jugado con dos varibles menus y opciones.
menu[filas][columnas].

con esto me evito el lincarlos.

y x-->
|
v
ahora llega el problema

cuando tenia 1 solo arreglo se definia menu[5][10]={"uno","dos","tres","cuatro","cinco"}
esto eran 5 grupos de 10 caracteres maximo.

para definir un   const char
menu[5][5][10]={"1uno","1dos","1tres","1cuatro","1cinco"},
{"2uno","2dos","2tres","2cuatro","2cinco"},
{"3uno","3dos","3tres","3cuatro","3cinco"},
{"4uno","4dos","4tres","4cuatro","4cinco"},
{"5uno","5dos","5tres","5cuatro","5cinco"}}

en ccs los probe me tira errores que el dato es demasiado grande y luego me dice expecting a declaration.

No entiendo lo que dice todos los errores son en la misma linea, que casualidad en la linea de la definicion.

alguna ayudita.

Un Saludo