viernes, octubre 31, 2008

Apuntadores en C o C++ -Conceptos-

Hace algunos días un amigo (hola Moi!) me pidió ayuda acerca de como usar apuntadores en C++. El esta estudiando su carrera en sistemas computacionales y le pidieron hacer un programa que manejara listas, listas doblemente enlazadas, listas circulares doblemente enlazadas, y listas -con otros nombre extraños-.

El caso es que le redacté un documento breve de qué son los apuntadores, y como podría usarlos, así como darle uno que otro tip para usarlos.
Empecé a hacer memoria de lo que nos habían enseñado en el Tec, y este es el documento resultante.

- Si he cometido alguna imprecisión, por favor háganla saber ya que fueron hace algunos años que lleve 'estructura de datos' donde me vi "obligado" a aprender el lenguaje C y C++. -
Creo que el documento sí le sirvió ya que pudo terminar su programa sin problemas -tengo su acuse de recibo-.

Este es el contenido del documento:
=================================================================
Un apuntador no es más que un indicador a una dirección de memoria.

Para entender un poco esto, digamos que la memoria (La memoria RAM), tiene dos valores principales. 1. Su contenido, y 2. Su dirección.

El contenido es para saber que valor esta almacenando en la memoria.
La dirección es para saber en qué parte o ubicación de la memoria esta ese valor.

Por ejemplo, una variable guarda el valor. Un apuntador apunta la dirección.
NOTA: Con un apuntador también puedes consultar el contenido de la memoria (sin necesidad de usar una variable).

Pero a diferencia de la variable, un apuntador te da más ‘poder’ o ‘control’ sobre tus recursos, en este caso la memoria.
Con una variable puedes guardar valores fijos.
Con un apuntador tu límite es la capacidad de la memoria RAM. (es decir tu puedes usar o manejar la memoria a conforme la necesites).

Supongamos que declaras una variable de tipo char y la declaras como “chrLugar”, y le asignas el valor de “ZIHUA”.
Y supongamos que declaras un apuntador *prtLugar y apunta a la dirección donde comienza ZIHUA.
Si vemos eso en la memoria RAM seria algo asi:
Con la variable, tu accederías a ZIHUA, la variable ve como un todo, y no te interesa saber en qué parte de la memoria está siendo usada.

Si accedes a ZIHUA con un apuntador, usarías *prtLugar.
NOTA: *prtLugar te da el contenido. Con &prtLugar te da la dirección.

Para comparar y diferenciar:
Variable = chrLugar valor: ZIHUA
Apuntador= *prtLugar valor: ZIHUA
Direccion= &prtLugar valor: 1018

NOTA: Aunque el apuntador *prtLugar apunta a una dirección… realmente te devuelve el contenido.
Eso es lo básico para entender apuntadores.

Para entender listas enlazadas (de cualquier tipo, ya sea circular, doblemente enlazada, doblemente enlazada circular, etc.)

Es necesario entender dos cosas:
1 Apuntadores.
2 Estructuras (cómo definir un struct en C)

Y aparte debes de tomar en cuenta lo siguiente que es muy importante sobre todo en listas doblemente enlazadas:
El orden de insertar o agregar un elemento en la lista.
El orden de quitar o remover un elemento en la lista.

(Debe de revisarse siempre el orden en que se agrega o se remueve un elemento).

Ejemplo de una lista, supongamos que tenemos un listado de Nombres y teléfonos.
Debemos de manejar siempre un apuntador que apunte a la raiz (root) o el primer elemento.
Y debemos de tener un apuntador que hará los barridos o recorridos.



De lo anterior tenemos una lista.

Un apuntador raiz (*root) que apunta al primer elemento (Juan).
En la estructura tenemos un apuntador (*sig) que apunta al siguiente elemento.

El último elemento (Luis), su apuntador sig, apunta a NULL. Ya que no hay mas elementos en la lista.

Cuando queramos insertar un nuevo registro en la lista, debemos de buscar a “*sig” y que sea NULL, entonces a ese lo apuntaremos, de NULL al nuevo elemento.

Cuando queramos borrar un elemento, debemos de buscar el valor por ejemplo queremos borrar a Hugo, y hacemos que el apuntador de Juan, apunte a Luis. Y haciendo eso, Hugo esta removido de la lista.


Si quieres mas detalles avísame

martes, octubre 28, 2008

Siendo organizado en el Trabajo

Hace un par de semanas terminé de leer este libro "Getting Organized at Work" por Kenneth Zeigler.
Un libro de fácil y rápida lectura, pero aún así te hará tomar notas, y reflexionar acerca de cómo estas llevando tu día en el trabajo.

