lunes, 30 de diciembre de 2013

Gurús de la programación: Ken Thomson

Hola a todos,





















Ken Thomson es un programador americano de 70 años ( todavía en activo) que junto con Dennis Ritchie desarrolló el lenguaje C y el sistema operativo UNIX.

Junto con Dennis Ritchie también desarrolló el lenguaje B ( precursor del lenguaje C) y el sistema operativo Multics.

En su carrera en solitario cabe destacar el desarrollo del editor de textos de UNIX (todos los editores actuales provienen conceptualmente de ese editor), la defensa del uso de pipes dentro de los sistemas operativos y la invención del UTF-8.

Es por todo ello que Ken Thomson es considerado un gurú de la programación.

Actualmente, con muchos años ya de trabajo en sus espaldas, está trabajando en Google desarrollando el lenguaje Go.



LordPakusBlog

Gurús de la programación: Dennis Ritchie

Hola a todos,

















Dennis Ritchie fue un matemático y físico estadounidense (murió en el 2011 a los 70 años de edad) famoso por ser el creador del lenguaje C y el sistema operativo UNIX  (ambos junto a Ken Thomson).

Trabajó durante muchos años en los laboratorios Bell donde colaboró en el desarrollo del lenguaje B y el sistema Multics. Años después trabajó en proyectos como Inferno y e lenguaje Limbo.

Junto a Brian Kerninghan escribió el libro de referencia para todos los programadores de C: "El lenguaje de programación C"

Está claro que Dennis Ritchie fue un pionero de la programación y de la informática y que sus trabajos tanto en C ( base de gran parte de los lenguajes actuales) como en UNIX ( base de la mayoría de los sistemas operativos actuales) han cambiado totalmente la historia de la informática.

Sin su aportación el mundo en general sería muy diferente y deberíamos estarle todos agradecidos.

LordPakusBlog

lunes, 2 de diciembre de 2013

Aprender a programar. Lenguajes de programación


Hola a todos,

Si habéis leído el capítulo anterior ya sabéis lo que significa programar y todo lo que implica. Si pese a saberlo queréis empezar :) os faltará un poco de base de como funciona un lenguaje de programación

Los lenguajes de programación no son más que estandars. Es decir, cuando se define un lenguaje de programación lo que se dice son las normas y características que tendrá ese lenguaje, nada más. Con lo que trabajaremos nosotros será con las implementaciones de ese lenguaje.

Por ejemplo, hace muchos años se definió el lenguaje C. Posteriormente aparecieron compiladores como turboC, watcom, visualC, gcc que implementaban dicho estandar.

Un mismo código en diferentes compiladores, aunque genere diferentes ejecutables, debería de comportarse igual. Así pues las diferencias entre compiladores normalmente radican en tres factores importantes:
- como de bien transforma el código en un ejecutable : tamaño del ejecutable, velocidad de ejecución, uso de memoria, etc...
- facilidades que aporta a la producción: tiempo de compilación, incorporación de debuger y profiler, etc...
- soporte para librerias: que librerias externas soporta (OpenGL, DirectX o las que fuera) y cuan fácil es usarlas.


Todo esto aplica tanto para un lenguaje compilado como uno interpretado. Un caso claro lo podemos ver en la programación web. Podemos definir el lenguaje html , que es un estandar, pero cada navegador lo implementa a su manera.



Ahora la gran pregunta. Ya se la teoría.... ¿cómo empiezo con la práctica?

Antes de empezar con un lenguaje en concreto vamos a ver un poco las operaciones comunes entre los lenguajes más usados (C/C++ y Java entre otros muchos). Si domináis la lógica de estas operaciones aprenderéis cualquier lenguaje en un suspiro.

- Condicional (normalmente en código es "if"): Si se cumple "lo que sea" hago "esto". Opcionalmente, también puede haber el caso en que sino se cumple la condición ("else"), haga "lo otro". Ejemplo de código en C:
          if (dinero < 5 )
          {
                trabajar();
          }
          else
          {
                 descansar();
          }

- Bucles: Repetir una y otra vez una zona de código o una operación (los puede haber de muchos tipos diferentes, pero se centran en dos categorías):
     - De repeticiones fijas: Quiero repetir una operación X veces. Ejemplo de código.
for( i = 0 ;  i < 1000 ; i = i+1 )     //Voy a repetir una operación 1000 veces
{
        dormir();
}
     - De repeticiones variables: Quiero repetir una operación mientras que haya una condición que se cumpla.
while ( tengosueño() )   //Repito una operación mientras se cumpla una condición.
{
       dormir();
}

