martes, 10 de abril de 2018

PROGRAMACIÓN


1.¿Qué es un programa?

En informática, un programa es un conjunto de instrucciones u órdenes que indican a la máquina las operaciones que ésta debe realizar con unos datos determinados. En general, todo programa indica a la computadora cómo obtener unos datos de salida, a partir de unos datos de entrada. En la siguiente figura se muestra, gráficamente, el funcionamiento básico de un programa.





2. ¿Qué es una APP?

Una App es una aplicación de software que se instala en dispositivos móviles o tablets para ayudar al usuario en una labor concreta, ya sea de carácter profesional o de ocio y entretenimiento, a diferencia de una webapp que no es instalable.

El objetivo de una app es facilitarnos la consecución de una tarea determinada o asistirnos en operaciones y gestiones del día a día.

Existen infinidad de tipos de aplicaciones: Apps de noticias (elmundo.es),  juegos (CSR Racing), herramientas de comunicación como Whatsapp, redes sociales como Google+, apps para salir de fiesta (Liveclubs),  promociones comerciales (McDonnalds), aplicaciones para vender tus cosas usadas desde el móvil (YuMe)…etc, que nos pueden ayudar en el trabajo o intentar hacernos el día más ameno.

3. ¿Qué es un lengaje de programación?

Un lenguaje de programación es un sistema con una estructura de comunicación similar al humano, este permite que los aparatos se entiendan entre sí y que a su vez interprete y ejecute las instrucciones de los usuarios.
Los lenguajes de programación de una computadora en particular se conoce como código de máquinas o lenguaje de máquinas.

Estos lenguajes codificados en una computadora específica no podrán ser ejecutados en otra computadora diferente.

Para que estos programas funcionen para diferentes computadoras hay que realizar una versión para cada una de ellas, lo que implica el aumento del costo de desarrollo.

Por otra parte, los lenguajes de programación en código de máquina son verdaderamente difíciles de entender para una persona, ya que están compuestos de códigos numéricos sin sentido nemotécnico.

Los lenguajes de programación facilitan la tarea de programación, ya que disponen de formas adecuadas que permiten ser leidas y escritas por personas, a su vez resultan independientes del modelo de computador a utilizar.

Los lenguajes de programación representan en forma simbólica y en manera de un texto los códigos que podrán ser leidos por una persona.

Los lenguajes de programación son independientes de las computadoras a utilizar.

Existen estrategias que permiten ejecutar en una computadora un programa realizado en un lenguaje de programación simbólico. Los procesadores del lenguaje son los programas que permiten el tratamiento de la información en forma de texto, representada en los lenguajes de programación simbólicos.

3.1 ¿Cuántos tipos existen?

Lenguaje de Programación de bajo nivel

Este tipo de lenguaje de programación es utilizado para controlar directamente el hardware del dispositivo y dependen únicamente de la máquina, es decir, no pueden ser usados en aparatos diferentes de los que fueron creados originalmente. También conocido como “código máquina”, solo pueden ordenar las operaciones primarias para el funcionamiento del dispositivo, tienden a ser complejos por lo que lo suelen utilizar los fabricantes de hardwares. Con este lenguaje de programación de bajo nivel se puede reproducir audios y videos, mostrar imágenes, realizar operaciones matemáticas, seguir el movimiento del puntero, etc.

Lenguajes de programación de alto nivel

Este tipo de lenguaje de programación es más parecido al humano, no dependen del dispositivo  y sirven para crear programas informáticos que solucionan distintos tipos de requerimientos y necesidades.

Se tratan de lenguajes independientes de la arquitectura del ordenador. Por lo que, en principio, un programa escrito en un lenguaje de alto nivel, lo puedes migrar de una máquina a otra sin ningún tipo de problema.

Estos lenguajes permiten al programador olvidarse por completo del funcionamiento interno de la maquina/s para la que están diseñando el programa. Tan solo necesitan un traductor que entiendan el código fuente como las características de la maquina.

Suelen usar tipos de datos para la programación y hay lenguajes de propósito general (cualquier tipo de aplicación) y de propósito especifico (como FORTRAN para trabajos científicos).

Lenguajes de Medio nivel

Se trata de un termino no aceptado por todos, pero q seguramente habrás oído. Estos lenguajes se encuentran en un punto medio entre los dos anteriores. Dentro de estos lenguajes podría situarse C ya que puede acceder a los registros del sistema, trabajar con direcciones de memoria, todas ellas características de lenguajes de bajo nivel y a la vez realizar operaciones de alto nivel.

Generaciones

