Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Apuntes 1
Apuntes 1
Análisis
Especificación
Programación
Algoritmo
Codificación
Programa
Análisis: Examen de lo que necesitaremos informáticamente para resolver el problema.
Ordenadores, periféricos, personal informático..., datos, resultados que queremos
conseguir, relación entre datos y resultados,...
Una vez hecho el análisis, tendremos la ESPECIFICACIÓN de nuestro problema, a
partir de la cual podemos afrontar la fase de:
Programación: Se debe abordar la solución al problema aplicando un conjunto de
técnicas que utilizaremos: programación estructurada y diseño descendente. El
resultado de esta fase el ALGORITMO, que es el conjunto de acciones a realizar por el
ordenador para resolver un problema. Para su representación utilizaremos el
PSEUDOCÓDIGO.
Codificación: “Traducción” del algoritmo a un lenguaje informático, con lo que
obtenemos el PROGRAMA.
Pág. 1
Programación estructurada
La programación estructurada utiliza una serie de reglas básicas para el mejor
desarrollo de los programas. Estas normas se basan fundamentalmente en la no
utilización de la instrucción Go To (Ir a) que provoca un programa lleno de
bifurcaciones, difícil de seguir... La programación estructurada se basa en la utilización
de estructuras de programación, estructuras de control (bucles, ...)
Los programas estructurados son más fáciles de corregir y de modificar.
Actualmente todos los lenguajes de alto nivel son estructurados y además están basados
en la programación modular que consiste en dividir el problema en otros más pequeños
para una más fácil resolución del mismo.
Algoritmo SumaRestaProductoDivisión
Entorno
Num1, Num2 Son Entero
Suma, Resta Son Entero
Prod, Divi Son Real
Inicio
Visualizar 'Introducir el primer número'
Leer Num1
Visualizar ' Introducir el segundo número'
Leer Num2
Suma Num1 + Num2
Resta Num1 - Num2
Prod Num1 * Num2
Divi Num1 / Num2
Visualizar 'La suma es: ', Suma
Visualizar 'La resta es: ', Resta
Visualizar 'El producto es: ', Prod
Visualizar 'La división es: ', Divi
FinAlgoritmo
Pág. 2
Tipos de datos en programación estructurada:
Internos: (RAM)
simples:
- Naturales
- Enteros
- Reales
- Booleanos
- Carácter
- Cadenas de caracteres
estructurados:
estáticos:
- Vectores y matrices
- Registros o Tuplas
dinámicos:
- Pilas
- Listas
- Colas
- Arboles
Ficheros:
- Secuenciales
- Aleatorios
por su formato:
- Binarios
- De texto
Pág. 3
Constantes:
Entorno
TIEMPO real con valor 0.5
COLPANT Natural con valor 80
FILPANT Natural con valor 25
MAXVISU Es Natural con valor 30
Mensaje Es Cadena[200-MAXVISU]
Variables:
Las variables sirven para almacenar valores que se usan a lo largo del
programa. Una variable se debe inicializar o su valor inicial será indeterminado. El
nombre que se le dé a la variable debe ser lo más significativo posible para facilitar la
legibilidad del programa.
Entorno
Num1, Num2 Son Entero
Suma, Resta Son Entero
Prod, Divi Son Real
Operadores:
Los operadores como su nombre indica realizan una operación con datos de un
tipo determinado, obteniendo un resultado. Por ejemplo la suma es un operador.
Tipos de operadores:
- Aritméticos:
- De relación
= igual x=y
<> distinto x<>y
< menor que x<y
> mayor que x>y
Pág. 4
<= menor o igual que x<=y
>= mayor o igual que x>=y
- Lógicos
O, Y, NO
Tablas de verdad
0Y0=0 0O0=0 NO 1 = 0
0Y1=0 0O1=1 NO 0 = 1
1Y0=0 1O0=1
1Y1=1 1O1=1
- Alfanuméricos
Nombre+Apellidos
Expresiones:
Ejemplo:
Para realizar algoritmos se necesitan algunas sentencias básicas de E/S (por teclado y
pantalla). En pseudocódigo utilizaremos estas. Al programar el algoritmo en un lenguaje
concreto utilizaremos las características propias del mismo para mejorar los detalles.
En pantalla:
Visualizar expresión
BorrarPantalla
PosicionarCursor(fila,columna)
En impresora:
Imprimir expresión
Del teclado:
Leer variable
EsperarTecla
Pág. 5
Sentencias de control estructuradas:
Las sentencias de control ofrecen la posibilidad de controlar la ejecución del
programa.
orden_1
orden_2
...
orden_n
Doble
Si expresión Entonces
Secuencia1 de ordenes F V
SiNo
Secuencia2 de ordenes
FinSi Secuencia1
Secuencia2
Múltiple
EnCasoDe expresión
En otro caso
Sea rango_1 Hacer Rango1
Secuencia1 de ordenes
Rango-n
Sea rango_2 Hacer
Secuencia2 de ordenes Sec1 Sec2 Sec3
Sec
... SecN
Sea rango_n Hacer
SecuenciaN de ordenes
EnOtroCaso
Secuencia de ordenes
FinEnCasoDe
Pág. 6
Falso
Repetitivas: (bucles)
Repetir Secuencia
Secuencia de ordenes
HastaQue condición
Falso
Verdadero
Vc Vi
Verdadero
Vc>Vf
Para Vc Vi Hasta Vf con incremento incr Hacer
Secuencia de ordenes
FinPara Falso
Secuencia
VcVc +incr
Pág. 7
Funciones predefinidas:
Trigonométricas:
Numéricas:
De cadena:
por ejemplo
Entorno
SePulsoTecla es Booleano /* indica si se pulso la tecla */
Pág. 8
Contadores: Son variables de tipo entero que van incrementando su
valor en una cantidad fija cada vez que ocurre un cierto suceso. Normalmente se utilizan
en bucles.
por ejemplo
Entorno
Cuenta es Entero
Inicio
...
Cuenta <-- Cuenta+1
...
Entorno
Suma es Entero
Numero es entero
Inicio
...
Suma <-- Suma + Numero
...
Cadenas de caracteres:
Pág. 9
Array, vector, tabla o matriz.
Un array es un conjunto de posiciones contiguas en la memoria que continen elementos
del mismo tipo y que se referencia por un nombre común.
Los arrays pueden tener de una a varias dimensiones.
Pág. 10
Todo array se compone de un determinado nº de elementos. Cada elemento es referen-
ciado por la posición que ocupa dentro del array. A dichas posiciones se les llama índi-
ce.
Arrays unidimensionales:
La forma general de declaración de un array unidimensional es:
especificador_de_tipo nombre_variable[tamaño];
donde especificador_de_tipo es el tipo base, es decir, el tipo de cada elemento y tamaño
es el número de elementos del array.
por ejemplo:
int puntos[12];
estamos declarando un array unidimensional de 12 elementos de tipo entero.
La forma general de acceder a un elemento del array es:
nombre_variable [indice]
En C++ todas los arrays tienen el cero como índice de su primer elemento. Por tanto,
cuando se escribe por ejemplo int v[10];
se está declarando un array de 10 elementos de tipo entero y el
array va de v[0] a v[9].
C++ no comprueba los límites de los arrays. Esto quiere decir que si hacemos v[20]
para el array anterior, el C no nos va a informar de ningún error. Es responsabilidad del
programador el indexamiento correcto de un array.
Arrays bidimensionales:
Un array bidimensional es, en realidad, un array unidimensional donde
cada elemento es otro array unidimensional.
Así como a los arrays unidimensionales se les suele llamar vectores, a los arrays bidi-
mensionales se les suele llamar matrices.
La forma general de declaración es:
especificador_de_tipo nombre_variable [tamaño_1] [tamaño_2];
y se accede a los elementos del array:
nombre_variable [indice_1] [indice_2]
Por ejemplo:
Char meses[12][25];
Pág. 11
#include <stdio.h>
#define num_filas 4
#define num_columnas 7
int i, j, matriz [num_filas] [num_columnas];
for (i = 0; i < num_filas; i++)
for (j = 0; j < num_columnas; j++)
matriz[i][j] = i + j;
for (i = 0; i < num_filas; i++)
{
for (j = 0; j < num_columnas; j++)
cout<< matriz[i][j];
cout<<'\n';
}
}
La salida es:
0 1 2 3 4 5 6
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 5 6 7 8 9
Arrays multidimensionales
C permite arrays de más de dos dimensiones. El límite exacto, si lo hay, viene determi-
nado por el compilador.
La forma general de declaración de un array multidimensional es:
especificador_de_tipo nombre_array [tam_1] [tam_2] ... [tam_n];
NOTA: tam_1, tam_2, ..., tam_n han de ser expresiones constantes.
La forma general de acceso es:
nombre_array [ind_1] [ind_2] ... [ind_n]
#include <iostream>
#include <string>
Pág. 12
int main()
{
//forma de inicializar y asignar una cadena
string cad_1 = "Hola mundo";
return 0;
}
La forma más común y fácil de acceder a un caracter en una determinada posición que
queramos es mediante el uso de [] (corchetes) cómo se hace con los arrays, de esta for-
ma si tenemos un tipo string de nombre str al cual le asignamos la palabra “programa” y
queremos que se nos retorne la letra que está en la posición 3 (contando desde cero,
como siempre) entonces el código sería el siguiente.
#include <iostream>
#include <string>
int main()
{
//definimos la cadena str
string str;
return 0;
}
Cuando el código es ejecutado, nos indicará que la letra en la posición 3 de la cadena str es el caracter ‘g’.
Comparaciones entre strings.
La comparación entre objetos string se puede llevar a cabo fácilmente mediante el uso
de los operadores ==, <=, >=, <, >, !=, que son los mismos que se usan para las opera-
ciones de tipo lógicas, hay que aclarar que se distingue entre mayúsculas y minúsculas.
Se puede saber cuando una cadena está antes alfabéticamente hablando (es menor) o
está después de la otra (es mayor) esto se debe a la organización de las letras mayúscu-
las y minúsculas en el estándar ascii.
En el siguiente ejemplo tenemos dos cadenas (str1 y str2) ambas con las cadenas “abcd”
y “abcd” respectivamente, por lo tanto si las comparamos ambas cadenas deben ser
iguales y el programa nos lo indicará en la terminal (consola).
Pág. 13
#include <iostream>
#include <string>
int main()
{
//creamos y asignamos las cadenas str1 y str2
string str1="abcd", str2="abcd";
cout<<endl;
//comparamos si las cadenas son iguales
if(str1==str2)
{
cout<<"str1 es igual a str2"<<endl<<endl;
}
return 0;
}
Concatenación de Strings.
El operador ‘+’ (más) nos permite concatenar dos o mas cadenas, entonces en el si-
guiente ejemplo si tengo a str1, str2 que contienen las cadenas “Julio” y “Cesar” respec-
tivamente puedo unir (concatenar) el contenido de str2 a str1 solo poniendo str1 = str1 +
str2, el código es:
#include <iostream>
#include <string>
int main()
{
//definimos e inicializamos ambas cadenas
string str1="Julio ", str2="Cesar";
Pág. 14
aparezca la palabra “mi” que sería la posición 8 (como siempre contando desde 0 en
este lenguaje). Son muchos los métodos ‘.find‘ que implementa la clase string de C++,
algunos de los más usados se presentan en el siguiente código, el cual puedes manipular
para observar los diferentes comportamientos. La explicación de cada uno está en los
comentarios del código.
#include <iostream>
#include <string>
int main()
{
string str = "abcdefgh";
return 0;
}
Uno de los métodos que se usan frecuentemente es el que nos permite obtener una sub-
cadena a partir de una principal, decir, si por ejemplo tengo una cadena “Hola Mundo”
puedo obtener una segunda cadena y hacer que esta almacene la palabra “Mundo” de la
cadena principal, esto lo logramos con el método .substr() que en su forma más básica
recibe 2 parámetros, el primero de ellos indica la posición del primer caracter a obtener
y el segundo parámetro indica cuantos caracteres tomaremos (a partir del que se tomó
primero). Lo anterior lo ilustramos en el siguiente código, donde str1 contiene “Hola
Mundo” y str2 va a contener la cadena “Mundo” que vamos a extraer de str1.
#include <iostream>
#include <string>
Pág. 15
using namespace std;
int main()
{
//definimos los objetos string que vamos a usar
string str1="Hola Mundo";
string str2;
Tenemos dos métodos .length() y .size() ninguno recibe parámetros y ambos nos retor-
nan la longitud de la cadena (string) con la cual invoquemos el método, ambos tienen
como retorno un tipo Int.
#include <iostream>
#include <string>
int main()
{
//definimos la cadena y la inicializamos
string str="Hola!";
return 0;
}
Este método es bastante útil cuando tratamos con interfaces de usuario y tenemos que
validar si algún campo de texto de la interfaz contiene o no contiene datos, el método
.empty() presente en string, nos retorna un true si la cadena está vacía, o false si la ca-
dena contiene datos.
En el siguiente código definimos una string str vacía, y luego invocamos el método
empty() para verificar que no posea ningún contenido, en este caso como es obvio, la
condición se cumplirá y el programa nos dirá que ese objeto string se encuentra vacío.
Pág. 16
#include <iostream>
#include <string>
int main()
{
//definimos la cadena y la dejamos sin contendio
string str="";
return 0;
}
En C++ disponemos de dos métodos para capturar la entrada de texto desde el teclado,
los cuales son el flujo cin y la función getline(), ¿cuál es la diferencia?, bueno, la dife-
rencia radica en que con el flujo cin leemos una cadena solo hasta que encontremos un
espacio, entonces si por ejemplo ingresamos desde el teclado la cadena “Julio César”
entonces el objeto cin nos retornará solo “Julio” y lo que esté después del espacio se
quedará en el buffer, por lo tanto el flujo cin, aunque no es común, lo podemos usar
para cuando estamos seguros que el dato que se ingresará solo será una palabra (no in-
gresarán ‘espacios’). Por otro lado tenemos el método getline(cin,Objeto_string) que re-
cibe dos parámetros uno de ellos es ‘cin‘ que le indica que la lectura se hará desde la en-
trada estándar (teclado) y el siguiente parámetro es el objeto string donde queremos que
se almacene la información ingresada, así de simple.
Para ilustrar todo lo que se dijo anteriormente, ingresaremos desde el teclado la cadena
“Hola Mundo” y observaremos los resultados de capturar esa información con los dos
métodos que se describieron.
#include <iostream>
#include <string>
int main()
{
//definimos la cadena y la dejamos sin contendio
string lectura1, lectura2;
Pág. 17
cin.ignore(256,'\n');
cout<<"\nIngrese nuevamente la palabra: ";
getline(cin,lectura2);
Pág. 18