Práctica 6b: Uso de matrices y vectores en funciones.

Anuncio
Práctica 6b: Uso de matrices y vectores en
funciones.
Objetivos
En esta práctica el objetivo principal es el de poner en práctica los principios básicos del uso de
matrices y vectores en funciones.
Evaluación
La práctica consta de tres cuestiones, de los cuales habrá que realizar correctamente al menos una
para aprobar la práctica.
Procedimiento
En cada cuestión se pide la definición de una función de la cual se proporciona el prototipo y una
descripción de lo que debe realizar. Adicionalmente en algunas cuestiones se proporciona un
programa de ejemplo con llamadas a esa función para poder comprobar el correcto funcionamiento
de la misma.
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 desarrollador en cada cuestión 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.
IMPORTANTE:
•
Cada ejercicio se debe resolver utilizando el prototipo de la función pedida.
•
No está permitido el uso de lápices de memoria ni acceder a páginas web, en particular al
correo electrónico.
•
Está permitido crear y utilizar funciones auxiliares para resolver un ejercicio. Para poder
entregar correctamente una cuestión que use funciones adicionales, hay que definir el
prototipo de la función de forma local en la función que la utiliza y proporcionar su definición
en la respuesta.
1
Ejercicio 615
Realice una función en lenguaje C que compruebe si una matriz cuadrada dada es diagonal, es decir,
sólo tiene elementos no nulos en la diagonal. La matriz tiene una dimensión máxima de 10x10. La
función recibe como parámetro de entrada la matriz y su dimensión.
Prototipo
int mdiagonal( int A[][10], int N);
Programa de ejemplo
void main(void)
{
/* DECLARACIÓN DE VARIABLES (realice tabla de objetos) */
int M[10][10];
/* Matriz de dimension máxima 10x10*/
int i,j;
/* Índices para la indexación de la matriz*/
int nc;
/* Número de columnas de la matriz cuadrada*/
int resultado;
/* LECTURA DE DATOS */
printf("Introduzca el numero de columnas de la matriz (<11): ");
scanf("%d",&nc);
printf("El primer elemento de la matriz es el M11\n");
for(i=1;i<=nc;i++) /* lectura de matriz */
{
for(j=1;j<=nc;j++)
{
printf("M%d%d = ",i,j);
scanf("%d",&M[i-1][j-1]);
}
}
resultado = mdiagonal(M,nc);
/* ESCRITURA DE RESULTADOS */
if (resultado!=0)
{
printf("La matriz es diagonal");
}
else
{
printf("La matriz no es diagonal");
}
/* BLOQUEO DE PANTALLA*/
printf("\n");
system("pause");
}
2
Cuestión 605
Diseñar una función que calcule el valor del menor número positivo de un vector de enteros de
dimensión variable. La función recibe un puntero al primer elemento del vector y la dimensión del
mismo. La función debe devolver este valor o -1 si no hay ningún número positivo.
Prototipo
void minaltura(int *,int);
Programa de ejemplo
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int minaltura(int *,int);
main(void)
{
int x[10] = {-10,-2,-3,-4,-3};
if(minaltura(x,5)>0)
printf("El menor valor positivo es %d",minaltura(x,5));
else
printf("No hay valores positivos");
}
int minaltura(int * v,int n)
{
/*************INICIO CÓDIGO DE ALUMNO*****************/
/***************FIN CÓDIGO DE ALUMNO******************/
}
3
Cuestión 601
Escriba una función que devuelva el valor en decimal de un número expresado en formato de punto
fijo con N bits para la parte entera y M bits para la parte decimal.
Suponga para simplificar que el número binario está expresado en formato signo valor absoluto
ocupando un vector n de 16 enteros, de modo que cada componente contiene valores únicamente, 0
o 1. Se entiende que el bit de signo es n[0] y los N siguientes (de v[1] a V[N]) corresponden a la
parten entera del número con v[1] el bit más significativo, y los M bits siguientes (de v[N+1] a V[N+M])
corresponden a la parte decimal.
La función recibe el vector de enteros y devuelve un flotante con el valor expresado en decimal.
Ejemplo: Si tomamos N=11 y M=4, el número -5.625 se codificaría en este formato como:
int v[16]={1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0};
Prototipo
float comafija2dec (int n[]);
Programa de ejemplo
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
float comafija2dec(int n[],int N,int M);
/**********************************************************************/
/* PASO A DECIMAL DE COMA FIJA N+M BITS
/**********************************************************************/
main()
{
int n[16]={0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1};
int i,j,k,sp;
int N = 11;
int M = 4;
for(i=0;i<10;i++)
{
for(j=0;j<16;j++)
printf("%1d",n[j]);
printf (" = %f\n",comafija2dec(n,N,M));
for(j=0;j<16;j++)
{
for(k=j,sp=0;k<16;k++)
sp+=n[k];
n[j]=sp%2;
}
}
}
float comafija2dec(int n[],int N,int M)
{
/*************INICIO CÓDIGO DE ALUMNO*****************/
/***************FIN CÓDIGO DE ALUMNO******************/
}
4
Descargar