La evolución de los lenguajes de programación se puede dividir en 5 etapas o generaciones.

    Primera generación: lenguaje maquina.
    Segunda generación: se crearon los primeros lenguajes ensambladores.
    Tercera generación: se crean los primeros lenguajes de alto nivel. Ej. C, Pascal, Cobol…
    Cuarta generación. Son los lenguajes capaces de generar código por si solos, son los llamados RAD, con lo cuales se pueden realizar aplicaciones sin ser un experto en el lenguaje. Aquí también se encuentran los lenguajes orientados a objetos, haciendo posible la reutilización d partes del código para otros programas. Ej. Visual, Natural Adabes…
    Quinta generación: aquí se encuentran los lenguajes orientados a la inteligencia artificial. Estos lenguajes todavía están poco desarrollados. Ej. LISP

3.2 ¿Qué es DevC++?

Dev-C++ es un compilador y entorno de desarrollo para C/C++

Consiste en un editor de múltiples ventanas integrado con un compilador que nos permitirá una compilación, un enlace y una ejecución de aplicaciones rápida y de fácil uso.

C/C++ son lenguajes de programacion, donde c++ fue creado para extender el legunaje de programcion c y asi dar la posibilidad de usar manipulacion de objetos.

A diferencia de DFD que habiamos visto antes de comenzar con Dev-C++, pues no usa simbolos ( ver entrada sobre los simbolos en DFD ) así como en los diagramas de flujo que aprendimos, si no que usa codigos para reemplazar aquellos simbolos, por eso es importante saber hacer un diagrama de flujo / algoritmo, para poder realizar bien un programa en c, c++, o cualquier programa que use lenguaje de programaicon con codigo, porque la idea sigue siendo la mismo solo cambian los simbolos por palabras restringidas en dicho lenguaje.

4.¿Qué es una instrucción?

Las acciones que realiza un programa se expresan en instrucciones. Entre las acciones comunes se incluyen declarar variables, asignar valores, llamar a métodos, recorrer colecciones en bucle y crear una bifurcación a uno u otro bloque de código, en función de una condición determinada. El orden en el que se ejecutan las instrucciones en un programa se denomina flujo de control o flujo de ejecución. El flujo de control puede variar cada vez que se ejecuta un programa, en función de cómo reacciona el programa a la entrada que recibe en tiempo de ejecución.
Una instrucción puede constar de una sola línea de código que finaliza en un punto y coma o de una serie de instrucciones de una sola línea en un bloque. Un bloque de instrucciones se incluye entre llaves {} y puede contener bloques anidados. En el código siguiente se muestran dos ejemplos de instrucciones de una sola línea y un bloque de instrucciones de varias líneas:


 


4.1 ¿Cuántos tipos de instrucciones existen en DevC++?

Estos son los tipos de instrucciones:

Instrucciones declarativas

Sirven para declarar librerias, variables, constantes, arreglos , punteros, estructuras…

Por ejemplo:

1.) Para librerias:
Las librerias las declaramos porque vamos a usar recursos que contienen ellas.
#include <iostream.h> ——> cin , cout..
#include <conio.h> ——> funcion getch()..
#include <string.h> ——> para manipular cadenas

2.) Para variables:
las variables las declaramos con el fin de tener un espacio para almacenar algun dato que va a cambiar con el tiempo.
char nombre;                       ——> Declarando variable tipo caracter
int a,b,c;                                  ——> Declarando variable tipo entero

3.) Para constantes:
Las constantes las declaramos con el fin de tener un espacio para almacenar algun dato que no va a cambiar.
Se las puede declarar de dos formas:
Tomemos como ejemplo la formula para hallar el area de un triangulo:
https://eperdomo89.files.wordpress.com/2010/02/img1.jpg
4.) Para arreglos:
Los arreglos son un conjunto de variables del mismo tipo y nombre, pero indexadas por una posicion diferente.

float vector [12];         ——> Declarando un arreglo tipo flotante ( decimal )
ése “vector” que se ha declarado arriba, al ser un arreglo quiere decir que hay 12 variables con el mismo nombre
y son del mismo tipo, pero diferenciadas unicamente en su posicion, asi:

vector[0],vector[1],vector[2],vector[3],vector[4],vector[5],vector[6], ………….. ,vector[10],vector[11].

Instrucciones de asignación

Sirven para dar valores a las variables, y llevan éste formato:
nombre_variable = expresión ;

Por ejemplo:
a = 15 ;
x = a + 5 ;
z = x / 2 ;

Instrucciones selectivas

