lunes, 1 de diciembre de 2008
PALNTEAMIENTO DEL PROYECTO.
PROYECTO DE PROGRAMACIÓN BÁSICA
INTRODUCCIÓN A LA PROGRAMACIÓN
JOYCE LIZETH BOHORQUEZ RENGIFO
COD. 2007270285
PRESENTADO A:
EL LICENCIADO. JORGE MARIÑO
UNIVERSIDAD SURCOLOMBIANA
INGENIERÍA DE PETRÓLEOS
NEIVA
2008
1. INTRODUCCIÓN
Este proyecto cumple con el propósito de aplicar los conceptos adquiridos durante todo el curso de introducción básica a la programación, de la misma manera resaltar la importancia de seguir con detalle los pasos para la solución de problemas, como lo son; el ANALISIS lógico de la solución del problema para determinar los datos de entrada (las variables o datos necesarios para obtener una salida que corresponda a la salida esperada) y los datos constantes, datos de salida y proceso que se debe llevar acabo (instrucciones a realizar; operaciones matemáticas, contadores, acumuladores y estructuras para el control; (terminal, Asignación, condicional, proceso, dirección y conexión)), lo anterior con respecto al aparte de DISEÑO mediante diagrama de flujo con el programa (DFD); con el propósito de dar al programador una buena percepción visual, ya que como dicen; “una imagen dice mas que mil palabras”, luego La CODIFICACIÓN que es la operación de escribir la solución del problema (de acuerdo a la lógica del diagrama de flujo o pseudocódigo), en una serie de instrucciones detalladas, en un código reconocible por la computadora, la serie de instrucciones detalladas se le conoce como código fuente, el cual se escribe en un lenguaje de programación o lenguaje de alto nivel. A continuación la PRUEBA Y DEPURACIÓN, que consiste en la documentación interna y externa y el manual del usuario. Para finalizar el MANTENIMIENTO pero al parecer esta parte no será de nuestra incumbencia.
2. PLANTEAMIENTO DEL PROBLEMA
En una empresa dedicada a la explotación de hidrocarburos desean conocer la distancia recorrida por un taladro de perforación, sin necesidad de visualizar por medio de cámaras subterráneas, de esta manera minimizar costos de extracción, (aclaro; este proceso no posee datos reales sino hipotéticos, además para la solución al problema planteado no se tiene la certeza de su efectividad) también determinar el rendimiento de el taladro en toda la zona.
Teniendo en cuenta que la velocidad de la broca varía dependiendo la capa a perforar; ya que a mayor dureza mayor oposición al procedimiento. Por lo tanto la velocidad disminuirá y el rendimiento de la maquina será menor, usaremos unos estándares de velocidades dependiendo la dureza del material, que a su vez tendrán determinadas velocidades la actividad se llevara a cabo para un numero especifico de capas. La reacción del mismo taladro nos indicara el momento del cambio de capa.
3. ANÁLISIS DE DATOS
ENTRADAS REQUERIDAS;
· Primero determinaremos los valores constantes:
a. Si la dureza de la capa está entre 0-5, la velocidad será de 2.5m/min., si la dureza es de 6-11 la velocidad será de 1.0m/min. y si la dureza es mayor que 11 el taladro tiene un mínimo rendimiento de 0.25m/min.
b. Para determinar el rendimiento total del taladro usaremos un factor convenido de la siguiente manera; si alcanza la meta de 400m/min., o más obtendrá un 100% de rendimiento si no se le calculará. Si obtiene menos de un 50% no alcanza la meta deseada.
· Para dar solución al problema anteriormente planteado debemos determinar las entradas necesarias, que son las siguientes VARIABLES:
Tiempo tardado por cada capa, este valor se obtendrá con respecto a la señal que el taladro mostrará con la variación de la dureza.
El proceso se llevara a cabo para x capas conocidas, pues con anterioridad por medio de exploración con ultrasonido se estipulo esta cantidad.
Dureza del material perforado.
SALIDAS ESPERADAS;
· En el caso de este ejercicio la salida esperada será la distancia total recorrida por el taladro de perforación en metros.
· Además se desea obtener la eficiencia porcentual del rendimiento del taladro en la perforación.
PROCESO A SEGUIR;
El proceso a seguir será;
· Primero se ingresa una lectura para que nos permita introducir una de las variables más importantes como lo es el NÚMERO DE CAPAS que deseamos analizar, del mismo modo plantear inicializando en cero el contador y acumulador que mas adelante usaremos, con un sentido secuencial→→→→.
· en seguida involucramos un ciclo PARA que repetirá el proceso las veces que sea necesario, (número de capas ingresado con anterioridad).
· Posteriormente encontramos dos elementos de lectura con sus respectivos mensajes de salida los cuales solicitan el ingreso de; el factor de dureza de la capa escogida y el tiempo en minutos usado perforando una capa.
· Seguidamente dos condicionales que determinará, según la dureza de la capa el factor velocidad por el que se debe operar.
· Como el proceso que llevamos acabo es repeticional, usamos un acumulador y su respectivo contador (que con anticipación inicializamos en cero) para establecer las distancias perforadas en cada caso de dureza. →→→→.
· Cerramos el ciclo PARA y sumamos todos los valores de las distancias acumuladas para instaurar la distancia total taladrada.
· A la postre fijamos la eficiencia porcentual del taladro, con base un valor constante. Y el valor de la distancia total taladrada. luego un condicional dependiendo la eficiencia obtenida con un mensaje de salida nos dirá si la eficiencia del taladro fue mínima, normal o máxima.
4. ALGORITMO EN LENGUAJE NATURAL Y FORMATO DE SALIDA DE INFORMACIÓN
El siguiente programa pretende generar la eficiencia del trabajo de un taladro de perforación dependiendo del valor que el mismo arroje como distancia total taladrada; aunque el diseño de diagrama de flujo en DFD es útil visualmente, este no es claro para el usuario, por el código de simbolización que se usa, por lo tanto es preciso exponer cada uno de los pasos a seguir en un lenguaje común y natural con términos conocidos;
§ Para empezar identificamos el número de capas que deseamos analizar con la letra C.
§ Inicializamos el contador y acumulador que luego emplearemos para determinar la distancia total perforada; CONTADOR DIST1 (distancia operada con un factor de velocidad de 2.5, pues la dureza de la capa es inferior a 5), DIST2 (distancia operada con un factor de velocidad de 1, pues la dureza de la capa es superior a 5 pero inferior a 12), DIST3 (distancia operada con un factor de velocidad de 0.25, pues la dureza de la capa es superior a 11). ACUMULADOR; DISTT1 de la distancia DIST1, DISTT2 de la distancia DIST2, DISTT3 de la distancia DIST3.
§ Ahora incluimos un ciclo PARA llamado NC numero de capas que empieza el ciclo desde uno y lo termina en C (número de capas a analizar) con un intervalo de 1 entre proceso y proceso.
§ Seguido, Dos lecturas de entrada DC dureza de la capa y t tiempo empleado en perforar la capa a analizar (variables).
§ Un condicional DC>=5 que selecciona los valore de DC que sean inferiores a 5, para operar por un factor de velocidad, DC<=11 que selecciona los valore de DC que sean superiores a 5 pero inferiores a 12, para operar por un factor de velocidad.
§ Llamamos P.Q.S a las distancias totales acumuladas para cada caso, al instante se ubica el contador de las distancias normales para cada factor (DIST1, DIST2, DIST3), nombramos así mismo el producto entre el factor (velocidad de taladrado) determinado para cada DC y el tiempo t, así hallamos la distancia.
§ Por ultimo para esta sección secuencial, DISTT1, DISTT2, DISTT3 respectivos acumulados, igual a la variable acumulada (P, Q, S) mas la distancias parcial: (DIST1, DIST2, DIST3).
§ El ciclo PARA llega a su final y calculamos la distancia total perforada DISTTP; esto lo hacemos sumando todos los acumulados totales, (DISTT1+DISTT2+DISTT3).
§ Calculamos la eficiencia del taladro EFTA con un factor previsto. Dividiendo DISTTP la distancia total perforada, entre 400 y multiplicando luego el resultado entre 100, para obtener un porcentaje.
§ Con un condicional EFTA>=50 vemos si la eficiencia fue mayor o igual al 50% para que un mensaje de salida nos indique que la eficiencia fue baja y no se alcanzo la meta en el lado izquierdo del rombo, por el contrario en el lado derecho se continua con EFTA=50 con este condicional observamos si la eficiencia fue mayor o igual al 50% para que un mensaje de salida nos diga que se alcanzo y supero la meta propuesta, que la eficiencia fue máxima o normal.
DOCUMENTACIÓN DE UN PROGRAMA DE COMPUTACIÓN
¿Qué HACE el programa, para qué sirve?
Como este último proyecto de programación básica debe tener relación con el programa a el cual pertenecemos mi proyecto se enfoco en la solución de un problema de el área de perforación, este se encarga de calcular con tan solo la entrada de tres diferentes datos la distancia total perforada por un taladro y la eficiencia porcentual de este , con el propósito de disminuir costos (aclaro, el programa es solo una idea no uso datos reales, por mi escaso conocimiento del tema, ni doy fe en la efectividad del proceso usado).
Mi programa se formó más por el sentido común que por los conocimientos técnicos del tema, como requiero calcular la distancia perforada por un taladro y se que la capa terrestre esta conformada por diferentes capas de diferentes características como la DUREZA; entonces propongo un factor de velocidad alcanzado por el taladro a partir de diferentes intervalos de dureza. Para conseguir la eficiencia porcentual, uso un dato ya calculado como lo es la distancia total que perforo el taladro, de esta manera y mediante dos diferentes condiciones que me arrojaran tres mensajes de salida que dirán si el rendimiento fue bajo, normal o máximo.
¿Qué ES el programa?
El programa esta escrito en lenguaje java script de programación; Java Script que es un lenguaje de programación creado por Netscape con el Objetivo de Integrarse en HTML y facilitar la creación de páginas interactivas. El código Java Script no necesita ser compilado, es el propio navegador el que se encarga de interpretarlo. Características; No es tipado, Basado en objetos, Java Script NO ES Java. En la actualidad, pocos navegadores no disponen de soporte de Java Script. La información relevante de mi programa se puede conseguir en textos relacionados con métodos de cuantificar y medir zonas perforadas, o textos de perforación en general. Este proyecto pretende ahorrar costos a los perforadores petroleros del futuro.
¿Cómo funciona el programa?
Con anterioridad se explico con lenguaje natural la forma de operar el programa en cuestión, su finalidad y los conocimientos necesarios para su manejo. Por lo sencillo del programa creo no es tan necesario el profundizar en esta parte
CONCLUSIONES Y AUTOEVALUACIÓN
El proceso fue desarrollado paso a paso de un modo claro y a conciencia, practicando la lógica y todos los conceptos aprendidos durante todo el curso de programación básica para la solución de problemas.
El curso cumplió la finalidad de demostrar la importancia del mismo para la solución práctica e inteligente de cualquier proceso de la cotidianidad, empleando adecuadamente los elementos que nos brinda la programación.
La importancia del planteamiento previo a el uso de las herramientas de los programas que podemos emplear, pues lo mas importante es la lógica que nos indica que hacer y como hacerlo. “Cualquiera puede codificar, pocos analizar con lógica”.
Autoevaluación; Durante todo el curso siento me esforcé, fui activa y participativa, cumplida con los talleres y ejercicios propuestos en clase, esto gracias lo practico del curso como tal.
viernes, 31 de octubre de 2008
Ejercicio 2
Modificar el primer script del capítulo anterior para que:
1. El mensaje que se muestra al usuario se almacene en una variable llamada mensaje y el funcionamiento del script sea el mismo.
2. El mensaje mostrado sea el de la siguiente imagen:
Ejercicio 3
Crear un array llamado meses y que almacene el nombre de los doce meses del año. Mostrar por pantalla los doce nombres utilizando la función alert().
Ejercicio 4
A partir del siguiente array que se proporciona: var valores = [true, 5, false, "hola", "adios", 2];
1. Determinar cual de los dos elementos de texto es mayor
2. Utilizando exclusivamente los dos valores booleanos del array, determinar los operadores necesarios para obtener un resultado true y otro resultado false
3. Determinar el resultado de las cinco operaciones matemáticas realizadas con los dos elementos numéricos
Ejercicio 5
Completar las condiciones de los if del siguiente script para que los mensajes de los alert() se muestren siempre de forma correcta
Ejercicio 6
El cálculo de la letra del Documento Nacional de Identidad (DNI) es un proceso matemático sencillo que se basa en obtener el resto de la división entera del número de DNI y el número 23. A partir del resto de la división, se obtiene la letra seleccionándola dentro de un array de letras.
El array de letras es:
var letras = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E', 'T'];
Por tanto si el resto de la división es 0, la letra del DNI es la T y si el resto es 3 la letra es la A. Con estos datos, elaborar un pequeño script que:
1. Almacene en una variable el número de DNI indicado por el usuario y en otra variable la letra del DNI que se ha indicado. (Pista: si se quiere pedir directamente al usuario que indique su número y su letra, se puede utilizar la función prompt())
2. En primer lugar (y en una sola instrucción) se debe comprobar si el número es menor que 0 o mayor que 99999999. Si ese es el caso, se muestra un mensaje al usuario indicando que el número proporcionado no es válido y el programa no muestra más mensajes.
3. Si el número es válido, se calcula la letra que le corresponde según el método explicado anteriormente.
4. Una vez calculada la letra, se debe comparar con la letra indicada por el usuario. Si no coinciden, se muestra un mensaje al usuario diciéndole que la letra que ha indicado no es correcta. En otro caso, se muestra un mensaje indicando que el número y la letra de DNI son correctos.
Ejercicio 7
El factorial de un número entero n es una operación matemática que consiste en multiplicar todos los factores n x (n-1) x (n-2) x ... x 1. Así, el factorial de 5 (escrito como 5!) es igual a: 5! = 5 x 4 x 3 x 2 x 1 = 120
Utilizando la estructura for, crear un script que calcule el factorial de un número entero.
JOYCE LIZETH BOHORQUEZ RENGIFO
COD. 2007270285
PRESENTADO A:
LICENCIADO. JORGE MARIÑO
UNIVERSIDAD SURCOLOMBIANA
INGENIERIA DE PETROLEOS
NEIVA
2008
EJERCICIOS DE (PARA)
1. Se desea conocer la relación de barriles de petróleo y agua producidos en determinado tiempo en un poso de una producción normal.
2. una petrolera desea conocer la cantidad de diferentes arboles por especie nativa necesarios para reforestar una zona, como compensación a la comunidad por la tala que se debió efectuar para la explotación del pozo descubierto.
3. se analizan muestras de crudo, para determinar su calidad dependiendo del valor de su densidad. Del mismo modo se debe conocer la relación de barriles de buena, mala y mediana calidad.
4. un companyman, estudia las hojas de vida de diferentes ingenieros amateur, para de esta manera realizar una contratación, que dependerá del promedio de notas que hallan realizado en sus carreras.
EXPLICACIÓN
1. Creación de algoritmo del primer ejercicio.
| OBJETIVO | El propósito de este algoritmo es conocer la relación de barriles de agua y crudo producidos en pozo en 4 días de explotación. |
| DESCRIPCION DEL PROBLEMA | Para calcular la cantidad de barriles producidos en pozo durante 4 días, se ingresan los datos necesarios como la producción total de barriles, usando acumuladores y un “para” que efectuar la repetición necesaria. |
| IDENTIFICACION DE DATOS | Los datos de entrada a conocer serán; la producción total de crudo y agua en barriles, y los días de análisis. Y los datos de salida serán el porcentaje de barriles de crudo y agua producidos en los días de análisis. |
| PROCESO | El proceso a seguir será; primero se debe ingresar el número total de barriles producidos, mediante contadores se cuantifica el número total de barriles tanto de crudo como de agua, usando acumuladores, previo usamos unas estructuras de control que nos permiten ver el estado de los barriles. Por último sacamos la relación porcentual de barriles tanto de crudo como de agua. |
| ALGORITMO | Ver figura. 1 |
2. Creación de algoritmo del segundo ejercicio.
| OBJETIVO | El motivo de este algoritmo es la necesidad conocer la cantidad de árboles necesarios para reforestar una zona. |
| DESCRIPCION DEL PROBLEMA | Para calcular la cantidad de árboles de diferente especie de ocupación por árbol, se hace preciso una estructura para que nos permita repetir esta operación cuantas veces sea necesario. |
| IDENTIFICACION DE DATOS | · Los datos de entrada a conocer serán; área a reforestar y extensión ocupada por árbol sembrado. · El dato de salida esperado es; el numero de arboles sembrados. |
| PROCESO | El proceso a seguir será ingresar la extensión a reforestar y el área que ocupa un árbol, de esta manera calculamos el numero de árboles necesarios e incluimos una estructura “para” que nos repetirá el proceso las veces que sea necesario. |
| ALGORITMO | Ver figura. 2 |
3. Creación de algoritmo del tercer ejercicio.
| OBJETIVO | Una empresa de explotación petrolera desea conocer la cantidad de barriles de buena y mala calidad producido por un pozo. |
| DESCRIPCION DEL PROBLEMA | Para calcular la cantidad de barriles de buena y mala calidad producidos en pozo, se ingresan los datos necesarios como la producción diaria, usando acumuladores y un “para” que efectuar la repetición necesaria. |
| IDENTIFICACION DE DATOS | Los datos de entrada a conocer serán; número total de barriles producidos, y la densidad de cada barril para determinar de esta manera su calidad. Datos de salida: el dato de salida será la relación en porcentaje de la cantidad de barriles de buena mala y mediana calidad. |
| PROCESO | El proceso a seguir será: primero se debe ingresar el número total de los barriles, creo los contadores, adiciono una estructura de control “para” y de esta manera determinar las repeticiones necesarias del proceso, luego un condicional que me ayude a determinar la calidad de los barriles y así poder efectuar las operaciones necesarias para poder obtener la relación porcentual de la calidad de los barriles de crudo. |
| ALGORITMO | Ver figura. 3 |
4. Creación de algoritmo del cuarto ejercicio.
| OBJETIVO | El propósito de este algoritmo es conocer la cantidad de barriles producidos en pozo en 4 días de explotación. |
| DESCRIPCION DEL PROBLEMA | Para calcular la cantidad de barriles producidos en pozo durante 4 días, se ingresan los datos necesarios como la producción diaria, usando acumuladores y un “para” que efectuar la repetición necesaria. |
| IDENTIFICACION DE DATOS | Los datos de entrada a conocer serán; cantidad de crudo de producción diaria, y los días de análisis. |
| PROCESO | El proceso a seguir será |
| ALGORITMO | Ver figura. 4 |
viernes, 26 de septiembre de 2008
EJERCICOS INVENTADOS
INTRODUCCION A LA PROGRAMACION
JOYCE LIZETH BOHORQUEZ RENGIFO
COD. 2007270285
PRESENTADO A:
LICENCIADO. JORGE MARIÑO
UNIVERSIDAD SURCOLOMBIANA
INGENIERIA DE PETROLEOS
NEIVA
2008
EJERCICOS DE PROGRAMACIÓN
EJERCICOS SECUENCIALES
1. Una persona desea saber cual es su saldo en minutos si consume 30 por día. Y el plan consta de 30000 minutos mensual
2. Calcular el peso de una persona, si la formula es:
peso = (estatura(en cm.)-100cm)
3. hallar el volumen de un cilindro
4. Determinar, área, perímetro y volumen de un cubo.
7. la universidad necesita conocer una manera de liquidar los salarios a sus catedráticos. Teniendo en cuenta los siguientes datos, valor de la hora ordinaria 10000, y las horas extras poseen un incremento del 20% sobre la hora normal.
6. convertir Celsius a: kelvin, Fahrenheit, y rankin.
5. Determine el porcentaje de personas dependiendo de sus preferencias sexuales Por curso en la universidad.
8. halle la cantidad de días, segundos y minutos vividos por una persona.
EXPLICACION
1. para el conocimiento del saldo del plan, en la entrada se debe enunciarse el numero de días transcurridos desde iniciado el plan, luego se opera mediante una multiplicación por 30 que son los minutos consumidos a diario, teniendo el consumo actual se procede a restar con el numero inicial de minutos del plan(30000).
2. para la conocer el peso de una persona solo es necesario ingresar el valor en cm. de la estatura de la persona, luego se remplaza en la formula establecida.
3. para hallar el volumen de un cilindro solo se debe conocer el radio de la base y la altura del mismo. Vc= (*r2)*h.
4. para determinar el área, perímetro y volumen de un cubo, solo debemos conocer el valor de uno de sus lados. P=14(L), A=5*(L2), V=L3.
5. determinar el % de personas según su preferencia sexual, en el curso en la entrada se pone la H, M, o G en el desarrollo se ilustrara mediante formulas que el porcentaje de hombres es igual a h *100/h+m+g lo mimo se hará con las mujeres y gays se mostrara en la salida los resultados.
8. para establecer el número de días minutos y segundos vividos por una persona es necesario conocer como entrada su edad, para continuar con factores fijos de conversión como lo son el que un año tenga 365 días, un día 24 horas y una hora 60 minutos.
EJERCICOS CONDICIONALES
1. un ama de casa desea conocer si sus compras exceden el diario (dinero) que le da su marido para ella poder conservar la 1/3 del valor q el marido le da.
2. Determinar si un número es mayor o menor que 5.
3. determinar si el agua se congela o no si el punto de fusión del agua es 0 grados centígrados
4 Establecer si una un niño es apto o no para poder disfrutar de una atracción de feria, depende de su estatura.
5. en una pirámide de premios se llevan el premio mayor de $500000000 si el numero de afiliados es > = de 20, si el numero de la boleta es < solo recibe la 1/20 parte del premio por cada 4 afiliados.
EXPLICACION DE CADA EJERCICIO
1. primero se debe conocer como entrada la cantidad de dinero que recibe para los Gastos el ama de casa. Luego conocer el valor de las compras, se escoje un decisional en el cual se establezca que si la compra es inferior a la 2/3 de la entrada la compra si se realiza.
2. Si queremos saber si un numero es mayor o menor que 5 lo primero que debemos reconocer es cual va ha hacer la variable introducida en este caso será X luego ponemos un desicional el cual nos dará la opción de de indicarnos que pasaría que si X>5 si lo es un numero mayor que 0 y si no lo es será menor que
3. sabiendo que el agua se congela a 0º c en la entrada se pone la variable T, luego se pone un condicional el cual nos indicara que si t<0, si el agua se congela y si no pues no se congela esto se mostrara en las salidas respectivamente.
4. para establecer si el niño es apto o no para poder seguir se establece la constante q indica la restricción y luego se proceden a indicar la variable estatura si la variable excede la constante es apto si no no.
5. primero se deben ingresar el numero de afiliados de la persona, luego el condicional que fije el monto de afiliados necesario para poder obtener el monto, si el numero de la variable es < que la constante ya establecida se procede con la operación, en la cual se determine que el valor a recibir es proporcional con el numero de afiliados.
ENUNCIADO DEL EJERCICIO DEL PARCIAL.
Una persona que va al gimnasio puede seleccionar entre 3 actividades8 o las 3 si así lo prefiere) spining, aeróbicos y pesas. Dependiendo del tiempo en minutos que le dedique a cada practica, un factor de cada deporte y el peso de la persona es posible determinar la cantidad de calorías perdidas, así; 2peso de la persona*tiempo de practica*factor de c/deporte (spining 0.046, aeróbicos 0.065, pesas 0.085).
Hay que tener en cuenta que la persona puede practicar todos los deportes.
viernes, 19 de septiembre de 2008
viernes, 5 de septiembre de 2008
PASOS DE ALGORITMO
DESCRIPCION DEL PROBLEMA: calcular el valor a pagar de la factura del servicio de gas mensual.
IDENTIFICACIÓN DE LOS DATOS: los datos conocidos son la lectura inicial (LI) y final (LF) del contador.
PROCESO:
Primero: debo realizar la diferencia entre el consumo final menos el inicial (LF-LI) para conocer el consumo mensual (CM).
Segundo: multiplicar la diferencia por el valor del metro cúbico (m3) y de esta manera conocer el precio a pagar por concepto de consumo mensual (PF).
ALGORITMO:
EJERCICIOS DE ALGORITMOS
Ganancia de un pozo en un mes, teniendo en cuenta como variables (PBRL (precio del barril), PDB (producción diaria en barriles), DT (días trabajados), SB (sueldo básico), GPPM (ganancia por producción mensual), CDPAB (costo de producción por alquiler de bomba), CDPEW (costo de producción por equipo workover), CDPPT (costo de producción por pago de trabajadores), TDD (total de deducidos), GPM (ganancia en pozo mensual).
2. EJERCICIO:
Relación en porcentaje de costos y ganancias de la recuperación de un pozo, teniendo en cuenta: (BPMC (barriles producidos por mes de crudo), PBA (precio barril de agua), PBC (precio barril de crudo), DT (días trabajados), EH (empuje hidráulico), IA (inyección de agua), ESG (empuje por segregación gravitacional), TGP (total ganancia parcial), TDDC (total deducido por costos), RL (relación entre costos y ganancias), PRL (porcentaje de relación).
3. EJERCICIO:
Costo por capacitación de trabajadores, teniendo en cuenta los siguientes aspectos: NCP (numero de capacitados), NM (numero de maestros), PPPP (pecio pagar por persona capacitada), TD (total de dinero recolectado), SM (sueldo maestro), TSM (total sueldo maestro), DDH (diferencia entre debe y haber).
En la clase del día 3 del mes 9, analizamos los pasos a seguir para la solución de un problema, siendo los siguientes;
PROBLEMA A RESOLVER: para el estudio de este punto tuvimos en cuenta como ejemplo la liquidación de una nomina.
ORDENAMIENTO DE IDEAS: aquí debemos tener en cuenta tres preguntas básicas que la lógica computacional me exigue con claridad: los datos que proporcionan (entradas)?, ¿como lo voy a conseguir (proceso)? Y ¿Qué me piden (salida)?
CREACION DE ALGORITMOS: por medio de diagramas de flujo, conocimos los diferentes elementos empleados en el tema. ALGORITMO (secuencia de pasos lógicos expresados de forma natural, clara y ordenada, con el propósito de solucionar un problema. Lo aplicamos al ejemplo manejado.
viernes, 22 de agosto de 2008
Análisis, Diseño, codificación, ejecución, prueba y mantenimiento.
ANALISIS: estudia los requisitos que debe cumplir la aplicación, produciendo una hoja de especificaciones.
En la creación de algoritmos consistirá solo en; determinar las entradas, las salidas y el proceso.
DISEÑO: en estos esquemas se simboliza el diseño de la aplicación, así como la organización de los dato, de los procesos y la estructura física que usara la aplicación.
En el caso de algoritmos, conviene el diseño descendente (top down), dividiendo en módulos para solucionar los problemas mas concretos.
También encontramos el diseño de la zona principal que es el programa principal a ejecutar en cuanto la aplicación ya este terminada.
CODIFICACION: escritura de la programación usando un lenguaje de programación, usando una herramienta compatible con el lenguaje.
EJECUCION: Tras la escritura del código, mediante un software especial se traduce a código Interpretable por el ordenador (código máquina).
PRUEBA: verificar que su funcionamiento es el correcto.
Para ello se comprueban todas las entradas posibles, comprobando que las salidas son las correspondientes.
MANTENIMIENTO: se crea la documentación del programa, Gracias a esa documentación se pueden corregir futuros errores.
NOTACIONES PARA EL DISEÑO DE ALGORITMOS:
DIAGRAMA DE FLUJO: se esquematiza el flujo del algoritmo. Fue muy útil al principio y todavía se usa como apoyo para explicar
ciertos algoritmos. Si los algoritmos son complejos, este tipo de esquemas no son adecuados. Los diagramas utilizan símbolos especiales que ya están normalizados por organismos de estandarización como ANSI e ISO.
PSEUDOCODIGOS:
SECUENCIALES: Instrucciones que se ejecutan en orden normal. El flujo del programa ejecuta la instrucción y pasa a ejecutar la siguiente.
ALTERNATIVAS: Instrucciones en las que se evalúa una condición y dependiendo si el resultado es verdadero o no, el flujo del programa se dirigirá a una instrucción o a otra.
ITERATIVAS: Instrucciones que se repiten continuamente hasta que se cumple una determinada condición.
El tiempo le ha dado la razón y ha generado una programación que insta a todo
Programador a utilizar sólo instrucciones de esos tres tipos. Es lo que se conoce como Programación estructurada.
La escritura de las instrucciones debe cumplir reglas muy estrictas. Las únicas permitidas son:
De Entrada /Salida. Para leer o escribir datos desde el programa hacia el usuario.
De proceso. Operaciones que realiza el algoritmo (suma, resta, cambio de valor,...)
De control de flujo. Instrucciones alternativas o iterativas (bucles y condiciones).
De declaración. Mediante las que se crean variables y subprogramas.
CREACIÓN DE LAGORITMOS:
INSTRUCCIONES DE ALGORITMOS: Independientemente de la notación que utilicemos para escribir algoritmos, éstos contienen instrucciones, acciones a realizar por el ordenador. Lógicamente la escritura de estas instrucciones sigue unas normas muy estrictas. Las instrucciones pueden ser de estos tipos:
PRIMITIVAS: Son acciones sobre los datos del programa. Son: Asignación, Instrucciones de Entrada/Salida.
DECLARACIONES: Obligatorias en el pseudocódigo, opcionales en otros esquemas.
Sirven para advertir y documentar el uso de variables y subprogramas en el
Algoritmo.
CONTROL: Sirven para alterar el orden de ejecución del algoritmo. En general el algoritmo se ejecuta secuencialmente. Gracias a estas instrucciones el flujo del algoritmo depende de ciertas condiciones que nosotros mismos indicamos.
IDENTIDFCADORES:
Los algoritmos necesitan utilizar datos. Los datos se identifican con un determinado Identificador (nombre que se le da al dato). Este nombre: Sólo puede contener letras, números y el carácter _Debe comenzar por una letra
El tipo de datos de la variable puede ser especificado de muchas formas, pero tiene que ser un tipo compatible con los que utilizan los lenguajes informáticos. Se suelen utilizar los siguientes tipos: entero. Permite almacenar valores enteros (sin decimales).real. Permite almacenar valores decimales. carácter. Almacenan un carácter alfanumérico. lógico (o booleano). Sólo permiten almacenar los valores verdadero o falso. texto. A veces indicando su tamaño (texto (20) indicaría un texto de hasta 20 caracteres) permite almacenar texto. Normalmente en cualquier lenguaje de programación se considera un tipo compuesto.
También se pueden utilizar datos más complejos, pero su utilización queda fuera de este tema.
INSRUCCIONES PRIMITIVAS:
Son instrucciones que se ejecutan en cuanto son leídas por el ordenador. En ellas sólo puede haber:
Asignaciones (), Operaciones (+, -, * /,...),Identificadores (nombres de variables o constantes), Valores (números o texto encerrado entre comillas)
Llamadas a subprogramas.
En el pseudocódigo se escriben entre el inicio y el fin. En los diagramas de flujo y tablas de decisión se escriben dentro de un rectángulo.
INSTRUCCIONES DE ENTRADA Y DE SALIDA
LECTURA DE DATOS
Es la instrucción que simula una lectura de datos desde el teclado. Se hace mediante la orden leer en la que entre paréntesis se indica el identificador de la variable que almacenará lo que se lea. Ejemplo (pseudocódigo): leer(x)
INSTRUCCIONES DE CONTROL
Con lo visto anteriormente sólo se pueden escribir algoritmos donde la ejecución de las instrucciones sea secuencial. Pero la programación estructurada permite el uso de decisiones y de iteraciones.
Estas instrucciones permiten que haya instrucciones que se pueden ejecutar o no según una condición (instrucciones alternativas), e incluso que se ejecuten
repetidamente hasta que se cumpla una condición (instrucciones iterativas). En
definitiva son instrucciones que permiten variar el flujo normal del programa.
EXPRESIONES LOGICAS
Todas las instrucciones de este apartado utilizan expresiones lógicas. Son expresiones que dan como resultado un valor lógico (verdadero o falso). Suelen ser siempre comparaciones entre datos. Por ejemplo x>8 da como resultado verdadero si x vale más que 8. Los operadores de relación (de comparación) que se pueden utilizar son:
> Mayor que
< Menor que
≥ Mayor o igual
≤ Menor o igual
≠ Distinto
= Igual
INSTRUCCIÓN DE ALTERNATIVAS SIMPLES
La alternativa simple se crea con la instrucción si (en inglés if). Esta instrucción evalúa una determinada expresión lógica y dependiendo de si esa expresión es verdadera o no se ejecutan las instrucciones siguientes.
INSTRUCCIÓN DE ALTERNATIVAS DOBLES
Se trata de una variante de la alternativa en la que se ejecutan unas instrucciones si la expresión evaluada es verdadera y otras si es falsa. Funcionamiento:
si expresión_lógica entonces instrucciones //se ejecutan si la expresión es verdadera.
ALTERNATIVAS COMPUESTAS
En muchas ocasiones se requieren condiciones que poseen más de una alternativa. En ese caso existe una instrucción evalúa una expresión y según los diferentes valores que tome se ejecutan unas u otras instrucciones.
instrucciones iterativas de tipo mientras
El pseudocódigo admite instrucciones iterativas. Las fundamentales se crean con una instrucción llamada mientras (en inglés while). Su estructura es:
mientras condición hacer instrucciones fin_mientras Significa que las instrucciones del interior se ejecutan una y otra vez mientras la
condición sea verdadera. Si la condición es falsa, las instrucciones se dejan de ejecutar. El diagrama de flujo equivalente es:
Ejemplo (escribir números del 1 al 10):
x1
instrucciones iterativas de tipo repetir
La diferencia con la anterior está en que se evalúa la condición al final (en lugar de al principio). Consiste en una serie de instrucciones que repiten continuamente su ejecución hasta que la condición sea verdadera (funciona por tanto al revés que el mientras ya que si la condición es falsa, las instrucciones se siguen ejecutando.
instrucciones iterativas de tipo hacer...mientras
Se trata de una iteración que mezcla las dos anteriores. Ejecuta una serie de
instrucciones mientras se cumpla una condición. Esta condición se evalúa tras la ejecución de las instrucciones. Es decir es un bucle de tipo mientras donde las instrucciones al menos se ejecutan una vez (se puede decir que es lo mismo que un bucle repetir salvo que la condición se evalúa al revés). Estructura: hacer.
instrucciones iterativas para
Existe otro tipo de estructura iterativa. En realidad no sería necesaria ya que lo que hace esta instrucción lo puede hacer una instrucción mientras, pero facilita el uso de bucles con contador. Es decir son instrucciones que se repiten continuamente según los valores de un contador al que se le pone un valor de inicio, un valor final y el incremento que realiza en cada iteración (el incremento es opcional, si no se indica se entiende que es de uno). Estructura:
para variablevalorInicial hasta valorfinal hacer instrucciones
estructuras iterativas anidadas
Al igual que ocurría con las instrucciones si, también se puede insertar una estructura iterativa dentro de otra; pero en las mismas condiciones que la instrucción si. Cuando una estructura iterativa esta dentro de otra se debe cerrar la iteración interior antes de cerrar la exterior (véase la instrucción si).
FUNDAMENTOS DE PROGRAMACION
OTROS TIPOS DE DIAGRAMAS
La programación estructurada hoy en día no se suele representar en ningún otro tipo de diagrama. Pero para expresar determinadas situaciones a tener en cuenta o cuando se utilizan otras programaciones se utilizan otros diagramas
diagramas entidad/relación
Se utilizan muchísimo para representar datos que se almacenan en una base de datos. Son imprescindibles para el diseño de las bases de datos que es una de las aplicaciones más importantes de la informática.
diagramas modulares
Representan los módulos que utiliza un programa y la relación que hay entre ellos. Suelen utilizarse conjuntamente con los diagramas descritos anteriormente.
diagramas de estados
Representan los estados por los que pasa una aplicación, son muy importantes para planificar la aplicación.
diagramas de secuencia
Indica tiempo transcurrido en la ejecución de la aplicación. Son muy útiles para diseñar aplicaciones donde el control del tiempo es crítico.
diagramas de clases
Representan los elementos que componen una aplicación orientada a objetos y la relación que poseen éstos. Hoy en día el más popular es el diagrama de clases de la notación UML.
UML
UML es el nombre que recibe el lenguaje de modelado universal. UML es un estándar en la construcción de diagramas para la creación de aplicaciones orientadas a objetos. Utiliza diversos tipos de esquemas para representar aspectos a tener en cuenta en la aplicación (organización de los datos, flujo de las instrucciones, estados de la aplicación, almacenamiento del código, etc.). Este tipo de diagramas serán explicados en temas posteriores.
¿QUE ES “LENGUAJE DE PROGAMACIÓN”?
Un lenguaje de programación es un lenguaje que puede ser utilizado para controlar el comportamiento de una máquina, particularmente una computadora. Consiste en un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones.
Con la revolución de las computadoras desaparecen las secuencias de posiciones de llaves mecánicas que debían desconectarse para obtener una acción determinada, una clave conectada era un 1 y una llave desconectada era un 0. Una sucesión de llaves en cualquiera de sus dos posiciones definía una secuencia de ceros y unos (por ejemplo: 0100011010011101...) que venía a representar una instrucción o un conjunto de instrucciones (programa) para el ordenador (o computador) en el que se estaba trabajando. A esta primera forma de especificar programas para una computadora se la denomina lenguaje de programación.
La necesidad de recordar secuencias de programación para las acciones usuales llevó a denominarlas con nombres fáciles de memorizar y asociar: ADD (sumar), SUB (restar), MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia de posiciones se le denominó "instrucciones", y a este conjunto de instrucciones se le llamó lenguaje ensamblador.
Posteriormente aparecieron diferentes lenguajes de programación, los cuales reciben su denominación porque tienen una estructura sintáctica similar a los lenguajes escritos por los humanos.
Aunque muchas veces se usa lenguaje de programación y lenguaje informático como si fuesen sinónimos, no tiene por qué ser así, ya que los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como, por ejemplo, el HTML (lenguaje para el marcado de páginas Web).
Un lenguaje de programación permite a uno o más programadores especificar de manera precisa: sobre datos que una computadora debe operar, cómo deben ser estos almacenados, transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural, tal como sucede con el lenguaje Léxico. Una característica relevante de los lenguajes de programación es precisamente que más de un programador puedan tener un conjunto común de instrucciones que puedan ser comprendidas entre ellos para realizar la construcción del programa de forma colaborativa.
Los procesadores usados en las computadoras son capaces de entender y actuar según lo indican programas escritos en un lenguaje fijo llamado lenguaje de máquina. Todo programa escrito en otro lenguaje puede ser ejecutado de dos maneras:
Mediante un programa que va adaptando las instrucciones conforme son encontradas. A este proceso se lo llama interpretar y a los programas que lo hacen se los conoce como intérpretes.
Traduciendo este programa al programa equivalente escrito en lenguaje de máquina. A ese proceso se lo llama compilar y al traductor se lo conoce como un malhecho compilador.
Clasificación de los lenguajes de programación:
Los lenguajes de programación se determinan según el nivel de abstracción, Según la forma de ejecución y Según el paradigma de programación que poseen cada uno de ellos y esos pueden ser:
Según su nivel de abstracción:
· Lenguajes de bajo nivel
Los lenguajes de bajo nivel son lenguajes de programación que se acercan al funcionamiento de una computadora. El lenguaje de más bajo nivel es, por excelencia, el código máquina. A éste le sigue el lenguaje ensamblador, ya que al programar en ensamblador se trabajan con los registros de memoria de la computadora de forma directa.
· Lenguajes de medio nivel
Hay lenguajes de programación que son considerados por algunos expertos como lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas características que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas cualidades que lo hacen un lenguaje más cercano al humano y, por tanto, de alto nivel.
· Lenguajes de alto nivel
Los lenguajes de alto nivel son normalmente fáciles de aprender porque están formados por elementos de lenguajes naturales, como el inglés. En BASIC, el lenguaje de alto nivel más conocido, los comandos como "IF CONTADOR = 10 THEN STOP" pueden utilizarse para pedir a la computadora que pare si CONTADOR es igual a 10. Por desgracia para muchas personas esta forma de trabajar es un poco frustrante, dado que a pesar de que las computadoras parecen comprender un lenguaje natural, lo hacen en realidad de una forma rígida y sistemática.
Según la forma de ejecución
· Lenguajes compilados
Naturalmente, un programa que se escribe en un lenguaje de alto nivel también tiene que traducirse a un código que pueda utilizar la máquina. Los programas traductores que pueden realizar esta operación se llaman compiladores. Éstos, como los programas ensambladores avanzados, pueden generar muchas líneas de código de máquina por cada proposición del programa fuente. Se requiere una corrida de compilación antes de procesar los datos de un problema.
Los compiladores son aquellos cuya función es traducir un programa escrito en un determinado lenguaje a un idioma que la computadora entienda (lenguaje máquina con código binario).
Al usar un lenguaje compilado (como lo son los lenguajes del popular Visual Studio de Microsoft), el programa desarrollado nunca se ejecuta mientras haya errores, sino hasta que luego de haber compilado el programa, ya no aparecen errores en el código
· Lenguajes interpretados
Se puede también utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente el código objeto que se produce durante la corrida de compilación para utilizarlo en una corrida de producción futura, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuación, un programa intérprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la máquina, convierte cada proposición del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el código objeto para utilizarlo posteriormente.
La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo, cada instrucción del ciclo tendrá que volver a ser interpretado cada vez que se ejecute el ciclo, lo cual hace que el programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada momento el código completo). El intérprete elimina la necesidad de realizar una corrida de compilación después de cada modificación del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una corrida de producción
Según el paradigma de programación
Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No es mejor uno que otro, sino que cada uno tiene ventajas y desventajas. Dependiendo de la situación un paradigma resulta más apropiado que otro.
Lenguajes imperativos
Lenguajes Funcionales
Lenguajes Logicos
Lenguajes orientados a objetos
C es un lenguaje de programación relativamente minimalista. Uno de los objetivos de diseño de este lenguaje fue que sólo fueran necesarias unas pocas instrucciones en lenguaje máquina para traducir cada elemento del lenguaje, sin que hiciera falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo nivel de abstracción; de hecho, C se usó como intermediario entre diferentes lenguajes.
En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto de características, se pueden desarrollar compiladores de C fácilmente. En consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas (seguramente más que cualquier otro lenguaje). Además, a pesar de su naturaleza de bajo nivel, el lenguaje se desarrolló para incentivar la programación independiente de la máquina. Un programa escrito cumpliendo los estándares e intentando que sea portátil puede compilarse en muchos computadores.
C se desarrolló originalmente (conjuntamente con el sistema operativo Unix, con el que ha estado asociado mucho tiempo) por programadores para programadores. Sin embargo, ha alcanzado una popularidad enorme, y se ha usado en contextos muy alejados de la programación de sistemas, para la que se diseñó originalmente.
C tiene las siguientes características de importancia:
Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de ficheros, proporcionadas por bibliotecas.
Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados es el estructurado no llevado al extremo (permitiendo ciertas licencias rupturistas).
Un sistema de tipos que impide operaciones sin sentido.
Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir múltiples ficheros de código fuente.
Acceso a memoria de bajo nivel mediante el uso de punteros.
Interrupciones al procesador con uniones.
Un conjunto reducido de palabras clave.
Por defecto, el paso de parámetros a una función se realiza por valor. El paso por referencia se consigue pasando explícitamente a las funciones las direcciones de memoria de dichos parámetros.
Punteros a funciones y variables estáticas, que permiten una forma rudimentaria de encapsulado y polimorfismo.
Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una única variable "empleado").
Historia
Desarrollo inicial
El desarrollo inicial de C se llevó a cabo en los Laboratorios Bell de AT&T entre 1969 y 1973; según Ritchie, el periodo más creativo tuvo lugar en 1972. Se le dio el nombre "C" porque muchas de sus características fueron tomadas de un lenguaje anterior llamado "B".
Hay muchas leyendas acerca del origen de C y el sistema operativo con el que está íntimamente relacionado, Unix. Algunas de ellas son:
El desarrollo de C fue el resultado del deseo de los programadores de jugar con Space Travel. Habían estado jugando en el mainframe de su compañía, pero debido a su poca capacidad de proceso y al tener que soportar 100 usuarios, Thompson y Ritchie no tenían suficiente control sobre la nave para evitar colisiones con los asteroides. Por ese motivo decidieron portar el juego a un PDP-7 de la oficina que no se utilizaba; pero esa máquina no tenía sistema operativo, así que decidieron escribir uno. Finalmente decidieron portar el sistema operativo del PDP-11 que había en su oficina, pero era muy costoso, pues todo el código estaba escrito en lenguaje ensamblador. Entonces decidieron usar un lenguaje de alto nivel y portátil para que el sistema operativo se pudiera portar fácilmente de un ordenador a otro. Consideraron usar B, pero carecía de las funcionalidades necesarias para aprovechar algunas características avanzadas del PDP-11. Entonces empezaron a crear un nuevo lenguaje, C.
La justificación para obtener el ordenador original que se usó para desarrollar Unix fue crear un sistema que automatizase el archivo de patentes. La versión original de Unix se desarrolló en lenguaje ensamblador. Más tarde, el lenguaje C se desarrolló para poder reescribir el sistema operativo.
En 1973, el lenguaje C se había vuelto tan potente que la mayor parte del kernel Unix, originalmente escrito en el lenguaje ensamblador PDP-11/20, fue reescrita en C. Éste fue uno de los primeros núcleos de sistema operativo implementados en un lenguaje distinto al ensamblador. (Algunos casos anteriores son el sistema Multics, escrito en PL/I, y Master Control Program para el B5000 de Burroughs, escrito en ALGOL en 1961).
C99
Tras el proceso de estandarización de ANSI, la especificación del lenguaje C permaneció relativamente estable durante algún tiempo, mientras que C++ siguió evolucionando. Sin embargo, el estándar continuó bajo revisión a finales de la década de 1990, lo que llevó a la publicación del estándar ISO 9899:1999 en 1999. Este estándar se denomina habitualmente "C99". Se adoptó como estándar ANSI en marzo de 2000.
Las nuevas características de C99 incluyen:
Funciones inline.
Las variables pueden declararse en cualquier sitio (como en C++), en lugar de poder declararse sólo tras otra declaración o al comienzo de una declaración compuesta.
Muchos tipos de datos, incluyendo long long int (para reducir el engorro de la transición de 32 bits a 64 bits), un tipo de datos booleano, y un tipo complex que representa números complejos.
Arrays de longitud variable.
Soporte para comentarios de una línea que empiecen con //, como en BCPL o en C++, característica para la que muchos compiladores habían dado soporte por su cuenta.
muchas funciones nuevas, como snprintf()
muchos headers nuevos, como stdint.h.
Una consideración importante es que hasta la publicación de este estándar, C había sido mayormente un subconjunto estricto del C++. Era muy sencillo "actualizar" un programa de C hacia C++ y mantener ese código compilable en ambos lenguajes. Sin embargo, el nuevo estándar agrega algunas características que C++ no admite, como por ejemplo los inicializadores estáticos de estructuras. También define al tipo "bool" de una manera que no es exactamente la del C++.
El compilador GCC, entre muchos otros, soportan hoy en día la mayoría de las nuevas características de C99. Sin embargo, este nuevo estándar ha tenido peor acogida entre algunos desarrolladores de compiladores, como Microsoft y Borland, que se han centrado en C++. Brandon Bray, de Microsoft, dijo a este respecto: "En general, hemos visto poca demanda de muchas características de C99. Algunas características tienen más demanda que otras, y consideraremos incluirlas en versiones futuras siempre que sean compatibles con C++." [1]
Ventajas
Lenguaje muy eficiente puesto que es posible utilizar sus características de bajo nivel para realizar implementaciones óptimas.
A pesar de su bajo nivel es el lenguaje más portado en existencia, habiendo compiladores para casi todos los sistemas conocidos.
Proporciona facilidades para realizar programas modulares y/o utilizar código o bibliotecas existentes.
Variantes
Desde el inicio del lenguaje han surgido varias ramas de evolución que han generado varios lenguajes:
Objective-C es un primer intento de proporcionar soporte para la programación orientada a objetos en C, de escasa difusión, pero actualmente usado en Mac OS X y GNUstep.
C++ diseñado por Bjarne Stroustrup fue el segundo intento de proporcionar orientación a objetos a C y es la variante más difundida y aceptada. Esta versión combina la flexibilidad y el acceso de bajo nivel de C con las características de la programación orientada a objetos como abstracción, encapsulación y ocultación.
También se han creado numerosos lenguajes inspirados en la sintaxis de C, pero que no son compatibles con él:
Java, que une la sintaxis del C++ a una orientación a objetos más similar a la de Smalltalk y Objective C.
JavaScript, un lenguaje de scripting creado en Netscape e inspirado en la sintaxis de Java diseñado para dar a las páginas web mayor interactividad. A la versión estandarizada se la conoce como ECMAScript
Proceso de compilación
La compilación de un programa C se realiza en varias fases que normalmente son automatizadas y ocultadas por los entornos de desarrollo:
Preprocesado consistente en modificar el código fuente en C según una serie de instrucciones (denominadas directivas de preprocesado) simplificando de esta forma el trabajo del compilador. Por ejemplo, una de las acciones más importantes es la modificación de las inclusiones (#include) por las declaraciones reales existentes en el fichero indicado.
Compilación que genera el código objeto a partir del código ya preprocesado.
Enlazado que une los códigos objeto de los distintos módulos y bibliotecas externas (como las bibliotecas del sistema) para generar el programa ejecutable final.
Lenguajes de Programación
Al desarrollarse las primeras computadoras electrónicas, se vio la necesidad de programarlas, es decir, de almacenar en memoria la información sobre la tarea que iban a ejecutar. Las primeras se usaban como calculadoras simples; se les indicaban los pasos de cálculo, uno por uno.
John Von Neumann desarrolló el modelo que lleva su nombre, para describir este concepto de "programa almacenado". En este modelo, se tiene una abstracción de la memoria como un conjunto de celdas, que almacenan simplemente números. Estos números pueden representar dos cosas: los datos, sobre los que va a trabajar el programa; o bien, el programa en sí.
¿Cómo es que describimos un programa como números? Se tenía el problema de representar las acciones que iba a realizar la computadora, y que la memoria, al estar compuesta por switches correspondientes al concepto de bit, solamente nos permitía almacenar números binarios.
La solución que se tomó fue la siguiente: a cada acción que sea capaz de realizar nuestra computadora, asociarle un número, que será su código de operación (opcode) . Por ejemplo, una calculadora programable simple podría asignar los opcodes :
1 = SUMA, 2 = RESTA, 3 = MULTIPLICA, 4 = DIVIDE.
Supongamos que queremos realizar la operación 5 * 3 + 2, en la calculadora descrita arriba. En memoria, podríamos "escribir" el programa de la siguiente forma:
Localidad Opcode Significado Comentario 0 5 5 En esta localidad, tenemos el primer número de la fórmula 1 3 * En esta localidad, tenemos el opcode que representa la multiplicación. 2 3 3 En esta localidad, tenemos el segundo número de la fórmula 3 1 + En esta localidad, tenemos el opcode que representa la suma. 4 2 2 En esta localidad, tenemos el último número de la fórmula
Podemos ver que con esta representación, es simple expresar las operaciones de las que es capaz el hardware (en este caso, nuestra calculadora imaginaria), en la memoria. La descripción y uso de los opcodes es lo que llamamos lenguaje de máquina . Es decir, la lista de códigos que la máquina va a interpretar como instrucciones, describe las capacidades de programación que tenemos de ella; es el lenguaje más primitivo, depende directamente del hardware, y requiere del programador que conozca el funcionamiento de la máquina al más bajo nivel.
los lenguajes más primitivos fueron los lenguajes de máquina. Esto, ya que el hardware se desarrolló antes del software, y además cualquier software finalmente tiene que expresarse en el lenguaje que maneja el hardware. La programación en esos momentos era sumamente tediosa, pues el programador tenía que "bajarse" al nivel de la máquina y decirle, paso a pasito, cada punto de la tarea que tenía que realizar. Además, debía expresarlo en forma numérica; y por supuesto, este proceso era propenso a errores, con lo que la productividad del programador era muy limitada. Sin embargo, hay que recordar que en estos momentos, simplemente aún no existía alternativa. El primer gran avance que se dio, como ya se comentó, fue la abstracción dada por el Lenguaje Ensamblador, y con él, el nacimiento de las primeras herramientas automáticas para generar el código máquina. Esto redujo los errores triviales, como podía ser el número que correspondía a una operación, que son sumamente engorrosos y difíciles de detectar, pero fáciles de cometer. Sin embargo, aún aquí es fácil para el programador perderse y cometer errores de lógica, pues debe bajar al nivel de la forma en que trabaja el CPU, y entender bien todo lo que sucede dentro de él.
Con el desarrollo en los 50s y 60s de algoritmos de más elevado nivel, y el aumento de poder del hardware, empezaron a entrar al uso de computadoras científicos de otras ramas; ellos conocían mucho de Física, Química y otras ramas similares, pero no de Computación, y por supuesto, les era sumamente complicado trabajar con lenguaje Ensamblador en vez de fórmulas. Así, nació el concepto de Lenguaje de Alto Nivel, con el primer compilador de FORTRAN (FORmula TRANslation), que, como su nombre indica, inició como un "simple" esfuerzo de traducir un lenguaje de fórmulas, al lenguaje ensamblador y por consiguiente al lenguaje de máquina. A partir de FORTRAN, se han desarrollado innumerables lenguajes, que siguen el mismo concepto: buscar la mayor abstracción posible, y facilitar la vida al programador, aumentando la productividad, encargándose los compiladores o intérpretes de traducir el lenguaje de alto nivel, al lenguaje de computadora.
Hay que notar la existencia de lenguajes que combinan características de los de alto nivel y los de bajo nivel (es decir, Ensamblador). Mi ejemplo favorito es C: contiene estructuras de programación de alto nivel, y la facilidad de usar librerías que también son características de alto nivel; sin embargo, fue diseñado con muy pocas instrucciones, las cuales son sumamente sencillas, fáciles de traducir al lenguaje de la máquina; y requiere de un entendimiento apropiado de cómo funciona la máquina, el uso de la memoria, etcétera. Por ello, muchas personas consideramos a lenguajes como C (que fue diseñado para hacer sistemas operativos), lenguajes de nivel medio.
Java
El lenguaje de programación Java, fue diseñado por la compañía Sun Microsystems Inc, con el propósito de crear un lenguaje que pudiera funcionar en redes computacionales heterogéneas ( redes de computadoras formadas por más de un tipo de computadora, ya sean PC, MAC's, estaciones de trabajo, etc.),y que fuera independiente de la plataforma en la que se vaya a ejecutar. Esto significa que un programa de Java puede ejecutarse en cualquier máquina o plataforma. El lenguaje fue diseñado con las siguientes características en mente:
· Simple. Elimina la complejidad de los lenguajes como "C" y da paso al contexto de los lenguajes modernos orientados a objetos. Orientado a Objetos. La filosofía de programación orientada a objetos es diferente a la programación convencional.
· Familiar. Como la mayoría de los programadores están acostumbrados a programar en C o en C++, el sintaxis de Java es muy similar al de estos.
· Robusto. El sistema de Java maneja la memoria de la computadora por ti. No te tienes que preocupar por apuntadores, memoria que no se esté utilizando, etc. Java realiza todo esto sin necesidad de que uno se lo indique.
· Seguro. El sistema de Java tiene ciertas políticas que evitan se puedan codificar virus con este lenguaje. Existen muchas restricciones, especialmente para los applets, que limitan lo que se puede y no puede hacer con los recursos críticos de una computadora.
· Portable. Como el código compilado de Java (conocido como byte code) es interpretado, un programa compilado de Java puede ser utilizado por cualquier computadora que tenga implementado el interprete de Java.
· Independiente a la arquitectura. Al compilar un programa en Java, el código resultante un tipo de código binario conocido como byte code. Este códido es interpretado por diferentes computadoras de igual manera, solamente hay que implementar un intérprete para cada plataforma. De esa manera Java logra ser un lenguaje que no depende de una arquitectura computacional definida.
· Multithreaded. Un lenguaje que soporta multiples threads es un lenguaje que puede ejecutar diferentes líneas de código al mismo tiempo.
· Interpretado. Java corre en máquina virtual, por lo tanto es interpretado.
· Dinámico. Java no requiere que compiles todas las clases de un programa para que este funcione. Si realizas una modificación a una clase Java se encarga de realizar un Dynamic Bynding o un Dynamic Loading para encontrar las clases.
Java puede funcionar como una aplicación sola o como un "applet", que es un pequeño programa hecho en Java. Los applets de Java se pueden "pegar" a una página de Web (HTML), y con esto puedes tener un programa que cualquier persona que tenga un browser compatible podrá usar.
Java funciona de la siguiente manera: El compilador de Java deja el programa en un Pseudo-código (no es código maquinal) y luego el intérprete de Java ejecuta el programa (lo que se conoce como el "Java Virtual Machine"). Por eso Java es multiplataforma, existe un intérprete para cada máquina diferente. Nota: El código maquinal es el código binario que la computadora entiende y puede ejecutar.
Para entender bien como funciona un applet de Java vean el siguiente ejemplo:
1. Existe un código de Java en un servidor de Web. (Los códigos de Java se caracterizan por tener la extensión *.class).
2. Una persona en Internet, con un browser compatible con Java, realiza una conección al servidor.
3. El servidor envía el documento HTML y el código en Java (*.class).
4. En la computadora del usuario remoto llegan ambos, y la Máquina Virtual de Java, que está en el browser, transforma el código Java en un código que entienda la máquina local y se ejecuta el programa dentro de la página de Web.
5. Si el usuario realiza otra conexión a otro URL o se sale del browser, el programa se deja de ejecutar y en la computadora no queda rastro de el.
Un programa en C
Generalizando, un programa en C consta de tres secciones. La primera sección es donde van todos los ``headers''. Estos ``headers'' son comúnmente los ``#define'' y los ``#include''. Como segunda sección se tienen las ``funciones''. Al igual que Pascal, en C todas las funciones que se van a ocupar en el programa deben ir antes que la función principal (main()). Declarando las funciones a ocupar al principio del programa, se logra que la función principal esté antes que el resto de las funciones. Ahora, solo se habla de funciones ya que en C no existen los procedimientos.
Y como última sección se tiene a la función principal, llamada main. Cuando se ejecuta el programa, lo primero que se ejecuta es esta función, y de ahí sigue el resto del programa.
Pascal
Pascal es un lenguaje de programación de alto nivel de propósito general; esto es, se puede utilizar para escribir programas para fines científicos y comerciales.
El lenguaje de programación Pascal fue desarrollado por el profesor Niklaus (Nicolás) Wirth en Zurich, Zuiza, al final de los años 1960s y principios de los 70s. Wirth diseñó este lenguaje para que fuese un buen primer lenguaje de programación para personas comenzando a aprender a programar. Pascal tiene un número relativamente pequeño de conceptos para aprender y dominar. Su diseño facilita escribir programas usando un estilo que está generalmente aceptado como práctica estándar de programación buena. Otra de las metas del diseño de Wirth era la implementación fácil. Él diseñó un lenguaje para el cual fuese fácil escribir un compilador para un nuevo tipo de computadora.
QBasic
Qbasic es un lenguaje de alto nivel, el cual consiste en instrucciones que los humanos pueden relacionar y entender. El compilador de Qbasic se encarga de traducir el mismo a lenguaje de máquina.
Un programa es una secuencia de instrucciones. El proceso de ejecutar esas instrucciones se llama correr el programa. Los programas contienen las funciones de entrada, procesamiento y salida. La persona que resuelve problemas mediante escribir programas en la computadora se conoce como programador. Después de analizar el problema y desarrollar un plan para solucionarlo, escribe y prueba el programa que instruye a la computadora como llevar a cabo el plan. El procedimiento que realiza el programador se define como "problem solving". Pero es necesario especificar que un programador y un usuario no son lo mismo. Un usuario es cualquier persona que use el programa.
Linux
Linux es una implementación del sistema operativo UNIX (uno más de entre los numerosos clónicos del histórico Unix), pero con la originalidad de ser gratuito y a la vez muy potente, que sale muy bien parado (no pocas veces victorioso) al compararlo con las versiones comerciales para sistemas de mayor envergadura y por tanto teóricamente superiores. Comenzó como proyecto personal del –entonces estudiante- Linus Torvalds, quien tomó como punto de partida otro viejo conocido, el Minix de Andy. S. Tanenbaum (profesor de sistemas operativos que creó su propio sistema operativo Unix en PCs XT para usarlo en su docencia). Actualmente Linus lo sigue desarrollando, pero a estas alturas el principal autor es la red Internet, desde donde una gigantesca familia de programadores y usuarios aportan diariamente su tiempo aumentando sus prestaciones y dando información y soporte técnico mútuo. La versión original -y aun predominante- comenzó para PCs compatibles (Intel 386 y superiores), existiendo también en desarrollo versiones para prácticamente todo tipo de plataformas:
Ensamblador
Cuando abstraemos los opcodes y los sustituimos por una palabra que sea una clave de su significado, a la cual comúnmente se le conoce como mnemónico , tenemos el concepto de Lenguaje Ensamblador . Así, podemos definir simplemente al Lenguaje Ensamblador de la siguiente forma:
Lenguaje Ensamblador es la primera abstracción del Lenguaje de Máquina , consistente en asociar a los opcodes palabras clave que faciliten su uso por parte del programador
Como se puede ver, el Lenguaje Ensamblador es directamente traducible al Lenguaje de Máquina, y viceversa; simplemente, es una abstracción que facilita su uso para los seres humanos. Por otro lado, la computadora no entiende directamente al Lenguaje Ensamblador; es necesario traducirle a Lenguaje de Máquina. Originalmente, este proceso se hacía a mano, usando para ello hojas donde se escribían tablas de programa similares al ejemplo de la calculadora que vimos arriba . Pero, al ser tan directa la traducción, pronto aparecieron los programas Ensambladores, que son traductores que convierten el código fuente (en Lenguaje Ensamblador) a código objeto (es decir, a Lenguaje de Máquina).
Una característica que hay que resaltar, es que al depender estos lenguajes del hardware, hay un distinto Lenguaje de Máquina (y, por consiguiente, un distinto Lenguaje Ensamblador) para cada CPU. Por ejemplo, podemos mencionar tres lenguajes completamente diferentes, que sin embargo vienen de la aplicación de los conceptos anteriores.
TRABAJO FINAL












