Está en la página 1de 39

Tema 1: Estrategias para solucionar problemas -

1.1. Problema y Solución


Un problema es una abstracción de la realidad para la cual nos interesa
conocer una solución.

Una solución es un procedimiento o método para establecer el mecanismo de


transformación del mundo que nos lleve a satisfacer ciertos requerimientos.

1.2. Fases en la resolución de problemas


La computadora es el principal instrumento para la resolución de problemas,
en el proceso siempre nos lleva a la codificación y ejecución de un programa.
Este proceso debe plantear programas creativos que el usuario se las ingenie
para poder dar solución a cualquier problema que surja.

Según (Joyanes Aguilar & Zahonero Martínez, 2001) “las fases para
la resolución de un problema son:

 Análisis del problema


 Diseño del algoritmo
 Herramientas de programación
 Codificación de un programa
 Compilación y ejecución de un programa
 Verificación y depuración de un programa
 Documentación y mantenimiento”

 1.2.1. Análisis del problema


 Para analizar el problema se debe de tener en claro las especificaciones
de los requisitos si se quiere obtener una solución adecuada. Según
(Fernández Cárdenas) en “esta fase el objetivo es ayudar al programador
a que llegue a una cierta comprensión de la naturaleza del problema”.
 “Una adecuada definición del problema junto con las especificaciones
de entrada y salida nos ayudan a poder definir con precisión el problema,
los cuales son los requisitos fundamentales para una solución
eficaz” (Fernández Cárdenas).
 Para conseguir una idea del problema en general y lo que se requiere,
se realiza una primera lectura.
 Con una segunda lectura se pretende adquirir los resultados deseados
y los datos necesarios que resolverán el problema.
1.2.2. Diseño o desarrollo del algoritmo
El algoritmo está formado por pasos ordenados que dan las instrucciones que
la máquina debe de ejecutar, “la información que se proporciona al algoritmo,
constituye su entrada y la información producida por el algoritmo constituye su
salida”. (Fernández Cárdenas)

Para resolver problemas complejos, la manera más efectiva es cuando se lo


descompone en subproblemas, los cuales son más sencillos de solucionar
comparados con el original, este mecanismo se denomina divide y vencerás.

(Fernández Cárdenas) afirma: “La descomposición del problema original en


subproblemas más simples y a continuación dividir estos subproblemas en otros
más simples se denomina diseño descendente (top-down design)”.

Para la obtención de un algoritmo claro, completo, y eficaz es necesario varios


niveles de refinamiento, especialmente si es un problema complejo.

1.2.3. Herramientas de programación


En la programación las herramientas para diseñar algoritmos más utilizados
son:

 El Pseudocódigo.
 Los Diagramas de flujo de datos (DFD).

“Los diagramas de flujos o flujogramas son representaciones gráficas de un


algoritmo o proceso.” (Joyanes Aguilar & Zahonero Martínez, 2001) Estos
diagramas utilizan señaléticas con significados definidos que representan las
fases del algoritmo, y representan el proceso de ejecución mediante flechas de
dirección que conectan los puntos de inicio y de fin del proceso.

Por su parte los pseudocódigos tratan de un falso lenguaje que solo puede
ser entendible para ser humano, pero no puede ser comprendido o interpretado
por una máquina (computador), está pensado como la representación de un
algoritmo que es diferente de otros lenguajes de programación.

1.2.4. Codificación de un programa


La codificación es la escritura del algoritmo en el lenguaje de programación
elegido . El código puede ser escrito fácilmente debido a que la estructura del
algoritmo es independiente del lenguaje.
“Para realizar la conversión del algoritmo en el programa se deben sustituir
las palabras reservadas en español por sus homónimos en inglés, y las
operaciones/instrucciones indicadas en lenguaje natural por el lenguaje de
programación correspondiente” (Joyanes Aguilar & Zahonero Martínez, 2001,
pág. 51)

1.2.5. Compilación y ejecución de un programa


En esta etapa es necesario un programa editor, ya que el algoritmo se ha
convertido en un programa fuente, se lo introduce a la máquina y se los almacena
en la memoria. “Convirtiendo el programa en un archivo de programa.
Posteriormente el programa fuente debe ser traducido a lenguaje máquina, este
proceso se ejecuta con el compilador y el sistema operativo que se encarga de
la compilación”. (Joyanes Aguilar & Zahonero Martínez, 2001)

Luego de la compilación suelen presentarse errores (errores de compilación)


en el programa por lo que es necesario volver a revisar el código fuente, corregir
los errores presentados y compilar nuevamente hasta que esté libre de errores,
consiguiendo un programa objeto que todavía no es ejecutable directamente.

“A continuación, se debe instruir al sistema operativo para que realice la fase


de montaje o enlace (link), carga, con las bibliotecas del programa del
compilador. El proceso finalmente produce un programa ejecutable”.

Las órdenes para compilar y ejecutar, según los programas en C, C++,... o


cualquier otro lenguaje dependerá de su entorno de programación y del
sistema operativo en que se ejecute Windows, Linux, Unix, etc. (Joyanes
Aguilar & Zahonero Martínez, 2001, pág. 52)

1.2.6. Verificación y depuración de un programa


En esta fase se lleva a cabo la ejecución del problema, utilizando datos
variados de entrada, también conocidos como datos de prueba, que ayudarán a
determinar los errores (“bugs”) dentro programa. Para verificar se necesitará
datos de prueba de diferentes gamas como: valores corrientes de entrada,
valores de entrada exagerados que ayudarán a ver las limitaciones del código y
otros valores que comprueben aspectos específicos del programa.

