You are on page 1of 42

Lenguajes de Programación y Programas

Un programa de computadoras es un conjunto de instrucciones usadas para


operar una computadora y producir un resultado específico. El proceso de
escribir un programa o conjunto de programas (software) se conoce como
programación. El conjunto de instrucciones que se utiliza para construir
programas es el lenguaje de programación.

Lenguaje de Máquina

Los programas ejecutables consisten de secuencias de instrucciones


compuestas por números binarios. En su nivel más fundamental los únicos
programas que pueden ser utilizados para operar una computadora son los
programas en lenguaje de máquina o código binario.

Lenguaje de Ensamblaje

El ensamblaje (assembly) es un lenguaje de programación que utiliza


notación simbólica para escribir las secuencias de instrucciones que
componen los programas. Un ensamblador en un programa que traduce ó
convierte las instrucciones escritas en lenguaje de ensamblaje a lenguaje de
máquina. El lenguaje de máquina y ensamblaje son lenguajes de bajo nivel
ya que ambos están directamente atados a un tipo de computadora, o sea,
son dependientes de la máquina.

Lenguaje de Alto Nivel

Los lenguajes de programación de alto nivel se utilizan para escribir


programas con instrucciones que asemejan un lenguaje natural escrito como
el inglés y pueden correr o ejecutar en una variedad de computadoras.
Ejemplos de lenguajes de programación de alto nivel son FORTRAN, BASIC,
Pascal y C++. Los programas escritos en el lenguaje de alto nivel o
ensamblaje se les denomina código fuente o programa fuente.

Una vez un programa es escrito en un lenguaje de alto nivel o ensamblaje


este tiene que ser a traducido al lenguaje de máquina para su ejecución. La
traducción se puede llevar a cabo de dos formas: con un compilador o un
interpretador.

Un compilador es un programa que traduce todas la instrucciones del


programa escrito en lenguaje de alto nivel y crea una versión en código
binario que puede ser ejecutada. Un interpretador es un programa que
traduce y ejecuta una instrucción a la vez del programa escrito en lenguaje
de alto nivel.

Programación Orientada a Procedimientos y Objetos


En un lenguaje de programación orientado a procedimientos las
instrucciones se usan para crear unidades o módulos que se conocen como
procedimientos o subrutinas. Los procedimientos aceptan como entrada los
datos y transforman estos datos para producir como salida unos resultados
específicos. Los lenguajes orientados a objetos surgen por el desarrollo de
pantallas gráficas y apoyo a interfaces gráficas de usuario o GUI, por sus
siglas en inglés, capaces de desplegar ventanas múltiples. El lenguaje C++
contiene elementos de ambos tipos de programación.

Programas de Aplicaciones y Pogramas de Sistema


Los programas de aplicaciones tienden a estar diseñados para realizar
tareas particulares. Ejemplos de programas de aplicaciones son:
procesadores de palabras, hojas de cálculo, programas para presentaciones
y conversiones. Se dividen en dos categorias:
• Programas Comerciales (Software Packages)
• Programas escritos por el usuario (User-Written Software)

Programas Comerciales
Son paquetes que se pueden comprar de cualquier desarrollador de
programas. Fuentes: Tiendas, catálogos, asociaciones industriales y
compañías de desarrollo de programas. Normalmente incluyen más de un
programa. (Ejemplos: Lotus, MS Office).

Programas escritos por el usuario


Se crean cuando no existen aplicaciones que atiendan un problema
particular de un individuo o una organización. Mayormente se hacen
utilizando lenguajes de alto nivel.

Programas de Sistema
Los programas de sistema son todos aquellos programas necesarios para
que una computadora pueda operar. Los sistemas operativos son ejemplos
de programas de sistema.

Sistema Operativo
Un sistema operativo es un conjunto de programas que controlan todos los
recursos del sistema. Los sistemas operativos forman parte de los
programas del sistema (System Software – OS, Utilities, Translators). El
sistema operativo se puede describir como enlace (interface) entre los
programas de aplicaciones (software) y los dispositivos del sistema
(hardware). Sirve dos propósitos principales:
• Proveer un conjunto de funciones comúnes a la computadora
(funciones de I/O).
• Proveer independencia de los dispositivos (nuevo hardware).

Solución de Problemas y Desarrollo de Programas

Los programas se usan para solucionar problemas, por lo tanto escribir un


programa es casi el último paso en el proceso de solucionar un problema. El
método utilizado por diseñadores de programas profesionales se le llama
Procedimiento de Desarrollo de Programas y consiste de tres fases:
Desarrollo y Diseño, Documentación y Mantenimiento.

Procedimiento en el Desarrollo de Programas

Fase 1. Desarrollo y Diseño

Paso 1. Analizar el problema

Este paso requiere asegurarse que el problema es claramente


definido y entendido. El problema está claramente definido cuando la
persona que está analizando el problema logra establecer y entender
cuáles son los resultados (outputs) requeridos y cuáles son las
entradas (inputs) necesarias. Para esto el analista tiene que tener un
entendimiento de cómo las entradas pueden ser utilizadas para
producir los resultados deseados.

Paso 2. Desarrollar una solución

En este paso se establecen la secuencia de pasos a seguir para


resolver el problema (algoritmo). El algoritmo debe ser refinado y
probado varias veces hasta lograr la solución del problema.

Paso 3. Codificar la solución

Este es el paso en el cual se hace la escritura del programa y la


implementación de la solución consiste en convertir el diseño hecho
en el programa de computadoras. Si los pasos anteriores se han
hecho correctamente, escribir el programa se vuelve un procedimiento
mecánico. En un programa bien diseñado, las instrucciones que
componen el programa estarán de conformidad con cuatro estructuras
de control: secuencia, selección, iteración e invocación.