- Funciones: Zonas de código que se pueden ejecutar desde cualquier parte del código. La sintaxis puede variar mucho de un lenguaje a otro, pero el funcionamiento siempre es parecido. Se reciben unos parámetros de entrada (números de la derecha) y se devuelve un resultado (número de la izquierda). Si no hay parámetros se usa void (vacio). Ejemplos:
bool tengosueño(void)
{
        if (sueño > 5)
             return true;   //Es una función que se usa para finalizar una función y devolver un valor.
        else
              return false;
}

void dormir(void)
{
       sueño--;
}

//int, char y bool son tipos de variables. Es la manera de indicarle al compilador como queremos que interprete esos datos.
int cobrar( int horas)
{
          return horas*6;
}


Ahora que tenéis la base , mirad código. Aún sin entender lo que diga. Iros quedando con la "gramática" y con la estructura. Código para leer por internet lo hay a cientos. Si queréis tengo un par de proyectos que os pueden servir para ir mirando código: pakengine, algún que otro motor gráfico y el math engine

Cuando ya esteis empapados de código os podéis plantear mirar algún que otro tutorial del lenguaje que queráis aprender. (si queréis aprender C/C++ espero que este os sirva).

A partir de ahí, sabiendo la teoria y teniendo la lógica, haced ejercicios. Nuevamente, si os apetece aprender C/C++ tengo un conjunto de ejercicios que tal vez os interesan.

A partir de ahí todo es practicar, practicar y practicar.

Ya sin más, os dejo hasta el siguiente capítulo, espero que os haya gustado.

Nos vemos

LordPakusBlog

martes, 19 de noviembre de 2013

Aprender a programar. Bases de programación.


Hola a todos.

Antes que aprender a programar deberíamos aprender que significa programar.

Programar significa plasmar una especificación (un deseo o una necesidad) en forma de código. Es decir, programar es el proceso de escribir un conjunto de instrucciones que den como resultado el producto que nosotros queremos.

- Ok. Hacemos código para crear programas que cubren necesidades o deseos, pero ¿por que código? ¿Podría haber otra manera de introducir estos requisitos dentro de un PC?
Originalmente , los primeros computadores que existieron no se programan mediante software sino mediante hardware. Es decir, se cableaban las distintas partes del computador para que la información fluyese de un sitio a otro y hiciera la función que tenía que hacer. (para saber más sobre esto os recomiendo que leáis  la sección de historia de la computación). No fue hasta Von Neumann (un ingeniero que trabajaba en los primeros computadores) que no se ideó el hecho que esos "cableados" podrían hacerse mediante software, es decir, mediante memorias que almacenaban y dictaban como tenia que ir el flujo de información dentro del hardware para que se satisfaciese la necesidad que había. Esta forma de programar se basaba en 0's y 1's que activaban o no ciertas funcionalidades y era una manera (aunque mejor que el cableado físico) bastante lenta y complicada de realizar programas. Años despues nació el lenguaje ensamblador que no es más que darle un nombre más o menos fácil de recordar a esos conjuntos de 0's y 1's, conformando las primeras operaciones (suma, resta, movimiento, etc..). Años despues aparecieron los primeros lenguajes de programación (C/C++ por poner un ejemplo) que se basaban en simplificar el proceso de introducir especificaciones dentro de las computadoras. Resumiendo la pregunta inicial, si, se podría introducir especificaciones sin necesidad de código, pero el código (y la programación tal y como la conocemos) es el resultado de la evolución de como poder modificar el hardware para que haga lo que nosotros queremos de la forma más fácil posible para el programador.

- Entiendo... lenguajes de programación... hardware... flujos de datos... entonces eso de programar es más complicado de lo que yo creía ¿no?
Si y no. Empezar a picar código es fácil. Todo depende del lenguaje que se use, de la capacidad de cada uno y del tiempo y ganas que se le puedan dedicar, pero por lo general, es fácil aprender a picar código. Programar es otro cantar. Hacen falta años para saber programar (igual que es fácil hacer sonar un violín pero es difícil saber tocarlo). Programar no es (solo) picar código; programar es pensar, abstraerse y entender realmente lo que se hace con cada linea de código que se pica y para llegar a ese nivel hacen falta años de experiencia. Aunque si lo piensas bien, para todas las cosas de la vida hacen falta años de experiencia, así que si estás decidido a programar, tomatelo con calma pero sin pausa. Verás que poco a poco irás agarrando soltura y el proceso de aprendizaje se hará bastante divertido.

