LENGUAJES DE PROGRAMACIÓN. Solución al Trabajo Práctico - Septiembre de 2012

Documentos relacionados
LENGUAJES DE PROGRAMACIÓN. Solución al Trabajo Práctico - Septiembre de 2017

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Septiembre 2014

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Junio 2017, Primera Semana

LENGUAJES DE PROGRAMACIÓN. Trabajo Práctico - Septiembre de 2017

Indique la veracidad o falsedad de cada una de las afirmaciones siguientes, explicando detalladamente en cada caso el motivo de su respuesta.

Variables y tipos básicos 1. Definir una variable de tipo char. Convertirla a una variable de tipo entera e imprimir su valor asociado.

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

Ejercicios Tema 6. Funciones

Programación. Ejercicios Tema 6 Tipos de Datos Estructurados: Vectores y Matrices

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Hoja de ejercicios del Tema 3

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

MATRICES Y DETERMINANTES MATRIZ INVERSA

Elementos de un programa en C

Estos argumentos posicionales trabajan con todos los datos que hay en la dirección especificada hasta que se encuentran con una celda vacía

Introducción al lenguaje C

Matemáticas 2.º Bachillerato. Matemáticas 2.º Bachillerato. Matemáticas 2.º Bachillerato. Ejemplo:

UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO

Tipos de variables. Lenguaje C. Departamento de Electrónica. Tipos de datos, variables y constantes. Fundación San Valero

Programación I. Ingeniería Técnica Informática. Ejercicios de los Temas 4, 5, 6 y 7

Introducción rápida a la programación (estructurada ) con C++

II.6.1 CONVERSIONES DE NÚMEROS EXPRESADOS EN CUALQUIER BASE A BASE DIEZ. Para transformar un número en base diez a otra base, se aplica la expresión:

GUÍA DE TRABAJO N 1 C# Ing. Néstor Raúl Suarez Perpiñan Página 1 de 13

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

Tipos de datos y Operadores Básicos

A cada matriz n-cuadrada A = (ai j ) se le asigna un escalar particular denominado determinante de A, denotado por det (A), A o

FUNDAMENTOS DE PROGRAMACIÓN. 1º ING. INFORMÁTICA (Plan 2000) 2ª Convocatoria. 21 de junio de 2001

Programación estructurada (Tipos, operadores y expresiones)

Ejercicios sobre recursividad

Tipos de Datos en C. Palabras reservadas en C

Informática PRÀCTICA 3 Curs Práctica Nº 3: Tipos de datos simples. Constantes y variables. Operadores aritméticos. Formato de salida.

Anexo. Aplicaciones de los Determinantes

Examen escrito de Programación 1

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

MANEJO DE EXCEPCIONES en C++ Dr. Oldemar Rodríguez R. Escuela de Informática Universidad Nacional

Práctica 1 - Representación de la información

Grado en Ciencias Ambientales. Matemáticas. Curso 10/11.

2).- Nombre de función. Para obtener una lista de funciones disponibles, haga clic en una celda y presione MAYÚSC+F3.

Es decir, det A = producto de diagonal principal producto de diagonal secundaria. Determinante de una matriz cuadrada de orden 3

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Programación 1 Tema 3. Información, datos, operaciones y expresiones

MATEMÁTICAS 2º BACH CIENCIAS DETERMINANTES DETERMINANTES

Impresión por pantalla. 3. Indicar la salida por pantalla (2 puntos-20 minutos)

2^10 2^9 2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 SUMA

Desarrollo de Programas. Prof. Lisbeth C. Pérez Rivas

Práctica 1 Arreglos n-dimensionales y operaciones con bits PRÁCTICA I

Programación En Lenguaje C

Problema - Sumando Digitos

SESIÓN DE EJERCICIOS E1

Unidad 5: Estructuras Estáticas I: Tablas 1 Unidad 5 ESTRUCTURAS ESTÁTICAS I: Tablas Desarrollo de la unidad : 36 h

1. Lección 3: Matrices y Determinantes

FUNDAMENTOS DE INFORMÁTICA