Paso 4. Prueba y corrección del programa

El propósito de probar el programa es verificar que el programa


funciona correctamente y satisface sus requerimientos. En teoría, las
pruebas revelarían todos los errores en el programa (en terminología
de computadoras a un error de programación se le llama "bug"). Para
encontrar errores en los programas es importante desarrollar un
conjunto de datos de prueba por medio de los cuales podemos
determinar si el programa produce los resultados correctos.

Fase 2. Documentación

Documentar los programas es tan importante que el no documentar


adecuadamente resulta con frecuencia en trabajo inútil o perdido causando
repetición de trabajo y consecuentemente prolongar la solución del
problema. Mucha de la documentación crítica es creada durante los pasos
de análisis, diseño, codificación y prueba del programa. Hay esencialmente
cinco documentos para toda solución de un problema:

1. Descripción del programa

2. Desarrollo de algoritmos y cambios


3. Listado del programa con suficientes comentarios

4. Corridas de prueba

5. Manual de usuario

Fase 3. Mantenimiento

Esta fase consiste en continuamente corregir problemas, revisar para


satisfacer necesidades cambiantes y añadir funciones. El manteniento con
frecuencia conlleva el mayor esfuerzo, la mayor fuente de ingresos y la fase
ingenieril de mayor duración.

Algoritmos (Algorithms)

En general, un algoritmo es un procedimiento por pasos para la solución de


un problema en un tiempo finito. En programación de computadoras, un
algoritmo es una secuencia lógica de instrucciones que tiene que
terminar y describe como los datos (“inputs”) son procesados para
producir los resultados (“outputs”) deseados.

Flujogramas (Flowcharts)

Diagrama simbólico que representa las actividades y el flujo de la lógica


en un programa. Las flechas representan el flujo direccional de
control dentro del programa. El programador utiliza la secuencia de
pasos en un flujograma como modelo para escribir un programa
con la misma secuencia de pasos.

Indicadores de flujo

Start

COS(X)

N=X+Y

Condición
Read or Write

Stop

Input / Output

Terminal

Decisión

Proceso

Función

Conector

Símbolos básicos de Flujogramas


Programación en C++

Programación Modular

Los programas cuya estructura consiste de segmentos interrelacionados,


arreglados en una forma lógica y en un orden fácil de entender para formar
una unidad completa e integrada se conocen como programas modulares.
Los programas modulares son más fáciles de desarrollar, corregir y
modificar. El lenguaje C++ es un lenguaje de programción de alto nivel que
permite hacer programación modular.

Identificadores
Un identificador es cualquier combinación de letras, dígitos y subrayados
(underscore) seleccionados de acuerdo a las siguientes reglas:

1. El primer caracter tiene que ser una letra o subrayado (_).

2. Solamente letras, dígitos o subrayados pueden seguir a la letra inicial.


No se permiten espacios en blanco.

3. Un nombre no puede ser una palabra reservada (keyword). Las palabras


reservadas son palabras que separa el lenguaje para propósitos
especiales y solamente se pueden utilizar en la manera especificada.
(Ver tabla 2.1 página 34 del libro de texto).

4. El número máximo de caracteres en un nombre es 31.

5. Los nombres deben tener sentido (mnemonics).

6. Letras mayúsculas y minúsculas son diferentes (case-sensitive).

Tipos de Datos

Enteros – los valores enteros pueden tomar cualquier valor numérico


positivo, negativo o cero y sin punto decimal. Algunos ejemplos de valores
enteros son:

0 5 - 10 - 26351

Reales – los valores reales pueden tomar cualquier valor numérico positivo,
negativo o cero y con punto decimal. Algunos ejemplos de valores reales
son:

10.6 - 34. 459.0 +0.2

Caracteres – los caracteres incluyen todas las letras mayúsculas y


munúsculas, los dígitos del 0 al 9 y símbolos especiales como + $ . , !. Un
caracter simple es cualquier letra, dígito o símbolo especial encerrado entre
comillas sencillas. Ejemplos de valores tipo caracter son:

‘A’ ‘$’ ‘7’ ‘q’

"Escape Sequences" – son un tipo de dato especial que se producen con


ciertas combinaciones de caracteres encerrados entre comillas dobles y
precedidos por “backslash” (\). Estas combinaciones le indican a la
computadora que interprete los caracteres de manera distinta (escapar de la
interpretación normal). (Ver tablas 2.4 y 2.5 en la página 54 del libro de
texto). Algunos ejemplos de "escape sequences" son:

“\n” (new line) “\a” (alarm)

Tipos de datos simples en C++

Tipo Ejemplo Tamaño Rango Min Rango Max


char ‘C’ 1 0 255
short -15 1 -128 127
int 1024 2 -32768 32767
unsigned 42325 2 0 65535
int
long 262144 4 -2147483648 2147483637
float 10.5 4 3.4*(10-38) 3.4*(1038)
double 0.00045 8 1.7*(10-308) 1.7*(10308)
long 1e-8 8 Igual que doble Igual que doble
double

Variables

Una variable es una localización en memoria a la cual se le asigna un


nombre (identificador) y donde se almacena un valor de algún tipo de
dato.

Ejemplos

Maximo _valor Pregunta Vector1 numero_mayor

Declaración de variables

Todas las variables tienen que ser declaradas antes de ser utilizadas. Las
variables se pueden declarar en dos lugares dentro de un programa:

· al principio de un programa o bloque de código


· en el punto de utilización
Ejemplos

int Numero ; float PI ; char a , b , c ;

Constantes