- Ok. Pese a todo quiero aprender a programar. ¿Cuanto tiempo tardaré a saber todo de programación?Respuesta corta: toda una vida.
Respuesta larga: La programación es una ciencia que no para de evolucionar y en la que siempre hay cosas para aprender. Así que es complicado que sepas de todo por que todo va cambiando. Se dice que para dominar un lenguaje al 100% hacen falta 10 años. En mi experiencia personal, una persona que trabaje 8 horas al dia , en un año o dos acostumbra a tener un nivel más que aceptable. Depende de cada persona.

- ¿Que tipos de lenguajes de programación hay?
Hay tanto lenguajes como necesidades pueda haber, pero por lo general se pueden describir tres grandes grupos:
- Ensamblador: Depende de cada procesador y arquitectura. Es con el que se obtiene mayor rendimiento de proceso. Es difícil desarrollar grandes proyectos en el.
- Lenguajes compilados: Son aquellos lenguajes en que el código se transforma a ensamblador para que el procesador lo entienda. Tienen un rendimiento bueno y es bastante más fácil desarrollar que no con ensamblador.
- Lenguajes interpretados: Son aquellos lenguajes en que el código no se ejecuta directamente en el procesador sino que necesitan de otro programa (intérprete o máquina virtual) que se encarga de procesar la información del código y realizar su funcionalidad.

Si despues de leer todo esto sigues queriendo programar, no te pierdas los demás capítulos de este tutorial.

Cualquier duda que tengas hazmela llegar y le intentaremos dar solución.

Nos vemos

LordPakusBlog

martes, 15 de octubre de 2013

Ejemplos de C/C++ sencillos: Matriz de randoms


LordPakusBlog

sábado, 28 de septiembre de 2013

Curso JavaScript desde 0. Capitulo 1



Hola a todos,

Si habeís seguido el curso de html habreís visto que hay cosas que este lenguaje no permite hacer. Una de ellas es poder repetir código en distintos sitios. Si os preguntais que necesidad hay en ello os pondré un ejemplo muy sencillo: MENÚS.

Debido al cambio de estilo que le estoy haciendo al blog me he encontrado que tengo diversos menús que se repiten en diferentes páginas. Cualquier cambio que haga tengo que copypastearlo en todas las páginas. Si son 3 páginas, ok, si son 20 o 30 ya empezamos a tener un problema (ni os cuento si son 200 o 300).

La forma más fácil que he encontrado es mediante javascript. JavaScript es un lenguaje de programación web que no tiene nada que ver con el lenguaje Java y que sirve para complementar HTML en aquellos puntos en que este flaquea.

Ya os iré explicando mejor como funciona.. por ahora os pongo un ejemplo de como repetir un menu en html para que veais como va... espero que os guste:

En el head hemos de poner el código javascript:
<script type='text/javascript'>
var menuEjemplos=&quot;<li><a href='http://lordpakus.blogspot.com.es/p/ejemplos-de-cc-sencillos.html'> Ejemplos sencillos en C/C++ </a>&quot;;
menuEjemplos+=&quot;<ul>&quot;;
menuEjemplos+=&quot;<li><a href='http://lordpakus.blogspot.com.es/2013/09/ejemplos-de-cc-sencillos-calcular.html'> Perímetro y área de un circulo </a></li> &quot;;
menuEjemplos+=&quot;<li><a href='http://lordpakus.blogspot.com/2013/09/ejemplos-de-cc-sencillos-histograma-de.html'> Histograma de un arreglo de carácteres sin if ni case </a></li>&quot;;
menuEjemplos+=&quot;<li><a href='http://lordpakus.blogspot.com/2013/09/ejemplos-de-cc-sencillos-resolucion-de.html'> Resolución de ecuaciones de segundo grado </a></li>&quot;;
menuEjemplos+=&quot;<li><a href='http://lordpakus.blogspot.com/2013/09/ejemplos-de-cc-sencillos-operaciones.html'> Operaciones matemáticas básicas </a></li>&quot;;
menuEjemplos+=&quot;<li><a href='http://lordpakus.blogspot.com/2013/09/ejemplos-de-cc-sencillos-factura.html'> Facturación sencilla </a></li>&quot;;
menuEjemplos+=&quot;<li><a href='http://lordpakus.blogspot.com/2013/09/ejemplos-de-cc-sencillos-interseccion.html'> Intersección recta- circunferencia </a></li>&quot;;
menuEjemplos+=&quot;<li><a href='http://lordpakus.blogspot.com/2013/09/ejemplos-de-cc-sencillos-transcribir.html'> Transcribir números a letras </a></li>&quot;;
menuEjemplos+=&quot;<li><a href='http://lordpakus.blogspot.com/2013/09/ejemplos-de-cc-sencillos-calculo-de.html'> Cálculo de interés bancario </a></li>&quot;;
menuEjemplos+=&quot;<li><a href='http://lordpakus.blogspot.com/2013/09/ejemplos-de-cc-sencillos-ascii-art.html'> ASCII Art </a></li>&quot;;
menuEjemplos+=&quot;</ul>&quot;;
menuEjemplos+=&quot;</li>&quot;;