Al momento de ejecutar el código, se presenta los siguientes errores:

1. Errores de compilación. “Se originan por un uso equivocado de las


reglas que existen en los diferentes lenguajes de programación, se los
conoce también como error de sintaxis. Si existe este error, la máquina no
puede interpretar la instrucción, provocando que no se genere el
programa objeto y el compilador imprimirá una lista detallada de los
errores encontrados durante la compilación”.

2. Errores de ejecución. “Se provocan por instrucciones que la


computadora puede comprender, pero no ejecutar. Ejemplos típicos son:
división por cero y raíces cuadradas de números negativos. Aquí el
programa paraliza la ejecución del programa e imprime un mensaje de
error”.

3. Errores lógicos. “Resultan de la estructura lógica del programa, el error


se llega a encontrar en el diseño del algoritmo. Debido a que el programa
puede funcionar correctamente y no produce errores de compilación ni de
ejecución se vuelve en uno de los errores más difíciles de detectar y sólo
puede advertirse el error por la obtención de resultados incorrectos. Aquí
se deberá volver a la fase de diseño del algoritmo, modificar el algoritmo,
cambiar el programa fuente y compilar y ejecutar una vez más” (Joyanes
Aguilar & Zahonero Martínez, 2001)

Al momento de encontrar ciertos errores dentro del código, se procede a la


depuración donde se eliminan y/o corrigen los errores presentados.

1.2.7. Documentación y mantenimiento


La documentación del problema es importante porque influye en el resultado
final, ya que consta de los pasos descritos que conllevan a la resolución de dicho
problema.

Los programas con escasa documentación son difíciles de leer, depurar,


modificar e imposibles de mantener

En un programa la documentación puede ser interna la cual se coloca “en


líneas de comentarios y externa donde se incluye análisis, pseudocódigos,
diagramas de flujo o manuales de usuario cuyas instrucciones ayudan a ejecutar
e interpretar el programa” (Joyanes Aguilar & Zahonero Martínez, 2001).

“La documentación es vital cuando se desea corregir posibles errores futuros


o bien cambiar el programa” (Joyanes Aguilar & Zahonero Martínez, 2001, pág.
53)

1.2.8. Ejemplo
Para comprender el proceso para la resolución de problemas mediante la
máquina, se procederá a resolver el siguiente ejemplo:

Calcular e imprimir la superficie y la longitud la circunferencia, utilizando


como dato de entrada el radio de un círculo

ANÁLISIS.

El único dato de entrada es el radio del círculo, sin embargo, este dato puede
ser cualquier valor dentro del conjunto de los numero reales positivos.

Las salidas del problema serán dos variables: superficie y longitud de la


circunferencia. El tipo de dato de estas variables también son los reales positivos.

Entradas: radio (variable RADIO).

Salidas: superficie (variable Área), y circunferencia del círculo (variable


Circunferencia).

Todas las variables de tipo real positivo.

DISEÑO.

La descomposición del problema se divide en lo que se quiere encontrar


(Área-Circunferencia) y el dato proporcionado (radio). A continuación, se
muestra la fragmentación del problema en subproblemas más simples.
Los pasos para solucionar el problema serían los siguientes

1. Inicio
2. Ingresar el valor del radio
3. Calcular la superficie
4. Calcular la Longitud
5. Imprimir el valor del Radio
6. Imprimir el valor de la Superficie
7. Imprimir el valor de la Longitud
8. Fin

Tema 2: Algoritmos - Tema 2: Algoritmos

2.1 Definición de algoritmo


Se puede definir a un algoritmo como un conjunto ordenado y finito de
operaciones que permite hallar la solución de un problema.

Los algoritmos no tienen que ver con ningún lenguaje de programación ya


que dado cualquier tipo de algoritmo puede convertirse en cualquier lenguaje de
programación en si el algoritmo es la base lógica antes de la programación.

La utilización de los algoritmos son la base esencial para la programación


su estructura tiene como modelo y como ejemplo la representación de soluciones
ante la toma de decisiones mediante pequeños pasos o procesos que van
conectados secuencialmente.

Básicamente el algoritmo es el medio universal de solución para después


codificarlo en cualquier lenguaje de programación.

2.1.1 Características de los algoritmos


A continuación se presentan las 5 propiedades planteadas por Donald
Knuth:

 Carácter finito. "Un algoritmo siempre debe terminar después de un


número finito de pasos".
 Precisión. "Cada paso de un algoritmo debe estar precisamente definido;
las operaciones a llevar a cabo deben ser especificadas de manera
rigurosa y no ambigua para cada caso".
 "Un algoritmo tiene cero o más entradas: Cantidades que le son dadas
antes de que el algoritmo comience, o dinámicamente mientras el
algoritmo corre. Estas entradas son tomadas de conjuntos específicos de
objetos".
 "Un algoritmo tiene una o más salidas: cantidades que tienen una relación
específica con las entradas".
 Eficacia. "También se espera que un algoritmo sea eficaz, en el sentido
de que todas las operaciones a realizar en un algoritmo deben ser
suficientemente básicas como para que en principio puedan ser hechas
de manera exacta y en un tiempo finito por un hombre usando lápiz y
papel".

2.1.2 ¿Cómo escribir un algoritmo?


Al describir un algoritmo es necesario ser lo más preciso posible, de modo
que sea sencillo implementarlo.

Es necesario entonces:

 Definir una serie de operaciones básicas con las cuales se hará la


especificación.
 A partir de las operaciones definidas, se debe proceder a enumerar los
