Resumen Algoritmo 1 UNLAR
Resumen Algoritmo 1 UNLAR
operaciones que se debe realizar para llevar a cabo una tarea en tiempo finito (tiene un inicio y un
fin). Los algoritmos están presentes en nuestra vida cotidiana y, aún sin saberlo, aplicamos
algoritmos cada vez que se nos presenta un problema sin importar cuál sea su grado de
complejidad. Por ejemplo, “cruzar la calle”:
Esperar a que la luz del semáforo peatonal esté en verde (esperarSemaforo);
Cruzar la calle (cruzarCalle);
Características de un Algoritmo
Ser preciso: Tienen que estar ordenadas lógicamente
Ser definido: El ordenador solo desarrollara las tareas programadas con los datos
suministrados
Ser finito: El número de pasos debe ser limitado// Esto no siempre se cumple porque
existen programas que se ejecutaran eternamente como ser el programa que calcula los
números primos.
Ser Formal: Tiene que expresarse de formar adecuada.
Ser Correcto: Debe satisfacer la necesidad o solucionar el problema para el cual fue
diseñado
Ser Eficiente: En cuanto menos recursos de la computadora requiera será más eficiente el
algoritmo.
Lenguajes de Programación C: Los lenguajes de programación son lenguajes formales que se
componen de un conjunto de palabras, Podemos utilizar un lenguaje de programación para
escribir o codificar nuestro algoritmo y luego, con un programa llamado “compilador”, podremos
generar los “unos y ceros” que representan sus acciones.
Existen lenguajes de Alto nivel que son los que mas se parecen al lenguaje humano fáciles de
comprender y los de bajo nivel que se acercan más al lenguaje máquina, el lenguaje “C” es un
lenguaje de propósito general, desarrollado en 1972 por Dennis Ritchie en los Laboratorios Bell,
es considerado como un lenguaje de bajo nivel.
Cuando escribimos las acciones de un algoritmo en algún lenguaje de programación decimos que
lo estamos “codificando”. Generalmente, cada acción se codifica en una línea de código. Al
conjunto de líneas de código, que obtenemos luego de codificar el algoritmo, lo llamamos “código
fuente”. Una ves el algoritmo ha sido codificado y compilado puede ser ejecutado en una
computadora y pasa a ser llamado programa.
Los lenguajes de programación proveen bibliotecas o conjuntos de funciones a través de las
cuales se ofrece ciertas funcionalidades. Programando en “C”, por ejemplo, cuando necesitemos
mostrar un mensaje en la pantalla utilizaremos la función “printf” y cuando queramos leer datos a
través del teclado utilizaremos la función “scanf”. Ambas funciones forman parte de la biblioteca
estándar de entrada/salida de “C”, también conocida como “stdio.h”
Llamamos “consola” al conjunto compuesto por el teclado y la pantalla de la computadora en
modo texto. Cuando hablemos de ingreso de datos por consola nos estaremos refiriendo al
teclado y cuando hablemos de mostrar datos por consola estaremos hablando de la pantalla,
siempre en modo texto.
Sentencia
Continue: Se utiliza dentro de un bucle. Cuando el programa llega a
una sentencia CONTINUE no ejecuta las líneas de código que hay a
continuación y salta a la siguiente iteración del bucle.
En el ejemplo muestra por consola del 1 al 10 excepto el 5.
Sentencia Break: La instrucción de salto break se usa para interrumpir (romper) la ejecución
normal de un bucle, es decir, la instrucción break finaliza (termina) la ejecución de un bucle y, por
tanto, el control del programa se transfiere (salta) a la primera instrucción después del bucle.
Sentencia Goto: Otro comando que tiene el lenguaje C es el goto. Este comando nos permite
saltar en forma incondicional a cualquier otra parte de la misma función. La sentencia goto no es
aconsejada en la metodología de programación estructurada pero su uso en casos especiales
nos permite crear código más conciso. Un caso común donde se la utiliza es cuando queremos
salir de una serie de for anidados a un bloque de la misma función, pero fuera de dichos for (tener
en cuenta que el comando break solo sale del for que la contiene)
Funciones: Las funciones son bloques de códigos utilizados para dividir un programa en partes
mas pequeñas, cada una de las cuales tendrá una tarea determinada.
tipo_funcion nombre_funcion (tipo y nombre de argumentos) { bloque de sentencias }
Tipo de función: puede ser cualquier tipo de los que conocemos, el valor devuelto por la función
será de este tipo. La función devolverá un valor de tipo entero ( int ) por defecto si no indicamos el
tipo y si no queremos que retorne ningún valor deberemos indicar el tipo vacío ( void ).
Nombre_funcion: es el nombre que le daremos a la función.
Tipo y nombre de argumento: Los argumentos de una
función no son mas que variables locales que reciben un
valor. Este valor se lo enviamos al hacer la llamada a la
función. Pueden existir funciones que no reciban
argumento.
Bloque de sentencias: es el conjunto de sentencias que serán ejecutadas cuando se realice la
llamada a la función.
Las funciones pueden ser llamadas desde la función main o desde otras funciones. Al finalizar la
ejecución de esta sus variables locales se destruirían.
Declaración de una función o prototipo de una función: al
igual que las variables las funciones también son
declaradas, a esto se llama prototipo de una función,
pueden escribirse antes de la función main o bien en otro
fichero. En el caso de hacerlo en otro fichero se lo
indicaremos al compilador con la directiva #include. En el
programa anterior muestra el num 10 de la variable local
en main y al llamar a void función muestra el num 5 de la
variable global.
Función return: las funciones pueden retornar un valor.
Esto se puede hacer con return, que al finalizar la
ejecución devuelva un valor. Return (valor o expresión);
El valor devuelto por la función tiene que asignarse a una variable para que no se pierda.
Macros: Las macros son directivas de preprocesador con las que podemos relacionar un nombre
con una expresión. Por ejemplo: #define MAX(x,y) x>y?x:y #define MIN(x,y) x<y?x:y
El preprocesador de C
reemplazará cada macro
por la expresión que
representa. Así, podemos
invocar a macro MAX de
la siguiente manera:
mayor = MAX(a,b);
donde a y b son
argumentos que le
pasamos a la
macro MAX. El
preprocesador
reemplazará la línea
anterior por la siguiente
línea:
mayor = a>b?a:b
Selección múltiple (switch): La estructura permite tomar una decisión en función de que el valor
de una variable o el resultado de una expresión numérica entera coincidan o no con alguno de los
valores indicados en diferentes casos o con ninguno de estos. Gráficamente, la representaremos
así: ↑
Este gráfico debe interpretarse de la siguiente manera: si el valor de unaVariable es 1 entonces
se ejecutarán las acciones accion1, accion2 y accion3. En cambio, si unaVariable vale 2 se
ejecutarán las acciones accion4 y accion5. Podemos agregar tantos casos como necesitemos.
Por último, podemos indicar la opción default que representa a todos los otros casos que no
fueron indicados explícitamente.
Los casos deben representarse con valores numéricos literales o constantes. El caso default es
opcional.
Ejemplo: Leer un valor
numérico que representa un
día de la semana. Se pide
mostrar por pantalla el nombre
del día considerando que el
lunes es el día 1, el martes es
el día 2 y así, sucesivamente.
Este problema se puede
resolver fácilmente utilizando
una estructura de selección
múltiple como veremos a
continuación:
En el diagrama leemos el número de día en la variable nroDia y luego, utilizamos una estructura
de selección múltiple (switch) con los casos 1, 2, 3, 4, 5, 6 y 7.
Si el usuario ingresó el número de día 1, entonces la estructura ingresará por el caso case
1 donde le asignamos la cadena “Lunes” a la variable dia. Análogamente, si el usuario ingresa el
valor 2, entraremos por case 2 y le asignaremos a dia la cadena “Martes” y así, sucesivamente.
Es muy importante poner la sentencia break al finalizar el conjunto de acciones que se ejecutan
dentro de cada caso ya que si la omitimos se ejecutarán secuencialmente todas las acciones de
todos los casos subsiguientes.
Es decir, supongamos que el usuario ingresa el día número 5 y omitimos poner los breaks
entonces el programa ingresará por case 5, asignará “Viernes” a dia, luego le asignará “Sábado” y
luego “Domingo”. Por lo tanto, la salida será: 5 es Domingo
Para asignar el nombre de cada día a la variable dia, no utilizamos el operador de asignación, lo
hacemos a través de la función strcpy. Esto lo explicaremos a continuación.
Arrays, arreglos, cadenas o vectores en C - Ejemplos y uso: Los arrays son variables
estructuradas como cadena de caracteres, donde cada elemento se almacena de forma
consecutiva en un número de notaciones.
Un array es un identificador que referencia un conjunto de datos del mismo tipo. Imagina un tipo
de dato int; podremos crear un conjunto de datos de ese tipo y utilizar uno u otro con sólo cambiar
el índice que lo referencia. El índice será un valor entero y positivo. En C los arrays comienzan
por la posición 0.
ARRAY Unidimensional (Vector): Un array es un conjunto de datos del mismo tipo ordenados
de forma lineal una detrás del otro y el array unidimensionales también llamado vector sólo utiliza
un índice para referenciar a cada uno de los elementos. Su declaración será: tipo nombre
[tamaño];
El tipo puede ser cualquiera de los ya conocidos
y el tamaño indica el número de elementos del
vector (se indica entre corchetes [n]). En el ej
puedes observar que la variable “i” es utilizada
como índice, el primer for sirve para rellenar el
vector y el segundo para visualizarlo. Como ves,
las posiciones van de 0 a 9 (total 10 elementos).
Podemos inicializar (asignarle
valores) un vector en el momento de
declararlo. Si lo hacemos así no es
necesario indicar el tamaño. Su
sintaxis es: tipo nombre []={ valor 1, valor 2...}
Una particularidad con los vectores de tipo char (cadena de caracteres), es que deberemos
indicar en que elemento se encuentra el fin de la cadena mediante el carácter nulo (\0). Esto no lo
controla el compilador, y tendremos que ser nosotros los que insertemos este carácter al final de
la cadena.
Por tanto, en un vector de 10 elementos de tipo char podremos rellenar un máximo de 9, es decir,
hasta vector[8]. Si sólo rellenamos los 5 primeros, hasta vector[4], debemos asignar el carácter
nulo a vector[5]. Es muy sencillo: vector[5]='\0';
Asignación de valores alfanuméricos (función strcpy): Como comentamos anteriormente las
cadenas de caracteres tienen un tratamiento especial ya que en C se implementan
sobre arrays (conjuntos) de caracteres.
Por este motivo, no podemos utilizar el operador de asignación = para asignarles valor. Tenemos
que hacerlo a través de la función de biblioteca strcpy (definida en el archivo “string.h”).
Esta función toma cada uno de los caracteres de la cadena “Hola” y los asigna uno a uno a los
elementos del conjunto s. Gráficamente, podemos verlo así:
Definimos un array de 10 caracteres (o un conjunto de 10 variables de tipo char) char s[10];
Asignamos uno a uno los caracteres de la cadena “Hola” a los caracteres de s. strcpy(s, "Hola");
Además, strcpy agrega el carácter especial '\0' (léase “barra cero”) que delimita el final de la
cadena. Es decir que si bien s tiene espacio para almacenar 10 caracteres nosotros solo estamos
utilizando 5. Cuatro para la cadena “Hola” más 1 para el '\0'.
Vale decir entonces que en un array de n caracteres podremos almacenar cadenas de, a lo sumo,
n-1 caracteres ya que siempre se necesitará incluir el carácter de fin de cadena '\0' al final.
Aquí utilizamos el operador
de asignación = para
asignar el valor “Pablo” a la
variable nombre. Esto solo
se puede hacer al momento
de definir la variable.
Incluso, como no hemos
dimensionado la cantidad de caracteres que el array nombre puede contener, C dimensionará el
conjunto de caracteres con tantos elementos como sea necesario para mantener la cadena
Aquí estamos intentando
asignar “Pablo” a nombre,
pero en una línea posterior a
la declaración de la variable
lo cual no es válido y al
compilar obtendremos un
error.
La manera correcta de
hacerlo sería la siguiente
con “string.h” y strcpy()