Principales técnicas de resolución de problemas usando computadoras para hacer cálculos (página 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
![]() | ![]() ![]() | Página siguiente ![]() |