pasos que componen el algoritmo.
 En esta etapa se debe tener en consideración el control de flujo del
mismo:
o Secuencial.
o Decisiones.
o Iteraciones.

 2.2. Técnicas para escribir algortimos


 Existen diferentes técnicas de escribir un algoritmo:
 1. Lenguaje natural.
 2. Pseudocódigo.
 3. Diagrama de flujo de datos (DFD).
 4. Diagrama de Nassi Schneiderman.
 Las técnicas a revisar en este tema serán el Pseudocódigo y el
Diagrama de flujo de datos (DFD).
 2.2.1 Pseudocódigo
 Es una manera de facilitar la codificación del problema, es un paso
antes de usar un lenguaje de programación.
 Su importancia radica en que puede ser traducido a cualquier lenguaje
de programación.
 Forma General de un Algoritmo en Pseudocódigo
 La estructura de un pseudocódigo es la siguiente
 Comienza con la palabra clave Algoritmo o Proceso, seguida del nombre
del programa.
 Secuencia de instrucciones
 Finaliza con la palabra FinAlgoritmo o FinProceso.
 Una secuencia de instrucciones es una lista de una o más instrucciones
y/o estructuras de control. El conjunto de instrucciones del programa debe
ir entre delimitadores para indicar su inicio y su final.
 Cada acción finaliza con un punto y coma.
 Las instrucciones de un proceso se escribirán con sangría respecto a sus
delimitadores para resaltar dicho proceso.

Ejemplo:

Desarrollar en Pseudocódigo el algoritmo para sumar dos números reales.

2.2.2 Diagramas de flujos de datos (DFD)


Un diagrama de flujo o flujograma es una forma de representar gráficamente
los pasos para resolver un problema en específico.

Estos diagramas utilizan una serie de símbolos con significados especiales y


son la representación gráfica de los pasos de un proceso.

Simbología
Ejemplo:

Desarrollar en diagrama de flujo el algoritmo para sumar dos números.

2.3 Software a utilizar.


Revisar el siguiente video, en donde encontrará los pasos para la instalación
del software necesario para poner en práctica los conocimientos adquiridos en
esta materia.

Tema 3 : Sintaxis y Semántica del Programa -

3.1. Sintaxis y Semántica


La sintaxis es la serie de criterios o reglas que en programación deben
seguirse para indicar las respectivas instrucciones en un lenguaje de
programación.

Por otro lado, la semántica se refiere al significado que tienen las


instrucciones (coherencia y concordancia).

3.2. Datos
Dato es un objeto o una representación simbólica, la cual podríamos
mencionar como variable.

Estos tienen algún valor o contenido con el que va a interactuar directamente


con el algoritmo.

El tamaño de dicho dato dependerá del lenguaje donde se programe.

Algunos de ellos son:

 Numérico: entero o real


 Lógico
 Carácter

 3.3. Tipos de Datos


 Numérico
 Entero: Subconjunto finito de números únicamente enteros donde el
rango dependerá del lenguaje de programación donde realicemos el
algoritmo.
 Real: Subconjunto de los números reales donde la precisión de los
decimales es limitado.
 Lógico
 Conjunto conformado por valores VERDADERO y FALSO.
 Carácter
 Un carácter es un tipo de dato donde cada letra o signo por individual
tiene un valor de 1 Byte, siendo el tipo de dato más ligero en comparación
a otros.
 La conformación, o la unión de varios caracteres se le
denomina cadena de caracteres.

3.4. Datos Primitivos en C++


Los tipos de datos primitivos se les definen como las variables o constantes
que va a poseer un programa.

Dependiendo del tipo de información que contengan, se determinará los


valores que pueden asignarse a un dato, además de las operaciones que se
podrán realizar con los valores.

Los tipos de datos básicos:

 char
 int
 float
 double
 bool
Tipo de dato char
Una variable de tipo char almacena en un espacio de memoria un carácter o
un dato de tipo entero pequeño, ya que ocupa 1 byte (8 bits) en la memoria.

Tiene un rango de valores que se le puede asignar de 0 hasta 255 sin signo
y de -128 hasta 127 con signo.

Tipo de dato int


El tipo de dato int almacenan solo números enteros donde mediante
modificadores se podrá elegir el tamaño del número como un entero corto (short
int) o un entero largo (long int).

Se puede declarar solo como int y por defecto se tomará como un entero
largo. La diferencia en los tipos de enteros es que el entero corto ocupará 4 bytes
(32 bits) en la memoria

Tipo de dato float


Es un tipo de dato de tipo flotante que almacenan números decimales en su
espacio de memoria donde su tamaño es de 4 bytes (32 bits) con un rango de
valores con 6 dígitos de precisión.

Tipo de dato double


Este tipo de dato posee un tamaño de memoria de 8 bytes (64 bits) con un
rango de valores amplio, cabe recalcar que este es un dato similar al Float pero
con 10 dígitos de precisión.

Tipo de dato bool


Es un tipo de dato muy sencillo ya que este solo podrá almacenar dos únicos
valores que pueden ser verdadero o falso.

Su tamaño en la RAM (Memoria de Acceso Aleatorio) será de apenas 1 byte


(8 bits).

3.5. Variables
Una variable es una posición en la memoria donde dependiendo del tipo de
dato, podrá almacenar información correspondiente al dato. Son todos aquellos
valores que pueden o no cambiar en el transcurso de un algoritmo.

Declaración de una variable

