xMegamanx
Usuario
Trucos Dead Space para PC y XBOX 360 Modo de nivel imposible Si superas este terrorífico juego en nivel normal conseguirás el nuevo modo de dificultad. Traje de militar nivel 6 También conseguirás este extra superando el juego en nivel normal. Registro de Antecedentes Historicos Este extra también lo podrás conseguir superando el juego por primera vez en nivel normal. 10 Nodos de Energía Los conseguirás cuando superes el juego en el nivel de dificultad normal. Conseguir 50.000 créditos Será el último de los premios que conseguirás por pasarte el juego en nivel normal. Códigos desbloqueables En caso de que poseas el mando Xbox 360 compatible para PC podrás realizar las siguientes combinaciones de botones para los siguientes trucos desbloqueables: 1.000 créditos: X,X,X,Y,X. 2.000 créditos:Y,X,X,X,Y. 5.000 créditos: X,X,X,Y,X,Y. 10.000 créditos: X,Y,Y,Y,X,X,Y. +2 nodos: Y,X,X,X,Y. +5 nodos: Y,X,Y,X,X,Y. Oxigeno (ilimitado): X,X,Y,Y,Y. Energía de éstasis y kinesis (ilimitado): X,Y,Y,X,Y.

Trucos para Prototype de PC Activar los trucos. En el menú principal del juego busca la opción extras y desde ahí podrás activarlos. Obtener un nuevo juego. Termina el modo historia y podrás volver a jugarlo solo que con todas las habilidades y poderes adquiridos desde el inicio de la partida. Desbloquear el modo de dificultad difícil. Termina el modo historia en modo normal y se activará este nuevo modo de dificultad. Activar los eventos Platino. Consigue el oro en alguno de los eventos y a partir de este momento se activará este nuevo reto aún más difícil de conseguir. Activar el secreto. Tendrás que conseguir todos los eventos de consumo secreto, esto revelará la historia de Karen Parker luego de su desaparición y un evento secreto será revelado. Activar la habilidad para surfear. Ingresa en el menú de trucos y realiza los siguientes movimientos (derecha,derecha, izquierda, abajo, arriba, arriba, arriba, abajo. En ese momento se activará esta genial habilidad. El mejor: Este es un programa llamado Trainer sirve para alterar partes del juego imposibles de realizar con simples trucos, ejemplo; modo dios, munición infinita, ser personajes que nunca podrias ser (esto aplica a todos los juegos no nomas a Prototype), etc. Importante: Para los que les anda lento el juego pueden bajar los gráficos, sombras, etc. en configuración en el menú del juego

Ahora que es tan popular insertar videos de YouTube en nuestros Blogs o sitios web es necesario conocer estos trucos que nos ayudarán a personalizar los videos insertados. A muchas personas no les agradan las nuevas características que van apareciendo en YouTube como las estrellitas, los videos relacionados, la caja de búsqueda o las restricciones regionales, pero afortunadamente todo esto se puede personalizar. Antes de pasar a ver los trucos tenés conocer la estructura de una URL de YouTube, por ejemplo para un video tenemos una URL como la siguiente: http://www.youtube.com/watch?v=Ynz1ZZ1pWZg (a modo de ejemplo) en esta URL podemos agregar variables al final poniendo el símbolo & después el nombre la variable un signo igual = y el valor de la variable, más abajo que veamos los ejemplo espero que quede más claro. 1. Ver los videos en alta calidad - YouTube tiene un botón con las letras HQ para poder ver los videos en alta definición cuando están disponibles, pero podemos forzar en algunos videos que cargue la versión de alta definición agregando al final de la URL lo siguiente: &fmt=18 (stereo, 480 x 270 resolution) o &fmt=22 (stereo, 1280 x 720). 2. Inserta video en tu Blog pero en su versión de alta calidad - Este truco es como el anterior pero cambia un poco debido a la codificación de caracteres, por ejemplo para insertar un video tenemos el siguiente código: Código: <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Ynz1ZZ1pWZg&hl=es&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Ynz1ZZ1pWZg&hl=es&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>Al cual debemos de agregar en las URLs las variables que están marcadas en negritas: Código: <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Ynz1ZZ1pWZg&hl=es&fs=1&ap=%2526fmt%3D22"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Ynz1ZZ1pWZg&hl=es&fs=1&ap=%2526fmt%3D22" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object> 3. Hacé que los videos comiencen en la posición que quieras - Este video dura 1:52 minutos, pero los primeros 6 segundos no son interesantes, entonces podemos hacer que comience a partir del segundo 7 agregando la variable: #t=00m06s donde 00m son los minutos y 06s son los segundos. 4. Ocultá la caja de búsqueda - La caja de búsqueda que aparece en en los videos insertados puede ser deshabilitada agregando la variable: &showsearch=0 esta se agrega de la misma manera que el truco número 2. 5. Iniciá los videos insertados en la posición que quieras - Este truco es similar al truco 3 pero este es para los videos insertados por ejemplo para no reproducir los primeros 30 segundos del video tenés que agregar la variable &start=30 de la misma manera que el truco número 2. 6. Reproducir atomáticamente los videos insertados - Con esto no hará falta que el usuario haga click en el botón Play para comenzar el video, ya que este comenzará automáticamente al cargar la página, la variable que hay que agregar es &autoplay=1 7. Hacé que los videos insertados se repitan automáticamente - Para tener un bucle de reproducción infinito debes de agregar la variable &loop=1 a los videos insertados. 8. Deshabilita los videos relacionados - Si no te gusta los videos relacionados que aparecen al final de la reproducción de cada video insertado solamente tenés que agregar la variable &rel=0 9. Burlar el filtro regional - Algunos videos de YouTube solamente están disponibles en algunas partes del mundo, Tu dirección IP es usada para determinar tu ubucación y con esto decidir si mostrarte el video o no, pero para poder ver videos que no está permitidos en tu ubicación tenés que cambiar el formato de tu URL, como el siguiente ejemplo donde originalmente tenés una URL como esta http://www.youtube.com/watch?v=<el_código> la cual tendrías que cambiar a este formato http://www.youtube.com/v/<el_código> 10. Descargar los videos - Hay muchas maneras de descargar videos de YouTube, hasta se pueden descargar los videos en alta definición, o usando aplicaciones o extensiones para Firefox, pero estamos viendo trucos para las URLs, hay 2 muy fáciles una es KissYouTube (besa YouTube) o KickYouTube (patea YouTube), el truco consiste en agregar la palabra kiss o kick a la dirección URL del video que estás viendo por ejemplo tienes una URL así: http://www.youtube.com/watch?v=8-GSzumlhmo ahora sólo agrega la palabra kiss así: http://www.kissyoutube.com/watch?v=8-GSzumlhmo, lo mismo es para kick. Tambien:http://www.downloadyoutubevideos.com,http://www.fliehd.com (la quee uso yo)

Sacado de un Foro Pack de armas 1: LXGIWYL Pack de armas 2: 2KJKSZPJ Pack de armas 3: UZUMYMW Vida, armadura, y 0.000: HESOYAM Incrementa el nivel de búsqueda dos estrellas: OSRBLHH Borra el nivel de búsqueda: ASNAEB Munición infinita, sin recarga: WANRLTW Puntería completa al disparar mientras conducís: OUIQDMW Mega salto: LFGMHAL Mega puñetazo: IAVENJQ Vida infinita: BAGUVIX Oxígeno infinito: CVWKXAM Nunca buscado: AEZAKMI Ajusta el nivel de búsqueda a 6 estrellas: LJSPQK Nunca hambriento: AEDUWNV Máxima habilidad con cualquier arma: NCSGDAG Máxima habilidad con cualquier vehículo: VQIMAHA Máxima musculatura: JYSDSOD Delgado: KVGYZQK Gordo: BTCDBCB Todo el mundo te ataca: BAGOWPG Modo pervertido: BEKKNQV Modo adrenalina: MUNASEF Máximo Sex Appeal: EHIBXQS Máximo respeto: OGXSDAG Recluta a cualquiera (9mm): SJMAHPE Recluta a cualquiera (misiles): ZSOXFSQ Suicidio: SZCMAWO Códigos del entorno: Tiempo soleado: AFZLLQLL Tiempo muy soleado: ICIKPYH Tiempo nublado: ALNSFMZO Lluvia: AUIFRVQS Niebla: CFVFGMJ Reloj más rápido: YSOHNUL Tiempo de juego más rápido: PPGWJHT Tiempo de juego más lento: YOAAY Los viandantes se atacan entre ellos: AJLOJYQY Todo el mundo va armado: FOOOXFT Explotan todos los coches: CPKTNWT Coche invisible: XICWMD Todos los semáforos en verde: ZEIIVG Conductores agresivos: YLTEICZ Tráfico rosa: LLQPFBN Tráfico negro: IOWDLAC Los botes vuelan: FSNMSMW Elvis está en todas partes: ASBHGRB Los peatones te atacan: BGLUAWML Fiesta en la playa: CIKGCGX Miembros de la banda en todas partes: MROEMZH Las bandas controlan la calle: BIFBUZZ Ambiente ninja: AFPHULTL Tráfico con coches baratos: BGKGTJH Tráfico con coches rápidos: GUSNHDE Los coches vuelan: RIPAZHA Salto de conejo: JHJOECW Los coches salen despedidos cuando son golpeados: BSXSGGC Siempre es medianoche: XJVSNAJ Cielo naranja (21:00): OFVIAC Tormenta: MGHXYRM Tormenta de arena: CWJXUOC Modo disturbio: IOJUFZN Ambiente funhouse: PRIEBJ Tráfico reducido: THGLOJ Tráfico con vehículos campestres: FVTMNBZ Los vehículos campestres y los peatones adquieren el equipo Born 2 Truck: BMTPWHR Trucos para los vehículos: Aparece un Tanque: AIWPRTON Aparece un Bloodring Banger: CQZIJMB Aparece un Rancher: JQNTDMH Aparece un auto de carreras: PDNEJOH Aparece un auto de carreras: VPJTQWV Aparece un Romero: AQTBCODX Aparece una limusina: KRIJEBR Aparece un camión de la basura: UBHYZHQ Aparece un carrito: RZHSUEW Aparece un Hydra: JUMPJET Aparece un Hovercraft Vortex: KGGGDKP Aparece un Hunter: OHDUDE Manejo perfecto: PGGOMOY El resto de vehículos explotan al estrellarse: JCNRUAD Todos los coches tienen nitro: COXEFGU Los taxis tienen nitro: VKYPQCF Aparece un paracaídas: AIYPWZQP Aparece un Jetpack: YECGAA Efectos de la adrenalina - munasef Tráfico agresivo - ylteicz Todos los coches tienen nitro- speedfreak Siempre son las 0:00 o las 12:00 - xjvsnaj Siempre son las 21:00 - ofviac Armadura, vida y dinero - hesoyam Canción de Fiesta Playera - cikgcgx Tráfico negro - iowdlac Recompensa por tu cabeza - bagowpg Canciión de carnaval - crazytown Los coches vuelan - bsxsggc Caos en la ciudad - iojufzn CJ salta más - kangaroo Cielo nublado - alnsfmzo Cometer suicidio - szcmawo Vehículo mortal - jcnruad Destruye todos los coches - cpktnwt Cámara rápida - speeditup Barcos voladores - flyingfish Coches voladores - ripazha Niebla - cfvfgmj Nivel Hitman en todas las armas - professionalkiller Munición infinita - fullclip Vida infinita - baguvix Coches invisibles - xicwmd Nivel de Buscado mínimo - asnaeb Control manual de las armas en el coche - ouiqdmw Gordura máxima - btcdbcb Capacidad pulmonar máxima - cvwkxam Músculos máximos - buffmeup Respeto al máximo - worshipme Sex Appeal máximo - helloladies Máxima habilidad en vehículos - naturaltalent Sin gordura ni músculos - kvgyzqk Sin hambre - aeduwnv Peatones Elvis - bluesuedeshoes Peatones atacan con armas - bgluawml Manifestación de peatones - ajlojyqy Tráfico rosa - llqpfbn Aumenta en nivel de Buscado - osrblhh Tráfico reducido - ghosttown Canción rural - bmtpwhr Tráfico rural - fvtmnbz Tormenta de arena - cwjxuoc Nivel de Buscado 6 estrellas - bringiton Cámara lenta - slowitdown Aparece el Bloodring Banger - cqzijmb Aparece el Caddy - rzhsuew Aparece el Dozer - eegcyxt Aparece el Hunter - ohdude Aparece el Hydra - jumpjet Aparece el Jetpack - rocketman Aparece el Monster - monstermash Aparece el Paracaídas- aiypwzqp Aparece el Quad - akjjyglc Aparece el coche de carreras - pdnejoh Aparece la Ranchera - jqntdmh Aparece el Rhino - aiwprton Aparece el Romero - aqtbcodx Aparece el Stunt Plane - urkqsrk Aparece el Tanker - amomhrer Aparece el Trashmaster - truegrime Aparece el Vortex - kgggdkp Acelera el tiempo - ysohnul Tráfico de coches deportivos - gusnhde Clima lluvioso - auifrvqs Clima tormentoso - mghxyrm Clima soleado - afzllqll Super puñetazos - iavenjq Misiones de Taxi completadas - vkypqcf Todos los semáforos verdes - zeiivg Clima muy soleado - icikpyh El nivel de Buscado no aumenta - aezakmi Armas 1 - lxgiwyl Armas 2 - kjkszpj Armas 3 - uzumymw Canción yakuza- ninjatown
Primero que Nada quisiera mencionar que este es un tema algo extenso y lo tratare de explicar en forma detallada, lo mas simple posible, en visto muchos tutoriales de como se puede aprender Programación pero ninguno es del todo fácil de entender, así que os traigo este tuto que tratare de dar la explicación de cada parte de programación. Me enfocare a tipo de programación en C, como lo dice el titulo.COMPLETOLINK:https://skydrive.live.com/?cid=F24A1566A4800508&id=F24A1566A4800508%21270&sc=documents#!/?cid=f24a1566a4800508&sc=documents&move=F24A1566A4800508%211381&sid=F24A1566A4800508%21270&iscopy=1&id=F24A1566A4800508%211382ó este:https://skydrive.live.com/?cid=F24A1566A4800508&id=F24A1566A4800508%21270&sc=documents#!/?cid=f24a1566a4800508&sc=documents&move=F24A1566A4800508%211381&sid=F24A1566A4800508%21270&iscopy=1&id=F24A1566A4800508%211382El Curso Esta Terminado!!!!!!Para quien lo quiera completo les dejo el link..... para pasarlo todo a taringa esta muy extenso pero poco a poco lo hare aqui tiene EL CURSO COMPLETO DE C PARA DUMMIES.Les Recomiendo el programa Borland C o Borland C++ es muy completo y esta para linux tambien, al igual que en windows 95, windows 98, XP, Vista y el windows 7.segun lo que investigue es uno de los programadores mas potentes y completos que hay!! PD: les puedo poner el Borland aqui pero me borarrian el link, tendran que buscarlo por ustedes mismos, suerte y qeu tengan ganas de aprender!!!--------------------------------------------------------------------------------------------------------------------------------------------------Programación en C para Dummies0. Conceptos básicos sobre programaciónUn programa es un conjunto de órdenes para un ordenador.Estas órdenes se le deben dar en un cierto lenguaje, que el ordenador sea capaz de comprender.El problema es que los lenguajes que realmente entienden los ordenadores resultan difíciles para nosotros, porque son muy distintos de los que nosotros empleamos habitualmente para hablar. Escribir programas en el lenguaje que utiliza internamente el ordenador (llamado “lenguaje máquina” o “código máquina”) es un trabajo duro, tanto a la hora de crear el programa como (especialmente) en el momento de corregir algún fallo o mejorar lo que se hizo.Por eso, en la práctica se emplean lenguajes más parecidos al lenguaje humano, llamados “lenguajes de alto nivel”. Normalmente, estos son muy parecidos al idioma inglés, aunque siguen unas reglas mucho más estrictas.--------------------------------------------------------------------------------------------------------------------------------------------------0.1. Lenguajes de alto nivel y de bajo nivel.Vamos a ver en primer lugar algún ejemplo de lenguaje de alto nivel, para después comparar con lenguajes de bajo nivel, que son los más cercanos al ordenador.Uno de los lenguajes de alto nivel más sencillos es el lenguaje BASIC. En este lenguaje, escribir el texto Hola en pantalla, sería tan sencillo como usar la ordenPRINT "Hola"Otros lenguajes, como Pascal, nos obligan a ser algo más estrictos, pero a cambio hacen más fácil descubrir errores:program Saludo;begin write('Hola');end.El equivalente en lenguaje C resulta algo más difícil de leer, por motivos que iremos comentando un poco más adelante:#include <stdio.h>int main() { printf("Hola");}Los lenguajes de bajo nivel son más cercanos al ordenador que a los lenguajes humanos. Eso hace que sean más difíciles de aprender y también que los fallos sean más difíciles de descubrir y corregir, a cambio de que podemos optimizar al máximo la velocidad (si sabemos cómo), e incluso llegar a un nivel de control del ordenador que a veces no se puede alcanzar con otros lenguajes. Por ejemplo, escribir Hola en lenguaje ensamblador de un ordenador equipado con el sistema operativo MsDos y con un procesador de la familia Intel x86 sería algo comodosseg.model small.stack 100h.datahello_message db 'Hola',0dh,0ah,'$'.codemain proc mov ax,@data mov ds,ax mov ah,9 mov dx,offset hello_message int 21h mov ax,4C00h int 21hmain endpend mainResulta bastante más difícil de seguir. Pero eso todavía no es lo que el ordenador entiende, aunque tiene una equivalencia casi directa. Lo que el ordenador realmente es capaz de comprender son secuencias de ceros y unos. Por ejemplo, las órdenes “mov ds, ax” y “mov ah, 9” (en cuyo significado no vamos a entrar) se convertirían a lo siguiente:1000 0011 1101 1000 1011 0100 0000 1001(Nota: los colores de los ejemplos anteriores son una ayuda que nos dan algunos entornos de programación, para que nos sea más fácil descubrir errores). --------------------------------------------------------------------------------------------------------------------------------------------------0.2. Ensambladores, compiladores e intérpretesEstá claro entonces que las órdenes que nosotros hemos escrito (lo que se conoce como “programa fuente”) deben convertirse a lo que el ordenador comprende (obteniendo el “programa ejecutable”).Si elegimos un lenguaje de bajo nivel, como el ensamblador (en inglés Assembly, abreviado como Asm), la traducción es sencilla, y de hacer esa traducción se encargan unas herramientas llamadas ensambladores (en inglés Assembler).Cuando el lenguaje que hemos empleado es de alto nivel, la traducción es más complicada, y a veces implicará también recopilar varios fuentes distintos o incluir posibilidades que se encuentran en bibliotecas que no hemos preparado nosotros. Las herramientas encargadas de todo esto son los compiladores.El programa ejecutable obtenido con el compilador o el ensamblador se podría hacer funcionar en otro ordenador similar al que habíamos utilizado para crearlo, sin necesidad de que ese otro ordenador tenga instalado el compilador o el ensamblador.Por ejemplo, en el caso de Windows (y de MsDos), y del programa que nos saluda en lenguaje Pascal, tendríamos un fichero fuente llamado SALUDO.PAS. Este fichero no serviría de nada en un ordenador que no tuviera un compilador de Pascal. En cambio, después de compilarlo obtendríamos un fichero SALUDO.EXE, capaz de funcionar en cualquier otro ordenador que tuviera el mismo sistema operativo, aunque no tenga un compilador de Pascal instalado.Un intérprete es una herramienta parecida a un compilador, con la diferencia de que en los intérpretes no se crea ningún “programa ejecutable” capaz de funcionar “por sí solo”, de modo que si queremos distribuir nuestro programa a alguien, deberemos entregarle el programa fuente y también el intérprete que es capaz de entenderlo, o no le servirá de nada. Cuando ponemos el programa en funcionamiento, el intérprete de encarga de convertir el programa en lenguaje de alto nivel a código máquina, orden por orden, justo en el momento en que hay que procesar cada una de las órdenes.Para algunos lenguajes, es frecuente encontrar compiladores pero no suele existir intérpretes. Es el caso del lenguaje C, de Pascal y de C++, por ejemplo. En cambio, para otros lenguajes, lo habitual es trabajar con intérpretes y no con compiladores, como ocurre con Python, Ruby y PHP.Además, hoy en día existe algo que parece intermedio entre un compilador y un intérprete: Existen lenguajes que no se compilan para obtener un ejecutable para un ordenador concreto, sino un ejecutable “genérico”, que es capaz de funcionar en distintos tipos de ordenadores, a condición de que en ese ordenador exista una “máquina virtual” capaz de entender esos ejecutables genéricos. Esta es la idea que se aplica en Java: los fuentes son ficheros de texto, con extensión “.java”, que se compilan a ficheros “.class”. Estos ficheros “.class” se podrían llevar a cualquier ordenador que tenga instalada una “máquina virtual Java” (las hay para la mayoría de sistemas operativos). Esta misma idea se sigue en el lenguaje C#, que se apoya en una máquina virtual llamada “Dot Net Framework” (algo así como “armazón punto net”).--------------------------------------------------------------------------------------------------------------------------------------------------0.3. PseudocódigoA pesar de que los lenguajes de alto nivel se acercan al lenguaje natural, que nosotros empleamos, es habitual no usar ningún lenguaje de programación concreto cuando queremos plantear los pasos necesarios para resolver un problema, sino emplear un lenguaje de programación ficticio, no tan estricto, muchas veces escrito incluso en español. Este lenguaje recibe el nombre de pseudocódigo.Esa secuencia de pasos para resolver un problema es lo que se conoce como algoritmo (realmente hay alguna condición más, por ejemplo, debe ser un número finito de pasos). Por tanto, un programa de ordenador es un algoritmo expresado en un lenguaje de programación.Por ejemplo, un algoritmo que controlase los pagos que se realizan en una tienda con tarjeta de crédito, escrito en pseudocódigo, podría ser:•Leer banda magnética de la tarjeta.•Conectar con la central de cobros.•Si hay conexión y la tarjeta es correcta:•Pedir código PIN•Si el PIN es correcto, comprobar saldo existente•Si todo es correcto, aceptar la venta y descontar importe del saldo. Ejercicios propuestos0.Localizar en Internet el Compilador de Dev c++ , en su version para el sistema operativo que se este utilizando y probar el primer programa.Nota: Aqui esta el tutorial de como usar Dev-C++ http://cid-f24a1566a4800508.office.live.com/embedicon.aspx/.Public/dev-c^_instalacion^_y^_primeros^_pasos.zip1.Localizar en Internet el intérprete de Basic llamado Bywater Basic, en su versión para el sistema operativo que se esté utilizando y probar el primer programa de ejemplo que se ha visto en el apartado 0.1.2.Localizar en Internet el compilador de Pascal llamado Free Pascal, en su versión para el sistema operativo que se esté utilizando, instalarlo y probar el segundo programa de ejemplo que se ha visto en el apartado 0.1.3.Localizar un compilador de C para el sistema operativo que se esté utilizando (si es Linux o alguna otra versión de Unix, es fácil que se encuentre ya instalado) y probar el tercer programa de ejemplo que se ha visto en el apartado 0.1.--------------------------------------------------------------------------------------------------------------------------------------------------1. Toma de contacto con CDentro de los lenguajes de programación, C es un lenguaje que tiene un cierto “prestigio”. Esto se debe fundamentalmente a dos razones:•Es bastante “portable”: un programa bien hecho en C se podrá llevar a un ordenador distinto o incluso a un sistema operativo distinto (de MsDos a Windows o a Linux, por ejemplo) con muy pocos cambios o quizás incluso sin ningún cambio. El motivo es que existe un estándar: el ANSI C, que soportan casi todos los compiladores. Por eso, si nos ceñimos al estándar, es seguro que nuestros programas funcionarán en distintos sistemas; cuanto más nos separemos del estándar (en ocasiones podremos hacerlo), más difícil será que funcionen en otro sistema distinto. •Permite hacer “casi de todo”: podemos usar órdenes de alto nivel (muy cercanas al lenguaje humano), pero también de bajo nivel (más cercanas a lo que realmente entiende el ordenador). De hecho, podremos incluso incorporar órdenes en lenguaje ensamblador en medio de un programa escrito en C, aunque eso supone que ganemos en control de la máquina que estamos manejando, a costa de perder en portabilidad (el programa ya no se podrá llevar a otros ordenadores que no usen el mismo lenguaje ensamblador). En su contra, el lenguaje C tiene que es más difícil de aprender que otros y que puede resultar difícil de leer (por lo que ciertos errores pueden tardar más en encontrarse).Los pasos que seguiremos para crear un programa en C serán:1.Escribir el programa en lenguaje C (fichero fuente), con cualquier editor de textos.2.Compilarlo con nuestro compilador. Esto creará un “fichero objeto”, ya convertido a un lenguaje que el ordenador es capaz de entender.3.Enlazarlo con otros ficheros del compilador, unas bibliotecas auxiliares que incluirán en nuestro programa aquellas posibilidades que hayamos empleado nosotros pero que realmente no sean parte del lenguaje C básico, sino ampliaciones de algún tipo. Esto dará lugar al fichero ejecutable, que ya podremos usar desde MsDos o el sistema operativo que estemos manejando, en nuestro ordenador o en cualquier otro, aunque ese otro ordenador no tenga el compilador que nosotros hemos utilizado.La mayoría de los compiladores actuales permiten dar todos estos pasos desde un único entorno, en el que escribimos nuestros programas, los compilamos, y los depuramos en caso de que exista algún fallo.En el siguiente apartado veremos un ejemplo de uno de estos entornos, dónde localizarlo y cómo instalarlo.--------------------------------------------------------------------------------------------------------------------------------------------------1.1 Escribir un texto en CVamos con un primer ejemplo de programa en C, posiblemente el más sencillo de los que “hacen algo útil”. Se trata de escribir un texto en pantalla. La apariencia de este programa la vimos en el tema anterior. Vamos a verlo ahora con más detalle:#include <stdio.h>main() { printf( "Hola" ) ; }Esto escribe “Hola” en la pantalla. Pero hay mucho que comentar:•Eso de “#include” nos permite incluir ciertas características para ampliar el lenguaje base. En este caso, el motivo es que en el lenguaje C base no hay predefinida ninguna orden para escribir en pantalla (!), sino que este tipo de órdenes son una extensión, que se define en un fichero llamado “stdio.h”. Esto no es un problema, vamos a encontrar ese “stdio.h” en cualquier compilador que usemos. ¿Por qué no hay órdenes de pantalla en el lenguaje base? Hay que recordar que un ordenador no es sólo lo que acostumbramos a tener sobre nuestra mesa, con pantalla y teclado: existen otros muchos tipos de ordenadores que realizan tareas complejas y no necesitan una pantalla durante su funcionamiento normal, como el ordenador que controla el ABS de un coche. ¿Y por qué se pone entre < y >? ¿Y por qué eso de # al principio? Esos detalles los iremos viendo un poco más adelante.•Ya que hemos hablado de ella, "printf" es la orden que se encarga de mostrar un texto en pantalla, la responsable de que hayamos escrito ese “include” al principio del programa.•Aun quedan cosas: ¿qué hacen esas llaves { y } ? C es un lenguaje estructurado, en el que un programa está formado por diversos “bloques”. Todos los elementos que componen este bloque deben estar relacionados entre sí, lo que se indica encerrándolos entre llaves: { y }.•Finalmente, ¿qué es eso de “main”? Es algo que debe existir siempre, e indica el punto en el que realmente comenzará a funcionar el programa. Después de "main" van dos llaves { y }, que delimitan el bloque más importante: el cuerpo del programa.¿Y por qué tiene un paréntesis vacío a continuación? Eso lo veremos más adelante...Y la cosa no acaba aquí. Aún queda más miga de la que parece en este programa, pero cuando ya vayamos practicando un poco, iremos concretando más alguna que otra cosa de las que aquí han quedado poco detalladas.Ejercicio propuesto: Crea un programa en C que te salude por tu nombre (ej: “Hola, Nacho”). Sólo un par de cosas más antes de seguir adelante:•Cada orden de C debe terminar con un punto y coma ( ; )•El C es un lenguaje de formato libre, de modo que puede haber varias órdenes en una misma línea, u órdenes separadas por varias líneas o espacios entre medias. Lo que realmente indica dónde termina una orden y donde empieza la siguiente son los puntos y coma. Por ese motivo, el programa anterior se podría haber escrito también así (aunque no es aconsejable, porque puede resultar menos legible): #include <stdio.h> main() { printf( "Hola" ) ; }•De hecho, hay dos formas especialmente frecuentes de colocar la llave de comienzo, y yo usaré ambas indistintamente. Una es como hemos hecho en el primer ejemplo: situar la llave de apertura en una línea, sola, y justo encima de la llave de cierre correspondiente. La segunda forma habitual es situándola a continuación del nombre del bloque que comienza (en nuestro caso, a continuación de la palabra “main”), así:#include <stdio.h> main() { printf( "Hola" ) ;}(esta es la forma que yo emplearé en este texto cuando estemos trabajando con fuentes de mayor tamaño, para que ocupe un poco menos de espacio).•La gran mayoría de las órdenes que encontraremos en el lenguaje C son palabras en inglés o abreviaturas de éstas. Pero hay que tener en cuenta que C distingue entre mayúsculas y minúsculas, por lo que "printf" es una palabra reconocida, pero "Printf", "PRINTF" o "PrintF" no lo son.--------------------------------------------------------------------------------------------------------------------------------------------------1.1.1. Cómo probar este programa en LinuxLos sistemas operativos de la familia Unix, como Linux, suelen incluir un compilador de C, de modo que será fácil probar nuestros programas. Supondremos que se trata de una versión de Linux de los últimos años, que tenga entorno gráfico. Podríamos usar el editor del texto del entorno gráfico, teclear el fuente y guardarlo en nuestra carpeta personal, por ejemplo con el nombre ejemplo001.c (lo que sí es importante es que termine en “.c”):(en esta imagen se trata de Mandrake Linux 9.1, con el entorno Gnome y el editor básico que incorpora, GEdit).Después abriríamos una ventana de terminal y teclearíamos la siguiente orden para compilar nuestro fuente:cc ejemplo001.c –o miprogramaDonde:•“cc” es la orden que se usa para poner el compilador en marcha.•“ejemplo001.c” es el nombre del fuente que queremos compilar.•La opción “-o” se usa para indicar el nombre que queremos que tenga el fichero ejecutable resultante (la “o” viene de “output”, salida).•“miprograma” es el nombre que tendrá el programa ejecutable.Y para probar el programa teclearíamos./miprogramaCon lo que debería aparecer escrito “Hola” en la pantalla.(Nota: Las versiones más recientes de Linux tienen entornos integrados, desde los que podemos teclear y probar nuestro programa, con más comodidad, como en el caso de la herramienta que vamos a comentar para Windows. Dos de los entornos más extendidos son KDevelop y Anjuta).1.1.2. Cómo probar este programa en WindowsLa familia de sistemas Windows no incluye ningún compilador de C, de modo que tendremos que localizar uno e instalarlo. Existen muchos gratuitos que se pueden descargar de Internet, y que incluyen un editor y otras herramientas auxiliares. Es el caso de Dev-C++, por ejemplo, que tiene su página oficial en www.bloodshed.net. La instalación es poco más que hacer doble clic en el fichero descargado, y hacer clic varias veces en el botón “Siguiente”:En el caso de Dev-C++, podemos incluso trabajar con el entorno en español:Para crear nuestro programa, en el menú "Archivo" escogemos "Nuevo / Código fuente", y nos aparece un editor vacío en el que ya podemos empezar a teclear. Si queremos nuestro programa en funcionamiento, entraríamos al menú “Ejecutar” y usaríamos la opción “Compilar y ejecutar”:(si todavía no hemos guardado los cambios en nuestro fuente, nos pediría antes que lo hiciéramos). Puede ocurrir que se muestre el resultado en pantalla, pero la ventana desaparezca tan rápido que no tengamos tiempo de leerlo. Si es nuestro caso, tenemos dos opciones:•Algunos entornos (como los de la familia Turbo C y Borland C) tienen una opción “User Screen” (pantalla de usuario) en el menú “Run” (ejecutar), que nos mostraría lo que ha aparecido en esa pantalla que no pudimos leer.•Otros entornos, como Dev-C++, no tienen esa posibilidad, por lo que deberíamos hacer un pequeño cambio a nuestro fuente, para que espere a que pulsemos la tecla Intro antes de terminar. Una orden que nos permitiría hacer eso (y que veremos con más detalle más adelante) es “getchar()”, así que nuestro fuente quedaría:#include <stdio.h> main() { printf( "Hola" ) ; getchar() ;}--------------------------------------------------------------------------------------------------------------------------------------------------1.2. Mostrar números enteros en pantallaCuando queremos escribir un texto “tal cual”, como en el ejemplo anterior, lo encerramos entre comillas. Pero no siempre querremos escribir textos prefijados. En muchos casos, se tratará de algo que habrá que calcular. El caso más sencillo es el de una operación matemática. En principio, podríamos pensar en intentar algo así:printf( 3+4 ) ;En muchos lenguajes de programación esto es perfectamente válido, pero no en C. La función “printf” nos obliga a que lo que escribamos en primer lugar sea un texto, indicado entre comillas. Eso que le indicamos entre comillas es realmente uncódigo de formato. Dentro de ese código de formato podemos tener caracteres especiales, con los que le indicamos dónde y cómo queremos que aparezca un número (u otras cosas). Esto lo veremos con detalle un poco más adelante, pero de momento podemos anticipar que “%d” sirve para decir “quiero que aquí aparezca un número entero”. ¿Qué número? El que le indicamos a continuación, separado por una coma:printf( "El resultado es %d", 3+4 ); Este ejemplo mostraría en pantalla un número entero (%d) que sea el resultado de suma 3 y 4.Podemos escribir entre las comillas más detalles sobre lo que estamos haciendo:printf( "El resultado es %d", suma ) ;Ejercicio propuesto: crea un programa que diga el resultado de sumar 118 y 56. --------------------------------------------------------------------------------------------------------------------------------------------------1.3. Operaciones aritméticas básicasEstá claro que el símbolo de la suma será un +, y podemos esperar cual será el de la resta, pero alguna de las operaciones matemáticas habituales tiene símbolos menos intuitivos. Veamos cuales son los más importantes:Operador - Operación + Suma - Resta, Negación * Multiplicación / División % Resto de la División ( "Modulo" )Ejercicio propuesto: Hacer un programa que calcule el producto de los números 12 y 13.1.3.1. Orden de prioridad de los operadoresSencillo:- En primer lugar se realizarán las operaciones indicadas entre paréntesis.- Luego la negación.- Después las multiplicaciones, divisiones y el resto de la división.- Finalmente, las sumas y las restas.- En caso de tener igual prioridad, se analizan de izquierda a derechaEjercicio propuesto: Calcular (a mano y después comprobar desde C) el resultado de estas operaciones: 2 + 3 * 5 (20 + 5) % 615 + -5*6 / 102 + 10 /5 * 2 - 7 % 11.3.2. Introducción a los problemas de desbordamientoEl espacio del que disponemos para almacenar los números es limitado. Si el resultado de una operación es un número “demasiado grande”, obtendremos un resultado erróneo. Por eso en los primeros ejemplos usaremos números pequeños. Más adelante veremos a qué se debe realmente este problema y cómo evitarlo.1.4. Introducción a las variables: int Las variables son algo que no contiene un valor predeterminado, un espacio de memoria al que nosotros asignamos un nombre y en el que podremos almacenar datos.El primer ejemplo nos permitía escribir “Hola”. El segundo nos permitía sumar dos números que habíamos prefijado en nuestro programa. Pero esto tampoco es “lo habitual”, sino que esos números dependerán de valores que haya tecleado el usuario o de cálculos anteriores.Por eso necesitaremos usar variables, en las que guardemos los datos con los que vamos a trabajar y también los resultados temporales. Vamos a ver como ejemplo lo que haríamos para sumar dos números enteros que fijásemos en el programa.1.4.1. Definición de variables: números enterosPara usar una cierta variable primero hay que declararla: indicar su nombre y el tipo de datos que querremos guardar.El primer tipo de datos que usaremos serán números enteros (sin decimales), que se indican con “int” (abreviatura del inglés “integer”). Después de esta palabra se indica el nombre que tendrá la variable:int primerNumero;Esa orden reserva espacio para almacenar un número entero, que podrá tomar distintos valores, y al que nos referiremos con el nombre “primerNumero”.1.4.2. Asignación de valoresPodemos darle un valor a esa variable durante el programa haciendoprimerNumero=234;O también podemos darles un valor inicial (“inicializarlas”) antes de que empiece el programa, en el mismo momento en que las definimos:int primerNumero=234;O incluso podemos definir e inicializar más de una variable a la vezint primerNumero=234, segundoNumero=567;(esta línea reserva espacio para dos variables, que usaremos para almacenar números enteros; una de ellas se llama primerNumero y tiene como valor inicial 234 y la otra se llama segundoNumero y tiene como valor inicial 567).Después ya podemos hacer operaciones con las variables, igual que las hacíamos con los números:suma = primerNumero + segundoNumero;1.4.3. Mostrar el valor de una variable en pantallaUna vez que sabemos cómo mostrar un número en pantalla, es sencillo mostrar el valor de una variable. Para un número hacíamos cosas comoprintf ( "El resultado es %d", 3+4 ) ;pero si se trata de una variable es idéntico:printf ( "El resultado es %d", suma ) ;Ya sabemos todo lo suficiente para crear nuestro programa que sume dos números usando variables:#include <stdio.h>main (){ int primerNumero; int segundoNumero; int suma; primerNumero = 234; segundoNumero = 567; suma = primerNumero + segundoNumero; printf( "Su suma es %d", suma ) ;} Repasemos lo que hace:- #include <stdio.h> dice que queremos usar funciones de entrada/salida estándar.- main() indica donde comienza en sí el cuerpo del programa.- { señala el principio del cuerpo (de “main”)- int primerNumero; reserva espacio para guardar un número entero, al que llamaremos primerNumero.- int segundoNumero; reserva espacio para guardar otro número entero, al que llamaremos segundoNumero.- int suma; reserva espacio para guardar un tercer número entero, al que llamaremos suma.- primerNumero = 234; da el valor del primer número que queremos sumar- segundoNumero = 567; da el valor del segundo número que queremos sumar- suma = primerNumero + segundoNumero; halla la suma de esos dos números y la guarda en otra variable, en vez de mostrarla directamente en pantalla.- printf("Su suma es %d", suma); muestra en pantalla el resultado de esa suma.- } señala el principio del cuerpo (de “main”)Nota: las variables las podemos declarar dentro del cuerpo del programa (main) o fuera de él. En programas tan sencillos no habrá diferencia. Más adelante veremos que en ciertos casos sí se comportarán de forma distinta según donde las hayamos declarado.Podemos resumir un poco este fuente, si damos los valores a las variables al inicializarlas:#include <stdio.h>main (){ int primerNumero = 234; int segundoNumero = 567; int suma; suma = primerNumero + segundoNumero; printf ( "Su suma es %d" , suma ) ;}Ejercicio propuesto: Hacer un programa que calcule el producto de los números 121 y 132, usando variables.1.5. IdentificadoresEstos nombres de variable (lo que se conoce como “identificadores”) pueden estar formados por letras, números o el símbolo de subrayado (_) y deben comenzar por letra o subrayado. No deben tener espacios entre medias, y hay que recordar que las vocales acentuadas y la eñe son problemáticas, porque no son letras "estándar" en todos los idiomas. Algunos compiladores permiten otros símbolos, como el $, pero es aconsejable no usarlos, de modo que el programa sea más portable (funcione con facilidad en distintos sistemas).Por eso, no son nombres de variable válidos:- 1numero (empieza por número)- un numero (contiene un espacio)- Año1 (tiene una eñe)- MásDatos (tiene una vocal acentuada)Tampoco podremos usar como identificadores las palabras reservadas de C. Por ejemplo, la palabra "int" se refiere a que cierta variable guardará un número entero, así que esa palabra "int" no la podremos usar tampoco como nombre de variable (pero no vamos a incluir ahora una lista de palabras reservadas de C, ya nos iremos encontrando con ellas).De momento, intentaremos usar nombres de variables que a nosotros nos resulten claros, y que no parezca que puedan ser alguna orden de C.Hay que recordar que en C las mayúsculas y minúsculas se consideran diferentes, de modo que si intentamos hacerPrimerNumero = 0; primernumero = 0;o cualquier variación similar, el compilador protestará y nos dirá que no conoce esa variable, porque la habíamos declarado comoint primerNumero; El número de letras que puede tener un "identificador" (el nombre de una variable, por ejemplo) depende del compilador que usemos. Es frecuente que permitan cualquier longitud, pero que realmente sólo se fijen en unas cuantas letras (por ejemplo, en las primeras 8 o en las primeras 32). Eso quiere decir que puede que algún compilador considerase como iguales las variables NumeroParaAnalizar1 y NumeroParaAnalizar2, porque tienen las primeras 18 letras iguales. El C estándar (ANSI C) permite cualquier longitud, pero sólo considera las primeras 31.1.6. Comentarios Podemos escribir comentarios, que el compilador ignora, pero que pueden servir para aclararnos cosas a nosotros. Se escriben entre /* y */:int suma; /* Porque guardaré el valor para usarlo más tarde */Es conveniente escribir comentarios que aclaren la misión de las partes de nuestros programas que puedan resultar menos claras a simple vista. Incluso suele ser aconsejable que el programa comience con un comentario, que nos recuerde qué hace el programa sin que necesitemos mirarlo de arriba a abajo. Un ejemplo casi exagerado:/* ---- Ejemplo en C: sumar dos numeros prefijados ---- */#include <stdio.h> main(){ int primerNumero = 234; int segundoNumero = 567; int suma; /* Porque guardaré el valor para usarlo más tarde */ /* Primero calculo la suma */ suma = primerNumero + segundoNumero; /* Y después muestro su valor */ printf("Su suma es %d", suma);} Un comentario puede empezar en una línea y terminar en otra distinta, así:/* Estoes un comentario queocupa más de una línea*/1.7. Datos por el usuario: scanfSi queremos que sea el usuario de nuestro programa quien teclee los valores, necesitamos una nueva orden, llamada “scanf”. Su manejo recuerda al de “printf”, con una pequeña diferencia:scanf ( "%d", &primerNumero) ;Con ese “%d” indicamos que esperamos leer un número entero (igual que para “printf”) y con &primerNumero decimos que queremos que ese valor leído se guarde en la variable llamada “primerNumero”. La diferencia está en ese símbolo & que nos obliga scanf a poner antes del nombre de la variable. Más adelante veremos qué quiere decir ese símbolo y en qué otros casos se usa.Un ejemplo de programa que sume dos números tecleados por el usuario sería:/*----------------------------*//*--Ejemplo en C nº 5:*//*--c005.c-----------------*//*----------------------------*//*--Leer valores para---*//*--variables---------------*//*----------------------------*//*--Curso de C,----------*//*--xMegamanx----------*//*----------------------------*/#include <stdio.h> main() /* Cuerpo del programa */{ int primerNumero, segundoNumero, suma; /* Nuestras variables */ printf ( "Introduce el primer numero" ) ; scanf ( "%d" , &primerNumero ) ; printf ( "Introduce el segundo numero" ) ; scanf ( "%d", &segundoNumero ) ; suma = primerNumero + segundoNumero ; printf ( "Su suma es %d" , suma ) ;}Ejercicios propuestos:Multiplicar dos números tecleados por usuarioEl usuario tecleará dos números (x e y), y el programa deberá calcular cual es el resultado de su división y el resto de esa división.El usuario tecleará dos números (a y b), y el programa mostrar el resultado de la operación (a+b)*(a-b) y el resultado de la operación a^(2) - b^(2).(Cuando hayas hecho los ejercicios, puedes comprobar tus respuestas con las soluciones propuestas).--------------------------------------------------------------------------------------------------------------------------------------------------Proximo tema2. Tipos de datos básicosDisfruten de la programación .....--------------------------------------------------------------------------------------------------------------------------------------------------Nota: Esto es todo por hoy mañana pondré un poco mas....
Programación; Nota importante: para los que no saben nada de nada, ponganse a leer un libro de c++, No el libro de c por que el libro c es su antecesor y no se usa tanto como el libro del c++, cualquiera que diga libro c++... Para copiar y pegar en Visual basic o el que yo uso codeblocks lo malo es que esta en ingles este ultimo, tengo un monton de tarea ahora que estoy en la universidad asi que tratare de mejorar este post. con los comentarios iré acomodando mejor este post, si me falta algo o de pura casualidad me equivoque avísenme. Nota: Estos códigos los lleve en clase así que a mi si me salieron y deberían funcionar... Resumen de la semana En esta semana se estudiaran los conceptos básicos de las clases de entra y salida cin y cout También se estudiaran las estructuras de control de programa for() while() do-while() if () 1.Estructura básica de un programa en lenguaje C++ Para estructurar un programa en C++, se puede seguir el siguiente esquema básico //Comentarios # inclusiones <> y cabeceras declaración de variables globales main () { cuerpo del programa principal } Comentarios. Los comentarios son elementos que permiten al programador etiquetar partes del programa, y de esta forma identificar o establecer puntos de referencia que le faciliten la lectura del programa. En lenguaje C++ existen dos tipos de comentarios, el comentario por bloques y el comentario de una sola linea. El primero utiliza los símbolos /* para el inicio del bloque y */ para el cierre del bloque. El segundo solo utiliza los símbolos //. Inclusiones. Las inclusiones son una directiva del compilador que permiten la concatenación de un código previamente escrito con el código actual. Para indicarle al compilador que incluya dentro del proceso de compilación y ensamblado de nuestro código una cabecera o una biblioteca es necesario utilizar la directiva #include seguido de los símbolos <> o " ". Declaración de variables globales. En esta sección del código, se declaran todas las variables que serán utilizadas a lo largo del programa. Cuerpo del programa principal. Como su nombre lo indica, este es el programa principal, aquí es donde se escriben todas las instrucciones que darán funcionalidad al código. 2. Clases de entrada y salida cin y cout Los objetos cin y cout permiten la inserción y extracción de datos desde y hacia la consola de salida (monitor, teclado, etc.). cin. Este objeto inserta datos desde fuera hacia dentro del programa la sintaxis utilizada es la siguiente cin >> nom_variable; , donde nom_variable es la variable donde será asignado el dato. cout. Este objeto extrae datos desde dentro del programa hacia una consola de salida la sintaxis utilizada es la siguiente cout << dato_salida; Ejemplo 2.1 /************************************************************* * Este el primer programa de ejemplo * * (c) 2010 Roger Chiu Zarate * **********************************************************/ #include <iostream> using namespace std; int main (void) { cout << "Este es mi primer progrma en C++"; return 0; } Ejemplo 2.2 En el ejemplo anterior, se muestra un código muy simple que envia un mensaje a la pantalla utilizando el objeto cout. En este nuevo ejemplo se mostrara el uso del objeto cin, también se hara uso por primer vez de la inicialización de una variable donde se almacenará el dato de entrada. /************************************************************* * Este es el segundo programa de ejemplo * * (c) 2010 Roger Chiu Zarate * **********************************************************/ #include <iostream> using namespace std; int main (void) { int var_1; //se declara la variable de entrada tipo entera cout << "Ingrese un numero entero: "; cin >> var_1; // inserta desde el teclado un valor a la variable cout << "El numero que ingreso es: " << var_1; return 0; } Tipos de datos C++ tiene los siguientes tipos fundamentales: Caracteres: char (también es un entero), wchar_t Enteros: short int, int, long int, long long int Números en coma floante: float, double, long double Booleanos: bool Vacío: void El modificador unsigned se puede aplicar a enteros para obtener números sin signo (por omisión los enteros contienen signo), con lo que se consigue un rango mayor de números naturales. 3. Ciclos Los ciclos son usados para repetir un bloque de código. Una de las tareas mas básicas en lenguaje C++ es, hacer que el programa ejecute de manera repetida un bloque de codigo. Dentro de los ciclos podemos definir tres tipos: for() while() do-while() 3.1 Ciclo for() El ciclo for() es uno de los mas utilizados. La sintaxis para es esta funcion es: for ( inicializacion de la variable; condicion; incremento de la variable ) { codigo a ejecutar, mientras la condicion es cierta } La iniciaización de la variable, permite tanto declarar una varible, asi como darle valor a una variable ya existente. La condición, le indica al programa que mientras la condicional de la expresión es cierta, el ciclo debe de continuar de manera repetida. El incremento de la variable permite mantener un cambio en la variable. Es importante notar que cada sección esta separada por "punto y coma". Aun cuando cada una de las secciones puede estar vacía, el punto y coma debe de estar presente. EJEMPLO 3.1: se desea imprimir en pantalla la tabla de multiplicar de un número X. /************************************************************* * programa de ejemplo ciclo for() * * imprime en pantalla la tabla de mutiplicar de * un numero x * (c) 2010 Roger Chiu Zarate * **********************************************************/ #include <iostream> using namespace std; int main (void) { for (int a = 1;a <= 10; a++) cout << "5 x" << a << " = " << 5*a; return 0; } 3.2 Ciclos while() y do-while() Ciclo while(). La sintaxis de este ciclo es while (condicion) { codigo a ejecutar mientras la condicion es cierta } A continuación se muestra el código para el ejemplo 3.1 ahora utilizando el ciclo while() Ejemplo 3.2 /************************************************************* * programa de ejemplo ciclo while() * * imprime en pantalla la tabla de mutiplicar de * un numero x * (c) 2010 Roger Chiu Zarate * **********************************************************/ #include <iostream> using namespace std; int main (void) { int a = 1;//inicializacion de la variable while (a <= 10) { cout << "5 x" << a << " = " << 5*a; a++; // actualizacion de la variable } return 0; } Ciclo do-while(). La sintaxis de este ciclo es do { codigo a ejecutar mientras la condicion es cierta }while (condicion); A continuación se muestra el código para el ejemplo 3.1 ahora utilizando el ciclo do-while() Ejemplo 3.3 /************************************************************* * programa de ejemplo ciclo do-while() * * imprime en pantalla la tabla de mutiplicar de * un numero x * (c) 2010 Roger Chiu Zarate * **********************************************************/ #include <iostream> using namespace std; int main (void) { int a = 1;//inicializacion de la variable do { cout << "5 x" << a << " = " << 5*a; a++; // actualizacion de la variable }while (a <= 10); return 0; } 4. Estructura de control if() La capacidad de controlar el flujo de un programa, ofrece la posibilidad de decidir que parte del código ejecutar. En lenguaje C++ la instrucción if(), permite controlar si un programa entra o no a una sección especifica del codigo, basado en sí una condición dada es VERDADERA o FALSA. Una de las funciones mas importantes de la instrucción if(), es permitir al programa seleccionar una acción determinada, basado en los datos proporcionados por el usuario. Antes de discutor la estructura de la instrucción if(), vamos primero a examinar el significado de FALSO y VERDADERO, dentro de la terminología computacional. Una instrucción VERDADERA, es aquella que evalúa a un número NO CERO, una instrucción FALSA evalúa a un número CERO. Al realizar una comparación con operadores relacionales, el operador puede retornar 1 si la comparación es VERDADERA o 0 si la comparación es FALSA. A continuación, se muestran algunos operadores relacionales > mayor que 5 > 4 VERDADERO < menor que 4 < 5 VERDADERO >= mayor o igual que 4 >= 4 VERDADERO <= menor o igual que 3 <= 4 VERDADERO == igual a 5 == 5 VERDADERO != diferente que 5 != 4 VERDADERO La sintaxis de la instrucción if() es if ( VERDADERO ) ejecuta este segmento de codigo Ejemplo 4.1 /************************************************************* * programa de ejemplo if() * * * (c) 2010 Roger Chiu Zarate * **********************************************************/ #include <iostream> using namespace std; int main (void) { if (5 < 10) cout << "5 es menor que 10" ; return 0; } Esta semana 17 de February - 23 de February Resumen de la semana En esta semana estudiaremos los conceptos de arreglos, punteros, entrada y salida de datos en archivos. 5. Arreglos. Los arreglos son una colección ordenada de elementos de un mismo tipo. Ordenada significa que cada elemento tiene una ubicación determinada dentro del arreglo y debemos conocerla para poder accederlo. Para comenzar a estudiar los arreglos, iniciaremos con el arreglo mas simple, el arreglo unidimensional. Sintaxis: <tipo> nombre_variable; Con esto diremos que nombre_variable es un arreglo de longitud elementos del tipo <tipo>. Cabe destacar que longitud debe ser cualquier expresión entera constante mayor que cero. Asignación de un arreglo: Para asignar valores a un arreglo es necesario introducir el valor correspondiente a cada elemento. nombre_variable[índice] = expresión del tipo <tipo> Debemos notar que longitud e índice, tienen funciones completamente diferentes. En otras palabras, el valor de longitud según la sintaxis anterior, define el tamaño del arreglo, mientras que índice, define el lugar que le correspondo a un elemento dentro del arreglo. Para entender mejor el concepto vamos a plantear el siguiente ejemplo: Ejemplo 5.1 Se desea guardar en memoria el siguiente conjunto de números enteros {1, 5, 3, 9, 3, 6, 7, 3, 2, 7 }. Podemos notar que el tamaño del conjunto es de 10 y que todos son números enteros, entonces para poder desarrollar el código en lenguaje C++ que almacene el conjunto anterior, definiremos que: Longitud o tamaño del arreglo = 10 tipo = int /************************************************************* * programa de ejemplo arreglos* * (c) 2010 Roger Chiu Zarate * **********************************************************/ #include <iostream> using namespace std; int main (void) { int numeros_enteros[10]; // declaramos un arreglo tipo entero de longitud 10 numeros_enteros[0] = 1; numeros_enteros[1] = 5; numeros_enteros[2] = 3; numeros_enteros[3] = 9; numeros_enteros[4] = 3; numeros_enteros[5] = 6; numeros_enteros[6] = 7; numeros_enteros[7] = 3; numeros_enteros[8] = 2; numeros_enteros[9] = 7; return 0; } Ejemplo 5.2 Una variante del ejemplo 5.1 se muestra a continuación /************************************************************* * programa de ejemplo arreglos* * (c) 2010 Roger Chiu Zarate * **********************************************************/ #include <iostream> using namespace std; int main (void) { int numeros_enteros[10] = {1, 5, 3, 9, 3, 6, 7, 3, 2, 7 }; // declaramos un arreglo tipo entero de longitud 10 return 0; } Ejemplo 5.3 Desarrollar un programa que permita ingresar 10 datos desde el teclado y los almacene dentro de un arreglo de tipo entero. Solución: Definimos primero la longitud del arreglo, longitud = 10, para poder ingresar los datos de una manera ciclica desde el teclado, haremos uso de un ciclo for(). /************************************************************* * programa de ejemplo arreglos* * (c) 2010 Roger Chiu Zarate * **********************************************************/ #include <iostream> #define longitud 10 //usaremos las directiva define para // definir el tamaño del arreglo using namespace std; int main (void) { int numeros_enteros; // declaramos un arreglo tipo entero de longitud 10 for (int a = 0; a < longitud; a++) cin >> numeros_enteros; return 0; } Usos de arreglos unidimensionalesTarea 5.1 Arreglos Bi-dimensionales Como se mencionó anteriormente, un arreglo es un conjunto ordenado de datos, ahora estudiaremos los arreglos bi-dimensionales. Estos arreglos agrupan los datos en forma de una matriz i x j. Sintaxis: <tipo> nombre_variable[longitud_i][longitud_j]; Con esto diremos que nombre_variable es un arreglo de longitud_i x longitud_j elementos del tipo <tipo>. Cabe destacar que longitud_i y longitud_J deben de ser cualquier expresión entera constante mayor que cero. Asignación de un arreglo: Para asignar valores a un arreglo es necesario introducir el valor correspondiente a cada elemento. nombre_variable[índice_i][índice_j] = expresión del tipo <tipo> Ejemplo 5.4 Para entender mejor el uso de los arreglos bi-dimensionales, vamos a desarrollar un programa que realice la suma de dos matrices de elementos. Solución: en términos del álgebra lineal, la suma de matrices esta definida como la suma de cada uno de los elementos de una matriz dada con su correspondiente. Esto es, si tenemos la matriz A que contiene los elementos a11, a12, a13, ..., anm y una matriz B que contiene los elementos b11, b12, b13, ..., bnm , entonces la suma de A + B da como resultado una matriz donde sus elementos son a11+ b11, a12 + b12, a13 + b13, ..., anm + bnm . El código que realiza la operación antes mencionada es el siguiente: /************************************************************* * programa de ejemplo arreglos* * (c) 2010 Roger Chiu Zarate * **********************************************************/ #include <iostream> #define longitud_i 3 //usaremos las directiva define para #define longitud_j 3 // definir el tamaño del arreglo using namespace std; int main (void) { int matrizA[longitud_i][longitud_j], matrizB[longitud_i][longitud_j], matrizC[longitud_i][longitud_j]; // declaramos un arreglo tipo entero de longitud 10 cout << "Ingrese lo elementos de la matriz A" << endl; for (int i = 0; i < longitud_i; i++) for (int j = 0; j < longitud_j; j++) cin >> matrizA; cout << "Ingrese lo elementos de la matriz B" << endl; for (int i = 0; i < longitud_i; i++) for (int j = 0; j < longitud_j; j++) cin >> matrizB; // realiza la suma de las matrices y guarda el resultado en // la matrizC for (int i = 0; i < longitud_i; i++) for (int j = 0; j < longitud_j; j++) matrizC = matrizA + matrizB; return 0; } 6. Entrada y salida a ficheros Para el manejo de ficheros o archivos, C++ ofrece varias clases, en este curso estudiaremos la clase fstream. Sintaxis ifstream nombre_variable("/path/nombre_del _archivo.extension", ifstream::in); Dentro de la sintaxis anterior podemos identificar lo siguiente, la clase ifstream, nombre de la variable, este es el nombre con el cual el archivo sera identificado a lo largo del programa, "/path/nombredelarchivo.extension", este es el nombre real del archivo y la ubicación donde sera grabado, el ultimo parámetro, indica el modo de apertura del archivo. app (append) Para añadir al final del fichero. Todas las escrituras que hagamos se iran al final del fichero. Si nos movemos por el fichero a una posición concreta (con el método seekp()) y luego escribimos, también se escribirá al final del fichero, ignorando la posición actual en la que nos situemos con seekp(). ate (at end). Para añadir al final del fichero. Sin embargo, si nos movemos a otra posición del fichero (con seekp()) y escribimos, la escritura se hará en la posición en la que nos pongamos, y no al final como en el caso anterior. binary (binary) Se abre el fichero como fichero binario. Por defecto se abre como fichero de texto. in (input) El fichero se abre para lectura. out (output) El fichero se abre para escritura trunc (truncate) Si el fichero existe, se ignora su contenido y se empieza como si estuviera vacio. Posiblemente perdamos el contenido anterior si escribimos en él. Ejemplo 6.1 /************************************************************* * programa de ejemplo ficheros* * (c) 2010 Roger Chiu Zarate * **********************************************************/ #include <iostream> #include <fstream> using namespace std; int main (void) { fstream f("ejemplo_6_1.txt", fstream::out); // creamos un archivo para escritura // el archivo se creara en el directorio actual f << "hola mundo"; // enviamos una cadena al fichero f.close(); //cerramos el fichero return 0; } El ejemplo 6.1 crea un archivo llamado ejemplo_6_1.txt en el directorio actual, para esto hacemos uso de la biblioteca fstream y de la clase del mismo nombre. Hay mas pero tengo un montón de tarea luego los posteo aquí mismo.. En progreso.....
Cómo hacer preguntas de manera inteligente Copyright © 2001 por Eric S. Raymond Copyright de la traducción © 2001 por Jose M. Fernández Índice de contenidos Introducción Antes de preguntar Cuando preguntes Cómo interpretar las respuestas Sobre cómo no reaccionar como un perdedor Preguntas que no hacer Buenas y malas preguntas Si no logras obtener respuesta Introducción En el mundo de los hackers, el tipo de respuestas que obtengas a tus preguntas técnicas depende tanto de la manera en que formules tus preguntas como de la dificultad de desarrollar la respuesta. En esta guía se enseñará cómo preguntar de manera que puedas obtener una respuesta satisfactoria. Lo primero que tienes que entender es que a los hackers les gustan los problemas realmente complejos y las buenas preguntas que les hagan pensar en ellos. De no ser así no estaríamos aquí. Si nos proporcionas una cuestión interesante te estaremos agradecidos; las buenas preguntas suponen un estímulo y un regalo. Las buenas preguntas nos ayudan a desarrollar nuestra comprensión, y a menudo revelan problemas que podíamos no haber percibido o en los que de otra manera no habríamos reparado. Entre los hackers, "¡Buena pregunta!" debe entenderse como un sincero cumplido. A pesar de esto, los hackers tienen la reputación de enfrentarse a las preguntas sencillas con hostilidad o arrogancia. A veces parece como si resultásemos hostiles a los principiantes o a los ignorantes. Pero eso realmente no es cierto. Lo que somos, de una manera no apologética, es hostiles con la gente que parece no querer pensar o hacer sus deberes antes de plantear las preguntas. La gente de ese tipo son sumideros de tiempo -- toman sin dar a cambio, desperdician el tiempo que podríamos haber dedicado a otra cuestión más interesante y con otra persona más merecedora de una respuesta. A las personas de este tipo las llamamos "perdedores" (y por razones históricas a veces escribimos "lusers". Somos, de largo, voluntarios. Robamos el tiempo de vidas ocupadas para responder preguntas, y a veces nos sobrecargan. Así que filtramos sin tregua. En particular, desechamos las preguntas de quienes parecen ser perdedores para ocupar el tiempo que dedicamos a responder preguntas de una manera más eficiente, con los ganadores. Tú no quieres ser uno de los perdedores. Tampoco quieres parecerte a ninguno de ellos. La mejor manera de obtener una respuestas rápida y eficiente es preguntando como un ganador — como una persona con inteligencia, confianza en sí mismo e indicios de que necesita ayuda con un problema en particular. (Las mejoras a esta guía serán bienvenidas. Puede enviar sus sugerencias (en inglés) a esr@thyrsus.com.) N. del T.: "luser" es una contracción de los términos "user" (usuario) y "loser" (perdedor). Antes de preguntar Antes de hacer una pregunta técnica por correo, en un grupo de noticias o en el foro de un sitio web, haz lo siguiente: Intenta encontrar una respuesta leyendo el manual. Intenta encontrar una respuesta leyendo las FAQs Intenta encontrar una respuesta buscando en la web. Intenta encontrar la respuesta preguntándole a un amigo con más experiencia. Cuando hagas tu pregunta, destaca el hecho de que ya has hecho todo esto; esto ayudará a establecer que no eres una esponja vaga y que sólo estás desperdiciando el tiempo de los demás. Aún mejor, destaca lo que hayas aprendido a partir de estas cosas. Nos gusta responder a la gente que ha demostrado ser capaz de aprender de las respuestas. Prepara tu pregunta. Piensa en ella. Las preguntas precipitadas reciben respuestas precipitadas, o ni siquiera eso. Cuanto más hagas para demostrar que has puesto pensamiento y esfuerzo en resolver tu problema antes de pedir ayuda, más cerca estarás de recibirla realmente. Ten cuidado de no hacer la pregunta equivocada. Si haces una que esté basada en asunciones erróneas, Hacker Al Azar seguramente te responderá con algo literal e inútil mientras piensa "Qué pregunta más estúpida...", y esperando que la experiencia de obtener una respuesta a lo que has preguntado exactamente en vez de a lo que necesitas saber te enseñará una lección. Nunca asumas que tienes derecho a una respuesta. No lo tienes. Te ganarás una respuesta, si te la ganas haciendo una pregunta sustancial, interesante y que haga pensar— una que contribuya implícitamente a la experiencia de la comunidad antes que solicitar de manera pasiva conocimiento de los demás. Por otra parte, un muy buen comienzo es dejar claro que puedes y quieres participar en el proceso de desarrollar la solución. "¿Tiene alguien alguna pista?" "¿Qué le falta a mi ejemplo?" y "¿Hay alguna página que debiera haber consultado?" tendrán más probabilidades de ser respondidas que "Publica por favor el procedimiento exacto que debería seguir", porque estás dejando claro que estás realmente deseoso de completar el proceso si alguien simplemente te orienta en la dirección correcta. Cuando preguntes Elige el foro con cuidado Ten cuidado al elegir dónde planteas tu pregunta. Seguramente te ignorarán o te tacharán de perdedor si: publicas tu pregunta en un foro en el que se encuentra fuera de lugar (off topic) publicas una pregunta muy elemental en un foro en el que se esperan preguntas técnicas avanzadas, o viceversa publicas el mensaje al mismo tiempo en grupos de noticas muy diferentes (cross-posting) Los hackers descartan las preguntas inapropiadas para intentar proteger sus canales de comunicación de lo insustancial. No quieres que te suceda eso. Escribe de manera clara respetando la ortografía y la gramática Sabemos por experiencia que los escritores descuidados y chapuceros también piensan de manera desordenada y chapucera (a menudo lo suficiente como para apostar por ello, no obstante). Responder a pensadores descuidados y chapuceros no recompensa; mejor estaríamos usando nuestro tiempo en cualquier otro lugar. Por esto, es importante expresar tu pregunta de manera clara. Si no puedes molestarte en hacer eso, nosotros no podemos molestarnos en prestarte atención. Aprovecha el esfuerzo añadido en pulir tu lenguaje. No tiene que ser nada estirado ni formal — de hecho, la cultura hacker valora el habla informal, la jerga y el lenguaje cómico usado con precisión. Pero tiene que ser preciso; tiene que haber alguna indicación de que estás pensando y prestando atención. Deletrea correctamente. No confundas "its" con "it's" o "loose" con "lose". No ESCRIBAS TODO EN MAYÚSCULAS, eso se lee como si estuvieses gritando, se considera poco "fino". Si escribes como un bobo medio analfabeto probablemente te ignorarán. Escribir como un hax0r script kiddie de l33t es el beso de la muerte absoluto y te garantiza que no recibirás otra cosa que un silencio sepulcral (o, si tienes suerte, un montón de desprecio y sarcasmo). Si preguntas en un foro en el que no se usa tu idioma materno, obtendrás una cantidad limitada de avisos por tus errores gramaticales y de ortografía — pero ninguno añadido por tus argumentaciones chapuceras (y sí, normalmente conocemos la diferencia). Además, a menos que conozcas las lenguas de quienes te respondan, escribe en inglés. Los hackers ocupados tienden a descartar las preguntas en idiomas que no entienden, y el inglés es el idioma de trabajo en la red. Al escribir en inglés minimizas las posibilidades de que descarten tu pregunta sin leerla. Envía las preguntas en formatos que sean fáciles de entender Si artificialmente haces tu pregunta difícil de leer, tendrá más probabilidades de ser ignorada en favor de una que no lo sea. Por esto: Envía el correo en texto plano, no en HTML. No envíes correo en el que párrafos completos consten de una única línea * múltiples veces. (Esto dificulta responder sólo a partes del mensaje.) Tampoco envíes mensaje codificados como MIME Quoted-Printable; todos esos =20 esparcidos por el texto son feos y además distraen. Jamás de los jamases esperes que los hackers puedan leer formatos de documentos propietarios como Microsoft Word. La mayoría de los hackers reaccionan a esto de igual manera que reaccionarías tú ante un montón de estiércol humeante volcado en el umbral de tu puerta. Si envías correo desde una máquina con Windows, desactiva la estúpida prestación "Smart Quotes" (citas inteligentes) de Outlook. Esto es para evitar caracteres de basura esparcidos por tu mensaje. Usa títulos específicos y con sentido En las listas de correo o en los grupos de noticias, la cabecera del mensaje es tu oportunidad de oro para atraer la atención de expertos cualificados en aproximadamente 50 caracteres o menos. No los desperdicies en balbuceos como "Por favor ayúdame" (de "POR FAVOR AYÚDAME!!!" ya ni hablamos). No intentes impresionarnos con lo profundo de tu angustia; mejor usa ese preciado espacio para una descripción lo más concisa posible del problema. Estúpido: ¡AYUDA! ¡El vídeo no funciona en mi portátil! Inteligente: Cursor del ratón deformado con XFree86 4.1, chipset de vídeo Loquesea MV1005 Sé preciso e informativo sobre tu problema Describe los síntomas de tu problema o error con cuidado y claramente. Describe el entorno en el que ocurre (máquina, S.O., aplicación, loquesea). Describe la investigación que llevaste a cabo para acotar una posible respuesta al problema antes de hacer la pregunta. Describe los pasos de diagnóstico que llevaste a cabo e intenta solucionar el problema tú mismo antes de formular la cuestión. Describe cualquier cambio reciente en tu ordenador o combinación de software que pueda resultar relevante. Hazlo lo mejor que puedas para anticiparte a las preguntas que un hacker te haría, y para responderlas antes de tu solicitud de ayuda. Simon Tatham ha escrito un excelente ensayo titulado Cómo informar de errores de manera efectiva. Te recomiendo efusivamente que lo leas. Describe los síntomas del problema, no tus suposiciones No es útil decirle a los hackers lo que tú crees que está causándote el problema. (Si tus teorías de diagnóstico fueran tan fiables, ¿estarías pidiendo ayuda a otros?) Por esto, asegúrate de que únicamente estás contándoles los síntomas de lo que va mal y no tus interpretaciones o teorías. Deja que ellos lleven a cabo las interpretaciones y pronuncien su diagnóstico. Estúpida: Me salen errores SIG11 durante la compilación del núcleo, y sospecho que haya podido romperse un hilo en uno de los circuitos de la placa base. ¿Cuál es la mejor manera de comprobar eso? Inteligente: Mi K6/233 ensamblado por mí con una placa base FIC-PA2007 (chipset VIA Apollo VP2) con 256MB Corsair PC133 SDRAM empieza a tener frecuentes errores SIG11 sobre unos 20 minutos después de haberlo arrancado durante el curso de compilaciones del núcleo, pero nunca durante los primeros 20 minutos. Si reinicio no se reinicia el reloj, pero si lo apago durante la noche sí. Pasar toda la RAM a la partición de intercambio no ha servido de nada. A continuación os pongo la parte relevante del registro de una típica sesión de compilación. Describe los síntomas de tu problema en orden cronológico Las pistas más útiles para averiguar qué ha ido mal se encuentran a menudo en los acontecimientos inmediatamente anteriores. Por esto, deberías describir con precisión lo que hiciste, y lo que hizo la máquina, hasta el momento fatídico. En el caso de procesos por línea de órdenes, disponer de un registro de la sesión (p.ej., usando la utilidad del "script" y citando las veinte líneas o así relevantes resultaría muy útil. Si el programa en cuestión tiene opciones de diagnóstico (como -v para prolijo) intenta pensar cuidadosamente en elegir opciones que puedan añadir información de depuración útil para la transcripción. Si tu mensaje acaba resultando muy largo (más de cuatro párrafos), puede resultar útil comentar el problema de manera sucinta al principio y luego hacerlo de manera cronológica. De esta manera, los hackers sabrán dónde mirar al leer tu mensaje. No solicites que te respondan por correo en privado Los hackers creen que resolver problemas debería ser un proceso público y transparente durante el cual un primer intento de respuesta puede y debería corregirse si alguien con más conocimientos percibe que la respuesta es incompleta o incorrecta. Además, obtienen parte de su recompensa por responder al verse que son competentes y que poseen conocimientos suficientes por parte de sus iguales. Cuando pides una respuesta privada, estás interrumpiendo tanto el proceso como la recompensa. No hagas eso. Es elección de quien responde hacerlo en privado — y si lo hace, normalmente es porque piensa que la pregunta es demasiado obvia o mal planteada como para resultar interesante para otros. Hay una excepción limitada a esta regla. Si piensas que puedes recibir una gran cantidad de respuestas muy similares por el tipo de pregunta, entonces las palabras mágicas son "mandadme las respuestas por correo-e y haré un resúmen para el grupo". Se considera cortés ahorrar a la lista de correo o al grupo de noticias una gran cantidad de respuestas sustancialmente idénticas — pero evidentemente tienes que mantener la promesa de resumirlas. Evita las preguntas insustanciales Resiste la tentación de cerrar tu consulta con preguntas semánticamente nulas como "¿Puede ayudarme alguien?" o "¿Hay alguna respuesta?" Primero: si has escrito la descripción de tu problema de manera medianamente competente, ese tipo de preguntas añadidas sin más resultan, como poco, supérfluas. Segundo: al ser supérfluas, los hackers las encuentran molestas — y probablemente te devolverán respuestas de una lógica impecable aunque ignorándote como "Sí, pueden ayudarte" o "No, no hay ayuda para ti". La cortesía nunca hiere, e incluso a veces hasta ayuda. Sé cortés. Usa "Por favor" y "Gracias por adelantado". Deja claro que aprecias el tiempo que emplea la gente ayudándote gratis. Sé honesto, esto no es tan importante como (y no puede sustituir a) ser correcto gramaticalmente, claro, preciso y descriptivo, evitar formatos propietarios, etc; los hackers prefieren, por lo general, los informes sobre errores concretos técnicamente aunque bruscos a la vaguedad educada. (Si esto te deja contrariado, recuerda que valoramos una pregunta por lo que nos enseña). De todos modos, si obtuviste tus conocimientos técnicos en una tómbola, la educación incrementará tus posibilidades de recibir una respuesta útil. Concluye con una breve nota sobre la solución Envía una nota tras haber resuelto el problema a todos los que te ayudaron; hazles saber cómo acabó todo y agradéceles de nuevo su ayuda. Si el problema atrajo el interés general en una lista de correo o grupo de noticias, entonces será apropiado publicar la nota allí. La nota no tiene que ser larga ni desarrollada, un sencillo "Pepe - que al final resulta que lo que fallaba era el cable. Gracias a todos. - Jose Luis" será mejor que nada. De hecho, un resúmen corto y agradable es mejor que una larga disertación a menos que la solución requiera de cierta profundidad técnica. Además de ser cortés e informativo, esta especie de seguimiento ayuda a todos los que te asistieron a sentir una sensación satisfactoria de cercanía al problema. Si tú no eres un hacker, créete que ese sentimiento es muy importante para los gurús y expertos a quienes pediste ayuda. Los problemas que acaban sin resolverse resultan frustrantes; los hackers desean verlos resueltos. El buen karma que aliviar ese picor te hará ganar te resultará de mucha ayuda la próxima vez que necesites plantear una pregunta. Cómo interpretar las respuestas RTFM y STFW: cómo decirte que la has cagado seriamente Hay una tradición antigua y venerada: si obtienes por respuesta un "RTFM", la persona que lo envió piensa que deberías haberte leído el puto manual. Casi con total seguridad estará en lo cierto. Ve y lee. RTFM tiene un familiar más joven. Si recibes como respuesta "STFW", quien te lo envía piensa que deberías haber Buscado en La Puta Web. Casi con toda certeza tendrá razón. Ve y busca. A menudo, quien envía una de estas respuestas está contemplando el manual o la página web en cuestión mientras escribe. Estas respuestas significan que piensa que (a) la información que necesitas es fácil de encontrar, y (b) aprenderás más si buscas tú mismo la información que si te la dan a "digerir" con cuchara. Esto no debería ofenderte; según el estándar de los hackers, se te está mostrando cierto respeto (aunque áspero, no lo neguemos) al simplemente no ignorarte. Deberías agradecer la extrema amabilidad. Si no entiendes... Si no entiendes la respuesta, no devuelvas inmediatamente la solicitud de una clarificación. Usa las mismas herramientas que utilizaste para intentar resolver tu pregunta original (manuales, PUFs, la Web, amigos con mayores destrezas) para entender la respuesta. Si necesitas pedir una clarificación, intenta demostrar lo que has aprendido. Por ejemplo, supón que te digo: "Suena como si tuvieses un zentry atascado; necesitarás liberarlo." Entonces: He aquí una mala pregunta: "¿Qué es un zentry?" He aquí una buena pregunta: "Está bien, he leído la página de manual y los zentrys sólo se mencionan bajo las variables -z y -p. En ninguna de ellas se menciona nada sobre liberar a los zentrys. ¿Es una de éstas o me estoy perdiendo algo?" Sobre cómo no reaccionar como un perdedor Hay bastantes posibilidades de que te equivoques más de una vez en foros de la comunidad hacker -- de maneras detalladas en este artículo o similares. Y se te dirá exactamente en qué te equivocaste, posiblemente con profusos detalles. En público. Cuando esto sucede, lo peor que puedes hacer es lamentarte por la experiencia, denotar que te han asaltado verbalmente, pedir disculpas, llorar, contener la respiración, amenazar con pleitos, quejarte a los jefes de la gente, dejar la tapa del baño abierta, etc. En vez de eso, esto es lo que tienes que hacer: Superarlo. Es normal. De hecho, resulta saludable y apropiado. Los estándares de la comunidad no se mantienen por sí mismos: los mantiene la gente que los aplica activa, visiblemente, en público. No te quejes de que todas las críticas se te deberían haber enviado por correo privado: así no es como funciona esto. Ni resulta útil insistir en que se te ha insultado personalmente cuando alguien comenta que alguna de tus peticiones era errónea, o que sus opiniones diferían. Ésas son actitudes de perdedores. Ha habido foros de hackers en los que, aparte de un sentido de la hipercortesía mal guiado, se ha prohibido la entrada a participantes por enviar cualquier mensaje haciendo constar errores en los mensajes de los demás, y se les ha dicho "No digas nada si no deseas ayudar al usuario". El éxodo de los participantes más experimentados a otros lugares les ha hecho descender al balbuceo sin el menor sentido y han perdido toda su utilidad como foros técnicos. Exageradamente "amigable" (de esa manera) o útil: Elige uno. Recuerda: cuando ese hacker te diga que te has equivocado, y (no importa cuán rudamente) te diga que no vuelvas a hacerlo, su actuación te concierne a (1) ti y a (2) su comunidad. Sería mucho más sencillo para él ignorarte poniéndote un filtro. Si no eres capaz de ser agradecido ten al menos un poco de dignidad, no te quejes y no esperes que te traten como una frágil muñeca sólo porque seas un recién llegado de alma teatralmente hipersensible y con ilusiones de estar autorizado a todo. Preguntas que no hacer He aquí algunas preguntas estúpidas que ya se han convertido en clásicas junto con lo que los hackers están pensando cuando no las responden. P: ¿Dónde puedo encontrar el programa X? P: Tengo problemas con mi máquina en Windows. ¿Podríais ayudarme? P: Tengo problemas al instalar Linux o X. ¿Podríais ayudarme? P: ¿Cómo puedo convertirme en root/robar privilegios de operador de canal/leer el correo de alguien? P: ¿Dónde puedo encontrar el programa X? R: En el mismo lugar donde yo lo habría encontrado, imbécil -- al otro lado de un buscador.. Dios, ¿Aún no sabe nadie cómo usar Google? P: Tengo problemas con mi máquina en Windows. ¿Podríais ayudarme? R: Claro. Tira esa basura de Microsoft e instala Linux. P: Tengo problemas al instalar Linux o X. ¿Podríais ayudarme? R: No. Necesitaría poder acceder físicamente a tu máquina para resolver eso. Pide ayuda en tu grupo de usuarios de Linux local para eso. P: ¿Cómo puedo convertirme en root/robar privilegios de operador de un canal/leer el correo de otra persona? R: Eres un desgraciado por querer hacer esas cosas y un subnormal por pedir a un hacker que te ayude. Buenas y malas preguntas Finalmente, voy a ilustrar con ejemplos cómo hacer preguntas de una manera inteligente; he aquí pares de preguntas sobre el mismo problema, una planteada de manera estúpida y otra de manera inteligente. Estúpida: ¿Dónde puedo encontrar información sobre el Funli Flurbamático? Esta pregunta está pidiendo a gritos un"STFW" como respuesta. Inteligente: He usado Google para intentar encontrar algo sobre el "Funli Flurbamático 2600" en la Web, pero no he obtenido resultados satisfactorios. ¿Sabe alguien dónde puedo encontrar información de programación sobre este dispositivo? Éste ya ha STFWado, y suena como si tuviese un verdadero problema. Estúpida: No he conseguido compilar el código del proyecto loquesea. ¿Por qué está roto? Asume que a todo el mundo le ocurre lo mismo. Qué arrogante. Inteligente: El código del proyecto loquesea no compila bajo Nulix versión 6.2. Me he leído las PUF, pero no aparece nada de problemas relacionados con Nulix. Os pego aquí una transcripción de mi intento de compilación; ¿es por algo que hice mal? Ha especificado el entorno, se ha leído las PUF, ha mostrado el error y no ha asumido que sus problemas son culpa de otra persona. Quizá este chico se merezca algo de atención. Estúpida: Tengo problemas con mi placa base. ¿Puede ayudarme alguien? La respuesta de un hacker cualquiera a esto sería algo como "De acuerdo. ¿Necesitas también eructar y que te cambie los pañales?" seguido de una ligera presión sobre la tecla Supr. Inteligente:He intentado X, Y y Z con la placa base S2464. Cuando eso no funcionó, intenté A, B y C. Fíjense en ese curioso síntoma cuando hice C. Obviamente el florbeador está gromiqueando, pero los resultados no son los que podrían esperarse. ¿Cuáles son las causas habituales del gromiqueo en las placas multiprocesador? ¿Sabe alguien de alguna prueba más que pueda llevar a cabo para averiguar el problema? Esta persona, por otra parte, parece merecedora de una respuesta. Ha mostrado su inteligencia en un intento de resolver el problema en vez de esperar que le caiga una respuesta del cielo. En la última pregunta, fijáos en la sutil pero importante diferencia entre pedir "Dame una respuesta" y "Por favor, ayúdame a hacerme una idea de qué diagnósticos adicionales puedo llevar a cabo para alcanzar a ver la luz". De hecho, la forma de la última pregunta se encuentra basada muy de cerca en un incidente real que sucedió en Agosto de 2.001 en la lista de correo del núcleo de Linux. Yo (Eric) era el que preguntaba entonces. Estaba sufriendo misteriosos cuelgues con una placa Tyan S2464. Los miembros de la lista aportaron la información crítica que necesitaba para resolver el problema. Al plantear la pregunta de la manera que la hice, le dí a la gente algo con que entretenerse; hice fácil y atractivo para ellos que se involucraran. Demostré respeto por la capacidad de mis compañeros y les invité a consultarme también como compañero. También demostré respeto por el valor de su tiempo haciéndoles saber los callejones sin salida con los que ya me había topado. Después de todo, cuando les dí a todos las gracias y remarqué lo bien que había funcionado el proceso, un miembro de la lista de correo del núcleo de Linux hizo la observación de que creía que había sido así no porque yo tuvera un "nombre" en esa lista, sino porque hice la pregunta de la manera adecuada. Nosotros los hackers somos de alguna manera una ruda meritocracia; estoy seguro de que tenía razón, y de que si me hubiese comportado como una esponja se me habrían echado todos encima o me habrían ignorado sin importar quien fuese. Su sugerencia de que había escrito el completo incidente como una instrucción para otros condujo directamente a la composición de esta guía. Si no logras conseguir una respuesta Somos conscientes que que hay mucha gente que sólo quiere usar el software que escribimos y no está interesada en conocer los detalles técnicos. Para la mayoría de la gente, un ordenador es meramente una herramienta, un medio para un fin. Sabemos eso y no esperamos que todo el mundo se interese en asuntos técnicos. No obstante, nuestro estilo de responder se encuentra orientado a quienes sí se toman ese interés. Por esto, si no obtienes respuesta, no te tomes como algo personal que no sintamos que podamos ayudarte. Hay otros recursos a menudo mejor adaptados a las necesidades de un principiante. Hay muchos grupos de usuarios en línea y locales compuestos por entusiastas del software incluso aunque nunca hayan escrito software alguno ellos mismos. Estos grupos se forman de manera que la gente pueda ayudarse entre sí y ayudar a los nuevos usuarios. Hay además muchas compañías comerciales a las que puedes contratar para que te presten su ayuda, tanto grande como pequeña. ¡Que no te aterre la idea de tener que pagar por un poco de ayuda! Después de todo, si al motor de tu coche se le rompe una junta seguramente tendrás que llevarlo al mecánico y pagar para que te lo arreglen. Incluso aunque el software no te costase nada, no puedes esperar que el soporte sea siempre gratuito. Para el software popular como Linux, hay al menos unos 10.000 usuarios por cada desarrollador. Resulta imposible que una sola persona pueda atender llamadas de soporte técnico de cerca de 10.000 usuarios. Recuerda que aunque tengas que pagar por el soporte, estás aún pagando mucho menos que si tuvieses que comprar el software (y el soporte para el software de código cerrado es por lo general mucho más caro y menos competente que el soporte para el software de código abierto).
Información sobre desbloquear, flashear tu cel. http://www.chw.net/foro/finalizadas-f68/131424-desbloqueo-celulares-sony-ericsson.html Para Sony Ericsson: - Qué significa liberar o desbloquear un móvil Cuando se libera un móvil, lo que se hace es eliminar los bloqueos existentes de la operadora de telefonía en la que se adquirió el móvil, que hacen que sólo se pueda utilizar éste con tarjetas SIM de dicha compañía. Al liberarlo, el teléfono se podrá usar con tarjetas SIM de cualquier compañía sin restricciones. No puedo hacer nada si tu celular está encargado por robo o si está bloqueado el chip por la compañía. - Qué es flashear un teléfono Flashear es el proceso por el cual se cambia el firmware del teléfono por uno diferente, ya sea uno más actualizado, para solucionar problemas del teléfono. Para subirle al móvil la versión mas reciente de firmware disponible y funcione mas rápido, corrija BUGS, cambios de idioma, quitar publicidad del operador, etc. También se hace cuando el celular no prende, queda con pantalla blanca o no pasa de la pantalla que dice “Sony Ericsson” o “Error de configuración, por favor contacte a su operador local”. - Qué es el firmware de un teléfono El firmware es el software que maneja el hardware de tu teléfono. Es algo así como el sistema operativo del teléfono. Para actualizarlo o modificarlo, es necesario flashear el teléfono. - Cómo saber la versión del firmware de tu teléfono. Debes introducir la siguiente secuencia, ya sea mediante el joystick o las flechas de tu móvil: Derecha, *, izquierda, izquierda, *, izquierda, * Aparecerá el menú de servicio. Busca la entrada "información de software", donde aparecerán las versión de tu firmware entre otras cosas. Para los siguientes modelos, el proceso de desbloqueo demora 5 minutos y el flasheo demora 30 minutos: CID49: Desbloqueo permanente CID50 y CID51: Desbloqueo se pierde si se flashea posteriormente Desbloqueo $6.900, Flasheo $7.500, Desbloqueo + Flasheo $10.000: K310, K510 W300, W810 Z550 Desbloqueo $4.500, Flasheo $5.500: T226, T237, T290 T610, T637 K300, K500, K700, K750 W800 Z520 Para los siguientes modelos, el proceso de desbloqueo demora de 5 a 20 minutos y el flasheo demora 30 minutos: NOTA: Este desbloqueo se pierde si se flashea posteriormente Desbloqueo $9.500, Flasheo $7.500, Desbloqueo + Flasheo $15.000: K550, K790 W580, W610, W710, W880 S500 Z710
Como comprar un mouse recomendaciones para elegir el periférico adecuado, a la hora de pensar en un nuevo ratón El mouse es uno de los artefactos tecnológicos más reconocidos y ubicuos. La constante innovación y los cómodos diseños hicieron que este periférico sea más fácil de usar, más poderoso y más personal que nunca. Con la creciente importancia de la computación en la vida cotidiana, el tipo de mouse utilizado puede afectar dramáticamente la calidad de la experiencia. Ademos del precio, existen diversos factores que en la actualidad influyen de manera directa en la elección de un mouse: el tracking , la conectividad, el diseño, su uso y, más que nada, su uso. Bola, LED óptico o láser . En décadas pasadas, casi todos los mouse usaban un sistema mecánico que consistía en el movimiento de una pequeña bola de goma, que giraba a medida que se deslizaba sobre una superficie. Estos periféricos eran sólidos protagonistas en su época, pero inevitablemente la esfera juntaba suciedad haciendo que el sistema interno se trabara; por lo tanto, el deslizamiento se convertía en dificultoso, y el usuario debía limpiar periódicamente el lugar donde se encontraba la bolita. En la actualidad, la mayoría de los mouse usan sensores ópticos para deslizarse. Generalmente, un mouse óptico ilumina su superficie por debajo emitiendo una luz roja de diodo (LED, por sus siglas en inglés). Una lente de cámara captura imágenes de la superficie, que son analizadas por un procesador digital de señales especializado (DSP, por sus siglas en inglés). Cuando el mouse se desliza, la cámara toma una serie continua de imágenes que muestran los cambios en la superficie. Este tipo de periféricos se desplaza suavemente por casi cualquier tipo de suelo , aún sin un mousepad . En tanto, un mouse láser puede ver aproximadamente 20 veces más detalles de la superficie que el mouse óptico. Esto significa que rastrea de forma más precisa, y trabaja en más superficies que el dispositivo basado en LED. Si se busca exactitud, lo más adecuado sería pensar en un mouse láser, pero si esto es más de lo que se necesita, lo recomendable es usar un mouse óptico basado en LED, en lugar de uno con bola, para lograr una experiencia de deslizamiento más suave. Inalámbrico . Hoy en día existen muy pocas razones por las cuales comprar un mouse cableado. Un mouse inalámbrico brinda la flexibilidad de navegar virtualmente desde cualquier posición, al eliminar la restricción física del cable y evitar los enredos con las conexiones de la computadora, el del teléfono, y hasta con los papeles sueltos del escritorio. En el pasado, las barreras más grandes en el uso de un mouse inalámbrico eran una pobre transmisión de datos, interferencias, una instalación complicada, y poca vida de la batería. En los años recientes, la tecnología ha avanzado significativamente eliminando estas barreras. Aquellos que se esmeran por reducir el desorden de los escritorios, posiblemente consideren un mouse con un mini receptor USB. La mayoría de los mouse inalámbricos poseen receptores grandes y cables largos que se enchufan en la parte posterior de la PC. En cambio, los mini receptores solo sobresalen 5 cm. del puerto USB y pueden ubicarse detrás de la computadora sin ser vistos, o sobresalir sutilmente del frente del equipo, lugar cómodo y fácil para ser removido y usado en otra computadora. Un mini receptor es también ideal para usar con una notebook por su pequeño tamaño. Estilo personal y confort . A medida que la computación se fue haciendo cada vez más necesaria en la vida diaria, elegir un periférico que coincida con el estilo personal de cada uno y con la decoración del hogar, se volvió una cuestión importante. La posibilidad de alinear el diseño del mouse con el teclado, no sólo permitirá respecta un estilo, sino complementar las herramientas de navegación de ambos periféricos de entrada. Por otro lado, la búsqueda del confort toma otro protagonismo dado que el usuario puede estar más tiempo utilizando un mouse que cualquier otro periférico. Utilidad . Uno de los principales aspectos a tener en cuenta a la hora de pensar en un nuevo mouse, es conocer cómo se desarrolla nuestra actividad frente a la computadora. En primer lugar, es necesario tener presente cuáles son las aplicaciones de mayor uso: un correo electrónico, Internet, programas de oficina. Seguramente, un mouse con botones laterales de desplazamiento de páginas y documentos podrán aumentar la productividad. En muchos de los videojuegos que se venden actualmente, un buen mouse puede hacer la diferencia entre pasar al próximo nivel, o finalizar la partida. Así, un mouse de alta resolución (1600 dpi , por ejemplo) le brinda al jugador más desplazamientos en la pantalla con cada movimiento de la mano. Además, los botones laterales le otorgarán más opciones para enfrentar la aventura.
Lista del mejor Programa Antivirus Virus.gr hace pruebas regularmente comparando distintos programas antivirus para ver cuál es el mejor antivirus. Ver resultados » Especificaciones de la prueba de programas antivirus En la prueba que tuvo lugar del 1 al 21 de Junio de utilizaron un ordenador con Windows XP Professional SP2 con P4 3200 Mhz, 2048MB DDRAM para comparar 49 programas antivirusfrente a más de 246705 muestras de virus. Los programas antivirus PER, Command, Extendia AVK, Kingsoft, ZondexGuard, Windows Live OneCare , BKAV, MoonSecureAV, Fire, Vexira, BullGuard, Avast Professional, AVG Pro, A-squared Anti-Malware Professional, no se probaron porque no había disponible una versión de prueba de estos programas, utilizan el mismo motor que otros de los probados, o no funcionaban correctamente. Todos los programas antivirus probados tenían las últimas versiónes y actualizaciones y fueron probados usando sus capacidades máximas de exploración. Archivos analizados Analizaron los siguientes tipos de archivo: SH, ELF, COM, EXE, PL, BAT, PRC, DOC, XLS, BIN, MDB, IMG, PPT, VBS, MSG, VBA, OLE, HTM, INI, SMM, TD0, REG, CLASS, HTA, JS, VI_, URL, PHP, WMF, HLP, XML, SCR, PIF, SHS, WBT, CSC, MAC, DAT, CLS, STI, INF, HQX, XMI, SIT. Las muestras de virus Las muestras de virus se dividieron en las siguientes categorías, en función del tipo de virus: • File: BeOS, FreeBSD, Linux, Mac, Palm, OS2, Unix, BinaryImage, BAS viruses, MenuetOS. • Windows: virus Win.*.*. • Macro: Virus Macro, Multi y Formula. • Malware: Adware, DoS, Constructors, Exploit, Flooders, Nukers, Sniffers, SpamTools, Spoofers, Virus Construction Tools, Droppers, PolyEngines, Rootkits, Packed. • Script: ABAP, BAT, Corel, HTML, Java, Scripts, MSH, VBS, WBS, Worms, PHP, Perl, Ruby, Python, WHS, TSQL, ASP, SAP, QNX, virus Matlab. • Troyanos / Backdoor: virus caballo de Troya y backdoor. Resultados del último test comparando 49 programas antivirus Clasificación de los mejores programas antivirus Programa Antivirus Porcentaje de virus encontrados G DATA 99.05% F-Secure 98.75% TrustPort 98.06% Kaspersky 97.95% eScan 97.44% The Shield 97.43% AntiVir Premium 97.13% Ashampoo 97.09% Ikarus 96.05% AntiVir Classic Free 95.54% AVG 94.85% BitDefender 94.70% Avast Professional 93.78% Nod32 93.36% F-Prot 91.87% BitDefender Free 91.32% ArcaVir 88.65% Norman 87.72% Vba32 87.21% McAfee Enterpise 86.57% McAfee 86.39% Rising AV 85.87% Norton 83.34% Dr. Web 82.87% Antiy Ghostbusters 80.23% VirusBuster 77.19% Outpost 75.35% V3 Internet Security 75.23% ViRobot Expert 74.50% Virus Chaser 73.65% A-squared Anti-Malware 71.66% PC Tools 69.82% Trend Micro Antivirus+Antispyware 67.28% Iolo 63.98% Panda 61.41% Sophos Sweep 54.71% ClamWin 54.68% CA Anti-Virus 51.08% Quick Heal 47.97% Comodo 43.15% Trojan Hunter 31.39% Solo 21.10% Protector Plus 20.14% PCClear 19.63% AntiTrojan Shield 14.74% Trojan Remover 13.49% VirIT 8.63% True Sword 3.42% Abacre 0.00%