Universidad de Sevilla
Escuela Superior de Ingenieros
Dpto. de Ingeniería de Sistemas y Automática
Camino de los Descubrimientos, s/n
41092 SEVILLA
Práctica 6: Funciones en C
Objetivo
El objetivo de esta práctica es la de profundizar en el uso de funciones en
lenguaje C. Para ello, se llevarán a cabo ejercicios básicos que de cadenas de
caracteres y de manejo de matices en C.
Se realizará la entrega al sistema Doctus de los ejercicios codificados en C.
Metodología
Se propone al alumno diseñar el programa en lenguaje C que resuelva los
ejercicios propuestos. El profesor de práctica analizará y detallará la solución de
estos ejercicios en colaboración con los alumnos en la clase.
Se recomienda el alumno repasar los conceptos de funciones, vectores, cadenas
de caracteres y matrices vistos en clase.
Ejercicios propuestos
Ejercicio 1. Implementar una función en lenguaje C llamada
“concatena_cadena”. Esta función recibe dos cadenas de caracteres “cad1”
y “cad2”, y crea una nueva cadena “res” que contiene las dos cadenas de
entrada separadas por el carácter espacio ‘ ’.
El prototipo de la función debe ser el siguiente:
void concatena_cadena(char *cad1, char *cad2, char *res)
Ejemplo:
cad1=”hola” cad2=”mundo” res=”hola mundo”
cad1=”como” cad2=”estas?” res=”como estas?”
cad1=”estoy” cad2=”bien” res=”estoy bien”
Se pide la codificación en C del programa y la entrega en el sistema Doctus.
El alumno debe adaptar su solución al siguiente código C, su solución DEBE
hacer uso de las variables especificadas.
#include "stdafx.h"
#define N 100
void concatena_cadena(char *, char *, char *);
int main(void)
{
/* DECLARACIÓN DE VARIABLES */
char cad1[N], cad2[N], resultado[N];
/* LECTURA DE DATOS */
printf("Introduzca primera cadena: ");
scanf("%s", cad1);
printf("Introduzca segunda cadena: ");
scanf("%s", cad2);
/* LLAMADA A LA FUNCION */
concatena_cadena(cad1, cad2, resultado);
/* ESCRITURA DE RESULTADOS */
printf("Cadena resultante: %s\n", resultado);
return 0;
}
void concatena_cadena(char *cad1, char *cad2, char *res)
{
int i, j;
/*************INICIO CODIGO DE ALUMNO*****************/
/***************FIN CODIGO DE ALUMNO******************/
}
Ejercicio 2. Una matriz 9x9 es un sudoku si se cumplen las siguientes
condiciones:
a) Ningún valor se repite en la misma fila.
b) Ningún valor se repite en la misma columna.
c) Ningún valor se repite dentro de cada submatriz 3x3 del sudoku (9
submatrices).
d) Todos los elementos de la matriz están comprendidos entre 1 y 9.
Realice una función que compruebe si la posición i, j de una matriz 9x9 dada
como parámetro no está repetida en su correspondiente submatriz y que su
valor está entre el 1 y el 9. Si se cumplen ambas condiciones, la función
devolverá el valor entero 1, en caso contrario devolverá 0.
Se pide la codificación en C del programa y la entrega en el sistema Doctus.
El alumno debe adaptar su solución al siguiente código C, su solución DEBE
hacer uso de las variables especificadas.
#include "stdafx.h"
#define N 9
int test_sudoku(int, int, int [N][N]);
int main(void)
{
int M[N][N] =
/* 0 3 6 */
/*0*/{ { 1,6,2, 8,5,7, 4,9,3 },
{ 5,3,4, 1,2,9, 6,7,8 },
{ 7,8,9, 6,4,3, 5,2,1 },
/*3*/ { 4,7,5, 3,1,2, 9,8,6 },
{ 9,1,3, 5,8,6, 7,4,2 },
{ 6,2,8, 7,9,4, 1,3,5 },
/*6*/ { 3,5,6, 4,7,8, 2,1,9 },
{ 2,4,1, 9,3,5, 8,6,7 },
{ 8,9,7, 2,6,1, 3,5,4 } };
int i, j;
int res; /* vale 1 si es sudoku, 0 si no lo es*/
/* LECTURA DE DATOS */
printf("\nIntroduzca la fila: ");
scanf("%d", &i);
printf("Introduzca la columna: ");
scanf("%d", &j);
/* VERIFICA EL SUDOKU EN i,j */
res = test_sudoku(i, j, M);
/* ESCRITURA DE RESULTADOS */
if (res == 1)
printf("\n El elemento %d,%d cumple las condiciones", i, j);
else
printf("\n El elemento %d,%d no cumple las condiciones", i, j);
return 0;
}
int test_sudoku(int fil, int col, int mat[N][N])
{
int i, j; /* Para recorrer la matrix */
int ofil, ocol; /* Origen del bloque de sudoku actual */
int res; /* Resultado */
int val; /* Valor en la matriz en la posicion fil,col */
/*************INICIO CODIGO DE ALUMNO*****************/
/***************FIN CODIGO DE ALUMNO******************/
return res;
}