Hay cuatro tipos de constantes en C++:

Literales – estas constantes son valores literales como los siguientes:

Entero 5 0
Caracter ‘A’ ‘n’
Real 5.25 3.14
String “El promedio es ” “Apellido Paterno”

Definidas – Las constantes definidas son identificadores que se asocian con


valores literales constantes y que toman determinados nombres. Se definen
con la directiva “#define”. Ejemplos:

#define PI 3.14159 #define NUMERO 50

Declaradas – Las constantes declaradas son como variables, sus valores se


almacenan en memoria, pero no se pueden modificar. Ejemplos:

const float PI 3.14159 ; const int 20 ;

Enumeradas – estas constantes permiten crear listas de elementos afines.


Ejemplos:

enum Colores { Rojo, Amarillo, Verde, Azul } ;

enum Logica { False, True } ;

Cualificador const

Este cualificador especifica que el identificador declarado solo se puede leer


después que ha sido inicializado y su valor no puede ser modificado. Se usan
nombres simbólicos y se igualan a números (constantes).
Ejemplos: const float PI = 3.14159;

cosnt double DENSITY = 0.238;

Operaciones de Asignación

Se usan para asignar valores a variables y para realizar cómputos en


operaciones de asignación.

Ejemplos: length = 25; width = 17.5;

Sum = 3 + 7; diff = 15 – 6;

Control del flujo – todos los operandos usados en una expresión tienen que
tener valores asignados antes de evaluar la expresión.

Las operaciones de asignación multiples son permitidas en C++ y todos los


operadores tienen la misma precedencia y asociatividad de derecha a
izquierda.

Ejemplos: a = b = c = 25; – esta expresión se evalúa en la secuencia


c = 25, b = c , a = b.

El valor de la expresión en el lado derecho del operador de asignación es


convertido al tipo de datos de la variable en el lado izquierdo.

Si ambos operandos en una expresión son enteros el resultado es entero. Si


un operando es real (float) el resultado de la operación es real (double). (ver
tabla 2.6, pag 58)

El resultado de una operación aritmética con valores reales (float) siempre es


convertido temporalmente a doble precisión.

Variaciones de Asignación

Una ecuación como sum = sum + 10 es evaluada en dos pasos.

1. Primero se evalúa la suma de sum + 10.


2. Luego el resultado se guarda en sum.

Esta asignación origina las siguientes variaciones:

 += suma (sum += nuevo_valor)


 -= resta (sum -= nuevo_valor)
 *= multiplicación (sum *= nuevo_valor)
 /= división real (sum /= nuevo_valor)
 %= división módulo (sum %= nuevo_valor)

Ejemplos: numero = 6

numero += 4 6 + 4 = 10 numero=10

numero -= 5 6–5=1 numero=1

numero *= 3 6 * 3 = 18 numero=18

numero /= 2 6/2=3 numero=3

numero %= 6 6%6=0 numero=0


Acumulador y Contador

Asignaciones para acumulación son muy comúnes en programación.

Ejemplo: sum = sum + nuevo_valor (Equivalente sum += nuevo_valor)

Asignaciones para contar son parecidas a las de acumulación pero con el


operando de incrementación o decrementación fijo.

Ejemplo: i = i + 1 (Equivalente i++)

Prefix ó Postfix

Prefix Increment Operator Postfix Increment Operator

k = ++n; k = n++

Equivale a: n = n +1; k = n; Equivale a: k = n; n = n + 1;

Funciones Matemáticas de la Biblioteca

C++ provee una biblioteca de funciones estándar preprogramadas, pero


antes de usarlas es necesario conocer lo siguiente:

• El nombre de la función matemática deseada.

• Que hace la función.

• Tipos de datos requeridos por la función.

• Tipo de dato del resultado que retorna la función.

• Cómo incluir la biblioteca.

Ejemplos: sqrt(4) pow(2,3)


Vea las Tablas 3.4 y 3.5 en el libro de texto (página 133.) Para utilizar las
funciones de la biblioteca de C++ es necesario incluir el archivo de cabecera
math.h con la siguiente instruccion del preprocesador:
#include<math.h>.

Objeto cout

Un objeto de salida que envía los datos que se le dan al dispositivo de salida
estándar. Este objeto muestra en el monitor los datos que se le pasen
después del operador de inserción (<<). Los datos utilizados con el objeto
cout pueden ser strings, variables y valores literales.

String – en C++ un string es cualquier combinación de letras, números y


caracteres especiales encerrados en comillas dobles.

Ejemplos:

cout << “Hello World”; cout << numero;

Formato de Números en Salida de Programas

El formato de números presentados por el objeto cout pueden ser


controlados por medio de manipuladores de campos incluídos en cada
stream de salida.

Manipuladores comúnmente usados para manipular la salida.

Manipulador Acción
setw(n) Fijar el ancho del campo a n espacios
setprecision(n) Fijar la precisión de punto decimal a n sitios
setiosflags(flags) Fijar los indicadores (“flags”)
dec Fijar la salida para despliegue decimal
hex Fijar la salida para despliegue hexadecimal
oct Fijar la salida para despliegue octal

Formatos para los indicadores con setiosflags().


Indicadores(flags) Significado
ios::showpoint Siempre muestra el punto decimal.
ios::showpos Muestra signo en números positivos.
ios::fixed Muestra números en convención de punto
decimal fijo (no en notación exponencial).
ios::scientific Usar notación exponencial en la salida.
ios::dec Mostrar como número decimal.
ios::oct Mostrar como número octal.
ios::hex Mostrar como número hexadecimal.
ios::left Justificar la salida a la izquierda.
ios::right Justificar la salida a la derecha.

