Fundamentos de Informática. Primer Curso de Ingenieros Industriales

Documentos relacionados
Práctica 3: Vectores y matrices en C.

Práctica 7e: Uso de estructuras en C.

Práctica 7c: Uso de estructuras en C.

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

Práctica 8b: Estructuras y listas enlazadas.

GUIA DE LABORATORIO # 13 Arreglos unidimensionales y bidimensionales

Principal material bibliográfico utilizado

Programación. Test Autoevaluación Tema 3

UTN FRBA Algoritmos y Estructura de Datos Examen Final 18/07/2014. Apellido y nombre: Legajo: Cursó con Prof:

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

Segundo Taller Final de PROGRAMACIÓN ORIENTADO A OBJETOS. INGENIERÍA DE SISTEMAS. Docente y Administrativo: Luz Esperanza Espitia Preciado

PROBLEMAS DEL TEMA 8: Estructuras de Datos Complejas

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Examen Fundamentos de Programación 15 de enero de 2016 Curso 2015/16

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Prof. Dr. Paul Bustamante

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

Apuntadores (Punteros)

SESIÓN DE EJERCICIOS E1

5. Coloración de grafos: El Sudoku

Ejercicio 1 (2 puntos. Tiempo: 25 minutos)

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

1.1 Tipos de Datos Primitivos. 1.2 Tipos de datos estructurados. 1.3 Definición de estructura de datos

Prof. Dr. Paul Bustamante

ARREGLOS (ARRAYS)- MATRICES.

PUNTEROS DOBLES EN C XIII CUIEET MASPALOMAS. Sidonio Pérez Matilla EUITI de Eibar UPV

Escuela Politécnica Superior de Elche

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

Funciones Definición de función

Introducción al tipo de dato ARRAY

Programación Estructurada

7.3. Estructura de un programa

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

Elementos de un programa en C

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

TEMA 4. ESTRUCTURAS DE CONTROL

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

REPRESENTACIÓN DE DATOS

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Funciones Tipos de funciones y Recursividad

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

INICIACIÓN A LA PROGRAMACIÓN EN C

TIPOS DE DATOS BASICOS EN LENGUAJE C

Laboratorio de Arquitectura de Redes. Asignación dinámica de memoria en lenguaje C

UNIVERSIDAD NACIONAL DE SALTA Sede Regional Orán AÑO: 2013 Carreras: TIG - TUP

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información 1º año

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

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

Tema 7 Vectores y cadenas de caracteres. Fundamentos de Informática

Programación Estructurada

Funciones y paso de parámetros

Rancagua, Agosto 2009

Escuela Superior Tepeji del Río

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Programación en Lenguaje C

EJEMPLOS DE PROGRAMACIÓN DE FUNCIONES EN C: Página 1 de 5

Punteros. Programación en C 1

Programación Estructurada

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México

Práctica 3: Realce de imágenes

Paso de Parámetros a una Función

Estructuración del programa en partes más pequeñas y sencillas

Práctica 1. Ecuaciones de 2º grado.

#include <stdio.h> float cubica(float numero) { float cubica; cubica = numero * numero * numero; return cubica; }

Tema 10: Tipos de datos definidos por el usuario

Tema 6: Memoria dinámica

Tipos de Datos Estructurados

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Hoja de ejercicios del Tema 3

Ejercicios sobre recursividad

Funciones. Parámetros por valor

Objetivos. El alumno conocerá y aplicará el concepto de archivo para el almacenamiento y recuperación de datos persistentes.

Contenido. Capítulo 1. Introducción a lenguaje C 1

Modularización en lenguaje C. Funciones

Cadenas de caracteres

Anexo. Aplicaciones de los Determinantes

Vectores y matrices. Fundamentos de Programación Fundamentos de Programación I

FUNCIONES. Identificador valido. Tipo-Funcion Identificador_de_la_funcion (Tipo par1,tipo par2 )

Estructuras. //identificador del cliente

Prof. Dr. Paul Bustamante

FUNDAMENTOS DE INFORMÁTICA 1º Ingeniería Industrial

funciones printf scanf

Es un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos.

LENGUAJE. Tema 4 Vectores, Matrices y Cadenas de caracteres.

Escuela Politécnica Superior de Elche

PROBLEMAS DEL TEMA 7: Subprogramas y Modularidad

Programación Estructurada

Lenguaje de programación C. Introducción

Ejercicios Tema 6. Funciones

1. Cuestiones. Ejercicios resueltos de C. Diego Rodríguez-Losada 1. //a) #include <stdio.h> main( ) { int x = 0, y = 0; //b) #include <stdio.

Matrices y Sistemas Lineales

Descripción de un Programa

Los constructores son funciones miembro especiales que sirven para inicializar un objeto de una determinada clase al mismo tiempo que se declara.

PROGRAMA: COMPUTACION I

Repaso de lenguaje C. Índice. Repaso de lenguaje C. Repaso de lenguaje C: Tipos básicos