Tema I. Matrices y determinantes

Determinantes. Definiciones básicas sobre determinantes. José de Jesús Angel Angel.

TEST DE DETERMINANTES

Estructuras de Repetición (Repita para)

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

Cadenas (strings) y Estructuras

EJERCICIOS RESUELTOS DE DETERMINANTES

Funciones: Pasos por Referencia Recursividad

Fundamentos de Programación

Expresiones Lógicas y Operadores sobre Bits

PRÁCTICA 1: Introducción a Matlab

Fundamentos de la programación

MATRICES OPERACIONES BÁSICAS CON MATRICES

Lección 2 Introducción al lenguaje C

Porque usar Arreglos?

E.T.S. Minas: Métodos Matemáticos Soluciones Tema 3: Resolución aproximada de ecuaciones

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Matrices: Una ordenación de números dispuestos en filas y columnas, encerrados entre corchetes

75.12 ANÁLISIS NUMÉRICO I GUÍA DE PROBLEMAS 1. ERRORES

WHILE Y DO WHILE BREAK EN LENGUAJE C. BUCLES MIENTRAS. FORZAR SALIDA O TERMINACIÓN. EJEMPLO (CU00534F)

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa

Tipos de datos y operadores en C++

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

Estructuras de Selección, armado de Equipos, y Trabajo #1.

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Tema 2. Tipos y Estructuras Básicas

Clase 8 Matrices Álgebra Lineal

ALGEBRA LINEAL - Práctica N 2 - Segundo cuatrimestre de 2017 Matrices y coordenadas

Matrices, determinantes y sistemas de ecuaciones lineales

Menor, cofactor y comatriz

Universidad de Buenos Aires - Facultad de Ciencias Exactas y Naturales - Departamento de Matemática Segundo Cuatrimestre de 2002 ÁLGEBRA LINEAL

Dos matrices son iguales cuando tienen la misma dimensión y los elementos que ocupan el mismo lugar en ambas son iguales

Cadenas de caracteres

ALGEBRA y ALGEBRA LINEAL

Entrada de ejemplo

CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen

1 0 4/ 5 13/

Fundamentos de la programación

Cadenas y Estructuras

Tema 2. Tipos predefinidos

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

4.1. Determinante de una matriz cuadrada de orden 2. , entonces el determinante de A es a 21 a 22 a 11 a 12 = a 11a 22 a 12 a 21

EJEMPLO DE PARTIDA. Pongo en la casilla: 4 El tablero queda como: X

MATRICES Y DETERMINANTES II.

TERCER EXAMEN PARCIAL ALGEBRA LINEAL I 23 DE MAYO DE 2014 (CON SOLUCIONES)

ARRAYS NUMÉRICOS: VECTORES Y MATRICES

Bloque II. Elementos del lenguaje de programación Java

Transcripción:

Solución al Trabajo Práctico - Septiembre de 2012 EJERCICIO 1 Escriba un programa en C++ que realice las acciones siguientes: 1. Muestre un mensaje en la consola solicitando que se introduzca por consola el valor del semieje mayor (a) y del semieje menor (b) de una elipse. 2. Lea los valores introducidos por el usuario y los almacene en dos variables double llamadas a y b, respectivamente. Debe satisfacerse a b. En caso contrario, mostrar un mensaje indicándolo y terminar. 3. Calcule y muestre en la consola un valor aproximado del perímetro (p) de la elipse obtenido aplicando la fórmula [ p π 3(a + b) ] (3a + b)(a + 3b) Esta expresión para el cálculo aproximado del perímetro de la elipse fue propuesta por el matemático indio Ramanujan en el año 1914. 4. Teniendo en cuenta que el perímetro (p) de la elipse satisface p = 2aπ [ 1 i=1 ] (2i)! 2 (2 i i!) 4 ε 2i 2i 1 donde ε = a2 b 2 a