E jemplos:

• cout << “|” << setw(6)


<< setiosflags(ios::fixed)
<< setprecision(3)
<< 25.67 << “|”;

causaría la siguiente salida: |25.670|

• cout << “|”


<< setw(4)
<< setiosflags(ios::left)
<< 142 << “|”;

causaría la siguiente salida: |142 |

El manipulador de ancho del campo (setw()) está en efecto para el próximo


grupo de datos que pasen a cout.
• cout << setiosflags(ios::fixed)
<< setiosflags(ios::showpoint)
<< setprecision(4);

Obliga todos los números con punto decimal subsiguientes que sean
pasados a cout, a ser mostrados con punto decimal y cuatro sitios
decimales.

Note que el manipulador de ancho del campo [setw() ] tiene que estar
incluído para cada ocurrencia de un número insertado en los datos que son
enviados al objeto cout y que el manipulador solamente aplica a los
próximos datos que le siguen inmediatamente. Además, en sus programas
que utilizarán manipuladores de salida, es indispensable incluir el archivo de
cabecera iomanip.h con la instrucción del preprocesador
#include<iomanip.h>.

Estilo de Programación

Los programas en C++ empiezan su ejecución al comienzo de la función


main(). Cada programa solo puede tener un punto de comienzo y todo
programa en C++ contiene una y solo una función main(). Todas las
instrucciones que componen la función main() estan encerradas entre llaves {
} siguiendo el nombre de la función. Los espacios son ignorados por el
compilador.

Se sugiere el siguiente formato para escribir los programas en C++:

#include<iostream.h>
int main()
{
instrucciones del programa;

return 0;
}

Comentarios

Los comentarios son explicaciones hechas dentro del programa que sirven
para clarificar los programas y se pueden ubicar en cualquier parte del
programa sin afectar su ejecución. La computadora ignora todos los
comentarios. Los comentarios de linea comienzan con dos diagonales // sin
espacio entre ellas y continuan hasta el final de la linea. El final de la linea
marca el final del comentario. Los comentarios de bloque comienzan con
una diagonal seguida de un asterisco y sin espacio entre ellos /* y se cierran
con un asterisco seguido de una diagonal sin espacio entre ellos */.

Operaciones Aritméticas
Los números enteros y reales se pueden sumar, restar, multiplicar y dividir.
Las operaciones aritméticas simples consisten en un operador aritmético que
conecta dos operandos. (operando operador operando)

Ejemplos de expresiones aritméticas:

3+7
18 - 3
12.62 + 9.8
.08 * 12.2
12.6 / 2

El valor de cualquier expresión aritmética se puede desplegar en la pantalla


con el objeto cout. Para hacer esto tenemos que pasar el valor deseado a
este objeto, como se muestra en el siguiente ejemplo:

cout << (6 + 15);

Resumen de Operadores Aritméticos

Operación Operador Tipo Operando Resultado


Ambos enteros
Entero
Adición + Binario
Un operando no es
Doble precisión
entero
Ambos enteros
Entero
Sustracción – Binario
Un operando no es
Doble precisión
entero
Ambos enteros
Entero
Multiplicación * Binario
Un operando no es
Doble precisión
entero
Ambos enteros
Entero
División / Binario
Un operando no es
Doble precisión
entero
Ambos enteros Entero
Módulo % Binario
Un entero Entero
Un operando de
punto flotante Doble precisión
Negación – Unario
o un operando de Doble precisión
doble precisión

Reglas para escribir expresiones aritméticas que contienen mas de un


operador aritmético.

1. Dos símbolos de operadores aritméticos binarios no se pueden escribir


juntos.

Ejemplo: 5 * % 6 es incorrecto,
porque tiene los símbolos * y % están juntos.

2. Se debe usar paréntesis para formar grupos y todas las expresiones


encerradas entre parentesis son evaluadas primero.

Ejemplo: (6 + 4) / (2 + 3)

3. Los paréntesis pueden estar a su vez encerrados en mas niveles de


paréntesis y son evaluadas de adentro hacia afuera.

Ejemplo: (2 * (3 + 7) ) / 5

4. Los paréntesis no se pueden usar para multiplicación.

Ejemplo: (3 + 4) (5 + 1) es incorrecto;
la expresión correcta es (3 + 4) * (5 + 1)

Precedencia y Asociatividad

Precedencia Asociatividad
unario – derecha a izquierda
* / % izquierda a derecha
+– izquierda a derecha

Objeto cin
Se usa para entrar datos a un programa mientras se está ejecutando.
Permite al usuario entrar un valor al terminal (directamente del teclado). El
valor entrado por el usuario es almacenado directamente en una variable.

Cuando un programa encuentra una instrucción con cin, la computadora


detiene la ejecución del programa y acepta datos del teclado. Después que
el usuario entra sus datos y presiona la tecla de enter, el objeto cin almacena
los datos en la variable que aparece después del operador de extracción
(>>).

Prompt – un “string” de salida para indicarle al usuario que puede entrar


datos.

Al igual que el objeto cout, el objeto cin hace conversiones del tipo de datos.

Ejemplos: float num1, num3; int num2;

• cin >> num1 >> num2 >> num3

si el usuario entra los siguientes datos:

56 22.879 33.923

se asignan valores como sigue:

num1 = 56.0 num2 = 22 num3 = .879

Instrucción if

La instrucción if – else es la forma más simple de la estructura de


decisión en C++. La sintaxis de esta estructura es como sigue:

if (condición)

instrucción1 – si la condición es cierta;

else

instrucción2 – si la condición es falsa;