Pseudocódigo
La declaración o inicialización de las variables en pseudocódigo a través de la
herramienta PSeint se la puede realizar de la siguiente manera:
El uso de cada tipo de variable va sujeto a las necesidades del algoritmo que
deseamos desarrollar. Si tenemos muchas variables del mismo tipo, podemos
agrupar las variables separándolas con comas.

Diagrama de Flujo
Para declarar variables, se utiliza las cajas rectangulares, podemos observar
que existen diferentes tipos de datos.

Lenguaje C++

En el lenguaje C++ las variables deben ser declaradas al inicio del código
para su posterior uso en cualquier operación que se realice.

Para declarar un variable en lenguaje C++ primero se debe especificar qué


tipo de dato se piensa utilizar, luego se debe dar un nombre a la variable, el cual
debe empezar con letra minúscula para diferenciarlas de las constantes y si el
nombre contiene más de una palabra se deberán separa con un guion bajo “_” o
con una letra mayúscula en la segunda palabra.

Ejemplo:

int nota_alumno;
Si se va a declarar más de una variable del mismo tipo, se pueden separar
con una coma “,”, en la asignación de valores de una variable se debe introducir
el signo igual “=” donde posteriormente se asignará cualquier valor o carácter
dependiendo el tipo de datos que sea y cuando este declara que tipo de dato,
nombre y valor, finalizando la declaración de las variables con un ";".

Reglas para asignar nombres a una variable


Todas las variables están conformada por un nombre al que se denomina
como identificador. Para asignar un nombre a este identificador debe seguirse
reglas que se describen a continuación.

 La variable puede llevar caracteres numéricos o alfanuméricos: Letras de


la A a la Z (pueden ser mayúsculas únicamente para diferenciar una
segunda palabra en nuestra variable, o minúsculas) y números.

 No deben comenzar con un signo o número, siempre con una letra.


 Solo se acepta el signo de guion bajo, como parte del identificador.

 Existen palabras reservadas que NO pueden usarse como variables.

 El número máximo de caracteres que debe tener el identificador debe ser


de 31.

 Siempre se recomienda relacionar (o nombrar) al identificador de acuerdo


al tipo de información que va a almacenar.

Asignación de Valores

Pseudocódigo

En PSeint bastará con colocar, por ejemplo, las siguientes instrucciones.


Como se puede apreciar en la imagen, la asignación se realiza con dos signos,
"menor que" y "guión medio", quedando de esta manera: <- .

Diagrama de Flujo

Lenguaje C++

Una vez que la variable ha sido definida, está lista para almacenar datos,
como se puede observar en el ejemplo, la variable ya está guardando el valor
de 12 al momento de realizar la declaración.

Un dato a tomar en cuenta es que el valor que va contener la variable


únicamente puede ser correspondiente al tipo de dato con el que la hemos
declarado.
Una variable, puede ser declarada para funcionar en distintas partes del
programa o únicamente en una sola parte.

Existen 2 tipos de variables:

 Globales: devuelven valores desde cualquier parte del programa, si bien


pueden ahorrar líneas de código, su uso también puede considerarse
como una mala práctica de programación, puesto que podría modificarse
un valor en alguna parte en la ejecución de nuestro programa.
 Locales: solo se pueden manipular en la parte o sección de nuestro
código.

 3.6. Constantes
 Son valores de cualquier tipo de datos que se mantienen fijo en todo
el transcurso del programa, y que por ningún motivo este va a cambiar.
 Declaración de una constante
 Pseudocódigo
 En pseudocódigo, para declarar una constante se la declara al igual
que las variables pero en mayúsculas.

Diagrama de Flujo
Al declarar constantes, se utiliza al igual que las variables las cajas
rectangulares, como se puede observar en el siguiente gráfico:
Lenguaje C++
Para declarar una constante hay dos maneras de hacerlo el cual la sintaxis
para cada uno es diferente donde declarar mediante el comando define y el uso
del modificador const.

Comando #Define
Esta instrucción permite declarar una constante (además de otras) de una
manera muy cómoda y sencilla. Cabe recalcar que se puede usar este comando
después de haber declarado las librerías.

Modificador CONST
La instrucción const permite declarar o convertir una variable en una
constante, siendo imposible modificar su valor después de ser declarada como
constante.
Asignación de Valores
En pseudocódigo, para asignar el valor de una constante se escribe en
primer lugar el nombre de la constante en letras MAYÚSCULAS a la izquierda,
precedido de los signos (<- ) y luego su valor.

Diagrama de Flujo
El valor de una constante representada a través de un diagrama de flujo va
representado mediante una caja rectangular, así:
Lenguaje C++
El valor o valores de una constante se pueden agregar únicamente al
momento de su declaración.

const listaDeAlumnos = 12;

Las constantes simbólicas o con nombre se pueden identifican por su nombre


y el valor que se le ha asignado. Una constante literal puede ser un valor de
cualquier tipo que se utiliza como tal. Además, cada constante puede ser:

 Numéricas enteras: El rango de los enteros. Compuesta por un signo (-


,+) .
 Numéricas Reales: Compuestas por signos (+, -) seguido de una serie
de dígitos (0…9), que además tiene una parte decimal.

 Lógicas: Existen unicamente dos constantes lógicas, verdadero o falso.

 Carácter: Cualquier carácter del juego de caracteres utilizado colocado


entre comillas simples o apóstrofes. Los caracteres que reconocen las
computadoras son dígitos, caracteres alfabéticos, tanto mayúsculas como
minúsculas, y caracteres especiales.

 Cadena: Serie de caracteres válidos encerrados entre comillas simples.


(Joyanes, 2008, p.4).

Tema 4: Operadores y Expresiones - Tema 4:


