Descargar

Principales técnicas de resolución de problemas usando computadoras para hacer cálculos (página 2)


Partes: 1, 2

a[i]=random(100);

printf ("Numero a buscar? ");

scanf ("%d", &num);

for (i=0; i< TAM; i++)

if (a[i] == num){

printf ("nValor encontrado");

printf ("nPosicion: %d", i);

}

Else

printf ("nNo existe");

printf ("El arreglo era:n");

for (i=0; i< TAM; i++)

printf ("%d ", a[i]);

getch();

}

Búsqueda Binaria

Este algoritmo permite buscar de una manera más eficiente un dato dentro de un arreglo, para hacer esto se determina el elemento central del arreglo y se compara con el valor que se está buscando, si coincide termina la búsqueda y en caso de no ser así se determina si el dato es mayor o menor que el elemento central, de esta forma se elimina una mitad del arreglo junto con el elemento central para repetir el proceso hasta encontrarlo o tener solo un elemento en el arreglo. Para poder aplicar este algoritmo se requiere que el arreglo este ordenado. Su implementación es la siguiente:

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define TAM 15

void main(){

int a[TAM], busca, temp, bajo, alto, central;

printf("Llenando el arreglo con números aleatoriosn");

randomize(); //Inicializa el generador de aleatorios

for (int i=0; i< TAM; i++)

a[i]=random(100);

//Implementacion de Ordenamiento por burbuja de menor a mayor

printf ("Ordenando arreglo…n");

for (int j=1; j <= TAM; j++)

for (i=0; i< TAM-1; i++)

if (a[i] > a[i+1]){

temp = a[i];

a[i] = a[i+1];

a[i+1] = temp;

}

//Implementacion de búsqueda binaria

printf ("nIntroduce un numero a buscar: ");

scanf ("%d", &busca);

bajo = 0;

alto = TAM-1;

central = (bajo+alto)/2;

while (bajo < alto && busca != a[central]){

if(busca > a[central])

bajo = central+1;

else

alto = central-1;

central=(bajo+alto)/2;

}

if (busca == a[central])

printf("n%d encontrado en posicion %d", busca, central);

else

printf("n%d no existe", busca);

printf ("nnEl arreglo ordenado erann");

for (i=0; i< TAM; i++)

printf ("%d ", a[i]);

getch();

}

LENGUAJE de programación: conceptos y clasificaciones

Concepto

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.

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 qué datos 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.

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.

Algunos ejemplos típicos de lenguajes compilados:

Fortran

La familia de lenguajes de C, incluyendo C++ y Objective C pero no Java.

Ada, Pascal (incluyendo su dialecto Delphi)

Algol

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.

Algunos ejemplos de lenguajes que son normalmente interpretados en vez de compilados son: Perl, PHP, Java, Javascript , Logo, Python.

Compilación vs. Interpretación

El intérprete es notablemente más lento que el compilador, ya que realiza la traducción al mismo tiempo que la ejecución. Además, esa traducción se lleva a cabo siempre que se ejecuta el programa, mientras que el compilador sólo la hace una vez. Por estos motivos, un mismo programa interpretado y compilado se ejecuta mucho más despacio en el primer caso.

La ventaja de los intérpretes es que hacen que los programas sean más portables. Así, un programa compilado en una máquina PC bajo Windows no funcionará en un Macintosh, o en un PC bajo Linux, a menos que se vuelva a compilar el programa fuente en el nuevo sistema. En cambio, un programa interpretado funcionará en todas las plataformas, siempre que dispongamos del intérprete en cada una de ellas.

Comparando su actuación con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intérprete corresponde al intérprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito.

Es decir: los lenguajes compilados no son mejores que los interpretados, ni al revés. Optar por uno u otro depende de la función para la que vayamos a escribir el programa y del entorno donde deba ejecutarse.

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.

Atendiendo al paradigma de programación, se pueden clasificar los lenguajes en:

El paradigma imperativo o por procedimientos es considerado el más común y está representado, por ejemplo, por el C o por BASIC.

El paradigma funcional está representado por la familia de lenguajes LISP (en particular Scheme), ML o Haskell.

El paradigma lógico, un ejemplo es PROLOG.

El paradigma orientado a objetos. Un lenguaje completamente orientado a objetos es Smalltalk.

Nota: La representación orientada a objetos mejora la estructura de los datos y por lo tanto se ha aplicado a diferentes paradigmas como Redes de Petri, Imperativo Secuencial, Lógica de Predicados, Funcional, etc. No obstante, la manipulación no queda fundamentalmente afectada y por lo tanto el paradigma inicial tampoco a pesar de ser re-orientado a objetos.

Si bien puede seleccionarse la forma pura de estos paradigmas al momento de programar, en la práctica es habitual que se mezclen, dando lugar a la programación multiparadigma.

