Guia De Ejercicios De C - UNCA

3y ago
27 Views
3 Downloads
2.27 MB
45 Pages
Last View : 23d ago
Last Download : 3m ago
Upload by : Jayda Dunning
Transcription

UNIVERSIDAD DE LA CACAÑADAGuía del Concurso deProgramación en CM. C. José Alberto Márquez DomínguezM. C. Silviana Juárez ChaliniM. C. Beatriz Adriana Sabino MoxoDr. Octavio Alberto Agustín AquinoCarretera Teotitlán - San Antonio Nanahuatipán Km 1.7 s/n. Paraje Titlacuatitla.Teotitlán de Flores Magón, Oax. México, C.P. 68540El Segundo Concurso de Programación CProg-UNCA,UNCA, es una competencia que fomenta la creatividad, el trabajo en equipo y la innovación en lacreación de programas de cómputo, además de que permite a los estudiantes universitarios probar sus habilidades.

ContenidoINTRODUCCIÓN. 3EN MEMORIA DE DENNIS RITCHIE . 4FASES PARA LA RESOLUCIÓN DE PROBLEMAS. 5Análisis del Problema . 6Diseño del Algoritmo. 9NIVEL 1 BÁSICO: ESTRUCTURAS DE CONTROL SELECTIVAS E ITERATIVAS . 10Ejercicios Resueltos . 14Ejercicios Propuestos . 18NIVEL 2 MEDIO: FUNCIONES Y RECURSIVIDAD . 19Ejercicios Resueltos . 22Ejercicios Propuestos . 31NIVEL 3 AVANZADO: ARREGLOS Y PUNTEROS . 33Ejercicios Resueltos . 37Ejercicios Propuestos . 44

INTRODUCCIÓNC es un lenguaje de nivel medio que actúa con enorme rapidez, tanto en la compilación como en la ejecución de losprogramas, y que, además, se caracteriza por ser muy portable y fácilmente estructurable. Posee un limitadonúmero de sentencias o palabras clave muy fáciles de memorizar con las que se pueden construir funciones o rutinasque se incorporarán al lenguaje del usuario en forma de nuevas librerías, lo que lo convierte en un lenguaje de muyalto nivel y fácil manejo.El objetivo de este manual de ejercicios es proveer al estudiante las habilidades y destrezas propias del manejo de unmétodo algorítmico disciplinado, logradas por medio del uso de estructuras abstractas, de control, selectivas,secuenciales y repetitivas, así como utilizar buenas prácticas en las etapas de diseño, codificación, depuración,pruebas de sus aplicaciones.

EN MEMORIA DE DENNIS RITCHIEEnn 1967 se unió a los laboratorios Bell para empezar una silenciosa revolucióninformática que por supuesto tiene impacto y consecuencias sumamente positivas hoydía, desde la creación de nuevas plataformas que heredan estilos y formatos de otras,hasta cadaada vez que un programador declara una variable.(1941-2011)Su pasaje a la historia queda principalmente gobernado por ser el creador del lenguaje C, uno de los puntos departida del lenguaje de programación moderno y pilar –no sólo simbólico- de la informática actual,actua aunque DennisRitchie también participó protagónicamente del desarrollo de B, Altran, BCPL, Multics y del inefable Unix. Sobre Cya había dicho que era “peculiar, defectuoso y un enorme suceso”. Y de UNIX expresó una de las frases máspopulares de su pasoaso por este mundo:“Unix es simple, sólo hace falta ser un genio para comprender susimplicidad.”Si bien la fama entre los no informáticos y las cuentas bancarias con diez ceros a la derecha no fueroncaracterísticas de su figura, Dennis MacAlistair Ritchie recibió premios como el Turing Award en 1983 porlacreación de la teoría de sistemas operativosoperativos genéricos, específicamente aplicado a Unix. Otros premios son laenvidiada medalla IEEE Richard Hamming, también en función de sus logros con UNIX y la creación de C finalizadaen 1973, así como también la medalla Nacional de Tecnología de Estados UnidosUnidos puesta en su cuello por elentonces presidente Bill Clinton. Recientemente había recibido el premio de Japón, junto a otro genio, KenThompson, principal responsable de B.