Operadores y Expresiones
4.1. Operadores

4.1.1. Definición
El Pseudocódigo dispone de un conjunto básico de operadores que pueden
ser utilizados para la construcción de expresiones simples y complejas.

Operadores utilizados en el pseudocódigo:


Para crear una expresión se debe utilizar los diferentes tipos de operadores,
siendo los operadores matemáticos los de mayor uso. Una expresión es un
conjunto o combinación de variables, constantes, operadores y funciones:
seno(a+30*PI).

Los operadores relacionales permiten comparar dos expresiones , el resultado


de la comparación siempre tendrá dos resultados o verdadero o falso. (7>2) =
Falso

Cuando se necesita comparar más de dos expresiones se utilizan los


operadores lógicos. ((3+2)<5) && (7<8) = Falso

Los operadores algebraicos permiten operar variables numéricas. 7+2=9

4.1.2. Operadores en C++


Operadores Relacionales

Son operadores que toman dos valores lógicos y realizan comparaciones


devolviendo un valor entero “1” cuando es verdadero o “0” cuando es falso.
Operador Lógico Operación Resultado

== (igual que) a == b 0

!= (diferente que) a != b 1

< (menor que) a<b 1

> (mayor que) a>b 0

<= (menor o igual


a <= b 1
que)

>= (mayor o igual


a >= b 0
que)

Operadores de Asignación

Es una operación que se le representa con el signo igual “=” y su principal


función es la de asignar valores a una variable y se considera una instrucción,
también se puede realizar una instrucción que contenga el operador de
asignación y al mismo tiempo un operador aritmético.

EJEMPLO

num = 23;

Operadores Aritméticos

Los operadores aritméticos son operaciones que toman dos valores


numéricos y devuelve un valor único a la variable que se le esté asignando la
operación.

Instrucción

num = num + 7;

num = num - 7;
num = num * 7;

num = num / 7;

num = num % 7;

Operaciones Lógicos
Son expresiones booleanas que cumplen una tabla de verdad para sus
operadores y como resultado devuelve un valor de verdad (1) o falso (0).

And Lógico (&&)

El operador and o “y” devuelve true solo si sus dos expresiones son
verdaderas.

a &&
a b
b

0 0 0

0 1 0

1 0 0

1 1 1

Or Lógico (||)

Este operador va a devolver un “0” o falso si las dos expresiones son falsas.

a b a || b

0 0 0
0 1 1

1 0 1

1 1 1

Negación Lógica (!)

Este operando invierte el significado de la instrucción.

a !a

0 1

1 0

Incremento (++)

Es un operador aritmético que incrementa el valor de la variable.

El operador ++ aumenta en uno el valor de la variable y actualiza el valor de la


misma.

Hay dos tipos:

 Prefijo: El ++ se pone antes del operando, con lo que C++ lleva a cabo
la operación de incremento antes de utilizar el valor del operando.

 Sufijo: El ++ se pone después del operando, con lo que C++ utiliza su


valor antes de realizar la operación de incremento

Ejemplo 1:

Se escribe:

x=9;
y=++x;

se asigna a "y" el valor de 10.

Pero, si se escribe:
x=9;
y=x++;

"y" toma el valor de 9.

En ambos casos "x" queda con el valor 10.

Ejemplo 2:

int toyota;
toyota = 2001;

En la variable entera toyota se asigna al valor 2001.

4.1.3. Jerarquía de Operadores


Una expresión puede contener operadores lógicos, operadores aritméticos,
operadores relacionales y paréntesis, donde al momento de evaluar la expresión
sigue ciertos pasos dependiendo los operadores que contenga la expresión.

Evalúa lo que contenga dentro de los paréntesis “( )”.

1. Evalúa los operadores aritméticos.


2. Evalúa los operadores relacionales.
3. Evalúa los operadores lógicos.
4. En caso de que existan operadores iguales, los evalúa desde izquierda a
derecha.
5. Se evalúa la asignación.

También es importante recalcar que algunos operadores tienen más prioridad


que otros empezando del uso del paréntesis.

1. ()
2. Exponeciación, radicación, módulo
3. *, /
4. +-

Ejemplo:
Algunas instrucciones o expresiones se evalúan dependiendo su asociatividad,
sin importar que sea de izquierda a derecha o derecha a izquierda, pero existen
operadores que tienen más prioridad que otros, por ende estos se evalúan primero.

4.2. Funciones: Definición


Existen operaciones que no pueden ser calculadas directamente al crear una
expresión, para ello los lenguajes de programación y el pseudocódigo utilizan
funciones.

Las funciones pueden ser usadas en cualquier expresión, por ejemplo si se


tiene una variable "numero" y es de tipo real, pero solo se quiere la parte entera
se usa la función trunc().

entero <- trunc(numero);


Las funciones son como una caja negra; es decir, sabemos el resultado
que genera pero no se sabe como las realiza internamente.

Una función en pseudocódigo se presenta como un subalgoritmo que forma


parte del algoritmo principal, el cual permite resolver una tarea específica.

4.3. Expresiones
Una expresión es una combinación de constantes, variables o funciones, que
es interpretada de acuerdo a las normas particulares de precedencia y
asociación para un lenguaje de programación en particular.

Ejemplo

C<- 5*4+8/2-1

C<- 20+8/2-1 se multiplica 5*4

C<- 20+4-1 se divide 8/4

C<- 24-1 se suma 20+4

C<- 23 se resta 24-1

4.3.1. Creación de Expresiones