Debo reconocer que cuando no organizo las cosas, y pienso que así gano tiempo de algo que probablemente no necesitaré; siempre llega el momento en el que me arrepiento de no haberme o haberlo organizado antes, ya que siempre llega el momento también de que lo necesite. Esto por lo regular me pasa en la oficina de la casa, pocas veces en el trabajo.

Siempre tengo la idea de que sabiendo dónde estas las cosas, -cualquier cosa- es un ahorro de tiempo enorme.

Hagamos una revisión del libro, no pondré todo lo importante del libro, solo resaltare algunos puntos. Lo cierto es que todo el libro esta repleto de consejos muy valiosos.

Don't Procrastinate
Esta palabrita que últimamente la he visto mas seguido, la identifico mas en español como "desidia", mas que posponer, desgraciadiamente muchos de nosotros posponemos cosas, o procrastinamos, es decir dejamos cosas que estamos haciendo para después.
Siempre me encuentro con gente que deja todo a último minuto; el dejar de hacer las cosas para después, es un mal hábito, que debo de agradecer a mi Padre, me lo quito. Siempre me inculcó que cuando las cosas puedan hacerse al momento, deben de comenzarse de inmediato, y nunca dejar al último. En otras palabras, siempre tener las cosas listas desde mucho antes de que las pidan.
Creo que esto también se debia a que me dejaba tareas, y fecha para concluirlas, al poco tiempo siempre me preguntaba si ya la había terminado, y siempre era antes de la fecha, y cuando decía que todavía no.. Preguntaba por qué... y el decir que ‘porque la fecha para terminarla no llegaba’, no era una respuesta aceptable.

Bueno, regresemos al tema.

Plan your Work o Planea tu Trabajo.

Otro de los puntos que señala el libro es el de planeación del trabajo. Aunque parece obvio, el de planear el trabajo, muy pocos lo hacen, o mejor dicho, muy pocos saben planear el trabajo.
Las preguntas importantes, son
+ Qué es planear el trabajo?
+ Qué se necesita planear?

He conocido casos en que creen que con solo llenar actividades en el "MS Project", creen que ya están planeando y si fracasa la planeación o el proyecto, es culpa de otros, ya que "ellos planearon".
Realmente la planeación involucra mas que definir tareas y asignarles un plazo.
Involucra identificar recursos, y la importancia de los mismos, involucra saber, y si es necesario, definir el objetivo principal, y también otra cosa olvidada, premiar cuando se logran los objetivos.
Otra de las cosas muy importantes, dentro de planear el trabajo, es trabajar el plan.

Planeación del trabajo y administración de proyectos, lo comparo mucho a volar un avión, desde antes del despegue, hasta el aterrizaje. Un ejemplo de a lo que me refiero es este: 11 Lessons from flying


Otro punto que se ve 'obvio' es el de DeLeGAR.
No es solo pasarle el trabajo a otros para que lo hagan, sino el saber cómo delegar, a quién delegar y qué delegar.
Parecido a la idea de "lead by example", creo que tambien se puede aplicar aqui, aunque lo diria de esta forma 'delega con ejemplo'.
Es decir, no solo pasar el trabajo para que otro 'se ensucie las manos', sino mas bien para sacar provecho de todos los recursos y se logren las metas más rápido.
Ventajas que menciona el libro son:

  • Te ahorrará tiempo.
  • Es una de las mejores formas de motivación porque exhorta a la participación.
  • Ayuda a desarrollar a tu staff en un grupo más productivo.
  • Exhorta a la confianza y cooperación en el equipo.

Como mencioné, este libro esta atiborrado de ideas y excelentes consejos.

  • Si crees que le faltan horas a tu dia.
  • Si no lees todos tus mails porque son 'muchos', o contestas sin haber leido todos.
  • Si sales tarde de tu trabajo y tienes pendientes que crees pudiste haberlos terminado.
  • Si haces horas extras por tu trabajo.
  • Si no sabes que hacer con tanto papel en tu escritorio.
  • o simplemente no estas al dia ni al tanto en tu dia de trabajo...

Definitivamente debes de leer este libro.





lunes, octubre 27, 2008

Situación Financiera Mundial -Parte II-

Esta es la segunda parte del mensaje anterior Situación Financiera Mundial -Parte I-


----
Situación Financiera Mundial -Parte II-
Por Carlos Méndez de PriceWaterHouseCoopers

¿Que podemos hacer?

Como Socio Líder de Auditoría, estoy preocupado tanto de la continuidad de nuestra Firma como de la tranquilidad de ustedes y de apoyarles y aconsejarles lo más posible para que podamos todos salir bien de estos acontecimientos. Es posible que la economía de México se frene. Esto nos impactaría como Firma y por lo tanto a nivel personal. Es por eso que acompaño algunas recomendaciones a nivel personal y algunas que tomaremos como Firma.