se denomina excentricidad de la elipse, el programa debe calcular y mostrar en la consola los treinta valores aproximados del perímetro de la elipse obtenidos al desarrollar la serie p 2aπ [ 1 N i=1 ] (2i)! 2 (2 i i!) 4 ε 2i 2i 1 para N igual a 1, 2,..., 30. Cuanto mayor es el valor de N, más cercano está el valor aproximado obtenido al valor exacto del perímetro. En todos los casos, el valor del perímetro de la elipse debe mostrarse en formato científico, con 10 dígitos de precisión. 2 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - SEPTIEMBRE DE 2012 Solución al Ejercicio 1 #include <iostream> #include <iomanip> #include <cmath> const doublepi =3.1415926535; const intn =30; intmain() { doublea,b; std::cout <<"Introduzca el semieje mayor (a): "; std::cin >> a; std::cout <<"Introduzca el semieje menor (b): "; std::cin >> b; if (a <b) { std::cout <<"Error: debe satisfacerse a >= b"; // Cálculo del perímetro mediante la fórmula de Ramanujan std::cout <<"Perimetro (Ramanujan):\t"<< std::scientific << std::setprecision(10) << PI*(3*(a+b) -std::sqrt((3*a+b)*(a+3*b))) << std::endl; // Cálculo del perímetro mediante la serie doubleeps =std::sqrt(a*a-b*b)/a; std::cout <<"Excentricidad: "<< eps << std::endl; double dos_i_factorial=1, i_factorial=1; doublep1 =1; for (inti=1;i<=n;i++) { i_factorial *= i; dos_i_factorial *=2*i*(2*i-1); doublenum =std::pow(dos_i_factorial,2)*std::pow(eps,2*i); doubledenom =std::pow(std::pow(2.0,i)*i_factorial,4 )*(2*i-1); p1 -=num/denom; std::cout <<"Perimetro (N : "<< i <<" ):\t"<< 2*a*PI*p1 <<std::endl; Código 1.1: Programa solución al Ejercicio 1. Dpto. de Informática y Automática, UNED 3