function ExpandEjemplos(n)
{
if(n) {n.innerHTML=menuEjemplos;}
else {document.write(menuEjemplos);document.close();}
}

</script>

En el body hemos de poner la llamada a la función que nos interesa:
<script type='text/javascript'>
ExpandEjemplos();
</script>

El ejemplo de como funciona lo teneis en el menú de este blog. Todos los menus de la serie de ejemplos C/C++ tienen links a los otros capítulos de la serie y el menú general también, pero código html solo hay uno. Esto hace que si se añade un capítulo nuevo solo tengo que modificar una linea y si quiero cambiar el orden o la estructura solo lo tengo que hacer en un sitio.

Espero que os haya servido para abrir boca de la potencia que tiene javascript... poco a poco os iré explicando mejor como funciona.

Nos vemos


LordPakusBlog

miércoles, 18 de septiembre de 2013

Ejemplos de C/C++ sencillos: ASCII Art


Hola a todos,

ASCII Art es el hecho de hacer dibujos y formas mediante caracteres puestos en la consola.
El ejercicio de hoy es: pintar por consola un circulo(relleno), una X, un marco  y un rectangulo (relleno)

Es fácil y os servirá para ir practicando los bucles y los condicionales.

Os dejo el código y el como os debería quedar.

#include <iostream>
#include <stdlib.h>
#include <math.h>

void linea_ASCII(char car,int ancho)
{
int i;

for(i = 0 ; i < ancho ; ++i)
{
std::cout << car;
}

std::cout << std::endl;
}

void marco_ASCII(char car,int ancho, int alto)
{
int i,j;

for(i = 0 ; i < alto; ++i )
{
for(j = 0 ; j < ancho  ; ++j )
{
if( (i == 0) || (i==(alto-1)) )
{
std::cout << car;
}
else
{
if( (j == 0) || (j == (ancho-1)) )
std::cout << car;
else
std::cout << " ";
}
}
std::cout << std::endl;
}
}

void rectangulo_ASCII(char car,int ancho, int alto)
{
int i,j;

for(i = 0 ; i < alto; ++i )
{
for(j = 0 ; j < ancho  ; ++j )
std::cout << car;

std::cout << std::endl;
}
}

void X_ASCII(char car,int ancho)
{
int i,j;

for(i = 0 ; i < ancho; ++i )
{
for(j = 0 ; j < ancho  ; ++j )
{
if( ( i == j) || (ancho-1-i == j) )
{
std::cout << car;
}
else
{
std::cout << " ";
}
}
std::cout << std::endl;
}
}

void circulo_ASCII(char car,int ancho)
{
int i,j;
int centro = ancho/2;
for(i = 0 ; i < ancho+1; ++i )
{
for(j = 0 ; j < ancho+1  ; ++j )
{
if( sqrt(( i - centro)*( i - centro) +  ( j - centro)*( j - centro)) <= centro )
{
std::cout << car;
}
else
{
std::cout << " ";
}
}
std::cout << std::endl;
}
}

int main(int argc, char** argv)
{
circulo_ASCII('O',10);
linea_ASCII('-',40);
std::cout << std::endl;

X_ASCII('x',10);
linea_ASCII('-',40);
std::cout << std::endl;

marco_ASCII('e',10,4);
linea_ASCII('-',40);

rectangulo_ASCII('y',10,4);
linea_ASCII('-',40);
system("pause");
return 0;
}

Aquí tenéis la imagen por si queréis que os sirva de guía
:
Nos vemos,

LordPakusBlog

domingo, 15 de septiembre de 2013

Ejemplos de C/C++ sencillos: Cálculo de interés bancario

Hola a todos,

El ejercicio de hoy se basa en calcular intereses bancarios. Imaginemos que pedimos un préstamo al banco a un cierto interés y que queremos pagar una cierta cantidad como mensualidad. El programa nos tiene que devolver cuanto dinero le debemos al banco (mes a mes) y al finalizar decirnos cuantos meses hemos estado pagando y que cantidad de intereses totales hemos pagado.

#include <iostream>
#include <stdlib.h>

