2008
06.01

Soluciones del 7º capítulo

Cita:
1- Has un programa que muestre las 10 primeras tablas de multiplicar.
Código:
#include <stdio.h>

int main (void) {
int numero, tabla;

for (tabla=1; tabla<=10; tabla++) {
printf (”Tabla del %d\n”, tabla);
for (numero=1; numero<=10; numero++)
printf (”%d*%d=%d\n”, tabla, numero, tabla*numero);
}
}

Cita:
2-Has un programa que pdia una contraseña y diga si es correcta o no.
Código:
#include <stdio.h>
#define CONTRASENIA 123

int main (void) {
int contrasenia;

printf (”Introduzca la contraseña\n”);
scanf (”%d”, &contrasenia);

if (contrasenia==CONTRASENIA)
printf (”Contraseña correcta”);
else
printf (”Contraseña incorrecta”);
}

Cita:
3- Has un programa que pida un número al usuario y diga si es par o impar
Código:
#include <stdio.h>

int main (void) {
int numero;

printf (”Ingrese un número”);
scanf (”%d”, numero);

if (numero%2==0)
printf(”El número es par”);
else
printf (”El número es impar”);
}

El reto

Por fin llegamos, ¿no?. Bien, las bombas lógicas son programas que se esconden como procesos y esperan a que se cumpla un evento determinado (sea el día tal, la hora cual o se pulse una combinación de teclas, por ejemplo) para realizar un efecto determinado. No nos engañemos, suelen estar hechas con malas intenciones.

Voy a aprovechar esto para explicar una función que puede ser útil en este tipo de programas:

- Función int system (const char *cadena[ ]) (no recuerdo si era así, lo hago de memoria) de la biblioteca stdlib: Básicamente lo que hace es: si el puntero que le mandamos es nulo, comprueba que exista un intérprete de comandos en el sistema, en caso contrario (que contenga una cadena) pasa el contenido al intérprete como un comando.

Comencemos a hacerlo. En nuestro caso, para hacer el algoritmo que espera al evento, lo único que podemos hacer es esperar a que el usuario coloque una combinación de números, más no sabemos. Esta sería una alternativa:

Código:
do {
scanf (”%d”, numeros);
}
while (numeros != NUMEROS)

Donde NUMEROS es una constante en la que se almacena esa combinación.

Para el efecto no sabemos mucho tampoco. Pero con esa nueva función se pueden hacer cosas interesantes. Por ejemplo:

Código:
for (int contador =0; contador<500; contador++)
system (”start www.google.es”);

Con sólo dos líneas le abrimos al descuidado usuario 500 veces su navegador por defecto, teniendo evidentes consecuencias. Este sería un posible código completo:

Código:
#include <stdio.h>
#include <stdlib.h>
#defina NUMEROS 123

int main (void) {
int numeros;

do {
scanf (”%d”, numeros);
}
while (numeros != NUMEROS)

for (int contador =0; contador<500; contador++)
system (”start www.google.es”);
}

Por supuesto, hay que estar muy mal de la cabeza para ingresar “123″ si te aparece una pantalla de cmd esperando una entrada. Pero si aprendemos un poco más de programación y nos estudiamos las API’s de Windows, podremos hacer cosas muy interesantes. Sin embargo, no es necesario, precisamente, con saber las funciones de la biblioteca times, podemos esperar a determinado día para que se cumpla la condición. O, si queremos hacer efectos un poco más visuales, pero sin aprender las API, siempre se puede recurrir al scripting, por ejemplo:

Código:
#include <stdio.h>
#include <stdlib.h>
#define NUMEROS 123

int main (void) {
int numeros;

system (”echo WScript.echo \”Has pulsado 123\”>blogica.vbs”);

do {
scanf (”%d”, numeros);
}
while (numeros != NUMEROS);

system (”blogica.vbs”);
}

Esto (en teoría, no lo he probado) nos tiene que mostrar un mensaje que diga “Has pulsado 123″, para lo cual nos valemos de un pequeño código en Visual Basic Script, sin embargo sería un tanto más eficiente si usásemos funciones de ficheros (para que el usuario no vea el “echo WScript.echo “Has pulsado 123″>blogica.vbs”) y más aún si lo hiciésemos todo en VBS, pero como no sabemos usar ficheros (todavía) y esto no es un curso de VBS, lo dejamos aquí.

49 comments so far

Add Your Comment
  1. Hi There
    Well im a newbie just starting so ill let you know
    yours truly cant wait for your next posts.

  2. Hello
    I find it to be nice
    Cu Later

  3. Nice writing style.

  4. Yo Bro
    Hey are you a professional journalist? This article is very well written, as compared to most other sites Me saw today. anyhow thankz for da good read!

  5. Good Day
    Sounds like a plan to me
    meself will put your site on my blogroll.

  6. Awesome info! myself was honestly just thinking about something similar to this da other day so, it was almost weird when myself ran across this. You would be surprised how many people simply have no idea when it comes to this kind of stuff. Anyway, thanks for getting this very good info out there and myself am sure myself am not da only one who appreciates you taking da time to post this for da masses.
    Bye Bye

  7. Hello There
    yours truly just stopped by your site and thought yours truly would say hello.
    Yours Sincerly

  8. If so, feel free to email me. danke.
    Would you be interested in exchanging blogrolls links with my site?

  9. Hi There
    Im just getting started with my new blog. Would you want to exchange links on our blog-rolls?
    My bro am going to bookmark and read more often
    Bye