Informática Ingeniería en Electrónica y Automática Industrial

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

DEFINICIONES TIPOS DE MATRICES DETERMINANTES Y PROPIEDADES OPERACIONES MATRICIALES INVERSA DE UNA MATRIZ SISTEMAS DE ECUACIONES

Apuntadores y Memoria dinámica. Apuntadores. M.C. Yolanda Moyao Martínez

Transcripción:

Práctica 8 Vectores, Cadenas y Matrices en C Introducción En esta práctica se pretende que el alumno practique el uso de vectores, cadenas de caracteres y matrices en lenguaje C mediante un conjunto de ejercicios que deberá completar parcialmente. La práctica se realizará empleando el compilador Dev-C++ que ya fue descrito en el primera práctica del cuatrimestre. Desarrollo de la práctica Al igual que en la práctica anterior, le proponemos ahora que trate de resolver las cuestiones que a continuación se le plantean, todas ellas relacionadas con los contenidos que se pretenden poner en práctica en esta ocasión. Para ayudarle en la realización de las cuestiones se le proporciona una parte de código para facilitarle el planteamiento de la solución. La práctica se compone de 3 ejercicios diferentes. Para cada ejercicio se le proporciona el molde de un programa que deberá completar con su código. IMPORTANTE: Debe respetar la estructura que se le propone sin omitir ninguna línea de código. Una vez finalizados los ejercicios deberá entregar la solución a través del servidor de docencia tal como se explica al final de este enunciado. 1

Cuestión 1 Complete el código que se muestra a continuación para obtener el producto de dos matrices dadas. Se pide que realice la multiplicación de matrices empleando dos funciones con diferentes prototipos: la función multmat1 recibe las matrices como tablas bidimensionales de tamaño fijo, mientras que la función multmat2 las recibe como un vector linealizado por filas. A continuación se proporciona un programa de ejemplo que muestra el uso de estas funciones: #include<stdio.h> #define N 50 void multmat1(float A1[N][N],float B1[N][N],float resu1[n][n],int fila,int cola,int colb); void multmat2(float *A2,float *B2,float *resu2, int fila,int cola,int colb); main() int i,j; int fila=2; int cola=3; int filb=cola; /*Necesario para tener dimensiones compatibles*/ int colb=2; /*Declaración matrices método 1 */ float A1[N][N]=1,2,3,4,5,6; float B1[N][N]=1,2,3,4,5,6; float resu1[n][n]; /*Declaración matrices método 2 */ float A2[N*N]=1,2,3,4,5,6; float B2[N*N]=1,2,3,4,5,6; float resu2[n*n]; /* Multiplicación método 1*/ multmat1(a1,b1,resu1,fila,cola,colb); printf("\nresultado multiplicacion 1\n\n"); for(i=0;i<fila;i++) for(j=0;j<colb;j++) printf("%5.2f\t",resu1[i][j]); printf("\n"); /* Multiplicación método 2*/ multmat2(a2,b2,resu2, fila,cola,colb); printf("\nresultado multiplicacion 2\n\n"); for(i=0;i<fila;i++) for(j=0;j<colb;j++) printf("%5.2f\t", resu2[i*colb+j]); printf("\n"); getch(); 2

El objetivo es proporcionar la definición de ambas funciones. void multmat1(float A1[N][N],float B1[N][N],float resu1[n][n],int fila,int cola,int colb) void multmat2(float *A2,float *B2,float *resu2,int fila, int cola,int colb) 3

Cuestión 2 Complete el código que se muestra a continuación, y que tiene por objeto manipular una cadena de caracteres que se introduce por teclado. El programa debe tomar dicha cadena y transformarla de modo que cada palabra del texto aparezca invertida, pero respetado el orden de las palabras. Es decir: Si la cadena de caracteres introducida fuese Esto es una prueba el resultado proporcionado será otse se anu abeurp El texto procesado debe depositarse en la misma cadena origen que pasa como argumento. #include <stdio.h> void inviertetexto(char *); main() int i; char texto[100]; /*Espacio para el texto a tratar. Máximo N caracteres*/ printf("\nintroduzca texto a procesar: "); gets(texto); inviertetexto(texto); printf("\nel texto invertido es: %s\n",texto); getch(); void inviertetexto(char *texto) int p1,p2; int i,cont; char aux; cont=0 ; 4