Son mediante las cuales podemos ejecutar diferentes acciones, como resultado de una expresion que estemos evaluando en ese momento y pueden ser:

– Las selectivas simples: Las que como resultado de una expresión que se esté evaluando, solo podemos ejecutar una opcion por verdadero.

– Las selectivas dobles: Nos permite seleccionar entre dos diferentes acciones, una por verdadero y otra por falso.

– Las selectivas multiples: Podemos ejecutar diferentes acciones como resultado de una expresión que estemos evaluando.

Instrucciones repetitivas

Sirven para repetir una condicion N veces, siempre y cuando la condicion sea verdadera.

Instrucciones de entrada y salida de datos

El lenguaje C++ no tiene palabras reservadas para ingresar o mostrar datos, para ello usan recursos que se encuentran en las librerias.

Por ejemplo:
En la libreria <iostream.h> tenemos para la entrada y salida de datos a cin y cout respectivamente.
Uso:
– Para la entrada de datos ( pedir )
cin >> nombre_del_usuario ;
– Para la salida de datos ( mostrar )
cout << nombre_del_usuario

Instrucciones de bifurcación

Interrumpen el flujo normal de un programa, es decir que evitan que se ejecute alguna instrucción del programa y salta a otra parte del programa.

Por ejemplo: el “ break “
Switch ( expresión que estamos evaluando )
{
case 1 : cout << ” Hola! “ ; break ;
case 2 : cout << ” amig@s “ ;


5. ¿Qué es una palabra reservada?

Las palabras reservadas son aquellas que tienen un uso determinado para el lenguaje y, por lo tanto, no pueden ser empleadas en el código como identificadores (por ejemplo, nombres para las variables).

Éstas no pueden ser utilizadas por el usuario para nombrar a las variables, funciones, procedimientos, objetos y demás elementos de programación que cree.
En lenguaje de programación PHP, las palabras reservadas no pueden ser usadas para nombres de constantes, de clases, de funciones o de métodos. Sí pueden emplearse como nombres de variables, pero puede prestarse a confusiones por lo que se desaconseja. Ejemplos de palabras reservadas son break, do, clone, for, switch, echo, etc.

Cada lenguaje de programación tiene su propio grupo de palabras reservadas, pero en general coinciden algunas de las siguientes: and, array, begin, case, const, default, do, else, end, file, for, function, goto, if, in, label, mod, not, of, or, repeat, return, then, to, type, until, void, while, etc.

6. ¿Qué es una librería?

Se emplea el término librería para referirse a una biblioteca, por la similitud con el original inglés library. Ambos términos, biblioteca y librería, son correctos según las definiciones de la RAE, aunque en términos formales, la acepción correcta es biblioteca, porque es la traducción correcta de library.

Independientemente de lo anterior comentado, una biblioteca es un Kit de herramientas software pequeño y autónomo que ofrece una funcionalidad muy específica al usuario. Normalmente se usa junto con otras librerías y herramientas para hacer una aplicación completa, ya que por lo general las bibliotecas no son ejecutables, pero sí pueden ser usadas por ejecutables que las necesiten para poder funcionar.

Las ventajas enormes de esto son:
·         No tener que volver a escribir el código (o hacer copy-paste).
·         Nos ahorraremos el tiempo de compilar cada vez ese código que ya está compilado. Además, ya sabemos que mientras hacemos un programa, probamos y corregimos, hay que compilar entre muchas y "más muchas" veces.
·         El código ya compilado estará probado y será fiable. No las primeras veces, pero sí cuando ya lo hayamos usado en 200 programas distintos y le hayamos ido corrigiendo los errores.

6.1 ¿Cuántos tipos de librería tiene DevC++?

El Estándar C++ las clasifica según su utilidad:
·         Soporte del lenguaje.
·         Diagnóstico
·         Utilidades generales
·         Cadenas alfanuméricas ("Strings")
·         Localización
·         Contenedores
·         Iteradores
·         Algoritmos
·         Cálculo numérico
·         Entrada/Salida

Para poner un poco de orden, el Estándar C++ define la denominada Librería Estándar  que debe acompañar a cada implementación del compilador que se adhiera al estándar. Es decir: la norma determina cuales son, como se llaman y como se utiliza este conjunto de algoritmos que deben acompañar (como mínimo) a cada implementación del compilador que quiera llamarse "Estándar". La última versión, ISO/IEC 14882 del año 1998, especifica que se compone de 32 ficheros de cabecera de nombres fijos y conocidos agrupados según la funcionalidad de los algoritmos. Son los siguientes:

Ficheros
Funcionalidad/funciones
<algorithm>
Parte de la STL que describe los algoritmos.
<bitset>
Parte de la STL relativa a contenedores tipo bitset. Set de valores booleanos.
<complex>
Parte de la librería numérica de la STL relativa a los complejos.
<deque>
Parte de la STL relativa a contenedores tipo deque;  un tipo de colas: "Double-ended-queue".
<exception>
Parte de la librería de diagnóstico relativa al manejo de excepciones.
<fstream>
Flujos hacia/desde ficheros.
<functional>
Parte de la STL relativa a Objetos-función.
<iomanip>
Manipuladores.
<ios>
Supreclases para manejo de flujos de E/S.
<iosfwd>
Contiene declaraciones adelantadas de todas las plantillas de flujos y sus typedefs estándar. Por ejemplo ostream.
<iostream>
Parte del a STL que contiene los algoritmos estándar de E/S.
<istream>
Algoritmos estándar de flujos de entrada.
<iterator>
Parte de la STL relacionada con iteradores, un tipo de puntero que permite utilizar los algoritmos de la Librería con las estructuras de datos representadas por los contenedores.
<limits>
Descripción de propiedades dependientes de la implementación , que afectan a los tipos fundamentales.
<list>
Parte de la STL relativa a contenedores tipo list;  listas doblemente enlazadas.
<locale>
Parte de la STL relativa a la internacionalización .
<map>
Parte de la STL relativa a contenedores tipo map.
<memory>
Utilidades relativas a la gestión de memoria, incluyendo asignadores y punteros inteligentes (auto_ptr).
<new>
Manejo de memoria dinámica.
<numeric>
Parte de la librería numérica de la STL relativa a operaciones numéricas.
<ostream>
Algoritmos estándar para los flujos de salida.
<queue>
Parte de la STL relativa a contenedores tipo queue;  colas de objetos.
<set>
Parte de la STL relativa a contenedores tipo set.
<sstream>
Flujos hacia/desde cadenas alfanuméricas.
<stack>
Parte de la STL relativa a contenedores tipo stack);  pilas de objetos.
<stdexcept>
Parte de la STL relativa a las clases de las que derivan los objetos lanzados por las excepciones ocasionadas en los algoritmos de la propia STL y otras expresiones.  Estas clases son utilizadas para reportar errores detectados durante runtime.  Los usuarios también pueden utilizar excepciones para reportar errores en sus propios programas.
<streambuf>
Parte de la STL relativa al Almacenamiento de flujos de E/S ("Stream buffers").  Define los tipos que controlan la capa de transporte.
<string>
Parte de la STL relativa a contenedores tipo string;  una generalización de las cadenas alfanuméricas para albergar cadenas de objetos.
<typeinfo>
Mecanismo de identificación de tipos en tiempo de ejecución.
<utility>
Parte de la STL que contiene elementos auxiliares como operadores y pares (pairs).
<valarray>
Parte de la librería numérica de la STL relativa a manejo de matrices numéricas.
<vector>
Parte de la STL relativa a los contenedores tipo vector; una generalización de las matrices unidimensionales C/C++ .

