Documentos de Académico
Documentos de Profesional
Documentos de Cultura
De acuerdo a la manera en la que procesa los datos que recibe puede llamarse: digital,
analógica o híbrida.
La computadora digital son las que convierten los datos o información de entrada
codificada en forma numérica, utilizando el sistema binario de dos signos: 0 y 1.
Es un ordenador numérico, automático, secuencial y universal.
Es numérico porque toda la información que se puede encontrar
dentro de la computadora está codificada por un conjunto
ordenado de ceros y unos. Esta codificación es de tal naturaleza
que un conjunto de ceros y unos, puede estar representando una
letra o un número, por esto decimos que la información dentro de
una computadora puede ser alfanumérica.
Decimos que es automática pues puede operar sin la intervención
del operador al pasar de una operación a otra en la resolución de un determinado
problema.
Decimos que es secuencial pues debe seguir una serie ordenada de pasos para la
resolución de cada problema.
Y decimos que es universal porque está capacitada para resolver cualquier tipo de
problema que se plantee, dependiendo de cómo se haya programado a la máquina.
La computadora analógica son las que transforman los datos o
información de entrada en función de alguna señal continua
registrada con un determinado grado de precisión como: el tiempo,
presión, temperatura. Para obtener resultados, las computadoras
analógicas miden, mientras que las computadoras digitales
cuentan. Ejemplo: termostatos, bombas de suministros de gasolina.
Pero tienen el inconveniente que al cambiar el problema a resolver,
hay que realambrar la circuitería (cambiar el Hardware).
La computadora híbrida son las que reciben o dan salida a señales analógicas que son
procesadas digitalmente. Esto puede realizarse gracias a los conversores
analógicos/digitales.
1. Supercomputadora
2. Macrocomputadoras
3. Minicomputadora
4. Microcomputadora o PC
La supercomputadora
Macrocomputadoras
Minicomputadoras
Microcomputadoras
Bloques funcionales
En el procesamiento de datos en cualquier computadora, se realizan los siguientes
procesos:
Con independencia del tamaño o potencia de una computadora digital, todas ellas están
compuestas por unidades o módulos dedicados a tareas concretas. Esta construcción
modular facilita su mantenimiento y ampliación. En todas las computadoras digitales se
pueden identificar los siguientes bloques o unidades funcionales principales:
Unidad de entrada.
Unidad de memoria.
Unidad de salida.
Unidad central de proceso.
Unidad de almacenamiento secundario.
Para que las unidades más importantes de una computadora puedan "comunicarse" entre
sí, existe un elemento que las interconecta, llamado bus del sistema. Físicamente, el bus
del sistema es un conjunto de cables. En la siguiente figura se representan, de manera
gráfica, las unidades funcionales más importantes de una computadora; las flechas indican
las direcciones que pueden tomar los datos.
Las computadoras poseen diferentes tipos de buses que proporcionan comunicación entre
sus componentes a distintos niveles dentro de la jerarquía del sistema. El bus que conecta
los componentes principales del procesador (procesador, memoria, E/S) se denominada
bus del sistema (system bus).
El bus del sistema está constituido por líneas. A cada línea se le asigna una función
particular, que en general se clasifican en: líneas de datos, líneas de dirección y líneas de
control.
Hasta ahora se analizaron los componentes de una computadora, desde el punto de vista
funcional.
A simple vista lo que vemos de una computadora son tres elementos diferentes: teclado,
monitor y unidad central o "gabinete". Tanto el teclado como el monitor forman parte de
los periféricos de la computadora, siendo la unidad central la parte principal de la
computadora.
disipar el calor generado. Esos ventiladores son los que generan el ruido característico
de las computadoras actuales.
Placa madre: Es un circuito impreso que permite el pinchado y comunicación de todas las
tarjetas y chips que forman parte de la torre del PC, que no es más que una caja metálica o
de plástico que protege el conjunto de circuitos.
Bus
Puerto: Se define como el lugar donde los datos entran o salen o ambas cosas. Se
denominan “puertos de entrada/salida" (o abreviado puertos E/S) y son interfaces para
conectar dispositivos mediante cables. Generalmente tienen un extremo macho con
clavijas que sobresalen o tipo hembra la cual tiene una serie de agujeros para alojar los
conectores machos.
Puerto Serial COM: Un puerto serie o puerto serial es una interfaz de comunicaciones de
datos digitales, frecuentemente utilizado por computadoras y periféricos, donde la
información es transmitida bit a bit enviando un solo bit a la vez, en contraste con el
puerto paralelo que envía varios bits simultáneamente. La comparación entre la
transmisión en serie y en paralelo se puede explicar usando una analogía con las
carreteras. Una carretera tradicional de un sólo carril por sentido sería como la
transmisión en serie y una autovía con varios carriles por sentido sería la transmisión en
paralelo, siendo los vehículos los bits que circulan por el cable.
Puerto USB: Un puerto USB es una entrada o acceso para que el usuario pueda compartir
información almacenada en diferentes dispositivos como una cámara de fotos, un
pendrive, entre otros, con un computador. Las siglas USB quieren decir Bus de Serie
Universal en inglés.
Es una arquitectura de bus desarrollada por las industrias de computadoras
y telecomunicaciones, que permite instalar periféricos sin tener que abrir la máquina para
instalarle hardware, es decir, que basta con conectar dicho periférico en la parte posterior
del computador.
Puerto RJ-45: La sigla RJ-45 significa ("Registred Jack 45") ó Conector 45 registrado. Es un
conector de forma especial con 8 terminales, que se utilizan para interconectar
computadoras y generar redes de datos de área local (LAN - red de computadoras
cercanas interconectadas entre sí). Se les llama puertos porque permiten la transmisión de
datos entre una red (periférico) con las computadoras.
La RJ-45 es una interfaz física comúnmente usada para conectar redes de cableado
estructurado, (categorías 4, 5, 5e y 6).
Puertos de Audio: Tienen la función de capturar audio procedente del exterior, grabar
señales de audio reproducir sonidos hasta bocinas y capturar la señal del micrófono.
Puertos de Juegos: Permiten la transmisión de datos desde un dispositivo externo con la
computadora.
Puertos de Video: El puerto de video es el intermediario entre la tarjeta de video de la
computadora y el dispositivo que muestre el grafico. Tales como un monitor CRT, una
pantalla de plasma, o un proyector. Ejemplos de puerto de video: BGA, VGA, DBI, HDMI, S-
VIDEO, RCA.
El puerto VGA es el puerto estandarizado para conexión del monitor a la PC. Su conector es
un HD 15, de 15 pines organizados en 3 hileras horizontales. Es de forma rectangular, con
un recubrimiento plástico para aislar las partes metálicas.
1.7 PERIFERICOS
En este sentido es semejante al periférico de una ciudad, esta es una vía que se
encuentra rodeando la ciudad, recibe autos y también permite que se incorporen al
interior, además se relaciona porque ambas forman parte del ámbito urbano.
En el sentido informático, los periféricos se encuentran alrededor de la
computadora, reciben y envían datos entre sí y ambos forman parte de un entorno
informático.
Un periférico es un dispositivo
electrónico físico que se conecta o
acopla a una computadora, pero no
forma parte del núcleo básico (CPU,
memoria, placa madre, alimentación
eléctrica) de la misma.
Así como el periférico de una ciudad cuenta con sus entradas y salidas para autos, la
computadora cuenta con puertos (conectores con formas especiales y características
propias), para la entrada y salida de datos. Ejemplos de ellos son los puertos USB, puerto
serial, puerto FireWire, IrPort, etc.
USB SERIAL
Son aquellos que permiten el ingreso de información, en general desde alguna fuente
externa o por parte del usuario. Los dispositivos de entrada proveen el medio fundamental
para transferir hacia la computadora (más propiamente al procesador) información desde
alguna fuente, sea local o remota. También permiten cumplir la esencial tarea de leer y
cargar en memoria el sistema operativo y las aplicaciones o programas informáticos, los
que a su vez ponen operativa la computadora y hacen posible realizar las más diversas
tareas.
Son aquellos que permiten emitir o dar salida a la información resultante de las
operaciones realizadas por la CPU (procesamiento).
Los dispositivos de salida aportan el medio fundamental para exteriorizar y comunicar la
información y datos procesados; ya sea al usuario o bien a otra fuente externa, local o
remota.
Los dispositivos más comunes de este grupo son los monitores clásicos (no de pantalla
táctil), las impresoras, y los altavoces.
Algunos ejemplos son:
Monitor: recibe la señal de video de la computadora por medio
del puerto correspondiente y las transforma en imágenes por
medio de un cañón de electrones.
Son aquellos dispositivos que pueden operar de ambas formas: tanto de entrada como de
salida.
Dispositivo de almacenamiento es todo aparato que se utilice para grabar los datos de la
computadora de forma permanente o temporal. Una unidad de disco, junto con los discos
que graba, es un dispositivo de almacenamiento. A veces se dice que una computadora
tiene dispositivos de almacenamiento primarios (o principales) y secundarios (o
auxiliares). Cuando se hace esta distinción, el dispositivo de almacenamiento primario es
la memoria de acceso aleatorio (RAM) de la computadora, un dispositivo de
almacenamiento permanente pero cuyo contenido es temporal. El almacenamiento
secundario incluye los dispositivos de almacenamiento más permanentes, como unidades
de disco y de cinta.
Dispositivos magnéticos
- Disco magnético (discos rígidos, disquetes, Zip, Jaz)
- Cinta magnética
Dispositivos ópticos:
- Disco compacto (CD)
- Disco digital versátil (DVD)
Dispositivos de almacenamiento electrónico ó de estado sólido
- Discos duros
- Tarjetas para cámaras digitales, reproductores de audio y video, pen-drive
Pen drive
disco duro Memoria flash
1.8 MEMORIAS
MEMORIA DE COMPUTADORAS
Cuando una computadora se enciende necesita saber por dónde empezar. Las
instrucciones de inicio están contenidas en una memoria ROM, denominada BIOS (Basic
Input Oputput system o Sistema Básico de Entrada Salida). Este chip contiene la
información necesaria para realizar determinadas tareas rutinarias de bajo nivel, tales
como, arrancar la computadora, configurar la placa madre y administrar los códigos de las
Interrupciones BIOS que son necesarias para realizar la entrada y salida de datos.
La RAM está diseñada para ser inmediatamente accesible para la CPU o para los
programas. La palabra “aleatorio” en la RAM implica que cualquier parte de ella puede ser
accesible en cualquier momento. Esto contribuye a que la RAM sea muy rápida.
Como se explicó antes, la computadora no necesita buscar en toda su memoria cada vez
que tiene que encontrar datos, debido a que la CPU utiliza una dirección de memoria para
almacenar y recuperar cada fragmento de datos.
Se utiliza memoria RAM no sólo asociada a la CPU, otros componentes del procesador
también utilizan memoria, por ejemplo, las placas de video y de sonido tienen su propia
RAM integrada.
Memoria caché:
Mover los datos entre la RAM y los registros de la CPU es una de las operaciones que
consume más tiempo para la CPU, debido a que la RAM es más lenta que la CPU. Para
solucionar este problema se incluye una caché de memoria en la CPU. Una memoria
caché es similar a la RAM pero mucho más rápida.
Memoria flash
La memoria flash es un tipo especial de chip de memoria que combina las ventajas de la
RAM y la ROM. Al igual que la RAM, la memoria flash permite acceder a los datos de
manera aleatoria, asimismo, permite sobrescribir cualquier parte o todo el contenido en
cualquier momento. Igual que la ROM, la memoria es flash es no volátil, por lo que puede
mantener los datos sin necesidad de provisión continua de energía eléctrica.
La memoria flash tiene muchos usos. Se utiliza para el almacenamiento de las imágenes en
una cámara digital, en los reproductores multimedia como el MP3 y MP4. Los pendrive
proveen la facilidad de transportar los datos de un equipo a otro. Se conectan a través del
puerto USB ó FireWire de la computadora.
VIDEO 1.2
MEDIDA
EQUIVALENCIA
1 Byte 8 bits
La razón por la que se utiliza el factor multiplicador 1024 en lugar de 1000 es por ser la potencia de 2 más
próxima a 1000, cuestión importante desde el punto de vista electrónico.
En informática, cada letra, número o signo de puntuación ocupa un byte (8 bits). Por
ejemplo, cuando se dice que un archivo de texto ocupa 5.000 bytes estamos afirmando que
éste equivale a 5.000 letras o caracteres. Ya que el byte es una unidad de información muy
pequeña, se suelen utilizar sus múltiplos: kilobyte (kB), megabyte (MB), gigabyte (GB).
2.1 Introducción
1
Tema 2: Estructura de la información
(VIDEO 2.1)
2
Tema 2: Estructura de la información
29 512 21 2
28 256 20 1
26 64 2-2 0,25
25 32 2-3 0,125
24 16 2-4 0,0625
23 8 2-5 0,03125
Representación
Un número binario puede ser representado por cualquier secuencia de bits (dígitos
binarios), que a su vez pueden ser representados por cualquier mecanismo capaz de
estar en dos estados mutuamente exclusivos. Las secuencias siguientes de símbolos
podrían ser interpretadas todas como el mismo valor binario numérico:
1010011010
|-|--||-|-
xoxooxxoxo
ynynnyynyn
El valor numérico representado en cada caso depende del valor asignado a cada
símbolo. En un ordenador, los valores numéricos pueden ser representados por dos
voltajes diferentes y también se pueden usar polaridades magnéticas sobre un disco
magnético. Un "positivo", "sí", o "sobre el estado" no es necesariamente el equivalente
al valor numérico de uno; esto depende de la arquitectura usada.
3
Tema 2: Estructura de la información
0 0 0000
4
Tema 2: Estructura de la información
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
.. .. ..
16 10 10000
.. .. ..
25 19 11001
26 1A 11010
.. .. ..
31 1F 11111
5
Tema 2: Estructura de la información
También se puede optar por utilizar los valores que presenta cada posición del
número binario a ser transformado, comenzando de derecha a izquierda, y sumando
los valores de las posiciones que tienen un 1.
(Video2.2)
6
Tema 2: Estructura de la información
c) Decimal a binario: Se divide el número del sistema decimal entre 2, cuyo resultado
entero se vuelve a dividir entre 2, y así sucesivamente. Ordenados los restos, del
último al primero, este será el número binario que buscamos.
(Video 2.4)
Ejemplo
Transformar el número decimal 131 en binario. El método es muy simple:
131 dividido por 2 da 65 y el resto
es igual a 1 131 2
65 dividido por 2 da 32 y el resto 1 65 2 es
igual a 1 1 32 2
32 dividido por 2 da 16 y el resto 0 16 2 es
igual a 0 0 8 2
16 dividido por 2 da 8 y el resto 0 4 2 es
igual a 0 0 2 2
8 dividido por 2 da 4 y el resto es 0 1 igual
a0
4 dividido por 2 da 2 y el resto es igual a 0
2 dividido por 2 da 1 y el resto es igual a 0
1 dividido por 2 da 0 y el resto es igual a 1
-> Ordenamos los restos, del último al primero: 10000011
d) Decimal a hexadecimal: El mecanismo de conversión es el mismo que el descripto
en el punto c), pero dividiendo el número por 16, que es la base del sistema
hexadecimal.
Para convertir una fracción decimal a su equivalente hexadecimal, aplicamos el
algoritmo parte entera, con base 16.
(Video 2.5)
7
Tema 2: Estructura de la información
2.5 operaciones
Ejemplo
10011000
+ 00010101
——————
10101101
Se puede convertir la operación binaria en una operación decimal, resolver la decimal,
y después transformar el resultado en un (número) binario. Operamos como en el
sistema decimal: comenzamos a sumar desde la derecha, en nuestro ejemplo, 1 + 1 =
10, entonces escribimos 0 en la fila del resultado y llevamos 1 (este "1" se llama
acarreo o arrastre). A continuación se suma el acarreo a la siguiente columna: 1 + 0 +
0 = 1, y seguimos hasta terminar todas la columnas (exactamente como en decimal).
Resta de números binarios
El algoritmo de la resta en sistema binario es el mismo que en el sistema decimal. Pero
conviene repasar la operación de restar en decimal para comprender la operación
8
Tema 2: Estructura de la información
binaria, que es más sencilla. Los términos que intervienen en la resta se llaman
minuendo, sustraendo y diferencia.
Las restas básicas 0 - 0, 1 - 0 y 1 - 1 son evidentes:
0-0=0
1-0=1
1-1=0
0 - 1 = 1 (se transforma en 10 - 1 = 1) (en sistema decimal equivale a 2 - 1 = 1)
La resta 0 - 1 se resuelve, igual que en el sistema decimal, tomando una unidad
prestada de la posición siguiente: 0 - 1 = 1 y me llevo 1, lo que equivale a decir en el
sistema decimal, 2 - 1 = 1.
Ejemplos
10001 11011001
-01010 -10101011
———— —— ———
00111 00101110
En sistema decimal sería: 17 - 10 = 7 y 217 - 171 = 46.
(video 2.8)
Producto de números binarios
El algoritmo del producto en binario es igual que en números decimales; aunque se
lleva cabo con más sencillez, ya que el 0 multiplicado por cualquier número da 0, y el 1
es el elemento neutro del producto.
Datos numéricos
9
Tema 2: Estructura de la información
Caracteres
Imágenes
Sonido
Vídeo
Presentaciones, etc
BCD de 6 bits
EBCDIC
Texto ASCII
UNICODE
Dígitos decimales Empaquetado
codificados en Desempaquetado
Binario
(BCD)
Enteros
Datos Módulo y Signo
Numéricos Representación Complemento a 1
Binaria - Coma Complemento a 2
Fija - Exceso a 2 elevado a
N-1
Coma Flotante
Reales – Notación exponencial
– Normalización IEEE754
Sonido WAV, MIDI, MP3
Mapa de Bits BMP, TIFF, JPEG, GIF, PNG
Imágenes
Mapa de Vectores CDR, AI, EPS, WMF,PDF,CAD
10
TEMA 5: ESTRUCTURA DE
DATOS SIMPLES
Introducción. Concepto de información. Tratamiento de la información. Instrucciones y
tipos de instrucciones. Elementos básicos de un programa. Datos. Tipos de Datos.
Operaciones Primitivas. Constantes y variables. Expresiones. La operación de asignación.
Entrada y salida de información. Escritura de Algoritmos / Programas
5.1 INTRODUCCION
- Alfabéticos: formados exclusivamente por letras del alfabeto. Ej. Juan, x, Costo.
Captura de datos de entrada: Los datos deben ser registrados antes de procesarse. Los
datos pueden ser captados directamente por la computadora (por ejemplo, detectando
electrónicamente un sonido, una temperatura, un código de barras) o pueden ser dados en
forma de letras o números (caracteres).
Manipulación de los datos: Sobre los datos de entrada podemos realizar las siguientes
operaciones:
Manejo de los resultados de salida: Una vez que han sido manipulados los datos de
entrada, sobre ellos se pueden realizar las siguientes operaciones:
- Cálculo aritmético y lógico: Este tipo de operación elemental nos permite procesar la
información realizando sobre ellas operaciones aritméticas y lógicas.
BIFURCACION A=B
IF (A==B)
ba o a=b
donde :
La instrucción sería:
A+BC o C=A+B
ANTES
10 20 8
A B C
DESPUES
10 20 30
A B C
Ejemplo 5.3
Se lee del terminal los valores NUMERO y HORAS, archivándolo en la memoria; si los dos
valores que se introducen son 7845 y 18, significa que se han asignado a las variables esos
valores y equivaldría a la ejecución de las instrucciones
NUMERO = 7845
HORAS = 18
A = 10
B = 20
C = 30
Permiten la salida de datos desde la memoria principal del ordenador hacia dispositivos
externos de salida; por ejemplo impresoras, pantalla, disquete, disco duro, etc.-
Con el fin de poder dotar a los programas de cierta capacidad de decisión sobre los
tratamientos que debe aplicar a cada caso, los lenguajes de programación permiten la
definición de instrucciones de bifurcación distintas a la secuencial. Este es el caso de las
instrucciones condicionales e incondicionales.
CONDICIONAL
Recibe también el nombre de bifurcación condicional, y es aquella que, bajo la
comprobación de veracidad o falsedad de una condición, ejecuta dos grupos de acciones
diferentes.
ACCION 3
INCONDICIONAL
Recibe también el nombre de bifurcación incondicional, e indica un cambio en la secuencia
de una ejecución sin evaluar ninguna condición previa.
Accion 3
Para que un algoritmo pueda ser resuelto por una computadora el mismo debe ser
escrito (codificado) en el lenguaje de programación elegido, siguiendo las reglas de
sintaxis del mismo.
Ejemplos de datos son: el nombre de una persona, el valor de una temperatura, una cifra
de venta de supermercado, la fecha de un cheque, etc.
Tipos de datos:
Un tipo de dato simple es aquel cuyo contenido se trata como una unidad que no puede
separarse en partes más elementales. Los más usuales son:
a) datos numéricos
El tipo entero es un subconjunto finito de los números enteros. Pueden ser positivos o
negativos y no tienen decimales. Ejemplos: 3, 14, -250, 54321. Los enteros son
denominados también números de punto o coma fija. La mayoría de los lenguajes de
programación utilizan enteros que se almacenan en 2 bytes (entero corto), de ahí que los
valores mínimo y máximo son, respectivamente, -32768 y 32767.
Real:
El tipo real es un subconjunto de los números reales. Pueden ser positivos o negativos y
tienen punto decimal. Un número real consta de una parte entera y de una parte decimal.
Ejemplos: -57.80, 10.0, 0.0085 -1234.01.
Ejemplo:
string nombre[15]
nombre = ‘Francisco’
En este ejemplo, nombre tiene una longitud física de 15 y como longitud dinámica 9.
Las constantes de tipo string se escriben también entre apóstrofos.
Tipos de datos en C
C no soporta un gran número de tipos de datos predefinidos, pero tiene la capacidad para
crear sus propios tipos de datos. Todos los tipos de datos simples o básicos de C son,
esencialmente, números. Los tres datos básicos son:
5.9 EXPRESIONES
Una expresión es una combinación de valores y operaciones que, al ser evaluados,
entregan un valor
Las expresiones son combinaciones de constantes, variables, símbolos de operación,
paréntesis y nombre de las funciones especiales. Las mismas ideas son utilizadas en
notación matemática tradicional, por ejemplo:
A + (b+3) + sqr(c)
Cada expresión toma un valor que se determina tomando los valores de las variables y
constantes implicadas y la ejecución de las operaciones indicadas. Una expresión consta de
operandos y operadores.
Aritméticas
Relacionales
Lógicas
Carácter
(a + b)** 2
REGLAS DE PRIORIDAD
Las expresiones que tengan dos o más operadores requieren reglas matemáticas que
permitan determinar el orden de las operaciones, dichas reglas son de prioridad o
precedencia y son:
Las operaciones que están encerradas entre paréntesis se evalúan primero. Si existen
paréntesis anidados, los mismos se resuelven de adentro hacia fuera.
Las operaciones aritméticas dentro de una expresión siguen el siguiente orden de
prioridad:
Operador exponencial o **
Operadores * y / (multiplicación y división)
Operadores + y - (suma y resta)
En el caso de coincidir operadores de igual jerarquía en una expresión encerrada entre
paréntesis, el orden de prioridad se resuelve de izquierda a derecha.
Ejemplo
( (5 + 1) / 2) ** 2 – (4 + 3)
( 6 / 2) ** 2 – (4 + 3)
3 ** 2 – (4 + 3)
3 ** 2 – 7
9 –7
OPERADORES
Hay tres tipos de operadores: aritméticos, relacionales y lógicos
OPERADORES ARITMÉTICOS
+ Suma
- Resta
* Multiplicación
/ División
** o ^ Potenciación
REGLAS DE PRIORIDAD
Las operaciones aritméticas siguen reglas de prioridad o precedencia y son:
operador exponencial *, ^
operadores de multiplicación y división, /
operadores de suma y resta +, -
Las expresiones lógicas se forman combinando constantes lógicas, variables lógicas y otras
expresiones lógicas, utilizando operadores lógicos not, and y or y los operadores
relacionales (de relación o comparación) =,<,>, >=,<=, <>.
OPERADORES RELACIONALES
Permiten realizar comparaciones de valores de tipo numérico o carácter. Los operadores
de relación sirven para expresar las condiciones en los algoritmos.
== Igual
< Menor que
<= Menor o igual que
> Mayor
>= Mayor o Igual que
<> Distinto
El formato general para las comparaciones es
Los operadores de relación se pueden aplicar a cualquiera de los cuatro tipos de datos
estandar: enteros, real, lógico, carácter.
Veamos los siguientes ejemplos:
OPERADORES LÓGICOS
Los operadores lógicos o de Boole permiten relaciones lógicas (si/no) y sirven para
representar relaciones compuestas. Los operadores lógicos básicos son not (no) and (si) y
or (o)
AND && Y
OR || O
NOT ! NO
Bloque de algoritmo
Sección de declaración
Se declaran o describen todas las variables utilizadas en el algoritmo, indicando
sus nombres y tipo.
Suma = A + B Suma = A + B
Mostrar “Suma=” Suma printf ("Suma= ",Suma);
Problema
Desarrollar un algoritmo que lea dos números distintos y que escriba el mayor de los dos.
Algoritmo: DosNumeros
Leer “Escriba el primer número” N1
Leer “Escriba el segundo número” N2
Si N1 es mayor que N2
Entonces escribir “el mayor es”
N1
Sino
escribir “el mayor es” N2
Fin
Video 6.1
Los ordenadores o computadoras han revolucionado todos los aspectos de la vida en los
últimos 40 años. Hoy en día los encontramos en todos lados: escritorios de oficinas,
aviones, microondas y teléfonos celulares entre otros. Pero el equipo físico que podemos
ver es solo la mitad de la historia. Cada una de estas computadoras también necesita un
soporte lógico que le indique como realizar las tareas que esperamos que ejecute. Estas
instrucciones se codifican en una gran variedad de lenguajes de programación. Cada uno
tiene sus características específicas, sintaxis y mecanismos diferentes para llevar a cabo
diversas tareas. Sin embargo todos comparten un conjunto fundamental de características
y conceptos que deben dominar todas las personas interesadas en crear programas para
resolver problemas o realizar tareas con ordenadores.
En este proyecto de aprendizaje nos familiarizaremos con los conceptos para que
posteriormente podamos aprender con mayor facilidad uno o varios lenguajes de
programación específicos, teniendo en cuenta que las técnicas básicas para construir
programas y desarrollar algoritmos para resolver problemas serán las mismas. De esta
forma, al aprender un lenguaje nuevo, solo deberemos preocuparnos por conocer los
aspectos que los diferencian de otros lenguajes.
El análisis consiste en estudiar el problema planteado para obtener una idea clara y
concisa de los pasos necesarios para proponer un modelo para su solución.
Para resolver un problema con un ordenador hay que disponer de los datos de entrada,
estudiar el tratamiento que se ha de realizar a dichos datos, la información que se desea
obtener como resultado y de qué manera debe presentarse. Es decir, después de analizar
el problema, se han de conocer claramente tres cosas.
EJEMPLO 6.1
Por ejemplo, y sin entrar en el campo de la informática, para hacer la nómina de los
mejores alumnos de una carrera, se necesita saber:
– ENTRADA: Los datos de cada uno de los alumnos y si estos datos están en papel o
en un fichero donde está toda la información de los alumnos.
– PROCESO: La fórmula matemática para calcular el promedio de notas es:
(nota 1 + nota 2 + nota 3 + .....+ nota n) / cantidad de notas
Teniendo en cuenta que un algoritmo es un método para resolver problemas, una vez
analizado el mismo se precisa diseñar un algoritmo que indique claramente los pasos a
seguir para resolverlo.
Luego corresponde realizar una representación gráfica clara y detallada que muestre la
secuencia en que se deben ejecutar las diferentes operaciones. Estas representaciones
gráficas son las herramientas de programación utilizadas para el análisis y pueden ser:
diagramas de flujo, pseudocódigos y/o tablas de decisión, entre otras.
Una vez que el algoritmo de resolución del problema está definido se pasa a la fase de
codificación del programa en cualquier lenguaje (c, basic, cobol, pascal, etc.) cuyo
resultado será el programa fuente el cual sigue las reglas de sintaxis que el lenguaje
escogido exija.
Una vez dentro del ordenador, el programa deber ser traducido al único lenguaje que éste
entiende: Lenguaje de máquina. Dicha operación se realiza mediante el correspondiente
programa traductor o compilador del lenguaje en el que está escrito el programa. Este
proceso se repite hasta que no se producen errores, obteniéndose el programa objeto que
todavía no es ejecutable directamente.
6.2.4 EJECUCIÓN
A partir del programa objeto se instruye al sistema operativo para que realice un montaje
o enlace, carga, del programa objeto a las librerías del programa compilador. El proceso
de montaje produce el programa ejecutable, que una vez creado ya se puede ejecutar
(correr) desde el sistema operativo. Suponiendo que no existen errores durante la
ejecución (llamados errores en tiempo de ejecución), se obtendrá la salida de resultados de
programa. Ver siguiente figura.
6.2.5 PRUEBA
Por eso, antes de dar por finalizada cualquier labor de programación, es fundamental
preparar un conjunto de datos lo más representativo posible del problema, que permitan
probar el programa cuando se ejecute y así verificar los resultados.
Cuanto más exhaustivas sean las pruebas de un programa, mayor seguridad se tendrá de
que éste funcione correctamente y, por lo tanto, menor posibilidad de errores y por ende,
Fórmulas matemáticas.
- Deben estar seguidas de alguna secuencia definida de pasos hasta que se obtenga un
resultado coherente,
El algoritmo consta de dos acciones básicas, cada una de las cuales debe ser ejecutada
antes de realizar la siguiente. En términos de computadora, cada acción se codificará en
una o varias sentencias que ejecutan una tarea particular.
El algoritmo descripto es muy sencillo; sin embargo, como ya se ha indicado en párrafos
anteriores, el algoritmo general se descompondrá en pasos mas simples en un
procedimiento denominados refinamiento sucesivo. Así por ejemplo, un primer
refinamiento del algoritmo poner en movimiento un coche se puede describir de la forma
siguiente:
Pisar el embrague con el pie izquierdo
Para representar de una forma clara, concisa y esquemática la secuencia de acciones que
se han de realizar para resolver un problema se puede usar una de las técnicas más
antigua y a la vez más utilizada: diagramas de flujo, que no es más que un diagrama o
esquema que utiliza símbolos estándar y que tiene los pasos del algoritmo escritos en esos
símbolos unidos por flechas, llamados flujo de datos o líneas de flujo, que indican la
secuencia en que se deben ejecutar las órdenes, instrucciones o sentencias.
No existen normas fijas para la elaboración de los diagramas de flujo que incluyan
todo lo que el usuario desea introducir.
SIMBOLOGÍA
La estandarización de los símbolos para la elaboración de Diagramas de Flujo tardó varios
años. Con el fin de evitar la utilización de símbolos diferentes para representar procesos
iguales, la Organización Internacional para la Estandarización (ISO, por su sigla en inglés)
y el Instituto Nacional Americano de Estandarización (ANSI, por su sigla en inglés),
estandarizaron los símbolos que mayor aceptación tenían en 1985. Los siguientes son los
principales símbolos para elaborar Diagramas de Flujo:
Plantilla Standard Graph ISO 5807 para la elaboración manual de Diagramas de Flujo.
A todos los símbolos (excepto al INICIO), les debe llegar una línea de conexión.
De todos los símbolos, excepto FIN y el de DECISIÓN, debe salir una sola línea
de conexión.
El diagrama de flujo deberá ser lo más claro posible de forma tal que cualquier
otro programador pueda seguirlo o usarlo con total facilidad de entendimiento.
Ejemplo
Diseñar un algoritmo que lea cuatro variables y calcule e imprima su producto, suma y
media aritmética.
6.6 PSEUDOCÓDIGO
El pseudocódigo nació como un lenguaje similar al inglés y era un medio para representar
las estructuras de control de programación estructurada que se verá en capítulos
posteriores. Se puede considerar como un primer intento de programa o como un
programa borrador, dado que el pseudocódigo por si solo no puede ser ejecutado en una
computadora sino que debe traducirse a un lenguaje de programación.
Ejemplo
Se desea encontrar la longitud y el área de un círculo de radio 5.
Solución
Las salidas serán entonces la longitud y el área. (Paso 5 del algoritmo) Sabemos que la
longitud de un círculo viene dada por la fórmula 2 * pi * radio y que el área viene dada por
pi * radio al cuadrado. (paso 4 del algoritmo) Si definimos las variables como: (paso 1 al 3
del algoritmo)
Inicio
Pi = 3.1416 [definición de un valor
constante]
A = Pi * R ^ ² [asignación del
valor del área]
L = 2 * Pi * R [asignación del
valor de la longitud]
#include <stdio.h>
#include<stdlib.h>
int main()
{
#define PI=3.1415
int const radio = 5;
float area, longitud;
longitud = 2 * PI * radio;
area = (PI * (radio ^ 2));
Conceptualmente un programa puede ser considerado como una caja negra. La caja negra
o el algoritmo de resolución, en realidad, es el conjunto de códigos que transforman las
entradas del programa (datos) en salidas (resultados).
Bloques de un programa
El programador debe establecer de donde provienen las entradas del programa. Las
entradas, en cualquier caso, procederán de un dispositivo de entrada (teclado, disco, etc.-).
El proceso de introducir la información de entrada (datos) en la memoria de la
computadora se denomina entrada de dados, operación de lectura o acción de leer.
7.3 EL LENGUAJE
¿Qué es C?
En la actualidad, el lenguaje C sigue siendo uno de los más utilizados en la industria del
software, así como en institutos tecnológicos, escuelas de ingeniería y universidades.
El lenguaje C tiene una gran cantidad de ventajas sobre otros lenguajes y constituyen
precisamente la razón fundamental que C siga siendo uno de los lenguajes más populares,
utilizados en empresas, organizaciones y fábricas de software de todo el mundo. La
legibilidad, facilidad de mantenimiento y la portabilidad son algunas de las ventajas de
este lenguaje, además que permite descender a nivel de hardware, característica la que le
da más potencia y dominio sobre los recursos del sistema.
Entre una de las características más importantes de C está la portabilidad, esto es, un
programa escrito en C se puede trasladar fácilmente entre distintos sistemas operativos
como Windows, DOS o Linux.
El lenguaje C está formado por un conjunto pequeño de palabras claves (reservadas) o
comandos (keywords), y una serie de operadores. Todas las palabras claves de C están en
minúsculas (C distingue entre las mayúsculas y minúsculas).
Algunas de estas palabras son:
auto break case char const continue default
do double else enum extern float for
goto if int long register return short
signed sizeof static struct typedef union unsigned
void volatile while
Características
{
printf("hola mundo"); //zona de sentencias. Con la instrucción printf
imprimimos un mensaje en pantalla
}
#include <stdio.h>
Con esta línea le decimos al compilador que vamos a utilizar funciones o instrucciones que se
encuentran en el archivo “stdio.h”
stdio.h, que significa "standard input-output header" (cabecera estándar E/S), es el archivo
de cabecera que contiene las definiciones de las macros, las constantes, las declaraciones de
funciones de la biblioteca estándar del lenguaje de programación C para hacer operaciones,
estándar, de entrada y salida, así como la definición de tipos necesarias para dichas operaciones.
main()
{
}
Esta línea sirve para declarar la función principal y indicar el fin y el inicio del programa,
todas las instrucciones que vamos a programar se deben de poner entre los llaves { } los
cuales indican el fin e inicio del programa.
printf("hola mundo");
Esta es una función del lenguaje C que se encuentra en la librería stdio.h, la función
printf permite insertar o imprimir un mensaje o cadena de caracteres o texto, en la
pantalla o el dispositivo de salida principal de la pc, que es la pantalla del ordenador.
El lenguaje C se caracteriza por que todas las sentencias, instrucciones o funciones que
programamos se deben separar por un punto y coma ” ; “.
El lenguaje C nos permite insertar comentarios o notas en nuestros códigos fuente. Esos
comentarios no interfieren con el funcionamiento del programa. En el lenguaje C existen
dos tipos de comentarios: una sola línea o de dos líneas.
Los comentarios de una sola línea se describen por la doble barra “//”.
Una vez creado un programa en C se debe ejecutar. ¿Cómo realizar esta tarea? Los pasos a
dar dependerán del compilador C que utilice, pero en general los pasos serian:
1“ <stdio.h> "tenemos una biblioteca estándar del lenguaje de programación C, en esencia es el archivo
de cabecera que contiene las definiciones de macros, las constantes, las declaraciones de funciones y la
definición de tipos usados por varias operaciones estándar de entrada y salida.
Archivo de
cabecera
Bibliotecas
Inicio
Errores en tiempo si
de ejecución
no
Fin
Como práctica, escribir y ejecutar los problemas propuestos al final del tema.
VARIABLES
Una variable no es más que un nombre simbólico que identifica una dirección de memoria
Declaración de variables en C
<tipo> identificador;
<tipo> lista de identificadores;
Los identificadores de las variables son los nombres que utilizaremos para referirnos a
ellas.
Al declarar una variable, hay que definir su tipo: la variable sólo admitirá valores del tipo
especificado.
En una misma declaración se pueden declarar varias variables, siempre que sean del
mismo tipo. En este caso, los identificadores de las variables se separan por comas.
Ejemplo
int i = 0;
CONSTANTES
Convenciones
Los identificadores asociados a las constantes se suelen poner en mayúsculas.
#define PI 3.141592
Si el identificador está formado por varias palabras, las distintas palabras se separan con
un guión de subrayado.
Para las constantes declaradas se utiliza el cualificador const que permite dar nombres
simbólicos a constantes. El formato general es:
Las definiciones const especifican tipos de datos, terminan con ; y se inicializan como
variables. La directiva #define no especifica tipo de datos, no utiliza el operador de
asignación (=) y no termina con ;.
Sintaxis
Variable = expresión
Una expresión es un elemento de un programa que toma un valor. En algunos casos puede
tomar también una operación.
Operador de Asignación
Al ejecutar una sentencia de asignación:
1. Se evalúa la expresión que aparece a la derecha del operador de asignación (=).
2. El valor que se obtiene como resultado de evaluar la expresión se almacena en la
variable que aparece a la izquierda del operador de asignación (=).
Ejemplo
x = x + 1;
int miVariable =20; // Declaración con inicialización
otraVariable =miVariable; // Operador de asignación
Operadores de Asignación en C
operadores Forma
de convencional
Símbolo Descripción
asignación
compuestos
2
El identificador de este operador es el carácter ‗%‘. Este operador calcula el resto del cociente
entero. Por su misma definición, no tiene sentido su aplicación entre variables no enteras: su uso
con variables de coma flotante provoca error de compilación. Como en el cociente, tampoco su
divisor puede ser cero.
Por consiguiente
Ejemplos
int i = 10;
int j;
....
j = i++
El valor de J es 11, recibe el valor de 10 + 1
Los programas interactúan con el exterior, a través de datos de entrada o datos de salida.
La biblioteca C proporciona facilidades para entrada y salida, para lo que todo programa
deberá tener el archivo de cabecera stdio.h.
#include <stdio.h>
main ()
{
suma = 0:
suma= suma + 10
printf(“%s %d”, “Suma =”, suma);
}
Se visualiza Suma = 10
la sentencia seria:
printf(“%d %d %c %f, i,j,c,n);
y se visualizara en pantalla 5 12 A 40.791512
La forma general que tiene la función printf():
printf(cadena_de_control1, dato1, dato2,…..)
Cadena de control: contiene los tipos de datos y forma de mostrarlos.
Dato1,dato2…………….: variables, contantes, datos de salida.
Printf() convierte, da forma de salida a los datos y los escribe en pantalla. La cadena
de control contiene códigos de formato que se asocian uno a uno con los datos. Cada
código comienza con el carácter %, a continuación puede especificarse el ancho mínimo
del dato y termina con el carácter de conversión. Así, suponiendo que:
i = 11 j = 12 c = ‘A’ n = 40.791512
printf(“%x %3d %c %.3f, i,j,c,n); El primer dato es 11 en hexadecimal
(%x), el segundo es el numero
se visualizara en la pantalla entero 12 en un ancho de 3, le sigue
el carácter A y, por último, el
B 12 A 40.792 número real n redondeando a 3
Ejemplos: Mostrar datos en función de su tipo cifras decimales (%.3f)
char c; float f;
... ...
printf (“%c”, c); printf (“%f”, f);
int i; double d;
... ...
printf (“%d”, i); printf (“%lf”, d);
%g El dato se considera de tipo float. Se convierte a según código a una notación más
corta
char c; float f;
... ...
scanf (“%c”, &c); printf (“%f”, &f);
int i; double d;
... ...
scanf (“%d”, &i); printf (“%lf”, &d);
Ejemplo 7.1 : Leer un número y calcular su cuadrado y la cuarta parte del mismo.
#include <stdio.h>
int num, c;
float cuar;
int main()
{
printf(" \n Calcula el cuadrado de un número y su cuarta
parte ");
printf(" \n*************************************** \n ");
printf(" \n Ingrese el Numero: ");scanf("%d",&num);
c=num*num; //hallo el cuadrado
cuar=num/4;
printf(" \n Su cuadrado es: %d \n ",c);
printf(" \n Su cuarta parte es: %.2f \n ",cuar);
printf(" \n");
return 0;
}
Ejemplo 7.2 : Escribir un programa que realice las operaciones de suma, resta, producto,
cociente y módulo de dos enteros introducidos por teclado.
#include <stdio.h>
int main()
{
signed long a, b;
signed long sum, res, pro, coc, mod;
printf("Introduzca el valor del 1er. operando ... ");
scanf("%ld",&a);
printf("Introduzca el valor del 2do. operando ... ");
scanf("%ld",&b);
// Cálculos
sum = a + b;
res = a - b;
pro = a * b;
coc = a / b;
mod = a % b;
// Mostrar resultados por pantalla.
printf("La suma es igual a %ld\n", sum);
printf("La resta es igual a %ld\n", res);
printf("El producto es igual a %ld\n", pro);
printf("El cociente es igual a %ld\n", coc);
printf("El resto es igual a %ld\n", mod);
}
Ejemplo 7.3: Repetir el mismo programa del ejemplo 7.2 para números de coma flotante.
#include <stdio.h>
int main()
{
float a, b;
float sum, res, pro, coc;
printf("Introduzca el valor del 1er. operando ... ");
scanf("%f",&a);
printf("Introduzca el valor del 2do. operando ... ");
scanf("%f",&b);
// Cálculos
sum = a + b;
res = a - b;
pro = a * b;
coc = a / b;
// mod = a % b; : esta operación no está permitida
// Mostrar resultados por pantalla.
printf("La suma es igual a %f\n", sum);
printf("La resta es igual a %f\n", res);
printf("El producto es igual a %f\n", pro);
printf("El cociente es igual a %f\n", coc);
}
Problemas ejemplos
Problema 1: Definir variables de tipo entera, almacenar valores por asignación y mostrar
su contenido
#include<stdio.h>
int main()
{
signed char c1=65;
printf("c1 es de tipo signed char:%c \n",c1);
unsigned char c2=160;
printf("c2 es de tipo unsigned char:%c \n",c2);
signed short int e1=32000;
printf("e1 es de tipo short int:%i \n",e1);
unsigned short int e2=64000;
printf("e2 es de tipo unsigned short int:%i \n",e2);
signed int e3=-2147483648;
printf("e3 es de tipo signed int:%i \n",e3);
unsigned int e4=4294967295;
printf("e4 es de tipo unsigned int:%u \n",e4);
signed long int e5=-2147483648;
printf("e5 es de tipo signed long int:%li \n",e5);
unsigned long int e6=2147483647;
printf("e6 es de tipo unsigned long int:%lu \n",e6);
signed long long int e7=-9223372036854775807;
printf("e7 es de tipo signed long long int:%lli \n",e7);
unsigned long long int e8=18446744073709551615;
printf("e8 es de tipo unsigned long long int:%llu \n",e8);
return 0;
}
Ejecución
Problema 2: Si queremos conocer cuál es el valor máximo y mínimo para cada uno de los
tipos de datos enteros del lenguaje C podemos ejecutar el siguiente programa:
#include <stdio.h>
#include <limits.h>
/* limits.h tiene una serie de macros con los valores máximos y mínimos definidos para
nuestro compilador.*/
int main() {
Problema 3: Si queremos saber cuántos bytes se necesitan reservar para cada uno de los
tipos de variables podemos ejecutar el programa:
#include<stdio.h>
int main()
{
printf("Bytes requeridos para tipo char:
%i\n",sizeof(char));
printf("Bytes requeridos para tipo short int:
%i\n",sizeof(short int));
printf("Bytes requeridos para tipo int: %i\n",sizeof(int));
printf("Bytes requeridos para tipo lont int:
%i\n",sizeof(long int));
printf("Bytes requeridos para tipo long long int:
%i\n",sizeof(long long int));
return 0;
}
Problema 4: Imprimir cuantos bytes requieren cada uno de los tipos de datos decimales
que tiene el lenguaje C.
#include<stdio.h>
int main()
{
printf("Bytes requeridos para tipo float: %i\n",sizeof(float));
printf("Bytes requeridos para tipo double: %i\n",sizeof(double));
printf("Bytes requeridos para tipo long double: %i\n",sizeof(long
double));
return 0;
}
simples: SI
dobles: SI-SINO
múltiples: SEGÚN-SEA
Una estructura secuencial es aquella en la que una acción (instrucción) sigue a otra
en secuencia. Las tareas se suceden de tal forma que la salida de una es la entrada
de la siguiente y así sucesivamente hasta el final del proceso. La estructura
secuencial tiene una entrada y una salida. Su representación grafica es:
PSEUDOCODIGO INICIO
INICIO
<ACCION1> ACCION 1
<ACCION2>
<ACCION >
ACCION 2
FIN
ACCION n
FIN
Informática – Año 2019 Página 3
Tema 8: Estructuras básicas: secuencial y selección
SI <expresión> ENTONCES
< acción >
FIN-SI Expresion SI Accion
NO
LA SENTENCIA IF
En C, la sentencia principal de selección es la sentencia if. La sentencia if tiene dos
alternativas o formatos posibles, el más sencillo es:
if (expresión) acciòn
Inicio
include <stdio.h>
main ()
{
int n,d;
printf (“ingresar dos numeros:”);
“ingresar dos
scanf(“%d %d”,&n,&d);
numeros” n,d
if ( n%d == 0)
== 0
no
oo EJECUCIÓN
Ejemplo 8.2:
{
float numero;
/* comparar numero */
if ( numero > 0)
printf (" %.2f es mayor que cero \n",numero);
if ( numero < 0)
printf (" %.2f es menor que cero \n",numero);
if ( numero == 0)
printf (" %.2f es igual que cero \n",numero);
system("pause");
return 0;
}
SI <expresión> ENTONCES
< accion1 >
SINO
< accion2>
FIN-SI
La acción2 se ejecuta se la
expresión lógica es verdadera
Expresión lógica que
determina si la acción se
ha de ejecutar
La acción1 se ejecuta se la
expresión lógica es verdadera
EJECUCIÓN
Inicio
%
“Ingresar dos
numeros” n,d
d, “NO es divisible
d, “es divisible
por” n
NO n%d == 0 SI por” n
Fin
if ( n/d == 0)
printf ("%d es divisible por %d\n",n,d);
else
printf ("%d no es divisible por %d\n",n,d);
system("pause");
return 0;
}
Según lo expresado, las estructuras de decisión simple y doble permiten seleccionar entre
dos alternativas posibles. Sin embargo, la instrucción SI-ENTONCES puede ser utilizada
también en casos de selección de más de dos alternativas. Esto es posible anidando estas
instrucciones. Es decir, una estructura SI-ENTONCES puede contener a otra, y esta a su vez
a otra.
Una sentencia if es anidada cuando la sentencia de la rama verdadera o la rama falsa, es a
su vez una sentencia if.
Sintaxis:
If (condición1)
Sentencia1
Else if (condicion2)
Sentencia 2
………………
Else if (condición n)
Sentencia n
Else
Sentencia n
Expresion 1 SI Accion 1
SI <expresion_1> ENTONCES
< accion_1 > NO
SINO
SI < expresión_2> ENTONCES
< accion_2 > Expresion 2 SI Accion 2
SINO
SI < expresión_3>
ENTONCES NO
< accion_3 >
SINO
.....
Expresion 3 SI Accion 3
FIN-SI
FIN-SI
FIN-SI NO
If (x>0)
Else
If (x<0)
Else
La sentencia if anidada tiene tres alternativas. Se incrementa una de las tres variables
(num_pos, num_neg y num_ceros) en 1, dependiendo de que x sea mayor que cero,
menor que cero o igual a cero, respectivamente. Las cajas muestran la estructura lógica de
la sentencia if anidada; la segunda sentencia if es la acción o tarea falta (a continuación
de else) de la primera sentencia if.
if ( a>b)
if (a>c) mayor = a;
else mayor = c;
else
if (b>c) mayor = b;
else mayor = c;
El mayor es 85
Ejemplo
Entonces, las dos cuestiones importantes cuando se utilizan estructuras repetitivas son:
¿qué contiene el bucle? y ¿cuántas veces se repite?.
Las estructuras repetitivas se diferencian en la forma en que se produce la condición de fin
del bucle y deberá utilizarse aquella más apropiada al problema particular de que se trate.
Las más usuales son:
mientras (while)
desde (for)
repetir (repeat)
La condición está situada al principio del bucle y las instrucciones interiores al bucle se
repetirán mientras sea cierta la condición.
El comportamiento es el siguiente:
sentencia
Las sentencias del cuerpo del bucle se repiten mientras que la expresión lógica (condición
del bucle) sea verdadera. Cuando se evalúa la expresión lógica y resulta falsa, se termina y
se sale del bucle y se ejecuta la siguiente sentencia de programa después de la sentencia
while.
Sintaxis:
sentencia-n;
}
Pseudocódigo
inicio
contador = 0 inicializacion
mientras contador < 5 Prueba /Condición
contador = contador + 1 actualización (incrementa en 1 el contador)
mostrar “contador:” , contador
fin mientras
mostrar “terminado. Contador:”, contador Inicio
Contador = 0
Contador =
Contador < 5 SI
contador +1
NO
Terminado
“contador” ,
contador”,
/* bucle de muestra while */ contador
contador
#include <stdio.h>
#include<stdlib.h>
main () Fin
{
int contador = 0; /* inicializa la condición*/
while (contador < 5) /* condición de prueba*/
{
contador ++; /*cuerpo del bucle */
printf("contador: %d \n", contador);
}
printf("Terminado. Contador: %d \n ", contador);
system("pause");
return 0;
}
El comportamiento es el siguiente:
1) se ejecuta la sentencia
sentencia 2) Si condición bucle es verdadera vuelve a
ejecutar la sentencia. Cuerpo del bucle.
Verdadera
Condición
bucle
Falsa
Sintaxis:
Do
sentencia /*la sentencia se ejecuta al menos una vez */
Pseudocodigo
inicio
Hacer
Mostar “introducir un digito de 0 a 9”
Leer digito
mientras digito > 0 and digito < 10
fin
Codigo C
#include <stdio.h>
main ()
do
{
Ejecución
introduzca un digito (0 – 9)
2
introduzca un digito (0 – 9)
4
introduzca un digito (0 – 9)
8
introduzca un digito (0 – 9)
10
Una sentencia hacer hasta (do-while) es similar a la sentencia hacer mientras (while)
excepto que el cuerpo del bucle se ejecuta siempre al menos una vez. (Figura presentada
en tema 8.1)
Ejemplo 9.3: visualizar las potencias de 2 cuyos valores estén en el rango de 1 a 1.000
potencia = 1; potencia = 1;
while (potencia < 1000) do
{ {
printf (%d \n”, potencia); printf (%d \n”, potencia);
potencia *= 2; potencia *= 2;
} /* fin del while*/ } while (potencia < 1000)
Donde:
variable es el nombre de una variable de tipo numérico, en particular entero,
definida en el programa, cuyos valores se irán modificando en cada repetición. Es
común utilizar como nombre de esta variable i, que proviene de la palabra índice
(index en inglés), y si se utilizan varias instrucciones PARA, emplear las letras
siguientes del abecedario: j, k, l.
Inicial
sentencias
Falso
Condición
de fin incremento
Verdadero
Problema: Se desea un programa que muestre en pantalla los números pares entre 1 y 9.
Una forma de resolver este problema es sencillamente mostrar los números solicitados:
INICIO
ESCRIBIR 2
ESCRIBIR 4
ESCRIBIR 6
ESCRIBIR 8
FIN
Pero esta solución se vuelve larga y tediosa si hay un pequeño cambio en la solicitud, por
ejemplo:
Problema: Se desea un programa que muestre en pantalla los números pares entre 1 y 99.
INICIO
ESCRIBIR 2
ESCRIBIR 4
[…]
ESCRIBIR 96
ESCRIBIR 98
FIN
Se dijo que la computadora es muy hábil para repetir tareas sencillas, como la del
problema. Cuando se necesita que la computadora repita una operación, con una pequeña
variación cada vez, se deben identificar las condiciones para la repetición, y expresar esta
variación de una forma comprensible para la máquina.
En este caso, lo que se desea es una secuencia de números pares, que van desde 2 hasta 98.
Estos números pueden expresarse como 2 x k, siendo k un entero que varía entre 1 y 98/2
= 49.
INICIO
PARA k DESDE 1 HASTA 49
ESCRIBIR k * 2
FIN-PARA
FIN
INICIO
PARA i DESDE 2 HASTA 98 INCREMENTO 2
ESCRIBIR i
FIN-PARA
FIN
Si ahora se solicita:
Problema: Se desea un programa que muestre en pantalla los números pares entre 1 y 200.
INICIO
PARA i DESDE 2 HASTA 200 INCREMENTO 2
ESCRIBIR i
FIN-PARA i=2
FIN
Falso
i = 200
i=i+2
Verdadero
La sintaxis en lenguaje C
Ejemplo en C
include <stdio.h>
main ()
int i;
for (i = 2; i<200; i+=2);
printf i;
VIDEO 8.1
Así como se podían anidar estructuras de selección, también es posible insertar un bucle
dentro de otro. Las reglas para construir estructuras repetitivas anidadas son iguales en
ambos casos: la estructura interna debe estar incluida totalmente dentro de la externa y
no puede existir solapamiento.
P E R M IT ID A S Y P R O H IB ID A S
IN D E P E N D IE N T E S A N ID A D A S N ID O S C R U Z A D O S
S A L IR D E L B U C L E ENTRAR AL BUCLE
Ejemplo 9.4
1*1=1
1*2=2 for (x = 1;x <=xultimo; x++)
1*3=3
1*4=4
{ for (y = 1;y <=yultimo; y++)
1*5=5
2*1=2
{
2*2=4 int producto;
2*3=6 producto= x * y;
2*4=8 printf("%d * %d = %d \n", x,y,producto);
2 * 5 = 10 }
….. }
Bucle
interno
Bucle
externo
El bucle que tiene x como variable de control se denomina bucle externo y el bucle que
tiene y como variable de control se denomina bucle interno.
FA.CE.NA. 2019
Tema 10: Estructura de datos compuesta
Repaso
While
do while
for
Estructura de datos
Simple
Compuesta
Tema 10: Estructura de datos compuesta
Pilas
Datos compuestos Colas
Lineales
Listas Enlazadas
DINÁMICAS
Arboles
No lineales Grafos
Las estructuras de datos estáticas son aquellas en las que el tamaño ocupado en
memoria se define antes que el programa se ejecute y el mismo no puede ser
modificado durante la ejecución. En cambio las estructuras de datos dinámicas no
tienen limitaciones en cuanto al tamaño de memoria ocupada. Para utilizar este tipo de
estructuras necesitamos usar un tipo de dato específico llamado puntero.
Los tipos de datos que vimos hasta ahora son datos simples cuya característica común
es que cada variable representa a un elemento; en cambio los tipos de datos
estructurados tienen como particularidad que con un nombre o identificador se
puede representar múltiples datos individuales y a su vez cada uno de estos
puede ser referenciado independientemente.
Tema 10: Estructura de datos compuesta
10.2 Arreglos
Un arreglo es una estructura, es decir es un conjunto de variables que se citan y manejan con un mismo
nombre, y que permite además la utilización individual de sus elementos. (Joyanes, 2008).
Arreglos se define como una colección finita, homogénea y ordenada de elementos.
Finita: Todo arreglo tiene un límite, es decir, debe determinarse cual será el número máximo de
elementos que podrán formar parte del arreglo.
Homogénea: Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros, todos
booleanos, etc.), pero nunca una combinación de distintos tipos.
ARREGLO
10.2 Arreglos
Nombre del arreglo: Números [5]
Elemento 12 3 6 8 5
Índice 0 1 2 3 4
i=1an
Esta declaración hace que el compilador reserve espacio suficiente para contener a 5 valores enteros. En
C los enteros ocupan, normalmente 2 bytes, de modo que un array de diez enteros ocupa 10 bytes de
memoria.
Un array de enteros se almacena en bytes
12 3 6 8 5 consecutivos de memoria. Cada elemento
[0] [1] [2] [3] [4] utiliza dos bytes. Se accede a cada elemento
de array mediante un índice que comienza
en cero. Así, el elemento quinto del array
ocupa los bytes 9 y 10. (ver tema 5. Numero
enteros)
Tema 10: Estructura de datos compuesta
También se puede acceder a cada elemento del array utilizando un índice en el nombre del
array. Por ejemplo:
printf (“%d \n”, números [4];
Visualiza el valor del elemento 5 del array. Los array siempre comienzan en el elemento 0.
Si por ejemplo, se quiere crear un array de números reales y su tamaño es una constante
representada por un parámetro
#define N 5
float numeros[N]
Utilizamos el método indexación basada en cero. Su uso tiene el efecto de que el índice
de un elemento del array es siempre el mismo que el número de “pasos” desde el
elemento inicial a[0] a ese elemento. Por ejemplo, a[3]está a 3 pasos o posiciones del
elemento a[0].
Ejemplos
int edad [5] Array edad contiene 5 elementos: el primero
edad [0] y el ultimo edad [4].
int pesos [25], longitudes [15] Declara 2 array enteros
Según la dimensión varia la declaración de los arreglos, pero las operaciones serían las
mismas. A continuación vemos el tratamiento de operaciones con arreglos según su
dimensión
Tema 10: Estructura de datos compuesta
Leer V(3)
Leer V(..)
Leer V(.30) Leer
V(2)
..................
Leer
V(30)
Pero de esta forma resultaría poco práctico, por lo tanto debemos Leer V(i) i = 1 a 30
Recorrer un vector significa acceder a todos y a cada uno de sus elementos desde el
principio hasta el final o viceversa.
Se puede acceder a los elementos de un vector para introducir datos (leer) en él o bien para ver
su contenido (escribir).
Esta operación se realiza usando estructuras repetitivas, cuya variable de control i, se utiliza como
subíndice del vector (por ejemplo V[i]). El incremento del contador del bucle producirá el
tratamiento sucesivo de los elementos del vector.
Tema 10: Estructura de datos compuesta
Repaso
La sintaxis en lenguaje C
#include <stdio.h>
#include<stdlib.h>
main ()
{
int vector [30]; Leer
V(i) i = 1 a 30
int i,sumavector;
I = 30 No I = I +1
SI
Parar
Tema 10: Estructura de datos compuesta
En general no es posible asignar directamente un valor a todo el arreglo; se debe asignar el valor
deseado a cada componente usando la instrucción de asignación, recordando que la asignación
coloca el nuevo contenido en la variable destruyendo el valor anterior. (visto en tema 5)
15 à V[20] o V[20] = 15 asigna el valor 15 al elemento 20 del vector V
Si se quiere asignar valores a todos los componentes del vector, se debe recurrir a las estructuras
repetitivas. Por ejemplo, si se desea poner en cero al vector V[30] la solución se muestra en la
figura. C o m ie n zo
I = 30 No I = I +1
SI
P a ra r
Tema 10: Estructura de datos compuesta
Muchas veces resulta interesante que dado un arreglo, puedan añadirse elementos o eliminar o
cambiar componentes. Estas resultan las tres operaciones elementales que se pueden realizar en
un arreglo: añadir, eliminar o modificar elementos.
Cuando se realiza una operación de añadir un nuevo elemento a continuación del último valor no
nulo, la única condición necesaria para esta operación es comprobar que haya espacio para el
nuevo elemento.
Ejemplo: Dado un vector C de 8 elementos que contiene una nómina de 5 direcciones de correo
ordenadas alfabéticamente. Se desea añadir la dirección valeria@server.com
alicia@server.com alicia@server.com Comenzar
1 1
2 castor@server.com castor@server.com 2
3 daniel@server.com daniel@server.com 3
C(I) I =1a8
4 marta@server.com marta@server.com 4
5 sonia@server.com sonia@server.com 5
7 7
8 8 Parar
Tema 10: Estructura de datos compuesta
Muchas veces resulta interesante que dado un arreglo, puedan añadirse/cambiar elementos o
eliminar o insertar componentes. Estas resultan las tres operaciones elementales que se pueden
realizar en un arreglo: añadir, eliminar e insertar elementos.
Cuando se realiza una operación de añadir un nuevo elemento a continuación del último valor no
nulo, la única condición necesaria para esta operación es comprobar que haya espacio para el
nuevo elemento.
Ejemplo: Dado un vector C de 8 elementos que contiene una nómina de 5 direcciones de correo
ordenadas alfabéticamente. Se desea añadir la dirección valeria@server.com
alicia@server.com alicia@server.com Comenzar
1 1
2 castor@server.com castor@server.com 2
3 daniel@server.com daniel@server.com 3
C(I) I =1a8
4 marta@server.com marta@server.com 4 Con la simple
instrucción de
asignación se
5 5
añaden los
sonia@server.com sonia@server.com elementos.
7 7
8 8 Parar
Tema 10: Estructura de datos compuesta
Insertar un elemento es una operación que consiste en introducir dicho elemento en el interior del
vector, en una posición i dada, de forma tal que los elementos ubicados en las siguientes
posiciones sean desplazados a las posiciones i + 1 respectivas.
La operación de eliminar un elemento al final del arreglo no presenta ningún problema; en
cambio, si el borrado se realiza en el interior del mismo esto provoca el efecto contrario al de
insertar, el movimiento deberá ser hacia arriba (i-1) de los elementos inferiores a él para
reorganizar el vector.
Tema 10: Estructura de datos compuesta
5 pascual@server.com sonia@server.com 5
7 valeria@server.com 7
8 8 C(I) = C(I+1)
I=8 No I=I+1
Si
Parar
Tema 10: Estructura de datos compuesta
arreglo
Ejemplo 10.2: Dado un arreglo A de 100 elementos, L e e r
A (I)
I= 1 ,1 0 0
averiguar e informar cuantos elementos nulos posee.
Imprimir el arreglo.
A v e r ig u a s i e l
e le m e n t o e s c e r o
1 --> I
Pseudocódigo
Comenzar
NULOS = 0 A (I) = 0 S i N U L O S = N U L O S + 1
Leer A(I)
Para I desde 1 hasta 100 N o
Si A(I) = 0
entonces NULOS = NULOS + 1 I = 1 0 0 N o I = I + 1
fin_si
fin_para S i T e r m in a
v e c to r
d e re c o rre r e l
e in f o r m a e l
F in
Tema 10: Estructura de datos compuesta
Un arreglo de dos dimensiones, también denominada matriz, se define como una tabla de tablas, o vector de
vectores, es decir, es aquella en la cual uno de sus elementos es, a su vez, una tabla unidimensional.
Podemos comparar una matriz con una hoja de papel cuadriculado en la que cada cuadrícula
corresponderá a un elemento.
Columna 1 Columna 2 Columna 3 Columna 4
Fila 3
Por lo tanto, si suponemos que la matriz representada se llama MAT, el casillero con el número 12
corresponderá al elemento ubicado en la fila 2 columna 3 y se lo representa como MAT(2,3).
Tema 10: Estructura de datos compuesta
Se define una matriz, como un conjunto de elementos ordenados en filas y columnas. Una matriz es un arreglo
bidimensional con ordenados por filas (i) y columnas (j).
Donde la matriz llamada MAT tiene filas que varían de 1 a 3 y columnas que varían de 1 a 4, por lo tanto
diremos que la matriz MAT tiene 3 x 4 elementos.
1 2 3 4
I = 1...3
J = 1....4 1
Como vimos anteriormente, recorrer una tabla de dos dimensiones significa acceder a todos y a cada uno de
sus elementos. Este proceso de recorrer la matriz se llevará a cabo mediante la estructura repetitiva anidada.
El recorrido de los elementos de la matriz se puede realizar por fila o por columna (ver figura). Para
recorrer por fila la matriz MAT se debe realizar dos estructuras repetitivas anidadas. En la primera de ellas
(las más externa) se realizan tres iteraciones para recorrer las 3 filas. En cada una de esas iteraciones, se
realizará a su vez 4 iteraciones para recorrer los 4 elementos de cada columna.
del año las 4 temperaturas máximas de cada mes T(12, 4) y se desea enero
30 31 33 30
imprimir los datos.
02
febrero
recorrer la misma por fila de forma tal que por cada fila debemos 03
marzo
recorrer las 4 columnas de la misma. Pero como la matriz tiene 12 filas, 22 24 24 23
este proceso se repite 12 veces – uno por cada fila – y de esta manera
formamos dos ciclos anidados. Uno más externo – fila - que se repite 12 04
abril
veces y uno mas interno – columna – que por cada fila se repite 4 25 23 24 24
T(i
,j) T(i,j)
i=1 j=1
j=1 i=1
Ciclo de i
T (i,j) Ciclo de j T (i,j)
Ciclo de j
Ciclo de i
S
i= j= I N
i=i+1 j=j+1
12 4 O
S
parar parar I
Tema 10: Estructura de datos compuesta
Conclusiones
Bibliografía