FASES PARA LA RESOLUCIÓN DE PROBLEMASLas fases o etapas constituyen el ciclo de vida del software, ayudarán en el proceso de resolución de un problema,estas consisten en:1. Análisis del problema.2. Diseño del algoritmo.3. Codificación (Implementación).4. Compilación y ejecución.5. Verificación6. Depuración.7. Mantenimiento.8. Documentación.Las dos primeras etapas conducen a un diseño detallado escrito de forma de algoritmo1. Durante la terceraetapa (Codificación) se implementa el algoritmo en un código escrito en un lenguaje de programación reflejando lasideas desarrolladas en las fases de análisis y diseño [Joyanes, 2003].La Compilación, Ejecución y Verificación realiza la traducción y ejecución del programa, se compruebarigurosamente y se eliminan todos los errores que pueda tener. Si existen errores es necesario modificarlo yactualízalo de manera que cumplan todas las necesidades de cambio de sus usuarios, para ello se usan las etapas deVerificación y Depuración.1Definido como un conjunto de instrucciones utilizadas para resolver un problema específico.

Finalmente se debe usar la fase de Documentación, es decir, es la escritura de las diferentes fases del ciclo de vidadel software, esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y de referencia, así comonormas para el mantenimiento.En este concurso se pondrán a prueba las cuatro primeras fases, aunque se recomienda realizar las fases faltantespara terminar con el ciclo de vida del software.Análisis del ProblemaEn esta fase se requiere una clara definición del problema, para poder hacer esto es conveniente realizar lassiguientes preguntas:1. ¿Qué entradas se requieren? (tipo y cantidad)2. ¿Cuál es la salida deseada? (tipo y cantidad)3. ¿Qué método produce la salida deseada?Con dichas preguntas se determina qué necesita el programa para resolver el problema. La solución puedellevarse a cabo mediante varios algoritmos [Joyanes, 2004].Un algoritmo dado correctamente resuelve un problema definido y determinado.El algoritmo debe cumplir diferentes propiedades:1. Especificación precisa de la entrada. Se debe dejar claro el número y tipo de valores de entrada y lascondiciones iniciales que deben cumplir dichos valores.2. Especificación precisa de cada instrucción. No debe haber ambigüedad sobre las acciones que se deben ejecutaren cada momento.3. Exactitud, corrección. Si debe mostrar que el algoritmo resuelva el problema.

4. Etapas bien definidas y concretas. Concreto quiere decir que la acción descrita por esa etapa está totalmentecomprendida por la persona o máquina que debe ejecutar el algoritmo. Cada etapa debe ser ejecutable en unacantidad finita de tiempo.5. Número finito de pasos. Un algoritmo se debe componer de un número finito de pasos.6. Un algoritmo debe terminar. En otras palabras, no debe entrar en un ciclo infinito.7. Descripción del resultado o efecto. Debe estar claro cuál es la tarea que el algoritmo debe ejecutar. La mayoríade las veces, esta condición se expresa con la producción de un valor como resultado que tenga ciertaspropiedades.Ejemplo 1¿Es un algoritmo la siguiente instrucción?Problema: Escribir una lista de todos los enteros positivosSolución: Es imposible ejecutar la instrucción anterior dado que hay infinitos enteros positivos.Ejemplo 2Problema: Calcular la paga neta de un trabajador conociendo el número de horas trabajadas, la tarifa horaria yla tasa de impuestos.Solución: Debemos definir el problema.1. ¿Qué datos de entrada se requieren?Número de horas trabajadasTarifaImpuestos2. ¿Cuál es la salida deseada?Paga Neta

3. ¿Cuál es el método a usar? (Algoritmo)InicioLeer Número de horas trabajadasLeer TarifaLeer ImpuestosCalcular Paga Bruta Número de horas trabajadas * TarifaCalcular Impuestos Paga Bruta * TasaCalcular Pago Neta Paga Bruta – ImpuestosVisualizar Paga BrutaVisualizar ImpuestosVisualizar Pago NetaFin

Diseño del AlgoritmoEn esta fase, como se ha mencionado anteriormente, se determina cómo hace el programa la tarea solicitada.Los métodos más eficaces para el proceso de diseño se basan en el conocido divide y vencerás, esto es dividiendo elproblema en subproblemas y a continuación dividir estos subproblemas en otros de nivel más bajo hasta que puedaser implementada la solución.Existen diferentes herramientas de programación, las más utilizadas para diseñar algoritmos son:1. Diagramas de flujo: Es una representación gráfica de un algoritmo. Los símbolos normalizados por el InstitutoNorteamericano de Normalización (ANSI) y los más frecuentes empleados se muestran a continuación.SALIDA2. Pseudocódigo: Es una herramienta de programación en la que las instrucciones se escriben en palabrassimilares en inglés o español, que facilitan tanto la escritura como la lectura de programas.