Cuestión 3 El SUDOKU (en japonés, números solos ) es un pasatiempo en el que se trata de rellenar un cuadrado de 9x9 con números del 1 al 9. El cuadrado está formado a su vez por 3 subcuadrados de 3x3 casillas. Un Sudoku ya resuelto (es decir, con todas las casillas rellenas con algún número del 1 al 9) es correcto si no hay ningún número repetido en cada una de las columnas, filas y sub-cuadrados del mismo. El objetivo de los siguientes apartados es diseñar una función en C, tal dado un Sudoku resuelto se determine si es correcto o no. El Sudoku está almacenado en un vector de 81 componentes en el que se encuentran (ordenados por filas) los números correspondientes a cada casilla. Para diseñar esta función se divide el problema en 5 funciones que resuelven una parte independiente. 0 1 2 3 4 5 6 7 8 0 1 5 8 4 2 1 3 6 3 3 4 1 2 4 9 5 6 4 1 8 6 4 3 7 1 2 4 3 8 3 1 2 4 Apartado 1 Desarrollar una función tal que dado un Sudoku resuelto y una casilla definida por su fila y columna (suponemos que la primera fila y la primera columna se indican con el número cero) comprueba si el número de esa casilla número se repite más de una vez en la fila a la que pertenece. La función debe devolver 0 si el número de la casilla se repite más de una vez. En caso contrario devuelve un 1. int sud_fil(int * M, int i, int j) Apartado 2 Desarrollar una función tal que función que dado un Sudoku resuelto y una casilla definida por su fila y columna (suponemos que la primera fila y la primera columna se indican con el número cero) comprueba si el número de esa casilla se repite más de una vez en la columna a la que pertenece. La función debe devolver 0 si el número de la casilla se repite más de una vez. En caso contrario devuelve un 1. int sud_col(int * M, int i, int j) 5

Apartado 3 Desarrollar una función tal que función que dado un Sudoku resuelto y una casilla definida por su fila y columna (suponemos que la primera fila y la primera columna se indican con el número cero) comprueba si el número de esa casilla se repite más de una vez en el subcuadrado al que pertenece. La función debe devolver 0 si el número de la casilla se repite más de una vez. En caso contrario devuelve un 1. int sud_sub(int * M, int i, int j) Apartado 4 Desarrollar una función tal que función que dado un Sudoku resuelto y una casilla definida por su fila y columna (suponemos que la primera fila y la primera columna se indican con el número cero) comprueba si el número de esa casilla cumple todas las condiciones para que el Sudoku sea correcto. La función debe devolver 0 si el número de la casilla se repite más de una vez en la fila, la columna o el sub-cuadrado a los que pertenece o si no está comprendido entre 1 y 9 (no cumple alguna condición). En caso contrario devuelve un 1 (si cumple todas las condiciones). Esta función puede usar las funciones diseñadas anteriormente. int sud_cas(int * M, int i, int j) Apartado 5 Desarrollar una función tal que función que dado un Sudoku resuelto comprueba si es correcto. La función debe devolver 0 si alguna casilla se repite más de una vez en la fila, la columna o el sub-cuadrado a los que pertenece o si no está comprendida entre 1 y 9 (no cumple alguna condición). En caso contrario devuelve un 1 (todas las casillas cumplen todas las condiciones). Esta función puede usar las funciones diseñadas anteriormente. int sud(int * M) 6

Nota: Para resolver este problema es importante poder comprobar que cada función esta diseñada correctamente. A continuación se proporciona un programa de ejemplo que se puede usar para realizar esta comprobación. #include<stdio.h> int sud_fil(int * M, int i, int j); int sud_col(int * M, int i, int j); int sud_sub(int * M, int i, int j); int sud_cas(int * M, int i, int j); int sud(int * M); void main(void) /*Sudoku resuelto (cambiarlo para probar diferentes casos)*/ int res; int sudoku[81] = 1,4,5,3,2,7,8,9,6, 2,4,5,3,2,7,8,9,6, 3,4,5,3,2,7,8,9,6, 4,4,5,3,2,7,8,9,6, 5,4,5,3,2,7,8,9,6, 6,4,5,3,2,7,8,9,6, 7,4,5,3,2,7,8,9,6, 8,4,5,3,2,7,8,9,6, 9,4,5,3,2,7,8,9,6 ; /*Comprueba si el elemento de la primera fila, segunda columna es correcto*/ res = sud_cas(sudoku,0,0); printf("%d \n",res); /*Comprueba si el elemento de la primera fila, segunda columna esta repetido en su columna */ res = sud_fil(sudoku,0,0); printf("%d \n",res); /*Comprueba si el sudoku es correcto*/ res = sud(sudoku); printf("%d \n",res); getch(); 7

Entrega de la práctica a través del servidor Los resultados de todas la práctica se entregará usando el Servidor de Docencia. Para el correcto funcionamiento de las siguientes páginas su navegador debe permitir cookies y la ejecución de javascript. El servidor de docencia se encuentra situado en la siguiente dirección http://bono.us.es/sdocencia/ La entrega de la práctica consiste en copiar el código de cada cuestión que se encuentra entre las dos líneas de comentarios (en rojo) en el cuadro de respuestas correspondiente del Servidor de Docencia. Hay que copiar el código una vez se haya comprobado el correcto funcionamiento del programa. Cada apartado tiene un espacio asignado dónde copiar el código correspondiente. Solo hay que copiar el código que se encuentra entre las dos líneas de comentarios del molde proporcionado en el enunciado. Es especialmente importante que siga estas instrucciones si quiere que la práctica sea evaluada apropiadamente. 8