int main(int argc, char** argv)
{
double total,interes,cuota;
double interesparcial,interesacumulado = 0;
int meses = 0;

std::cout << "Introduca cantidad total pedida al banco: ";
std::cin >> total;

std::cout << "Introduzca interes anual al que se le concede el crédito (en %): ";
std::cin >> interes;

std::cout << "Introduzca cuota mensual que puede pagar: ";
std::cin >> cuota;

while( total > 0.0f )
{
interesparcial = (total*(interes/12)/100.0);
total += interesparcial;
interesacumulado += interesparcial;

if(total > cuota)
total -= cuota;
else
total = 0;

if(interesparcial > cuota)
{
std::cout << "Con esa cuota jamás podrá cancelar la deuda" << std::endl;
break;
}

std::cout << "Mes " << meses << "-> Le debe al banco : " << total << std::endl;
meses++;
}

if ( total > 0.0f )
{
std::cout << "Vuelva ha hacer los cálculos renegociando el préstamo." << std::endl;
system("pause");
return 0;
}

std::cout << "Ha pagado durante " << meses << " meses un total de " << interesacumulado << " en forma de intereses." << std::endl;

system("pause");
return 0;
}

LordPakusBlog

sábado, 14 de septiembre de 2013

Ejemplos de C/C++ sencillos: Transcribir números a letras.


Hola a todos,

Un buen ejercicio para ir practicando nuestras aptitudes de programación es hacer un programa que nos "lea" un número que le pasemos. Es decir, si introducimos el número 99999,99 nos diga: "noventa y nueve mil novecientos noventa y nueve con noventa y nueve céntimos." (Este sería el número más grande a transcribir, tampoco hace falta pasarse :D)

El código os lo dejo a continuación, ya veréis que no es complicado. Si hay algo que no entendáis , decidlo.


#include <iostream>
#include <stdlib.h>
 
 
int main(int argc, char** argv) 
{
//Es un double y no un float para que no la lie con la precisión de los decimales con segun que valores
double valor;
int miles,cientos,unidades,decimales;
char numeros[100][20] = 
{
{""},{"un"},{"dos"},{"tres"},{"cuatro"},{"cinco"},{"seis"},{"siete"},{"ocho"},{"nueve"},
{"diez"},{"once"},{"doce"},{"trece"},{"catorce"},{"quince"},{"dieciseis"},{"dieceisiete"},{"dieciocho"},{"diecinueve"},
{"veinte"},{"veintun"},{"veintidos"},{"veintitres"},{"veinticuatro"},{"veinticinco"},{"veintiseis"},{"veintisiete"},{"veintiocho"},{"veintinueve"},
{"treinta"},{"treinta y uno"},{"treinta y dos"},{"treinta y tres"},{"treinta y cuatro"},{"treinta y cinco"},{"treinta y seis"},{"treinta y siete"},{"treinta y ocho"},{"treinta y nueve"},
{"cuarenta"},{"cuarenta y uno"},{"cuarenta y dos"},{"cuarenta y tres"},{"cuarenta y cuatro"},{"cuarenta y cinco"},{"cuarenta y seis"},{"cuarenta y siete"},{"cuarenta y ocho"},{"cuarenta y nueve"},
{"cincuenta"},{"cincuenta y uno"},{"cincuenta y dos"},{"cincuenta y tres"},{"cincuenta y cuatro"},{"cincuenta y cinco"},{"cincuenta y seis"},{"cincuenta y siete"},{"cincuenta y ocho"},{"cincuenta y nueve"},
{"sesenta"},{"sesenta y uno"},{"sesenta y dos"},{"sesenta y tres"},{"sesenta y cuatro"},{"sesenta y cinco"},{"sesenta y seis"},{"sesenta y siete"},{"sesenta y ocho"},{"sesenta y nueve"},
{"setenta"},{"setenta y uno"},{"setenta y dos"},{"setenta y tres"},{"setenta y cuatro"},{"setenta y cinco"},{"setenta y seis"},{"setenta y siete"},{"setenta y ocho"},{"setenta y nueve"},
{"ochenta"},{"ochenta y uno"},{"ochenta y dos"},{"ochenta y tres"},{"ochenta y cuatro"},{"ochenta y cinco"},{"ochenta y seis"},{"ochenta y siete"},{"ochenta y ocho"},{"ochenta y nueve"},
{"noventa"},{"noventa y uno"},{"noventa y dos"},{"noventa y tres"},{"noventa y cuatro"},{"noventa y cinco"},{"noventa y seis"},{"noventa y siete"},{"noventa y ocho"},{"noventa y nueve"},
};
char centenas[10][20] = 
{
{""},{"ciento"},{"doscientos"},{"trescientos"},{"cuatrocientos"},{"quinientos"},{"seiscientos"},{"sietecientos"},{"ochocientos"},{"novecientos"},
};
std::cout << "Introduzca numero a transcribir: ";
std::cin >> valor;
miles = ((int)valor)/1000;
cientos = (((int)valor)%1000)/100;
unidades = ((int)valor)%100;
decimales = ((int) (valor*100.0))%100 ;
if (miles)
std::cout << numeros[miles] << " mil ";
if (cientos)
std::cout << centenas[cientos] << " ";
if (unidades) 
std::cout << numeros[unidades];
if (decimales)
{
if(miles || cientos || unidades)
{
std::cout << " con ";
}
std::cout << numeros[decimales] << " centimos.";
}
std::cout << std::endl;
system("pause");
return 0;
}