NIVEL 1 BÁSICO: ESTRUCTURAS DE CONTROL SELECTIVAS E ITERATIVASEn sección se tratarán con las Estructuras de Control Selectivas e Iterativas, a continuación se describebrevemente cada una de dichas estructuras.Estructuras de Control Selectivas:Las estructuras selectivas se utilizan para tomar decisiones lógicas y existen en dos “formas”: la sentencia ifthen-else y la sentencia switch. La primera (if-then-else)se considera de alternativa doble (si se cumple ciertacondición, entonces , en caso contrario ), y tuene la siguiente estructura:if (condición)acción 1;elseacción 2;Nota: No se agrega ninguna llave “{” de apertura y cierre “}” cuandosólo es una instrucción. También no lleva la palabra reservada “then”en C.También se puede dar el caso en que se tiene más instrucciones, esa opción deberá llevar una llave de apertura“{“ y otra de cierre “}”, por ejemplo:if (condición){Acción 1;Acción 2;Acción 3;}else{Acción 4;Acción5;}Nota: También puede darse elcaso de que exista seleccionesanidadas como se muestra acontinuación.if (condición1){Acción 1;if (condición2)Acción 3;}else{Acción 4;Acción5;}

Existe otra sentencia para la selección múltiple, esta es la sentencia switch, actúa como una función debifurcación múltiple que sustituye con ventaja a if-else-if cuando el número de opciones que se puede presentar sonnumerosas. El mandato switch(variable) se utiliza para bifurcar las diferentes opciones presentadas según el valoringresado para la variable en cada caso. Por ejemplo:switch (variable){case constante1 : acción1;break;case constante1 : acción2;break;case constante1 : acción3;break;case constante1 : acción4;break;default: acción5;}Nota: Un ejemplo es dondeevaluamos nota (tipo entero)y se imprime la calificacióncorrespondiente al valor denota, al final si se nota tiene6 al 0, imprimirá en pantallaReprobado.switch (nota){case 10 : printf(“Calificación 10”);break;case 9 : printf(“Calificación 9”);break;case 8: printf(“Calificación 8”);break;case 7: printf(“Calificación 7”);break;default: printf(“Reprobado”);;}La sentencia switch se considera de selección múltiple, ya que el flujo de ejecución puede continuar por unacantidad N de alternativas posibles, según el valor de la expresión que se evalúa al principio.Estructuras de Control Iterativas:También conocidas como estructuras de repetición (bucles o ciclos) se utilizan para realizar varias veces el mismoconjunto de operaciones. Entre ellas se encuentran aquellas donde la cantidad de repeticiones se conoce a priori yaquellas en las que las repeticiones se realizan hasta que se cumple una condición lógica dada. En esta sección severán las estructuras iterativas: for, while y do-while.El primero es la estructura for, permite definir un bucle controlado por un contador, denominado variable decontrol o de inducción, la sintaxis es:

for ( ; .; .){Acción1;Acción2;Acción3;Acción4;Acción5; .}Como se puede observar entre elparéntesis lleva “;”, en la primerase inicializa la variable de controly sólo se ejecuta una vez. Lasegunda es la condición lógica quedebe cumplirse, la tercera es laacum 0;for (i 0; i 100; i ){acum acum i;printf(“%d ”, acum);printf(“\t %d ”, i);printf(“\n”);}actualización de la variable decontrol.La estructura while, por su parte, evalúa la condición lógica antes de comenzar cada iteración. Si ésta esverdadera, entonces se ejecuta el cuerpo de la estructura while, en caso contrario, el bucle termina.while cción5; .}Como se puede observar en elsiguiente código, la variable s,quesecompara en la condición, por ellosedebeactualizardentrodelbucle (i i 1 puede sustituirse pori 0;acum 0;while (i 100){acum acum i;printf(“%d ”, acum);printf(“\t %d ”, i);printf(“\n”);i i 1;}una forma abreviada i ;).Por último el bucle do-while, se utiliza cuando se quiere asegurar que el ciclo se ejecuta al menos una vez, puestoque la evaluación de la condición lógica se hace al final de éste.

do{Acción1;Acción2;Acción3;Acción4;Acción5; .} while nteseunaejecutavez)verificaylacondición si es verdadera, en casocontrario se sale del bucle.A continuación se listan ejercicios resueltos de esta sección.i 0;acum 0;do{acum acum i;printf(“%d ”, acum);printf(“\t %d ”, i);printf(“\n”);i i 1;} while (i 100)

