El documento presenta un índice de un módulo básico de programación que incluye temas como introducción a la programación, algoritmos y lógica, diseño de sistemas, entornos y tecnologías para desarrollo de software como el compilador GCC y herramientas de proyectos como KDevelop y Autoconf. También menciona el uso de repositorios centralizados como CVS.
1. Indice Modulo Básico
1. Tema 1: Introducción a la Programación:
* Algoritmos y Lógica de la Programación.
* Técnicas para el Diseño y Análisis de Sistemas.
2. Entornos y Tecnologías para el Desarrollo de software.
* Compilador GNU-GCC
* Manejador de Proyectos:
o Integrado: kdevelop.
o Separado: autoconf.
* Repositorios Centralizados: CVS.
1.- Introducción a la programación.
Cómo desarrollar programas?
2. Una técnica para escribir Programas
Herramientas
●
Editor de Texto
Indentación
Resaltado
Autocompletación
●
Compilador GCC (GNU Compiler Collection)
●
Herramienta de proyectos: autoconf/KDevelop
●
ddd: Depurador Gráfico.
Qué dificulta la programación?
Hay problemas que aún no estan resueltos ó en su defecto son complicados de
resolver. Se puede resolver buscando los algoritmos y traduciendolos a codigo,
reutilizando código GPL. No hay una caracterización del tipo de aplicaciones más
necesario.
3. Resolvamos un problema:
Suponga que se tiene un Robot y solamente obedece 5 ordenes: DER (ir a la
derecha), IZQ, ARR, ABA, REC (recoger una pieza).
Cómo hariamos para moverlo a un punto de interes.
Aproximación simple
Aproximación eficiente
Algunas definiciones importantes:
¿Qué es Programar?
Es la acción de escribir instrucciones correctas para que sean
interpretadas por una máquina.
¿Qué es el Software?
Son programas. Para que tengan sentido de software deben ser
ejecutados sobre una máquina.
¿En qué medida nos compete programar?
Depende de su interes. De todas formas hoy en día es un “must” para
cualquier ingeniero.
¿En que medida dependemos de software?
Depende de su estilo de vida, pero para el ciudadano común la
dependencia es bastante: celulares, controles remotos (TV, DVD, radios, mp3
players, etc.), cajeros automaticos, etc. ¿Sabia Ud. Que muy pronto será espiado
sin darse cuenta?
Lenguajes de programación
¿Qué es un Lenguaje de Programación?
Es un conjunto de reglas para comunicar ideas. Generalmente las ideas se
le comunican a una máquina.
De que hay que estar pendiente cuando programamos en un lenguaje:
Sintaxis / Semantica
Sistema de tipos
Errores / Excepciones
4. Paradigmas de la Programación
Programación Imperativa
Programación Orientada por Objeto
Programación Funcional
Programación por Eventos
Programación Concurrente
etc.
Lenguajes de programación populares:
C, C++, Java, PHP, Perl, XHTML.
Dominios de aplicación importantes:
Programación Sistema
Sistemas de Gestión de Información
Programación Web
Niveles de los lenguajes
●
Lenguaje Natural
●
Lenguaje de Programación
●
Compilador / Interprete
●
Lenguaje Máquina
lenguaje C.
C fue diseñado para dar soporte a UNIX a mediados de los 70. Hoy en dia lo
encontramos en los mas grandes OS: Linux y FreeBSD.
C esta normalizado por ANSI (1988).
Enlaces a revisar:
yahoo.com: Tutorial de C, curso de C
google.com: Tutorial de C, curso gratis de C, etc.
www.elrincondelc.com
www.emagister.com
gcc.gnu.org
5. Etapas de la compilación
Lenguaje de Máquina
Lenguaje mas básico, propio de cada computadora, ya que está relacionado
con el diseño del hardware de la misma (dependiente de la máquina). Por lo
general consisten en cadenas de números al final reducidos a ceros y unos
(sistema numérico binario).
Operaciones:
Cargar
Almacenar
Sumar
Restar
Ejemplo:
Código de
00010101
00010111
00010110
131
Dirección
Significado operación
10000001
(a) Cargar contenido de la dir. 129 en Acumulador
10000010
(b) Sumar contenido de la dir 130 al Acumulador
10000011
(c) Almacenar contenido del Acumulador en la dir.
(c) 10000011 = 27+21+20 = 131.
6. Lenguaje Ensamblador
Consiste en abreviaturas similares al inglés, llamadas instrucciones
mnemotécnicas, que permiten representar las operaciones elementales de
la computadora (dependiente de la máquina).
Ejemplo:
Código de
Dirección
Instrucción en lenguaje ensamblador
operación
00010101
10000001
LOAD A
00010111
10000010
ADD B
00010110
10000011
STORE C
Lenguaje de bajo nivel o ensamblador:
La computadora no entiende directamente lenguaje ensamblador por lo
que un programa escrito en este lenguaje tiene que ser traducido a lenguaje
de máquina por un programa llamado un ensamblador para que pueda ser
ejecutado por la computadora.
Los lenguajes ensambladores todavía requieren que el programador tenga
un buen conocimiento de la arquitectura de la computadora.
Como los lenguajes ensambladores son dependientes de la máquina, todo
programa escrito en un lenguaje ensamblador particular tendrá que ser
reescrito si se va a ejecutar en otro tipo de computadora.
Lenguaje de alto nivel
Permite a los programadores escribir instrucciones en un lenguaje mas
familiar para ellos y que contiene notaciones matemáticas comúnmente
utilizadas (independiente de la máquina).
Ejemplo:
Código de
operación
Dirección
Instrucción en
lenguaje ensamblador
00010101
10000010 ADD B
00010110
10000011 STORE C
lenguaje de alto
nivel
10000001 LOAD A
00010111
Instrucción en
C= A+B
Con este tipo de lenguajes, la programación es mas fácil para los usuarios ya
que éste no necesita tener conocimiento de la arquitectura de la
computadora.
7. Lenguaje de Alto Nivel
Como ocurre con los lenguajes ensambladores, la computadora no entiende
directamente lenguaje de alto nivel, por lo que un programa escrito en este
lenguaje tiene que ser traducido a lenguaje de máquina por un programa llamado
un compilador para que pueda ser ejecutado por la computadora.
Los lenguajes de alto nivel permiten portabilidad, mejor expresión de las ideas,
facilidad de programar ciertas clases de problemas, menos posibilidad de cometer
errores, una visión más amplia del problema, etc.
Ejemplos de lenguajes de alto nivel:
-
Java
C
C++
COBOL
FORTRAN
PROLOG
LISP
PL/I
SMALLTALK
ADA
- BASIC
- Visual Basic
- Pascal
Lenguajes de Programación
Importante
Cada CPU tiene su propio lenguaje de máquina interno. La programación a
este nivel se realiza generalmente en el lenguaje ensamblador específico de
la computadora. Cada instrucción en lenguaje ensamblador corresponde a
una instrucción en lenguaje de máquina.
Si existe una estandarización para un lenguaje de alto nivel, cualquier
8. programa escrito usando este estándar debe poder ejecutarse en
cualquier computadora después de compilarlo. Esto se le conoce como
portabilidad de programas.
Elementos de un lenguaje de programación
Un sublenguaje para definir los datos
Qué datos tenemos
Cómo les llamamos
Cómo son (tipo y/o estructura)
Qué se puede hacer con ellos
Un sublenguaje para definir los algoritmos
Qué le hacemos a los datos
En qué orden (cuándo se lo hacemos)
Cuántas veces
Metodología de Desarrollo de Programas
El desarrollo de programas sigue hoy en dia distintas metodologías: De
arriba hacia abajo, espiral, modular, etc.
En este curso Usted aprendera que lo más importante es comprender el problema
cabalmente. Luego Usted podrá encasillarlo en cualquiera de las técnicas
existentes.
Para la comprensión de un problema se requiere que Usted este alerta con todos
los sentidos.
El proceso del pensamiento y abstracción del problema NO TIENE METODOLOGIA
ESPECIFICA.
“NO” CREA EN CUENTOS DE CAMINO. Por ejemplo entrada, proceso y salida. Es
posible que funcione pero dese cuenta que lo está castrando!!!
Cuando Usted logre conseguir la explicación más sencilla y la analogia correcta a
un problema entonces ya lo habrá resuelto. Ejercicio: Explique la suma de
números enteros, la resta, la multiplicación y la división.
Diseño del algoritmo: Descripción de una secuencia finita y ordenada de
pasos – sin ambigüedades – que conducen a la solución de un
problema dado.
Herramientas de diseño
Diagramas de flujo (para la programación estructurada)
Círculos y canales de mensaje (programación orientada a objetos)
Pseudocódigo
Trazas personales
9. Grafismos
Formulas matemáticas
Todo aquello que le ayude a representar el problema.
Codificación: Traducción del algoritmo a un programa escrito en un
lenguaje de programación adecuado (código fuente).
Corrida en frío del programa: Prueba manual de la correctitud del programa.
Depuración del programa: Identificación y eliminación de errores.
Errores de sintaxis: Violan las reglas del lenguaje de programación. Un
buen compilador localizará e identificará la mayoría de estos
automáticamente.
Errores lógicos: Equivocaciones que causan que el programa se
ejecute de forma inesperada o incorrecta.
Ejecución del programa: Ejecución del código ejecutable (código en lenguaje
de máquina) del programa bajo el control del CPU, una instrucción a la
vez.
Puesta en operación: Instalación del hardware y software, capacitación, etc..
Mantenimiento del programa: Comienza tan pronto como el producto es
lanzado. Permite corregir defectos menores, añadir una mayor
funcionalidad, ya sea en respuesta a las demandas del mercado o a las
peticiones del usuario.
Análisis E-P-S
Especificaciones de entrada: Información necesaria para la solución del problema.
¿ Qué datos son de entrada ?
¿ Cuántos datos se introducirán ?
¿ Cuáles datos de entrada son válidos ?
Proceso: Operaciones o cálculos necesarios para encontrar la solución del
problema.
¿ Qué tipo de ecuaciones ?
¿ Cuántas ecuaciones ?
¿ Qué transformaciones sobre la data?
Análisis E-P-S
Especificaciones de salida: Resultados finales de los cálculos.
¿ Cuáles son los datos de salida
¿ Cuántos datos de salida se producirán
¿ Qué precisión tendrán los resultados
¿ Se debe imprimir un encabezado
Diseño del algoritmo
10. Un algoritmo debe ser preciso e indicar el orden de realización de cada
paso.
Un algoritmo debe ser finito . Si se sigue un algoritmo, se debe terminar en
algún momento; o sea, debe tener un número finito de pasos.
Ejemplo 1: Supóngase que tiene un examen de PDI. Según una decisión
aleatoria, algunos estudiantes estudian antes del examen y otros se van
a ver un espectáculo. Realizar el análisis E-P-S y diseñar un algoritmo
para representar esta situación.
Análisis E-P-S
Entrada: una moneda para hacer la decisión aleatoria.
Proceso: lanzar la moneda y luego tomar la decisión.
Salida: resultado en el examen.
Diseño del algoritmo
Algoritmo estudiarONoEstudiar
0. Inicio
1. Lanzar una moneda.
2. Si el resultado es “cara” ir a 5.
3. Si el resultado es sello estudiar para el examen.
4. Ir a 6.
5. Ver un espectáculo.
6. Presentar el examen al día siguiente.
7. Fin
Ejemplo 2: Realizar el análisis E-P-S y diseñar un algoritmo para calcular el área
de superficie de un paralelepípedo de dimensiones l (largo), a (ancho) y h (altura)
Análisis E-P-S
Entradas: tres números reales l (largo), a (ancho) y h (altura)
Proceso:
Calcular el área del paralelepípedo
AS = 2 x (l x a + l x h + a x h)
Salidas: número real que representa el área (AS)
Diseño del algoritmo
11. Algoritmo Area
0. Inicio
1. Escribir(“Largo del paralelepipedo = ”)
2. Leer el valor de l
3. Escribir(“Ancho del paralelepipedo = ”)
4. Leer el valor de a
5. Escribir(“Altura del paralelepipedo = ”)
6. Leer el valor de h
7. AS = 2 * (l * a + l * h + a * h)
8. Escribir(“Area del paralelepipedo =”, AS)
9. Fin
Codificación
Traducir el algoritmo producido en el paso anterior en un programa escrito
en un lenguaje de programación de alto nivel (programa fuente o código
fuente). En nuestro caso C++.
Los diferentes pasos de un algoritmo se expresan en los programas como
instrucciones (término usado para los lenguajes de máquina y bajo nivel),
sentencias o proposiciones (términos usados para los lenguajes de alto
nivel).
Programa: Secuencia de sentencias, cada una de las cuales especifica
ciertas operaciones que debe ejecutar la computadora.
Tipos básicos de sentencias:
Sentencias de entrada/salida
Sentencias aritmético-lógicas
Sentencias de decisión o selectivas
Sentencias repetitivas o lazos
Codificación: Tipos básicos de sentencias
Sentencias de entrada/salida: Sentencias de transferencia de información y
datos entre dispositivos de E/S (teclado, impresora, discos, etc.) y la
memoria principal.
Sentencias aritmético-lógicas: Sentencias que ejecutan operaciones
aritméticas (suma, resta, multiplicación, etc.) o lógicas (y lógico, o lógico,
negación).
Sentencias de decisión o selectivas: Sentencias que permiten la selección
de tareas alternativas en función de los resultados de diferentes
expresiones condicionales.
Sentencias repetitivas o lazos: Sentencias que permiten la repetición de
12. secuencias de sentencias un número determinado o indeterminado de
veces.
Ejemplo 2: Realizar el análisis E-P-S y diseñar un algoritmo para calcular el área
de superficie de un paralelepípedo de dimensiones l (largo), a (ancho) y h (altura).
Diseño del algoritmo
Codificación
Algoritmo Area
float Area()
0. Inicio
{
float l, h,a, AS;
printf("Largo del
1. Escribir(“Largo del
paralelepipedo = ”)
paralelepipedo = ");
2. Leer el valor de l
scanf(“%f”,&l);
3. Escribir(“Ancho del
printf("Ancho del
paralelepipedo = ”)
paralelepipedo= ");
4. Leer el valor de a
scanf(“%f”,&a);
5. Escribir(“Altura del
printf("Altura del
paralelepipedo = ”)
paralelepipedo= ");
6. Leer el valor de h
scanf(“%f”,&h);
7. AS = 2 x (l x a + l x h + a x h)
AS = 2 * (l * a + l * h + a * h);
8. Escribir(“Area del
printf("Area de superficie del
paralelepipedo = %f", AS);
paralelepipedo =”,
AS)
9. Fin
}
13. Corrida en frío del programa
El programador realiza una corrida en frío sobre el programa fuente
escogiendo un conjunto de datos de entrada, ejecutando manualmente
cada sentencia del programa fuente y verificando que los resultados
obtenidos son los esperados de acuerdo al conjunto de datos de
entrada.
Como una técnica de depuración, el programador debe realizar este proceso
utilizando conjuntos de datos que permitan ejecutar todos los “caminos”
posibles del programa.
Ejemplo 2: Realizar el análisis E-P-S y diseñar un algoritmo para calcular el área
de superficie de un paralelepípedo de dimensiones l (largo), a (ancho) y h (altura)
Codificación
Corrida en frío
float Area()
l = 3.0
a = 2.5
h = 7.3
AS = 2 x (3.0 x 2.5 + 3.0 x
7.3 +
2.5 x 7.3) = 95.3
{
float l, h,a, AS;
printf("Largo del
paralelepipedo = ");
scanf(“%f”,&l);
printf("Ancho del
paralelepipedo= ");
scanf(“%f”,&a);
printf("Altura del
paralelepipedo= ");
scanf(“%f”,&h);
AS = 2 * (l * a + l * h + a * h);
printf("Area de superficie del
paralelepipedo = %f", AS);
}
14. ●
Ejecución del programa
●
El programa fuente es introducido a la computadora utilizando un
programa llamado editor.
●
Una vez editado, el programa fuente es traducido por el compilador a un
programa escrito en lenguaje de máquina (código objeto), siempre y
cuando el programa no tenga errores de sintaxis (errores de gramática).
Ejemplo
if (a < b
// Falta un paréntesis que cierra
Ejecución del programa
Si el programa fuente tiene errores de sintaxis no se genera código objeto.
Los errores deben ser corregidos usando el editor y luego se el programa fuente
se debe volver a compilar.
Cuando el programa está sintácticamente correcto, el código objeto es
encadenado con las funciones de librería (otros programas) requeridas
usando un programa llamado encadenador.
El código objeto compilado y encadenado es cargado en la memoria
principal para su ejecución por un programa llamado cargador.
El código objeto compilado, enlazado y cargado (código ejecutable) es
ejecutado con los datos de entrada.
Comprobación del programa
Comprobar que el programa realiza las tareas para las cuales ha sido
diseñado y produce el resultado correcto y esperado.
Si el programa tiene errores de lógica (errores en el método de solución por
lo que las salidas obtenidas no corresponden con las salidas esperadas),
éstos deben ser corregidos en el programa fuente usando el editor, el
cual se debe volver a compilar.
Ejemplo
b = 0;
c = 5/b;
// División entre cero
15. Ejercicios
Suponga que dispone de un Robot que sigue instrucciones muy simples: mover
<dirección> <# de pasos>, tomar objeto, dejar objeto.
Proponga como trasladar un objeto desde A hasta B dando instrucciones al
Robot.
Qué suposiciones esta haciendo acerca del robot: ¿Tiene visión? ¿Escucha?
Busque en diferentes manuales de vehiculos cómo cambiar un caucho.
Busque una receta de cocina.
Busque las instrucciones de como armar algún juguete para niños.
Preguntese acerca del nivel de detalle en cada caso. Hace falta mas o menos
detalle. Critique.
Realizar el análisis E-P-S y diseñar un algoritmo para resolver los siguientes
problemas:
Cambiar el caucho a un carro.
Comprar una entrada para un concierto.
Saber si un número n es primo o no. Correr el algoritmo en frío para los
valores de
16. n = 131, n = 28, n = 7 y n = 1024.
Calcular la circunferencia y superficie de un círculo.
Un corredor de maratón recorre una distancia d en h horas y m minutos. Calcular
el tiempo medio en minutos por kilómetros. Correr el programa en frío para
los valores d = 42,195 Km., h = 2 y m = 25.
Encontrar la media de una lista indeterminada de números positivos terminada
con un número negativo. Correr el programa en frío para la lista 2, 4, 5, 6, 23, 54,
12, 65, -1.
Resolución de Ejercicios
Cambiar el caucho a un carro.
Algoritmo pinchazo
0. Inicio
1. Si el gato del carro está dañado
Llamar a un amigo
Ir a 2
sino
Sacar el gato
Poner el gato
Levantar el coche con el gato
Aflojar y sacar los tornillos del caucho
Quitar el caucho
Poner el caucho de repuesto
Poner los tornillos y apretarlos
Bajar el gato
Guardar el gato
fin_si
2. Fin
17. Introducción al Lenguaje de Programación C
Fue diseñado e implementado por Brian Kernighan y Dennis Ritchie en 1972, a
partir de los lenguajes BCPL (1967) y B (1970). Su desarrollo está estrechamente
vinculado al del sistema operativo UNIX.
Combina características de los lenguajes de alto nivel (sentencias de control y
manipulación de datos) y de los lenguajes de bajo nivel (manejo de bits).
Es independiente del hardware.
¿Cual es la diferencia entre C y C++?
C++ es una extensión de C inventado por Bjarne Stroustrup a principio de la
década de 1980 en los laboratorios Bell.
Es un lenguaje de programación híbrido. Permite usar tanto la técnica de
programación estructurada y como la técnica de programación orientada a
objetos.
Enfoques de Programación
●
Programación estructurada (evolucionó en los sesenta y setenta)
●
Programación orientada a objetos (OOP: Object- Oriented Programming)
(evolucionó en los ochenta)
Programación estructurada
Enfoque disciplinado que permite escribir programas estructurados, utilizando las
siguientes tres estructuras de control bien definidas:
Secuencial (asignación, lectura, escritura)
Decisión o selección (simple, doble, múltiple)
Repetición (repita-mientras, hacer-mientras, repita-para)
Programación orientada a acciones donde la unidad básica es la función.
Programación orientada a objetos
Encapsula datos (atributos) y métodos (comportamiento) en objetos.
18. Objetos Computacionales: Componentes de software reutilizables que
modelan objetos del mundo real.
Un objeto, en general, es un ente que puede ser percibido con alguno de los
sentidos.
La unidad minima en la POO es la clase. Una clase es a un objeto lo que una
idea es a un hecho.
Ejemplo:
Clase: Libro. Objetos: El mundo de Sofia. Hostein Gaarder. Piense como
Leonardo Da Vinci. Michael Gelb.
Clase: Planeta. Objetos: Mercurio, Venus, La Tierra.
¿ Por qué Programación Estructurada ?
Vamos a estudiar en este curso la programación estructurada por las
siguientes razones:
Los objetos se componen en parte de fragmentos de programación
estructurada.
Los métodos se implementan usando programación estructurada.
Lenguajes de Programación C/C++
Características generales
Simple.
Sintaxis Flexible.
Flujo de control estructurado.
Tipos de datos variados.
Posibilidad de abstracción de datos.
Amplia variedad de operadores.
Elementos sintácticos
19. Palabras clave
Identificadores
Delimitadores
Comentarios
Palabras reservadas en C
Las palabras listadas a continuación son reservadas del compilador y no
pueden ser utilizadas para otro propósito que no sea el predefinido.
Palabras reservadas en C
auto
break
case
char
const
continue
default
do
double
else
goto
if
float
enum
extern
float
for
int
long
return
register
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
Identificadores
Consideraciones Semanticas
●
Nombres que permiten señalar, mencionar o hacer referencia a los
diferentes objetos manipulados por un programa.
●
Deben resultar significativos, sugiriendo lo que representan.
Consideraciones Sintacticas
●
No pueden ser palabras reservadas.
●
El primer caracter debe ser una letra (ó un underscore).
●
Las letras mayusculas y minusculas son diferentes. Ej: “A” es diferente que
“a”.
●
En la mayoria de los compiladores la máxima longitud es de al menos 31
caracteres.
Ejemplos de identificadores
Ejemplos:
20. Identificadores válidos
promedio, TempMinima, _parametro_auxiliar, __p4,
Color_Pared, _VALMAX, VAL_MINIMO5
Identificadores inválidos
4promedio, -TempMinima, parámetro_auxiliar, =_p4,
8Color_Pared, °_VALMAX, ?VAL_MINIMO5
Delimitadores
Signos especiales que permiten al compilador separar y reconocer las
diferentes unidades sintácticas del lenguaje.
; (punto y coma). Se considera el de terminación, que es necesario cuando
finaliza cada una de las sentencias o declaraciones.
, (coma). Separa dos elementos consecutivos de una lista.
( ) (paréntesis). Enmarca una lista de parámetros, expresiones o
condiciones.
[ ] (corchetes). Enmarca la dimensión o el subíndice de un arreglo.
{ } (llaves). Enmarca un bloque de sentencias o una lista de valores
iniciales.
comentarios
●
Permiten que el programador documente sus programas.
●
Los comentarios dan legilibilidad al programa.
●
Deben ser actualizados con regularidad.
●
No representan ningún peso para el desempeño final del programa pues son
completamente ignorados por el compilador.
Características Semanticas:
Deben ser coherentes con el programa.
Deben ser relevantes.
Deben mantenerse al día.
Siempre deben enriquecer el programa: conceptos, gráficos, relaciones entre
funciones, etc..
21. En C los comentarios empiezan por los caracteres /* y terminan con
los caracteres */.
Pueden comprender varias líneas y estar distribuidos de cualquier forma, pero
todo aquello que está entre el /* (inicio del comentario) y el */ (fin del
comentario) es simplemente ignorado por el compilador.
Sintaxis de un comentario:
Ejemplos:
/* Esto es un comentario simple. */
/* Esto es un comentario más largo,
distribuido en varias líneas. El
texto se suele alinear por la izquierda. */
/****************************************
* Esto es un comentario de varias
*
* líneas, encerrado en una caja para *
* llamar la atención.
*
*****************************************/
Un programa simple en C
/* Evaluacion del polinomio x*x+x-1 en x=2 */
int main()
{
int x, r; // Declaracion de la variable x y r
r=x*x+x-1; // Calculo del resultado
}
Consideraciones del programa anterior:
La primera linea describe el propósito del programa.
Todo programa debe contener un punto de entrada para su ejecución:
int main()
La llave que abre { indica el comienzo del cuerpo de la
función, mientras que la llave que cierra } indica el
22. final del cuerpo de la función.
{
int x, r; // Declaracion de la variable x y r
r=x*x+x-1; // Calculo del resultado
}
Programas en C++
Esta línea dice al compilador que dos variables del tipo entero x y r, se van a
usar en el programa. El compilador reservará espacio en memoria para
estas variables durante su ejecución. Toda variable usada en un programa
debe ser declarada y se le debe asignar un tipo de dato.
int x, r;
El calculo del valor del polinomio se hace de la forma esperada:
r = x*x+x-1
Programa en C
La función principal y obligatoria de todo programa en C es la función main:
void main( )
{
Aqui va el código.
}
Sintaxis de un Prog. en C
Sintaxis formal 1
/* Comentarios */
Declaración de importaciones
Definición de constantes
⇐ Opcional
Definición de tipos
⇐ Opcional
Declaración de prototipos
⇐ Opcional
Declaración de variables globales
⇐ Opcional
void main ( )
{
23. Declaración de variables locales
⇐ Opcional
Declaración de constantes locales
⇐ Opcional
Conjunto de sentencias
⇐ Cuerpo de la función
}
Definición de funciones
⇐ Opcional
Sintaxis formal 2
/* Comentarios */
Declaración de importaciones
Definición de constantes
⇐ Opcional
Definición de tipos
⇐ Opcional
Declaración de variables globales
⇐ Opcional
Definición de funciones
⇐ Opcional
void main ( )
{
Declaración de variables locales
⇐ Opcional
Declaración de constantes locales
⇐ Opcional
Conjunto de sentencias
⇐ Cuerpo de la función
}
Elementos de un lenguaje de programación
Un sublenguaje para definir los datos:
Qué datos tenemos
Cómo les llamamos
Cómo son (tipo y/o estructura)
Qué se puede hacer con ellos
Un sublenguaje para definir los algoritmos:
Qué le hacemos a los datos
En qué orden (cuándo se lo hacemos)
Cuántas veces
Según Wirth: Programa = Algoritmo + Datos
24. Conjunto de sentencias
Estructuras de control
El proceso de diseño del algoritmo y posterior codificación del programa consiste
en definir las acciones o sentencias que resolverán el problema.
En un programa las sentencias son ejecutadas de forma secuencial y en el orden
en que aparecen escritas, a menos de que exista una indicación de salto abrupto.
Estructuras de Control
Programa lineal: Las sentencias se ejecutan secuencialmente en el orden en que
aparecen escritas.
Programa no lineal: Se interrumpe la secuencia mediante sentencias de
bifurcación.
25. Tipos de estructuras de control
La programación estructurada se caracteriza por utilizar tres estructuras de
control. Todos los programas pueden ser escritos en términos de estas
estructuras de control (Bohm y Jacopini):
●
●
●
Estructuras secuenciales
Estructuras de decisión o selección
Estructuras de repetición
Estructuras Secuenciales
Se ejecutan en secuencia sin posibilidad que la sentencia
pueda ser otra diferente de la que sigue en la secuencia.
Tipo de sentencia
Comienzo de proceso
Fin de proceso
Entrada (lectura)
Salida (escritura)
Asignación
Pseudocódigo
en inglés
begin
end
read
write
A←5óA=5
siguiente a ejecutar
Pseudocódigo
en español
Inicio
Fin
Leer
Escribir
A←5óA=5
Código
en C
{
}
scanf
printf
A=5
26. Sentencia de Entrada (Lectura)
Permite leer de la entrada estandar determinados valores y
asignarlos a
determinadas variables. La entrada estandar puede estar determinada por los
dispositivos de entrada (teclados, unidades de disco, tarjetas de red, etc.)
Notación algorítmica
Leer (lista de variables de entrada)
Leer (a, b, c)
Notación en C
scanf(“tipos”,&var1,&var 2, …,&varn);
scanf(“tipos”,&a,&b,&c);
Sentencia de Salida (Escritura)
Permite escribir los resultados de un programa. La salida puede aparecer en un
dispositivo de salida (pantalla, impresora, etc.)
Notación algorítmica
Escribir (mensajes y/o variables de salida)
Escribir (“El resultado es”, resultado)
Notación en C++
printf(“mensajes + tipos”, var1, var2, ..., varN);
printf(“El resultado es %tipo”, resultado).
Ejemplo: ¡Hola Mundo!
#include <stdlib.h>
int main()
{
printf(“¡Hola Mundo! n”);
return 0;
}
Ejemplo 2: Saludo Personalizado.
#include <stdlib.h>
27. int main()
{
char nombre[20];
printf(“Ingrese su nombre: ”);
scanf(“%s”, nombre);
printf(“Hola %sn”, nombre);
return 0;
}
Tipos Básicos de Datos en C
Recordar: Programa = Datos + Algoritmos
Entonces se necesitan:
Un sublenguaje para definir los datos:
Representación del problema en datos
Nombres de las variables
Tipos (enteros, reales, caracteres, ¿nuevos tipos?)
Operaciones sobre los tipos (sumas, restas, juntura, ¿nuevas
operaciones?, etc.)
Un sublenguaje para definir los algoritmos:
Qué le hacemos a los datos.
En qué orden (cuándo se lo hacemos).
Cuántas veces.
Conceptos Básicos
Dato: En el computador un dato siempre se resume a un conjunto de bits.
Dato
Un conjunto de reglas sobre esos bits forman un tipo de dato. Por ejemplo: un
dato de tipo entero, un dato de tipo caracter.
Dos tipos de datos básicos
1) Números: Entero, punto flotante de precisión variable, dirección de
memoria.
2) Carácter: Básicamente su utilizan para formar palabras.
28. A partir de estas dos clases de datos, los lenguajes de programación incorporan
diversos tipos de datos que son reutilizables.
Las propiedades y operadores aplicables a dichos tipos de datos nos permiten
modelar problemas del quehacer en la computación (muy amplio hoy en día,
practicamente ubicuo).
Conceptos Básicos
●
Valor
●
Variable
●
Memoria
●
Nombre
●
Tipo de dato
Valor
La definición más intuitiva de valor es similar a la de elemento perteneciente
a un conjunto, el cual representa un tipo de dato. Todos los valores del
conjunto deben cumplir la misma propiedad, y el conjunto define el tipo de
operaciones que se pueden aplicar sobre sus valores.
Ejemplo:
El valor 2 es un elemento perteneciente al conjunto A = {0, 1, 2, 3, 4, ...}
tipo de dato es equivalente a conjunto
valor es equivalente a elemento
Variable
Espacio de memoria que sirve para almacenar un valor, referenciada por un
nombre, y perteneciente a un tipo de dato.
A diferencia del valor, la variable tiene propiedades espacio-temporales, es
decir, ocupa un espacio determinado de memoria que puede almacenar un
valor distinto en cada instante de tiempo.
¿Cómo se define un instante de tiempo?
Las variables que habitan en un programa definen el estado en cualquier
instante de tiempo.
1. Se definen (declaración)
2. Se crean
3. Se modifican
29. Dentro de las modificaciones estan:
Se cargan con un valor inicial (datos de entrada)
Su valor se modifica (programa)
Llegan a un valor final (resultados de salida)
Criterios a seguir con las variables:
●
Cada variable debe tener un objetivo claro e inmutable.
●
No olvidarse de darles un valor inicial.
●
Controlar (y comprobar) que van tomando valores esperados:
regularmente aplicar predicados que deben satisfacer y notificar si
alguna se sale de lo previsto (programación defensiva).
●
Los lenguajes fuertemente tipeados obligan a declarar las variables
antes de usarlas, lo que permite chequear su existencia y la coherencia
en su uso.
Memoria
Puede ser interpretada como un conjunto de pares (variable, valor) que lleva
asociada dos operaciones: Búsqueda y Almacenamiento.
1) Memoria = {(Variable1, Valor1), ...,(Variablen, Valorn)}
2) Búsqueda(Variable, Memoria) = Valor
3) Almacenamiento(Variable, Valor, Memoria)
numero
suma
……...
……...
45
……...
-2
……...
……...
……...
Memoria = {…, (numero, 45), …, (suma, -2), ...}
30. Memoria: Asignación
Expresión sintáctica de la operación de Almacenamiento. Modifica el
contenido de una variable.
Notación algorítmica
Nombre ←Valor ó Nombre = valor
Notación en C
nombre_variable = valor;
Memoria: Asignación
numero = 45
Memoria = {…, (numero, 45), …, ...}
suma = -2
Memoria = {…, (numero, 45), …, (suma, -2) ...}
numero = 28
Memoria = {…, (numero, 28), …, (suma, -2) ...}
Cada operación de asignación (Almacenamiento) transforma la memoria de
un estado a otro respecto al tiempo.
La ejecución de un programa tendrá como efecto (sin considerar los
procesos de E/S) la transformación de la memoria inicial en otra final,
realizando un conjunto de asignaciones sobre las n variables que intervienen
en el programa, ejecutadas según un flujo de control establecido.
La asignación X ←7 equivale a decir que X es una variable a la que se le
asigna el valor 7.
La asignación X ←X + 3 evalúa la expresión derecha, en donde la variable
con nombre X tiene el valor de 7, sumándole la constante 3 y asignando el
resultado (7 + 3) = 10 a la parte izquierda de la expresión, la variable X.
De acuerdo a la programación estructurada, la asignación es una estructura
de control secuencial.
Nombre
31. identificador que consta de varios caracteres alfanuméricos, de los cuales el
primero normalmente es una letra.
Ejemplos
FechaInicio, NumeroDePersonas, Tmp10, direccion_1, direccion_2,
_EstaActivado_, Tiempo_De_Ejec_00
Memoria: Asignación
Cuádrupla V = < N, T, R, K >, donde N es el nombre de la variable, T su
tipo de dato, R una referencia de memoria asignada a la variable para su
almacenamiento, y K el valor almacenado.
Ejemplo
V = < X, Entero, 10001, 7 >
X ←7
nombre de la variable
X
tipo de dato
Entero
referencia de memoria
10001
valor
7
Tipo de dato
Es la agrupación de un conjunto de valores, sobre el cual se pueden realizar un conjunto de
operaciones.
Toda variable debe estar asociada a un tipo de dato con el que se puede determinar univocamente
el dominio de valores.
Ejemplo
El tipo de dato fecha podría estar representado por los atributos DIA, MES y AÑO, siendo
los tres de tipo entero.
Las operaciones aplicables sobre el tipo de dato fecha podrían ser:
➢
Mostrar fecha
➢
Incrementar día
➢
Incrementar mes
➢
Incrementar año
➢
Intervalo entre dos fechas
32. Ejemplo
El tipo de dato coordenada podría estar representado por los atributos X, Y y Z, siendo los
tres de tipo entero.
Las operaciones aplicables sobre coordenada podrían ser:
➢
Distancia entre dos coordenadas (puntos)
➢
Desplazar un punto
➢
Mostrar el valor de X
➢
Mostrar el valor de Y
➢
Mostrar el valor de Z
Por el hecho de que distintos valores pertenecientes a diferentes tipos de datos pueden tener la
misma representación a nivel de máquina, la especificación del tipo de dato (dominio y
operaciones aplicables) nos permite controlar la interpretación para cada uno.
Ejemplo
La secuencia de bits 01000001 (alfabeto binario de longitud 8) puede ser interpretada:
➢
Carácter ‘A’ en el tipo de dato carácter, o
➢
Entero +65 en el tipo de dato entero.
Puede clasificarse como escalar o estructurado.
➢
Escalar o simple: Aquel cuyo dominio presenta una propiedad de orden (entero, real,
carácter, lógico).
➢
Estructurado o compuesto: Aquel que se define mediante composición de tipos de datos
(vector, cadena de caracteres, matriz, registro).
Tipos de Datos en C
Los lenguajes de programación ofrecen un conjunto completo de tipos de datos escalares y
estructurados con las especificaciones del dominio y operaciones.
En este curso vamos a estudiar algunos de los tipos de datos que ofrece el lenguaje de
programación C
.
33. Tipos de Datos Escalares en C
Tipos de Datos Escalares (Numéricos) en C
Tipo Entero
Subconjunto finito de los números enteros. El tamaño del subconjunto dependerá del
número de bits que correspondan al tipo de datos. Mientras más bits mayor será el tamaño
del subconjunto.
Ej:
Entero corto (8 bits) llega hasta 255
Entero (en un Pentium IV, 32 btis) llega hasta el orden de los 4000 Megaunidades.
Tipos de Datos Escalares (Numéricos) en C++
Tipo Entero
Dependiendo del número de bits empleado en cada computadora (n), los dominios del tipo de
dato Entero varían en
a) –2 (n – 1), ..., 0, ..., 2 (n – 1) – 1 enteros positivos y negativos
Si el n = 16
–2 (16 – 1), ..., 0, ..., 2 (16 – 1) – 1
= –2 (15), ..., 0, ..., 2 (15) – 1
= -32768, …, 0, …, 32767
34. b) 0, ..., 2n – 1
enteros positivos
Si n = 16
0, ..., 216 – 1 = 0, ..., 65535
Tipo de Dato Entero en C++
Tipo
# bits
Rango
32 -2147483648 ... 2147483647
32 Idem
32 0 ... 4294967295
64 0 ... 18446744073709551615
Int
Long int
Unsigned int
Long long
Tipos de Datos Escalares (Numéricos) en C++
Tipo Real
➢
➢
Subconjunto de los números reales limitado no sólo en el tamaño, sino también en cuanto a la
precisión. Se conocen como números de punto flotante cuya representación consta de una mantisa
(parte fraccional), de una base y de un exponente (potencia a la cual se eleva la base).
Para el número 0.437875x103 se tiene:
mantisa = 0.437875
base = 10
exponente = 3
Ejemplos
0.08 3739.41 -3.7452 52.3244 -8.12 3.0
Tipo de Dato Real
Tipo
Nro. bits
Rango
Precisión
float
32
1.17x10-38 a 3.4x1038
6 dígitos decimales
double
64
2.22x10-308 a 1.79x10308
15 dígitos
decimales
Tipos de Datos Escalares (No-Numéricos)
Tipo Carácter
35. Conjunto finito y ordenado de los caracteres que la computadora reconoce (letra, dígito, signo de
puntuación, etc.)
Un carácter es almacenado en un byte usando el código de 8 bits ASCII (American Standard Code
for Information Interchange), lo que da la posibilidad de representar 28 = 256 caracteres diferentes.
Ejemplos
‘v’ ‘.’ ‘A’ ‘a’ ‘)’ ‘{‘ ‘+’ ‘9’ ‘*’
Cada caracter tiene un equivalente en el tipo entero.
Hay otros sistemas de codificación aparte del ASCII, ej UTF-8.
Tipo Nro. bits
char
8
Declaración de Variables
En C todas las variables que van a ser usadas en un programa deben ser declaradas al principio de la
función o al principio del programa.
Los objetivos de la declaración de variables son:
Asociar un tipo de dato y un identificador único a la variable. Esto también permite que el
compilador pueda verificar la correctitud de las operaciones en donde interviene la variable.
Permitir que el compilador sepa cuánto espacio de memoria se necesita para almacenar el valor
de la variable, y asignar la dirección de memoria donde este valor se va a almacenar.
tipo_de_dato lista_de_variables;
Ejemplos
int dia, mes, anio;
int edad;
unsigned int A = 347;
float pi = 3.14159;
double a, b, c;
unsigned long int B = 294967295;
long int C, distancia;
Ejemplos
float precio, sub_total;
float costo_por_unidad;
char am_pm;
char letra = ‘Z’, suma = ‘+’;
bool error = false;
Tipos de Variables
36. Variable local
Es aquella que está declarada dentro de un bloque delimitado por { }.
Sólo se puede usar dentro del bloque en el que ha sido declarada.
Variable global
Es aquella que está declarada para todo el programa, es decir, fuera de cualquier bloque o
función. Retiene su valor durante la ejecución de todo el programa.
Declaración de Variables Locales: Ejemplo 1
#include <stdio.h> ⇐ importacion de encabezados
int main ()
{
double base = 10.5, ⇐ declaración de vars.
altura = 2.5,
superficie;
CUERPO DE LA FUNCION
}
Bloque
Función
Declaración de Variables Locales: Ejemplo 2
#include <stdlib.h> ⇐ biblioteca
char logico;
⇐ variable global
void main () {
int i, j = 0, k; ⇐ variable local
char car1, car2;
float dividendo, divisor;
int x, y, z;
char indicador = 1;
CUERPO DEL PROGRAMA
}
37. Declaración de Variables Locales: Ejemplo 3
#include <stdio.h>
void main ()
{
double x = 2.0;
printf(“%f”,x);
⇐ imprime 2.0
{
printf(“%f”,x);
⇐ imprime 2.0
double x = 3.0;
printf(“%f”,x);
⇐ imprime 3.0
}
printf(“%f”,x);
B1
B2
⇐ imprime 2.0
}
Declaración de Variables Locales: Ejemplo 4
void main( )
{
int miEntero;
miEntero = 503;
{
int otroEntero;
otroEntero = miEntero;
}
}
Declaración de Variables Globales y Locales: Ejemplo
#include <stdio.h>
int resultado;
int main()
{
int x, y, z;
printf(“Introduzca tres numeros enteros: “);
scanf(“%i%i%i”,&x,&y,&z);
/* Calcular el producto de los tres numeros */
resultado = x * y * z;
printf(“El producto de es %i”, resultado);
return 0;
}
B1
B2
38. Ejemplo:
#include <stdio.h>
int main()
{
int grad_c, grad_f;
int intervalo;
intervalo = 20;
grad_c = 0;
inicio:
printf("Cantidad de grados centígrados: %i n", grad_c);
/* NO FUNCIONA ASI: grad_f = 5/9*(grad_c – 32) */
grad_f = 5*(grad_c - 32)/9;
printf("Conversión a grados farenheit: %i n", grad_f);
grad_c = grad_c + 20;
if (grad_c <= 300)
goto inicio;
printf("Fin de la ejecuciónn");
}
Constantes
Constante
Valor que no cambia durante la ejecución de un programa.
Puede ser numérica entera, numérica real, lógica, carácter.
Definición de Constantes (Globales)
#define identificador valor
Asigna un valor a un identificador.
Un proceso previo a la compilación sustituirá el identificador por el valor en cualquier parte del
programa donde aparezca el identificador.
39. Definición de Constantes (Globales)
Ejemplos
#define PI 3.14159
#define MAXIMO 256
#define PRIMERALETRA ‘A’
#define MENSAJE "Introduzca su nombre:"
Ejemplo
#include <stdio.h>
#define LONGITUD 32
int main ()
{
int l1 = LONGITUD, x;
x = LONGITUD + 1;
printf(“x = %i“,x);
}
Declaración de Constantes (Locales)
const tipo_de_dato identificador = valor;
void main ( )
{
Declaración de constantes
// Opcional
Declaración de variables locales // Opcional
Conjunto de sentencias
}
void main ( )
{
const int LONGITUD = 32;
int ln = LONGITUD;
CUERPO DEL PROGRAMA
}
// Cuerpo de la funcion
40. Ejemplos
void main()
{
const float pi;
// Error: pi debe ser inicializada
// en la declaracion
pi = 3.14159;
// Error: no se puede modificar
// el valor de una constante
}
Ejemplo: Dado el radio de una esfera, calcular su área y su volumen
#include <iostream.h>
#define CUATRO 4.0
float radio;
int main ()
{
const float PI = 3.14159;
float area, volumen;
printf(“De el radio de la esfera: ”);
scanf(“%f”,&radio);
area = CUATRO * PI * radio * radio;
printf(“Area = %fn“,area);
volumen = area * (radio/3);
printf(“Volumen = %fn“,volumen);
return 0;
}
41. Recuerde.
Al definir o declarar una constante o variable se reserva espacio de memoria principal y se etiqueta con
el identificador correspondiente.
Ejercicios
Definir cada una de las siguientes constantes (consulte las fuentes apropiadas para los valores que se
necesiten).
A) Como globales
B) Como locales
613
- Número de Avogrado
613.0
- Masa del electrón (en Kg)
-613
- Diámetro atómico (en cm)
‘6’
“PD-10”
-3.012x1015
17x1012
e