LordPakusBlog

viernes, 13 de septiembre de 2013

Ejemplos de C/C++ sencillos: Intersección recta- circunferencia



Hola a todos,

El problema que se plantea hoy es hacer un programa que nos diga si una circunferencia y una recta intersectan o no.


Para mi la forma más fácil de decir si un recta interesecta con una circunferencia o no es calcular la distancia mínima entre el centro de la circunferencia y la recta. Si esta distancia mínima es mayor que el radio de la circunferencia seguro que no interesectarán nunca.

El código es el que sigue. Hay unos pocos comentarios para que podáis seguir mejor el código.

#include <iostream>
#include <math.h>
#include <stdlib.h>

int main(int argc, char** argv) 
{
float xcentro,ycentro,radio;
float pendiente,b;
float perpendicularpendiente,perpendicularB;
float xinterseccion, yinterseccion;
float distx,disty,dist;

std::cout << "PROGRAMA DE CALCULO DE INTERSECCIONES ENTRE CIRCUNFERENCIA-RECTA" << std::endl;

std::cout << "DATOS CIRCUNFERENCIA" << std::endl;

std::cout << "Introduzca el centro de la circunferencia:" << std::endl; 

std::cout << "x: ";
std::cin >> xcentro;
std::cout << std::endl;

std::cout << "y: ";
std::cin >> ycentro;
std::cout << std::endl;

std::cout << "Introduzca el radio de la circunferencia: " ;
std::cin >> radio;
std::cout << std::endl;

std::cout << std::endl << "DATOS RECTA" << std::endl;

std::cout << "Introduzca el pendiente de la recta (m) " ;
std::cin >> pendiente;

std::cout << "Introduzca punto de intersección con el eje de las Y (b) " ;
std::cin >> b;

std::cout << std::endl << "CALCULANDO....ESPERE UN MOMENTO" << std::endl;

perpendicularpendiente = -(1/pendiente);

//Calculamos el termino independiente de una recta perpendicular a la dada.
perpendicularB = ycentro - perpendicularpendiente*xcentro;

//Calculamos q punto de la recta es el más cercano al centro de la circunferencia
xinterseccion = (perpendicularB-b)/(pendiente-perpendicularpendiente);
yinterseccion = xinterseccion*pendiente+b;

//calculamos la distancia minima entre recta y circunferencia
distx = xinterseccion - xcentro;
disty = yinterseccion - ycentro;

dist = sqrt(distx*distx + disty*disty);

if (dist <= radio)
{
std::cout << "La recta interesecta la circunferencia." << std::endl;
}
else
{
std::cout << "La recta NO intersecta la circunferencia." << std::endl;
}

system("pause");

return 0;
}




LordPakusBlog

jueves, 12 de septiembre de 2013

Ejemplos de C/C++ sencillos: Factura sencilla

Hola a todos,

Este ejemplo es para que os sirva de base si estaís aprendiendo C++ y os piden que hagáis un programa de facturación.

Se basa en que se pueden comprar 3 productos de precios diferentes en tal cantidad como queramos. Si en total compramos más de 10 productos aplicaremos un 5% de descuento.
Si en total compramos más de 20 productos aplicaremos un 10% de descuento.
Aparte de eso, se ha de aplicar el IVA.

Os dejo el código. Es más sencillo de lo que os podríais imaginar en un principio.
Si tenéis cualquier duda hacedmela llegar.

#include <iostream>
#include <stdlib.h>

#define COSTE1 200
#define COSTE2 150
#define COSTE3 80