Cuando se ejecuta la instrucción if, la condición es evaluada primero para
determinar su valor numérico, que entonces es interpretado como cierto o
falso. Si el valor de la expresión es distinto de cero se ejecuta la instrucción
que sigue a la condición (instrucción1). Si el valor de la expresión es
cero se ejecuta la instrucción que sigue a la palabra else
(instrucción2).

La instrucción if puede ser usada sin la sección else. Esta estructura


decisional modificada toma la forma general:

if (condición)

instrucción – si la condición es cierta;

Cuando se ejecuta la instrucción if, la condición es evaluada primero para


determinar su valor numérico, que entonces es interpretado como cierto o
falso. Si el valor de la expresión es distinto de cero se ejecuta la
instrucción que sigue a la condición. Si el valor de la expresión es cero
se ejecuta la próxima instrucción en el programa.

Condición

Comúnmente, en una instrucción if, la condición es una expresión


relacional. Una expresión relacional simple consiste de un operador
relacional que compara dos operandos. Cada operando en una expresión
relacional puede ser una variable o una constante.

Datos Booleanos – Los datos booleanos están restringidos


a los valores TRUE ó FALSE. Tradicionalmente, C++ no
tiene incorporado apoyo a datos booleanos. Normalmente
se utilizan valores enteros, donde 0 (cero) representa el
valor FALSE y 1 (uno) representa el valor TRUE. (En C++ el
valor cero representa FALSE y un valor distinto de cero
representa TRUE.)

Operadores Relacionales

Operador Significado Ejemplo


== Equal To area == 100
!= Not Equal To numero != 0
> Greater Than radio > 1
< Less Than edad < 30
>= Greater Than or Equal To temp >= 98.6
<= Less Than or Equal To tax <= 6.6

Operadores Lógicos

Los operadores lógicos se utilizan para crear condiciones o expresiones


relacionales complejas. Los operadores lógicos son AND, OR y NOT y
estos se representan con los símbolos &&, || y !, respectivamente. (La
precisión de valores numéricos reales (float) puede causar resultados
inesperados.)

Ejemplos de expresiones lógicas:

(voltage > 48) && (milliamp < 10) ! complete (i == j) || ((a < b) ||
complete

Instrucción dentro del if

En un if siempre se ejecuta una instrucción, dependiendo del resultado de


la condición. La instrucción que se ejecuta puede ser una instrucción
compuesta, en cuyo caso se ejecutan las instrucciones encerradas dentro de
llaves {}.

Ejemplo:

if (condición)

instrucción1;
instrucción2;

instrucción3;

… ;

else

instrucción4;

instrucción5;

instrucción6;

… ;

Además de instrucciones compuestas, la instrucción que se ejecute dentro


de un if puede ser otra instrucción if. Esta modalidad se conoce comi if
anidado (nested if).

Ejemplo:

if (condición1)

if (condición2)

instrucción1;

else

instrucción2;
En general, se debe evitar el uso de if anidados en más de un nivel.

La instrucción switch

La instrucción switch provee una alternativa para el if anidado en casos


que comparan el valor de una expresión entera a un valor específico. La
forma general de esta instrucción es como sigue:

switch (expresión)

case valor_1:

instrucción1;

instrucción2;

… ;

break;

case valor_2:

instrucciónm;

instrucciónn;

…;

break;

.
case valor_n:

instrucciónw;

instrucciónx;

… ;

break;

default:

instrucciónaa;

instrucciónbb;

… ;

Ejecución de la instrucción switch

La palabra switch identifica el comienzo de la instruccción. La expresión


entre paréntesis es evaluada y el resultado es comparado a las varias
alternativas contenidas dentro de la instrucción compuesta. La expresión
tiene que resultar en un valor entero.

La palabra case identifica los valores individuales que serán comparados al


valor que resulte de la expresión. El valor resultante de la expresión es
comparado con cada uno de los valores en el orden en que aparecen hasta
encontrar un valor igual entre los casos. Cuando se encuentra un valor igual
la ejecución comienza con la instrucción que le sigue al case.

El número de casos (case) no está limitado y puede ser en cualquier orden.


Si el valor resultante de la expresión no se encuentra entre los casos, no se
ejecuta ninguna de las instrucciones, a menos que se encuentre la palabra
default. La palabra default es opcional y opera en la misma forma que
else en un if. Si el valor de la expresión no se encuentra entre los casos,
la ejecución comienza con la instrucción que le sigue a default.
Una vez se localiza un punto de entrada en la estructura de switch, todos
los casos que faltan por evaluar son ignorados y la ejecución continúa hasta
el final de la instrucción compuesta, a menos que se encuentre la palabra
break. Esta es la razón para la palabra break, identificar el final de un caso
particular y causar la salida inmediata de la instrucción switch.

Estructuras de Repetición

Existen tres tipos de estructuras de repetición en C++:


1. estructura while
2. estructura for
3. estructura do-while

Las estructuras de repetición tienen cuatro elementos esenciales:


a. Instrucción de repetición que define los límites de la sección de código
que se repite y controla si el código se ejecuta o no.
b. Condición a ser evaluada para decidir si se ejecuta el código. Si la
condición es cierta, se ejecuta el código.
c. Instrucción de inicialización para fijar la condición inicial y siempre
precede a la condición.
d. Instrucción de cambio en la condición para detener el ciclo de
repetición.

Pretest – la condición es evaluada al principio del ciclo. (while, for)


Posttest – la condición es evaluada al final del ciclo. (do-while)

Fixed count – la condición se utiliza para llevar cuenta del número de veces
que se repite el ciclo.
Variable condition – la condición no depende de un conteo. (interactivo)

Ciclo infinito – ciclo que nunca termina.

break – obliga la terminación del ciclo; se puede utilizar con switch, while
y do-while.

continue – obliga a comenzar la próxima iteración del ciclo; solamente se


puede utilizar con while, do-while y for.
Sentinelas

Nested loops
Ciclo while
while (expresión)
Instrucción;

La instrucción que sigue a la expresión puede ser compuesta, o sea un


conjunto de instrucciones encerradas entre llaves {}.

Ejemplo:

Escriba un programa en C++ para obtener la suma de los números del 1 al


10 (1+2+ . . . +10). El programa tiene que escribir el resultado de cada suma.

#include<iostream.h>
void main()
{
int Numero,Suma;
Suma = 0;
Numero = 1;
while (Numero <= 10)
{
Suma = Suma + Numero;
cout << Suma << endl;
Numero = Numero + 1;
}
}

Ciclo for
for (valor inicial; expresión; incremento)
Instrucción;

Ejemplo:
Escriba un programa para obtener la suma de los números pares entre 1 y
25. Los números pares se obtienen usando la función %. Por ejemplo si 50
% 2 es igual a 0 significa que 50 es par. El resultado de la función %
(módulo) es el residuo de la división. El programa tiene que escribir el
resultado de cada suma.

#include<iostream.h>
#include<math.h>
void main()
{
int Numero,Suma,Residuo;
Suma = 0;
for (Numero = 1;Numero < 26; Numero = Numero + 1)
{
Residuo = Numero % 2;
if (Residuo == 0)
{
Suma = Suma + Numero;
cout << Suma << endl;
}
}
}
Ciclo do-while
do
Instrucción;
while (expresión);

Ejemplo:
El siguiente programa en C++ recibe dos valores entrados por el usuario y
los almacena en las variables A y L respectivamente. Luego los muestra en
la pantalla y después los compara. Si los valores son distintos se muestra un
mensaje y se repite el ciclo. Si son iguales se muestra un mensaje y se
termina el ciclo.

#include<iostream.h>
void main()
{
int A,L;
do
{
cout << "Entre valor de A \n";
cin >> A;
cout << "A = " << A << endl;
cout << "Entre valor L \n";
cin >> L;
cout << "L = " << L << endl;
if (A == L)
cout << "Los valores son iguales" << endl;
else
cout << "Los valores son distintos" << endl;
}
while (A != L);
}
Modularidad y Uso de Funciones

Declaraciones de Funciones y Parámetros

El uso correcto de funciones en C++ envuelve dos cosas: la función misma y


como interacciona con otras funciones, como main(). Esto incluye pasar
datos correctamente hacia una función cuando esta es invocada y los
valores que retorna.

Una función es invocada ó utilizada dándole un nombre y pasando datos a


esta en forma de argumentos dentro de los paréntesis después del nombre
de la función. Los argumentos son pasados por valor (by value), o sea la
función que invoca le pasa datos (valores).

Ejemplo: Program 6.2 (página 298)

#include <iostream.h>

void FindMax(int, int); // the function declaration (prototype)

int main()
{
int firstnum, secnum;

cout << "\nEnter first number: ";


cin >> firstnum;
cout << "\nEnter second number: ";
cin >> secnum;

FindMax(firstnum, secnum); // the function is called here

return 0;
}
void FindMax(int x, int y)
{ // start of function body
int maxnum; // variable declaration

if (x >= y) // find the maximum number


maxnum = x;
else
maxnum = y;

cout << "\nThe maximum of the two numbers is "


<< maxnum << endl;

return;
} // end of function body and end of function

Retorno de un Valor
La función invocada puede retornar a lo sumo un solo valor directamente.
Para retornar un valor, la función tiene que hacer uso de la instrucción
return. El formato de la instrucción return es como sigue:

return expresion;

Ejemplo:

#include <iostream.h>
#include <iomanip.h>

double Suma(int, int); // declaracion (prototipo)

int main()
{
int num1, num2;
double resultado;

cout << "\nEntre un numero: ";


cin >> num1;
cout << "\nEntre un segundo numero: ";
cin >> num2;

resultado = Suma(num1, num2); // invocacion de funcion Suma


cout << setiosflags(ios::fixed)
<< setprecision(1)
<< "\n"
<< num1 << " + " << num2 << " = " << resultado
<< "\n\n";

return 0;
}

// Funcion Suma

double Suma(int X, int Y)


{
return X + Y;
}

Retorno de Multiples Valores


Los argumentos de una función pueden pasar datos por referencia (by
reference), o sea, en lugar de pasar valores, se pueden pasar referencias o
direcciones de las localizaciones de los datos. De esta forma, la función
invocada tiene acceso directo a las variables de la función que invoca. En
C++ una declaración de parámetro por referencia tiene sintaxis como en el
siguiente ejemplo.

Ejemplo: Programa 6.8 (página 323)

#include <iostream.h>

void newval(float&, float&); // prototype with two reference


parameters

int main()
{
float firstnum, secnum;

cout << "Enter two numbers: ";


cin >> firstnum >> secnum;
cout << "\nThe value in firstnum is: " << firstnum << endl;
cout << "The value in secnum is: " << secnum << "\n\n";

newval(firstnum, secnum); // call the function


cout << "The value in firstnum is now: " << firstnum <<
endl;
cout << "The value in secnum is now: " << secnum << endl;

return 0;
}

void newval(float& xnum, float& ynum)


{
cout << "The value in xnum is: " << xnum << endl;
cout << "The value in ynum is: " << ynum << "\n\n";
xnum = 89.5;
ynum = 99.5;

return;
}

Alcance de variables – variables locales, variables globales.

Clases de almacenamiento de variables – determinan donde y cuanto tiempo


se mantiene la localización de una variable. Existen cuatro clases de
almacenamiento: auto, static, extern y register. (páginas 359 –
366).

Arreglos
Un arreglo de una dimensión es una lista de elementos relacionados del
mismo tipo de dato y que es almacenado con un nombre grupal. A un
arreglo de una dimensión también se le conoce como un “vector”.

En general un arreglo de una dimensión es declarado como se muestra en el


siguiente ejemplo:

float voltage[5];

voltage[ voltage[1 voltage[2 voltage[3 voltage[4


0] ] ] ] ]

Cuando se declara un arreglo se separa memoria suficiente para almacenar


todos sus elementos. Los elementos se almacenan secuencialmente como
se ilustra arriba. El número dentro de los paréntesis rectangulares se conoce
como índice o suscrito. Un arreglo se puede inicializar al declararse.
int temp[5] = {98, 87, 92, 79, 85};
char codes[6] = { ‘s’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’};

En el siguiente ejemplo se utiliza un arreglo llamado temp, definido para


almacenar cinco números enteros. El programa incluye dos ciclos for.

Ejemplo: Problema 10.1 (página 531)

#include <iostream.h>

int main()
{
const int MAXTEMPS = 5;

int i, temp[MAXTEMPS];

for (i = 0; i < MAXTEMPS; i++) // Enter the


temperatures
{
cout << "Enter a temperature: ";
cin >> temp[i];
}

cout << '\n';

for (i = 0; i < MAXTEMPS; i++) // Print the


temperatures
cout << "temperature " << i << " is " << temp[i] <<
endl;

return 0;
}
Arreglos de Dos Dimensiones

Un arreglo en dos dimensiones, también conocidos como tablas, consisten


de elementos de filas y columnas. Por ejemplo, el arreglo de números

8 16 9 52
3 15 27 6
14 25 2 10
es un arreglo de enteros en dos dimensiones con tres filas y cuatro
columnas. Para declarar un arreglo de dos dimensiones se tienen que
especificar el número de filas y el número de columnas.

Ejemplo: int valor [3] [4];

Col 0 Col 1 Col 2 Col 3

Fila 0 8 16 9 52
Fila 1 3 15 27 6
Fila 2 14 25 2 10

El elemento sombreado es valor [1] [3]

http://bc.inter.edu/facultad/RFIGUEROA/Programming2.htm

Un ciclo es cualquier construcción de programa que repite una


sentencia o secuencia de sentencias un número de veces. Las
sentencias o grupo de sentencias que se repiten en un bloque se
denominan cuerpo del bucle y cada repetición del cuerpo del ciclo
se llama iteración del ciclo.

Tipos de ciclos

2.2.1 for

En C, el ciclo proporciona potencia y flexibilidad. Su formato General


es el siguiente:

for ( inicialización;prueba condicional;incremento)

sentencia;

La sección de inicialización es usada para asignar un valor


inicial a la variable que controla el ciclo. La sección de inicialización
es ejecutada una sola vez. Antes del que ciclo empiece.
La sección de prueba condicional del ciclo compara la
variable de control contra un valor cada vez que el ciclo se repita. Si
la prueba evalúa cierto (TRUE), el ciclo se repite. Si es falso (FALSE),
el ciclo se detiene, y la ejecución del programa continua con la
siguiente línea de código que le sigue al ciclo.

La prueba condicional es ejecutada al comienzo de cada


iteración.

La sección de incremento del ciclo for es ejecutada al final


de cada iteración. Esto es, La sección de incremento se ejecuta
después de que el bloque de sentencias es ejecutado, pero antes de
la prueba condicional. El propósito de la sección de incrementos es
aumentar (o disminuir) la variable de control del ciclo en cierta
cantidad.

El ciclo for en C es más poderoso y flexible que el de otros


lenguajes. Las secciones : inicialización, prueba condicional e
incremento no están limitadas a dichas actividades. El for de C no
pone límites en el tipo de expresiones que ocurren ahí dentro. Por
ejemplo, no se tiene que usar la sección de inicialización para asignar
un valor inicial a la variable de control de ciclo. Más aún, no hay
necesidad de utilizar una variable de control de ciclo cuando la
prueba condicional se emplea de otra manera para terminar el ciclo.
Finalmente, la sección de incremento es sólo una expresión que es
evaluada cada vez que el ciclo itera (se repite). En ocasiones no se
necesita incrementar ninguna variable.

Otras de las flexibilidades del for en C es que pueden estar


vacías algunas de las secciones anteriores, o tener varias expresiones
en cada sección.

Por ejemplo:

x=1; for
(x=1;x<=10;x++)

for (;x<=10;x++)
printf("su valor es %4d",x);
printf("su valor es %4d",x);

En el ciclo for tanto la variable de control como las que se utilizan


para la condición pueden ser del tipo entera o caracter, ya que la
variable tipo carácter tiene una valor entero (código ASCII).

Ejemplos con el ciclo for:

El siguiente programa imprime los números del 1 al 20 elevados al


cuadrado:

#include <stdio.h>

main()

{ int num;

for(num=1;num<=20;num++)

printf(“%8d %8d\n”,num, num*num);

El siguiente programa lee los números de 1 hasta N y los imprime al


cuadrado:

#include <stdio.h>

main()

int num,N;

printf(“Cuantos numeros quieres imprimir”);

scanf(“%d”,&N);

for(num=1;num<=N;num++)

printf(“%8d %8d\n”,num, num*num);


}

2.2.2 do()-while

Tiene la forma :

do

sentencias

} while(expresión);