Para crear una expresión se necesita utilizar todos los operadores
mencionados conjuntamente con variables, constantes o valores numéricos,
lógicos y caracteres y funciones propias de los lenguajes.
Ejemplo 1:

Se debe colocar las expresiones ordenadas para que el resultado no se altere.

PSEUDOCODIGO CODIFICACION EN C++

x <- ((a+1) - 12) * (a - 8); x = (a++ - 12) * (a - 8);

4.3.2. Evaluaciones de Expresiones


Una expresión está conformada por operadores, paréntesis y funciones que
al momento de evaluarlas se cumplen algunas reglas que son: reglas de
precedencia de operadores, reglas de asociatividad y el uso de paréntesis.

Al evaluar cada expresión esta devuelve un valor donde se va evaluando con


mayor prioridad los operadores con mayor precedencia, al momento que ha dos
operadores de igual precedencia se aplica la regla de asociatividad, para evaluar
correctamente una expresión se toma en cuenta la jerarquía de operadores.

La evaluación de las expresiones se realiza de acuerdo a la precedencia


preestablecida.

Ejemplo 2

Evaluar la siguiente expresión de post incremento en C++.

a=4;

x = (a++ - 12) * (a - 8);

1. Se evalúa (a++ - 12) obteniendo "-8", a++ primero asigna el valor a la


variable (a=4) y después incrementa el valor (a=5).
2. Al evaluar (a-8) obtenemos "-3" por el incremento.
3. Al final con los resultados se realiza la multiplicación.

Ejemplo 3:

Evaluar la siguiente expresión de pre incremento en C++.


a=4;
x=( ++a - 12) * ( a – 8):

1. Al evaluar (++a) se obtiene un nuevo valor para “a” = 5 ya que la


operación ++a primero incrementa el valor de la variable y después
asigna. Al operar el paréntesis (5-12) = -7.
2. Si se evalúa (a - 8), se debe reemplazar los valores obtenidos, donde "a"
es igual a 5, (5-8) obteniendo el valor de "-3”.
3. Al final se realiza la multiplicación entre los resultados en este caso "-7"
y "-3" obteniendo como resultado 21.

4. 4.4. Errores de programación


5. Al momento de programar se tiende a cometer errores. Las personas
comenten errores al momento de realizar la codificación de un programa.
6. La programación tiene diferentes tipos de errores, unos fáciles de
detectar y otros difíciles de depurar.
7. Existen errores de compilación y de ejecución que son detectados al
momento de finalizar la codificación.

4.4.1. Errores de sintaxis


Estos errores se producen cuando están mal escritas las instrucciones del
código fuente. Se deben a palabras o expresiones escritas de forma errónea o
incompleta, variables que no son declaradas, falta de algún signo, etc. Este error
es detectado cuando el programa es puesto en marcha o ejecutado y el
compilador muestra una lista de los errores de sintaxis. («Codificación de un
programa | Tutorial de Programación | Abrirllave.com», s. f.)

Este tipo errores impedirá, tanto al compilador como al intérprete traducir la


instrucción, ya que, ninguno de los dos podrá entender lo que está haciendo el
programador. («Errores en programación. Los errores al programar y su soluc»,
s. f.)

Ejemplo:

1. cout<<”Ingrese un número”<<endl;< span=""></endl;<>


2. couut<<”Ingrese un número”<<endl;< span=""></endl;<>
En el ejemplo anterior en el ejemplo 1, cout es un flujo de salida estándar del
programa C++, que imprime en pantalla y en el ejemplo 2 cout está escrito de
forma incorrecta porque tiene "dos u" y el programa no lo puede interpretar por
lo que lo detecta como un error.

4.4.2. Errores semánticos


Estos errores son poco perceptibles y se producen cuando la sintaxis del
código está escrita de forma correcta, pero el significado no es el que pretendía.

La escritura obedece las reglas del lenguaje de programación y por ello el


compilador no detecta errores semánticos.

Un error puede hacer que el programa se ejecute de una forma muy diferente
con un mensaje de error, ya que ni el compilador ni el sistema proporcionan
información sobre qué es lo que está fallando. («Errores semánticos | Compilador
| Lenguaje de programación», s. f.)

Ejemplo:

1. int x=5,r;
2. r = x/2;
3. cout<<r<<endl;< span=""></r<<endl;<>

El valor esperado de “r” es 2.5 pero la variable “r” es una variable de tipo entero,
por lo que solo toma la parte entera de la operación.

Ejemplo 2:

1. string nombre;
2. nombre = “José”;
3. apellido = “Zambrano”;
4. cout<<”El nombre y apellido es: ”<<nombre<<apellido<<endl;<
span=""></nombre<<apellido<<endl;<>

En la primera línea la variable "nombre" está declarada como un string, pero


la variable apellido no está declarada y al momento de hacer la impresión no
puede realizarlo porque falta una variable por declarar.
4.4.3 Errores en tiempo de ejecución
Son los que se producen cuando un programa es ejecutado, son los más
difíciles de detectar por el compilador, ya que es error de lógica y no de sintaxis,
por ejemplo: realizar una suma en vez de una multiplicación o la división de un
número entre cero.

Tema 5: Entrada y Salida por consola - Tema 5:


Entrada y Salida por consola

5.1. Introducción
Antes de escribir un código, el programador debe entender con claridad que
datos van a usarse, el resultado deseado y el procedimiento que va a utilizarse
para producir este resultado.

El procedimiento, o solución, seleccionado se conoce como algoritmo.

Las funciones de E/S de la consola nos permiten controlar la entrada por


teclado y la salida por pantalla.
5.2. Entrada/Salida ( Pseudocódigo / Diagrama de Flujo)
Lectura