int main(int argc, char** argv) 
{
bool salir = false;
char tecla;
int totalproductos = 0, producto1 = 0, producto2 = 0, producto3 = 0;
int dinero = 0;
int descuento = 0;

while(!salir)
{
std::cout << "Introduzca codigo de producto (1,2,3) o cualquier otra tecla para finalizar la compra: ";
std::cin >> tecla;

switch (tecla)
{
case '1':
producto1++;
break;

case '2':
producto2++;
break;

case '3':
producto3++;
break;

default:
salir = true;
break;
}
}

dinero = producto1*COSTE1 +  producto2*COSTE2 +  producto3*COSTE3;
totalproductos = producto1 + producto2 + producto3;

std::cout << "FACTURA:";
std::cout << "    " << producto1 << " unidades a " << COSTE1 << std::endl;
std::cout << "    " << producto2 << " unidades a " << COSTE2 << std::endl;
std::cout << "    " << producto3 << " unidades a " << COSTE3 << std::endl;
std::cout << " Unidades totales compradas: " << totalproductos << std::endl;

std::cout << "SUBTOTAL ANTES DE DESCUENTOS: " << dinero << std::endl;
if (totalproductos > 20)
{
descuento = dinero/10;
std::cout << "Descuento aplicable del 10% = -" << descuento << std::endl;
}
else if (totalproductos > 10)
{
descuento = dinero/20;
std::cout << "Descuento aplicable del 5% = -" << descuento << std::endl;
}
else
{
descuento = 0;
std::cout << "Sin descuentos aplicables = -0" << std::endl;
}

dinero -= descuento;
std::cout << "SUBTOTAL DESPUES DE DESCUENTOS: " << dinero << std::endl;

dinero *= 1.21;
std::cout << "TOTAL A PAGAR (IVA INCLUIDO): " << dinero << std::endl;

system("pause");
return 0;
}

Nos vemos


LordPakusBlog

Ejemplos de C/C++ sencillos: Operaciones matemáticas básicas

Hola a todos,

Este ejemplo es muy muy MUY sencillo, así que si hace más de una semana que sabes programar en C++, puedes dejar de leer aqui :D

Este ejemplo está pensado para aquella persona que se está iniciando en este lenguaje y aún no tiene claro como funcionan las operaciones matemáticas.

Aquí os dejo el código, ya vereís que pocas explicaciones hacen falta para entenderlo:
#include <iostream>
#include <stdlib.h>

int main(int argc, char** argv) 
{
float a,b;

std::cout << "Introduzca primer numero: " ;
std::cin >> a;

std::cout << "Introduzca segundo numero: ";
std::cin >> b;

std::cout << a << " mas " << b << " = " << a+b << std::endl;
std::cout << a << " menos " << b << " = " << a-b << std::endl;
std::cout << a << " multiplicado por " << b << " = " << a*b << std::endl;

if(!b)
std::cout << a << " dividido por " << b << ". No se puede realizar, el divisor no puede valer 0."  << std::endl;
else
std::cout << a << " dividido por " << b << " = " << a/b << std::endl;

system("pause");
return 0;
}

Espero que os sirva.


LordPakusBlog

Ejemplos de C/C++ sencillos: Resolución de ecuaciones de segundo grado

Hola a todos,

Hoy toca un ejercicio muy simple pero que se pide en muchas universidades en los primeros dias de programación. El enunciado podría ser algo de este estilo: "Haga usted un programa que calcule las soluciones de una ecuación de segundo grado teniendo en cuenta todas las casuísitcas de la solución."

La teoria de las ecuaciones de segundo grado o cuadráticas (por si alguien ya no se acuerda) es la siguiente.



Aquí os dejo el código. Es bastante sencillo y no creo que le hagan falta ni comentarios. No obstante si algo no os cuadra decidmelo e intentaré explicarlo mejor.

#include <iostream>
#include <math.h>
#include <stdlib.h>

int main(int argc, char** argv) 
{
float a,b,c;
float temp;

std::cout << "Introduzca coeficiente de X^2 (a): ";
std::cin >> a;

std::cout << "Introduzca coeficiente de X(b): ";
std::cin >> b;

std::cout << "Introduzca termino independiente (c): ";
std::cin >> c;

std::cout << "La solucion para la ecuacion de segundo grado: " << a << "x^2 + " << b << "x + " << c << std::endl;


if( (b*b) < (4*a*c) )
{
std::cout << "No existe, raiz negativa (en el dominio de los numeros complejos si que tendria solucion)" << std::endl;
}
else
{
temp = sqrt( (b*b) - (4*a*c));

if(!temp)
{
std::cout << "Tiene solo una solucion de valor x=" << ( -b / (2*a) ) << std::endl;
}
else
{
std::cout << "Tiene dos soluciones, x=" << ((-b + temp)/(2*a)) << " y x=" << ((-b - temp)/(2*a)) << std::endl;
}
}

system("pause");
return 0;
}


Nos vemos



LordPakusBlog

miércoles, 11 de septiembre de 2013

Ejemplos de C/C++ sencillos: Histograma de un arreglo de carácteres sin if ni case