El ciclo do_while repite una sentencia o varias sentencias mientras la


expresión es cierta. Se detiene cuando la expresión de convierte
falsa.

El ciclo do_while siempre se ejecuta al menos una vez, dado que la


expresión controladora del ciclo se checa al final de cada iteración.

http://yaqui.mxl.uabc.mx/~aflores/nueva_pagina/apuntes/unidad2
Secuencias (strings, listas y tuplas)
Anterior Capítulo 9. Tutorial del lenguaje Python Siguiente

Secuencias (strings, listas y tuplas)


Las secuencias son un tipo de datos cuyos elementos están ordenados y pueden ser
accedidos vía un índice.

Todos los tipos de secuencias comparten el mismo modelo de acceso a sus elementos.
Para acceder a un elemento en concreto se utiliza la siguiente nomenclatura seq[i].
Dada una variable de tipo secuencia denominada seq, accedemos al elemento que
ocupa la posicion i. El esquema de numeración utilizado empieza en el 0 y finaliza en
el valor que defina la longitud de la secuencia menos 1.
Varios elementos (substrings) pueden ser obtenidos a la vez utilizando el operador
slice (trozo). La sintaxis para obtener un grupo de elementos es la siguiente:

secuencia[indice_inicial : indice_final]

Con esta sintaxis podemos obtener un trozo (slice) empezando en el elemento


