(1) - escuela de informática UTEM

Anuncio
1
UNIDAD 1 : INTRODUCCIÓN.
1.1
CONCEPTOS ELEMENTALES. Hardware y Software.
1.
INFORMÁTICA :
Definición 1: Ciencia encargada del estudio y desarrollo de crear máquinas,
transmitir y tratar la información.
y métodos para
Definición 2: Es la ciencia que estudia el tratamiento automático y racional de la información.
Integra por lo tanto, las máquinas, los métodos de trabajo y las aplicaciones.
2.
ELEMENTOS DE LA INFORMÁTICA: La informática involucra tres elementos, las
computadoras, los programas y los sistemas de información.
3.
PILARES BÁSICOS DE LA INFORMÁTICA: Los tres componentes básicos de la informática
son Hardware (componentes físicos), Software (componentes lógicos) y el elemento Humano.
4.
DATO : Representación de una realidad.
5.
INFORMACIÓN: Mensaje válido para un receptor.
6.
BIT: Unidad mínima de información. ( 0 ó 1 ).
7.
BYTE: Conjunto de bits relacionados. ( 8 bit ).
8.
LENGUAJE: Conjunto de símbolos y reglas que permiten, unidos en mensajes válidos, dar un
significado a cada mensaje.
9.
LENGUAJE DE PROGRAMACIÓN: Permite expresar programas que en último término serán
realizados por la máquina. Deben ser lenguajes no ambiguos y cada construcción del lenguaje tiene
un sentido único.
10.
ALGORITMO: Secuencia de operaciones o pasos lógicos, bien definidos que ejecutados un número
finito de veces permiten resolver un problema. Luego, un algoritmo debe ser efectivo, finito y bien
definido (claro y sin ambiguedades).
11.
INSTRUCCIÓN: Conjunto de caracteres que específica una operación a realizar.
12.
REGISTRO: Colección de datos relacionados, pertenecientes a una entidad lógica.
13.
SOFTWARE: Conjunto de programas. Aspectos lógicos o algorítmicos de un sistema
computacional.
14.
HARDWARE: Componentes físicos, discretos y reproducibles a partir de un patrón de un sistema
computacional.(ej. CPU, memoria, dispositivos I/O, etc.).
15.
PROGRAMA: Es un conjunto de comandos o sentencias ( instrucciones ) que representan un
algoritmo en un lenguaje de programación determinado.
16.
ARCHIVO: Es un conjunto de datos relacionados mediante una determinada característica o
propiedad.
Laura Setti Duque
2
17.
MEMORIA: Conjunto de registros, capaces de almacenar un valor. En ellos se almacenan el
programa y los datos.
18.
PROCESADOR: Dispositivo físico capaz de ejecutar las instrucciones de un programa almacenado
en memoria. Puede también efectuar lectura/escritura desde y hacia memoria y/o dispositivos de
entrada/salida tales como unidades de discos, cintas, impresoras, etc.
19.
SISTEMA OPERATIVO: Conjunto de programas cuya función es administrar eficientemente los
recursos tales como procesador (CPU), memoria, dispositivos de entrada/salida, etc. de un sistema
computacional. Entre las funciones que debe cumplir están las siguientes:
-
Compartir los recursos entre los distintos usuarios.
Proteger al sistema de accesos no autorizados.
Asignar recursos a los usuarios en la cantidad adecuada y a tiempo.
Recobrar al sistema en forma ordenada de los posibles errores.
Laura Setti Duque
3
UNIDAD 2: SISTEMAS DE NUMERACIÓN.
2.1
SISTEMAS NUMÉRICOS.
2.1.1 Definición.
Se define como sistema de numeración, el conjunto de símbolos utilizados para la representación de
cantidades, así como las reglas que rigen dicha representación.
2.1.2 Distinción.
Un sistema de numeración se distingue fundamentalmente por su base, que es el número de símbolos
que utiliza y que, además, se caracteriza por ser el coeficiente que determina cuál es el valor de cada símbolo
dependiendo de su posición.
2.1.3
Sistemas posicionales.
Los sistemas de numeración actuales son sistemas posicionales, en los que el valor relativo que
representa cada símbolo o cifra depende de su valor absoluto y de la posición relativa que representa cada
símbolo o cifra con respecto a la coma decimal, íntimamente ligada al valor de la base del sistema de
numeración utilizado.
Ejemplo:
Sistema Binario,
Base 2, Símbolos: 0, 1.
Sistema Octal,
Base 8, Símbolos: 0,1,2,3,4,5,6,7.
Sistema Decimal,
Base 10, Símbolos: 0,1,2,3,4,5,6,7,8,9.
Sistema Hexadecimal Base 16, Símbolos:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
2.1.4
Sistema decimal.
Desde hace muchos años, el hombre ha utilizado como sistema para contar el denominado decimal,
que derivó del sistema numérico indoárabico; posiblemente adoptado por contar con diez dedos de las manos.
Utiliza como base el 10, que corresponde al número de símbolos que comprende para la
representación de cantidades estos símbolos (también denominados dígitos) son: 0,1,2,3,4,5,6,7,8,9.
Ejemplo: La representación de las cantidad 2998 es:
2998 = 2 * 103 + 9 * 102 + 9 * 101 + 8 * 100
Laura Setti Duque
4
2.1.5
Teorema fundamental de la numeración.
Se trata de un teorema que relaciona una cantidad expresada en cualquier sistema de numeración con
la misma cantidad expresada en el sistema decimal.
Supongamos una cantidad expresada en un sistema cuya base es B y representamos por cada X cada
uno de los dígitos que contiene dicha cantidad, donde el subíndice indica la posición del dígito con respecto a
la coma decimal, posición que hacia la izquierda de la coma se numera desde 0 en adelante y de 1 en 1, y
hacia la derecha se numera desde -1 y con incremento -1.
El teorema Fundamental de la Numeración dice que el valor decimal de una cantidad expresada en
otro sistema de numeración, viene dado por la fórmula:
. . . + X 4 * B 4 + X3 * B 3 + X2 * B 2 + X 1 * B 1 + X0 * B 0 +
+ X-1 * B-1 + X-2 * B-2 + X-3 * B-3 + . . .
2.1.6
Sistema binario.
Es el sistema de numeración que utiliza internamente el hardware de las computadoras actuales. Se
basa en la representación de cantidades utilizando los dígitos 1 y 0. Por tanto, su base es 2 (número de dígitos
del sistema).
Cada dígito de un número representado en este sistema se denomina bit (contracción de bynary y
digit). Se suelen utilizar con nombre propio determinados conjuntos de dígitos en binario:






Cuatro bits se denominan cuarteto (Ejemplo: 1001).
Ocho bits octeto o byte (Ejemplo: 10010110).
Al conjunto de 1.024 bytes se le llama kilobyte.
1.024 kilobytes forman el llamado megabyte.
1.024 megabytes se denomina gigabyte.
1.024 gigabytes se denomina terabyte.
Por tanto, es posible establecer las siguientes igualdades relacionadas al dígito binario (bit):






1 cuarteto
1 byte
1 kilo byte
1 Mega byte
1 Giga byte
1 Tera byte
= 4 bits
= 8 bits.
= 1.024 * 8 bits = 8.192 bits.
= 1.024 * 1.024 * 8
= 8.388.608 bits.
3
= 1.024 * 8
= 8.589.934.592 bits.
= 1.0244 * 8 bits.
Laura Setti Duque
5
2.2
ALGORITMOS DE TRANSFORMACIÓN.
2.2.1 De base B a base 10.
La pregunta aquí es la siguiente: ¿Qué número entero decimal representa al número XXX entero en B?.
Entonces diremos transforme un número representado en base B a base 10, para tal efecto se utiliza el
Teorema Fundamental de la Numeración.
Ejemplo:
1)
2)
101101( 2 )
( )( 10 )
101101( 2 )
= 1*20 + 0*21 + 1*22 + 1*23 + 0*24 + 1*25
3431( 8 )
3431( 8 )
= 1
+0
= 45
( 10 )
3A3B( 16 )
+ 24 + 256 + 1536
(10)
( )( 10 )
= 11*160 + 3*161 + 10*162 + 3*163
= 11
= 14907
Laura Setti Duque
+ 0 + 32
= 1*80 + 3*81 + 4*82 + 3*83
= 1817
3A3B( 16 )
+ 8
( )( 10 )
= 1
3)
+ 4
+ 48
(10)
+ 2560 + 12288
6
2.2.2 De base 10 a base B.
La pregunta aquí es la siguiente: ¿Qué número entero en una base B cualquiera representa al número
XXX entero decimal?. Entonces diremos transforme un número representado en base 10 a base B, para tal
efecto se utiliza el Algoritmo de la división. Este método consiste en dividir el número decimal por la base B,
el resultado de la división entera (cuociente) se divide nuevamente por la base B, y así sucesivamente hasta
obtener cuociente 0. El número decimal resulta de escribir los restos de cada una de las divisiones, en orden
inverso al que fueron obtenidos.
Ejemplo:
1)
2)
3)
23( 10 )
( )( 2 )
23 : 2 = 11
1 Resto
11 : 2 = 5
1
5:2=2
1
2:2=1
0
1:2=0
1
97( 10 )
( )( 12 )
97 : 12 = 8
1 Resto
8 : 12 = 0
8
26( 10 )
El número en base 2 es: 10111
El número equivalente en base 12 es 81.
( )( 16 )
26 : 16 = 1 10=A Resto
1 : 16 = 0
Laura Setti Duque
1
El número equivalente en base 16 es 1A.
7
2.2.3
Ejercicios propuestos. Aplique algoritmos de transformación para números enteros y fraccionarios.
1.
(132)10
2.
(14561)10
a ( ) 4, ( ) 8 , ( ) 32, ( ) 18
3.
(987132)10
a ( )3 , ( )4 , ( )8 , ( )16 , ( )17
4.
(2785)10
a ( )5 , ( )4 , ( )8 , ( )16 , ( )7
5.
(1342)7
a ( )2 , ( )5 , ( )8 , ( )16 , ( )10
6.
(3285)9
a ( )2 , ( )4 , ( )8 , ( )16 , ( )10
7.
(ABC)16
a ( )10 , ( )4 , ( )8 , ( )11 , ( )7
8.
(101111111)15 a ( )2 , ( )10 , ( )8 , ( )16 , ( )3
9.
(11011111)2
10.
(23132)4
11.
(532)8
12.
(142. 25)10
13.
(14561. 75)10
14.
(9832.125)10
15.
(2785.134)10
16.
(1342.32)7
a ( )2 , ( )5 , ( )8 , ( )16 , ( )10
17.
(3285.85)9
a ( )2 , ( )4 , ( )8 , ( )16 , ( )10
18.
(ABC.C)16
a ( )10 , ( )4 , ( )8 , ( )11 , ( )7
19.
(101111111.11)15
a ( )2 , ( )10 , ( )8 , ( )16 , ( )3
20.
(11011111.110011)2 a ( )12 , ( )4 , ( )8 , ( )16 , ( )10
21.
(2332.25)4
Laura Setti Duque
a ( )2 , ( )4 , ( )8 , ( )16 , ( )7
a ( )12 , ( )4 , ( )8 , ( )16 , ( )10
a ( )2 , ( )6 , ( )10 , ( )16 , ( )8
a ( )2 , ( )4 , ( )10 , ( )16 , ( )7
a ( )2 , ( )4 , ( )8 , ( )16 , ( )7
a ( ) 4, ( ) 8 , ( ) 32, ( ) 18
a ( )3 , ( )4 , ( )8 , ( )16 , ( )17
a ( )5 , ( )4 , ( )8 , ( )16 , ( )7
a ( )2 , ( )6 , ( )10 , ( )16 , ( )8
8
2.3 OPERACIONES NUMÉRICAS.
Ejercicios propuestos.
Realice las operaciones en las bases indicadas, pasando por la base 10 o base 2 según corresponda.
1.
(27)8
*
(52)16 =
(?)2
2.
(32)5
:
(21)3
=
(?)5
3.
(100000)2
+
(11000)2
=
(?)2
4.
(110100)2
+
(?)2
=
(100110)2
5.
(78)3
*
(?)4
=
(2021)5
6.
(250)8
+
(?)3
=
(2043)5
7.
(A07)16
*
(1111)9
=
(?)2
8.
(51)8
*
(?)2
=
(1111)9
-
(2460)7
=
(1357)11
9.
(?)13
10.
(460)18
-
(?)4
=
(ABC)16
11.
(?)8
-
(28A0)16
=
(10010110)2
12.
(123)8
+
(123)4
=
(?)16
13.
(123.456)8
+
(123.456)16
=
(?)4
*
(?)4
=
(15CAE)16
*
(325)8
=
(12222122)4
14.
15.
(405)8
(?)16
16.
(46)7
*
(X)2
=
(1212)4
17.
(X)16
:
(101)2
=
(36)8
18.
(101)2
+
(X)8
=
(101)4
19.
(351234)7
+
(34521)7
=
(
20.
(ABCGI)20
+
(123B)20
=
( )20
21.
(461)32
*
(X)2
=
(1212)4
22.
(X)16
:
(101)2
=
(36)32
23.
(1011011)2
-
(X)2
=
(101)2
24.
(351234)7
*
(X)7
=
(AB4DI)5
Laura Setti Duque
)7
9
25.
(ABCGI)20
+
(123B)20
=
( )20
26.
(46)7
-
(X)2
=
(112)4
27.
(X)1
*
(101)2
=
(32)8
28.
(10111111)2
*
(234)8
=
( )2
29.
(334)5
+
(4521)7
=
(
30.
(ABCGI)19
+
(123B)20
=
( )16
31.
(416)7
*
(X)2
=
(12)3
32.
(101)16
:
(101)2
=
( )8
33.
(101)2
+
(X)8
=
(101)4
34.
(351234)8
-
(34521)8
=
(
35.
(AB12)20
+
(123B)20
=
( )20
36.
(24)(?) =
(14)10
37.
(21)(?) =
(00100001)2
6
38.
(0.7)(?)
=
39.
(0.3A)(?) =
(0.0001101010)2
40.
(5.5)(?)
(5.625)10
=
Laura Setti Duque
(0.875)10
)7
)4
10
2.4
REPRESENTACIÓN INTERNA DE LOS DATOS.
Tanto para los datos numéricos como para los datos literales, la representación será en base a
números binarios, ya que internamente no existe otra simbología.
2.4.1
Datos numéricos.
Los números se representan en formatos binarios para enteros y reales. Se pueden mencionar los
siguientes formatos en bytes:
2 BYTES
 Punto Fijo, “Enteros Cortos”. Rango: -32768 . . 32767.