7. Tipos de datos en DevC++

En lenguaje C tenemos en general 4 grandes tipos de datos, estos son los basicos, enumerados, voids, y derivados.

Tipos de datos básicos (numéricos y caracteres):

A continuación esta tabla muestra los tipos de datos y el rango de valores que puede tomar, algunos varían dependiendo del tipo de maquina en el que se desarrolle, si es 16 bits, 32 bits, o 64 bits, algunos tipos de datos pueden variar su rango de valores y tamaño.
Tipo
Tamaño en memoria
Valores posibles
Descripción
char
1 byte
-128 a 127 o 0 a 255
 Guarda caracteres del codigo ASCII
int
2 or 4 bytes
-32,768 a 32,767 o -2,147,483,648 a 2,147,483,647
Guarda numeros enteros,
float
4 bytes
1.2E-38 a 3.4E+38
 Guarda numeros decimales con precisión de 6 digitos decimales
short
2 bytes
-32,768 a 32,767
 Guarda numeros enteros con menor capacidad de almacenamiento(y rango) que int
double
8 bytes
2.3E-308 a 1.7E+308
 Igual que Float pero con mayor precisión (hasta 15 digitos decimales) y mayor rango
long
4 bytes
-2,147,483,648 a 2,147,483,647
 Guarda numeros enteros con mayor capacidad de almacenamiento que int
long double
10 bytes
3.4E-4932 to 1.1E+4932
 Mucho mayor precisión en calculo decimal, incluso mayor que double (hasta 19 digitos decimales)