“Consideramos como entrada aquella operación que nos permite leer un valor,
para después asignársela a una variable o más variables determinadas. Por lo
tanto, el comando leerá uno o más variables” (Antonio, 2013).

PSEUDOCODIGO

Leer variable de entrada;

Ejemplo:

Leer num1;

Leer num1,num2;

La instrucción leer permite ingresar un valor o conjunto de valores de acuerdo


a las variables que se les asigne.

En el primer ejemplo se pide el ingreso un valor por teclado y cuando presione


Enter se almacenará en la variable num1.

En el segundo ejemplo de la misma manera se pide que ingrese dos valores


por teclado, los cuales al presionar Enter se almacenarán tanto en la variable
num1 y num2 respectivamente.

Para guardar un valor en una variable, la misma debe estar creada con
anterioridad, caso contrario nos emitirá un error.

Si la variable existe, esta pierde su valor anterior ya que tomará el valor nuevo,
por lo cual se dice que la lectura es "destructiva".

DIAGRAMA DE FLUJO

En la Figura 1 se representa la lectura. Se coloca las variables como se


encuentra en la imagen y si son varias variables se las separa por comas. La
flecha que se encuentra en la esquina superior derecha se encuentra apuntando
hacia el interior e indica que es una entrada.

Salida
“Consideramos como salida aquella operación que nos permite dar escritura
o impresión de un valor, con el fin de enseñar al lector el resultado de una
variable o más de manera general” (Antonio, 2013).

PSEUDOCODIGO

Escribir “variable de salida”;

Ejemplo:

Escribir “Ingrese un valor a num1” ;

En este ejemplo la instrucción escribir mostrará una cadena de caracteres


en pantalla, en este caso el texto a mostrar es "Ingrese una valor a num1".

Si en alguna parte de la codificación se escribe las palabras clave como


"SIN SALTAR" o "SIN BAJAR “, los datos codificados se mostrarán en pantalla
pero no avanzará a la línea siguiente, por lo tanto, la siguiente lectura o escritura
del código continuará en la misma línea.

En caso contrario, si se desea que haga un salto de línea se coloca la


instrucción "Escribir".

EJEMPLO

Escribir Sin Saltar , ... , ;

Escribir , ... , Sin Saltar;

DIAGRAMA DE FLUJO

En la Figura 2 se presenta el Diagrama de Flujo de Datos de la instrucción


Escribir. Si existe mas de una expresión, esta es separada por comas.
La flecha que está ubicada en la esquina superior derecha apunta hacia el
exterior indicando que es una salida.

Ejemplo de Entrada/Salida

Elaborar un algoritmo que lea dos números enteros, calculando y


escribiendo el valor de su suma, resta, producto y división.

 Pseudocódigo

Proceso Suma_Resta_Multiplicacion_Division

Definir numero1, numero2, suma, resta, multiplicacion, division como


entero;

Escribir "Introduce el primer número";

Leer numero1;

Escribir "Introduce el segundo número";

Leer numero2;

suma<-numero1+numero2;//Suma los números y asigna el resultado a


la variable suma

Escribir "La suma es ", suma; //Mostrar el resultado de la suma por


pantalla

resta<-numero1-numero2;//Resta los números y asigna el resultado a la


variable resta

Escribir "La resta es ", resta;

multiplicacion<-numero1*numero2;//Multiplica los números y asigna el


resultado a la

//variable multiplicacion

Escribir "La multiplicación es ", multiplicacion;

division<-numero1/numero2;//Divide los números y asigna el resultado a


la variable division

Escribir "La división es ", division;

FinProceso

 Diagrama de flujo

5.3. Entrada y Salida por consola C++


Para usar las palabras claves cin y cout se debe escribir la instrucción "using
namespace std", que permite usarlas. Este espacio de nombre permite
simplificar las instrucciones std::cin y std::cout.

Entrada :cin()
La instrucción cin puede usarse para introducir y almacenar tantos valores
como símbolos de extracción, >>, y variables que haya para contener los datos
introducidos. Tomando el valor de flujo de su izquierda y lo sitúa en la variable
situada a la derecha.

Formato de instrucción

cin >> num1;

Se produce un valor que se leerá en la terminal y que se asignará a la


variable num1.

Ejemplo

#include

using namespace std;

int main()

int i;

cout<<"introduzca un numero: "<<endl;< span=""></endl;<>

cin>>i;

Salida : cout()
Mediante los valores de las variables se pueden enviar a la pantalla con
cualquier combinación de variables y cadenas. cout es usado como operador de
inserción, “<< “.

Ejemplo:

#include
using namespace std;

int main()

cout<<"Hello Friend"<<endl;< span=""></endl;<>

return 0;

Nota: Estas instrucciones se encuentran en la biblioteca estándar y es


estrictamente necesario usar antes de implementar el int main el using
namespace std;.

5.4. Entrada y Salida por consola con formato


Este tipo de función se encuentra en la librería <stdio.h>. La función
printf() y scanf() en C, permiten escribir o leer datos de cualquier tipo como
caracteres, cadenas y números.

Entrada con formato scanf()

Su propósito es leer todos los datos de cualquier tipo, convirtiéndolo a un


formato apropiado por interno. La sintaxis de comando requiere un especificador
de formato para saber qué tipo de dato va a interpretar y la dirección de una
nueva variable, la cual se obtiene escribiendo un "&" seguido de la misma.

El prototipo de scanf() es:

scanf (cadena_control, &argumento);

La cadena control determina como se lee los valores de las variables