Hola a todos,
Me han planteado un ejercicio que aunque no sea muy complicado sirve para entender que en programación todo se puede hacer de múltiples maneras y que el único límite es la imaginación.
El enunciado del problema dice algo de este estilo: "Haga un histograma que guarde la frecuencia de las letras de abecedario incluyendo mayúsculas y minúsculas en un arreglo y que imprima la frecuencia de la letra, todo ello sin usar if ni case."
Un histograma no es más que un recuento de elementos de cada tipo que tengamos, que normalmente se representa en gráficas como la siguiente:












Sin if.... sin switch/case... imposible? no.. complicado? tampoco, solo es saber ver el problema desde otro ángulo.  Aquí os dejo el código, creo que vale más la pena el código que toda explicación que pudiese hacer.

#include <iostream> 
#include <string.h> 
#include <stdlib.h>

int main(int argc, char** argv) 
{
char letras[256] = {"Hoy puede ser un gran dia, tomatelo así."};
char histograma[256] = {0};
int i,j;
for( i = 0 ; i < strlen(letras) ; ++i )
{
histograma[letras[i]]++;
}
for( i = 0 ; i < 256 ; ++i )
{
std::cout << (char) i << ": ";
for(j = 0 ; j < histograma[i]; ++j)
{
std::cout << "*";
}
std::cout << std::endl;
}
system("pause");
return 0;
}

Si copiáis este código y lo compiláis veréis que da el resultado que se pide, sin usar ni una sola operación de comparación.

Espero que os haya servido y gustado

Nos vemos



LordPakusBlog

Ejemplos de C/C++ sencillos: Calcular perímetro y área de un círculo


Hola a todos, Hoy toca un ejemplo muy muy sencillito para todos aquellos que están empezando a programar. Si ya sabes programar, deja de leer aquí que te aburrirás :D. Si se os ocurren más ejercicios y ejemplos sencillos decidmelo y los iré poniendo.

Imaginemos que nos piden algo como esto (algo muy normal en los primeros cursos de programación): "Crear un programa que permita calcular el perímetro y area de un circulo cuyo radio sea ingresado por teclado."

Lo primero que tenemos que tener claro es que el perimetro será = 2* PI * r y que el area será = PI*r*r
Siendo PI = 3.14159 y r el radio de la circunferencia.














El programa que realiza lo pedido es tan sencillo como el siguiente:

#include <iostream>
#include <stdlib.h>  //Este include es para  la llamada a system("pause")

#define PI 3.141592
int main(int argc, char** argv) 
{
float radio;
float perimetro;
float area;

bool valido = false;

std::cout << "*******************************************************************"<< std::endl;
std::cout << "** PROGRAMA DE CALCULO DE PERIMETRO Y AREA DE UNA CIRCUNFERENCIA **"<< std::endl;
std::cout << "*******************************************************************"<< std::endl;
std::cout << "Ingrese el radio de la circunferencia" << std::endl;

while(!valido)
{
std::cin >> radio;
if( (radio > 0.0f) && (radio < 10000.0f))
valido = true;
}

perimetro = 2*PI*radio;
area  = PI * radio * radio;

std::cout << "Perimetro : " << perimetro << std::endl;
std::cout << "Area : "    << area << std::endl;

std::cout << "Calculo finalizado" << std::endl;

system("Pause");

return 0;
}

Si copiáis todo esto en vuestro compilador veréis como compila y podréis ejecutarlo para probar como funciona.

Espero que os haya servido

LordPakusBlog

viernes, 6 de septiembre de 2013

Gurús de la programación: Tim Sweeney


Hola a todos.


Tim Sweeney es un estadounidense nacido en 1970 ingeniero mecánico por estudios y programador de videojuegos por pasión. Con tan solo 21 años sacó su primer juego ZZT, con bastante éxito y fundó su propia compañia de videojuegos Epic Mega Games (hoy día conocida como Epic).

Es un gurú de la programación por que a colaborado en la creación de diversos juegos y engines de shooters de bastante éxito como por ejemplo la saga Unreal y Gears of War. Dentro de estos motores Sweeney ha incorporado efectos y técnicas que no se habían hecho hasta el momento. La calidad de estos juegos y engines es tal que han sido licenciados para decenas de juegos como Splinter Cell, Rainbow Six 3, Lineage II, etc..

Actualmente dirige su propia compañía y se dedica a dar conferencias, presentaciones y entrevistas.

Si os gusta la programación (si estáis leyendo este blog, espero que os guste :D ) tal vez os guste un par de libros muy buenos que explican como realizar videojuegos de alto nivel con el motor del unreal:


Aquí tenéis una lista de juegos de Epic que se pueden obtener online:




LordPakusBlog
Related Posts Plugin for WordPress, Blogger...