Programación 2 Ejercicios Resueltos del Práctico 1



Documentos relacionados
El lenguaje C. if (a>3) { printf("hola"); // bloque printf("%d",a); // de getch(); //código } Partes de un programa en C.

Arreglos. 5.1 Arreglos unidimensionales

Cadenas de Caracteres

Prof. Dr. Paul Bustamante

Programación en C. Relación de Problemas Número 1

Práctica 0: Programación básica en C

OBJETIVO III. APLICAR A LOS PROGRAMAS EN C LAS ESTRUCTURAS DE SELECCIÓN IF Y SWITCH ACTIVIDAD

LENGUAJE C Programación de Computadores

Lenguajes de programación LPSI EUI UPM CADENAS DE CARACTERES

Prof. Dr. Paul Bustamante

Cátedra I Informática Autor I Carlos Bartó

Maribel Martínez y Ginés Ciudad-Real Fichas para mejorar la atención MATRIZ DE LETRAS

Tema 3 Constantes, Variables y Tipos

Prueba N o 1. Programación II

Práctica Guiada: Vectores y Matrices

µ-c: Manual de referencia del lenguaje Micro-C

Introducción a los Computadores Estructuras de control selectivas en C

Práctica 4: Funciones en lenguaje C/C++.

int A[][]=new int[3][4]

Programación en C++ L.I Gerardo Benavides Pérez

Resumen Lenguaje Java

1. Lenguajes de programación. 2. Compilador. 3. Mi primer programa. EDM. Introducción al lenguaje C _ 1

Tipos de Arreglos. Notación Algoritmica de los Arreglos multidimensionales tipo_dato nombre[dim 1. , dim 2. ,..., dim n

Introducción a MATLAB

El lenguaje C. 1. Estructuras. Principios de Programación Definicion de estructuras

Introducción general al Lenguaje C (2010/2011)

Tipos de Datos en C. Palabras reservadas en C

UNIDAD V: ARR R EGL G OS O BIDI D MENS N IONALE L S

Laboratorio 5 Tema 7. Tipos de Datos Estructurados: Arreglos, Registros y Archivos

UNIVERSIDAD TECNOLÓGICA DE LOS ANDES INGENIERÍA DE SISTEMAS E INFORMÁTICA FUNDAMENTOS DE PROGRAMACIÓN ARREGLOS (ARRAYS)

Práctica 0: Programación básica en C

ARREGLOS (ARRAYS)- MATRICES.

Programación 1 Tema 5. Instrucciones simples y estructuradas

Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy. Febrero 2009

UNIDAD IV ESTRUCTURA DE DATOS ESTÁTICAS MATRICES

Titulo: Suma de N primeros números

Programación Orientada a Objetos Métodos Guía de Ejercicios v9.7

CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS

PROBLEMA 1. Rellena el hueco 1 (línea 23). Realiza la reserva de memoria para almacenar los n puntos.

EJERCICIOS DE PROGRAMACIÓN EN C. DIBUJAR UN ROMBO O DIAMANTE. CALCULAR SUMATORIOS. (CU00542F)

Tema: Plantillas en C++.

Introducción a MATLAB

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

TIPOS DE DATOS BASICOS EN LENGUAJE C

Unidad IV Arreglos y estructuras. M.C. Juan Carlos Olivares Rojas

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Funciones: Pasos por Referencia Recursividad

Estructura de datos y Programación

Este es un arreglo de números enteros, o sea que guarda una serie de variables de tipo INTEGER, todas agrupadas en una sola estructura.

Lenguaje de Programación: C++ Repaso de Material C++

1. Juego del Ahorcado

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

GUIA DE LABORATORIO # 13 Arreglos unidimensionales y bidimensionales

Autor: Ing. Nahuel González INTRODUCCIÓN A C. Clase 1

Programación I. Práctica parcial: el juego de los barquitos (ENTREGA OBLIGATORIA)

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

INFORMATICA II PRIMER PARCIAL

Programación estructurada (Introducción a lenguaje C)

ALGEBRA Y GEOMETRÍA II 2º semestre Año: Guía de Estudio y Ejercitación propuesta

PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos

Por ejemplo, el factorial puede definirse de manera recursiva de la siguiente manera:

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Objetivo El alumno conocerá y aplicará los conceptos de arreglo y estructura en la realización de programas que resuelvan problemas de tipo numérico.

Problemas de Recursividad

Tema 4 Operadores y Expresiones. Fundamentos de Informática

PARTE TEÓRICA - TEST [2,5 PUNTOS]:

Tema: Arreglos de Objetos en C++.

Porque usar Arreglos?

PROGRAMACIÓN EN C#.NET Módulo 4.- Arreglos y cadenas. Ing. Bruno López Takeyas

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Introducción a las sentencias de control

Programación. Ejercicios Tema 4 Estructuras de Control Alternativas

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores

GUIA DE EJERCICIOS N 1 LENGUAJE C# Página 1 de 5. Instructor: Ing. Néstor Raúl Suarez Perpiñan

En un arreglo x de n elementos los elementos del arreglo son: El número de índices determina la dimensionalidad del arreglo.

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Estructuras de control y DFDs

Transcripción:

Solución del Ejercicio 3 Para resolver este problema se propone recorrer el arreglo f rase y comparar cada uno de los caracteres con el carácter buscado. En caso de coincidencia, se incrementa la variable cant, la cual es la salida del procedimiento. Dado que la frase contendrá tanto mayúsculas como minúsculas debemos normalizar la comparación, es decir, siempre comparar letras mayúsculas o letras minúsculas. En nuestro caso, utilizaremos la función toupper para comparar siempre letras mayúsculas. En la Figura 1 se presenta una solución al problema. 1 #include <stdio.h> #include <string.h> 3 #include <ctype.h> #include <stdlib.h> 5 int ocurrencias (char* frase, int largo, char letra ) { 7 int cant=0; char letram = toupper(letra); 9 for (int i=0; i<largo;i++){ if (toupper(frase[i])==letram) 11 cant++; ; 13 return cant; Figura 1: Solución del ejercicio 3 En la figura 2 se presenta un procedimiento para probar la solución propuesta. Al final del documento mostraremos el programa principal que contendrá las llamadas a dichos procedimientos. 2 void ej3(){ char frase[100] = "Hoy es el dia mas hermoso de nuestra vida, querido Sancho; los obstaculos mas grandes"; 4 char letra = h ; 6 printf("la letra %c ocurre %d\n", letra, ocurrencias(frase,(unsigned)strlen(frase),letra)); Figura 2: Prueba del ejercicio 3 Instituto de Computación - Facultad de Ingeniería - UdelaR Página 1 de 6

Solución del Ejercicio 4 Una frase palíndroma es una frase que se lee igual hacia adelante que hacia atrás. Para determinar si una frase es palíndroma debemos comparar el primer carácter con el último, el segundo carácter con el penúltimo y así sucesivamente. A continuación presentamos los puntos importantes que debemos tener en cuenta para la solución: Notemos que alcanza con recorrer los carácteres hasta la mitad del largo de la frase. Para ello utilizamos la estructura de control f or y la recorrida se corta cuando encontremos una diferencia o hayamos llegado a la mitad de la frase. Dado que solo nos interesa incrementar la variable i para recorrer la frase, la estructura f or no tiene ninguna instrucción en su cuerpo. Dado que no conocemos el largo de la f rase debemos calcular su largo utilizando la función strlen. Al igual que en el ejercicio anterior, debemos tener en cuenta normalizar las letras a mayúsculas para compararlas. En la Figura 3 se presenta una solución al problema. 1 bool espalindrome(char* frase){ 3 int largo = (unsigned) strlen(frase); int i; 5 for(i=0; (i<largo/2) && toupper(frase[i]) == toupper(frase[largo-1-i]); i++); 7 return i>=largo/2; 9 ; Figura 3: Solución del ejercicio 4 En la figura 4 se presenta un procedimiento para probar la solución propuesta en donde se lee una frase ingresada por el usuario desde la entrada estándar. 1 void ej4(){ char* frase = new char[100]; 3 printf("ingrese frase: "); scanf(" %s",frase); if (espalindrome(frase)) 5 printf("es Palindrome\n"); else 7 printf("no es Palidrome\n"); 9 Figura 4: Prueba del ejercicio 4 Instituto de Computación - Facultad de Ingeniería - UdelaR Página 2 de 6

Solución del Ejercicio 7 En este ejercicio trabajaremos con matrices de M filas y N columnas representadas medianto un arreglo unidimensional de enteros de longitud M N. Parte a En la figura 5 se muestra la operación constructora de una matriz de dimensiones M N en un arreglo unidimensional. 1 int* crearmatriz(int m, int n){ return new int[m*n]; 3 ; Figura 5: Solución del ejercicio 7 - Parte a Parte b En la figura 6 se muestra la operación para asignar un valor x en la posición (i, j) de la matriz. Notemos que debemos saber la cantidad de columnas n que tiene la matriz para poder calcular su posición en el arreglo unidimensional. Vamos a considerar que los índices que nos pasan por parámetro comienzan en 1. Esto quiere decir que, por ejemplo, las posiciones de la primera fila van de (1, 1) hasta (1, n). 1 /* los indices de la matriz empiezan en 1 */ void asignarvalormatriz (int* matriz, int n, int i, int j, int x){ 3 int ini = (i-1) * n; 5 int pos = ini + j; 7 matriz[pos-1] = x; 9 Figura 6: Solución del ejercicio 7 - Parte b Parte c En la figura 7 se muestra la operación para devolver un valor de la matriz ubicado en la posición (i, j). Notemos que para este caso también debemos conocer la cantidad de columnas n que tiene la matriz. 1 int valormatriz(int* matriz, int n, int i, int j){ 3 int ini = (i-1) * n; int pos = ini + j; 5 7 ; return matriz[pos-1]; Figura 7: Solución del ejercicio 7 - Parte c Parte d En la figura 8 se muestra la operación que transpone una matriz de dimensiones M N. Instituto de Computación - Facultad de Ingeniería - UdelaR Página 3 de 6

2 4 int* transponermatriz(int* matriz, int m, int n){ int* trasp = new int[n*m]; for(int i = 0; i < m; i++) 6 for (int j = 0; j < n; j++) trasp[j*m+i] = valormatriz(matriz,n,i+1,j+1); 8 10 return trasp; Figura 8: Solución del ejercicio 7 - Partea d En la figura 9 se muestra un procedimiento que prueba las operaciones implementadas. Primeramente implementamos un procedimiento que imprime la matriz (representada en el arreglo unidimensional) en pantalla como una matriz de dos dimensiones. Notemos que debemos imprimir un salto de línea por cada nueva fila, esto es, cada vez que el iterador i sea divisible por n. Luego, implementamos el procedimiento que prueba todas las partes del ejercicio en interacción con el usuario. Instituto de Computación - Facultad de Ingeniería - UdelaR Página 4 de 6

1 void imprimirmatrizarreglo(int* matriz, int m, int n){ 3 for(int i=0;i<m*n;i++) { if (i %n==0) 5 printf("\n"); printf(" %d ",matriz[i]); 7 ; 9 void ej7(){ 11 int m,n; printf("ingrese m y n: "); 13 scanf(" %d %d", &m,&n); 15 int* matriz = crearmatriz(m,n); 17 printf("ingrese matriz como arreglo: "); for(int i=0;i<m*n;i++) 19 scanf(" %d", &matriz[i]); 21 printf("la matriz ingresada es: \n"); 23 imprimirmatrizarreglo(matriz,m,n); printf("\n"); 25 printf("(b) Ingrese los indices empezando a numerar en 1 y el valor a cambiar-> i j x :"); 27 int i,j,x; scanf(" %d %d %d",&i,&j,&x); 29 31 33 asignarvalormatriz(matriz,n,i,j,x); printf("la nueva matriz es: \n"); imprimirmatrizarreglo(matriz,m,n); 35 printf("\n"); 37 printf("ingrese los indices empezando en 1 del valor a obtener-> i j :"); scanf(" %d %d",&i,&j); 39 41 printf("el valor de la celda es: 43 printf("(c) La matriz transpuesta es : "); 45 int* traspm = transponermatriz(matriz,m,n); 47 imprimirmatrizarreglo(traspm,n,m); printf("\n"); 49 %d\n", valormatriz(matriz,n,i,j)); 51 ; Figura 9: Prueba del ejercicio 7 Instituto de Computación - Facultad de Ingeniería - UdelaR Página 5 de 6

Programa Principal En la figura 10 se muestra el programa principal que invoca a los procedimientos que prueban las operaciones implementadas. El usuario ingresa el numero de ejercicio que desea probar. 1 3 int main() { int ej; 5 printf("ejecutar Ejercicio: "); scanf(" %d", &ej); 7 switch (ej) { case 3: ej3();break; 9 case 4: ej4();break; case 7: ej7(); break; 11 default:printf("ejercicio No Implementado\n"); 13 15 return 1; Figura 10: Programa Principal Instituto de Computación - Facultad de Ingeniería - UdelaR Página 6 de 6