Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Quiero agradecer de manera anticipada a los alumnos de introduccin a la programacin, de quienes esperamos recibir feedback para mejorar este apunte con el objeto de que en algn momento sea un texto de apoyo a la programacin. Segundo, quiero agradecer a mi colega y amigo Manuel Crisosto quien ha hecho importantes contribuciones con ejemplos y ejercicios, as como tambin para que este apunte llegue a mano nuestros alumnos. Adems quiero agradecer a mis colegas Pedro Campos y Christian Vidal por sus aportes en la preparacin de los certamenes as como de las clases.
Claudio Gutirrez-Soto
Prlogo Estimados alumnos, el material que se presenta a continuacin est diseado para apoyar la asignatura de introduccin a la programacin que tienen como objetivo el lograr resolver problemas simples mediante un programa escrito en algn lenguaje de programacin. Como ustedes pondrn ver el conjunto de smbolos, instrucciones y estructuras presentes en un algoritmo o programa son fciles de identificar y aprender en relacin a su significado. La dificultad se presenta al intentar combinar lgicamente estas instrucciones y estructuras para que resuelvan un problema planteado. El objetivo general es resolver problemas bsicos a travs de la construccin de programas basados en algoritmos. Un algoritmo lo podemos definir como un conjunto de pasos lgicamente ordenados, escritos a travs de smbolos o en lenguaje natural. Lo podemos comparar con una receta de cocina, o con las instrucciones para armar un mueble, las instrucciones que vienen en un manual de un grabador de CD, por mencionar algunos ejemplos. La diferencia est en la precisin que deben tener cada una de las instrucciones de un algoritmo. Por ejemplo, no podemos indicar en un algoritmo, agregue sal a gusto, o apret esta tuerca pues son indicaciones poco precisas, que no pueden ser traducidas a una instruccin escrita en un lenguaje de programacin. En el diseo e implementacin de los algoritmos debemos indicar agregue 10 grs. de sal, o apret esta tuerca dando diez giros a la derecha. Es decir las instrucciones dadas en un algoritmo deben de ser precisas y no ambiguas. En este material desde el primer captulo se presentarn 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 mayora de los algoritmos o programas requiere que se le ingresen datos que sern transformados, convenientemente por el conjunto de instrucciones, en la salida que se esta solicitando. Es imprescindible poder identificar estos datos de entrada y la informacin de salida que se est solicitando. 3. Identificar las posibles restricciones o condiciones que se deben consideran para los datos de entrada. 4. Construccin del algoritmo o programa. Sin embargo, lo ms importante que podemos recalcar en la utilizacin de este libro, es que la adquisicin de la destreza para poder resolver un problema a travs de un algoritmo es paulatina y progresiva. Es decir, hay que ejercitar con el objeto de adquirir la lgica 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 travs de ejercicios. En dicho caso, nuestra herramienta es el computador, compilador y simuladores asociados.
Parte 0: Introduccin.............................................................................................................5 Programa ..........................................................................................................................5 Algoritmo ...........................................................................................................................6 Variables ...........................................................................................................................6 Concepto de Ciclo ..............................................................................................................13 Ciclo Mientras (expresin) ..............................................................................................13 Ciclo Repetir (instrucciones) Mientras ............................................................................13 Ciclo Para (variables de control): ....................................................................................14 Ejercicios parte 0: Construccin de algoritmos ...............................................................19 Parte 1: Estructura e instrucciones bsicas en el lenguaje C.............................................20 Funcin 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 Proposicin switch ..........................................................................................................34 Proposicin while ............................................................................................................38 Ejercicios parte 2: Ciclo while .........................................................................................41 Proposicin for ................................................................................................................42 Ejercicios parte 2 ciclos for .............................................................................................45 Proposicin do while ......................................................................................................46 PREGUNTAS DE CERTAMENES DE AOS ANTERIORES al 2008, REFERENTES AL MANEJO DE CICLOS Y EVALUACIONES LGICAS ...................................................47 Parte 3: Definicin de una funcin......................................................................................51 Pasaje de parmetros o argumentos ..............................................................................59 PREGUNTAS DE CERTAMENES DE AOS ANTERIORES al 2008, REFERENTES AL MANEJO DE FUNCIONES .............................................................................................61 Parte 4: Arreglos Unidimensionales ...................................................................................65 Inicializacin de arreglos.................................................................................................65 Cadenas o Strings...........................................................................................................67 Arreglos bidimensionales ................................................................................................69 Ejercicios Parte 4: Arreglos.............................................................................................72 PREGUNTAS DE CERTAMENES DE AOS ANTERIORES al 2008, REFERENTES AL MANEJO DE ARREGLOS, CADENAS Y MATRICES....................................................74 Parte 5: Estructuras ............................................................................................................82 Declaracin 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 parmetros de una funcin ................................................................85 Ejercicios parte 5: Estructuras ........................................................................................86 Parte 6: Punteros................................................................................................................89 Uso de typedef....................................................................................................................94 Soluciones a ejercicios planteados.....................................................................................95
Pgina : 4 Claudio Gutirrez-Soto, Manuel Crisosto,
PARTE 0: INTRODUCCIN
Conceptos bsicos
PROGRAMA
Un programa computacional, en trminos simples, consiste en una serie de pasos lgicamente escritos que permiten resolver un problema determinado, que a partir de datos de entrada obtiene informacin til para la toma de decisiones. Aprender a programar consiste, por un lado, en conocer las distintas instrucciones que un determinado lenguaje de programacin tiene, y ms importante an, escribir un conjunto de instrucciones en forma lgica para que la ejecucin de estas instrucciones permita dar respuesta al problema planteado. No basta con conocer las instrucciones existentes, se debe adquirir la lgica que permite utilizarlas con un fin especfico. La mayora de los problemas que se resuelven en el transcurso de un curso de programacin viene especificada mediante un enunciado. Los pasos necesarios para poder construir un programa que de respuesta al enunciado lo podemos resumir de la siguiente manera: Entender el problema Buscar soluciones Elegir solucin Disear solucin Implementar solucin Validar solucin La siguiente figura simplifica los pasos anteriores, para esto supongamos que queremos construir un programa que permita resolver la ecuacin de primer grado.
ax+b=0 a b
a0
Algoritmo EC 1er Grado Variables a,b,x de tipo entero Inicio Escribir(Ingrese valores de EC) Leer (a,b) Si a = 0 entonces escribir (Error) sino Inicio x=-b/a Escribir (La solucin es:,x) Fin Escribir(Fin programa) Fin
x= -b / a
#include <stdio.h> int a,b,x; main() { printf(Ingrese valores de EC); scanf(%d %d,&a,&b); if a ==0 printf (error); else { x = -b / a; printf(La solucin es %d:,x); } printf(Fin programa); }
El primer paso es entender que se est pidiendo, esto requiere de la mxima atencin, pues de lo contrario difcilmente 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 informacin de salida. Adems, se debe poder definir algunas restricciones, para este ejemplo que a debe ser distinto de cero. A continuacin se recomienda escribir un algoritmo que represente una aproximacin a la solucin final. Posterior a estos pasos se traduce el algoritmo a un lenguaje de programacin determinado.
ALGORITMO
Un algoritmo consiste en un procedimiento detallado, escrito en forma simblica o con lenguaje natural, para resolver un problema en pasos y en un tiempo finito. Algunas caractersticas de los algoritmos son: el algoritmo lleva desde un estado inicial a un estado final se especifican en base a operaciones bsicas 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 especficas de la memoria del computador. Estos datos pueden ser ingresados por ejemplo desde teclado (datos de entrada), o ser datos intermedios producto de alguna transformacin (procesamiento) para producir la salida requerida (informacin). Los lenguajes de programacin utilizan diversos tipos de datos los cuales determinan la cantidad de memoria a ocupar en el computador. Entre estos datos tenemos:
Para hacer uso de las posiciones de memoria donde se almacenan los datos se utilizan etiquetas o nombres. La etiqueta o nombre es un nemotcnico 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 posicin de memoria con el nombre suma, si se quiere calcular la ecuacin de primer grado, los datos de entrada conviene almacenarlos en las posiciones con nombre a, b; y el resultado de la evaluacin en x. Recordemos que para resolver un problema, se debe tener claro cuales son los datos de entrada y salida; adems de estos se pueden utilizar datos intermedios necesarios para el procesamiento. Todos estos datos se deben declarar, al inicio del programa o, como veremos ms adelante, al inicio de cada seccin del programa.
Salida:
Restricciones: Ninguna
Definicin de variables
Impresin de mensajes
Escribir (Mensaje 1)
Leer var1,x, y
Leer (var1, x, y)
a=3*x+ y b = a / var1
a=3*x+ y b = a / var1 Si a > b Entonces Inicio Instrucciones Fin Sino Inicio Instrucciones Fin Fin
Si a > b
Conector
Fin
Fin de algoritmo
Como hemos mencionado anteriormente, no basta con saber el significado de cada smbolo, debemos saber como combinar estos smbolos para producir un algoritmo que resuelva el problema planteado.
Introduccin a la Programacin Departamento de Sistemas de Informacin Universidad del Bo-Bo Ejemplo 0.2: El siguiente algoritmo, escrito utilizando diagrama de flujo permite sumar dos nmeros y
muestra el resultado por pantalla (o monitor) Entrada: Dos nmeros (x1 y x2) Salida: x1+x2 Restricciones: Ninguna Inicio int var1,var2 ,var3
var 1
En pseudos-cdigo: Algoritmo Suma Variables Entero var1, var2, var3 Inicio Escribir(Ingrese el primer valor) Leer (var1) Escribir(Ingrese el segundo valor) Leer (var2) var3=var1+var2 Escribir(El resultado es:,var3) Fin
El lenguaje C:
var 2 #include<stdio.h> int var1,var2,var3; main() { printf(Ingrese el primer valor:); scanf(%d,&var1); printf(Ingrese el segundo valor:); scanf(%d,&var2); var3=var1+var2; printf(El resultado es:%d,var3); }
var3=var1+var2
El resultado es : var3
Termino
Observacin: En los ejemplos de este apartado, incluiremos el cdigo en lenguaje C con el objetivo de que lo prueben, modifiquen, adapten, corrijan, etc.
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 (slo uno de estos mensajes) Restricciones: Edad no puede ser negativa, ni mayor a 200 (esto no es validado en este algoritmo).
En pseudos-cdigo: Algoritmo Edad Variables Entero edad Inicio Escribir(Ingrese su edad:) Leer (edad) Si (edad >= 18) Entonces Inicio Escribir(Usted es mayor de edad) Fin Sino Inicio Escribir(Usted es menor de edad) Fin Fin El lenguaje C: #include<stdio.h> int edad; main() { printf(Ingresesu edad:); scanf(%d,&edad); if (edad >= 18) { printf(Usted es mayor de edad); } else { printf(Usted es menor de edad); } }
Inicio
Entero Edad
Ingrese su edad
Edad
Edad >= 18
f
Usted es menor de edad
Termino
Del ejemplo anterior podemos observar que la bifurcacin permite seguir el flujo adecuado dada una condicin. La condicin que se evalan en una bifurcacin 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 condicin sea falsa, esto depender del problema que se este resolviendo. Tambin es posible que existan bifurcaciones contiguas.
Adems, cada expresin puede estar formada por una o ms proposiciones unidas por operadores lgicos, a estas expresiones les llamaremos expresiones compuestas. Ejemplo 0.4: Evaluacin de una expresin compuesta Asumamos la siguiente expresin: ((P1 and P2) or P3) and (not P3)) Para determinar la veracidad o falsedad de esta expresin debemos saber el valor de verdad de cada proposicin, la cual puede cambiar en el transcurso del tiempo. La tabla de verdad asociada a esta expresin 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 F F F F
V V F F V V F F
V F V F V F V F
V V F F F F F F
V V V F V F V F
F V F V F V F V
F V F F F F F F
Hasta ahora los algoritmos descritos son secuenciales, es decir se ejecuta una instruccin, y al trmino de sta se ejecuta la siguiente, excepto cuando existe una bifurcacin, en cuyo caso se podra saltar un grupo de instrucciones dependiendo de la evaluacin de la condicin. El control de ejecucin es siempre hacia delante. Existen aplicaciones en las cuales se requiere repetir un nmero determinado de instrucciones, en cuyo caso, una o ms instrucciones se ejecutarn de acuerdo a determinadas condiciones, a estas estructuras presentes en los algoritmos se les denomina ciclos.
Corresponde a la funcin modulo que entrega el resto de la divisin entre dos enteros.
Pgina : 12 Claudio Gutirrez-Soto, Manuel Crisosto,
CONCEPTO DE CICLO
Un ciclo es la repeticin de un conjunto de instrucciones. Dicho ciclo culmina cuando se cumple una condicin de trmino. El grupo de instrucciones se pueden ejecutar un nmero conocido o desconocido de veces.
CICLO MIENTRAS (EXPRESIN): Esta estructura se utiliza cuando se quiere repetir un conjunto de instrucciones mientras se cumpla una determinada condicin la cual es evaluada al comienzo del ciclo. El grupo de instrucciones se ejecutar como mnimo cero veces (la expresin evaluada es falsa), o una o ms veces (la expresin evaluada es verdadera, y se espera que esta cambie en el transcurso de la ejecucin del grupo de instrucciones)2. En el diagrama de flujo se utiliza la estructura de bifurcacin, y cuando termina de ejecutarse el grupo de instrucciones, el control del algoritmo retorna a la bifurcacin, producindose una nueva evaluacin de la expresin. El esquema siguiente ilustra la forma que toma este ciclo utilizando diagrama de flujo y pseudoscdigo.
Instruccin a
Instruccin N
Instruccin b
Ciclo Mientras
Instruccin a
Instruccin 1 Instruccin 2
expresin F Instruccin b
CICLO PARA (VARIABLES DE CONTROL): En este ciclo el nmero de veces que se repite el conjunto de instrucciones es conocido, y el control de la repeticin es asumido por un conjunto de variables de control. El esquema siguiente representa esta estructura en diagrama de flujo y pseudos-cdigo. Las variables de control se inicializan en un determinado valor, el cual aumenta o disminuye de acuerdo un salto definido, hasta llegar a un valor final.
Instruccin 1 Instruccin 2
Instruccin N Fin
Instruccin n
Instruccin b
Instruccin b
Ejemplo: Construir la tabla de multiplicar de un numero ingresado por teclado, partiendo desde cero. Entrada: x Salida: x*0, x*1, x*2, x*3..x*x Restricciones: No tiene
Inicio
Entero a,b
Leer (a)
Algoritmo Tabla de Multiplicar Variables Entero a,b Inicio Escribir (Ingrese un nmero entero:) Leer (a) b=0 Para (b=0; b<a; salto 1) Inicio Escribir (a,b,a*b) Fin Fin #include <stdio.h> Int a, b; main() { printf(Ingrese un nmero entero:); scanf(%d,&a); for(b=0;b<a;b=b+1) { printf(%d * %d = %d,a,b,a*b); } }
b0
b=0,b<a, inc 1
Escribir a, b, a*b
Fin
Inicio
Inicio
Leer (a,b)
Leer (a,b)
Si a < b
Si a > b
Escribir x, fx
Escribir x, fx
Fin
Fin
La primera solucin 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 solucin 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 continuacin se escribe los pseudo-cdigo de ambos diagramas de flujo y sus correspondientes programas en C.
Introduccin a la Programacin Departamento de Sistemas de Informacin Universidad del Bo-Bo Uso de bifurcacin y ciclo para
Algoritmo F(x) Variables Entero a,b,x Real fx Inicio Escribir(Ingrese los valores de a y b) Leer (a,b) Si (a<b) entonces Inicio Para (x=a, x<=b, inc 1) Inicio fx = (3*x*x+5*x-2) / 125 Escribir ( x, fx) Fin Fin Si no Inicio Escibir(a debe ser menor que b) Fin Fin
Equivalente en lenguaje C
#include<stdio.h> int a,b,x; flota fx; main() { printf(Ingrese los valores de a y b); scanf(%d,&a); scanf(%d,&b); if (a<b) { for (x=a;x<=b;x=x+1) { fx= (3*x*x+5*x-2) / 125; printf(%d %f, x,fx); } } else { printf(a debe ser menor que b) } } #include<stdio.h> int a,b,x; flota fx; main() { printf(Ingrese los valores de a y b); do { scanf(%d,&a); scanf(%d,&b); } while (a>b) for (x=a;x<=b;x=x+1) { fx= (3*x*x+5*x-2) / 125; printf(%d %f, x,fx); } }
EJERCICIOS
PARTE
0: CONSTRUCCIN
DE ALGORITMOS3
Construya los siguientes algoritmos 1. Que multiplique tres nmeros ingresados desde teclado y muestre el resultado 2. Que divida dos nmeros y muestre el resultado 3. Que muestre en forma ordenada tres nmero enteros ingresados desde teclado. 4. Que resuelva la ecuacin de primer grado y muestre el resultado 5. Que resuelva la ecuacin de segundo grado, para valores reales e imaginarios, y muestre el resultado. 6. Que permita sumar n nmeros y muestre el resultado. El valor de n debe ser ingresado por teclado al igual que los nmeros que se sumarn. 7. Que permita el ingreso de 15 nmeros y que cuente cuntos de los nmeros ingresados son pares. 8. Que permita el ingreso de 15 nmeros y que muestre el mayor, el menor y el promedio. 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 10. 12+22+32+ +N2 11. 1!+2!+3!++N! 12. 11+22+33+ +NN 13. -11+22-33+..+Nn, tal que N es par 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
FUNCIN
PRINTF()
La funcin 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.
COMENTARIOS
Los comentarios son una lista de caracteres desconocidos por el compilador, que tienen como objetivo fundamental el hacer referencias, documentacin o acotaciones a lneas de cdigos o al programa general, la forma de utilizarlos es: /* Este es un comentario, el cual generalmente involucra 2 o ms lineas de cdigo */ // Este es otro comentario que involucra 1 sola lnea de comentario Ahora veremos como se utilizan la lista de argumentos del printf( ). Ejemplo 1.3: Aqu se muestran los diferentes caracteres (argumentos) asociados a los tipos de datos para su correspondiente impresin. #include<stdio.h> Se imprimir lo siguiente en pantalla: main() { El valor del entero es : 1 int entero=1; // declaracin de una variable entera El valor del flotante es : 1.56356789; // llamada entero, con valor 1. El valor del carcter es : a float comaflotante =1.56356789; Esta es una cadena char caracter=a; char cadena[]= Esta es una cadena; printf(El valor del entero es : %d \n, entero); printf(El valor del flotante es : %f \n, comaflotante); printf(El valor del carcter es : %c \n, caracter); printf( %s \n, cadena);
Pgina : 21 Claudio Gutirrez-Soto, Manuel Crisosto,
Otro ejemplo, donde podemos utilizar las opciones de visualizacin de las variables, es el siguiente Ejemplo 1.4 #include<stdio.h> main() { float i=56.111111111; printf(El valor de i es : %f printf(El valor de i es : %5f printf(El valor de i es : %15f printf(El valor de i es : %.1f printf(El valor de i es : %.5f printf(El valor de i es : %.0f printf(El valor de i es : %e getchar(); } Se imprimir lo siguiente en pantalla : El valor de i es : 56.111111 El valor de i es : 56.111111 El valor de i es : 56.111111 El valor de i es : 56.1 El valor de i es : 56.11111 El valor de i es : 56 El valor de i es : 5.61111e+01
Ejemplo 1.5: En este ejemplo se muestran los caracteres de control, salto de lnea, retoceso y tabulacin. #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); } Esto imprimir lo siguiente : Estos han sido unos EXCELENTES EJEMPLOS *** *** *** *** ***
Pgina : 22 Claudio Gutirrez-Soto, Manuel Crisosto,
DEFINE
El uso de define, se utiliza para declarar variables con un valor fijo (tambin denominada constante), el cual puede ser utilizado en el resto del programa. Las lneas de control con #define se pueden presentar de varias formas. Por ejemplo: #define STRING "Este es un ejemplo" #define SEGUNDOS_AL_DIA (60 * 60 * 24) 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 lnea #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*/ En trminos generales, las constantes simblicas ayudan en la documentacin al reemplazar lo que de otra forma sera una constante enigmtica con un identificador nemotecnico, hacen ms porttil el programa al permitir que se alteren en un solo lugar las constantes que pueden ser dependientes del sistema, y mejoran la confiabilidad al restringir a un solo lugar la verificacin de la representacin real de la constante. 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
main() { float radio; printf(Ingrese el radio \n); scanf(%f,&radio); printf(El rea del crculo es : %f \n, PI * radio * radio); getchar(); } El programa del ejemplo calcular el rea del crculo, reemplazando PI, por el valor flotante 3.1415
INCREMENTO
DECREMENTO
En C, existen los operadores matemticos de incremento y decremento, los cuales aumentan y disminuyen el valor actual de una variable en 1. El operador de incremento es : ++ El operador de decremento es: --
Ejemplo 1.11 En este ejemplo se muestra la diferencia de aplicar los operadores de incremento antes y despus de la variable. #include<stdio.h> main() { int i=2,j=2,a,b; a=-2*i++; b=-2*++j; printf(El valor de a es: %d y el de i es: %d \n,a,i); printf(El valor de b es: %d y el de j es: %d \n,b,j); getchar(); }
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 despus de las variables que se incrementan o decrementan.
OPERADORES
++ (incremento) * (multiplicacin) +(suma) = (asignacin) -- (decremento) / (divisin) (resta) - (unario) %(mdulo)
Como mencionamos previamente, existe una diferencia entre : ++i; otros operadores de incremento y decremento.
EJERCICIOS
Crear los siguientes programas: 1. 2. 3. 4. 5. Ingresar dos nmeros y multiplicarlos. Ingresar el radio de una circunferencia y calcular su permetro. Ingresar el largo y ancho de un rectngulo y calcular el rea y permetro. Ingresar el radio y el alto para obtener el volumen de un cilindro. Ingresar cuatro nmeros, obtener la suma, multiplicacin y promedio.
LA
ESTRUCTURA DE CONTROL IF
La estructura de control if permite bifurcar la ejecucin de instrucciones en dos caminos Sintaxis : if (expresin) sentencia V // se ejecutan estas sentencias si evaluacin de la expresin es verdadera else sentencia F // se ejecutan estas instrucciones si la evaluacin de la expresin es falsa donde: expresion TipoOperador Proposicion1 TipoOperador Proposicion2 TipoOperador ....ProposicionN Operador lgico OperadorMatemtico OperadorRelacional.
Ejemplo 2.1: Ingrese 2 nmeros y muestre la divisin : 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);
Pgina : 28 Claudio Gutirrez-Soto, Manuel Crisosto,
Ejemplo 2.8 Este ejemplo al igual que el anterior, se ingresan tres nmeros 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 nmero \n); scanf(%d, &a); printf(Ingrese el segundo nmero \n); scanf(%d, &b); printf(Ingrese el tercer nmero \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 nmero mayor es %d y el menor es %d n, max,min); }
PROPOSICIN
SWITCH
switch es una proposicin condicional mltiple que generaliza a la proposicin if-else. Lo siguiente es la estructura del switch switch (expresin) { case 'caso_1': sentencias; break; case 'caso_2': sentencias; break; case 'caso_3': sentencias; break; case 'caso_N': sentencias; break; default: sentencias; } Obsrvese que la proposicin switch est encerrada entre llaves. Despus de evaluar la expresin, el control salta a la etiqueta apropiada (al correspondiente case). Todos los case son exclusivos, es decir reflejan un caso particular. Por lo comn, la ltima proposicin antes de la siguiente case es break. Con este break nos aseguramos que la ejecucin del caso termine all. Si no hay una proposicin break, la ejecucin 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 proposicin etiquetada default. Esto indica que si la evaluacin de switch no coincide con ninguna etiqueta, entonces toma en cuenta el default.
PROPOSICIN
WHILE
Es una construccin de la forma: while (expresin) proposicin(es) a repetir proposicin que no se repite
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 nmero 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).
EJERCICIOS
PARTE
2: CICLO
WHILE
1.- Crear un programa que calcule: 12+22+32+42+...+n2 2.- Crear un programa que calcule : (n)= 11+22+33+44+...+nn 3.- Crear un programa que calcule: 1!+2!+3!+4!+...+n! 4.- Crear un programa que calcule. 10+21+32+43+54 +...+Nn-1 5.- Crear un programa donde se ingresen 15 nmeros y muestre el mayor de todos. 6.- Crear un programa donde se ingresen 20 nmeros y muestre el mayor y el menor. 7.- Crear un programa que calcule: (a b)= a!/(b!-a!). 8.- Crear un programa donde se ingresen 15 nmeros y contar cuantos son pares. 9.- Analizar el siguiente programa. #include<stdio.h> main() { int valor,contpares=0,i; i=50000; while(i); i--; printf( Fin del programa \n); }
10.- Analizar el siguiente programa. #include<stdio.h> main() { int i; i=1; while(i) printf( El valor de i es : %d\n",i); i++; }
PROPOSICIN
Sintaxis:
FOR
for (expresin1 ; expresin2 ; expresin3) proposicin verdadera; proposicin siguiente; o for (expresin1 ; expresin2 ; expresin3) { proposicin verdadera1; proposicin verdadera2; . proposicin verdaderaN; } proposicin siguiente; Primero se evala expresin1 (lo usual es que expresin1 inicie el ciclo); despus, se evala expresin2, si la expresin 2 es verdadera (o posee un valor distinto de 0) entonces se ejecuta la proposicin verdadera o el conjunto de expresiones verdaderas. Note que el conjunto de expresiones verdaderas est compuesto por ms de una expresin verdadera y por lo tanto debe de llevar las llaves { }. Posterior al ejecutar la proposicin o proposiciones verdades, entonces se ejecuta la expresin 3, la cual generalmente aumenta o disminuye la variable, o variables que condicionan el ciclo. Posteriormente se vuelve a evaluar la expresin2, si esto es verdadero se vuelve a ejecutar la proposicin o conjunto de proposiciones verdaderas, donde posteriormente se evalua la expresin3. Note que la expresin1, slo se ejecuta la primera vez, luego la expresin2 y expresin3 se peueden ejecutar muchas veces mientras la expresin 2 sea verdadera. Finalmente, si la expresin2 es falsa (o posee un valor 0), entonces se ejecuta la proposicin 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(); }
Introduccin a la Programacin Departamento de Sistemas de Informacin Universidad del Bo-Bo Ejemplo 2.17: Crear un programa que calcule el factorial de un nmero 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 nmero 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 nmeros negativos no existen \n); }
Ejemplo 2.18: Crear un programa que resuelva lo siguiente: 1+2+3+4+5+6+7+8+...+n , utilizando ciclos for Entrada : n Salida : 1+2+3+4+5+..+(n-1)+n Restricciones: n > 0 #include<stdio.h> main() { int i,n,suma=0; printf(Ingrese el nmero para calcular la sumatoria \n); scanf(%d,&n); if(n>0) { for(i=1,suma=0;i<=n ; i++) suma=suma+i; printf(El resultado de la sumatoria es %d \n,suma); } else printf(El nmero que ingreso es incorrecto\n); }
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 nmero que no es mayor que 0 \n); }
Ejemplo 2.20: Crear un programa que calcule: 11+22+33+44+...+nn Entrada : n Salida : 11+22+33+44+...+nn Restricciones: n > 0 #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 nmero ingresado no es mayor que 0 \n); }
EJERCICIOS
PARTE
CICLOS FOR
20. Crear un programa que calcule lo siguiente: n i ( (2*i)/j ) i=1 j=1 21. Crear un programa que calcule: n i (2*j)i i=1 j=1 22. Crear un programa donde se ingresen 50 nmeros, muestre el mayor, menor, y cuantos de ellos son mltiplos de 5.
PROPOSICIN
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 nmeros y pueda ejecutar cualquiera de las operaciones basicas. Si se desea salir se debe ingresar 0. Entrada : x1,x2, opcin Salida : Mensaje 1: x1 opcin x2 Mensaje 2: No se puede dividir por cero (en caso que se quiera dividir dos nmeros) Restricciones: Si se divide, x2 no puede ser cero No se puede ingresar una opcin 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 vlido \n"); } printf("Ingrese 0 para terminar y cualquier nmero para continuar \n"); scanf("%d",&opcion); }
Pgina : 46 Claudio Gutirrez-Soto, Manuel Crisosto,
PREGUNTAS DE CERTAMENES DE AOS ANTERIORES 2008, REFERENTES AL MANEJO DE CICLOS EVALUACIONES LGICAS
AL
A continuacin se lista algunas preguntas que se encuentran en certamenes anteriores, ests preguntas estn con sus respuestas al final del apunte. PCR23.- Pregunta 1. Primer Certamen, Segundo Semestre 2007, 10 ptos. Dada la siguiente expresin: !( k>=j || k<=5) && (!(j=j-1 > k ) && ((i+1)==j/2))
Evale los valores de verdad (es decir, si el resultado es verdadero o falso) tanto al interior de cada parntesis, como en la expresin 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
ALGORITMO uno { int i,stop=1,cont,N printf Ingrese N scanf N for(i=1, cont=0;i<=N && stop !=0 ;i=i+1) { if (!(i/2)) printf 1 cont=cont+1 if(cont==3) stop=0 else printf 0 } }
Introduccin a la Programacin Departamento de Sistemas de Informacin Universidad del Bo-Bo PCR25. Pregunta 2. Primer Certamen, Segundo Semestre 2006, 25 ptos
Dado los siguientes algoritmos, obtenga los valores de las variables que aparecen en la tabla en cada iteracin, para un valor inicial de N=3
int i,j,suma1,suma2 Imprimir(Ingrese N) 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) } }
N 3
suma1
suma2
A continuacin se lista algunas preguntas que se encuentran en certamenes anteriores, ests preguntas estn propuestas, por lo que el alumno las debe de tratar de resolver. PCP 1.- Pregunta 3. Primer Certamen, Segundo Semestre 2006, 35 ptos
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 . int i, pot, exp for(i=1;i<=N;i=i+1) { pot=1 for(exp=1; exp<=i;exp=exp+1) { pot=pot*i } if(i%2!=0) printf i, exp-1, pot*(-1) else printf i, exp-1, pot }
pot
exp
Imprime:
Introduccin a la Programacin Departamento de Sistemas de Informacin Universidad del Bo-Bo PCP 2.a)
int i,j,suma=0,stop=1,N printf Ingrese N scanf N for(i=1;i<=N && stop !=0 ;i=i+1) { for(j=1;j<=i && stop !=0 ; j=j*2) if(j==(N/2)) stop=0 else suma=suma+i+j } print El resultado es suma
Dado los siguientes algoritmos, obtenga los variables que aparecen en la tabla en cada iteracin.
valores
de
las
N 4
stop
suma
b)
int i,j,k,N printf Ingrese N 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 N i j k printf
Introduccin a la Programacin Departamento de Sistemas de Informacin Universidad del Bo-Bo PCP 4 .- Pregunta 1.2. Test 2, Primer Semestre 2006, 10 ptos Considere el siguiente programa en lenguaje C:
#include <stdio.h> int main(){ int n,i; printf("Ingrese un nmero\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) 1 b) 5 c) 10 d) 11 e) Ninguno de los anteriores
Para un caso general, este resultado es intuitivamente obvio. Se tarda ms tiempo en resolver un problema difcil. Se ha encontrado otra propiedad interesante, a partir de la experimentacin sobre la resolucin humana de problemas. Se trata de lo siguiente: C(p1 + p2) > C(p1) + C(p2) 1.c
La ecuacin 1.c indica que la complejidad de un problema compuesto por p1 y p2 es mayor que la complejidad total cuando se considera cada problema por separado. Considerando la desigualdad 1.c y la condicin implicada por las desigualdades 1.a y 1.b, se deduce que: E(p1+p2) > E(p1) + E(p2) 1.d
Esto nos lleva a una conclusin del tipo "divide y vencers". Por consiguiente deberemos considerar las funciones como "CAJAS NEGRAS", las cuales se encargaran de ejecutar una tarea especfica. Por lo tanto deberemos concentrarnos en el "Diseo Global de programa" en lugar de los detalles. La estructura de una funcin es como sigue: tipo_de_funcion nombre_de_la_funcion (argumentos) { Cuerpo de la Funcin return(variable valor); /* opcional solo cuando la funcin es de tipo void*/ }
Ejemplo 3.1 Crear un programa utilizando funciones donde se sumen dos nmeros. 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 funcin suma. Las variables locales slo tienen existencia durante la ejecucin de la respectiva funcin. Pueden existir variables locales con el mismo nombre en distintas funciones las cuales estarn 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 parmetros y el //valor devuelto por la funcin es asignada a la variable result. printf("El resultado es : %d \n",result); } int suma(int a,int b) { return(a+b); } Ejemplo 3.2: Una forma distinta para el problema anterior est dado por el siguiente programa. Note que en la funcin suma, las variables a,b no han sido declaradas porque son argumentos (declaracin implcita por los argumentos), slo 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);
Pgina : 53 Claudio Gutirrez-Soto, Manuel Crisosto,
Ejemplo 3.5: Otra forma para el mismo problema 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 nmero \n"); scanf("%d",&valor1); printf("Ingrese un segundo valor \n"); scanf("%d",&valor2); mayor(valor1,valor2); } void mayor(int a,int b) { if(a>b) printf("El nmero mayor es %d \n",a); else printf("El nmero mayor es %d \n",b); } Ejemplo 3.6: Crear un programa que calcule la suma, resta, multiplicacin o divisin segn seleccin del usuario, utilizando funciones. Entrada: a,b,opcion Salida: a+b, o a-b, o a*b, o a/b Restricciones: Si la opcin es divisin 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;
Pgina : 55 Claudio Gutirrez-Soto, Manuel Crisosto,
float suma(float a,float b) { return(a+b); } float resta(float a,float b) { return(a-b); } float mutltiplicacion(float a,float b) { return(a*b); } float division(float a,float b); { return(a/b); }
Pgina : 56 Claudio Gutirrez-Soto, Manuel Crisosto,
Ejemplo 3.7: Crear un programa que calcule ab , utilizando funciones. 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); } float potencia(int base, int exp) { int i; float pot; if(exp>=0) for(i=1,pot=1.0 ; i<=exp ; i++) pot=pot*base; else{ for(i=1,pot=1.0 ; i<= (-1*exp) ; i++) pot=pot*base; pot=1/pot; } return(pot); } N Ejemplo 3.8: Crear un programa, slo 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);
Pgina : 57 Claudio Gutirrez-Soto, Manuel Crisosto,
PASAJE
DE PARMETROS O ARGUMENTOS
Los valores que se le entregan como entrada a las funciones se conocen como prametros. Por ello, al momento de utilizar o llamar una funcin, se indica el nombre de la funcin junto con los prametros reales (valores especficos). Tambin es importante acotar que algunas funciones no podran llevar argumentos, por lo que en ese caso los parntesis de la funcin pueden quedar vacias. Cuando un programa llama a una funcin la informacin importante se comunica a travs de la lista de parmetros y se establece una correspondencia automtica entre los parmetros reales y formales. Los parmetros reales son sustituidos por los parmetros formales y estos son los utilizados. #include <stdio.h> int f , a, b; /* variables globales*/ int suma(int c,int d); /*prototipo*/ main() { scanf(%d,&b); scanf(%d,&a); f = suma(a,b ); // a y b corresponden a los ... // parmetros reales } int suma(int c, int d) // c y d corresponden a // los parmetros formales { return (c+d); }
Existen mtodos diferentes para el paso de parmertos a funciones. Es preciso conocer la disponibilidad y la forma en que los lenguajes de programacin apoyan este concepto. Un mismo programa puede producir distintos resultados bajo diferentes formas de paso de parmetros.
Pgina : 59 Claudio Gutirrez-Soto, Manuel Crisosto,
Como ejemplo se pide comparar los siguientes cdigos: Por valor ... int a, b, c; a=5; b=6; c=20; sumar(a,b,c); printf( el valor de c es %d, c); ... } void sumar(int x, y, z) { z = x + y; } Por referencia ... int a, b, c; a=5; b=6; c=20; sumar(a,b,&c); printf( el valor de c es %d, c); ... } void sumar(int x,y,* z) { *z = x + y; }
AL
A continuacin se lista algunas preguntas que se encuentran en certamenes anteriores, ests preguntas estn con sus respuestas al final del apunte. PCR31.- Pregunta 4. Segundo Certamen, Primer Semestre 2006, 20 ptos.
Realice el seguimiento del siguiente programa. Indique en la tabla los valores que toma cada variable. #include <stdio.h> int n,j; int funcionX(int x); main() { for (j=4;j<=9;j++) { if (funcionX(j)==j) printf ("\n %d Si es !!",j); } } /* 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) } main() Monitor funcionX i sum
j 4
2!*3!*4!*...* (i + 1)!
i =1
1 * 3 * 5 * ... * (2i 1)
S =
1 * 3 * 5 * 7 * 9 * L * (2i 1) 4 * 8 *12 * L * 4i i =1
n
Introduccin a la Programacin Departamento de Sistemas de Informacin Universidad del Bo-Bo PCR35.- Pregunta 3. Segundo Certamen, Primer Semestre 2006, 25 ptos. Construya un programa que permita calcular la sumatoria de la siguiente funcin evaluada en el intervalo [a,b] de tipo entero, ingresado desde teclado. b F(X) i=a X3 5x Si x >5 X5 F(X) X2 + 3x X1 -(x2 + 10x) 25 Si 1 < x <= 5 Si x <= 1
i i+2 (i + 1)! i =0
n
Este programa debe incorpora el uso de funciones creadas por Usted (no se permite el uso de funciones existentes en las libreras del C).
A continuacin se lista algunas preguntas que se encuentran en certamenes anteriores, ests preguntas las deben de resolver los alumnos. PCP37.- Pregunta 3. Segundo Test, Segundo Semestre 2007, 25 ptos.
Construir una funcin en C que permita DEVOLVER la suma de los primeros K trminos de la serie:
S = 2+
x x x x + + ... 3 4 5 6
Introduccin a la Programacin Departamento de Sistemas de Informacin Universidad del Bo-Bo PCP38.- Pregunta 4. Segundo Test, Segundo Semestre 2007, 15 ptos.
Qu imprime en la salida estndar? DEBER JUSTIFICAR SU RESPUESTA #include <stdio.h> /* Prototipo de funciones */ int adivina(int, int); int main() { int a, b, resultado;
printf( "Valor 1 = "); scanf("%d", &a); printf( "Valor 2 = "); scanf("%d", &b); resultado = adivina(a,b); printf( "a = %d\n", a); printf( "Resultado = %d\n", resultado); return 0; } int adivina(int a, int b) { if (a < b) a = b; return a; }
Dicho arreglo podra haber sido representado por una definicin de 8 variables de tipo char. Cabe destacar adems que los arreglos comienzan en el ndice 0. Para declarar un arreglo se sigue la siguiente sintaxis. Tipo_Dato Nombre _Variable[Cantidad_Elementos ];
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.
INICIALIZACIN
DE ARREGLOS
Para inicializar un arreglo se sigue la siguiente sintaxis: Tipo_Dato Nombre_Variable[ Cantidad_Elementos]={ valor1, ... , valorN }; int Ejemplo[4]={5, 4, 3, 2 }; Se inicializa el arreglo con los valores especificados entre { }
Pgina : 65 Claudio Gutirrez-Soto, Manuel Crisosto,
Ejemplo 4.2: Ingresar 10 elementos utilizando arreglos y mostrar el mayor. 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 nmero mayor es %d \n",mayor); }
CADENAS
STRINGS
Los strings o cadenas son arreglos unidimensionales de tipo char. Por convencin, un string en C se termina con el carcter 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 tamao 4, donde el ltimo elemento es el carcter nulo \0.
ARREGLOS
BIDIMENSIONALES
Un arreglo multidimensional, es un arreglo de arreglos. Una matriz es un arreglo bidimensional. Declaracin de una matriz: int arreglo[filas][columnas]; int a[5][5],m[10][4],i,j,f,c // nombre del arreglo y dimensin Ejemplo: int arreglo[5][3]; Su representacin es: columna 1 0 Fila 1 Fila 2 Fila 3 Fila 4 Fila 5 0 1 2 3 4 columna 2 1 columna 3 2
Diagonal Principal
f=c
Diagonal Secundaria
f+c = Dim - 1
afc
Ejemplo 4.9: Crear un programa donde se introduzca 2 matrices de 4x4 y que entregue el resultado de la suma de ambas matrices: Entrada: Ingreso de valores para dos matrices de 4X4 Salida: Muestra el resultado de la suma de ambas matrices Restricciones: ninguna #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]); } } printf(Ingrese los valores de la segunda matriz \n); for(fila=0;fila<4;fila++) { for(columna=0;columna<4;columna++) {
Pgina : 71 Claudio Gutirrez-Soto, Manuel Crisosto,
Las matrices son positivas. 11.- Crear una funcin que verifique si una matriz es positiva. 12.-Crear una funcin que realice el producto escalar de dos vectores 13.- Crear una funcin que verifique si una matriz es una matriz superior. 14.-Crear una funcin que verifique si una vector de (1x3), est contenido en una matriz de (3x3) de enteros.15.-Crear una funcin que sea capaz de intercambiar 2 filas dos columnas de una matriz de 4x4.16.- Crear una funcin que analice sintaticamente si un arreglo contiene los sigiuientes valores ASCII: 0-9 , ( , ) , + , - , * , / .
PREGUNTAS DE CERTAMENES DE AOS ANTERIORES AL 2008, REFERENTES AL MANEJO DE ARREGLOS, CADENAS Y MATRICES
A continuacin se lista algunas preguntas que se encuentran en certamenes anteriores, ests preguntas estn con sus respuestas al final del apunte. PCR41.- Pregunta 4. Segundo Certamen, Segundo Semestre 2007, 20 ptos.
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 OBS. Deber justificar su respuesta con una tabla de seguimiento #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; } char adivina_que_hago(char x[]) { int v[5]={0,0,0,0,0}, i, k, p, m; char a[] = {'a','e','i','o','u'}; i = 0; while (x[i] != '\0') { if (x[i] == 'a') k = 0; if (x[i] == 'e') k = 1; if (x[i] == 'i') k = 2; if (x[i] == 'o') k = 3; if (x[i] == 'u') k = 4; v[k]+=1; i++; } for(m=v[0], p=0, i=1; i < 5; i++) { if (v[i] > m) { m = v[i]; p = i; } } return a[p]; }
( w1 v1 ) 2 + ( w2 v 2 ) 2 + ... + ( wn v n ) 2
PCR49.- Pregunta 3. Segundo Certamen, Segundo Semestre 2007, 30 ptos.
Dados los siguientes arreglos, cuenta_corriente (tamao Nx5) y depsitos (tamao Mx11) tal que M>=N, crear una funcin que muestre el estado de la cuenta para un mes en particular. La nomeclatura para el arreglo cuenta_conrriente es el siguiente: 1 4 7 2 5 8 3 6 9 A B C
Este arreglo no tiene elementos repetidos (no existen cdigos de cuentas repetidas, cada fila corresponde a una cuenta). La nomeclatura para el arreglo depsitos es la siguiente: 0 1 4 1 7 1 2 5 2 8 2 3 6 3 9 3 4 A B A C 5 1 1 2 2 6 0 1 1 0 7 1 2 1 0 8 2 0 0 1 9 0 0 0 0 10 0 0 0 0
La columna con ndice 0 al 4 corresponde al cdigo de la cuenta, mientras que la columna 5 corresponde al mes, y del ndice 6 al 10 corresponde a los valores (note que siempre son positivos). Crear una funcin que dado un cdigo busque en la matriz depsitos el total de depsitos. Por ejemplo, para 123-A, debera de mostrar 12.000. Puede utilizar la funcin llamada atoi() que transforma un arreglo a enteros. Tambin puede utilizar la funcin strcmp.
A continuacin se lista algunas preguntas que se encuentran en certamenes anteriores, ests preguntas las deben de resolver los alumnos.
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; printf(No existe elemento); } int funcion1(int array[],int elem, int N) { int i, cont; Pgina : 78 Claudio Gutirrez-Soto, Manuel Crisosto,
Introduccin a la Programacin Departamento de Sistemas de Informacin Universidad del Bo-Bo PCP46.- Pregunta 1. Segundo Test, Primer Semestre 2006, 20 ptos.
Considere el siguiente programa en lenguaje C: #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-2; i++) for (j=i+1;j<=N-1; j++) if (arr[i]>arr[j]) { aux=arr[i]; arr[i]=arr[j]; arr[j]=aux; } for (i=0;i<N;i++) printf("pos %d = %d\n",i,arr[i]); return (0); } Al ejecutar este programa, lo que se imprime en pantalla es: a) b) c) d) pos 0 = 12 pos 0 = 12 pos 0 = 30 pos 0 = 40 pos 1 = 20 pos 1 = 20 pos 1 = 40 pos 1 = 30 pos 2 = 25 pos 2 = 25 pos 2 = 25 pos 2 = 25 pos 3 = 30 pos 3 = 40 pos 3 = 20 pos 3 = 20 pos 4 = 40 pos 4 = 30 pos 4 = 12 pos 4 = 12 e) Ninguna de las anteriores
Introduccin a la Programacin Departamento de Sistemas de Informacin Universidad del Bo-Bo PCP48.- Pregunta 3. Examen, Primer Semestre 2006, 25 ptos.
Construir un programa en C que permita llenar una matriz de 5X5 y un vector de capacidad 5, con nmeros enteros ledos desde teclado, luego deber imprimir en la salida cuntas veces se encuentra el vector en la matriz por fila y por columna, en el mismo orden. Por ejemplo, sea la matriz: 1 2 3 1 2 1 1 3 1 2 1 2 2 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1
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 dgito de control la letra X, de lo contrario el dgito de control viene dado por el valor obtenido de la ecuacin. Se pide construir un programa en C que permita leer un nmero ISBN y permita determinar si es un nmero ISBN correcto o no. NOTA. Para decidir si un nmero ISBN es correcto o no se compara el dgito de control ingresado con el que se obtiene con la ecuacin anterior. - Asuma que en la primera parte del ISBN (los primeros nueve caracteres), siempre son caracteres numricos. - Por ejemplo: 2 3 7 6 5 4 1 2 3 - X
Introduccin a la Programacin Departamento de Sistemas de Informacin Universidad del Bo-Bo PCP49.1.- Pregunta 2. Examen Repeticin, Primer Semestre 2007, 35 ptos.
Construya un programa en C que determine si una matriz de n x n ingresada por teclado cumple con la siguiente caracterstica: 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. Adems 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 M[5][5] 1 2 5 20 4 4 0 0 3 1 2 18 6 2 3 144 14 9 10 53
Su programa debe determinar si al ingresar por teclado cualquier matriz de n x n cumple con estas caractersticas.
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 informacin relacionada. Las variables "campos" que abarca la estructura se llaman elementos de la estructura. En general cada elemento de la estructura est relacionada logicamente con los otros. Ejemplo 5.1: Definicin de una estructura para almacenar datos bsicos 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. Obsrvese que la definicin termina con un ; . Esto es debido a que la definicin de una estructura es una sentencia. Note que los campos dentro de una estructura no requieren ser del mismo tipo de dato. El nmero de estructuras y el nmero de campos depender del problema a resolver, Hasta este punto no se han declarado variables, slo se han definido las formas de los datos.
DECLARACIN
Sintaxis:
DE
VARIABLES
DE TIPO ESTRUCTURA
struct nombre_estructura var1,var2,.... ,varN; o struct nombre_estructura{ Elementos de estructura }var1,var2,....,varN; Ejemplo 5.2: Definicin de variables struct usuario user1, user2; Aqu hemos definidos 2 variables de tipo estructura llamadas user1 y user2. Otra forma de poder haber hecho esto seria: struct usuario{ char nombre[30]; char calle[40]; char cuidad[20]; char region[3]; char fono[7]; int edad; } user1,user2;
REFERENCIA
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);
ARREGLOS
DE ESTRUCTURAS
Supongamos nuestra estructura: struct usuario y que deseamos declarar N usuarios, se sucitaria lo siguiente: 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. struct usuario user[N]; lo cual es equivalente (a esta forma de almacenamiento en memoria principal se le denomina tabla). 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); }
ESTRUCTURAS
EN LAS FUNCIONES
Fuciones de tipo estructura Son las funciones que devuelven datos de tipo estructura. Sintaxis: struct nombre_estructura nombre_funcion(parametros) { } Ejemplo 5.4: En este ejemplo se crea una estructura que alamcena los elementos de los nmero complejos, osea el valor real y el imaginario. struct complejos{ float real; float imaginario; }; typedef struct complejos COMPLEX; COMPLEX asignar(float Real , float Imag) { COMPLEX a; a.real=Real; a.imaginario=Imag; return(a); }
ESTRUCTURAS
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); }
EJERCICIOS
PARTE
5: ESTRUCTURAS
1.- Crear una funcin que maneje los complejos y una funcin que asigne valores a las variables reales e imaginarias. 2.- Crear una funcin que realice la suma de complejos y retorne el resultado. 3.-Crear una funcin que realice la multiplicacin complejos y retorne el resultado. 4.- Definido lo siguiente. struct Facultad FAC[15]; trabajo TRAB[15]; calidad CAL[15]; Personal PER[300]; Adems suponga que dichas estructuras ya poseen informacin. Crear una funcin que muestre a las personas que trabajan en la facultad de ingeniera. 5.- Crear una funcin que cuente la cantidad de personas de una determinada facultad. 6.- Crear una funcin que muestre a las personas de acuerdo a un determinado trabajo y a una determinada facultad. 7.-Transformar las siguientes tablas a estructuras. FACULTADES CodCarreraF FI FMF FA FC FM Descripcion Facultad de Ingeniera Facultad de Mat. y Fisica Facultad de Administracin Facultad de Ciencias Facultad de Medicina TRABAJO CodTrabajo Decano Encargado DocenteC DocenteA Director Secretaria Auxiliar Descripcin Decano Encargado de un bien Docente de Ctedra Docente Ayudante Director de Depto. Secretaria Auxiliar
PERSONAL CodCarreraF FI FI FI FMF ... Rut 1111-1 1112-1 1113-1 1114-1 ... Nombre Juan Prez Daniel Molina Marcelo Cceres Ivan Oyarzo ... CALIDAD CodCalidad Directivo Docente Secretario Auxiliar Descripcin Director de Departamento Escuela Profesor Secretaria Auxiliar CodTrabajo DocenteC DocenteC Director Auxiliar ... CodCalidad Docente Docente Directivo Auxiliar ... Sueldo 48 45 56 28 ...
PARTE 6: PUNTEROS
Un puntero es una variable que hace referencia a una direccin de memoria Sintaxis: Tipo_Dato *nombre_variable_puntero; Ejemplo: int *p; Asignacin de Direccin nombre_puntero=&variable; El carcter & delante de una variable indica que lo se est accediendo es a la direccin de memoria de dicha variable. Ejemplo: int *p; p=0; /* p posee la direccin NULL 0*/ p=NULL; /* p posee la direccin NULL 0*/ p=&i; /*p apunta hacia i conteniendo la direccin de i */ p=(int )1501; /*direccion absoluta de memoria */ " Si p es un puntero, entonces *p es el valor de la variable a la que apunta ." Ejemplo 5.1: double x,y,*p; p=&x; y=*p; Lo anterior es equivalente a : y=*&x; y=x; Inicializacin Sintaxis: tipo_dato *nombre_puntero=&variable; Ejemplo: int i=7,*p=&i;
Expresin P==&i **&p R=&x 3*-*p/*q+7 3*-*p/*q+7 (r=&k)=*p**q Llamada por valor Mx(a,b) Int a,b; { return((a>b)?a:b); } Llamado por referencia Mx(a,b,m_ptr) Int a, b,*m_ptr; { *m_ptr=(a>b)?a:b; }
Aritmetica de punteros
La aritmtica de puntero proporciona una opcin para la indizacin de arreglos, las proposiciones p=a+1; Sumar un arreglo: suma=0; for(p=a; p<&a[TAM];++p) suma+=*p; o suma=0; for(i=0;i<TAM;++i) suma+=*(a+i); Debido a que a es un puntero constante, las expresiones como: a=p; ++a; a+=2; = p=&a[1];
Son ilcitas, no se puede cambiar la direccin de a. Expresiones apuntadoras como p+1, ++p y p+=i son vlidas. Double a[ ]; = double*a;
Cadenas
Las cadenas son arreglos unidimensionales de tipo char, Por convencin, una cadena en C se termina con centinela de fin de cadena carcter 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
Expresiones equivalentes ab[i][i] *(b[i]+j) (*(b+i))[j] *((*(b+i))+J) (&b[0][0]+5i+j) Al definir la funcin, en el encabezamiento, la declaracin: Int (*v)[5]; Int c[7][9][2]; C[i][j][k] = (&c[0][0][0]+9*2+i+2*j+k) = int v[ ][5];
Ejercicios de punteros
1.- Cul es el valor de *p y *(p+2) en cada caso? a) int *p papa[4]={12,21,121,212}; p=papa; *p *(p+2) 12 121
USO DE TYPEDEF
C proporciona diversos tipos fundamentales, como char e int, y varios tipos derivados, como arreglos y punteros; tambin proporciona la declaracin typedef, que permite la asociacin explcita de un tipo con un identificador. Algunos ejemplos son: typedef int METROS, DECIMETROS, CENTIMETROS; typedef int vector[10]; En cada una de stas definiciones de tipo, los identificadores nombrados pueden usarse despus para declarar variables o funciones, del mismo modo en que se usan los tipos ordinarios; por ejemplo, METROS largo, ancho; 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 declaracin de un tipo sinnimo de int.
Referencia Bibliografica:
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); } 6. scanf(%c,&a); // la variable a es de tipo entero, no char. scanf(%c,&d); // la variable d no esta definida
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; printf("El resultado es:%f \n",factA/factB_A); } else printf("No se puede calcular \n"); } 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 despus del while(i) , viene el termino de la sentencia ; es decir el programa jams alcanza la sentencia i--, por ello la expresin i , siempre es verdadera. 10. Este tambin es un ciclo infinito, ya que siempre est ejecutando la sentencia valor de i es : %d\n",i); , por lo que nunca alcanza el incremento i++; printf( El
15. Crear un programa que calcule lo siguiente: 1!+2!+3!+4!+...+N! #include<stdio.h> main() { int suma,i,j,N,fact; printf("Ingrese el valor de N \n"); scanf("%d",&N); if(N>0) { for(i=1 ,suma=0; i<=N ; i++) { for(j=1,fact=1 ; j<=i ; j++) fact=fact*j; suma=suma+fact; } print("El resultado es %d \n",suma); } else printf("El valor ingresado no es un entero positivo \n"); }
16. Crear un programa que calcule: a b= a!/b!(b-a)! #include<stdio.h> main() { int i,a,b; float fact1,fact2,fact3,res; printf("Ingrese el valor de a \n"); scanf("%d",&a); printf("Ingrese el valor de b \n"); scanf("%d",&b); if(a>=0 && ((b-a)>=0)) { for(i=1,fact1=1 ; i<=a ; i++) fact1=fact1*i; for(i=1,fact2=1 ; i<=b ; i++) fact2=fact2*i; for(i=1,fact3=1 ; i<=(b-a) ; i++) fact3=fact3*i; res=fact1/(fact2*fact3); printf("El resultado de la operacin es : %f \n",res); } else printf("Los valores ingresados no permiten realizar la operacin \n"); } 17. Crear un programa que calcule lo siguiente: (a k)=s(s-1)(s-2)(s-3)(s-4)...(s-k+1)/k! (a 0)=1 s R+, k N U{0} #include<stdio.h> main() { int i,k; float S,x,fact; printf("Ingrese el valor de k \n"); scanf("%d",&k); printf("Ingrese el valor de S \n"); scanf("%d",&S); if(S>0 && K>=0) { if(k>S) printf("El resultado es 0 \n");
Pgina :103 Claudio Gutirrez-Soto, Manuel Crisosto,
19. Crear un programa que calcule lo siguiente: n 3* i 2*i-1/(n-i)! i=1 #include<stdio.h> main() { int i,j; float suma,fact,pot,N; printf("Ingrese el valor de N \n"); scanf("%f",&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 operacin es %f \n",suma); } else printf("El valor ingresado no permite realizar la operacin \n"); } 20. Crear un programa que calcule lo siguiente: n i ( (2*i)/j ) i=1 j=1 #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); }
Pgina :105 Claudio Gutirrez-Soto, Manuel Crisosto,
Solucin PCR24:
N 6
i 1 2 3 4 5 6 7
cont 0 1
stop 1
SALIDA 1 0 0 0 0 0
5 pts
j 4 5 6 7 8
x 4
6 5
1 3 7
1 4
Solucin 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; } return(suma); //2 ptos } Solucin PCR33:
#include<stdio.h>
Pgina :110 Claudio Gutirrez-Soto, Manuel Crisosto,
Introduccin a la Programacin Departamento de Sistemas de Informacin Universidad del Bo-Bo 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)); }
Solucin PCR36: #include<stdio.h> float potencia(int base, int exp); float factorial(int n); main(void) { int n, i; float suma; do{ printf(Ingrese el varlor de n\n); scanf(%d,&n); }while(n<0); for(i=0,suma=0.0 ;i<=n; i++) suma=suma+potencia(i,i+2)/factorial(i+1); printf(El resultado es suma: %f \n,suma); } float potencia(int base, int exp) { int i; float pot=1.0; if (exp==0) return(1.0); else if(exp>=1)
Pgina :111 Claudio Gutirrez-Soto, Manuel Crisosto,
Ejercicios resueltos parte 4: Arreglos 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[ ])
Pgina :112 Claudio Gutirrez-Soto, Manuel Crisosto,
Solucin PCR44: #include <stdio.h> #define n 4 int buscar(int x); 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 nmero a analizar :"); scanf("%d",&x); if (buscar(x)) printf(" Si existen "); else printf(" NO existen"); getchar(); getchar(); }
Pgina :122 Claudio Gutirrez-Soto, Manuel Crisosto,
Solucin PCR48:
void Consulta(int Puntos[][n], int n, int q1, int q2, int R[][n],float r) // 6 ptos { int k,i ; float dist ; for(i=0,k=0 ;i<n ;i++) { dist=sqrt(((q1-Puntos[i][0])* (q1-Puntos[i][0]))+ (q2-Puntos[i][1])* (q2-Puntos[i][1]))); //15 if(dist<=r) //3 { R[k][0]=Punto[i][0]; // 2
Solucin PCR49:
void Estado(char Depositos[][N], char NCuenta[], int mes) // 3 ptos { 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 } printf(El monto:%d para el NCuenta %s\n,Monto_entero,NCuenta); }