Ejercicios ResueltosProblema 1: Diseñe un algoritmo que, dado un número real que entra como dato, nos indique si está contenido dentro de loslímites predeterminados. El límite inferior es de 100 y el superior de 200.Restricciones: Uso de las estructuras de selección if-then-else.AlgoritmoDatos de Entrada:Número de tipo realDatos de Salida:Mensaje de que está dentro de los límites,mensaje de que está fuera de rango o noalcanzaAlgoritmo:InicioLimite Inferior 100Limite Superior 200Solicitar número al usuario.Almaceno en mi variable NúmeroSi Número es mayor o igual que Limite InferiorentoncesSi Número es menor o igual queLimite superior entoncesImprimo en pantalla que está dentro delos límitesSinoImprimo en pantalla que supera al límitemáximoSinoImprimo en pantalla que no alcanza ellímite mínimofinDiagrama de Flujo o PseudocódigoCódigo en C#include stdio.h #include conio.h #define Limite Inferior 100#define Limite Superior 200int main(){float Numero 0; //Definimos nuestra variableprintf(“----Problema 1-----\n”);printf(“Introduzca un número: ”);scanf(“%f”, &Numero);if (Numero Limite Inferior){if (Numero Limite Superior){printf(“Está dentro del intervalo”);}elseprintf(“Supera el límite máximo ”);}elseprintf(“No alcanza el límite mínimo”);return 0;}

Problema 2: Programe un algoritmo que, dados dos números enteros que entran como datos, indique si uno es divisor del otro.Restricciones: Uso de las estructuras de selección if-then-else.AlgoritmoDiagrama de Flujo o PseudocódigoDatos de Entrada:Número1 y Número2 de tipo enteroDatos de Salida:Mensaje de que Número1 es divisor de deNúmero2 o que Número2 es divisor deNúmero1Algoritmo:InicioSolicitar el primer número al usuario.Almaceno en el Número1Solicitar el segundo número al usuario.Almaceno en el Número2Si Número1 es mayor que Número2 entoncesSi Número1 módulo Número2 es igual a 0entoncesImprimo en pantalla Número2 es divisorde Número1SinoImprimo en pantalla Número2 no esdivisor de Número1SinoImprimo en pantalla no es divisor porqueNúmero2 es mayor que Número1finCódigo en C#include stdio.h #include conio.h int main(){int Numero1 0, Numero2 0; //Variablesprintf(“----Problema 2-----\n”);printf(“Introduzca el primer número: ”);scanf(“%i”, &Numero1); //indica sin signoprintf(“Introduzca el segundo número: ”);scanf(“%i”, &Numero2); //indica sin signoif (Numero1 Numero2){if (Numero1%Numero2 0){printf(“Es divisor %i de %i”, Numero1,Numero2);}elseprintf(“%i no es divisor de %i ”, Numero2,Numero1);}elseprintf(“No es divisor porque es mayor %i”,Numero2);return 0;}

Problema 3: Un triangulo rectángulo puede tener lados que sean todos enteros. El conjunto de tres valores enteros para los lados de untriángulo rectángulo se conoce como una terna pitagórica. Estos tres lados deben satisfacer la relación de que la suma de los cuadrados de doslados es igual al cuadrado de la hipotenusa. Encuentre todas las ternas de Pitágoras para el cateto opuesto, cateto adyacente e hipotenusa,todos ellos no mayores de 500.Restricciones: Uso de las estructuras de selección if-then-else y de estructuras repetitivas.AlgoritmoDiagrama de Flujo o PseudocódigoDatos de Entrada:Los valores del 1 al 500 de tipo entero.Datos de Salida:Mensaje con los valores de las ternas pitagóricas.Mensaje con los valores de hipotenusa, opuesto yadyacente elevados al cuadrado, comocomprobaciónAlgoritmo:InicioImprimo mensaje Ternas PitagoricasPara i 1, hasta i menor o igual a 500, incrementa ien unohipotenusa i*ij 1Para j 1, hasta j menor o igual a 500,incrementa i en unoopuesto j*jPara k 1, hasta k menor o igual a 500,incrementa i en unoadyacente k*kSuma de Cuadrados opuesto adyacenteSi Suma de Cuadrados es igual ahipotenusa entoncesImprimo mensaje con los valores i, j y kImprimo mensaje con los valores deopuesto, adyacente e hipotenusaFin de ciclo kFin de ciclo jFin de ciclo iFinCódigo en C#include stdio.h #include windows.h int main(){int i,j,k,Sum Cuadrados,op,ady,hip;printf("Ternas Pitagoricas\n");for (i 1;i 500;i ){hip i*i;// eleva la hipotenusa al cuadradofor (j 1;j 500;j ){op j*j;//eleva el cateo opuesto al cuadradofor (k 1;k 500;k ){ady k*k;Sum Cuadrados op ady;if (Sum Cuadrados hip)//determina si existe// una terna pitagórica{printf("\n cateto opuesto %d,",j);printf(" cateto adyacente %d,",k);printf(" cateto hipotenusa %d",i);printf("\n Comprobacion: %d %d %d\n",op,ady,hip);}}}}Sleep(10000);return 0;}

