Escolar Documentos
Profissional Documentos
Cultura Documentos
PROGRAMACIÓN
Claudio Gutiérrez-Soto
Manuel Crisosto Muñoz
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Agradecimientos
Claudio Gutiérrez-Soto
Página : 2
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Prólogo
En este material desde el primer capítulo se presentarán una serie de ejercicios resueltos.
Le recomendamos que antes de ver el desarrollo de estos ejercicios, intenten resolver
dichos ejercicios. Es una tarea progresiva, que se puede apoyar si siguen los siguientes
pasos:
1. Entender lo que se esta solicitando que el algoritmo o programa resuelva.
ENTENDER EL ENUNCIADO.
2. La mayoría de los algoritmos o programas requiere que se le ingresen datos que
serán transformados, convenientemente por el conjunto de instrucciones, en la
salida que se esta solicitando. Es imprescindible poder identificar estos datos
de entrada y la información de salida que se está solicitando.
3. Identificar las posibles restricciones o condiciones que se deben consideran para
los datos de entrada.
4. Construcción del algoritmo o programa.
Sin embargo, lo más importante que podemos recalcar en la utilización de este libro, es
que la adquisición de la destreza para poder resolver un problema a través de un
algoritmo es paulatina y progresiva. Es decir, hay que ejercitar con el objeto de adquirir la
lógica para resolver problemas. Esto es equivalente a las metas de un deportista, ellos se
colocan metas y trabajan constantemente para alcanzarlas. Aquí ocurre de manera
similar, debemos de adquirir la destreza a través de ejercicios. En dicho caso, nuestra
herramienta es el computador, compilador y simuladores asociados.
Página : 3
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Parte 0: Introducción.............................................................................................................5
Programa ..........................................................................................................................5
Algoritmo ...........................................................................................................................6
Variables ...........................................................................................................................6
Concepto de Ciclo ..............................................................................................................13
Ciclo Mientras (expresión) ..............................................................................................13
Ciclo Repetir (instrucciones) Mientras ............................................................................13
Ciclo Para (variables de control): ....................................................................................14
Ejercicios parte 0: Construcción de algoritmos ...............................................................19
Parte 1: Estructura e instrucciones básicas en el lenguaje C.............................................20
Función printf() ................................................................................................................20
Comentarios....................................................................................................................21
Define..............................................................................................................................24
Incremento y Decremento.............................................................................................24
Operadores .....................................................................................................................25
Ejercicios.........................................................................................................................26
Parte 2: Estructura de Control. ...........................................................................................28
La estructura de control if................................................................................................28
Proposición switch ..........................................................................................................34
Proposición while ............................................................................................................38
Ejercicios parte 2: Ciclo while .........................................................................................41
Proposición for ................................................................................................................42
Ejercicios parte 2 ciclos for .............................................................................................45
Proposición do while ......................................................................................................46
PREGUNTAS DE CERTAMENES DE AÑOS ANTERIORES al 2008, REFERENTES AL
MANEJO DE CICLOS Y EVALUACIONES LÓGICAS ...................................................47
Parte 3: Definición de una función......................................................................................51
Pasaje de parámetros o argumentos ..............................................................................59
PREGUNTAS DE CERTAMENES DE AÑOS ANTERIORES al 2008, REFERENTES AL
MANEJO DE FUNCIONES .............................................................................................61
Parte 4: Arreglos Unidimensionales ...................................................................................65
Inicialización de arreglos.................................................................................................65
Cadenas o Strings...........................................................................................................67
Arreglos bidimensionales ................................................................................................69
Ejercicios Parte 4: Arreglos.............................................................................................72
PREGUNTAS DE CERTAMENES DE AÑOS ANTERIORES al 2008, REFERENTES AL
MANEJO DE ARREGLOS, CADENAS Y MATRICES....................................................74
Parte 5: Estructuras ............................................................................................................82
Declaración de Variables de tipo estructura ...................................................................83
Referencia a los elementos de una estructura................................................................83
Arreglos de estructuras ...................................................................................................84
Estructuras en las funciones ...........................................................................................85
Estructuras como parámetros de una función ................................................................85
Ejercicios parte 5: Estructuras ........................................................................................86
Parte 6: Punteros................................................................................................................89
Uso de typedef....................................................................................................................94
Soluciones a ejercicios planteados.....................................................................................95
Página : 4
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
PARTE 0: INTRODUCCIÓN
Conceptos básicos
PROGRAMA
Un programa computacional, en términos simples, consiste en una serie de pasos lógicamente
escritos que permiten resolver un problema determinado, que a partir de datos de entrada obtiene
información útil para la toma de decisiones. Aprender a programar consiste, por un lado, en
conocer las distintas instrucciones que un determinado lenguaje de programación tiene, y más
importante aún, escribir un conjunto de instrucciones en forma lógica para que la ejecución de
estas instrucciones permita dar respuesta al problema planteado. No basta con conocer las
instrucciones existentes, se debe adquirir la lógica que permite utilizarlas con un fin específico.
La siguiente figura simplifica los pasos anteriores, para esto supongamos que queremos construir
un programa que permita resolver la ecuación de primer grado.
Página : 5
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
a≠0
El primer paso es entender que se está pidiendo, esto requiere de la máxima atención, pues de lo
contrario difícilmente el programa escrito responderá al enunciado planteado. Una vez que se
entiende el enunciado se debe poder definir cuales son los datos de entrada del programa y cual
es la información de salida. Además, se debe poder definir algunas restricciones, para este
ejemplo que a debe ser distinto de cero. A continuación se recomienda escribir un algoritmo que
represente una aproximación a la solución final. Posterior a estos pasos se traduce el algoritmo a
un lenguaje de programación determinado.
ALGORITMO
Un algoritmo consiste en un procedimiento detallado, escrito en forma simbólica o con lenguaje
natural, para resolver un problema en pasos y en un tiempo finito. Algunas características de los
algoritmos son:
• el algoritmo lleva desde un estado inicial a un estado final
• se especifican en base a operaciones básicas que controlan las variables y el flujo del
algoritmo
• el algoritmo recibe entradas y entrega salidas
VARIABLES
En todo programa computacional se requiere almacenar temporalmente datos en posiciones
específicas de la memoria del computador. Estos datos pueden ser ingresados por ejemplo desde
teclado (datos de entrada), o ser datos intermedios producto de alguna transformación
(procesamiento) para producir la salida requerida (información). Los lenguajes de programación
utilizan diversos tipos de datos los cuales determinan la cantidad de memoria a ocupar en el
computador. Entre estos datos tenemos:
Página : 6
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Para hacer uso de las posiciones de memoria donde se almacenan los datos se utilizan “etiquetas”
o nombres. La etiqueta o nombre es un nemotécnico que se recomienda que sea significativo para
el dato que se esta almacenando. Por ejemplo:
• si se requiere almacenar la suma de varios valores, conviene bautizar la posición de
memoria con el nombre “suma”,
• si se quiere calcular la ecuación de primer grado, los datos de entrada conviene
almacenarlos en las posiciones con nombre a, b; y el resultado de la evaluación en x.
Recordemos que para resolver un problema, se debe tener claro cuales son los datos de entrada y
salida; además de estos se pueden utilizar datos intermedios necesarios para el procesamiento.
Todos estos datos se deben declarar, al inicio del programa o, como veremos más adelante, al
inicio de cada sección del programa.
Página : 7
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
La forma en que se ejecutan las operaciones básicas en un computador, es similar a lo que ocurre
en nuestro cerebro. Por ejemplo, para sumar dos valores, los pasos básicos son:
• Primero debemos pedirle a alguien que nos diga el primer valor.
• Luego de que conocemos este valor, debemos almacenarlo (para recordarlo después) en
una neurona (Suponemos que un valor se puede almacenar en una neurona).
Ya conocemos el primer valor y está almacenado en nuestro cerebro.
• Ahora debemos pedir el segundo valor.
• Una vez conocido, lo almacenamos en otra neurona distinta de la anterior.
¿Por qué se debe hacer esto?: Si almacenamos el valor en la misma neurona “no
recordaremos” el primer valor a sumar.
• Ahora que conocemos los dos valores procedemos a sumarlos, y dicho resultado lo
almacenamos en otra neurona distinta de las anteriores.
• Por último, le decimos el resultado a la persona que nos entrego los números.
Por lo tanto el algoritmo básico para sumar dos números podría ser el siguiente:
• Algoritmo para sumar dos números:
o Definimos tres neuronas
o Pedimos el primer valor
o Almacenamos ese valor en la neurona 1.
o Pedimos el segundo valor
o Almacenamos ese valor en la neurona 2.
o Almacenamos la suma de las neuronas 1 y 2 en la neurona 3
o Entregamos el resultado que se encuentra en la neurona 3.
Página : 8
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
La manera en que se han detallado los dos algoritmos se llama pseudo-código, el cual fue escrito
en lenguaje natural (nuestro lenguaje, entendible por el ser humano). Otra manera de poder
detallar lo algoritmos, es a través de los diagrama de flujo. Un diagrama de flujo es una
representación simbólica de la lógica del algoritmo.
Variables
Entero var1, x , y Definición de variables Entero var1, x, y
Real a, b Real a, b
Leer
var1,x, y Lectura de mensajes Leer (var1, x, y)
Transformación de datos
a=3*x+ y Operaciones sobre los datos a=3*x+ y
b = a / var1 b = a / var1
Si a > b Entonces
F V Bifurcación en la ejecución Inicio
Si a > b Instrucciones…
de instrucciones
Fin
Sino
Inicio
Conector Instrucciones…
Fin
Como hemos mencionado anteriormente, no basta con saber el significado de cada símbolo,
debemos saber como combinar estos símbolos para producir un algoritmo que resuelva el
problema planteado.
Página : 9
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 0.2: El siguiente algoritmo, escrito utilizando diagrama de flujo permite sumar dos números y
muestra el resultado por pantalla (o monitor)
Inicio En pseudos-código:
Algoritmo Suma
Variables
int var1,var2 ,var3 Entero var1, var2, var3
Inicio
Escribir(“Ingrese el primer valor”)
Leer (var1)
Ingrese el primer valor
Escribir(“Ingrese el segundo valor”)
Leer (var2)
var3=var1+var2
Escribir(“El resultado es:”,var3)
var 1 Fin
Termino
Observación: En los ejemplos de este apartado, incluiremos el código en lenguaje C con el objetivo
de que lo prueben, modifiquen, adapten, corrijan, etc.
Página : 10
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 0.3: Cree un algoritmos donde una persona ingrese su edad y muestre por pantalla
si es mayor de edad.
Entrada: Edad
Salida: Mensaje 1: Usted es mayor de edad
Mensaje 2: Usted es menor de edad (sólo uno de estos mensajes)
Restricciones: Edad no puede ser negativa, ni mayor a 200 (esto no es validado en este
algoritmo).
En pseudos-código:
Algoritmo Edad
Inicio Variables
Entero edad
Inicio
Escribir(“Ingrese su edad:”)
Entero Edad Leer (edad)
Si (edad >= 18) Entonces
Inicio
Escribir(“Usted es mayor de edad”)
Ingrese su edad Fin
Sino
Inicio
Escribir(“Usted es menor de edad”)
Edad Fin
Fin
El lenguaje C:
v #include<stdio.h>
Edad >= 18 Usted es mayor int edad;
de edad main()
{
f printf(“Ingresesu edad:”);
scanf(“%d”,&edad);
Usted es
if (edad >= 18)
menor
{
de edad
printf(“Usted es mayor de edad”);
}
else
Termino {
printf(“Usted es menor de edad”);
}
}
Del ejemplo anterior podemos observar que la bifurcación permite seguir el flujo adecuado dada
una condición. La condición que se evalúan en una bifurcación puede ser verdadera o falsa y
determina el conjunto de instrucciones que se ejecutaran. No siempre es necesario colocar
instrucciones en el caso de que la condición sea falsa, esto dependerá del problema que se este
resolviendo. También es posible que existan bifurcaciones contiguas.
Página : 11
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Recordemos que los operadores lógicos están definidos según el algebra booleana y arrojan un
valor de verdadero o falso según las proposiciones que forman la expresión. La siguiente tabla de
verdad nos muestra las posibles combinaciones que se puede presentar (supongamos que las
proposiciones son P1 y P2).
Además, cada expresión puede estar formada por una o más proposiciones unidas por operadores
lógicos, a estas expresiones les llamaremos expresiones compuestas.
Para determinar la veracidad o falsedad de esta expresión debemos saber el valor de verdad de
cada proposición, la cual puede cambiar en el transcurso del tiempo. La tabla de verdad asociada
a esta expresión se forma a partir de todas las posibles combinaciones:
P1 P2 P3 P1 and P2 (P1 and P2) or P3 Not P3 ((P1 and P2) or P3) and (not P3))
V V V V V F F
V V F V V V V
V F V F V F F
V F F F F V F
F V V F V F F
F V F F F V F
F F V F V F F
F F F F F V F
Hasta ahora los algoritmos descritos son secuenciales, es decir se ejecuta una instrucción, y al
término de ésta se ejecuta la siguiente, excepto cuando existe una bifurcación, en cuyo caso se
podría saltar un grupo de instrucciones dependiendo de la evaluación de la condición. El control de
ejecución es siempre “hacia delante”.
1
Corresponde a la función modulo que entrega el resto de la división entre dos enteros.
Página : 12
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
CONCEPTO DE CICLO
Instrucción a
Instrucción a
Instrucción 2
Instrucción N Instrucción n
Fin
Instrucción b Instrucción b
Ciclo Mientras
La diferencia con el ciclo anterior es que la expresión se evalúa al término de la ejecución del grupo
de instrucciones que se necesitan repetir, tal como lo muestra el esquema siguiente.
2
Si esto no se cumple, es decir la expresión inicialmente es verdadera y no cambia se producira un
ciclo infinito o loop infinito.
Página : 13
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Instrucción a
Instrucción a
do
Instrucción 1 Inicio
Instrucción 1
Instrucción 2
Instrucción 2
Instrucción N
Instrucción n
V Fin
expresión mientras (expresión)
F
Instrucción b Instrucción b
Página : 14
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Instrucción a
Instrucción a
Vc = Vi , Vf /
Condición, Salto Para ( Vc=Vi; Vf / Condición; Salto)
Inicio
Instrucción 1
Instrucción 1 Instrucción 2
Instrucción 2
Instrucción N
Instrucción n
Fin
Instrucción b Instrucción b
Observación: Revisar este algoritmo y realizar un seguimiento. Qué sucede cuando se ingresa un
número negativo. El algoritmo: ¿es una respuesta al enunciado planteado?. Realice las
modificaciones que estime necesarias.
Para un problema pueden existir varias posibles soluciones. Analicemos el siguiente ejemplo:
Construir un programa que permita evaluar la siguiente función para un rango de valores enteros
de x comprendido en el intervalo [a,b].
f(x)= (3x2+5x-2)/125
Se debe mostrar en pantalla el valor de x y f(x).
Entrada: a, b
Salida: f(a), f(a+1), f(a+2)………f(b-2), f(b-1), f(b)
Restricciones: a < b
Página : 16
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Inicio Inicio
Escribir Escribir
“Ingrese los valores de a y b” “Ingrese los valores de ay b”
F V V Si a > b
Si a < b
F
Escribir
“a debe ser menor que b” x=a,x<=b, inc 1
x=a,x<=b, inc 1
fx = (3*x*x+5*x-2) / 125
fx = (3*x*x+5*x-2) / 125
Escribir
x, fx Escribir
x, fx
Fin
Fin
La primera solución muestra un mensaje al usuario indicando que al ingresar un intervalo [a,b],
siempre a debe ser menor que b y se termina el programa, en este caso el usuario deberá ejecutar
nuevamente el algoritmo. La segunda solución valida que el valor de a sea menor que b,
permitiendo ingresar varias veces el valor de a y b, hasta que a sea menor que b. A continuación
se escribe los pseudo-código de ambos diagramas de flujo y sus correspondientes programas en
C.
Página : 17
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Equivalente en lenguaje C
#include<stdio.h> #include<stdio.h>
int a,b,x; int a,b,x;
flota fx; flota fx;
main() main()
{ {
printf(“Ingrese los valores de a y b”); printf(“Ingrese los valores de a y b”);
scanf(“%d”,&a); do
scanf(“%d”,&b); {
if (a<b) scanf(“%d”,&a);
{ scanf(“%d”,&b);
for (x=a;x<=b;x=x+1) }
{ while (a>b)
fx= (3*x*x+5*x-2) / 125; for (x=a;x<=b;x=x+1)
printf(“%d %f”, x,fx); {
} fx= (3*x*x+5*x-2) / 125;
} printf(“%d %f”, x,fx);
else }
{ }
printf(“a debe ser menor que b”)
}
}
Página : 18
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
3. Que muestre en forma ordenada tres número enteros ingresados desde teclado.
5. Que resuelva la ecuación de segundo grado, para valores reales e imaginarios, y muestre el
resultado.
6. Que permita sumar “n” números y muestre el resultado. El valor de “n” debe ser ingresado por
teclado al igual que los números que se sumarán.
7. Que permita el ingreso de 15 números y que cuente cuántos de los números ingresados son
pares.
9. Crear un algoritmo donde el usuario ingrese Crear un algoritmo que reciba a>=0 y b>=0 y que
calcule: a!/((a-b)!b!)
Construya los algoritmos que permitan calcular las siguientes series con un valor de n ingresado
desde teclado
11. 1!+2!+3!+…+N!
14. (1+1)+(2+(1+2))+(3+(1+2+3))+…(N+(1+2+…N))
15. (1!+2!+3!+…+N!)/(1+2+3+…+N)
16. 11+(21+22)+(31+32+33)+…+(N1+N2+…+NN)
17. 11!+(21!+22!)+(31!+32!+33!)+…+(N1!+N2!+…+NN!)
18. 1N+2N-1+3N-2+….+N1
3
No se incluirán las respuestas de este apartado.
Página : 19
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
#include<stdio.h>
main()
{
printf (“Este es mi primer programa en C”);
getchar();
Este programa debe ser compilado para su ejecución. El proceso de compilación, en términos
simples, corresponde a la traducción del programa “fuente” a su equivalente en lenguaje “objeto” o
lenguaje de “máquina”. El compilador realiza un análisis sintáctico del programa.
Ejemplo 1.1
En pantalla :
#include<stdio.h> Hola mundo.
main()
{
printf(“hola mundo.”);
}
FUNCIÓN PRINTF()
La función printf( ), consta de dos partes : cadena de control y una lista de argumentos. En el
siguiente ejemplo veremos como se utiliza los caracteres de control.
Página : 20
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 1.2 : En este ejemplo se muestran las diferentes cadenas de control para la
función printf
#include<stdio.h>
main()
{
printf(“Ahora utilizaremos los caracteres de control\n”);
printf(“El siguiente carácter salta a una nueva línea. \n”);
printf(“ \t El carácter utilizado es un tabulador. \n”);
printf(“ \“ Esta frase esta entre comillas. \” \n”);
printf(“ El siguiente carácter representa retorno de carro : \r \n”);
printf(“ \‘ Esta frase esta entre apóstrofes. \’ \n”);
printf(“ \\ Esta frase esta entre barras invertidas \\ \n”);
printf(“Los siguientes caracteres representan retrocesos :\b\b\b\b\b\b \n”);
}
COMENTARIOS
Los comentarios son una lista de caracteres desconocidos por el compilador, que tienen como
objetivo fundamental el hacer referencias, documentación o acotaciones a líneas de códigos o al
programa general, la forma de utilizarlos es:
/* Este es un comentario, el cual generalmente involucra 2 o más lineas de código */
// Este es otro comentario que involucra 1 sola línea de comentario
Página : 21
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
getchar();
}
En el ejemplo anterior podemos ver los caracteres de control %d, %f, %c y %s, los cuales
aparecen dentro de los printf. Estos son utilizados para imprimir variables de acuerdo al tipo de
dato que dichas variables almacenan.
Otro ejemplo, donde podemos utilizar las opciones de visualización de las variables, es el siguiente
Ejemplo 1.4
#include<stdio.h> Se imprimirá lo siguiente en pantalla :
main()
{ El valor de i es : 56.111111
float i=56.111111111; El valor de i es : 56.111111
printf(“El valor de i es : %f \n”,i); El valor de i es : 56.111111
printf(“El valor de i es : %5f \n”,i); El valor de i es : 56.1
printf(“El valor de i es : %15f \n”,i); El valor de i es : 56.11111
printf(“El valor de i es : %.1f \n”,i); El valor de i es : 56
printf(“El valor de i es : %.5f \n”,i); El valor de i es : 5.61111e+01
printf(“El valor de i es : %.0f \n”,i);
printf(“El valor de i es : %e \n”,i);
getchar();
}
#include<stdio.h>
main()
{
printf(“Estos han sido unos \”EXCELENTES EJEMPLOS\” \n”);
printf(“ \t \b\b\b\b\b *** \n”);
printf(“ *** “);
printf(“ *** “);
printf(“ *** “);
printf(“ \t \b\b\b\b\b *** \n”);
}
***
*** *** ***
***
Página : 22
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 1.6: Aquí se muestra que es posible realizar las Esto imprimirá :
operaciones matemáticas básicas dentro del printf.
#include<stdio.h> La suma de la variable a+b es : 7.
main()
{
int a, b;
a=3; b=4;
printf(“La suma de la variable a+b es : %d. \n”, a+b);
}
Función scanf()
Ejemplo 1.7: La función scanf también utiliza caracteres para los distintos tipos de datos. Obsere
que son los mismos caracteres que utiliza la función printf.
#include<stdio.h>
#include<conio.h> //librería que contiene la función clrscr( ).
main()
{
int a,b;
printf(“Ingrese el primer valor a sumar\n”);
scanf(“ %d”, &a);
printf(“Ingrese el segundo valor a suma \n”);
scanf(“ %d”, &b);
printf(“El resultado de a+b es : %d \n”, a+b);
getchar();
}
En este ejemplo es posible notar que a las variables a y b en la función scanf se le antepone el
signo &. El signo & es utilizado por el compilador para guardar los valores que se le asignan a las
variables en las correspondientes direcciones de memoria de dichas variables. Por lo tanto, cada
vez que utilizamos scanf, las variables deberán llevar el & en el argumento de la función (osea
después de la coma). Como en el ejemplo, scanf(“ %d”, &a);
Ejemplo 1.8 Aquí se muestra que también es posible ingresar varios datos a la vez con la función
scanf.
#include<stdio.h>
#include<conio.h>
main()
{
int a;
float b;
char c;
printf(“Ingrese un entero, luego un flotante y por último un carácter \n”);
printf(“ todos separados por un espacio \n”);
scanf(“%d %f %c”, &a,&b,&c);
printf(Los valores ingresados fueron : %d, %f, %c \n”, a,b,c);
}
Página : 23
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
DEFINE
El uso de define, se utiliza para declarar variables con un valor fijo (también denominada
constante), el cual puede ser utilizado en el resto del programa. Las líneas de control con #define
se pueden presentar de varias formas. Por ejemplo:
En este ejemplo, el valor (60 * 60 * 24) reemplazará a SEGUNDOS_AL_DIA por ese string todas
las veces que aparezca en el resto del archivo. Un error frecuente es terminar una línea #define
con un punto y coma, lo cual la convierte en parte de la cadena de reemplazo, cuando esto no es lo
que se desea. Los #define sencillos tienen varios usos importantes que mejoran la claridad y la
transportabilidad de los programas. Por ejemplo, para constantes especiales :
#define PI 3.14159
#define E 2.71828 /* exponencial */
#define C 299792.4562 /*velocidad de la luz en km/seg*/
Ejemplo 1.9: Ingresar el valor del radio para calcular el área de una circunferencia.
#include<stdio.h>
#include<conio.h>
#define PI 3.1415 // se define una constante simbólica.
main()
{
float radio;
printf(“Ingrese el radio \n”);
scanf(“%f”,&radio);
printf(“El área del círculo es : %f \n”, PI * radio * radio);
getchar();
}
El programa del ejemplo calculará el área del círculo, reemplazando PI, por el valor flotante 3.1415
INCREMENTO Y DECREMENTO
El operador de incremento es : ++
El operador de decremento es: --
Página : 24
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
De lo anterior nos podemos dar cuenta que existe un orden de precedencia de los operadores de
incremento y decremento, es decir, no entregan el mismo resultado al colocarlos antes o después
de las variables que se incrementan o decrementan.
OPERADORES
Como mencionamos previamente, existe una diferencia entre : ++i; y i++; al momento de utilizar
otros operadores de incremento y decremento.
Página : 25
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
EJERCICIOS
Página : 26
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Página : 27
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Las estructuras de control permiten “romper” el orden lineal de ejecución de las instrucciones (una
a continuación de la otra), permitiendo bifurcar en dos o más caminos la ejecución de las
instrucciones, o repetir un número conocido o desconocido de veces un conjunto de instrucciones.
En estas estructuras se utilizan (expresiones) formadas por operadores relacionales y operadores
lógicos.
LA ESTRUCTURA DE CONTROL IF
Sintaxis :
if (expresión)
sentencia V // se ejecutan estas sentencias si evaluación de la expresión es verdadera
else
sentencia F // se ejecutan estas instrucciones si la evaluación de la expresión es falsa
donde:
Entrada: a y b
Salida : a/b
Restricciones: b ≠ 0
#include<stdio.h>
void main()
{
float a,b;
printf(“Ingrese el primer valor \n”);
scanf(“%f”,&a);
printf(“Ingrese el segundo valor \n”);
scanf(“%f”,&b);
if(b!=0)
printf(“El resultado es %f \n”,a/b);
else
print(“El resultado no existe \n”);
Página : 28
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
En este ejemplo comenzamos a utilizar la proposición if. Dentro de esta proposición nos
encontramos con el operador lógico distinto !=, ya que como sabemos cualquier número dividido
por cero es indeterminado. Resumiendo, si el divisor es distinto de cero, se hará la división, en
caso contrario desplegará el mensaje “El resultado no existe”.
Ejemplo 2.2 Aquí se muestra un ejemplo donde se calcula el sueldo líquido de una persona.
Sin embargo, si la persona es de la I o XII región, esta recibe el 35% de su sueldo por zona. Es
posible apreciar que no es necesario la sentencia else, es decir con la sentencia if se modifica
lo necesario y se sigue el curso normal del programa.
Entrada: Sueldo Bruto
Salida : Sueldo Liquido
Restricciones: no tiene
#include<stdio.h>
main()
{
float sueldoB,AFP,ISAPRE;
int region;
printf(“Ingrese su sueldo Bruto \n”);
scanf(“%f”,&sueldoB);
printf(“Ingrese la region donde trabaja \n”);
scanf(“%d”,®ion);
if (region==1 || region==12) // si la persona pertenece a la primera ó duodécima
sueldoB=sueldoB*1.35; // región se le aumenta un 35% de su sueldo bruto
AFP= sueldoB*0.07; // se calcula el 7% de la AFP
ISAPRE=sueldoB*0.11; // se calcula el 11% de la Isapre
printf(“ El sueldo líquido es de: %f \n”, sueldoB-AFP-ISAPRE);
}
Página : 29
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 2.4 En este ejemplo se ingresan tres números y se muestra el mayor, para ello se utiliza
la sentencia if-else anidadas.
Entrada: a,b,c
Salida : se imprime el mayor
Restricciones: no tiene
#include<stdio.h>
main()
{
int a,b,c;
printf(“Ingrese el primer número \n”);
scanf(“%d”, &a);
printf(“Ingrese el segundo número \n”);
scanf(“%d”, &b);
printf(“Ingrese el tercer número \n”);
scanf(“%d”, &c);
if(a>b)
if(a>c)
printf(“El número mayor es %d \n”,a);
else
printf(“El número mayor es %d \n”,c);
else if(b>c)
printf(“El número mayor es %d \n”,b);
else
printf(“El número mayor es %d \n”,c);
}
Ejemplo 2.5 En este ejemplo se ingresan tres números y se muestra el mayor, para ello se utiliza
la sentencia if –else anidados, en conjunto con el operador lógico y ( &&).
Entrada: a,b,c
Salida : se imprime el mayor
Restricciones: no tiene
#include<stdio.h>
main()
{
int a,b,c;
printf(“Ingrese el primer número \n”);
scanf(“%d”, &a);
printf(“Ingrese el segundo número \n”);
scanf(“%d”, &b);
printf(“Ingrese el tercer número \n”);
scanf(“%d”, &c);
if(a>b && a>c)
printf(“El numero mayor es %d \n”,a);
else if(b>c)
printf(“El número mayor es %d \n”,b);
else
printf(“El número mayor es %d \n”,c);
getchar();
Página : 30
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 2.6 En este ejemplo se ingresa un número entero y se muestra el valor absoluto de dicho
número.
Entrada: x
Salida : Valor absoluto de x
Restricciones:no tiene
#include<stdio.h>
main()
{
int x;
printf(“Ingrese un número \n”);
scanf(“%d”, &x);
if(x>0)
printf(“El valor absoluto de %d es %d \n”,x,x);
else
printf(“El valor absoluto de %d es %d \n”,x,(-1*x));
getchar();
}
Ejemplo 2.7 En este ejemplo se ingresan tres números y de ellos se muestran el mayor y menor
de los tres.
Entrada: a,b,c
Salida : se imprime el mayor y el menor
Restricciones: no tiene
#include<stdio.h>
main()
{
int a,b,c,min,max;
printf(“Ingrese el primer número \n”);
scanf(“%d”, &a);
printf(“Ingrese el segundo número \n”);
scanf(“%d”, &b);
printf(“Ingrese el tercer número \n”);
scanf(“%d”, &c);
if(a>b && a>c)
max=a;
else if(b>c)
max=b;
else
max=c;
if(a<b && a<c)
min=a;
else if(b<c)
min=b;
else
min=c;
printf(“El número mayor es %d y el menor es %d ºn”, max,min);
}
Página : 31
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 2.8 Este ejemplo al igual que el anterior, se ingresan tres números y se muestran el
mayor y el menor.
Entrada: a,b,c
Salida : se imprime el mayor y el menor
Restricciones: no tiene
#include<stdio.h>
main()
{
int a,b,c,min,max;
printf(“Ingrese el primer número \n”);
scanf(“%d”, &a);
printf(“Ingrese el segundo número \n”);
scanf(“%d”, &b);
printf(“Ingrese el tercer número \n”);
scanf(“%d”, &c);
if(a>b && a>c)
{
max=a;
if(b>c)
min=c;
else
min=b;
}
else if(b>c)
{
max=b;
if(c>a)
min=a;
else
min=c;
}
else
{
max=c;
if(b>a)
min=a;
else
min=b;
}
printf(“El número mayor es %d y el menor es %d ºn”, max,min);
}
Página : 32
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 2.9 Este ejemplo muestra la solución para la ecuación cuadrática. Aquí se utiliza la librería
math.h, la cual contiene la función sqrt. La función sqrt calcula la raíz cuadrada de un valor.
Entrada: a,b,c
Salida : x1 y x2 (las soluciones de la ecuación)
Restricciones: a ≠ 0
b2-4ac ≥ 0
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c,dis;
float x1,x2;
printf(“Ingrese a \n”);
scanf(“%f”, &a);
printf(“Ingrese b \n”);
scanf(“%f”, &b);
printf(“Ingrese c \n”);
scanf(“%f”, &c);
dis=b*b-4*a*c; // aquí se calcula el discriminante
if(dis<0 || a ==0) // si el discriminante es menor que cero, entonces se trata de complejos
printf(“No se puede calcular \n”);
else {
x1= (-b+sqrt(dis))/(2*a);
x2= (-b-sqrt(dis))/(2*a);
printf(“El valor x1 y x2 son : %d, %d \n”,x1,x2);
}
}
Ejemplo 2.10 En este ejemplo se ingresan valores númericos del 0 al 9. Y dicho valor es
desplegado de manera textual. Aquí se utilizan varios if-else anidados.
Entrada : x
Salida : x escrito en palabra
Restricciones: 0 ≤ x ≤ 9
#include<stdio.h>
void main()
{
int valor;
printf(“Ingrese un número del 0-9 \n”);
scanf(“%d”,&valor);
if(valor >=0 && valor <=9)
if(valor==1)
printf(“El número ingresado es el uno \n”);
else if(valor==2)
printf(“El número ingresado es el dos \n”);
else if(valor==3)
printf(“El número ingresado es el tres \n”);
else if(valor==4)
printf(“El número ingresado es el cuatro \n”);
else if(valor==5)
printf(“El número ingresado es el cinco \n”);
Página : 33
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
else if(valor==6)
printf(“El número ingresado es el seis \n”);
else if(valor==7)
printf(“El número ingresado es el siete \n”);
else if(valor==8)
printf(“El número ingresado es el ocho \n”);
else
printf(“El número ingresado es el nueve \n”);
else
printf(“El valor ingresado esta fuera del rango \n”);
}
PROPOSICIÓN SWITCH
Obsérvese que la proposición switch está encerrada entre llaves. Después de evaluar la
expresión, el control salta a la etiqueta apropiada (al correspondiente case). Todos los case
son exclusivos, es decir reflejan un caso particular. Por lo común, la última proposición antes
de la siguiente case es break. Con este break nos aseguramos que la ejecución del caso
termine allí. Si no hay una proposición break, la ejecución hasta el siguiente case que sigue. La
ausencia de proposiciones break es una causa frecuente de error en el uso de switch. Por
último, puede haber una proposición etiquetada default. Esto indica que si la evaluación de
switch no coincide con ninguna etiqueta, entonces toma en cuenta el default.
Página : 34
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 2.11: Crear un programa donde el usuario pueda ingresar dos valores y opta por
sumar, restar, dividir ó multiplicar dichos valores, utilizando switch.
#include<stidio.h>
void main()
{
float a,b,c;
int opcion,div0=0;
printf("Ingrese a \n");
scanf("%f",&a);
printf(" Ingrese b \n";
scanf("%f",&b);
printf("Ingrese 1 suma, 2 resta, 3 división ó 4 multiplicación \n");
scanf("%d",&opcion);
if(b==0.0 && opcion==3)
opcion=5;
switch(opcion)
{
case 1 : c=a+b;
break;
case 2: c=a-b;
break;
case 3: c=a/b;
break;
case 4: c=a*b;
break;
case 5 : div0=1;
break;
default: div0=-1;
}
if(div0 == 1)
printf("Division por cero no se puede calcular \n");
else if(div0==-1)
printf("Ingreso una opcion no valida \n");
else
printf(" El resultado es : %f \n",c);
getchar();
}
Notar que los valores adjuntos al lado derecho de los case de este ejemplo, van sin ‘ ‘. Esto
porque los valores que se están evaluando corresponde a enteros y no a caracteres.
Página : 35
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 2.12 Crear un programa donde el usuario pueda ingresar dos valores y opta por sumar,
restar, dividir ó multiplicar dichos valores, utilizando switch. Pero a diferencia del ejemplo anterior,
aquí se utiliza una variable denominada bandera, la cual nos indica si es posible mostrar el
resultado (en el caso de una división por cero, esto no es posible).
#include<stidio.h>
main()
{
float a,b,c,
int opcion,bandera=1;
printf("Ingrese a \n");
scanf("%d",&a);
printf(" Ingrese b \n";
scanf("%d",&b);
printf("Ingrese 1 suma, 2 resta, 3 división ó 4 multiplicación \n");
scanf("%d",&opcion);
switch(opcion)
{
case 1 : c=a+b;
break;
case 2: c=a-b;
break;
case 3: if(b!=0.0)
c=a/b;
else bandera=-1;
break;
case 4: c=a*b;
break;
default: bandera=0;
}
if(bandera==1)
printf(" El resultado es : %d \n",c);
else if(bandera==0)
printf("Ingreso una opción no valida \n");
else
printf("No se puede dividir por 0 \n");
}
Página : 36
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 2.13: Crear un programa donde el usuario ingrese un número del 1 al 9, y se muestre en
pantalla el texto asociado al número, pero utilizando la proposición switch.
Entrada : x
Salida : x escrito en palabra
Restricciones: 0 ≤ x ≤ 9
#include<stdio.h>
main()
{
int valor;
printf(“Ingrese un número del 0-9 \n”);
scanf(“%d”,&valor);
switch(valor)
{
case 1 : printf(“El número ingresado es el uno \n”);
break;
case 2: printf(“El número ingresado es el dos \n”);
break;
case 3: printf(“El número ingresado es el tres \n”);
break;
case 4: printf(“El número ingresado es el cuatro \n”);
break;
case 5: printf(“El número ingresado es el cinco\n”);
break;
case 6: printf(“El número ingresado es el seis\n”);
break;
case 7: printf(“El número ingresado es el siete \n”);
break;
case 8: printf(“El número ingresado es el ocho \n”);
break;
case 9: printf(“El número ingresado es el nueve \n”);
break;
default: printf("Ha ingresado un valor no válido \n");
}
getchar();
}
Página : 37
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 2.13: Crear un programa donde el usuario pueda ingresar dos valores y optar por sumar,
restar, dividir ó multiplicar dichos valores utilizando switch. A diferencia de los ejemplos anteriores,
aquí seleccionamos la operación con caracteres.
Entrada : x1,x2, opción
Salida : Mensaje 1: x1 opción x2
Mensaje 2: No se puede dividir por cero (en caso que se quiera dividir dos números)
Restricciones: Si se divide, x2 no puede ser cero
No se puede ingresar una opción distinta a las ofrecidas
#include<stidio.h>
main()
{
float a,b,c,
char opcion;
int bandera=1;
printf("Ingrese a \n");
scanf("%f",&a);
printf(" Ingrese b \n")
scanf("%f",&b);
printf("Ingrese S suma, R resta, D división ó M multiplicación \n");
scanf("%c",&opcion);
switch(opcion)
{
case 'S' : c=a+b;
break;
case 'R': c=a-b;
break;
case 'D': if(b!=0.0)
c=a/b;
else bandera=-1;
break;
case 'M': c=a*b;
break;
default: bandera=0;
}
if(bandera==1)
printf(" El resultado es : %d \n",c);
else if(bandera==-1)
printf("No se puede calcular la division \n");
else
printf("Ingreso una opción no váida \n");
}
PROPOSICIÓN WHILE
while (expresión)
proposición(es) a repetir
proposición que no se repite
Página : 38
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 2.14: Crear un programa que calcule el factorial de un número que sea un entero mayor
o igual que cero.
Entrada : x
Salida : 1*2*3*4*5…..*x (si x>0)
1 (si x=0)
Restricciones: x ≥ 0
#include<stdio.h>
main()
{
int contador,numero,fact=1;
printf(“Ingrese el número para calcular el factorial \”);
scanf(“%d”,&numero);
if(numero >0)
{ contador=numero ;
while(contador)
{ fact=fact*contador;
contador--;
}
printf(“El factorial de %d es %d \n”,numero,contador);
}
else if(numero==0)
printf(“El factorial de 0 es 1 \n”);
else
printf(“los factoriales de números negativos no existen \n”);
}
Página : 39
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
}
Ejemplo 2.15: Crear un programa que resuelva lo siguiente:
1+2+3+4+5+6+7+8+...+n
Entrada : n
Salida : 1+2+3+4+5+…..+(n-1)+n
Restricciones: n > 0
#include<stdio.h>
main()
{
int contador,n,suma;
printf(“Ingrese el número para calcular la sumatoria \n”);
scanf(“%d”,&n);
if(n>0)
{
for(contador=1,suma=0;contador<=n ; contador++)
suma=suma+contador;
printf(“El resultado de la sumatoria es %d \n”,suma);
}
else
printf(“El número que ingreso es incorrecto\n”);
getchar();
}
Ejemplo 2.15: Cree un programa que calcule ab, donde a >0 y b>0
Entrada : a,b
Salida : ab
Restricciones: a>0 y b>0
#include<stdio.h>
main()
{
int contador,a,b,pot;
printf(“Ingrese la base\n”);
scanf(“%d”,&a);
printf(“Ingrese el exponente \n”);
scanf(“%d”,&b);
if(a>0 && b>0)
{
contador=1:
pot=1;
while(contador<=b)
{
pot=pot*a;
contador=contador+1;
}
printf(“El resultado de %d elevado a %d es %d \n”,a,b,pot);
}
else
printf(“Hay un número que no es mayor que 0 \n”);
getchar();
}
Nota: modificar este programa para que a y b acepte cualquier valor entero (positivo, negativo o
cero).
Página : 40
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
8.- Crear un programa donde se ingresen 15 números y contar cuantos son pares.
#include<stdio.h>
main()
{
int valor,contpares=0,i;
i=50000;
while(i);
i--;
printf(“ Fin del programa \n”);
}
#include<stdio.h>
main()
{
int i;
i=1;
while(i)
printf(“ El valor de i es : %d\n",i);
i++;
}
Página : 41
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
PROPOSICIÓN FOR
Sintaxis:
Primero se evalúa expresión1 (lo usual es que expresión1 inicie el ciclo); después, se evalúa
expresión2, si la expresión 2 es verdadera (o posee un valor distinto de 0) entonces se ejecuta la
proposición verdadera o el conjunto de expresiones verdaderas. Note que el conjunto de
expresiones verdaderas está compuesto por más de una expresión verdadera y por lo tanto debe
de llevar las llaves { }. Posterior al ejecutar la proposición o proposiciones verdades, entonces se
ejecuta la expresión 3, la cual generalmente aumenta o disminuye la variable, o variables que
condicionan el ciclo. Posteriormente se vuelve a evaluar la expresión2, si esto es verdadero se
vuelve a ejecutar la proposición o conjunto de proposiciones verdaderas, donde posteriormente se
evalua la expresión3. Note que la expresión1, sólo se ejecuta la primera vez, luego la expresión2 y
expresión3 se peueden ejecutar muchas veces mientras la expresión 2 sea verdadera.
Finalmente, si la expresión2 es falsa (o posee un valor 0), entonces se ejecuta la
proposición siguiente.
Ejemplo 2.16 Este ejemplo imprime valores desde 1 al 15, utilizando el ciclo for
#include<stdio.h>
#define STOP 15
main()
{
int i;
for(i=1;i<=STOP;i++)
printf(“El valor de i es:%d\n”,i);
getchar();
}
Página : 42
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 2.17: Crear un programa que calcule el factorial de un número que sea un entero
mayor que cero.
Entrada : x
Salida : 1*2*3*4*5…..*x (si x>0)
1 (si x=0)
Restricciones: x ≥ 0
#include<stdio.h>
main()
{
int contador,numero,fact=1;
printf(“Ingrese el número para calcular el factorial \n”);
scanf(“%d”,&numero);
if (numero >0)
{
for( contador=numero ; contador ; contador--)
fact=fact*contador;
printf(“El factorial de %d es %d \n”,numero,fact);
}
else if (numero==0)
printf(“El factorial de 0 es 1 \n”);
else
printf(“los factoriales de números negativos no existen \n”);
}
Página : 43
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 2.19: Cree un programa que calcule ab, donde a >0 y b>0
Entrada : a,b
Salida : ab
Restricciones: a>0 y b>0
#include<stdio.h>
main()
{
int i,a,b,pot;
printf(“Ingrese la base\n”);
scanf(“%d”,&a);
printf(“Ingrese el exponente \n”);
scanf(“%d”,&b);
if(a>0 && b>0)
{
for(i=pot=1; i<=b; i++)
pot=pot*a;
printf(“El resultado de %d elevado a %d es %d \n”,a,b,pot);
}
else
printf(“Hay un número que no es mayor que 0 \n”);
}
#include<stdio.h>
void main()
{
int contador,N,b,pot;
printf(“Ingrese N\n”);
scanf(“%d”,&N);
if(N>0 )
{
for(i=1;i<=N;i++)
{ for(j=pot=1; j<=i ; j++)
pot=pot*a;
suma=suma+pot;
}
printf(“El resultado es. %d \N”,suma);
}
else
printf(“el número ingresado no es mayor que 0 \n”);
}
Página : 44
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
n i
∑ ∑ ( (2*i)/j )
i=1 j=1
22. Crear un programa donde se ingresen 50 números, muestre el mayor, menor, y cuantos de
ellos son múltiplos de 5.
Página : 45
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
PROPOSICIÓN DO WHILE
Este es un ciclo como los anteriores, pero la principal diferencia es que este se ejecuta al
menos una vez.
Sintaxis:
do
{
sentencia_1;
sentencia_2;
:
sentencia_N;
}
while(proposicion);
Ejemplo 2.21: Crear un programa donde el usuario ingrese 2 números y pueda ejecutar
cualquiera de las operaciones basicas. Si se desea salir se debe ingresar 0.
Entrada : x1,x2, opción
Salida : Mensaje 1: x1 opción x2
Mensaje 2: No se puede dividir por cero (en caso que se quiera dividir dos números)
Restricciones: Si se divide, x2 no puede ser cero
No se puede ingresar una opción distinta a las ofrecidas
#include<stdio.h>
main()
{
float a,b,c;
int opcion;
do
{
printf("Ingrese el Primer Valor \n");
scanf("%f",&a);
printf("Ingrese el segundo Valor \n");
scanf("%f",&b);
printf("Ingrese 1:sumar, 2:restar ,3:dividir,4:mutiplicar \n") ;
scanf("%d",&opcion);
if (b!=0.0 && opcion==3) opcion=5;
switch(opcion)
{
case 1: printf("El resultado es : %f \n",a+b);
break;
case 2: printf("El resultado es : %f \n",a-b);
break;
case 3: printf("El resultado es : %f \n",a/b);
break;
case 4: printf("El resultado es : %f \n",a*b);
break;
case 5: printf("No se puede dividir por cero \n");
break;
default: printf(" Ha ingresado un valor no válido \n");
}
printf("Ingrese 0 para terminar y cualquier número para continuar \n");
scanf("%d",&opcion);
}
Página : 46
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
while(opcion);
}
Evalúe los valores de verdad (es decir, si el resultado es verdadero o falso) tanto al interior
de cada paréntesis, como en la expresión completa, con los valores de variable indicados en
los casos a) y b) abajo expuestos. Las variables son de tipo entero (5 puntos cada caso).
Casos:
a) k=3, j=4, i=4
b) k=3 , j=7, i=3
Dado los siguientes algoritmos, obtenga los valores de las variables que aparecen en la tabla en
cada iteración, para un valor inicial de N=6 (25 puntos el ejercicio completo).
ALGORITMO uno
{
int i,stop=1,cont,N
printf “Ingrese N”
scanf N
}
}
Página : 47
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Dado los siguientes algoritmos, obtenga los valores de las variables que aparecen en la tabla en
cada iteración, para un valor inicial de N=3
Imprimir(“Ingrese N”) 3
Leer(N)
if(N>0)
{
suma1=0
for(i=1; i<=N ;i=i+1)
{
suma2=0
j=1
while (j<=i)
{
suma2=suma2+j
j=j+1
}
suma1=suma1+i+suma2
}
Imprimir(suma1)
}
else {
Imprimir(“Error”)
}
}
Analice el siguiente algoritmo, haga el seguimiento por lo menos para N=4 en la tabla indicando
que es lo que imprime, y explique qué es lo que realiza para un valor N dado .
Página : 48
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
PCP 2.- Dado los siguientes algoritmos, obtenga los valores de las
variables que aparecen en la tabla en cada iteración.
a)
b)
int i,j,k,N N i j k printf
printf “Ingrese N” 1
scanf N
for(i=1;i<=N; i=i+1)
for(j=1; j<= 2*N ;j=j+1)
for(k=j;k>=0 ;k=k-1)
if( k> j/2)
printf “0”
else printf “1”
Considere la sumatoria:
(1+1)+(2+(1+2))+(3+(1+2+3))+…(N+(1+2+…N))
Cree un algoritmo para obtener dicho cálculo, tanto en diagrama de flujo como en seudo-código
Página : 49
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
#include <stdio.h>
int main(){
int n,i;
printf("Ingrese un número\n");
scanf("%d",&n);
i=0;
while (n>1){
if ((n%2)==0)
n=n/2;
else
n=n*3+1;
i++;
}
printf("\n\n%d",i);
return (0);
}
Si el usuario ingresa el valor 10, el resultado mostrado en pantalla por el programa es:
a) b) c) d) e)
1 5 10 11 Ninguno de los
anteriores
i = 0;
while (i < 29)
{
if (i == 29) printf(“%d”, i);
i++;
}
Página : 50
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
se deduce que
Para un caso general, este resultado es intuitivamente obvio. Se tarda más tiempo en
resolver un problema difícil.
Se ha encontrado otra propiedad interesante, a partir de la experimentación sobre la
resolución humana de problemas. Se trata de lo siguiente:
Por consiguiente deberemos considerar las funciones como "CAJAS NEGRAS", las
cuales se encargaran de ejecutar una tarea específica.
Por lo tanto deberemos concentrarnos en el "Diseño Global de programa" en lugar de los
detalles.
Cuerpo de la Función
Página : 51
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
ó también:
return(variable ó valor);
}
return(variable ó valor): Corresponde al valor que retornará dicha función donde halla
sido llamada, es importante destacar que una variable ó valor único. Más adelante veremos como
retornar variables que tengan asociados más de un valor, por lo que por el momento sólo nos
quedaremos con la proposición inicial.
Algunas veces no necesitaremos que las funciones nos retornen un valor, por lo que
podremos omitir esta sentencia.
Página : 52
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 3.1 Crear un programa utilizando funciones donde se sumen dos números. En este
programa existen variables globales (x e y) y variables locales (result en el cuerpo del programa
principal; y las variables a y b en la función suma. Las variables locales sólo tienen existencia
durante la ejecución de la respectiva función. Pueden existir variables locales con el mismo
nombre en distintas funciones las cuales estarán haciendo referencia a posiciones distintas de
memoria.
Entrada: x,y
Salida: x+y
Restricciones: No tiene
#include<stdio.h>
int suma(int a,int b); // Todas las funciones se declaran antes que el main(), para que
// puedan ser reconocidas por el compilador y utilizadas en cualquier
// parte del programa
int x,y;
main()
{
int result;
printf("Ingrese el primer valor \n");
scanf("%d",&x);
printf("Ingrese el segundo valor \n");
scanf("%d",&y);
result=suma(x,y); //se ingresan las variables adecuadas como parámetros y el
//valor devuelto por la función es asignada a la variable result.
printf("El resultado es : %d \n",result);
}
Ejemplo 3.2: Una forma distinta para el problema anterior está dado por el siguiente programa.
Note que en la función suma, las variables a,b no han sido declaradas porque son argumentos
(declaración implícita por los argumentos), sólo se trabajan con ellos.
Entrada: a,b
Salida: a+b
Restricciones: No tiene
#include<stdio.h>
int suma(int a,int b);
main()
{
int a,b,result;
printf("Ingrese el primer valor \n");
scanf("%d",&a);
printf("Ingrese el segundo valor \n");
scanf("%d",&b);
result=suma(a,b);
Página : 53
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Ejemplo 3.3: En este ejemplo, la función imprimir_valores no retorna ninguna valor, por lo que es
denominada de tipo void.
Entrada: a,b
Salida: a+b
Restricciones: No tiene
#include<stdio.h>
void imprimir_valores(int suma);
main()
{
int a,b,result;
printf("Ingrese el primer valor \n");
scanf("%d",&a);
printf("Ingrese el segundo valor \n");
scanf("%d",&b);
result=a+b
imprimir_valores(result); // En este caso no se asigna a ninguna variable puesto que no retorna un valor.
}
Ejemplo 3.4: Crear una función que entregue el número mayor de dos números.
Entrada: valor1,valor2
Salida: Si valor1 es >valor 2 imprime: valor1
Sino imprime valor2
Restricciones: No tiene
#include<stdio.h>
int mayor(int a,int b);
main()
{
int valor1,valor2;
printf("Ingrese un número \n");
scanf("%d",&valor1);
printf("Ingrese un segundo valor \n");
scanf("%d",&valor2);
printf("El número mayor es %d \n",mayor(valor1,valor2));
}
Página : 54
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Entrada: valor1,valor2
Salida: Si valor1 es >valor 2 imprime: valor1
Sino imprime valor2
Restricciones: No tiene
#include<stdio.h>
void mayor(int a,int b);
main()
{
int valor1,valor2;
printf("Ingrese un número \n");
scanf("%d",&valor1);
printf("Ingrese un segundo valor \n");
scanf("%d",&valor2);
mayor(valor1,valor2);
}
Ejemplo 3.6: Crear un programa que calcule la suma, resta, multiplicación o división según
selección del usuario, utilizando funciones.
Entrada: a,b,opcion
Salida: a+b, o a-b, o a*b, o a/b
Restricciones: Si la opción es división b debe de ser distinto de 0
#include<stdio.h>
float suma(float a,float b);
float resta(float a,float b);
float mutltiplicacion(float a,float b);
float division(float a,float b);
main()
{
int bandera=1,opcion;
float a,b;
Página : 55
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
printf("Ingrese a \n");
scanf("%f",&a);
printf("Ingrese b \n");
scanf("%f",&b);
printf("Ingrese 1 para sumar o,2 resta, 3 mutiplicación,4 division \n");
scanf("%d",&opcion);
if(opcion==3 && b==0.0)
opcion=5;
switch(opcion)
{
case 1 : c=suma(a,b);
break;
case 2: c=resta(a,b);
break;
case 3: c=multiplicacion(a,b);
break;
case 4: c=division(a,b);
break;
case 5: bandera=-1;
break;
default: bandera=0;
}
if(bandera==1)
printf(" El resultado es : %d \n",c);
else if(bandera==0)
printf("Ingreso una opción no válida \n");
else printf("No se puede calcular \n");
}
Página : 56
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Entrada: a,b
Salida: ab
Restricciones: No tiene
#include<stdio.h>
float potencia(int base, int exp);
main( )
{
int a,b;
float pot;
printf("Ingrese el valor de la base \n");
scanf("%d",&a);
printf("Ingrese el valor del exponente \n");
scanf("%d",&b);
pot=potencia(a,b);
printf("El resultado es: %f \n",pot);
}
N
Ejemplo 3.8: Crear un programa, sólo definiendo las funciones que calcule: ∑ (ii/i!)
i=1
Note que se utiliza (float)pot , el cual se conoce con el nombre de cast. Los cast se utilizan para
cambiar el tipo de dato de una variable, en este caso especifico cambiamos la variable pot de tipo
de entero por tipo flotante.
Entrada: N
Salida: sumatoria desde 1 hasta N de ii/i!
Restricciones: N>0
#include<stdio.h>
int potencia(int base, int exp);
int factorial(int valor);
Página : 57
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
main( )
{
int i,fact,pot,N;
float suma=0;
printf("Ingrese N \n");
scanf("%d",&N);
if(N>0)
{
for(i=1;i <=N ; i++)
{
pot=potencia(i,i);
fact=factorial(i);
suma=suma+(((float)pot) / ((float)fact));
}
printf("El resultado es : %f \n",suma);
}
else printf("Ha ingresado un valor no valido \n");
}
Entrada: N
Salida: sumatoria desde 1 hasta N de (i+j)i / (i+1)!
Restricciones: N>0
#include<stdio.h>
float potencia(int a,int b);
float factorial(int valor);
main()
{
int i,j,N;
float suma=0.0;
printf("Ingrese N \n");
scanf("%d",&N);
if(N>0)
{
for(i=1;i<=N ;i++)
for(j=1;j<=i;j++)
suma=suma+(potencia(i+j,i)/factorial(i+1));
printf("El resultado de la suma es %f \n"suma);
}
else
printf("Ingreso un valor no válido \n");
}
Página : 58
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
for(i=1;i<=b ; i++)
pot=pot*a;
pot=(float)pot;
}
else
{
for(i=1;i<=(b*-1) ; i++)
pot=pot*a;
pot=1/float(pot);
}
return(pot);
}
Los valores que se le entregan como entrada a las funciones se conocen como párametros. Por
ello, al momento de utilizar o llamar una función, se indica el nombre de la función junto con los
párametros reales (valores específicos). También es importante acotar que algunas funciones no
podrían llevar argumentos, por lo que en ese caso los paréntesis de la función pueden quedar
vacias.
Un mismo programa puede producir distintos resultados bajo diferentes formas de paso de
parámetros.
Página : 59
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Página : 60
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Realice el seguimiento del siguiente programa. Indique en la tabla los valores que toma cada
variable.
/* Funcion */
int funcionX(int x)
{
int i, suma;
suma=0;
i=1;
while (i<x)
{
if ((x%i) = =0)
suma=suma+i;
i++;
};
return(suma)
}
Página : 61
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
n
1 * 3 * 5 * ... * (2i − 1)
∑ 2!*3!*4!*...* (i + 1)!
i =1
n
1 * 3 * 5 * 7 * 9 * L * (2i − 1)
S =∑
i =1 4 * 8 *12 * L * 4i
Página : 62
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Este programa debe incorpora el uso de funciones creadas por Usted (no se permite el uso de
funciones existentes en las librerías del C).
Construir una función en C que permita DEVOLVER la suma de los primeros K términos de la
serie:
x x x x
S = 2+ − + − + ...
3 4 5 6
El valor de x y de K deberán ser entregados como argumentos a la función.
Página : 63
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
#include <stdio.h>
/* Prototipo de funciones */
int adivina(int, int);
int main()
{
int a, b,
resultado; /* Almacena resultados de operaciones */
Página : 64
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
5 6 7 8 7 4 8 0
0 1 2 3 4 5 6 7
Datos Indice
Dicho arreglo podría haber sido representado por una definición de 8 variables de tipo char. Cabe
destacar además que los arreglos comienzan en el índice 0.
Supongamos lo siguiente :
5 4 3 2
Este arreglo se llama Ejemplo (int Ejemplo[4]); para hacer referencia al primer elemento, se debe
escribir Ejemplo[0]; supongamos:
c=Ejemplo[0];
entonces c , vale 5.
INICIALIZACIÓN DE ARREGLOS
Página : 65
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Entrada: 10 enteros
Salida: El mayor de los 10 enteros
Restricciones: ninguna
#include<stdio.h>
main()
{
int arr[10], i, mayor;
for(i=0;i<10;i++)
{
printf("Ingrese el %d valor \n",i+1);
scanf("%d",&arr[i]);
}
for(i=1,mayor=arr[0];i<10;i++)
if(mayor>arr[i])
mayor=arr[i];
else continue;
printf("El número mayor es %d \n",mayor);
}
#include <stdio.h>
int i,s,a[5],m;
float p;
main()
{
for ( i=0; i<5 ; i++)
{
printf("\n Ingrese elemento A[%d] = ",i);
scanf("%d",&a[i]);
}
s=0;
m=1;
for ( i=0; i<5 ; i++)
{
s = s + a[i];
m = m * a[i];
}
p=m/s;
printf("suma <%d> , multiplicacion <%d> resultado?? es <%f>",s,m,p);
getchar();
getchar();
}
Página : 66
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
#include <stdio.h>
int i,a[5],b[5],m,a1,b1;
main()
{
printf("\n Ingrese los elementos al primer vector ");
for ( i=0; i<5 ; i++)
{
printf("\n Ingrese elemento A[%d] = ",i+1);
scanf("%d",&a[i]);
}
printf("\n ingrese los elementos al segundo vector ");
for ( i=0; i<5 ; i++)
{
printf("\n Ingrese elemento B[%d] = ",i+1);
scanf("%d",&b[i]);
}
m=0; a1=a[0]; b1=b[0];
for ( i=0; i<5 ; i++)
{
if (a[i] > a1) a1=a[i];
if (b[i] < b1) b1=b[i];
m=m + a[i] * b[i];
}
printf("\n El valor de a1 es %d",a1);
printf("\n El valor de b1 es %d",b1);
printf("\n El valor de m es %d",m);
getchar();
}
CADENAS O STRINGS
Los strings o cadenas son arreglos unidimensionales de tipo char. Por convención, un string en C
se termina con el carácter nulo ‘\0’. Por ejemplo, si tenemos char a[5], el elemento a[4] es el ‘\0’.
Las constantes de strings se escriben entre comillas; por ejemplo, ``abc'' es un arreglo de
caracteres de tamaño 4, donde el último elemento es el carácter nulo ‘\0’.
#include<stdio.h>
main()
Página : 67
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
{
char nombre[20];
int edad;
printf("Ingrese su nombre \n");
gets(nombre);
printf(" Ingrese su edad \n");
scanf("%d",&edad);
printf("Hola %s ,tu edad es de %d, ves que tengo buena memoria \n",nombre,edad);
}
Aquí se ha utilizado la función gets, la cual permite capturar toda la cadena desde teclado
colocando el ‘/0’ al final de la cadena. Esto permite manejar de manera más simple el ingreso de
cadenas a diferencia del scanf. Note además que basta con colocar el nombre de la cadena entre
los paréntesis para capturar la cadena.
Ejemplo 4.6: Crear un programa donde ingreses un nombre y muestre la longitud del nombre
ingresado.
#include<stdio.h>
main()
{
char nombre[20];
int i,largo;
printf("Ingrese su nombre \n");
gets(nombre);
for(i=0,largo=0; nombre[i]!='\0';i++)
largo++;
printf("El largo de su nombre es %d\n",largo);
}
Ejemplo 4.7: Crear un programa que cuente cuantas vocales posee un string.
#include<stdio.h>
main()
{
char nombre[20];
int i,cuentaVocales;
printf("Ingrese un string \n");
gets(nombre);
for(i=0, cuentaVocales =0;nombre[i]!='\0' ;i++)
if(nombre[i]=='a' || nombre[i]=='A')
cuentaVocales ++;
else if(nombre[i]=='e' || nombre[i]==’E')
cuentaVocales ++;
Página : 68
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
#include<stdio.h>
main()
{
char nombre[20];
char aux[20];
int i,j,largo;
printf("Ingrese su nombre \n");
gets(nombre);
for(i=0,largo=0; nombre[i]!='\0';i++)
largo++;
for(i=largo-1,j=0; i>=0 ; i--,j++)
aux[j]=nombre[largo];
aux[j]=’\0’;
printf("El nombre invertido es %s\n",aux);
}
ARREGLOS BIDIMENSIONALES
int arreglo[5][3];
Su representación es:
columna 1 columna 2 columna 3
0 1 2
Fila 1 0
Fila 2 1
Fila 3 2
Fila 4 3
Fila 5 4
Página : 69
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Cada elemento se referencia a través del nombre y su ubicación en el conjunto, por ejemplo:
{
a[4][2]=10; // Se almacena en la fila 5, columna 3 el valor 10
m[0][5]=0; // Se almacena en la fila uno, columna 6 el valor 0
if (a[i][j] == a[j][i] ) // se consulta si el valor ubicado en la fila i-1 y columna j-1 es igual al elemento
// almacenado en la fila j-1 y columna i-1
}
Página : 70
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Las matrices cuadradas tienen algunas caracteristicas importantes asociadas a la ubicación de sus
elementos en el conjunto. Se puede hablar de diagonal principal, diagonal secundaria, triangular
superior, triangular inferior, por mencionar algunas.
Triangular
afc Superior
f<c
6x6
Ejemplo 4.9: Crear un programa donde se introduzca 2 matrices de 4x4 y que entregue el
resultado de la suma de ambas matrices:
#include<stdio.h>
main()
{
int matriz1[4][4], matriz2[4][4],fila,columna,matriz3[4][4];
printf(“Ingrese los valores de la primera matriz \n”);
for(fila=0;fila<4;fila++)
{ for(columna=0;columna<4;columna++)
{
printf(“Ingrese el valor fila %d , columna %d \n”,fila+1,columna+1);
scanf(“%d”,&matriz1[fila][columna]);
}
}
Página : 71
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
A B C J AJ BK CL
D E F Ψ K = DJ EK FL
G H I L GJ HK IL
Página : 72
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
17.- Crear una función que analice semánticamente si se puede realizar una operación matemática
con los siguientes caracteres :
0-9 , ( , ) , + , - , * , /
Página : 73
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Dado el siguiente programa en C, se pide que usted INDIQUE CLARAMENTE qué es lo que hace
el programa. Suponga la cadena de entrada ahumada
#include <stdio.h>
char adivina_que_hago(char []);
int main()
{
char frase[50];
printf("frase = "); gets(frase);
printf("R : %c\n", adivina_que_hago(frase));
return 0;
}
Página : 74
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Construir un programa que permita imprimir todos los elementos menores al elemento mayoritario.
En caso de no existir un elemento mayoritario, imprimir todos los elementos. Se dice que un
elemento es mayoritario si se encuentra repetido más de la mitad de las veces del total de
elementos del arreglo (mayor a n/2). Asuma que el vector V de dimensión n ya está ingresado.
Ejemplos:
V 1 2 0 2 2 2 Se debe imprimir el 1 y el 0
V 1 3 8 3 5 4 3 Se debe imprimir: 1 3 8 3 5 4 3
En la segunda guerra mundial, se crearon algoritmos de encriptación para codificar mensajes con
el objeto de que el enemigo no supiera que contenían dichos mensajes. Los profesores de
introducción a la programación han creado su propio algoritmo, con el objeto de que información
clasificada (como los certámenes) no caigan en manos indebidas. Sin embargo, necesitan que sus
alumnos le ayuden con la programación de dicho algoritmo. El algoritmo funciona de la siguiente
manera:
La matriz se llena con una palabra o frase secreta descartando las letras repetidas. Se rellenan los
espacios de la tabla con las letras del alfabeto en orden. La frase secreta se ingresa a la matriz de
izquierda a derecha y arriba hacia abajo. La frase secreta junto con la convención sirve para llenar
la matriz de 5x5 que constituyen la clave de encriptación.
Por ejemplo:
AEORLMET
Para lograr esto se le pide que construya un programa que utilice funciones (creadas por ud.)
que realice la encriptación de una palabra ingresada por teclado.
Página : 75
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Crear un programa utilizando funciones, el cual reciba un arreglo de n elementos de tipo entero,
y un número entero. Posteriormente realiza una búsqueda sobre el arreglo para determinar si es
que existen dos elementos del arreglo que sumados den el entero ingresado. Si existen estos
valores, se deben de mostrar en pantalla, en caso contrario indicar que no existen elementos que
sumados den el número.
Ejemplo:
5 12 4 1 Si se ingresa 6 debe imprimir 5 y 1
Si se ingresa 7 se debe imprimir no existen elementos
Para el registro de notas finales de un curso se cuenta con el vector NOTAS de dimensión 40 de
tipo entero y una matriz NOMBRE de 40x20 de tipo char ordenada alfabéticamente (ninguna
sección debe exceder esta cantidad de estudiantes). En cada fila de la matriz NOMBRE se
almacena el nombre y apellido de cada alumno. La nota ubicada en la posición k del vector
NOTAS corresponde a la nota final del alumno ubicado en la fila k de la matriz nombre. Se pide
construir un programa en C que permita generar UN listado donde se impriman primero los
nombres de los alumnos cuya nota final sea mayor o igual al promedio de todo el curso, con un
encabezado que diga “LISTADO DE ALUMNOS SOBRE EL PROMEDIO”, y luego se impriman los
nombres de los alumnos cuya nota final sea menor al promedio de todo el curso, con un
encabezado que diga “LISTADO DE ALUMNOS BAJO EL PROMEDIO”.
Dado un vector de dimensión n de tipo entero, leído desde teclado, construir un programa o función
que permita determinar la existencia de un elemento mayoritario. En caso de existir se debe
imprimir (o retornar en caso de función) dicho valor. Se dice que un elemento es mayoritario si se
encuentra repetido más de las mitad de las veces del total de elementos del arreglo (mayor a n/2).
El arreglo no necesariamente esta ordenado.
Dada una matriz cuadrada de dimensión 20 de tipo char, construir un programa que permita
determinar si un vector de dimensión menor o igual a 20 está contenido en una fila o una columna
de la matriz. Este vector puede encontrarse en la matriz en la misma secuencia o en sentido
inverso. Tanto la matriz como el vector deben ser leídos desde teclado.
Dado un arreglo bidimensional Nx2 que contiene puntos en un espacio de dos dimensiones y un
punto q como consulta (en el espacio de dos dimensiones), encontrar todos los puntos cercanos a
q, tal que la distancia euclidiana entre ellos es menor o igual a una distancia r. Cree una función
Página : 76
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
que deje los puntos <=r en una matriz llamada R (máximo Nx2). Puede utilizar la función sqrt() de
la librería math.h para calcular la raíz.
Dados dos vectores, v= (v1,v2,…,vn) y w=(w1,w2,…, wn), la distancia euclidiana queda definida
como:
( w1 − v1 ) 2 + ( w2 − v 2 ) 2 + ... + ( wn − v n ) 2
Dados los siguientes arreglos, cuenta_corriente (tamaño Nx5) y depósitos (tamaño Mx11) tal que
M>=N, crear una función que muestre el estado de la cuenta para un mes en particular. La
nomeclatura para el arreglo cuenta_conrriente es el siguiente:
1 2 3 - A
4 5 6 - B
7 8 9 - C
Este arreglo no tiene elementos repetidos (no existen códigos de cuentas repetidas, cada fila
corresponde a una cuenta). La nomeclatura para el arreglo depósitos es la siguiente:
0 1 2 3 4 5 6 7 8 9 10
1 2 3 - A 1 0 1 2 0 0
4 5 6 - B 1 1 2 0 0 0
1 2 3 - A 2 1 1 0 0 0
7 8 9 - C 2 0 0 1 0 0
Dadas dos cadenas, una con una palabra a reemplazar (tamaño K) y otra con una frase donde se
encuentra la palabra a reemplazar (tamaño N) donde N>K, crear una función que reemplace la
palabra en el texto. El texto final puede quedar en una cadena llamada TextoFinal (de tamaño M)
donde M>=N+K.
Por ejemplo:
Página : 77
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Note que sólo existe un espacio entre la palabra a buscar y el texto a reemplazar en la cadena
reemplazar. Se pide crear una función que realice dicho reemplazo
Dada la cadena Notas (vector de caracteres de Nx16), ingresar en la misma cadena (al final) el
promedio de los alumnos, notar que el rut, sólo ocupa 4 elementos, entre las notas y el rut existe
un solo espacio y queda espacio final (3 espacios) para colocar el promedio. Utilice la función atoi,
la cual transforma una cadena a enteros.
Ejemplo:
1 1 - 1 0 5 0 0 6 0
2 2 - 2 0 6 0 0 6 0
3 3 - 3 0 4 9 1 0 0
1 1 - 1 0 5 0 0 6 0 0 5 5
2 2 - 2 0 6 0 0 6 0 0 6 0
3 3 - 3 0 4 9 1 0 0 0 7 3
2- Dado el siguiente programa, obtenga los valores de las variables que aparecen en la tabla
en cada iteración, para un valor inicial de N=3 (15 puntos el ejercicio completo).
3- ¿Cuál es la expresión que resuelve este programa? (10 puntos)
#include<stdio.h>
#include<conio.h>
int main( )
{
int i;
int array[4]={0,1,1,1} //arreglos inicializado
for(i=0;i<4;i++)
if(funcion1(array,array[i],4)==1)
printf(“el elemento es %d”,array[i]);
else continue;
Página : 78
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
for(i=0,cont=0;i<N;i++)
if(elem==array[i])
cont++;
else continue;
if(cont> N/2)
return(1);
else return(0);
Crear un programa que verifique si es que dos arreglos de enteros contienen los mismos
elementos (arreglos de 7 elementos). Considere que los arreglos ya están ingresados. Además los
elementos pueden estar desordenados y no existen elementos repetidos en el arreglo. Es decir se
pueden encontrar en distintos posiciones en los arreglo. Por ejemplo, los siguientes arreglos 1 y 2
contienen los mismos elementos.
Arreglo 1
2 3 7 6 5 4 1
Arreglo 2
1 2 3 4 5 6 7
Escriba un programa en lenguaje C que verifique si una matriz de 10x10 (de tipo entero) es
triangular superior. Se dice que una matriz es diagonal superior si todos los elementos sobre la
diagonal principal tienen el valor 1, y todos los elementos restantes son 0. La siguiente figura
representa una matriz diagonal superior de 5x5.. Al igual que en la pregunta anterior considere que
los elementos del arreglo ya han sido ingresados.
0 1 1 1 1
0 0 1 1 1
0 0 0 1 1
0 0 0 0 1
0 0 0 0 0
Página : 79
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
#define N 5
#include<stdio.h>
int main(){
int arr[N]={25,30,12,40,20};
int i,j,aux;
for (i=0;i<N;i++)
printf("pos %d = %d\n",i,arr[i]);
return (0);
}
Escriba un programa en lenguaje C que reciba dos palabras, y los intercale en un tercer String. Por
ejemplo, si su programa recibe los String “Hola” y “Que”, el String que debe generar es “HQoulea”.
En su programa, debe considerar un largo máximo de String de 100, pero cuando haga el
intercalamiento, debe recorrer sólo aquellas posiciones que contengan caracteres válidos (en el
caso del String “Hola”, debe recorrer sólo los primeros 4 caracteres).
Página : 80
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Construir un programa en C que permita llenar una matriz de 5X5 y un vector de capacidad 5, con
números enteros leídos desde teclado, luego deberá imprimir en la salida cuántas veces se
encuentra el vector en la matriz por fila y por columna, en el mismo orden.
1 1 1 1 1
2 1 2 1 1
3 3 2 1 1
1 1 1 1 1
2 2 1 2 1
Y el vector: 1 1 1 1 1
Todo libro editado tiene un número identificador que consta de diez cifras. A dicho número se le
denomina ISBN (del inglés International Standard Book Number) y suele aparecer en las primeras
páginas junto a otros detalles de la edición.
El ISBN se divide en dos partes. La primera, formada por las nueve primeras cifras, identifica el
idioma del libro, la editorial y el libro propiamente dicho. Estas primeras nueve cifras son siempre
dígitos, es decir, valores entre 0 y 9. La segunda parte es el dígito de control, que en realidad
puede ser un dígito o la letra X.
Si se llama Xi al dígito que aparece en la posición i-ésima, la décima cifra viene dada por la
siguiente ecuación:
⎛ 9 ⎞
X 10 = ⎜ ∑ i * X i ⎟ mod 11
⎝ i =1 ⎠
Al dividir por 11 se obtiene un resto entre 0 y 10; si es 10 se pone como dígito de control la letra X,
de lo contrario el dígito de control viene dado por el valor obtenido de la ecuación.
Se pide construir un programa en C que permita leer un número ISBN y permita determinar si es un
número ISBN correcto o no.
NOTA. Para decidir si un número ISBN es correcto o no se compara el dígito de control ingresado
con el que se obtiene con la ecuación anterior.
- Asuma que en la primera parte del ISBN (los primeros nueve caracteres), siempre
son caracteres numéricos.
- Por ejemplo:
‘2’ ‘3’ ‘7’ ‘6’ ‘5’ ‘4’ ‘1’ ‘2’ ‘3’ ‘-‘ ‘X’
Página : 81
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Construya un programa en C que determine si una matriz de n x n ingresada por teclado cumple
con la siguiente característica: la suma de cada elemento de la fila (excepto el último) es igual al
último elemento de la fila; la suma de cada elemento de la columna (excepto el último) es igual al
último elemento de la columna. Además el último elemento de la matriz corresponde al menor valor
entre la suma de la última columna y la suma de la última fila.
Ejemplo:
2 11 3 4 20
1 4 3 6 14
M[5][5]
2 4 1 2 9
5 0 2 3 10
20 0 18 144 53
Su programa debe determinar si al ingresar por teclado cualquier matriz de n x n cumple con estas
características.
PARTE 5: ESTRUCTURAS
Las estructuras son un conjunto de variables que se referencian bajo un mismo nombre,
proporcionando un medio conveniente para mantener reunida la información relacionada.
Ejemplo 5.1: Definición de una estructura para almacenar datos básicos de una persona
struct usuario{
char nombre[30];
char calle[40];
char cuidad[20];
char region[3];
char fono[7];
int edad;
};
La palabra clave struct, le indica al compilador que está siendo declarada una estructura.
Obsérvese que la definición termina con un ; . Esto es debido a que la definición de una estructura
es una sentencia. Note que los campos dentro de una estructura no requieren ser del mismo tipo
de dato. El número de estructuras y el número de campos dependerá del problema a resolver,
Hasta este punto no se han declarado variables, sólo se han definido las formas de los datos.
Página : 82
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Sintaxis:
struct usuario{
char nombre[30];
char calle[40];
char cuidad[20];
char region[3];
char fono[7];
int edad;
} user1,user2;
Para hacer referencia a los elementos de una estructura se utiliza el operador punto “.” .
Sintaxis:
var_tipo_struct.elemento
El nombre de la variable estructura va seguido del punto y del nombre del elemento, referenciando
ese elemento individual de la estructura.
Ejemplo 5.3:
printf("Ingrese el nombre para el primer usuario \n");
gets(user1.nombre);
printf("Ingrese la edad del primer usuario \n");
scanf("%d",&user1.edad);
Página : 83
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
ARREGLOS DE ESTRUCTURAS
struct usuario
struct usuario{
char nombre[30];
char calle[40];
char cuidad[20];
char region[3];
char fono[7];
int edad;
} user1,user2,..., userN;
Lo cual para acceder a cada variable se traduce en algo realmente complejo; Para resolver esta
complejidad podemos utilizar un arreglo.
struct usuario{
char nombre[30];
char calle[40];
char cuidad[20];
char region[3];
char fono[7];
int edad;
}user[N];
Por lo tanto se puede definir un arreglo de estructuras de la forma anterior o de la siguiente forma.
Para poder acceder a algun elemento del arreglo, se indica el nombre del arreglo, el índice del
arreglo y el elemento de la estructura.
Por ejemplo:
for(i=0;i<N ;i++)
{ printf("Ingrese el nombre para user[%d] \n",i);
gets(user[i].nombre);
}
Página : 84
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Sintaxis:
struct nombre_estructura nombre_funcion(parametros)
{
Ejemplo 5.4: En este ejemplo se crea una estructura que alamcena los elementos de los número
complejos, osea el valor real y el imaginario.
struct complejos{
float real;
float imaginario;
};
typedef struct complejos COMPLEX;
Sintaxis:
tipo_dato nombre_funcion(struct nombre_estructura)
{
/* Cuerpo de la funcion */
}
COMPLEX suma(COMPLEX a , COMPLEX b)
{
COMPLEX z;
z.real=a.real+b.real;
a.imaginario=a.imaginario+b.imaginario
return(z);
}
Página : 85
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
1.- Crear una función que maneje los complejos y una función que asigne valores a las variables
reales e imaginarias.
2.- Crear una función que realice la suma de complejos y retorne el resultado.
3.-Crear una función que realice la multiplicación complejos y retorne el resultado.
4.- Definido lo siguiente.
struct Facultad FAC[15];
trabajo TRAB[15];
calidad CAL[15];
Personal PER[300];
Además suponga que dichas estructuras ya poseen información.
Crear una función que muestre a las personas que trabajan en la facultad de ingeniería.
5.- Crear una función que cuente la cantidad de personas de una determinada facultad.
6.- Crear una función que muestre a las personas de acuerdo a un determinado trabajo y a una
determinada facultad.
7.-Transformar las siguientes tablas a estructuras.
FACULTADES TRABAJO
PERSONAL
CALIDAD
CodCalidad Descripción
Directivo Director de Departamento ó
Escuela
Docente Profesor
Secretario Secretaria
Auxiliar Auxiliar
Página : 86
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
struct Datos_Personales{
char nombre[20];
char rut[12];
int telefono;
char direccion[30];
}DATOS[30];
struct Alumnos{
char rut2[12];
char ramo[20];
float Notas[3];
float promedio;
}ALUMN[300];
8.1) Crear una función que ingrese las notas para un ramo determinado.
8.2) Crear una función que calcule el promedio para un determinado ramo
8.3) Crear una función que muestre a los alumnos que deben dar examen en un determinado
ramo.
struct Curso{
char CodCurso[3];
char NombreCurso[20];
}Class[10]; / cursos del colegio/
struct Ramos{
char CodRamo[5];
char NombreRamo[30];
char Cod_curso[20];
}Ramos_Curso[50]; /*5 ramos por curso*/
struct Notas{
char Rut[12];
float N1;
float N2;
float N3;
float promedio;
char Cod_Ramo[5];
char Cod_Curso[3];
}Notas_Ramo_Curso[500];
struc DatosPersonales{
char rut[12];
Página : 87
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
char nombre[20];
char Direccion[30];
int telefono;
char cod_curso[3];
}ALUMNOS[100]; /* Alumnos del colegio*/
9.1) Crear una función que ingrese los datos personales del alumno
9.2) Crear una función que muestre a los alumnos( Nombre) de un determinado curso.
9.3) Crear una función que muestre los ramos de un determinado curso
9.4) Crear una función que permita ingresar las notas de un determinado curso y ramo.
9.5) Crear una función que permita modificar una nota de un determinado alumno de un curso
y ramo dados.
9.6) Crear una función que calcule los promedio de un determinado ramo y curso
9.7) Crear una función que muestre a los alumnos con un promedio determinado de un ramo y
curso dado.
Página : 88
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
PARTE 6: PUNTEROS
Sintaxis:
Tipo_Dato *nombre_variable_puntero;
Ejemplo:
int *p;
Asignación de Dirección
nombre_puntero=&variable;
El carácter & delante de una variable indica que lo se está accediendo es a la dirección de
memoria de dicha variable.
Ejemplo:
int *p;
Ejemplo 5.1:
double x,y,*p;
p=&x;
y=*p;
Lo anterior es equivalente a :
y=*&x;
y=x;
Inicialización
Sintaxis:
tipo_dato *nombre_puntero=&variable;
Ejemplo:
int i=7,*p=&i;
Página : 89
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
&3 /* ilicito*/
int a[77];
&a;
&(k+99)
register v;
&v;
Máx(a,b)
Int a,b;
{
return((a>b)?a:b);
}
Máx(a,b,m_ptr)
Int a, b,*m_ptr;
{
*m_ptr=(a>b)?a:b;
}
Página : 90
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Un puntero es una variable cuyos valores son direcciones. El nombre de un arreglo es una
dirección o puntero fijo. Cuando se declara un arreglo, el compilador debe asignar una dirección
base y la cantidad de almacenamiento suficiente como para alojar a todos los elementos del
arreglo
y el sistema hece que los bytes numerados 300, 304, 309,......696 sean las direcciones de a[0],
a[1], a[2],...,a[99].
p=a; = p=&a[0];
Aritmetica de punteros
La aritmética de puntero proporciona una opción para la indización de arreglos, las proposiciones
p=a+1; = p=&a[1];
Sumar un arreglo:
suma=0;
for(p=a; p<&a[TAM];++p)
suma+=*p;
suma=0;
for(i=0;i<TAM;++i)
suma+=*(a+i);
Double a[ ]; = double*a;
Página : 91
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Cadenas
Las cadenas son arreglos unidimensionales de tipo char, Por convención, una cadena en C
se termina con centinela de fin de cadena ó carácter nulo \0.
char s[ ]="ABC"
char *p="a es por anon o pastel alfabeto"
void main()
{
char *q="del cual todos tienen parte";
printf("\n%s,%s\n %s",s,p,q);
ABC: a es por anon o pastel alfabeto del cual todos tienen parte.
For(p=q;*q!='\0';++q)
*q+=1
printf("\n %s\n\n",p);
}
Arreglos multidimensionales
*(b[i]+j)
(*(b+i))[j]
*((*(b+i))+J)
(&b[0][0]+5i+j)
Int c[7][9][2];
C[i][j][k] = (&c[0][0][0]+9*2+i+2*j+k)
Ejercicios de punteros
a) int *p
papa[4]={12,21,121,212};
p=papa;
*p 12
*(p+2) 121
Página : 92
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
b) char *ptero;
char arreglo[7]={'C','L','A','U','D','I','O'};
ptero=arreglo;
*ptero 'C'
*(ptero+2) 'A'
c) int *ptero;
int arreglo[2][2]={{1,2},{3,4}};
*ptero 1
*(ptero+2) 3
d) int *ptero;
*ptero 1023
*(ptero+2) 0
a) i=10, ptero=arreglo;
i=*p+*ptero[4];
(ptero+2)=ptero+*ptero[4]
i 15
arreglo[2] 5
b) i=10, ptero=arreglo
i=(*p)+1+(*ptero)+2
ptero=*ptero+3+i
i 14
arreglo[0] 18
Página : 93
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
USO DE TYPEDEF
C proporciona diversos tipos fundamentales, como char e int, y varios tipos derivados, como
arreglos y
punteros; también proporciona la declaración typedef, que permite la asociación explícita de un tipo
con un identificador. Algunos ejemplos son:
En cada una de éstas definiciones de tipo, los identificadores nombrados pueden usarse después
para declarar variables o funciones, del mismo modo en que se usan los tipos ordinarios; por
ejemplo,
declara que las variables largo y ancho son de tipo METROS, que, a su vez, equivale al tipo int. De
esta manera, METROS puede emplearse como una declaración de un tipo sinónimo de int.
Referencia Bibliografica:
Página : 94
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
1. #include<stdio.h>
main()
{
int a,b;
printf(“Ingrese el primer valor \n”);
scanf(“%d”,&a);
printf(“Ingrese el segundo valor \n”);
scanf(“%d”,&b);
printf(“el resultado es : %d \n”, a*b);
}
#include<stdio.h>
main()
{
float a,b,mult;
printf(“Ingrese el primer valor \n”);
scanf(“%f”,&a);
printf(“Ingrese el segundo valor \n”);
scanf(“%f”,&b);
mult=a*b;
printf(“El resultado es : %f \n”, mult);
}
La principal diferencia entre la primera y la segunda solución, es que la primera no puede
efectuar una multiplicación entre decimales.
2. #include<stdio.h>
#define PI 3.1415
main()
{
float radio;
printf(“Ingrse el radio \n”);
scanf(“%f”,&radio);
printf(“El perímetro es %f \n”, PI * radio* 2.0);
getchar();
}
3. #include<stdio.h>
main()
{
float a,b;
printf(“Ingrese el largo del rectángulo \n”);
scanf(“%f”,&a);
Página : 95
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
4. #include<stdio.h>
main()
{
float a,b,c,d,suma,mult,pro;
printf(“Ingrese el primer valor \n”);
scanf(“%f”,&a);
printf(“Ingrese el segundo valor \n”);
scanf(“%f”,&b);
printf(“Ingrese el tercer valor \n”);
scanf(“%f”,&c);
printf(“Ingrese el cuarto valor \n”);
scanf(“%f”,&d);
suma=a+b+c+d;
mult=a*b*c*d;
pro=suma/4.0;
printf(“El resultado de la suma es : %f, de la mult es : %f , y el promedio es %f \n”, suma,
mult, pro);
}
5. #include<stdio.h>
void main()
{
float a,b,c,d,suma,mult,pro;
printf(“Ingrese el primer valor \n”);
scanf(“%f”,&a);
printf(“Ingrese el segundo valor \n”);
scanf(“%f”,&b);
printf(“Ingrese el tercer valor \n”);
scanf(“%f”,&c);
printf(“Ingrese el cuarto valor \n”);
scanf(“%f”,&d);
suma=a+b+c+d;
mult=a*b*c*d;
pro=suma/4.0;
printf(“El resultado de la suma es : %f, de la mult es : %f, y el promedio es : %f
\n”,suma,mult,pro); }
Página : 96
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
1. #include<stdio.h>
main()
{
int N, i , suma=0;
2. #include<stdio.h>
main()
{
int N, i, j, suma=0,pot;
3. #include<stdio.h>
main()
Página : 97
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
int N, i, j, suma=0,fact;
int N, i, j, suma=0,pot=1;
printf("Ingrese el valor de N \n");
scanf("%d",&N);
if(N>0)
{
i=1;
while(i<=N)
{
j=1;pot=1;
while(j<i)
{
pot=pot*i;
j=j+1;
}
suma=suma+pot;
i++;
}
prinf(" El resultado de la suma es: %d\n",suma);
}
}
5. #include<stdio.h>
#define STOP 15
main()
{
Página : 98
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
int N, i,mayor;
6. #include<stdio.h>
#define STOP 20
main()
{
int N, i,mayor,min;
Página : 99
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
7. #include<stdio.h>
main()
{
int i;
float a,b,factA,factB_A;
printf("Ingrese a \n");
scanf("%f",&a);
printf("Ingrese b \n");
scanf("%f",&b);
if(a>=0 && b>=a)
{
for(i=1,factA=1;i<=a;i++)
factA=factA*i;
for(i=1,factB_A=1;i<=(b-a);i++)
factB_A=factB_A*i;
8. #include<stdio.h>
#define STOP 15
main()
{
int valor,contpares=0,i;
i=1;
while(i<=STOP)
{
printf(“ingrese un valor \n”);
scanf(“%d”,&valor);
if(!(valor%2))
contpares++;
i++;
}
printf(“La cantidad de pares es: %d \n”,contpares);
}
9. Este programa tiene un ciclo infinito, debido a que después del while(i) , viene el termino de la
sentencia ; es decir el programa jamás alcanza la sentencia i--, por ello la expresión i , siempre es
verdadera.
10. Este también es un ciclo infinito, ya que siempre está ejecutando la sentencia printf(“ El
valor de i es : %d\n",i); , por lo que nunca alcanza el incremento i++;
Página :100
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
#include<stdio.h>
void main()
{
int suma,i,N;
#include<stdio.h>
main()
{
int suma,i,N;
#include<stdio.h>
main()
{
int suma,i,j,pot=1,N;
Página :101
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
suma=suma+pot;
}
print("El resultado es %d \n",suma);
}
else printf("Corra de nuevo el programa e ingrese un entero positivo \n");
}
#include<stdio.h>
void main()
{
int suma,i,j,N;
#include<stdio.h>
main()
{
int suma,i,j,N,fact;
}
else printf("El valor ingresado no es un entero positivo \n");
}
Página :102
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
#include<stdio.h>
main()
{
int i,a,b;
float fact1,fact2,fact3,res;
res=fact1/(fact2*fact3);
printf("El resultado de la operación es : %f \n",res);
}
else printf("Los valores ingresados no permiten realizar la operación \n");
}
s ∈ R+, k ∈ N U{0}
#include<stdio.h>
main()
{
int i,k;
float S,x,fact;
Página :103
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
else{
for(i=1,x=1; i<=k ;i++)
{
if(i!=k)
x=x*(S-i);
else
x=x*(S-K+1);
}
for(i=1,fact=1 ; i<=k ; i++)
fact=fact*i;
printf("El resultado de la operación es : %f \n",x/fact);
}
else printf("Los valores ingresados no permiten realizar la operación \n");
}
#include<stdio.h>
main()
{
int i,j;
float x,fact,res,N;
if(N>0)
{
for(i=1 ; i<=N ; i++)
{
for(j=1,pot=1 ; j<=i ; j++)
pot=pot*x;
for(j=1,fact=1 ; j<=i ; j++)
fact=fact*x;
res=res+(i*(pot-i))/fact;
}
printf("El resultado de la operación es : %f \n",res);
}
else printf("Los valores ingresados no permiten realizar la operación \n");
}
Página :104
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
main()
{
int i,j;
float suma,fact,pot,N;
if(N>0)
{
for(i=1,suma=0 ; i<=N ; i++)
{
for(j=1,pot=1; j<=(i*2-1); j++)
pot=pot*i;
for((j=1,fact=1 ; j<=(N-i) ; j++)
fact=fact*j;
suma=suma+((3*pot)/fact);
}
printf("El resulatdo de la operación es %f \n",suma);
}
else printf("El valor ingresado no permite realizar la operación \n");
}
#include<stdio.h>
main()
{
int i,j,N;
float res,suma=0.0;
printf("Ingrese N \n");
scanf("%d",&N);
if(N>0)
{ for(j=1 ;j<=N ; j++)
for(i=1 ; i<=j ; i++)
suma=suma+(2*i)/j;
printf("El resultado es : %f \n",suma);
}
Página :105
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
#include<stdio.h>
main()
{
int i,j,N,pot,suma,k;
printf("Ingrese N \n");
scanf("%d",&N);
if(N>0)
{
for(j=1 ,suma=0;j<=N ; j++)
{ for(i=1 ; i<=j ; i++)
for(k=1,pot=1 ; k<=i ; k++)
pot=pot*(2*j);
suma=suma+pot;
}
printf("El resultado es : %d \n",suma);
}
else printf("El valor ingresado no es permitido \n");
}
22. Crear un programa donde se ingresen 50 números, muestre el mayor, menor, y cuantos de
ellos son múltiplos de 5.
#include<stdio.h>
#define STOP 50
main()
{
int i,valor,mayor,menor,mult5=0;
Página :106
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
if(!(valor%5))
mult5++;
else
continue;
}
printf(" El mayor es :%d, el menor es: %d y la cantidad de mult. de 5
son:%d\n"\mayor,menor,mult5);
}
Solución PCR23:
CASO A
(!(k>=j || k<=5) && (!(j=j-1 > k ) && ((i+1)==j/2))
((3>=5 || 3<=5) && (!(j=3 > 3 ) && (5==2)))
(!(FALSO || VERDADERO) && (!(FALSO) && (FALSO)))
(!VERDADERO && (VERDADERO && (FALSO)))
(FALSO && FALSO)
(FALSO)
CASO B
(!(k>=j || k<=5) && (!(j=j-1 > k ) && ((i+1)==j/2))
(! (3>=7 || 3<=5) && (!(j=6 > 3 ) && (4==3)))
(! (FALSO || VERDADERO) && (!(VERDADERO) && (FALSO)))
(!VERDADERO && (FALSO && (FALSO)))
(FALSO && FALSO)
(FALSO)
Solución PCR24:
Solución PCR25
Imprimir(“Ingrese N”) 3 1 1 0 0
Leer(N) 2 2 2 1
3 1 7 0
Página :107
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
if(N>0) 2 16 1
{ 3 3
suma1=0 5 pts 1 5 pts 0
for(i=1; i<=N ;i=i+1) 2 1
{ 3 3
suma2=0 4 6
j=1
while (j<=i) 10 10
{ pts pts
suma2=suma2+j
j=j+1
}
suma1=suma1+i+suma2
}
Imprimir(suma1)
}
else {
Imprimir(“Error”)
}
}
Solución PCR31:
5
6
7
8 1 1
2 3
3
4 7
5
6
7
8
9 1 1
2
3 4
4
5
6
7
8
9
Solución PCR32:
int sumatoria(int n)
{
int i, j;
float suma=0.0, j, numerador,denominador;
for(i=1,;i<=n;i++)
{
for(j=1,numerador=1.0;j<=i;j++)
Numerador=numerador*(2*j-1);
for(j=1,denominador=1.0;j<=i;j++)
denominador= denominador * factorial(i+1);
suma=suma+numerador/denominador;
Solución PCR33:
Página :109
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
int sumatoria(int n)
{
int i, j, fact, pot, suma=0;
for(i=1,;i<=n;i++)
{
if(i%2==1) //significa que i es impar
{
for(j=1,fact=1; j<=i ;j++) // aquí calculo el factorial
fact=fact*j;
suma=suma+fact;
}
else { // significa que es par
suma=suma+pot*-1;
}
}
Solución PCR34.:
float Sumatoria(float n)
{
float i, suma=0.0,j,numerador, denominador;
if( n>=1.0)
{
for(i=1.0 ; i<=n; i++)
{
for(j=1.0,numerador=1.0 ; j<=i; j++)
numerador=numerador*(2*j-1);
for(j=1.0,denominador=1.0 ; j<=i; j++)
denominador=denominador*4*i;
suma=suma+numerador/denominador;
}
return(suma);
}
else return (-1); // en el caso que n sea menor que 1.0
Solución PCR35:
#include<stdio.h>
Página :110
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
float a,b,i,f,sumaf;
float fx(float x);
main()
{
do
scanf("%f%f",&a,&b);
while (a>b);
sumaf=0;
for (i=a;i<=b;i++)
{
sumaf=sumaf+fx(i);
}
printf("\nResultado: %f",sumaf);
getchar();getchar();
}
float fx(float x)
{
if (x>5) return((x*x*x-5*x)/(x-5));
else if (x<=1) return(-(x*x+10*x)/25);
else return ((x*x+3*x)/(x-1));
}
Solución PCR36:
#include<stdio.h>
main(void)
{
int n, i;
float suma;
do{
printf(“Ingrese el varlor de n\n”);
scanf(“%d”,&n);
}while(n<0);
if (exp==0)
return(1.0);
else if(exp>=1)
Página :111
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
{
for(i=1;i<=exp; i++)
pot=pot*(float)base;
}
else {
for(i=1;i<=exp*-1; i++)
pot=pot*(float)base;
pot=1/pot ;
}
return(pot);
}
float factorial(int n)
{
int i;
float fact=1.0;
if(n==0)
return(1.0)
else {
for(i=1;i<=n;i++)
fact=fact*(float)i;
}
return(fact);
}
1.-
int largo_cadena(char cadena[ ])
{
int largo;
for(largo=0 ; cadena[largo]!= '\0' ;largo++)
continue;
return(largo);
}
2.-
int ContarCoincidencia(char cadena[ ],char caracter)
{
int i,cuenta=0;
for(i=0; cadena[i]!='\0' ; i++)
if(cadena[i]==caracter)
cuenta++;
else continue;
return(cuenta);
}
3.-
int contarvocales(char cadena[ ])
Página :112
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
{
int i,contar;
4.-
void concatenar(char cadena1[ ], char cadena2[ ])
{
int i, j,largo;
largo=strlen(cadena1);
for(i=0,j=largo;cadena2[i]!='\0'; j++,i++)
cadena1[j]=cadena2[i];
cadena1[j]='\0';
}
5.-
void InvertirCadena(char cadena[ ])
{
char cadInv[ ];
int largo,i,j;
largo=strlen(cadena);
6.-
void CopiarCadena(char cadena1[ ] , char cadena2[ ])
{
int i;
for(i=0; cadena2[i]!=\0' ; i++)
cadena1[i]=cadena2[i];
cadena1[i]='\0';
}
7.-
Página :113
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
largo1=srtlen(cadena1);
largo2=strlen(cadena2);
if(largo1==largo2)
{
for(i=0 ; i<largo2 && iguales ;i++)
if(cadena1[i]!=cadena2[i])
iguales=0;
else continue;
return(iguales);
}
else
return(0);
}
largo1=srtlen(cadena1);
largo2=strlen(cadena2);
if(largo1==largo2)
{
for(i=0 ; cadena1[i]!='\0' ;i++)
if(cadena1[i]!=cadena2[i])
return(0);
else continue;
return(1);
}
else
return(0);
}
9.-
int Mdiagonal(int Matriz[ ][10])
Página :114
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
{
int i,j;
return(0);
}
10.-
void Operator(int matriz[ ][3], int vector[ ])
{
int i,j;
if(exp>0)
for(i=0; i<exp ; i++)
Página :115
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
pot=pot*base;
else if(exp==0)
pot=1;
return(pot);
}
11.-
return(es);
}
12 .-
13.-
14.-
int verificarSubMat(int Mat[ ][3],int vector[ ])
{
Página :116
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
int i,j,temp[3];
return(0);
}
15.-
void intercambio(int fila, int FilaColumna, int FilaColumna2, int Matriz[ ][4])
{
int temp[4],j;
// el argumento fila es una bandera que indica que lo que se va a intercambiar son
// filas o columnas. Si fila toma un valor distinto de 0, entonces lo que se
//intercambia son las filas, sino las columnas.
if(fila)
{
for(j=0 ; j<4 ; j++)
temp[j]=Matriz[FilaColumna][j];
for(j=0 ; j<4 ; j++)
Matriz[FilaColumna][j]=Matriz[FilaColumna2][j];
for(j=0 ; j<4 ; j++)
Página :117
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Matriz[FilaColumna2][j]=temp[j];
}
else
{
for(j=0 ; j<4 ; j++)
temp[j]=Matriz[j][FilaColumna];
for(j=0 ; j<4 ; j++)
Matriz[j][FilaColumna]=Matriz[j][FilaColumna2];
for(j=0 ; j<4 ; j++)
Matriz[j][FilaColumna2]=temp[j];
}
}
16.-
17.-
int AnalizadorSemantico(char arreglo[ ])
{
int i, seguir=1,largo;
char v1,v2;
largo=strlen(arreglo);
Página :118
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
if(v1==’(‘)
{
if(v2!=’)’ && v2!=’+’ && v2!=’*’ && v2!=’-‘ && v2!=’/’ )
continue;
else
seguir=0;
}
else if(v1==’)‘)
{
if(v2!=’(’ && (¡(v2>=’0’ && v2<=’9’)))
continue;
else
seguir=0;
}
else if(v1==’+’ || v1==’-‘ || v1==’/’ || v1==’*’)
{
if((v2>=’0’ && v2<=’9’) || ‘(‘ )
continue;
else seguir=0;
}
else if(v1>=’0’ && v1<=’9’)
{
if(v2!=’(’ && v2!=’)‘ )
continue;
else seguir=0;
}
}
if((largo-2)>=0)
{
if((largo-2)==0)
{
if(arreglo[0]>=’0’ && arreglo[0]<=’9’)
{
if(arreglo[1]>=’0’ && arreglo[1]<=’9’)
return(seguir);
else
seguir=0;
}
else seguir=0;
}
else return(seguir);
}
else if(largo==1)
{
if(arreglo[0]>=’0’ && arreglo[0]<=’9’)
return(seguir);
else seguir=0;
}
else seguir=0;
return(seguir);
Página :119
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Solución PCR41:
Solución PCR42:
#include<stdio.h>
int Mayoritario(int elem, int vector[], int n);
void imprimir(int mayoritario, int vector[], int n);
main(void)
{
int i,mayoritario,stop=0;
return(cont>n/2);
Página :120
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
if(vector[i]!=mayoritario)
printf(“ %d”, vector[i]);
else continue;
}
Solución PCR43:
#include<stdio.h>
#include<string.h>
#define MAX 5
InicializarMatriz(char MatSec[][MAX]);
void Traspasar(char MatSec[][MAX],char fraseSec[]);
void CodMsje(char MsjeACod[],char MsjeCdo[], char MatSec[][MAX]);
void imprimir(char mat[][MAX]);
int main(void)
{
char fraseSec[50],MatSec[MAX][MAX];
char MsjeACod[50];
char MsjeCdo[50];
InicializarMatriz(MatSec);
Traspasar(MatSec,fraseSec);
printf("Ingrese el mensaje a codificar\n");
gets(MsjeACod);
CodMsje(MsjeACod, MsjeCdo, MatSec);
printf("El mensaje codificado es %s\n", MsjeCdo);
return(0);
}
largo=strlen(fraseSec);
for(k=0; k<largo; k++)
{
esta=0;
for(i=0; i<MAX && !esta ; i++)
for(j=0; j<MAX && !esta ; j++)
{
if(fraseSec[k]==MatSec[i][j] )
esta=1;
}
if(esta==0)
{
for(i=0,stop=0; i<MAX && !stop ; i++)
for(j=0; j<MAX && !stop ; j++)
{
if(MatSec[i][j]=='0' && fraseSec[k]!=' ')
{ MatSec[i][j]=fraseSec[k];
stop=1;
}
}
}else continue;
}
}
Página :121
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
largo=strlen(MsjeACod);
for(k=0 ,m=0; k<largo; k++)
{
esta=0;
for(i=0; i<MAX && !esta ; i++)
for(j=0; j<MAX && !esta ; j++)
{
if(MsjeACod[k]==MatSec[i][j] )
{ esta=1;
if( (j+1)<MAX)
if(MatSec[i][j+1]!='0')
MsjeCdo[m++]= MatSec[i][j+1];
else if(MatSec[i+1][0]!='0')
MsjeCdo[m++]= MatSec[i+1][0];
}//fin del if
}// fin del for
if(esta==0)
MsjeCdo[m++]= MsjeACod [k];
else continue;
}
MsjeCdo[m]='\0';
}
InicializarMatriz(char MatSec[][MAX])
{
int i,j;
for(i=0; i< MAX;i++)
for(j=0; j< MAX;j++)
MatSec[i][j]='0';
Solución PCR44:
#include <stdio.h>
#define n 4
int x, a[n];
main()
{
int i,j;
printf(" Ingrese los numeros al arreglo ");
for (i=0;i<n;i++)
scanf("%d",&a[i]);
printf(" Ingrese el número a analizar :");
scanf("%d",&x);
if (buscar(x)) printf(" Si existen ");
else
printf(" NO existen");
getchar();
getchar();
}
Página :122
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
int buscar(int x)
{
int i,j,b=0;
for (i=0;(i<n) && (b==0);i++)
for (j=i+1;(j<n) && (b==0);j++)
if (x==a[i]+a[j])
{
b=1;
printf("Los numeros son : %d y %d",a[i],a[j]);
};
if (b==0) return(0);
else return(1);
}
Solución PCR45:
#include <stdio.h>
int NOTAS[40], i, j, snotas=0; prom=0,ca=0;
char NOMBRE[40] [20];
main()
{
//Ingreso de NOTAS Y NOMBRES. Se asume que existe mas de un alumno
for (i=0;i<40&&NOTAS[i]!=-1;i++)
{
ca++;
snotas=snotas+NOTAS[i]
}
prom=snotas/ca;
printf (“\nLISTADO DE ALUMNOS SOBRE EL PROMEDIO\n”)
for (i=0;i<ca;i++)
{
if (NOTAS[i]>=prom)
for (j=0;j<20;j++) printf(“%c”,NOMBRE[i][j]);
printf((“\n”)
}
printf (“\n LISTADO DE ALUMNOS BAJO EL PROMEDIO \n”)
for (i=0;i<ca;i++)
{
if (NOTAS[i]<prom)
for (j=0;j<20;j++) printf(“%c”,NOMBRE[i][j]);
printf((“\n”)
}
getchar();getchar();
}
Solución PCR46:
#include<stdio.h>
int vector[1000],n,i,j,mayoritario,ctamayoritario,ctapaso;
main()
{
do {
Página :123
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
Solución PCR47:
#include<stdio.h>
#include<conio.h>
char m[20][20],p[20],bas;
int n1,n2,i,j,b,b2,f,c,k ;
FILE *dat;
int Comparar(char patronAux[],char patron[]);
void Copiar_IesimoInv(char Mat[][20], int i, int j, int fila, int largo, char patronAuxInv[]);
void Copiar_Iesimo(char Mat[][20], int i, int j, int fila, int largo, char patronAux[]);
int Esta(char Mat[][20], char patron[]);
int ObtenerLargo(char patron[]);
main()
{
//para probar completo el ingreso lo realice via archivo
dat=fopen("datos.txt","r");
fscanf(dat,"%c",&bas);
Página :124
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
for (i=0;i<20;i++)
{
for (j=0;j<20;j++)
{
fscanf(dat,"%c",&m[i][j]);
}
fscanf(dat,"%c",&bas);
}
fclose(dat);
for (i=0;i<20;i++)
{
for (j=0;j<20;j++)
{
printf("%c",m[i][j]);
}
printf("\n");
}
printf("\nIngrese Elementos a buscar: ");
gets(p);
k=Esta(m,p);
if (k==1) printf("\n cadena SI esta!");
else printf("\n cadena No esta!");
getchar();
getchar();
}
Página :125
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
{
int i;
for(i=0; patron[i]!='\0' ;i++);
return(i);
}
void Copiar_Iesimo(char Mat[][20], int i, int j, int fila, int largo, char patronAux[])
{
int k,L,m;
if(fila==1)
{ // j es la columna
for(k=j, m=0; m<largo; k++, m++)
patronAux[m]=Mat[i][k];
patronAux[m]='\0';
}
else { // i es la fila
for(k=i, m=0; m<largo; k++, m++)
patronAux[m]=Mat[k][j];
patronAux[m]='\0';
}
}
void Copiar_IesimoInv(char Mat[][20], int i, int j, int fila, int largo, char patronAuxInv[])
{
//char patronAux[20];
int k,L,m;
if(fila==1)
{ // j es la columna
for(k=j, m=0, L=largo; L>0; L--, m++,k--)
patronAuxInv[m]=Mat[i][k];
patronAuxInv[m]='\0';
}
else { // i es la fila
for(k=i, m=0, L=largo; L>0 ; L--, k--, m++)
patronAuxInv[m]=Mat[k][j];
patronAuxInv[m]='\0';
}
}
Solución PCR48:
void Consulta(int Puntos[][n], int n, int q1, int q2, int R[][n],float r) // 6 ptos
{
int k,i ;
float dist ;
Página :126
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
R[k][1]=Punto[i][1]; // 2
k++;
}
else continue;
Solución PCR49:
int i,j;
char NCuentaAux[5];
char Monto[5];
for(i=0,suma=0;i<N;i++) //2
{
Copiar_Iesimo(Depositos[i],0,5, NCuentaAux); // 7 ptos
if(!strcmp(NCuentaAux,NCuenta) && mes==Depositos[i][5])
{
Copiar_Iesimo(Depositos[i],6,5, Monto); // 7 ptos
Monto_entero=atoi(Monto); // 6
Suma=suma+Monto_entero; // 5
Página :127
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
1.-
struct complejos{
float real;
float imaginario;
};
typedef struct complejos COMPLEX;
2.-
COMPLEX suma(COMPLEX a , COMPLEX b)
{
COMPLEX z;
z.real=a.real+b.real;
a.imaginario=a.imaginario+b.imaginario
return(z);
}
3.-
z.real=a.real*b.real-a.imaginario*b.imaginario;
z.imaginario=a.real*b.real+a.imaginario*b.real;
return(z);
}
}
else continue;
}
Página :128
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
int i, totalF;
7.-
struct Facultad{
char CodCarreraF[5];
char Descripcion[20];
};
typedef struct{
char CodTrabajo[20];
char descripcion[20];
}trabajo;
typedef struct{
char codcalidad[20];
char Descripcion[20];
}Calidad;
typedef struct{
char codcarreraF[5];
char rut[10];
Página :129
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
char nombre[20];
char codtrabajo[20];
char codcalidad[20],
float sueldo;
}Personal;
8.1)
void ingresar_notas(char Ramo[])
{
int i,j;
for(i=0;i<300;i++)
if(!(strcmp(Ramo,ALUMN[i].ramo)))
{
for(j=0;j<3;j++)
{
printf(“Ingrese la nota %d para el rut %s \n”,j+1,ALUMN[i].rut2);
scanf(“%f”,&ALUMN[i].Notas[j]);
}
}
else continue;
}
8.2)
void calcular_promedio(char Ramo[])
{
int i;
for(i=0;i<300;i++)
if(!(strcmp(Ramo,ALUMN[i].ramo)))
ALUMN[i].promedio=(ALUMN[i].Notas[0]+ ALUMN[i].Notas[1]+ ALUMN[i].Notas[2])/3;
else continue;
8.3)
void mostrar_examen(char Ramo[])
{
int i,j,DebeDarExamen;
for(i=0;i<300;i++)
{
if(!(strcmp(Ramo,ALUMN[i].ramo)))
{
if(ALUMN[i].promedio>=50)
{
if(ALUMN[i].Notas[0]<40 || ALUMN[i].Notas[1]<40 || ALUMN[i].Notas[2]<40 )
DebeDarExamen=1;
else if((ALUMN[i].Notas[0]<50 && ALUMN[i].Notas[1]<50) && (ALUMN[i].Notas[0]<50) &&
ALUMN[i].Notas[2]<50) (ALUMN[i].Notas[1]<50 && ALUMN[i].Notas[2]<50))
DebeDarExamen=1;
else
DebeDarExamen=0;
}
Página :130
Claudio Gutiérrez-Soto, Manuel Crisosto,
Introducción a la Programación
Departamento de Sistemas de Información
Universidad del Bío-Bío
else DebeDarExamen=1;
if(DebeDarExamen)
{
for(j=0;j<30;j++)
{
if(!strcmp(ALUMN[i].rut2,DATOS[j].rut))
printf(“El alumno %s , se presenta a examen con promedio %f \n”,
DATOS[j].nombre,ALUMN[i].promedio);
else continue;
}
}
}/*if*/ else continue;
}/*for*/
}/* funcion */
Página :131
Claudio Gutiérrez-Soto, Manuel Crisosto,