definido por el indice_inicial y terminando en el elemento anterior al definido por el
indice_final.

>>> cadena='Hola Mundo!'


>>> print cadena[0:4]
Hola

Parece algo confuso pero la mejor forma de recordar como funciona el operador slice
es pensar que los indices apuntan realmente entre los caracteres.

+---+---+---+---+---+
| H | e | l | p | A |
+---+---+---+---+---+
0 1 2 3 4 5
-5 -4 -3 -2 -1

En la siguiente tabla se muestra una lista de operadores que se pueden utilizar con
todos los tipos de secuencias:

Tabla 9.1. Operadores de secuencias

secuencia[index] elemento situado en el índice index de la secuencia


secuencia[ind1:ind2] elementos desde el índice ind1 hasta el índice ind2
secuencia * n la secuencia se repite n veces
secuencia1 + secuencia2 concatena las secuencias secuencia1 y secuencia2
objeto in secuencia comprueba si objeto es un miembro de secuencia
objeto not in secuencia comprueba si objeto no es un miembro de secuencia

La siguiente tabla muestra algunas de las funciones predefinidas que se pueden


aplicar a las secuencias.

Tabla 9.2. Funciones Pre-Definidas

list (secuencia) convierte la secuencia a un tipo lista


str (objeto) convierte el objeto a un tipo string
tuple (secuencia) convierte la secuencia a un tipo tupla
len (secuencia) devuelve la longitud (numero de elementos) de la secuencia
max (secuencia) devuelve el elemento mas grande de la secuencia
min (secuencia) devuelve el elemento menor de la secuencia

Los diferentes tipos de secuencias se exponen a continuación.

Strings

Para Python, las cadenas (strings) son un conjunto contiguo de caracteres encerrados
entre simples o dobles comillas.

>>> cadena='Hola Mundo!'


>>> print cadena
Hola Mundo!

Los strings son inmutables, no se puede alterar su valor a no ser que sean copiados a
otro objeto string.

Los métodos y funciones aplicables al tipo de objeto string se encuentran definidos en


el módulo string

>>> import string


>>> cadena.upper()
'HOLA MUNDO!'

La línea import string permite acceder a todos los métodos y atributos disponibles
para un tipo de dato string, siendo la línea cadena.upper() la forma de invocar al
método upper sobre el objeto string denominado cadena. Como resultado obtenemos
el string en mayúsculas.

La siguiente tabla muestra algunos de los métodos disponibles en el módulo string:

Tabla 9.3. Métodos del módulo string

find( sub[, start[, devuelve el índice menor donde se encuentra el substring sub
end]]) dentro del string
devuelve verdadero si todos los caracteres en el string son
isalnum()
alfanuméricos y existe al menos uno.
devuelve verdadero si todos los caracteres en el string son dígitos
isdigit()
y existe al menos uno.
lower() devuelve una copia del string convertido a minúsculas.
split([sep devuelve una lista de elementos del string utilizando como
[,maxsplit]]) separador sep.

Listas y Tuplas

Python posee varios tipos de datos para agrupar de una forma fácil diferentes valores.
El tipo de dato más versátil es la lista. Una lista es una colección de elementos
separados por comas y encerrados entre paréntesis. Los elementos de una lista no
tienen porque ser del mismo tipo.

>>> lista = [ 1,'dos',3,'cuatro']


>>> print lista
[1, 'dos', 3, 'cuatro']

Como ocurría con el tipo de datos string, los índices de una lista empiezan en el 0, y
pueden ser troceadas (sliced), concatenadas ...

>>> lista [0]


1
>>> lista [3]
'cuatro'
>>> lista [1:-1]
['dos', 3]
>>> lista + [5,'seis']
[1, 'dos', 3, 'cuatro', 5, 'seis']

A diferencia de los strings, que por definición eran inmutables, en una lista podemos
cambiar el valor de un elemento individual.

>>> lista
[1, 'dos', 3, 'cuatro']
>>> lista [2] = 'tres'
>>> lista
[1, 'dos', 'tres', 'cuatro']

Es posible también crear listas anidadas (listas cuyos elementos pueden ser otras
listas)

>>> lista1 = [2, 3]


>>> lista2 = [1, lista1, 4]
>>> len(lista2)
3
>>> lista2
[1, [2, 3], 4]
http://fferrer.dsic.upv.es/cursos/Windows/Avanzado/ch09s06.html

You might also like