Problema 4: Escriba un programa que calcule el valor de exRecuerde que dicha constante matemática se calcula de la siguiente forma:Y el factorial de todo número se obtiene así:Restricciones: Uso de las estructuras de selección if-then-else y de estructuras repetitivas.AlgoritmoDiagrama de Flujo o PseudocódigoDatos de Entrada:x de tipo entero.Datos de Salida:xMensaje de con el valor de eAl

El Segundo Concurso de Programación CProg -UNCA, es una competencia que fomenta la creatividad, el trabajo en equipo y la innovación en la creación de programas de cómputo, además de que permite a los estudiantes UNIVERSIDAD DE LA CA Guía del Concurso de Programación en C Carretera Teotitlán - San Antonio Nanahuatipán Km 1.7 s/n.

Related Documents:

100 EJERCICIOS para estar en forma ES_100EJERCICIOS_Book.indb 3 23/12/2016 12:31:57. ÍNDICE Introducción Un nuevo estilo de vida Ejercicios para la resistencia Ejercicios para el fortalecimiento Ejercicios para la flexibilidad Ejercicios para el equilibrio 4 6 24 60 96 128

Bienvenido al curso de Visual Basic, este cuaderno de ejercicios y practicas complementa su Guia de Estudio (apoyo teorico) para que realice los ejercicios correspondientes según se los vaya presentando su profesor. Todos los ejercicios y practicas fueron realiza

Guía de entrenamiento y Cuaderno de ejercicios de Nivel 2 2 de 80 PREPARACIÓN PARA EL CURSO Un gran enfoque del Curso con Certificado de Nivel 2 de CrossFit les permite a los participantes practicar y trabajar en sus habilidades de entrenamiento en tiempo real. El curso incluye secciones llamadas "Ejercicios prácticos" y "Demostraciones",

Al término de la unidad el alumno será capaz; Identificar y aplicar ejercicios de cadena Cinetica abiertos y cerrados. EC1.- exponer un video sobre los ejercicios de cadenas musculares abiertos y cerrados. ED1.- participara en concenso y mesas redondas. Panel, Instrucción programada, práctica guiada Práctica, de ejercicios de cadera cineticos abiertos y cerrados panel, lluvia de ideas .

EJERCICIOS DE RECUPERACIÓN MATEMÁTICAS APLICADAS 3º ESO. DEPARTAMENTO DE MATEMÁTICAS 2016-17 Se realizará una prueba con ejercicios de la primera parte en la semana del 13 al 17 de febrero de 2017. La segunda parte se evaluará en la semana del 17 al 21 de abril de 2017. Los ejercicios realizados se entregaran al profesor correspondiente

veces los ejercicios de creatividad simples son muy difíciles de resolver. Esto se demuestra en los pequeños ejercicios siguientes. Material: Prepare dos ejercicios en una pancarta. Al mismo tiempo, haga suficientes copias para los participantes del curso, con la descripción detallada de la tarea a cumplir, y distribúyalas después de haber

EXPRESIÓN ESCRITA: EJERCICIOS DE COHERENCIA, COHESIÓN Y ADECUACIÓN José Joaquín Martínez Egido 3 PRESENTACIÓN El material que se presenta en este documento recoge 56 ejercicios, y 21 textos incluidos en ellos, sobre el análisis de las propiedades textuales de coherencia, cohesión y adecuación. Los ejercicios van precedidos de una

adentrando en la teor ıa m ınima necesaria para resolver multiples problemas del An alisis Funcional. . y los ejercicios propuestos no son simplemente ejercicios adicionales, . puesto que se originan en los ejercicios resueltos o los generalizan. 1.3 Sobre el enfoque global en el curso de An alisis Funcional Para el logro de valores .