8. Tipos de operaciones de DevC++

Para poder realizar una operación en el lenguaje de programación C hay que seguir los siguientes pasos:

1.      Declarar el nombre de las variables que representan a los operandos.
2.      Declarar el nombre de la variable que representa el resultado.
3.      Asignarle un valor a los operandos. Esto se puede hacer directamente desde nuestro código o recogiendo los valores por teclado.
4.      Escribir la operación que queremos realizar
5.      Mostrar, si se desea, el resultado por pantalla.
Las operaciones que se pueden realizar son las siguientes:

Operaciones Aritméticas
Suma
+
Resta
-
Multiplicación
*
División
/
Incremento
++
Decremento
--
Módulo
%

Operaciones de comparación
Mayor que
> 
Menor que
< 
Menor o igual que
<=
Mayor o igual que
>=
Igual que
==
Distinto que
!=

Muchos de estos operadores no necesitan explicación ya que realizan la misma acción que en la vida real, pero existen unos pocos que sí necesitan explicación. Estos son:
·         Operador aritmético Módulo: Este operador da como resultado el resto de la división entera y se puede utilizar también con números reales.
·         Operadores incremento y decremento: la operación de incremento y decremento, suma o resta respectivamente, una unidad al valor de la variable. Existen dos formas de llevar a cabo estas operaciones. La primera es el postincremento y el postdecremento que primero calcula el valor de la variable y luego la incrementa o decrementa, y la segunda es el preincremento y predecremento que primero incrementa o decrementa en valor de la variable y después calcula la expresión.

9. Ejemplo de programa en DevC++

Que pida un número del 1 al 12 y diga el nombre del mes correspondiente.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
            int i;
            printf("Introduzca número del 1 al 12:");
    scanf("%d",&i);

    switch(i){
              case 1:
                   printf ("Enero\n");
                   break;
              case 2:
                   printf ("Febrero\n");
                   break;
              case 3:
                   printf ("Marzo\n");
                   break;
              case 4:
                   printf ("Abril\n");
                   break;
              case 5:
                   printf ("Mayo\n");
                   break;
              case 6:
                   printf ("Junio\n");
                   break;
              case 7:
                   printf ("Julio\n");
                   break;
              case 8:
                   printf ("Agosto\n");
                   break;
              case 9:
                   printf ("Septiembre\n");
                   break;
              case 10:
                   printf ("Octubre\n");
                   break;
              case 11:
                   printf ("Noviembre\n");
                   break;
              case 12:
                   printf ("Diciembre\n");
                   break;
              default:
                   printf ("Opción no válida\n");
                   break;
    }

    system("PAUSE");     
    return 0;}

Que pida 3 números y los muestre en pantalla de mayor a menor en líneas distintas. En caso de haber números iguales se pintan en la misma línea.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
            int num1,num2,num3;
           
            printf("Introduzca número 1:");
    scanf("%d",&num1);

            printf("Introduzca número 2:");
    scanf("%d",&num2);

            printf("Introduzca número 3:");
    scanf("%d",&num3);

    if (num1>num2 && num1>num3)
    {
       if (num2>num3)
       {
        printf("%d\n",num1);
        printf("%d\n",num2);
        printf("%d\n",num3);
       }
       else if (num3>num2)
       {
        printf("%d\n",num1);
        printf("%d\n",num3);
        printf("%d\n",num2);
       }
       else
       {
        printf("%d\n",num1);
        printf("%d",num3);
        printf("%d\n",num2);
       }
    }
    else if (num2>num1 && num2>num3)
    {
       if (num1>num3)
       {
        printf("%d\n",num2);
        printf("%d\n",num1);
        printf("%d\n",num3);
       }
       else if (num3>num1)
       {
        printf("%d\n",num2);
        printf("%d\n",num3);
        printf("%d\n",num1);
       }      
       else
       {
        printf("%d\n",num2);
        printf("%d",num3);
        printf("%d\n",num1);
       }
    }
    else if (num3>num1 && num3>num2)
    {
       if (num1>num2)
       {
        printf("%d\n",num3);
        printf("%d\n",num1);
        printf("%d\n",num2);
       }
       else if (num2>num1)
       {
        printf("%d\n",num3);
        printf("%d\n",num2);
        printf("%d\n",num1);
       }
       else
       {
        printf("%d\n",num3);
        printf("%d",num2);
        printf("%d\n",num1);
       }
    }
    else
    {
        printf("%d",num1);
        printf("%d",num2);
        printf("%d",num3);
    }
   
    system("PAUSE");     
    return 0;
}


Referencias