Actualmente el paradigma de programación más usado debido a múltiples ventajas respecto a sus anteriores, es la programación orientada a objetos.

Lenguajes Imperativos

Lenguajes Funcionales

 

Lenguajes Lógicos

Lenguajes orientados a objetos

BASIC

C

C++

Java

C#

Perl

unerg

Haskell

Miranda

Lisp

Scheme

Ocaml

Standard ML

ML

Scala

Prolog

Ada

C++

C#

ActionScript

VB.NET

JavaScript

Visual FoxPro

Java

Programa

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.

 

Estructura de los programas

Todo programa en C consta de una o más funciones, una de las cuales se llama main. El programa comienza en la función main, desde la cual es posible llamar a otras funciones.

Cada función estará formada por la cabecera de la función, compuesta por el nombre de la misma y la lista de argumentos (si los hubiese), la declaración de las variables a utilizar y la secuencia de sentencias a ejecutar.

 Ejemplo:

Declaraciones globales

main( ) {

variables locales

bloque

}

funcion1( ) {

variables locales

bloque }

Enlazador

Cuando existen varios programas objeto es necesario combinarlos todos para dar lugar al programa ejecutable definitivo. Este proceso se denomina enlace.

El código objeto de las funciones de la librería estándar de C se encuentra almacenado en varios archivos situados en ubicaciones conocidas por el enlazador. De este modo, el código objeto de las funciones de librería que hayamos utilizado en nuestro programa puede unirse con el código objeto del programa durante en enlace, generándose el programa ejecutable.

Por lo tanto, es necesario hacer el enlace cuando el programa se encuentra distribuido en varios archivos, o cuando dentro del programa se utilizan funciones de librería. Esto quiere decir que, en la práctica, el enlace hay que hacerlo siempre.

El enlace de nuestro código objeto con las funciones de librería puede hacerse de dos maneras:

Enlace estático. Consiste en unir durante el enlace el código objeto de las librerías con el código del programa, generando así el ejecutable. El programa ejecutable crece notablemente de tamaño respecto de los archivos objeto, ya que incorpora el código de todas las funciones de las librerías. El enlace estático es el que normalmente se utiliza a menos que indiquemos otra cosa.

Enlace dinámico. El código de las librerías no se une al del programa, sino que se busca durante la ejecución, únicamente cuando es requerido. El enlace dinámico produce, por lo tanto, ejecuciones más lentas, ya que cada vez que se use una función de librería dinámica es necesario buscar el archivo en el que se encuentra y ejecutar su código. Además, pueden producirse errores de enlace durante la ejecución del programa. Sin embargo, el enlace dinámico tiene las ventajas de reducir el tamaño del archivo ejecutable y permitir la compartición de librerías entre diferentes aplicaciones.

Depurador

Un depurador (en inglés, debugger),es un programa que permite depurar o limpiar los errores de otro programa informático.

Uso

Al Iniciarse la depuración, el depurador lanza el programa a depurar. Éste se ejecuta normalmente hasta que el depurador detiene su ejecución, permitiendo al usuario examinar la situación.

El depurador permite detener el programa en:

Un punto determinado mediante un punto de ruptura.

Un punto determinado bajo ciertas condiciones mediante un punto de ruptura condicional.

Un momento determinado cuando se cumplan ciertas condiciones.

Un momento determinado a petición del usuario.

Durante esa interrupción, el usuario puede:

Examinar y modificar la memoria y las variables del programa.

Examinar el contenido de los registros del procesador.

Examinar la pila de llamadas que han desembocado en la situación actual.

Cambiar el punto de ejecución, de manera que el programa continúe su ejecución en un punto diferente al punto en el que fue detenido.

Ejecutar instrucción a instrucción.

Ejecutar partes determinadas del código, como el interior de una función, o el resto de código antes de salir de una función.

El depurador depende de la arquitectura y sistema en el que se ejecute, por lo que sus funcionalidades cambian de un sistema a otro.

Ejemplos de depuradores: GNU Debugger (gdb), SoftICE, OllyDbg, Trw2000, Ida Pro.

Consejos para programar

Lo primero que uno necesita para programar mejor es tener gusto para programar sin gusto es muy difícil que aprendas aun pagues el curso más caro.

Necesitas tener iniciativa, un programador con iniciativa es alguien que se adelanta a los hechos, que investiga, que tiene un afán de ser mejor, un ejemplo puede ser la búsqueda constante de nuevas tecnologías, librerías, el aprender a utilizar cierta librería antes de que se le pida.

Ser abierto a escuchar otras opiniones, no siempre nuestras formas de resolver las cosas son las mejores.

Entiende y analiza bien las cosas antes de ponerte a codificar. Busca ejemplos similares, pregúntale a alguien que haya hecho algo semejante, has pruebas de las ideas que tengas para solucionarlo. Siempre es mejor empezar con una idea de lo que se quiere.