EJERCICIO 2 Escriba un programa en C++ que estime los extremos (máximos y mínimos) locales de la función f(x) = 1 x 2 sin(x) en un intervalo [a, b]. El algoritmo a aplicar consiste en analizar el valor de la función en los puntos x i = a + b a N i para i : 1,...,N 1 comparando f(x i 1 ), f(x i ) y f(x i+1 ), a fin de determinar si la función tiene en x i un mínimo o máximo relativo. Para determinar si cada extremo del intervalo es un máximo o un mínimo local, debe compararse f(a) con f(x 1 ) y f(b) con f(x N 1 ). El programa debe realizar las acciones siguientes: 1. Solicitar al usuario que introduzca los extremos del intervalo: a y b. Si no se satisface b > a, mostrar un mensaje en la consola indicándolo y terminar. 2. Solicitar al usuario que introduzca por consola el valor de N, que debe ser un número entero mayor que dos. Si no se satisface N > 2, mostrar un mensaje en la consola indicándolo y terminar. 3. Evaluar la función f en los puntos x i, con i : 0,..., N, escribiendo en la consola los pares {x i, f(x i ) correspondientes a máximos o mínimos locales, indicando en cada caso si se trata de un máximo o un mínimo. 4 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - SEPTIEMBRE DE 2012 Solución al Ejercicio 2 #include <iostream> #include <cmath> double f(double x) { return1 -x *x *std::sin(x); intmain() { doublea,b; std::cout << "Introduzca los extremos del intervalo [a,b]\n"<< "a: "; std::cin >> a; std::cout <<"b: "; std::cin >> b; if (a >=b ) { std::cout <<"ERROR: Debe satisfacerse a < b"<< std::endl; intn; std::cout <<"Introduzca el numero de puntos (N): "; std::cin >> N; if (! (N >2) ) { std::cout <<"ERROR: N debe ser mayor que dos"<< std::endl; doubleincx = (b-a)/n; // Análisis del extremo a if (f(a) <f(a +incx) ) std::cout <<"Min: "<< a <<",\t"<< f(a) << std::endl; if (f(a) >f(a +incx) ) std::cout <<"Max: "<< a <<",\t"<< f(a) << std::endl; // Análisis de los puntos internos al intervalo for (inti=1;i<n;i++) { if ( f(a+i*incx) < f(a+(i-1)*incx) && f(a+i*incx) < f(a+(i+1)*incx) ) std::cout <<"Min: "<< a+i*incx <<",\t"<< f(a+i*incx) << std::endl; if ( f(a+i*incx) > f(a+(i-1)*incx) && f(a+i*incx) > f(a+(i+1)*incx) ) std::cout <<"Max: "<< a+i*incx <<",\t"<< f(a+i*incx) << std::endl; // Análisis del extremo b if (f(b) <f(b -incx) ) std::cout <<"Min: "<< b <<",\t"<< f(b) << std::endl; if (f(b) >f(b -incx) ) std::cout <<"Max: "<< b <<",\t"<< f(b) << std::endl; Código 1.2: Programa solución al Ejercicio 2. Dpto. de Informática y Automática, UNED 5

EJERCICIO 3 Escriba en C++ un programa que convierta a decimal un número hexadecimal introducido por el usuario a través de la consola. El programa debe realizar las acciones siguientes: 1. Escribir un mensaje en la consola solicitando al usuario que introduzca por consola un número hexadecimal con un máximo de 8 dígitos. 2. Almacenar el número introducido en una variable de tipo std::string llamadanumhex. 3. Comprobar que el número de dígitos del número es menor o igual a ocho. En caso contrario, mostrar un mensaje en la consola y terminar. 4. Comprobar que el número introducido es un número hexadecimal válido. Para ello, comprobar que cada uno de los dígitos del número pertenece al conjunto {0 9, A, B, C, D, E, F. Si no es un número hexadecimal válido, mostrar un mensaje en la consola indicándolo y terminar. 5. Calcular el valor decimal de numhex, suponiendo que numhex representa un número hexadecimal sin signo, y almacenar el valor calculado en una variable del tipo unsigned long int llamadanumdec. 6. Mostrar el valor denumdec en la consola. 6 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - SEPTIEMBRE DE 2012 Solución al Ejercicio 3 #include <iostream> #include <string> intmain() { std::string numhex; std::cout <<"Introduzca el numero hexadecimal: "; std::cin >> numhex; // Comprueba el número de dígitos del número if (numhex.length()>8) { std::cout <<"ERROR: Numero de digitos mayor que 8" << std::endl; // Analiza la cadena de caracteres y convierte a decimal unsigned long intnumdec =0; unsigned long intpeso =1; for (inti =numhex.size()-1;i >=0 ;i--) { if (numhex[i] >= 0 &&numhex[i]<= 9 ) { numdec += (numhex[i]- 0 )*peso; else if (numhex[i] == A ) { numdec +=10*peso; else if (numhex[i] == B ) { numdec +=11*peso; else if (numhex[i] == C ) { numdec +=12*peso; else if (numhex[i] == D ) { numdec +=13*peso; else if (numhex[i] == E ) { numdec +=14*peso; else if (numhex[i] == F ) { numdec +=15*peso; else { std::cout <<"ERROR - Caracter desconocido: "<< numhex[i] << std::endl; peso *=16; std::cout <<"Numero decimal: "<< numdec << std::endl; Código 1.3: Programa solución al Ejercicio 3. Dpto. de Informática y Automática, UNED 7

EJERCICIO 4 En este ejercicio se propone realizar un programa en C++ que calcule la inversa de una matriz 3 3 especificada por el usuario. El programa en C++ debe realizar las acciones siguientes: 1. Mostrar un mensaje en la consola indicando al usuario que introduzca los nueve componentes de la matriz a invertir. El orden en el cual deben introducirse los componentes es el siguiente: en primer lugar los tres primeros números corresponden a la primera fila, a continuación los tres siguientes a la segunda y finalmente los tres últimos a la tercera fila. 2. Calcular el determinante de la matriz A y mostrar su valor en la consola. El determinante de A se representa en lo sucesivo A. 3. Si A 0, calcular la matriz inversa y mostrarla en la consola. Empléese para ello la expresión: A 1 = 1 (Adj (A))T A donde A 1 representa la matriz inversa de A, Adj (A) la matriz adjunta de A y (.) T indica la operación de trasponer la matriz. 4. Si A = 0, mostrar un mensaje en la consola indicándolo y terminar. 5. Como comprobación de que el cálculo de la matriz inversa se ha realizado correctamente, calcular y mostrar en la consola el resultado de multiplicar A por A 1. Si el cálculo es correcto, el resultado debe ser la matriz unidad (unos en la diagonal y cero los demás componentes). Solución al Ejercicio 4 8 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - SEPTIEMBRE DE 2012 #include <iostream> intmain() { // Entrada por consola de los componentes de la matriz std::cout <<"Introduzca los componentes de la matriz:\n"; doublea[3][3]; for (inti=0;i<3;i++) { for (intj=0;j<3;j++) { std::cout <<"A["<<i <<","<<j <<"]: "; std::cin >>A[i][j]; // Cálculo del determinante doubledeta = A[0][0]*A[1][1]*A[2][2] -A[0][0]*A[1][2]*A[2][1] + A[0][1]*A[1][2]*A[2][0] -A[0][1]*A[1][0]*A[2][2] + A[0][2]*A[1][0]*A[2][1] -A[0][2]*A[1][1]*A[2][0]; if (deta ==0) { std::cout <<"El determinante vale cero"<< std::endl; std::cout <<"det(a): "<< deta << std::endl; // Cálculo de la matriz adjunta double adja[3][3]; adja[0][0] = A[1][1]*A[2][2] -A[1][2]*A[2][1]; adja[0][1] = -A[1][0]*A[2][2] +A[1][2]*A[2][0]; adja[0][2] = A[1][0]*A[2][1] -A[1][1]*A[2][0]; adja[1][0] = -A[0][1]*A[2][2] +A[0][2]*A[2][1]; adja[1][1] = A[0][0]*A[2][2] -A[0][2]*A[2][0]; adja[1][2] = -A[0][0]*A[2][1] +A[0][1]*A[2][0]; adja[2][0] = A[0][1]*A[1][2] -A[0][2]*A[1][1]; adja[2][1] = -A[0][0]*A[1][2] +A[0][2]*A[1][0]; adja[2][2] = A[0][0]*A[1][1] -A[0][1]*A[1][0]; // Matriz inversa: cálculo y escritura en consola std::cout <<"inva = "<< std::endl; double inva[3][3]; for (inti=0;i<3;i++) { for (intj=0;j<3;j++) { inva[i][j] =adja[j][i]/deta; std::cout << inva[i][j] <<"\t"; std::cout << std::endl; // Producto A por inva: cálculo y escritura en consola std::cout <<"A * inva = "<<std::endl; doublei[3][3]; for (inti=0;i<3;i++) { for (intj=0;j<3;j++) { I[i][j] =0; for (intk=0;k<3;k++) I[i][j] +=A[i][k] *inva[k][j]; std::cout <<I[i][j] <<"\t"; std::cout << std::endl; Código 1.4: Programa solución al Ejercicio 4. Dpto. de Informática y Automática, UNED 9

EJERCICIO 5 Escriba en C++ un programa que realice las acciones siguientes: 1. Declarar una variable global, llamada dat, que sea un array bidimensional de componentes int, con 8 filas y 8 columnas. Inicializar dicha variable, de manera que los componentes tomen valores cero y uno. 2. Analizar dat con el fin de encontrar cadenas de elementos con valor 1. Dos elementos con valor 1 están en la misma cadena si están en posiciones adyacentes en la horizontal, en la vertical o en alguna diagonal. 3. Muestre en la consola un mensaje indicando, para cada una de las cadenas encontradas, el tamaño de la cadena y la posición (fila, columna) de sus componentes. El tamaño de una cadena es el número de elementos que la componen. Las filas y columnas dedat se numeran considerando que la fila superior es la número 0 y que la columna situada más a la izquierda es la número cero. Por ejemplo, el array bidimensional 0 1 0 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 contiene las cadenas siguientes: 7 elementos: (0,1) (1,0) (2,0) (3,0) (4,1) (5,1) (5,2) 4 elementos: (1,3) (1,4) (1,5) (2,2) 2 elementos: (3,7) (4,6) 1 elemento: (7,2) 10 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - SEPTIEMBRE DE 2012 Solución al Ejercicio 5 #include <iostream> #include <sstream> intdat[8][8] = { {1,0,0,0,1,1,1,0, {1,1,1,0,0,0,0,0, {1,0,0,0,1,1,0,1, {0,0,0,1,0,0,0,1, {1,0,1,0,1,0,0,1, {1,0,1,0,0,1,0,0, {1,0,0,0,0,0,1,1, {1,1,1,1,1,1,1,1 ; voidimprimematriz() { for (inti=0;i<8;i++) { for (intj=0;j<8;j++) std::cout <<dat[i][j] <<" "; std::cout << std::endl; return; boolprincipiocadena() { // Si encuentra un elemento con valor 1, lo pone a valor 2 y devuelve true // Si ningún elemento tiene valor 1, devuelve false for (inti=0;i<8;i++) for (intj=0;j<8;j++) if (dat[i][j] ==1 ) { dat[i][j] =2; return true; return false; Código 1.5: Programa solución al Ejercicio 5 (1/3). Dpto. de Informática y Automática, UNED 11

boolinspeccionvecinos() { // componente valor 2: pertenece a la cadena, vecinos sin inspeccionar // componente valor 3: pertenece a la cadena, vecinos inspeccionados // Esta función pasa todos los componentes con valor 2 a valor 3, // pasando los vecinos de valor 1 a valor 2 // Si algún componente ha pasado de 1 a 2, devuelve true. // En caso contrario, devuelve false. boolcrececadena = false; for (inti=0;i<8;i++) for (intj=0;j<8;j++) if (dat[i][j] ==2 ) { dat[i][j] =3; if (j>0 &&i>0 &&dat[i-1][j-1] ==1 ) { dat[i-1][j-1] =2; if (j>0 &&dat[i][j-1] ==1 ) { dat[i][j-1] =2; if (i>0 &&dat[i-1][j] ==1 ) { dat[i-1][j] =2; if (i>0 &&j<7 &&dat[i-1][j+1] ==1 ) { dat[i-1][j+1] =2; if (j<7 &&dat[i][j+1] ==1 ) { dat[i][j+1] =2; if (i<7 &&j>0 &&dat[i+1][j-1] ==1 ) { dat[i+1][j-1] =2; if (i<7 &&dat[i+1][j] ==1 ) { dat[i+1][j] =2; if (i<7 &&j<7 &&dat[i+1][j+1] ==1 ) { dat[i+1][j+1] =2; returncrececadena; Código 1.6: Programa solución al Ejercicio 5 (2/3). 12 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - SEPTIEMBRE DE 2012 std::string escribecadena() { // Devuelve un string con todos los componentes de valor 3 de dat intnumelem =0; std::stringstream ss; for (inti=0;i<8;i++) for (intj=0;j<8;j++) if (dat[i][j] ==3) { ss <<"("<<i <<","<<j <<") "; numelem++; std::stringstream ss1; ss1 << numelem <<" elemento"; if (numelem >1)ss1 <<"s"; ss1 <<": "<<ss.str(); returnss1.str(); voidborracadena() { for (inti=0;i<8;i++) for (intj=0;j<8;j++) if (dat[i][j] ==3)dat[i][j] =0; return; intmain() { bool encontradanuevacadena = false; intnumcadenas =0; do { encontradanuevacadena =principiocadena(); //imprimematriz(); if (encontradanuevacadena) { boolcrececadena = false; do { crececadena =inspeccionvecinos(); while (crececadena); std::cout << escribecadena() << std::endl; numcadenas++; borracadena(); while (encontradanuevacadena); if (numcadenas==0) { std::cout <<"No se ha encontrado ninguna cadena"<< std::endl; Código 1.7: Programa solución al Ejercicio 5 (3/3). Dpto. de Informática y Automática, UNED 13