4 BYTES
 Punto Fijo, “Enteros Largos”. Rango: -231 . . 231 - 1
 Punto Flotante, “Reales Simples”.
8 BYTES
 Punto Flotante, “Reales Dobles”.
Un número entero entonces se representa por su equivalente binario, y los enteros negativos por su
complemento dos. El formato punto fijo para 4 bytes es el siguiente:
1 BIT
DE SIGNO
0 : POSITIVO
1 : NEGATIVO
31 BIT NÚMERO BINARIO
En este caso se utilizan sólo 31 bits para representar al número, cualquier número que utilice más de
31 bits para su equivalente binario, no podrá representarse (overflow).
Ejemplo: Para el número 1026.
0
0000000000000000000010000000010
Para representar un número real en 4 bytes, el formato punto flotante es el siguiente:
1 BIT
DE SIGNO
0 : POSITIVO
1 : NEGATIVO
Laura Setti Duque
23 BIT MANTISA
8 BIT EXPONENTE
11
Todos los números reales se representan internamente en este formato, para el caso 32 bits se utiliza
un bit para el signo, 23 bits para los dígitos significativos del número (mantisa) y los 8 restantes para el
exponente; el punto fraccionario no se almacena.
Para poder almacenar exponentes negativos se introduce el concepto de CARACTERÍSTICA, que
es un número arbitrario conocido que se suma al exponente y se calcula como:
Característica = cantidad de números posibles de almacenar en n bit = 2n
2
2
Ejemplo: Para el número 492,17 Su equivalente binario es:
111101100.001010111000010100011110.......
desplazando el punto decimal a la izquierda, y considerando los primeros 23 dígitos de izquierda a derecha del
número binario, se obtiene:
.111101100001010111000010100011110 E 9
mantisa
exponente
Conversión del exponente:
+
Característica
Exponente
10000000
00001001
10001001 137
Representación punto flotante.
0
128 (28/2 = 256/2)
+ 9
11110110000101011100001
10001001
Para números con signo negativo se representan de la misma forma que los con signo positivo,
cambiando el bit se signo. Otra forma de representar negativos es cambiando además del bit de signo, la
mantisa por complemento dos.
Laura Setti Duque
12
2.4.2
Datos alfanuméricos.
Muchos conjuntos de caracteres (o alfabetos) han sido diseñados con el correr de los años para
utilizarse en las computadoras. Dos de los conjuntos de caracteres más populares y completos son los
conocidos como EBCDIC (Extended Binary Coded Decimal Interchange Code) y ASCII (American Standard
Code for Information Interchange). EBCDIC es un sistema de codificación de caracteres que se utiliza
fundamentalmente en la serie de computadoras IBM/360-370. ASCII fue desarrollado originalmente como un
código estándar para la industria de las computadoras. Los conjuntos de caracteres que tienen estos dos tipos
de codificación son los siguientes.
CONJUNTO DE CARACTERES ASCII:
1.
El alfabeto inglés, tanto en letras minúsculas como mayúsculas { a, b, c, ..., z, A, B, C, ..., Z}.
2.
Los caracteres numéricos decimales: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}.
3.
Operaciones y caracteres especiales {+, -, *, /, >, <, =, , espacio, !, “, #, $, %, &, ‘, (, ), , , ; , : , ?, @,
[, ], , ,
4.
, {, }, ~ }.
Caracteres de control como DEL (Eliminar o borrar), ESC (Aborta proceso), END(Fin de línea), etc.
Para propósito de comparación se tiene que ’A’ < ’B’ < ’C’ < ... < ’Y’ < ’Z’.
Algunos códigos (representación binaria) de caracteres:
Caracteres
0
1
2
.
.
9
.
A
B
C
ASCII (8 bit)
00110000
00110001
00110010
.
.
01011001
.
01000001
01000010
01000011
Laura Setti Duque
Decimal
48
49
50
.
.
57
.
65
66
67
13
UNIDAD 3.
INTRODUCCIÓN AL LENGUAJE C
CAPITULO 5: ALGORITMOS. CONCEPTOS FUNDAMENTALES.
TEMA 1: DEFINICIÓN.
Antes de trabajar con algoritmos es importante clarificar el significado que se le da a estos:
La palabra algoritmo significa “método de resolución de un problema en un número finito de pasos”.
Algoritmo no significa la resolución de un problema particular para unos datos particulares, sino la
resolución de todos los problemas del mismo tipo.
Un algoritmo es la descripción exacta y sin ambiguedades de la secuencia de pasos elementales a
aplicar para, a partir de los datos del problema, encontrar la solución buscada. Para que un algoritmo sea
completo deberá contemplar todas las alternativas lógicas posibles que las distintas combinaciones de valores
de los datos puedan presentar.
Un algoritmo es un método general de resolución de todos los problemas del mismo tipo.
Entre los distintos tipos de algoritmos se encuentran: Los diagramas de flujo que utilizan símbolos
gráficos para su resolución, seudocódigo que describe un algoritmo utilizando una mezcla de frases en
lenguaje común, instrucciones de lenguaje de programación y palabras clave que definen las estructuras
básicas.
Este método es el que trabajaremos en este curso y es el que presenta todas las ventajas a las
características de los algoritmos, técnica que es utilizada en todos los lenguajes estructurados como: Pascal, C,
Dbase, Cobol, etc.
Codificaremos los algoritmos escritos en seudocódigo a lenguaje C para que puedan ser ejecutados
por el computador.
Laura Setti Duque
14
TEMA 2: TIPOS DE DATOS.
Para el trabajo con algoritmos y programas es muy importante tener claro que tipo de elementos se
van a manejar en las sentencias ejecutables, que son parte del proceso y que corresponden a las acciones que
van a afectar a los datos.
Estos son principalmente: Variables, Constantes y Tipos de datos.
5.2.1
Datos.
Los tipos de datos estándar se pueden dividir básicamente en dos grupos: datos numéricos y datos
alfanuméricos.
Numéricos: Se refiere principalmente a números enteros y reales. (Int, long, float, double)
Alfanuméricos: Se refiere al conjunto de uno o más caracteres alfanuméricos. (char, y cadena de char).
5.2.2
Tipos y tamaños de datos en C.
Los lenguajes de programación utilizan palabras reservadas que designan tipos de datos, en particular en C se
manejan como estándar los siguientes.
Char : Se utiliza para almacenar un carácter.
Int: Se utiliza para almacenar un entero en el rango –32768 a 32767.
Float: Se utiliza para almacenar un número real en precisión simple con 6 dígitos significativos.
Double: Se utiliza para almacenar un número real en precisión doble con 15 dígitos significativos.
Long y short: Son calificadores para enteros, y se refieren a diferentes tamaños de los números: long int ,
short int. También se puede omitir la palabra int.
TEMA 3: OPERADORES.
Son todos los símbolos que sirven de enlace entre cada uno de los argumentos que intervienen en
una operación, y se utilizan para construir expresiones.
Operadores Relacionales: Se utilizan en expresiones lógicas. Expresiones que al ser evaluadas producen un
valor de verdad (valor distinto de 0) o falsedad (valor igual a 0). Estos son: < (menor), == (igualdad), >
(mayor), <= (menor igual), >= (mayor igual), != (distinto).
Ejemplo:
Con números y cadenas:
1.
‘A’ < ‘B’
2.
‘aaaa’ > ‘AAAA V
3.
2 < 12
V
4.
‘2’ < ‘12’
F
V
Operadores Aritméticos: Se utilizan en expresiones aritméticas, estos son:
+ (adición), - (sustracción), * (multiplicación), / (división), % (módulo).
Laura Setti Duque
15
Operadores lógicos: Combinan sus operandos de acuerdo al álgebra de boole, y son: || (OR), && (AND), !
(NOT). La prioridad para estos operadores es: !, &&, ||.
Operadores de asignación: Se utilizan para asignar el valor de una expresión a una variable, estos son: =, +=,
- =, *=,%=. Combinan la asignación con una operación aritmética.
Operadores de incremento y decremento:
Solo son aplicables a variables y no a expresiones. Se pueden emplear como sufijos y prefijos en las
variables.
Incremento en 1: ++. Aumenta en una unidad a su operando.
Decremento en 1: --. Disminuye en una unidad a su operando.
Ejemplo:
++n : Incrementa n antes de usar su valor.
n++ : Incrementa n después de que se ha empleado su valor.
Si n es 5 entonces: x=n++ ; pone un 5 en x, pero x=++n; pone un 6 en x. En ambos casos el valor final de n es
6.
Paréntesis( ): Se utiliza para anidar expresiones.
Orden de evaluación de los operadores: En orden descendente, para igual prioridad se evalúa de izquierda a
derecha.
Paréntesis.
Productos y divisiones.
Sumas y restas.
Relacionales.
Lógicos.
Laura Setti Duque
16
TEMA 4: VARIABLES.
Son objetos básicos que se manipulan en un programa. Se considera variable a una zona de memoria
referenciada por un nombre, donde se puede almacenar el valor de un dato o de una expresión, que puede ser
cambiado cuando se desee.
El nombre de una variable puede ser elegido por el usuario.
El computador asigna a cada variable una dirección de memoria.
Las variables pueden almacenar distintos tipos de información (numérica, alfanumérica).
Para ser utilizadas en un programa estas deben ser definidas, asignándole un nombre, y el tipo de la
información que van a almacenar.
TEMA 5: CONSTANTES.
Son objetos básicos que se manipulan en un programa. Se considera constante a una zona de
memoria referenciada por un nombre, donde se puede almacenar el valor de un dato, que no puede ser
cambiado. El tipo de la constante es de acuerdo al valor que almacena, que puede ser numérico o
alfanumérico.
CAPITULO 6: ESTRUCTURA DE UN PROGRAMA EN C.
TEMA 1: DESCRIPCIÓN DE UN PROGRAMA EN C.
Los programas escritos en C normalmente constan de una gran cantidad de pequeñas funciones en
lugar de pocas y grandes.
En la estructura general de un programa escrito en lenguaje C se encuentran los siguientes elementos:
Comentarios opcionales, que describen la naturaleza del programa y/o algunas instrucciones.
Directivas del preprocesador que comienzan con #. Inclusión de bibliotecas que permiten el uso de
un conjunto de funciones predefinidas.
Una sección de declaraciones, que identifica los objetos usados en el programa. Aquí se incluyen
tipos de datos globales, definición de constantes y de variables globales.
Una sección de definición de funciones.
Definición de la función main, que es donde se específican las acciones que se ejecutarán, y desde
donde se ejerce el control principal del programa .
TEMA 2: FORMATO BASICO.
Directivas de preprocesador (comienzan con #)
[Declaración de tipos globales] /*opcional*/
[Declaración de variables globales] /*opcional*/
[Definición de funciones] /*opcional*/
Definición de función main()
/* Inicio de sentencias función main*/
{
[Sentencias para el control principal del programa]
}
/*Fin de sentencias función main*/
Laura Setti Duque
17
Ejemplo:
#include <stdio.h> /*Definición de biblioteca estándar*/
#define Largo 100 /*Definición de la constante entera largo*/
int n; /* Definición de la variable global entera n*/
main() /* Definición de la función main*/
{
int n, k; /* Definición de las variables locales enteras n y k*/
k=10;
n=k*10;
return(0);
}
Laura Setti Duque
18
UNIDAD 4:
ESTRUCTURAS BÁSICAS DE CONTROL, Secuenciales, selectivas e iterativas.
La programación estructura es una técnica de programación que utiliza estructuras de control
previamente definidas, estas estructuras se clasifican en cuatro formas básicas para las sentencias
(instrucciones): secuenciales, selectivas, iterativas y de subprogramas.
CAPITULO 7: LENGUAJE C, SECUENCIA.
TEMA 1: SECUENCIA, Sintáxis.
Si se tiene un conjunto de acciones {S1, S2, ...., Sn} cuyos índices señalan el orden en que se ejecutan,
entonces determinan una secuencia. Las típicas sentencias secuenciales son de lectura de variables, asignación
de expresiones y salida de resultados.
Formato:
Inicio
S1: Inicio
S2: Ejecutar sentencia A
S3: Ejecutar sentencia B
A
B
S4 : Ejecutar sentencia C
.
C
.
Sn: Parar
Parar
Consideremos el siguiente algoritmo:
S1: Inicio
S2: Introducir a y b
S3: Calcular a*b
s4: Mostrar resultado
S5: Parar
En un algoritmo o programa secuencial estructurado, no se puede ejecutar por ejemplo la sentencia 4
sin haber realizado las anteriores (1,2,3). No está permitido devolverse, es decir no pueden existir saltos
incondicionales.
En el ejemplo se presenta un algoritmo más bien narrativo que seudocódigo. Los formatos que
utilizaremos para sentencias secuenciales son los siguientes:
Laura Setti Duque
19
TEMA 2: LECTURA DE VARIABLES.
Permite el ingreso de uno o más datos, a una o más variables desde el teclado o desde un archivo.
Formato:
Leer(V1, v2,v3,..,Vn) { primer valor ingresado se almacena en la variable V1, segundo valor ingresado se
almacena en la variable V2,....., en la variable Vn se almacena el enésimo
valor}
o
Leer(V1)
Leer(V2)
Leer(Vn)
.
.
Leer(Vn)
TEMA 3: ASIGNACIÓN DE EXPRESIONES.
Permite almacenar en una variable el valor de una expresión. La variable y la expresión debe ser del mismo
tipo, o el tipo de la variable contener al de la expresión. Ejemplo: Una variable real puede contener a un valor
entero, o una variable cadena puede contener a un valor carácter.
Formato:
Variable
<Expresión>
Salida de resultados: Permite imprimir por pantalla, impresora o salida a un archivo, una o más expresiones
de tipo numérica o alfanumérica.
Formato:
Escribir(Exp1, Exp2, Exp3 ,.., Expn) { el primer valor que se imprime es el de la expresión Exp1, segundo
valor que se imprime es el de la expresión Exp2,....., y
así sucesivamente}
o
Escribir(Exp1)
Escribir(Exp2)
Escribir(Exp3)
.
.
Escribir(Expn)
TEMA 4: LENGUAJE C, SECUENCIA APLICACIONES.
Laura Setti Duque
20
Ejercicios resueltos.
1.
Escribir un algoritmo en seudocódigo y programa que lea dos números enteros, calcule la suma, la
diferencia y el producto de ese par de números, y finalmente imprima sus resultados.
Algoritmo en seudocódigo:
Inicio
Leer (A,B)
Suma
A+B
Resta
A -B
Producto
A *B
Escribir(Suma, Resta, Producto)
Fin
Programa en C.
#include <stdio..h>
#include <conio.h>
main()
{
int A,B,Suma,Resta,Producto;
printf("Ingrese dos números enteros \n");
scanf("%d",&A);
scanf("%d",&B);
Suma=A+B;
Resta=A-B;
Producto=A*B;
printf("La suma es: %d \n",Suma);
printf("La resta es: %d \n",Resta);
printf("El producto es: %d \n",Producto);
getche();
}
Laura Setti Duque
21
2.
Escribir un algoritmo en seudocódigo y programa que ingrese el costo de un artículo, calcule el
I.V.A. y el precio de venta. Finalmente imprima precio de costo, I.V.A. y el precio de venta.
Algoritmo en seudocódigo:
Inicio
Leer (Pcosto)
Iva
Pcosto*0.18
Pventa
Pcosto + Iva
Escribir(‘ Precio de costo =’, Pcosto)
Escribir(‘ I.V.A.
=’, Iva)
Escribir(‘ Precio de Venta =’, PVenta)
Fin
Programa en C.
#include <stdio.h>
#include <conio.h>
float Pcosto,Iva,Pventa,suma;
main()
{
printf("Ingrese precio de costo \n");
scanf("\n %f",&Pcosto);
Iva=(Pcosto*0.18);
Pventa=(Pcosto+Iva);
printf("\n I.V.A. = %f",Iva);
printf("\n Precio de Venta= %f",Pventa);
getche();
}
3.
Escribir un algoritmo en seudocódigo y programa que ingrese un número real e imprima el número
truncado y redondeado.
Algoritmo en seudocódigo:
Inicio
Leer (Num)
Escribir(Truncado(Num))
Escribir(Redondeado(Num))
Fin
Laura Setti Duque
22
Programa en C.
#include <stdio.h>
#include <conio.h>
#include <math. h>
main()
{ double num;
printf("Ingrese un número cualquiera");
scanf ("%lf",&num);
printf("El número truncado es: %ld",int(num));
printf("El número redondeado es: %lf",ceil(num));
getche();
}
4.
Escribir un algoritmo en seudocódigo y programa que calcule e imprima el promedio de cuatro
números reales.
Algoritmo en seudocódigo:
Inicio
Leer (A,B,C,D)
Suma
A+B+C+D
Promedio
Suma/4
Escribir( A, B, C, D)
Escribir(‘ Su promedio es:’,Promedio)
Fin
Programa en C.
#include <stdio.h>
#include <conio.h>
main()
{
float A, B, C, D, Suma, Promedio;
printf("Ingrese 4 números cualquiera \n");
scanf("%f",&A);
scanf("%f",&B);
scanf("%f",&C);
scanf("%f",&D);
Suma = A + B + C + D;
Promedio= Suma/4;
printf("\n Su promedio es: %f", Promedio);
getche();
}
Laura Setti Duque
23
TEMA 5: LENGUAJE C, secuencia. Aplicaciones. Ejercicios Propuestos.
1.
Ingresar una temperatura real que está en grados Farenheit y convertirla a grados Celsius. Imprimir
ambos valores.
Cº = (Fº -32) *5/9
2.
Se ingresa una longitud expresada en pies y otra en pulgadas, determinar su equivalente métrico tanto
en metros como en centímetros.
1 pie
= 12 pulgadas
1 pulgada = 2.54 cm.
1 metro
3.
= 100 cm.
La lechería despacha al supermercado N cartones de mantequilla de C Kg. cada uno. La mantequilla
está envasada en paquetes de E Kg.. Calcular cuántos paquetes se despacharon y cuántos paquetes
contiene cada cartón.
4.
Se tiene una habitación de L metros de largo y A de ancho. Calcular el perímetro de la habitación. Si
está se llena con cajas de C cm2 . Determinar el número de cajas que puede contener la habitación.
5.
Se tiene un jarro que puede contener hasta N litros. Calcular el número de vasos de agua de X cc. que
llenarían el jarro.
6.
Un tren salió a las hh:mm y llegó puntualmente, h horas y m minutos después a su destino. Determinar
la hora de llegada.
7.
Si la fecha de nacimiento de una persona se lee en el formato ddmmaa. Determinar su edad a la fecha
actual y emitir un mensaje si está de cumpleaños.
8.
Un tren salió de Santiago a las H1 hrs. y viajó a una velocidad de X1 kms/hora y otro tren salió de
Puerto Montt a las H2 hrs. y viaja a una velocidad de X2 kms./hora. ¿ A qué hora y en que kilómetro se
encuentran los dos trenes suponiendo que la distancia entre las dos ciudades es de T kms. ?
9.
Transforme un número N entero de cuatro dígitos de base B (2..9) a base 10.
10.
Invierta el orden de los dígitos de un número entero de 4 dígitos.
11.
Tres Empresas de Transporte de pasajeros han enviado a licitación al Ministerio de Transporte y
Urbanismo el valor del pasaje que empezará a regir a partir del segundo semestre de 1999. El personal
encargado de realizar el estudio ha perdido el valor enviado por la tercera empresa (Z), pero aún
Laura Setti Duque
24
mantienen los precios de las otras dos (X, Y), y además recuerdan que el valor perdido (Z) se podía
calcular de la tercera parte del valor de la primera empresa (X), más las tres cuartas partes del valor de
la segunda (Y). Se pide:
a) Determinar e imprimir el valor del pasaje (Z) de la tercera empresa.
b) Se piensa que en diez años más el valor del pasaje de cada empresa
(X, Y,Z) aumentará al doble. Determine e imprima el valor del pasaje para cada empresa en ese
tiempo.
12.
Ana María tiene A años, y su amigo Miguel tiene B años, ambos desean saludar a su amigo en común
Mario, pero no recuerdan exactamente cuántos años cumple, sólo recuerdan que se calculaba de la
mitad de la edad de Ana María, más un tercio de la edad de Miguel. Se pide:
a) Determinar e imprimir la edad actual de Mario.
b) Determinar e imprimir la edad que tendrán los tres amigos en 10 años más.
13.
Para una persona que opta por un subsidio habitacional se necesita determinar su puntaje de
postulación. Los antecedentes necesarios para el cálculo son: valor de la UF al momento de postular,
años de antigüedad, total de dinero ahorrado en pesos, número de cargas familiares, cantidad de UF
pactada y sueldo líquido. El puntaje se obtiene como:
a) Por cada UF ahorrada se contabiliza 1 punto.
b) Por cada carga familiar incluida la persona 10 puntos.
c) Por cada año de antigüedad 4 puntos.
d) Por cada Uf que exceda lo pactado ½ punto.
Determine e imprima el puntaje obtenido para la postulación.
14.
Los antecedentes personales y académicos de los alumnos que ingresaron al DUOCUC el primer
semestre de 2001, están almacenados en C carpetas donde cada carpeta contiene X fichas (una por
alumno), cada ficha contiene a lo más D datos. Cada dato corresponde a una palabra de un byte.
Determinar e imprimir cuántos discos se necesitan para almacenar el total de la información de los
alumnos, sabiendo que cada disco tiene una capacidad de Z kilobytes.
Laura Setti Duque
25
CAPTIULO 8: LENGUAJE C, selección simple y compuesta.
TEMA 1: DEFINICIÓN.
Las instrucciones condicionales o tomas de decisión permiten realizar acciones alternativas, por lo
tanto, la ejecución de una línea o grupos de líneas de un algoritmo o programa depende de si cumplen o no
una o varias condiciones. Una condición corresponde al valor de una expresión lógica.
TEMA 2:TOMA DE DECISIÓN.
a)
Alternativa Simple: Involucra una alternativa de acción y su estructura en seudocódigo es:
Si <CONDICIÓN> entonces
<ACCIÓN>
Finsi
que corresponde a la proposición If de C:
If <CONDICIÓN>
BLOQUE;
CONDICIÓN: Es una expresión de tipo lógica.
BLOQUE: Es un conjunto de instrucciones encerradas entre llaves { }
Ejemplo:
Si (Buen_tiempo) entonces
Paseo
‘ bajar a la playa’
Finsi
b)
Alternativa Compuesta: Involucra dos alternativas de acción y la estructura en seudocódigo es:
Si <CONDICIÓN> entonces
<ACCIÓN1>
Sino
<ACCIÓN2>
Finsi
Laura Setti Duque
26
que corresponde a la proposición if/else en C:
If <CONDICIÓN>
BLOQUE1;
else
BLOQUE2;
Si el valor de la condición es verdadero, la acción que sigue a entonces es ejecutada, si es falso se
ejecuta la acción que sigue a sino.
Ejemplo 1.
Inicio
Escribir(‘Ingrese un número’)
Leer(Numero)
Si (Numero>=0) entonces
Total
Raiz2(Numero)
Sino
Total
Cuadrado(Numero)
Finsi
Escribir(‘ El total es:’, Total)
Fin
Ejemplo 2.
Inicio
Escribir(‘Ingrese medida del lado del cuadrado’)
Leer(Lado)
Si (Lado >0) entonces
Area
Cuadrado(Lado)
Perimetro
4*Lado
sino
Lado
0
Escribir (‘ Lado negativo o nulo, no hay mediciones’)
Finsi
Fin
Ejercicio: Codifique los algoritmos de los ejemplos 1 y 2 a lenguaje C.
Laura Setti Duque
27
CAPITULO 8: SENTENCIAS CONDICIONALES ANIDADAS.
TEMA 1: DEFINICIÓN.
Las sentencias que siguen a entonces y/o a sino, pueden ser a su vez otras sentencias selectivas, y si este es el
caso, estamos en presencia de una estructura condicional anidada.
TEMA 2: EJEMPLOS.
Ejemplo 1:
main()
{
int numero;
char nombre;
char Tipo_carac;
printf(" Ingrese tipo de dato a leer “dígito o letra \n");
scanf("%c",&Tipo_carac);
if (Tipo_carac == ‘d’)
scanf("%d",&numero);
else
if (Tipo_carac == ‘l’)
scanf("%c",&nombre);
else
printf("Errorrrrrr");
}
Ejemplo 2:
Dado tres números distintos , determinar el mayor.
Inicio
Escribir(‘ Ingrese tres números’)
Leer(A,B,C)
Si (A > B) entonces
Si (B > C) entonces
Mayor
A
Sino
Mayor
C
Finsi
Sino
Si (A > C) entonces
Mayor
B
Sino
Mayor
C
Finsi
Finsi
Escribir(‘ El mayor es:’, Mayor)
Fin
Laura Setti Duque
28
En C queda de la siguiente forma:
#include <stdio.h>
#include <conio.h>
main()
{
float a,b,c,mayor;
printf("Ingrese tres numeros \n");
scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);
if (a > b)
if (a > c)
mayor = a;
else
mayor = b;
else
if (b > c)
mayor = b;
else
mayor = c;
printf("\n El mayor es: %f", mayor);
getche();
}
Ejemplo 3. Determinar e imprimir las raíces de una ecuación cuadrática de la forma ax2 + bx + c = 0.
Análisis:
Entradas: Los coeficientes (a, b, c).
Salidas : Las raíces (x1, x2).
Proceso : Calculo de las raíces.
Caso a: Si a=0 y b=0, no existe ecuación.
Caso b: Si a=0 y b<>0, se convierte en una ecuación lineal y la solución única es : -c/b.
Caso c: Si a<>0 y b<>0, entones se aplica la fórmula X = -b ± √ b2 - 4ac
2a
en este caso los valores de las raíces va a depender del discriminante dis=b 2 - 4ac, para dis= 0 dos raíces
reales e iguales, para dis>0 dos raíces reales y distintas, y para dis<0 dos raíces complejas.
Laura Setti Duque
29
Algoritmo:
Inicio
Escribir(‘Ingrese los coeficientes de la ecuación cuadrática’)
Leer(a,b,c)
Si (a=0) y (b=0) entonces
Escribir(‘ No existe ecuación’)
Sino
Si (a=0) entonces
Escribir(‘ La única raíz es:’, -c/b)
Sino
Dis
cuadrado(b) - (4*a*c)
Re
-b/(2*a)
Im
raíz2(absoluto(Dis))/(2*a)
Si (Dis=0) entonces
Escribir(‘ Las raíces son reales e iguales y son:’, Re, Re)
Sino
Si (Dis > 0) entonces
Escribir(‘ Las raíces son reales y distintas y son:’)
Escribir(‘X1 =’, Re + Im, ‘X2 =’, Re - Im)
Sino
Escribir(‘ Las raíces son complejas y son:’)
Escribir(‘X1 =’, Re ,’+’, Im, ‘X2 =’, Re,’ -‘, Im)
Finsi
Finsi
Finsi
Finsi
Fin
Código en C:
#include <stdio.h>
#include <conio.h>
main()
{
float a, b, c, dis, re, im;
printf("Ingrese los coeficientes de la ecuación cuadrática \n") ;
scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);
if ((a==0) && (b==0))
printf("No existe ecuación \n");
else
if (a==0)
printf("La única raíz es: %f", -c/b);
else
{
dis = (b*b) - (4*a*c) ;
re = -b/(2*a) ;
Laura Setti Duque
30
im = sqrt( abs(dis) ) /(2*a);
if (dis==0)
printf("\n Las raíces son reales e iguales y son:%f %f", re, re);
else
if (dis > 0)
{
printf("\n Las raíces son reales y distintas y son:");
printf("x1 =%f ,x2 =%f ", re+ im,re-im) ;
}
{
printf("Las raíces son complejas y son:");
printf("x1 =%f + %f ,x2 =%f - %f", re, im,re,im);
}
}
getche();
}
Ejercicio: Determine las salidas del programa para las entradas:
a=0, b=0, c=7 ;
a=0, b=10, c=2 ;
a=2, b=3, c=0 ;
a=1, b=5, c=6 ;
a=1, b=1, c=1
Laura Setti Duque
31
CAPITULO 10: SENTENCIA SWITCH DE C.
TEMA 1: DEFINICIÓN.
La sentencia Switch de C es similar a un conjunto de sentencias If anidadas. Si el valor de expresión selectora
coincide con uno de los valores de la lista de constantes, el bloque de instrucciones asociado con la lista se
ejecutará, sino coincide con ninguna, la sentencia Switch no se realizará y la ejecución continuará con la
siguiente sentencia del programa.
Formato:
Switch (Expresión_selectora) Instrucciones;
Expresión_selectora: Es una expresión escalar. Puede ser de tipo entero o caracter. No podrá ser una
expresión de tipo real o cadena
Una instrucción switch puede incluir varios grupos de instrucciones y cada instrucción se identifica con una o
varias etiquetas (distintas opciones o valores).
Forma 1:
Switch (Expresión_selectora)
Case expresión:
Bloque;
Forma 2:
Switch (Expresión_selectora)
Case expresión 1:
Case expresión 2:
.
.
Case expresión n:
Bloque;
TEMA 2: EJEMPLOS.
Ejemplo 1:
Switch (indicador)
{
case –1:
y = fabs(x);
break;
Laura Setti Duque
32
case 0:
y = sqrt(x);
break;
case 1:
y = x;
break;
case 2:
case 3:
y = 2*(x-1);
break;
default:
y=0;
}
La instrucción break se utiliza para terminar la ejecución de ciclos o salir de una instrucción.
Ejemplo 2: Determinar el largo de un mes cualquiera.
main()
{
int yy,mm,lar;
printf(“Ingrese mes”);
scanf(“%d”,&mm);
. . .
Switch ( mm)
{
Case 1:
Case 3
Case 5:
Case 7:
Case 8:
Case 10:
Case 12:
lar=31;
break;
Case 4:
Case 6:
Case 9:
Case 11:
lar=30;
break;
Case 2:
printf(“Ingrese año”);
scanf(“%d”,&yy);
If ((yy%4= = 0) && (yy % 100!= 0 ) )
lar= 29;
Else
lar= 28;
break;
}
Laura Setti Duque
33
TEMA 3: SELECCIÓN . Aplicaciones.
Escriba un algoritmo en seudocódigo y su correspondiente programa en C para cada enunciado.
1.
Resolver un sistema de ecuaciones con dos incógnitas utilizando la regla de cramer, verificar condición.
2.
Determine si un número n entero positivo ingresado por teclado es par o impar, envíe el mensaje
adecuado.
3.
Determine el valor a pagar por el envío de un telegrama, sabiendo que por cantidad de palabras menor 0
igual a 50 se pagan $500 y que por cada palabra en exceso se agregan $5.
4.
Determine el valor a pagar por el envío de un encomienda, sabiendo que por peso menor 0 igual a 5 kilos
se pagan $2000 y que por cada gramo de exceso se agregan $500.
5.
Determine si una fecha ingresada por teclado es válida. La fecha se lee en formato ddmmaaaa.
6.
Determinar la edad de una persona dada su fecha de nacimiento y fecha actual. Imprima la edad en años,
meses y días. Si está de cumpleaños envíe un mensaje. Utilice formato ddmmaaaa para las fechas.
7.
Determine la estación del año para un día y mes ingresado por teclado.
8.
Determine el signo del horóscopo para el día y mes de nacimiento de una persona ingresados por teclado.
9.
Transforme si es posible un número entero en base 16 de 4 dígitos a las bases 2,4,8 y 10. El número en
base 16 puede ser leído como cadena.
10. Dados tres números distintos, determinar el mayor de ellos.
11. Dados tres números distintos, determinar el menor de ellos.
12. Imprimir de mayor a menor tres números distintos.
13. Imprimir de mayor a menor tres números distintos.
14. Calcular e imprimir las raíces de una ecuación cuadrática de la forma:
ax2 + bx + c = 0
15. Determine si un medicamento está vencido a la fecha actual. Las fechas se ingresan en formato ddmmaaaa.
Laura Setti Duque
34
16. Se pide calcular el peaje a pagar por un vehículo. Este peaje determina según tipo, año y kilometraje del
vehículo, de acuerdo a la siguiente tabla:
Tipo
Moto
Cargo según año
<= 1985 $200
> 1985 $300
Cargo según kilometraje.$ / kms.
$30
Auto
<= 1985 $500
> 1985 $650
$50
Furgón
<= 1985 $550
> 1985 $700
$60
Bus
<= 1985 $600
> 1985 $750
$70
camión
<= 1985 $650
> 1985 $800
$80
17. Dadas 10 monedas iguales, una de las cuales es más liviana que las demás, determinar cual de ellas es con
el mínimo de sentencias Si.
18. Un número entero es divisible por seis si es divisible por dos y por tres a la vez. Un entero es divisible
por tres si la suma de sus dígitos es múltiplo de 3. Verifique mediante este método si un número N entero
de 4 dígitos es o no divisible por seis.
19. Verifique que el ingreso de una fecha en que se realizó una bienal de arte en el centro cultural
Expresiones está correcta. Se sabe que los eventos se empezaron a realizar a partir del año 1971, y de ahí
en adelante cada dos años, en los meses de setiembre y diciembre alternadamente, la primera se realizó
en setiembre. La fecha se ingresa en formato ddmmaa. Verifique día, mes y año.
20. Escribir un programa que acepte un año escrito en cifras arábicas y lo visualice en números romanos,
dentro del rango 1000 a 2000.
21. Determinar la cantidad de días de un mes conociendo el número del mes y el número del año.
Laura Setti Duque
35
22. Un análisis de control de calidad de un proceso de fabricación de productos ha determinado como
defectuosos las piezas con códigos en el siguiente rango:
146-156, 700-799,y 888-911. Determine si un artículo con un número de serie determinado es
defectuoso correcto.
23.
Dadas dos letras minúsculas del alfabeto determinar: a) cuántas letras las separan, b) escribir la letra
o las dos letras centrales del intervalo que determinan en mayúsculas.
24.
Dado un año determinar a qué siglo pertenece.
25.
Dado los nombres y edades de tres personas, imprima el nombre de la persona con menor edad.
Laura Setti Duque
36
CAPITULO 11: LENGUAJE C. Iteración
TEMA 1: DEFINICIÓN.
A menudo es necesario repetir un mismo conjunto de instrucciones bajo una <CONDICIÓN>,
durante la ejecución de un programa. La situación anterior corresponde a un proceso iterativo (o repetitivo).
La estructura iterativa debe contener instrucciones que incidan en el valor de verdad de la <CONDICiÓN>
para poder abandonarla en algún momento.
TEMA 2: SENTENCIA MIENTRAS.
La primera sentencia iterativa que analizaremos es la llamada Mientras (Mientras/Haga/Fin Mientras).
Formato:
Seudocódigo:
Mientras <CONDICIÓN> Haga
<ACCIÓN>
Fin Mientras
Al encontrar la estructura se evalúa la <CONDICIÓN>, sólo si es verdadera se ejecuta la sentencia
Mientras, se continúa dentro de la estructura mientras se cumpla la condición. El ciclo Mientras de repite cada
vez que la condición es verdadera y termina cuando la condición es falsa, continuando con la siguiente
sentencia del programa.
Lenguaje C:
while <CONDICIÓN>
BLOQUE;
Ejemplo:
. . .
Escribir(‘ Ingresar edad’)
Leer( Edad)
Mientras ( edad < 0 ) Haga
Escribir(‘ ERROR, edad negativa’)
Leer( Edad)
Fin Mientras
. . .
Laura Setti Duque
37
En Lenguaje C:
main()
{
int edad;
printf("Ingresar edad \n") ;
scanf("%d",&edad);
while (edad < 0)
{
printf("ERROR,\n");
scanf("%d",&edad) ;
}
}
TEMA 3: SENTENCIA Hacer/Mientras.
Una segunda sentencia iterativa es la denominada Hacer/Mientras.
Formato:
Seudocódigo:
Hacer
BLOQUE
Mientras <CONDICIÓN>
Se ingresa a la estructura incondicionalmente, esto implica que la acción contenida en el
Hacer/Mientras se ejecuta al menos una vez. A continuación se evalúa la <CONDICIÓN>, si es falsa se
termina el ciclo, en caso contrario, se repite todo el ciclo desde la primera instrucción contenida en él.
Lenguaje C:
do
BLOQUE;
while <CONDICIÓN>;
Para esta forma se ejecuta por lo menos una vez el bloque de instrucciones, y luego se evalúa la
condición. Cada vez que sea verdadera la condición se ejecuta nuevamente el bloque de instrucciones.
Laura Setti Duque
38
Ejemplo:
. . .
Hacer
Escribir(‘ Ingresar tres números’)
Leer(N1,N2,N3)
S
N1 + N2 + N3
P
S/3
Escribir(‘ El promedio de los tres números es:’, P)
Escribir(‘ Otros tres S/N?’)
Leer(Resp)
Mientras (Resp = ‘S’)
. . .
En Lenguaje C:
#include <stdio. h>
#include <ctype. h>
main()
{
float n1,n2,n3,suma,prom;
char resp;
do
{
printf("Ingresar tres números \n");
scanf("%f",&n1);
scanf("%f",&n2);
scanf("%f",&n3);
suma = n1 + n2 + n3 ;
prom = suma/3 ;
printf("\n El promedio de los tres números es: %f", prom);
printf("\n desea seguir usando el programa s/n?") ;
fflush(stdin);
scanf("%c",&resp);
}
while ( (toupper(resp) ==’S’);
}
Laura Setti Duque
39
TEMA 4: SENTENCIA Para/Fin para.
La última sentencia iterativa que revisaremos es la estructura PARA. Esta estructura incluye tres expresiones,
la primera permite la inicialización de variables, la segunda condiciona la ejecución del ciclo, y la tercera
modifica la/s variables inicializadas en la primera expresión.
Formato:
Seudocódigo:
Para (expresión1, expresión2, expresión3)
BLOQUE
Fin Para
Expresión1 : Es una expresión de asignación.
Expresión2: Representa una condición que debe ser satisfecha para que continúe la ejecución del bloque de
instrucciones contenido en el ciclo.
Expresión3: Se utiliza para modificar el valor de la variable inicialmente asignado en la expresión1.
Lenguaje C:
for (expresión1; expresión2; expresión3)
BLOQUE;
Para las expresiones indicadas en el Fo r, C permite incluir más de una en cada caso. Es decir más de una
asignación, más de una condición, más de una modificación de variables dependiendo de la situación a
resolver.
Ejemplo: Segmento que imprime la tabla de multiplicar de un entero N.
. . .
Escribir(‘ Ingrese un número’)
Leer(N)
Para (I=1,I< 12,I=I+1)
Escribir(N,’ * ‘, I, ‘ = ‘, N*I)
Fin Para
. . .
Lenguaje C
main()
{
int n;
int i;
printf("Ingrese un número \n");
scanf("%d",&n);
for (i=1; i<=12; i++)
printf("%d * %d = %d",n,i,n*i);
getch();
}
Laura Setti Duque
40
CAPITULO 12: LENGUJAE C. Iteración, Aplicaciones
TEMA 1: EJERCICIOS RESUELTOS.
1.
Determinar si un número entero positivo es primo. Un número es primo si sólo es divisible por 1 y si
mismo.
Inicio
Escribir(‘ Ingrese un entero positivo’)
Leer(N)
Sw
0
I
2
Hacer
Si (Resto(N / I) = 0) entonces
Sw
1
Escribir(N,‘ No es un número primo’)
Fin si
I
I+1
Mientras ( I<= Entero(N/2) ) y ( Sw = 0)
Si (Sw = 0) entonces
Escribir(N, ‘ Es un número primo’)
Fin si
Fin
2.
Determine el total a pagar por la compra de N productos adquiridos en un supermercado.
Inicio
Escribir(‘ Ingrese total de artículos’)
Leer(N)
Total
0
Para (I=1,I<= N,I=I+1)
Escribir(‘ Ingrese valor del artículo’)
Leer(Valor)
Escribir(‘ Ingrese total de unidades a comprar’)
Leer(Unidades)
Total
Total + (Valor * Unidades)
Fin Para
Escribir( ‘ El total a pagar es:’, Total)
Fin
3.
Calcule e imprima el valor de ab, b entero.
Inicio
Escribir(‘ Ingrese base y exponente entero’)
Leer(a,b)
P
1
Si ( b < 0) entonces
b
-b
a
1/a
Fin si
Para (I=1,I<= b,I=I+1)
P
P*a
Fin Para
Escribir(a,’ elevado a’, b,’ es :’, P)
Laura Setti Duque
41
Fin
Ejercicio: Codifique a lenguaje C los ejercicios 1, 2 y 3.
4.
Programa que imprime cada carácter con su correspondiente código ascii.
main()
{
int i;
for (i=1;i<=255;i++)
{
printf("%c,%d\n", (char)(i),i);
}
getch();
}
TEMA 2: EJERCICIOS PROPUESTOS.
Diseñe un algoritmo en seudolenguaje y su correspondiente programa en lenguaje C para cada uno de
los siguientes problemas.
1.
Imprimir los números enteros de 0 a 100.
2.
Imprimir los números enteros de 100 a 0.
3.
Imprimir los números pares 0 a 100.
4.
Imprimir la suma de los primeros 100 números naturales.
5.
Imprimir los números impares hasta 100 y contarlos.
6.
Imprimir los números impares desde 100 hasta 1 y calcular la suma.
7.
Imprimir los números naturales desde 1 hasta un número ingresado por teclado.
8.
Imprimir y contar los múltiplos de 3 desde 1 hasta 100.
9.
Calcular la suma de los números impares entre 0 y 100.
10.
Imprimir, contar y sumar los múltiplos de 2 hasta un número introducido por teclado.
11.
Introducir un número por teclado menor de 500. Imprimir, sumar y contar los números que están
separados entre si 8 posiciones, desde ese número al 500.
12.
Contar e imprimir los múltiplos de 5 que hay entre 1 y 500.
13.
Calcular la suma de los cuadrados de los números pares entre 0 y 100.
14.
Introducir un número por teclado menos de 100. Imprimir la suma de los cuadrados de los números
que están separados entre sí cuatro posiciones.
Laura Setti Duque
42
15.
Imprimir y contar los números que hay del 1 al 100, excepto los múltiplos de 5, entregar la suma de
los múltiplos de 5.
16.
Introducir una serie de números. Sumar los múltiplos de 8, determinar cuál es el mayor y cuántos
números se han introducido.
17.
Imprimir 10 veces la serie de números de 1 a 10.
18.
Imprimir y contar los números que son múltiplos de 2 o 3 que hay entre 1 y 100.
19.
Imprimir y contar los números que son múltiplos de 2 y 3 que hay entre 1 y 100.
20.
Introducir tantos números como queramos. Decir sin son mayores o menores que un número que
previamente introducimos por teclado.
21.
Imprimir, contar y sumar los múltiplos de 2 de la serie de números que hay entre dos números
ingresados por teclado, tal que el segundo sea mayor o igual al primero.
22.
Dado un número ingresado por teclado imprimir su tabla de multiplicar.
23.
Determinar la suma de N números.
24.
Determinar el promedio de N números.
25.
Determinar la multiplicación de dos números enteros mediante sumas sucesivas.
26.
Determinar la división de dos números enteros mediante restas sucesivas.
27.
Determinar el resto de la división entera entre dos números enteros, mediante restas sucesivas.
28.
Determinar la cantidad de dígitos de un número entero positivo.
29.
Contar las veces que se repite un dígito d cualquiera en un número entero positivo.
30.
Determinar si un número N entero positivo es primo.
31.
Determinar e imprimir los primeros N términos de la serie fibonacci.
32.
Determinar e imprimir los primeros N términos primos de la serie fibonacci.
33.
Calcular el factorial de un número entero positivo.
34.
Invertir los dígitos de un número entero positivo.
35.
Determinar si un número entero positivo es palíndromo.
36.
Identificar si la suma de los dígitos de un número entero positivo es par o impar.
37.
Se ingresan los datos de N personas, estos son nombre, edad, estado civil y n o de cargas familiares.
Se pide determinar e imprimir: la edad promedio de las personas, la mayor y menor edad, cantidad de
solteros con cargas familiares y cantidad de casados con más de una carga familiar.
38.
Simplificar la fracción N/M, con N y M enteros positivos.
Laura Setti Duque
43
39.
40.
Determinar e imprimir el valor de la serie 1 + ½ + 1/3 + ¼ + 1/5 + ... + 1/N.
Determinar e imprimir el valor de la serie 1 + ½! + 1/3! + ¼! + 1/5! + ... + 1/N! .
41.
Determinar si M es divisor de N mediante restas sucesivas.
42.
Determinar e imprimir los valores de la función F(x) = x3 - x2 + 1 para valores de x entre 1 y N
enteros.
43.
Determinar e imprimir los valores de la serie :
x - x2/2! + x3/3! - x4/4! + x5/5! - ... + xN/N!
44.
Calcule e imprima el valor de ab, a:real y b:entero.
45.
Averigue mediante restas sucesivas si un número n es par o impar.
46.
Imprima los N primeros números primos.
47.
Imprima la suma de los N primeros números primos.
48.
Determine todos los factores primos que componen un entero N.
49.
Imprima un mensaje que indique la cantidad de dígitos de un número n es par o impar.
50.
Determine los N primeros números perfectos.
51.
Imprimir cada valor y obtener la suma de los N primeros términos de la serie:
1, 12, 123, 1234, . . .
52.
Se ingresan N números desde el teclado, calcular e imprimir el promedio de los datos positivos, y el
promedio de los datos negativos (considere al cero como positivo).
53.
Se ingresan N números enteros positivos, imprima aquellos cuyos últimos k dígitos sean divisibles
por 7.
54.
Determinar e imprimir la suma de los dígitos pares de un número entero positivo N.
55.
Valide el dígito verificador de un rut ingresado por teclado.
56.
Se ingresan para N matrimonios los siguientes datos: años de matrimonio de cada pareja y edad de
cada integrante de la pareja. Se desea conocer el promedio de edad de todos los matrimonios con más
de X años de casados.
57.
Se lee un número N entero positivo y se desea imprimir los dígitos pares de este.
Ejemplo: Si N= 1876543, se imprimen los dígitos 4, 6 y 8.
58.
Se ingresan los datos de N pasajeros de un viaje en autobús con dirección al sur de Chile, por cada
pasajero se lee la información de: Número de asiento, destino y edad. Se pide crear un programa en
lenguaje C que determine e imprima:
a)
La edad promedio de los pasajeros.
b)
Número de pasajeros que viajan a Puerto Varas.
59.
Calcular la suma de los términos de la serie ½ + 2/22 + 3/23 + . . . + n/2n
Laura Setti Duque
44
60. Determinar de cuántas maneras posibles un número entero positivo N puede descomponerse en la suma
de enteros positivos.
61.
Dado el siguiente algoritmo en seudo lenguaje responda las preguntas para
N = 11339778. Realice la traza.
1.Cuál es el valor de la variable P ?
2.Cuál es el valor final para las variables S, I y N ?
4.Cuál es la salida del algoritmo ?
Inicio
Escribir(’Ingrese valor’)
Leer(N)
S
0
I
2
Hacer
Si (I=8) entonces
I
2
Fin si
S
S + ( ( N % 10 ) * I )
I
I+1
N
N / 10
Mientras (N> 0)
P
11 - (S % 11)
Si (P>0) y (P<=9) entonces
Escribir(P)
Sino
Si (P = 10) entonces
Escribir(’K’)
Sino
Escribir(’0’)
Fin si
Finsi
Fin
62.
Visualizar en pantalla una figura similar a la siguiente:
#
##
###
####
#####
63. Multiplique dos números enteros mediante el algoritmo de la multiplicación rusa. Este algoritmo
multiplica por 2 el multiplicando y divide por 2 el multiplicador hasta que el multiplicador toma el valor 1.
Después suma todos los multiplicadores correspondientes a multiplicadores impares. Dicha suma es el
resultado del producto de los dos números.
Ejemplo: 37 * 12 = 444 ( multiplicador :37, multiplicando:12)
37
12
18
24
9
48
4
96
2
192
1
384
producto = 12 + 48 + 384 = 444
Laura Setti Duque
45
UNIDAD 5: SUBPROGRAMAS.
CAPITULO 13: CONCEPTO DE SUBPROGRAMA.
TEMA 1: DEFINICIÓN.
Un subprograma es una parte de un programa que ejecuta una tarea específica, incluida dentro de la
más general que realiza este último.
TEMA 2: Relación con el programa principal.
Cada vez que se necesita un subprograma, se le llama desde algún punto del programa principal, y el
control es transferido al subprograma. Cuando termina la ejecución del subprograma, el control vuelve al
punto del programa principal desde el que se efectúo la llamada.
Un mismo subprograma puede ser llamado desde distintos puntos del programa principal, un ejemplo
de esto son las pantallas de presentación de menús.
Un subprograma puede también ser llamado desde otro subprograma. En este caso el subprograma
llamador se comporta como el programa principal de la situación descrita anteriormente.
Un subprograma puede también llamarse a sí mismo, lo que se conoce como recursión.
TEMA 2: FUNCIONES EN C
En el contexto de C se entenderá como subprograma una función.
Las funciones en C responden a las mismas características de un subprograma. Se utilizan para dar a los
programas una estructura jerárquica.
Una función puede o no devolver (retornar) un valor de tipo simple (entero, real, carácter)
alfanumérico.
En la función se debe indicar el tipo de dato que devuelve.
TEMA 3: ESTRUCTURA GENERAL DE UN PROGRAMA EN C,CON FUNCIONES.
Librerias
Definciones de variables y constantes globales
funciones
Main()
{
Definciones de variables y constantes locales
Instrucciones locales
Llamada a las funciones
}
Laura Setti Duque
46
TEMA 4:TIPOS DE VARIABLES.
La posibilidad de cada función declare sus variables genera dos tipos de ellas: las globales y las
locales.
a)
Variables locales: Son aquellas que se declaran dentro de una función y tienen las característica de
existir sólo dentro de ella, durante su ejecución.
b)
Variables globales: Son aquellas variables que tienen validez en todo el programa y sus funciones
salvo que en uno de estos últimos exista una variables local con el mismo nombre.
TEMA 5: ESTRUCTURA DE UNA FUNCIÓN.
Formato:
[Tipo devuelto] nombre ([parámetros])
{
definición de variables
instrucciones
[return(valor)]
}
Una función si no lleva tipo devuelto no debe llevar return.
Invocación: Una función es tratada como un valor, así que puede ser invocada como componente de una
expresión, en una asignación a una variable o en una sentencia de salida.
Para llamar a la función se debe tener en cuenta lo siguiente:
a)
Si la función no tiene tipo devuelto:
Nombrefunción(pérámetros);
b) Si la función tiene tipo devuelto:
Variable=nombrefunción(parámetros);
La variable debe ser del mismo tipo que el tipo devuelto
TEMA 6: PARAMETROS.
Cuando se necesita que una función maneje datos creados en alguna zona del programa principal, o
que los datos generados en una función deban utilizarse en el resto del programa, será necesario recurrir a los
parámetros.
a)
Parámetros: Son canales de comunicación para pasar datos entre programas y funciones en ambos
sentidos. Los parámetros van asociados a variables, constantes y expresiones.
Los parámetros deben coincidir en tipo, número y orden, tanto en la declaración de la función, como
en su llamada.
b)
Parámetro por valor: Se identifica en la cabeza de la función, en paréntesis a continuación del
identificador del subprograma, indicando las lista de ellos separados por una coma (,) y su tipo.
Puede ser invocado por una expresión, una constante o variable. Las modificaciones que sufra este
tipo de parámetro sólo son válidas dentro de la función en que se declaró. Estos parámetros de
utilizan para recibir datos de entrada (parámetros de entrada) desde otro lugar del programa, del tal
manera que si éstos datos se modifican mantienen su valor original a la salida de la función.
c)
Parámetro Variable o por referencia. Se reconoce en la cabecera de la función porque le antecede al
identificador del parámetro un * . Puede ser invocado sólo por una variables. Las modificaciones que
Laura Setti Duque
47
sufra este tipo de parámetro serán válidas para el resto del programa, es decir modifica su valor
inicial al final de la ejecución de la función. Estos parámetros se utilizan para generan resultados en
la función y enviarlos al exterior sin usar return. Se utilizan como parámetros de salida y de
entrada/salida. En la llamada de la función se debe mandar el parámetro antecedido por un &.
CAPITULO 14: TIPOS DE FUNCIONES
TEMA 1: FUNCIONES SIN TIPO DEVUELTO.
Estructura para este caso:
Void NombreFunción([parámetros])
{
definición de variables
instrucciones
}
Ejemplo 1 :
void Imprime_Pares(int num)
{
int i;
for (i=1;i<=num/2;i++)
printf("%d",2* i);
}
void Imprime_Pares(int);
main()
{
int n;
printf("Ingrese numero entero positivo \n");
scanf("%d",&n);
Imprime_Pares(n);
getch();
}
Ejemplo 2:
void Imprime_Tabla(int num)
{
int i;
for (i=1;i<=12;i++)
printf("%d * %d = %d",num,i,num*i);
}
void Imprime_Tabla(int);
main()
{
int n;
printf("Ingrese numero entero positivo \n");
scanf("%d",&n);
Imprime_Tabla(n);
getch();
}
Laura Setti Duque
48
TEMA 2: FUNCIONES CON TIPO DEVUELTO.
Estructura para este caso:
tipo NombreFunción([parámetros])
{
definición de variables
instrucciones
return(expresion)
}
Ejemplo 1:
int minimo(int, int);
main( )
{
int a,b,c;
printf(“Ingrese dos números enteros”);
scanf(“%d%d”,&a,&b);
c= minimo(a,b); /*Invocación a la función Minimo asignando el valor a C*/
printf(“El menor entre %d y %d es %d”,a,b,c);
}
int minimo(int x, int y)
/*Función que retorna el menor de dos números enteros*/
{
int m;
If (x<y)
m= x;
Else
m= y;
Return(m);
}
Ejemplo 2:
float potencial(float,float);
main()
{
float a,b;
printf("Ingrese base positiva y exponente \n");
scanf("%f",&a);
scanf("%f",&b);
printf("%5.1f elevado %5.1f es: %5.1f ",a,b,potenciak(a,b));
getch();
}
float potencial(float a,float b)
{
return pow(a,b);
}
Laura Setti Duque
49
TEMA 3: FUNCIONES. Ejercicios resueltos.
1. Se recibe un número entero positivo n, y se retorna en x el número n invertido.
int Invierte(int n)
{
int x=0;
do
{
x=((x*10)+(n%10));
n=n/10;
}
while(n>0);
return(x);
}
2. Determinar el área y el perímetro de un círculo de radio R.
#define pi 3.141516
float a,p; /*variables globales*/
void circulo(float r)
{
a= pi*r*r;
p= 2*pi*r;
}
3. Determinar la suma de los dígitos pares de N entero positivo, y el producto de los dígitos impares.
Int sum,prod; /*variables globales*/
void prodsum(int n)
{
int d;
sum=0;
prod=1;
do
{
d= (n%10);
if ((d%2)==0)
sum=sum+d;
else
prod=prod*d;
n=n / 10;
}
while(n!=0);
}
Laura Setti Duque
50
4. Se ingresan los datos de N personas, la información por persona es edad y nombre. Se pide determinar el
nombre de la persona con mayor edad y el de menor edad, como también el promedio de las edades.
#include <string. h>
Typedef
Char cadena[30];
float Est(int N,cadena NMax,cadena NMin)
{
int i,Edad,Min,Max;
cadena Nom;
float Prom=0;
Min=200;
Max=-1;
for(i=1;i<=N;i++)
{
printf("Ingrese Nombre %d",i);
fflush(stdin);
scanf("%s",Nom);
printf("Ingrese Edad %d",i);
scanf("%d",&Edad);
if(Edad> Max)
{
Max=Edad;
Strcpy(Nmax,Nom);
}
else
if (Edad<Min)
{
Min=Edad;
Strcpy(Nmin,Nom);
}
Prom=Prom+Edad;
}
return (Prom/N);
}
5. Se recibe un número x entero positivo, y se retorna la cantidad de dígitos de x.
int sumadig(int x)
{
int s=0;
do
{
s=s+1;
x=x/10;
}
while(x!=0);
return (s);
}
Laura Setti Duque
51
6. Determinar cuántos lanzamientos de una moneda ocurren hasta que aparezcan tres caras consecutivas.
#include <stdlib. h>
Int caras(void)
/* 0 : Cara, 1: Sello*/
{
int T,M,C;
Randomize();
T=0;
Do
{
T++;
M=Rand()%2;
C=0;
Printf(“%d”,M); /*Se imprime el lanzamiento*/
While ((M=0) && (C<3))
{
C++;
M=Rand()%2;
T++;
Printf(“%d”,M);
}
}
While (C!=3);
Return(T-1);
}
7. Determinar el factorial de un número N entero positivo.
int fac(int n)
{
int
f,i;
f=1;
for(i=2;i<=n;i++)
f=f*i;
return( f);
}
8. Determinar el e-nésimo término de la serie fibonacci: 1, 1, 2, 3, 5, 8, 13, .....
int fib(int n)
{ int f1=0,f2=1, f3;
if (n==1)
f3=0;
else
If (n==2)
f3=1;
else
for (i=3; i<=n; i++)
{
f3= f1 + f2;
f1= f2;
f2= f3;
}
return (f3);
}
Laura Setti Duque
52
9. Ingreso de nota entre 1 y 7.
float validanota(void)
{
float nota;
do
{
printf("Ingrese nota entre 1 y 7 \n");
scanf("%f",&nota);
}
while ((nota < 1)||(nota > 7));
printf("Nota correcta");
return(nota);
}
10. Validación de la lectura de la variables resp.
#include <ctype. h>
char validaresp(void)
{
char resp;
do
{
printf("Desea seguir s/n \n");
fflush(stdin);
scanf("%c",&resp);
}
while((toupper(resp)!=’S’)&&(toupper(resp)!=’N’));
return(resp);
}
11. Validación de un número entero positivo.
#include <stdlib. h>
Typedef
Char cadena[8];
long validanum(void)
{
long n;
cadena s;
do
{
printf("Ingrese numero entero positivo \n");
fflush(stdin);
scanf("%s",&s);
n=atol(s);
}
while (n<0 );
return(n);
}
Laura Setti Duque
53
TEMA 4: FUNCIONES. Ejercicios propuestos.
Desarrolle una función para cada caso.
1.
Genere e imprima los elementos de la serie:
1, -1, ½, -1/3, ¼, -1/5,.......
2.
Los números de las claves de dos cajas fuertes están mezcladas en un número entero llamado clave
maestra. Determine ambas claves, la primera clave se construye con los dígitos impares de la clave
maestra y la segunda con los pares. Ejemplo: Clave maestra = 12345, Clave1= 135, Clave2=24.
3.
Se recibe como parámetro una cadena de caracteres. Se pide imprimir el primer carácter, luego los
dos primeros, luego los tres primeros y así sucesivamente hasta imprimir la cadena completa.
Ejemplo: Para la cadena ‘HOLA’, el procedimiento imprime
‘H’
‘HO’
‘HOL’
‘HOLA’
4.
Mezcle ordenadamente dos números enteros A y B en un tercer número C que contenga el total de
dígitos de ambos números. A y B tienen sus dígitos ordenados ascendentemente de derecha a
izquierda, el número C debe quedar ordenado de igual forma.
Ejemplo: A = 7321, B = 87543 se obtiene C = 877543321
5.
Determinar el mayor y menor elemento de N datos ingresados por teclado.
6.
Escriba el operador BASEB, que recibe un número entero en base 10 e imprime su equivalente
número entero en una base base b (2..9).
7.
Determinar el N-ésimo término de la serie fibonacci.
8.
Cuente el número de dígitos que tiene un número N entero.
9.
Escriba el operador BDIEZ, que recibe un número entero en base b y lo transforma a base diez. Puede
utilizar la función POT(a,b), que retorna a elevado a b.
10.
Diseñe el operador DIGITO(N,K), que retorna el k-ésimo dígito de la derecha del entero positivo N.
11. Determine el factorial de un número N entero positivo.
12. Se recibe un valor entero positivo y se retorna el número de dígitos cinco (5) que posee.
13. Determinar la suma de los n primeros términos de la serie:
4 + x2/3 - x4/5 + x6/7 - x8/9..... evaluada en un valor x real.
14.
Determinar cuántos dígitos distintos tiene un número entero positivo cualquiera.
Laura Setti Duque
54
15.
Se tiene la función mayor3(a,b,c), que retorna el mayor de tres enteros . Se pide crear la función
mayor5(a,b,c,d,e) que retorna el mayor de cinco números enteros, usando mayor3. No puede usar
sentencias selectivas ni iterativas.
16.
Determine usando una función booleana si una palabra s es palíndroma.
17.
Sumar los n primeros números enteros positivos.
18.
Determinar si un número entero positivo es par utilizando restas sucesivas. No utilice los operadores /
y%
Laura Setti Duque
55
UNIDAD 6:
TIPO DE DATO CADENA.
CAPITULO 15: LENGUAJE C. Cadenas.
TEMA 1: DEFINICIÓN.
Una cadena o string es una lista o secuencia de caracteres que se tratan como una unidad. Las
expresiones se identifican por estar delimitadas entre comillas dobles. Los caracteres individuales en lenguaje
C tienen valores enteros, por lo tanto no es necesario su conversión a entero.
Ejemplo:
“Hola a todos”
“Buenos días”
“1028”
“- 542.75”
a)
Longitud: La longitud de una cadena es el número de caracteres encerrados entre doble comillas.
b)
Cadena nula o vacía. Una cadena se denomina nula si no tiene ningún carácter. Su representación es
‘\0’.
c)
Cadena blanca. Contiene sólo caracteres blanco.
d)
Representación de caracteres. Según código Ascii.
0
- 31 : Caracteres de control.
32 : Espacio en blanco.
33 - 47 : Símbolos.
48 - 57 : Dígitos.
58 - 64 : Símbolos.
65 - 90 : Letras mayúsculas.
91 - 96 : Símbolos.
97 - 122 : Letras minúsculas.
123 - 254 : Símbolos.
Laura Setti Duque
56
TEMA 2: OPERACIONES CON CADENAS.
Concatenación: Consiste en añadir una cadena a otra. En lenguaje C se utiliza la función strcat. Para usar esta
función es necesario incluir la biblioteca <string.h>.
Ejemplo:
Strcat(“Hola”, “ a todos ”) = “Hola a todos ”
TEMA 3: COMPARACIÓN DE CADENAS.
Las cadenas de caracteres se comparan de acuerdo a sus códigos ASCII. Cuando se comparan dos
cadenas, éstas se comparan de acuerdo al valor numérico del código ASCII de sus caracteres de izquierda a
derecha.
Ejemplo:
1)
“Antonio” < “Bartolomé”
2)
“‘No”
3)
“Marga” < “Margarita”
4)
“AAA”
5)
“400”
< “45”
6)
“A”
< “a”
< “Noo”
< “AAAA”
Para comparar dos cadenas en lenguaje C se utiliza la función strcmp(s1,s2) que devuelve 0 si las cadenas son
idénticas, devuelve un valor menor que 0 si la primera cadena es menor que la segunda, y devuelve un valor
mayor a cero si la primera cadena es mayor que la segunda. Para utilizar esta función es necesario incluir la
biblioteca <string.h>
Entonces según el ejemplo:
1) Strcmp(“Antonio”, “Bartolomé”) < 0
2) Strcmp(“No”, “Noo”) <0
3) Strcmp(“Marga”, “Margarita”) < 0
4) Strcmp(“AAA”, “AAAA”)< 0
5) Strcmp(“400”, “45”) < 0
6) Strcmp(“A”, “a”) < 0
Laura Setti Duque
57
TEMA 4: ALGUNOS OPERADORES DE CONVERSIÓN EN C.
Para utilizar estas funciones se necesita incluir la biblioteca <string.h>
Strlen(S): Proporciona la longitud de la cadena S. Esta función retorna un valor entero.
Strlwr(S): Convierte a minúsculas las letras de una cadena S.
Strupr(S): Convierte a mayúsculas las letras de una cadena S.
Strcpy(S1,S2): Copia la cadena s2 en s1.
Laura Setti Duque
58
CAPITULO 16: TIPO DE DATO CADENA. APLICACIONES.
TEMA 1: TRATAMIENTO DE UNA CADENA EN C.
En lenguaje C una cadena se maneja como un arreglo de caracteres que termina con el carácter
‘\0’. Se tiene acceso a una cadena mediante un apuntador al primer carácter de la cadena. El valor de
una cadena es la dirección de su primer carácter.
Al declarar un arreglo de caracteres que contenga una cadena, el arreglo debe ser lo
suficientemente grande para almacenar la cadena y su carácter de terminación NULL. Si una cadena
resulta más larga que el arreglo de caracteres en la cual debe almacenarse, los caracteres que excedan
del final del arreglo sobreescribirán datos en memoria a continuación del mismo.
Los siguientes subprogramas utilizan las cadenas como una estructura de arreglo lineal, es decir que
cada carácter se ubica en una posición determinada de la cadena, de esta manera si S es la cadena S[0] es el
primer carácter de S, S[1] el segundo, y así sucesivamente hasta S[strlen(S)] que corresponde al último
carácter de S de izquierda a derecha.
Declaración de tipo de datos para una cadena de tamaño 200:
Typedef
Char cadena [200];
Luego se puede definir la variable S como:
Cadena S; /*entonces S puede almacenar hasta 199 caracteres */
Laura Setti Duque
59
TEMA 2: EJERCICIOS RESUELTOS.
1. IZQ(cadena, n, CadIzq) : devuelve en CadIzq los n primeros caracteres de una expresión de cadena
contando desde la izquierda. Si n es mayor o igual a la longitud de la cadena se obtiene toda la cadena. Si
n es 0 devuelve la cadena nula.
#include <string. h>
Typedef
Char string[100];
void IZQ( string cadena,int n,string CadIzq)
{
int i=0;
do
{
CadIzq[i]=cadena[i];
i++;
while((i<strlen(cadena))&&(i<n));
cadIzq[i]=’\0’;
}
2. Separa(cadena,S1,S2): Devuelve dos cadenas S1 y S2 una con los caracteres de orden par de cadena y la
otra con los caracteres de orden impar.
#include <string. h>
Typedef
Char string[100];
void Separa(string cadena,string S1,string S2)
{
int i,j=0,k=0;
for(i=0;i<strlen(cadena);i++)
if (cadena[i]%2==0)
{
S1[j]=cadena[i];
J++;
}
else
{
S2[k]=cadena[i];
k++;
}
S1[j]=’\0’;
S2[k]=’\0’;
}
Laura Setti Duque
60
3.
Digitos(cadena): Determina si cadena contiene sólo caracteres dígitos. Retorna true si cumple la
condición y false en otro caso.
#include <string.h>
Typedef
Char string[100];
int Digitos(string cadena)
{
int i=0;
int R;
R=0;
Do
{
if ((cadena[i]<0)||(cadena[i]>9))
R=1;
else
i++;
}
while ((i<strlen(cadena))&& (R==0));
return(R);
}
4.
Pali(Pal) : Función booleana que determina si la cadena Pal es palindrómica, es decir si se lee
exactamente igual de izquierda a derecha, como de derecha a izquierda.
#include <string. h>
Typedef
Char string[100];
int Pali(string Pal)
{
int i,f;
i=0;
f=strlen(Pal)-1;
do
{
i=i+1;
f:=f-1;
}
while ((pal[i]==pal[f])&&(i<f));
return (i>=f);
}
Laura Setti Duque
61
TEMA 3: EJERCICIOS PROPUESTOS.
1.
Min(cadena): Devuelve el número de letras minúsculas que contiene la cadena.
2.
Der(cadena,n): Devuelve el número indicado de caracteres comenzando por la derecha. Si n es mayor
que la longitud de la expresión de cadena se devuelve la expresión. Si n es 0 se devuelve la cadena nula.
3.
Suste(cadena_e,cadena_u): Sustituye todas las letras e de la cadena_e por letras u en la cadena_u.
4.
Invierte(cadena,inversa): retorna en la cadena inversa de cadena.
5.
Pos(cadena1,cadena2): Devuelve la posición de la cadena2 en la cadena1. Si no la encuentra devuelve
0, sino devuelve la posición del primer carácter de la cadena2 en la cadena1.
6.
Mayus_Minus(cadena): Sustituye mayúsculas por minúsculas en la cadena.
7.
Copiar(cadena1, inicio, n, cadena2): Compone la cadena2 con n caracteres de la cadena1 desde la
posición inicio. Si inicio es mayor que la longitud de cadena1 se retorna en cadena2 la cadena nula.
Controle final de cadena1.
Laura Setti Duque
62
UNIDAD 6. TIPOS ESTRUCTURADOS ARREGLOS.
CAPITULO 17: TIPO DE DATO ARREGLO.
TEMA 1: DEFINICION.
Un arreglo es una colección finita de elementos homogéneos y ordenados, es decir es una estructura
formada por elementos del mismo tipo. Cada elemento es almacenado en una celda en el sentido gráfico y en
direcciones consecutivas de memoria, donde cada celda tiene asociado un índice, que al estar ordenados se
puede hablar de primer, i-ésimo o último elemento.
Un arreglo es un tipo de variable estructurada, es decir puede almacenar más de un dato a la vez a
diferencia de las variables simples.
TEMA 2: REPRESENTACIÓN.
Un arreglo se representa por el nombre de la variable. Un elemento del arreglo se representa por el
nombre de la variable, seguido del (de los) índice (es) encerrado (s) en paréntesis (en C paréntesis cuadrado),
donde cada índice representa la posición dentro del arreglo.
Ejemplo:
A=
0
1
2
d
Z
m
En este caso: A[2] = m
i
. . .
v
. . .
n-2
n-1
f
a
A[i] = v A[n-1]=a
Para los distintos tipos de arreglos:
a) Nombre_arreglo[índice] : Arreglo unidimensional (vector, lista).
b) Nombre_arreglo[índice][índice2] : Arreglo bidimensional (matriz, tabla de doble entrada).
c) Nombre_arreglo[índice1][índice2][índice3,.....] : Arreglo multidimensional.
Laura Setti Duque
63
TEMA 3: ARREGLOS UNIDIMENSIONALES. Declarativa: Definición de vectores.
#define max <valor>; /*max es el máximo número de casillas para el arreglo*/
Typedef
<tipo base> elemento; /* es el tipo de datos que va a contener el arreglo*/
Typedef
elemento Vector [max]; /* tipo vector */
/*definición de variables de tipo vector*/
vector
A1,. ., Aj, . . , An ;
Ejemplo:
#define max 100; /*max es el máximo número de casillas para el arreglo*/
Typedef
int elemento; /* es el tipo de datos que va a contener el arreglo*/
Typedef
elemento Vector [max]; /* tipo vector */
vector
A1,. ., Aj, . . , An ;
/*variables de tipo vector de 100 casillas, numeradas desde la 0 hasta la 99 y que pueden almacenar hasta 100
enteros*/
TEMA 4: USO DE EXPRESIONES.
Todos los elementos de tipo base de un arreglo unidimensional (vector), pueden ser usados en
cualquier expresión compatible con su tipo.
Ejemplos:
1.
suma= suma + a[i];
2.
a[i]= 678;
3.
a[10]=a[10]*f;
4.
Existe=a[j]=e;
5.
a[i]=a[b[1]];
6.
scanf(“%d%d”,&a[i],&b[j]);
7.
printf(“%3.4f”,a[k]);
Laura Setti Duque
64
TEMA 5: ARREGLOS UNIDIMENSIONALES. Ejercicios resueltos.
Se usará la siguiente declaración de tipo de datos para los ejercicios resueltos.
Typedef
Int vector[100];
1.
Ingresar los elementos a un vector A de tamaño N.
void Ingresa(vector A,int N)
{
int i;
for(i=0;i<N;i++)
{
printf("Ingrese elemento");
scanf("%d",&A[i]);
}
}
2.
Imprimir los elementos de un vector V de tamaño N.
void ImpVec(vector V,int N)
{
int i;
for(i=0;i<n;i++)
printf("%d",V[i]);
}
3.
Utilice un vector para calcular el e-nésimo término de la serie fibonacci.
int Fib(int N)
{
int A[50];
A[0]=1;
A[1]=1;
for(i=2;i<N;i++)
A[i]=A[i-1]+A[i-2];
return (A[N-1]);
}
4.
Obtener el promedio de los elementos ubicados en las posiciones impares de un vector V de tamaño
N.
Laura Setti Duque
65
float PosImp(vector V,int N)
{
int i,P,j=0;
i=0;
do
{
j++;
P=P+V[i];
i=i+2;
}
while(i<N);
return (P/j);
}
Laura Setti Duque
66
TEMA 6: ARREGLOS UNIDIMENSIONALES. Ejercicos Propuestos.
Escriba un subprograma para cada caso.
1.
Imprimir los elementos de un vector.
2.
Invertir los elementos de un vector.
3.
Determinar la suma de los elementos de un vector.
4.
Realice la función SUMAPRIM(A,N), que suma los elementos primos del vector A de largo N. Utilice
para ello la función PRIMO(M), que retorna 1 si M es primo y 0 en otro caso.
5. Determine el mayor y el menor elemento de un vector.
6. Escriba un subprograma PROMPAR(A, n, B), que retorna en el vector B, los
promedios parciales de
los elementos del arreglo A de largo n. Por ejemplo:
A=
2
6
1
3 3
B=
2
4
3
3
.......
5
........
7.
Encontrar la posición de un elemento e en un vector V .
8.
Contar en un vector los números iguales a x.
9.
Determinar la cantidad de valores mayores que X, en un vector A de N elementos reales.
Laura Setti Duque
67
CAPITULO 18: ARREGLOS BIDIMENSIONALES.
TEMA 1:DECLARATIVA. Definición de matrices.
#define max1 <valo1>
#define max2<valor2>
Typedef
<tipo base > Elemento;
Typedef
Elemento Matriz [max1][max2] ;
matriz
A1,. ., Aj, . . , An ;
Ejemplo:
#define max1
10;
/*filas*/
#define max2
5;
/*columnas*/
Typedef
float Elemento;
Typedef
Elemento matriz[max1][max2] ;
matriz
A1,. ., Aj, . . , An ;
/*variables de tipo Matriz de 50 (10*5) casillas, filas numeradas desde 0 hasta 9*/
/* columnas numeradas desde 0 a 4 y que pueden almacenar hasta 50 reales*/
TEMA 2: USO DE EXPRESIONES.
Todos los elementos de tipo base de un arreglo bidimensional (vector), pueden ser usados en
cualquier expresión, indicado el nombre de la variable matriz seguido de la posición fila, posición columna en
paréntesis cuadrado.
Ejemplos:
1.
suma= suma + a[i][,j];
2.
a[i][ j ]= 1678;
3.
a[1][0]=a[1,0]*f;
4.
Existe=a[ j ][5]=e;
5.
a[i][ j ]=a[b[1][,j], b[2][3] ];
6.
scanf(“%f”,&a[i][k], &b[j][k]);
7.
printf(“%4.5f”,a[k][i]);
Laura Setti Duque
68
TEMA 3: ARREGLOS BIDIMENSIONALES. Ejercicios resueltos.
Para los ejercicios resueltos se usará la siguiente declarativa de tipo de datos.
Typedef
Int matriz[30][30]
1.
Ingresar por filas los elementos a una matriz A de orden NxM.
Ingreso(matriz A,int N,int M)
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%d",A[i][j]);
}
2.
Determinar si un elemento e se encuentra en la fila i de una matriz A de orden NxM.
int buscar(matriz a,int e,int m,int i)
{
int j=0;
while ((j<m)&&(e!=a[i][j]))
{
j=j+1;
}
return (j<m);
}
3.
Imprime por filas los elementos de una matriz X de orden NxN.
void ImpMatriz(matriz X,int N)
{
int i, j;
for (i=0;i<N;i++)
{
for (j=0;j<N;j++)
printf("%d",X[i][j]);
printf();
}
}
Laura Setti Duque
69
TEMA 4: ARREGLOS BIDIMENSIONALES. Ejercicios propuestos.
Escriba un subprograma para cada caso.
1.
Diseñe una función que indique si una matriz de orden NxN es simétrica. Una matriz es simétrica si se
cumple que A[i] [ j ] = A[ j ] [i] para todo i,j=1..N.
2
Dada una matriz A de orden nxm, realizar un subprograma que genere una matriz C de orden hx2, con
todas las posiciones ( i , j ) en que se encuentra un elemento x dado, si no lo encuentra retorne C=[ 0 0]).
Los índices de fila y columna deben quedar en la primera y segunda columna de C respectivamente. Por
ejemplo:
A=
4
3
7
4
5
4
1
2
2
C=
1
2
3
X=4
3.
Escriba un subprograma que determine si A y B dos matrices de NxM son una espejo de la otra.
4.
Diseñe una función que determine el elemento más cercano al promedio de una matriz M.
5.
Determinar si una matriz cuadrada M es diagonal dominante. Una matriz es diagonal dominante si se
n
cumple que:
fila i abs(A[ i] [j]) < abs(A[i] [ i])
con i j.
i=1
6. Sumar los elementos de la triangular superior de una matriz cuadrada M, sin incluir la diagonal principal.
7.
Encontrar el elemento mayor de la fila i de una matriz M.
8.
Dada una matriz M, en que sus elementos son pares ordenados de la forma: (x, y).
a) Obtener el par de mayor y menor promedio.
b) Generar un par (x1, y1), en que x1 corresponde a la suma de todos los x, y la suma de todos los y en
y1.
c) Almacenar en un vector todos los x mayores de cada fila, y en otro vector
los elementos y
menores de cada columna.
M =
1
2
3
1
3
4
9.
1
4
0
0 1
-1
4
Dada una matriz de orden N, determine el cuociente entre la suma de los elementos de la diagonal
principal y la suma de los elementos de la diagonal secundaria.
Laura Setti Duque
70
10. Diseñe un subprograma que permita buscar y contar la cantidad de veces que se encontró un elemento e,
en una columna j de una matriz A de orden NxM.
11. Se pide crear un operador que determine si un elemento e se encuentra en la diagonal secundaria de una
matriz A de orden N. Para ello utilice los operadores PosFila(A,N,M,e) y PosColumna(A,N,M,e), el
primero retorna la fila en que se encuentra el elemento e, y el segundo la posición columna en que se
ubica e, en la matriz A de orden NxM.
12.
12. Dada una matriz A de orden NxM que contiene caracteres. Cree un vector V que contenga los caracteres
de A y agregue después de cada carácter vocal una casilla con una letra p y otra casilla con dicha vocal.
Confeccione un subprograma que reciba la matriz A, retorne el vector V y la cantidad de elementos de
V.
Ejemplo:
Matriz A
A
L
A
R
M
A
Vector V resultante
A
13.
P
A
L
A
P
A
R
M
A
P
A
Se tiene almacenada en una matriz llamada Nac el número de nacimientos mensuales (1..12) de la
última década (1987 - 1997), donde cada fila i almacena la información de nacimiento durante un año.
Es decir Nac[i,j] representa la cantidad de nacimientos en el mes j del año i.
Se pide:
a)
Cree una función que retorne el año en que hubo más nacimientos.
b)
Diseñar un operador que determine en que mes del año i hubo menos nacimientos.
c)
Cree una función que determine si fue febrero el mes con más alto promedio de nacimientos
en la última década. Retorne True si cumple febrero la condición y false en caso contrario.
14.
Cree un subprograma que reciba una matriz A de orden N que contiene en cada casilla un carácter, y
retorne un vector V con los elementos de A, en el siguiente orden: primero los elementos de la
diagonal principal de A, luego los de la diagonal secundaria, y a continuación el resto de los
elementos. El vector no debe contener dos veces el dato de una casilla. 1
1
Laura Setti Duque
Laura Setti Duque
Descargar