Cuando analices un problema busca los pros y contras de todas las posibles soluciones, de manera que puedas escoger la más segura y la que mejor se adapte a tus necesidades.

Si no sabes algo investiga para eso tenemos a nuestro amigo google y si él no te responde pregúntale a alguien que ya haya tenido ese problema.

Si tienes algún problema piensa que muchas otras personas han tenido ese mismo problema, investiga en google alguna solución no te quedes pasmado y quebrándote la cabeza por algo que de seguro encontraras solucionado.

No inventes el hilo negro ten por seguro que si necesitas alguna librería o función ha algún otro ya se le habrá ocurrido hacerla investiga! si no encuentras una que te resuelva todas tus necesidades al menos encuentras una que te de una idea para que puedas realizar la tuya.

Lean blogs, aprendan nuevos lenguajes, librerías, frameworks. Si te quedas con lo que has aprendido el trabajo puedes quedar obsoleto.

No esperes a aprender algo si no lo pruebas primero (a menos que seas un genio y solo con ver las cosas ya te las sabes).

Trata siempre de seguir estas etapas en todo lo que programes:

Análisis: En esta etapa analiza y entiende bien lo que te están pidiendo, pregunta, resuelve tus dudas. NO pases de esta etapa sin antes haber entendido bien lo que quieres hacer y el objetivo al cual quieres llegar.

Diseño: Una vez entendido el problema ahora tienes que encontrar una lógica para resolverlo, plantéalo en papel, utiliza UML en el mejor de los casos, prueba las librerías que piensas necesitar, documéntate de las funciones o librerías que vas a necesitar, para que cuando pases a la codificación no te detengas ni pierdas tiempo para a aprender a utilizar algo.

Codificación: Ya que tienes la lógica, y has probado todo con anticipación ahora toca el turno de codificar. Créeme que si has seguido las etapas anteriores ahora se te va a hacer más sencillo la codificación

Pruebas: Esta etapa es la más importante de todas, prueba cada una de las cosas que realices no esperes a terminar todo el proyecto, prueba cada módulo y no pases a otro hasta que te haya dado los resultados esperados. De nada sirve haberlo terminado de codificar sin errores si no obtienes los resultados que querías.

Atributos de un buen programa

Para mencionar atributos de un buen software, es inevitable arribar al concepto de calidad.

La calidad del software es el conjunto de cualidades que lo caracterizan y que determinan su utilidad y existencia. La calidad es sinónimo de eficiencia, flexibilidad, corrección, confiabilidad, mantenibilidad, portabilidad, usabilidad, seguridad e integridad.

La calidad del software es medible y varía de un sistema a otro o de un programa a otro. Un software elaborado para el control de naves espaciales debe ser confiable al nivel de "cero fallas"; un software hecho para ejecutarse una sola vez no requiere el mismo nivel de calidad; mientras que un producto de software para ser explotado durante un largo período (10 años o más), necesita ser confiable, mantenible y flexible para disminuir los costos de mantenimiento y perfeccionamiento durante el tiempo de explotación.

CONCLUSIÓN Y RECOMENDACIONES FINALES

Después de leer este trabajo de investigación, hemos comprendido cómo y por qué es posible interactuar con las computadoras usando como intermediario un código especial capaz de establecer comunicación entre nosotros y entre ellas mismas para resolver distintos problemas; desde su aparición hasta su solución, el hombre ha creado una serie de pasos finitos que pueden ser traducidos a la máquina para procesar los datos que le introducimos.

Yo puedo definir un lenguaje de programación como una simple herramienta de comunicación entre el hombre y la máquina, sin embargo, no podría definir de una forma tan simple la manera en que las computadoras funcionan, porque, como hemos visto, la combinación de estas "herramientas" constituyen una compleja "herramienta", así vamos viendo cómo se desarrollan estos medios a través de la inteligencia humana…bueno, y la rapidez que tiene las computadoras.

RECOMENDACIÓN: Si queremos aprender un lenguaje de programación, antes de eso debemos preocuparnos por aprender a programar, de nada nos sirve aprender a hablar si no sabemos lo que queremos decir ni como lo vamos a decir.

El mejor sitio web que he visto hasta ahora es no por el lenguaje C, sino sencillez con que explican la lógica de la programación.

Entre otros sitios que puedo recomendar están los siguientes:

http://html.rincondelvago.com/programacion_15.html

http://www.eqsoft.net/cms/?q=node/79

http://www.carlospes.com/curso_de_lenguaje_c/01_03_estructura_de_un_programa.php

http://www.kabytes.com/programacion/20-tips-para-ser-un-mejor-programador/

http://profeblog.es/blog/alfredo/2008/03/19/ensambladores-compiladores-interpretes/

http://expo.itch.edu.mx/view.php?f=prog_10

GRACIAS!!!

 

 

Guaroa Méndez Rivas

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente