RELACIÓN DE PROBLEMAS A ENTREGAR

Anuncio
RELACIÓN DE PROBLEMAS A ENTREGAR
Debido a la solicitud de varios alumnos que no pueden asistir a las clases teóricas, sólo
habrán de entregarse los problemas correspondientes a las prácticas de la asignatura.
Es decir, sólo habrá que entregar los problemas:
•
Problema 6: Práctica 2: Introducción al uso de funciones en lenguaje C:
Factorización y obtención del máximo factor primo.
•
Problema 7: Práctica 3: Vectores y cadenas de caracteres: Ordenar los
elementos de una cadena de caracteres.
•
Problema 8: Práctica 4: Multiplicación de matrices empleando notación
vectorial.
•
Problema 9:
publicada.)
Práctica 5: Funciones de entrada/salida de ficheros (aún no
PRÁCTICA 2: INTRODUCCIÓN AL USO DE FUNCIONES
Práctica
Introducción al Uso de Funciones en Lenguaje C
1 .- INTRODUCCIÓN
Se pide realizar un programa que calcule la factorización de un número introducido
desde teclado, y que presente por pantalla el máximo factor primo obtenido. Se
entiende por factorización de un número, el conjunto de numeros primos por el que es
divisible, incluyendo aquellos que se repiten y el 1.
Ej: 20 = 1 · 2 · 2 · 5
maxfactor = 5
2 .- DESARROLLO DE LA PRÁCTICA
El programa estará estructurado de la siguiente forma:
a) Función main:
- En ella se declararán la variable que contendrá el numero introducido desde
teclado, y la variable que contendrá el máximo factor primo (maxfactor).
-Desde la función main se llamará a otra función, denominada factoriza, que
deberá calcular dicha factorización y modificar el contenido de maxfactor.
b) Función factoriza:
-La función factoriza recibirá como parámetros un número entero que se
almacenará en la variable num y la dirección de la variable maxfactor que será
almacenada en un puntero denominado pfactor.
-La función factoriza no devuelve nada.
A continuación se muestra el prototipo de la función.
void factoriza(int num, int * pfactor);
Se recomienda que la factorización se realice usando una función que calcule el número
primo menor por el que es divisible empezando a probar con el 2. A continuación se
dividirá el número original por el divisor calculado y con el número resultante se
volverá a repetir el proceso. Así hasta que el número sea 1, que será justamente el
divisor más pequeño.
Ej: 20 -> es divisible por 2 -> 20/2 = 10
10 -> es divisible por 2 -> 10/2 = 5
5 -> es divisible por 5 -> 5/5 = 1
73
Las notas saldrán el día 21 de Junio de 2002 a las 21:00.
Hoja 3/6
PRÁCTICA 2: INTRODUCCIÓN AL USO DE FUNCIONES
3. - PLANTILLA
#include <
>
void factoriza(
void factoriza(int num, int *pfactor)
{
);
void main(void)
{
int numero;
int maxfactor;
do
{
printf("Introduzca número mayor que 1:\t");
scanf(
);
}
while(numero<2);
factoriza(
printf( “
);
“, maxfactor );
}
}
74
Las notas saldrán el día 21 de Junio de 2002 a las 21:00.
Hoja 5/6
PRÁCTICA 3
VECTORES Y CADENAS DE CARACTERES
Se quiere hacer un programa que ordene por orden alfabético los elementos de una
cadena de caracteres dada (origen) y los almacene en otra cadena (destino).
Ejemplo:
cfaebd
abcdef
Para ello será necesario:
1.- Determinar el número de caracteres de la cadena. Vamos a suponer que no
conocemos el número de caracteres de la cadena origen. Habrá que hacer un bucle para
buscar el cero en la cadena e ir contando los elementos que forman la cadena.
2.- Comparar los caracteres. El criterio de comparación viene dado de forma
automática por el código ASCII. Luego el carácter 'a' (97) es menor que 'b' (98).
3.- Ordenar los caracteres. Para ordenar los caracteres habrá que buscar el más
pequeño de todos y ponerlo en primer lugar. Descartando este primer carácter para la
siguiente búsqueda, daremos con el segundo más pequeño, y así sucesivamente.
Existen varias formas de resolver el problema. Se permite escribir sobre la cadena
origen para descartar los elementos ya ordenados.
Se pide:
a) Hacer el diagrama de flujo de cada una de las partes.
b) Codificar el algoritmo resultante en lenguaje C.
Nota: Por sencillez las cadenas de caracteres se declararán de la siguiente forma:
char origen[]="cfaebd";
char destino[10];
PRÁCTICA 4: Multiplicación de Matrices con notación vectorial
Práctica 4
Multiplicación de Matrices con notación vectorial
1 .- INTRODUCCIÓN
Se pide realizar un programa que calcule la multiplicación de 2 matrices.
Los datos de ambas matrices serán introducidos desde teclado, y el resultado de la
multiplicación deberá ser mostrado en pantalla.
El objetivo de la práctica es el de familiarizarse con el empleo encadenado de funciones
y no el de emplear el mejor algoritmo para la multiplicación de matrices.
Para la realización de la práctica son necesarios los apuntes de clase.
2 .- DESARROLLO DE LA PRÁCTICA
El programa estará estructurado de la siguiente forma:
a) Función main:
- Se declararán los elementos necesarios para almacenar de forma estática y
mediante notación vectorial, las matrices a multiplicar, la matriz resultado y los
números de filas y columnas correspondientes.
- Se llamará a la función leematriz para introducir los datos de la primera
matriz.
- Se llamará a la función leematriz para introducir los datos de la segunda
matriz.
- Se llamará a la función multiplicamatriz.
- Se llamara a la función escribematriz.
b) Función leematriz: la función leematriz recibirá la dirección de comienzo de la
matriz, el número de filas y el número de columnas. Los distintos elementos de la
matriz serán introducidos desde esta función.
Su prototipo será: void leematriz( float * pmatriz, int nf, int nc);
c) Función multiplicamatriz: la función multiplicamatriz recibirá las direcciónes de las
dos matrices datos y la dirección de la matriz resultado. También recibirá los números
de filas y de columnas correspondientes.
Su prototipo será:
void multiplicamatriz(float * pA,float * pB, float * pC,int nfC,int ncC,int num);
En esta función se calculará la multiplicación de las dos matrices, y el resultado se
almacenará en la matriz resultado.
PRÁCTICA 4: Multiplicación de Matrices con notación vectorial
Para realizar la multiplicación de matrices, se deberán emplear las siguientes funciones:
1) Producto Escalar de dos vectores, cuyo prototipo es:
float prodescalar(float *pv1, float * pv2, int num);
Esta función deberá ser llamada para obtener cada uno de los valores de la matriz
resultante.
2) Traspuesta de una matriz, cuyo prototipo es:
void trasponer(int * pB, int nf, int nc);
Esta función deberá ser llamada para trasponer la matriz B. De esta forma las
direcciones de comienzo de las nuevas filas, corresponderán al primer elemento de las
columnas originales, pudiéndose emplear a continuación la función proescalar.
d) Función escribematriz: la función escribe matriz recibirá la dirección de comienzo
asignada a la matriz resultado, así como el número de filas y de columnas.
Su prototipo será: void escribematriz(int * pmatriz, int nf, int nc);
#include <stdio.h>
void lecturamatriz(float Matriz[], int nf, int nc);
void Escrituramatriz(float Matriz[], int nf, int nc);
void trasponer2(float Matriz[],float Matriz2[], int nf, int nc);
float prodescalar(float v1[],float v2[], int num);
void multiplicamatriz(float MA[],float MB[], float MC[], int nfC, int ncC, int num);
void main(void)
{
int nf=2,nc=2;
float MatrizA[4]; /* matriz 2X2 en forma vectorial */
float MatrizB[4];
float MatrizC[4];
printf("\nIntroduzca Elementos Matriz 1\n");
lecturamatriz(MatrizA,2,2);
printf("\nIntroduzca Elementos Matriz 2\n:");
lecturamatriz(MatrizB,2,2);
multiplicamatriz( , , , , , );
printf("\nLa matriz resultado es:\n");
Escrituramatriz(MatrizC,2,2);
}
float prodescalar(float v1[],float v2[],int num)
{
int i;
/* declarar prod */
for(i=0;i< ;i++) /* completar condición */
{
/* completar */
}
return prod;
}
void multiplicamatriz( , , , , , )
{
int i,j;
/* declaración de matriz nueva y llamada a la función trasponer */
for(i=0;i< ;i++) /* completar condiciones */
{
for(j=0;j< ;j++)
{
/* Llamada a la función prodescalar */
}
}
}
void lecturamatriz(float Matriz[], int nf, int nc)
{
int i,j;
for(i=0;i<nf;i++)
{
for(j=0;j<nc;j++)
{
printf("Introduzca Elemento(%d,%d): ",i+1,j+1); /* Lectura Matriz */
scanf("%f",&Matriz[i*nc+j]);
}
}
}
void Escrituramatriz(float Matriz[], int nf, int nc)
{
int i,j;
for(i=0;i<nf;i++)
{
for(j=0;j<nc;j++)
{
printf("%f ",Matriz[i*nc+j]); /* escritura matriz */
}
printf("\n");
}
}
void trasponer2(float Matriz[],float Matriz2[], int nf, int nc)
{
int i,j;
for(i=0;i<nf;i++)
{
for(j=0;j<nc;j++)
{
/* completar */
}
}
}
Descargar