A nivel personal

  • Cuidar su trabajo. No sólo implica tener la actitud correcta diariamente al venir a trabajar sino procurar cuidar la continuidad de la Firma. Ser más eficiente, no perder el tiempo. Hacer nuestro trabajo con excelencia.

  • Bajar el nivel de gastos personales. Es importante que revisen sus gastos personales y procuren apretarse el cinturón. Procuren NO gastar en cosas que no sean de primera necesidad.

  • Ahorrar lo más posible. Esto se hace aún más importante por la incertidumbre que existe actualmente.

  • Mantener nuestro dinero en el banco. Por más que escuchen que hay bancos quebrando en el mundo, es muy improbable que esto suceda en México. Asimismo, es importante que entiendan que sus ahorros en bancos tienen un seguro por parte del gobierno federal. El tener su dinero debajo del colchón, con el compadre o en alguna caja de ahorro no necesariamente les da esta garantía.

  • Bajar lo más posible sus deudas, sobre todo las deudas que tengan una tasa de interés que no sea fija. Me refiero a tarjetas de crédito y créditos personales. Las tasas de interés van a subir. Entre más rápido puedan pagar estos créditos mejor. NO paguen sólo el mínimo que muestra el estado de cuenta.

  • Analicen la tasa de interés que están pagando por sus deudas y asegúrense de estar pagando tasas competitivas.

  • Entiendan la diferencia entre usar una tarjeta de crédito y endeudarse con una tarjeta de crédito. El primer caso es aquél que utiliza su tarjeta y la paga completa cada mes. El segundo caso es aquél que utiliza el crédito que da el banco o la tienda departamental. El primero no tiene ningún problema por que no hay costo. El segundo paga intereses muy altos.

  • Las tarjetas de crédito y las tarjetas de las tiendas son una tentación enorme. No saquen nuevas, e incluso, si pueden cancelar algunas háganlo. En un futuro podrán volver a sacar una nueva si es necesario.

  • Por contra, en el caso de los créditos hipotecarios (Infonavit, etc) a tasa fija, en este momento es mejor no adelantar pagos, sino ahorrar el dinero. NO dejen de pagar a tiempo sus casas. Es su patrimonio más importante.

  • No compren las ofertas de “Meses sin Intereses”. Me preocupa mucho esta forma de mercadotecnia que muchas tiendas utilizan para vender más. Como la persona no lo siente en el momento se inclina a hacer la compra. Sin embargo, la única forma de que no pague uno intereses es que cada mes pague el total de lo que le pusieron en la tarjeta. Poca gente lo hace y los bancos así ganan muchísimo dinero. Si no está uno consciente que, el comprar en esta forma equivale a que su sueldo se reduce por esos meses en el monto de la mensualidad, les va a costar mucho dinero en intereses.

  • Tener cuidado con dar préstamos a otras personas. Es muy común que alguien allegado les pida dinero prestado. Si lo llegan a hacer pidan alguna garantía (la factura del coche, etc.). Esta persona puede estar ahogándose y se los puede llevar consigo si no tienen mucha precaución.

  • Mantenerse saludables. Las enfermedades cuestan dinero. Pónganse a dieta, bajen de peso, hagan ejercicio, bájenle al cigarro y al alcohol.

  • Comentar todo esto con sus familias. Es importante que sus parejas y sus hijos lo entiendan.

En la Firma.

En la Firma, todos tenemos que hacer lo siguiente.

1. Cuidar a los clientes. Tenemos que cuidar a nuestros clientes con la calidad y la atención, e incluso cuidar su dinero.

2. Cobrar más rápido. La nómina se paga de la cobranza.

3. Financiar la cartera lo menos posible.

4. Bajar los gastos lo más posible. En esto es importante todos estemos muy alertas. Reducir costos incluye:

a) Teléfono, luz, papelería. Usemos sólo lo indispensable.

b) Viajes. Vamos a reducir los viajes lo más posible. En general debemos ser muy
estrictos en la aprobación de todos los gastos.

c) Revisar cuidadosamente cualquier gasto o inversión antes de llevarlo a cabo.


5. Cuidar los activos de la empresa (coches, fotocopiadoras, computadoras, etc.)

6. Vender más. Tenemos que invertirle y venderle mas a los clientes actuales y a los potenciales.

7. Seamos más eficientes con la utilización de nuestra gente y tratemos de eliminar al máximo el tiempo improductivo y el tiempo extra.

Conclusión

Es incierto cuánto tiempo durará esta crisis mundial. Gente con la que he platicado extensamente comentan que mínimo 6 meses pero puede durar años. Lo importante primero es entender el porqué se dio y aprender de la lección. Es por eso que decidí enviar este comunicado. Es muy importante estar informados.

Repito, el objetivo de este correo no es alarmarlos, es informarlos. No es el fin del mundo pero sí debemos entender que el mundo va a afectar a México.

Reciban un cordial saludo.