como especificador de formato.

Los especificadores de formato establecen el formato de salida por pantalla


de los argumentos. La forma más sencilla de escribir un especificador de formato
es con el carácter (%) seguido de un carácter de conversión que indique el tipo
de dato del argumento.

La especificación de la función scanf() en el lenguaje C ANSI se muestra


en la Figura 5.

Formato de la función
Salida con formato :printf()

Depende del tipo de dato para que la variable sea impresa.

El prototipo de printf() es:

printf (cadena_control, argumento);

printf (char *cadena_control, argumento);

La cadena_control, se encuentra formada de dos elementos:

1. El primer elemento es el caracter que se mostrará en pantalla,.


2. El segundo elemento, incluirá los “especificadores de formato”, los
cuales definen la forma en que se mostrará el argumento, por ejemplo, los
tipos: int, char, etc.

 Los Argumentos: son expresiones o variables a imprimirse y pueden ser


omitidas.
Si un “especificador de formato” no tiene argumento, en el mejor caso,
se obtendrá datos sin sentido en la salida.

La función printf() toma la cantidad de caracteres escritos en la salida o un


valor que produzca un error.

El especificador de la función scanf() tiene exactamente el mismo formato


para la función prinf() en el lenguaje C ANSI, se muestra en la Figura 5.

5.4.1. Modificador de Formato


Para esto se agrega los especificadores, para que su salida sea modificada.
Por ejemplo, se especifica el número de decimales y su justificación hacia la
izquierda. Se coloca el símbolo % y el código, de forma que esté en medio de
las dos, además se puede usar más de un modificador en el mismo sitio.

1. Especificador de longitud mínima: Permite guardar en un espacio de


memoria para la la impresión de la variable.

2. Especificador de precisión: Es un punto seguido de un entero, de acuerdo


al tipo de dato al que vayamos aplicar.

a. Punto flotante.Permite determinar las posiciones del decimal que se vaya


a imprimir.

b. Cadena de Caracteres. Es el valor máximo de caracteres que se van a


imprimir.

c.Entero. Este permite que los dígitos que aparezcan por cada número a
imprimir.

#include

int main()

printf("%4f \n", 102.345);


printf("%3.8d \n",109000);

printf("%10.15s \n", "Esto es facil");

return 0;

3. Ajuste de Salida: Todas las salidas están ajustadas a la longitud derecha


del campo a una longitud mayor que el dato que el de imprimir.

4. El modificador l y h: Se le aplican especificadores de formato d,i,x,o y u.

%ld: imprimirá un entero largo.

%hd: imprimirá un entero corto.

5. El modificador # y *: Si # procede a los especificadores f, e o g, el


cual asegura obtener un punto decimal y el * precede a la longitud mínima de
campo y la precisión pasando como argumentos a printf() en vez de utilizar una
constante.

Ejemplo:

#include

#include

int main()

double num;

printf ("Introduce un numero decimal: ");

scanf ("%lf", &num);

printf ("Has introducido %lf", num);

return 0;

En este ejemplo se usa como especificador de formato el %lf que es usado


para datos long double (especificador de coma flotante).

5.5. Entrada y Salida de caracteres por consola


Permite únicamente la lectura y escritura. Estas se encuentran en la
librería conio.h.

Entrada

1. getchar()
Lee desde el teclado al carácter y lo guarda en la memoria temporal hasta
que se pulse la tecla de ENTER.

El prototipo de la función getchar() es:

getchar(void);

2. getche()

Lee el carácter con eco sin esperar ningún retorno.

El prototipo del getche() se encuentra en la librería , siendo similar al


getchar().

3. getch()

Lee el carácter sin eco y tampoco espera el retorno, el cual no se mostrará


en pantalla el eco del carácter que se incluyó.

El getche() y getch() no son parte del ANSI, pero son las más utilizados.

Salida

 putchar()

Escribe su argumento de un tipo carácter en pantalla en la ubicación del


cursor.

El prototipo de la función putchar() es:

putchar(int c);

Ejemplo

#include

#include

#include

int main ()

char variable;

while ( ( variable = getchar() ) != '0')

{ //no parara hasta que la la letra sea un numero cero

printf(" -Siiiii ");

putchar(variable);

getchar(); //Este getchar sirve solo para colocar una pausa


return 0;

5.6. Entrada y Salida de cadena de caracteres por consola


Permite únicamente la lectura y escritura. Este tipo de funciones se
encuentran en la librería stdio.h.

Entrada:gets()

Lee una cadena de caracteres insertada por teclado, mientras se pulse el


retorno y es almacenada en la dirección apuntada por el argumento (puntero a
carácter.

El prototipo de gets() es:

char *gets(char *cadena);

Esta función toma en primer lugar un puntero a la cadena, el cual se debe


asegurar que el array apuntado por la cadena no supere el límite.

Salida: puts()

Escribe en pantalla la cadena apuntada por su argumento. Donde el carácter


nulo se transforma en un carácter de salto de línea, en caso de algún error.

El prototipo de la función puts() es:

puts(char *cadena);

Esta función requiere mucho menos y se ejecuta de manera espacio.

Ejemplo:

#include

#define TAM_MAXIMO 80

int main()

char cadena[TAM_MAXIMO];

printf("Por favor, escriba una línea de no más de 80 caracteres:\n");

gets(cadena);

printf("La línea que has introducido es:\n");

puts(cadena);

return 0;

}
Nota: El uso del gets es algo complicado ya que la función no conoce el
tamaño del array, simplemente va leyendo datos de la entrada hasta que llega al
final.

También podría gustarte