AYUDA urgente programadores (dos programillas en C++)

Buenas. Resulta que tengo la urgencia de presentar dos prácticas para aprobar una asignatura de la universidad. Estas practicas os las pongo resueltas, pero resulta que tengo que hacer una entrevista con el profesor explicándoselas pero no logro entenderlas totalmente, asi que si por favor alguien tiene idea le agradecería enormemente que me ayudara.

Muchas gracias por adelantado. Estas son las prácticas:


EJERCICIO 21

Un cuadro mágico es un reticulado de n filas y n columnas que tiene la propiedad de que todas sus filas, todas sus columnas y todas sus diagonales principales suman el mismo valor.

La técnica que se utiliza para generar cuadros mágicos (que tienen siempre una dimensión impar: impar numero de filas y de columnas) es la siguiente:

a. Se comienza fijando el entero 1 en el espacio central de la primera fila.

b. Se van escribiendo los sucesivos números (2,3,…) sucesivamente, en las casillas localizadas una fila arriba y una columna a la izquierda . Estos desplazamientos se realizan tratando a la matriz como si estuviera envuelta sobre si misma, de forma que moverse una posición hacia arriba desde la fila superior lleva a la fila inferior, y moverse en una posición a la izquierda desde la primera columna lleva a la columna más a la derecha del cuadro.


c. Si se llega a una posición ya ocupada (es decir, si arriba a la izquierda ya está ocupado con un número anterior), entonces la posición a rellenar cambia, que ahora será la inmediatamente debajo de la última casilla rellenada. Después se continua el proceso tal y como se ha descrito en el punto anterior.
Escriba un programa que genere el cuadro mágico de la dimensión que el usuario desee y lo muestre luego por pantalla.

#include
#define MAX 25

void main()
{
int matriz[MAX][MAX];
int f, c;
int n;

int dim;

do {
printf("Introduce dimension (maximo 25 e impar): ");
scanf("%d", &dim);
} while (dim%2==0);
//hace la matriz
for (f=0; f for (c=0; c matriz[f][c]=0;
}
}
f=0;
c=dim/2;
n=1;

while (n<=dim*dim) {
matriz[f][c]=n;
if (matriz[(dim+f-1) % dim][(dim+c-1)%dim]!=0) {
f++;
} else {
f--;
if (f==-1) {
f=dim-1;
}
c--;
if (c==-1) {
c=dim-1;
}
}
n++;
}

printf("\n\nEl cuadrado magico de %dx%d\n\n", dim, dim);
for (f=0; f for (c=0; c printf("%3d\t", matriz[f][c]);
}
printf("\n");
}
}






EJERCICIO 25

Escriba un programa que calcule el máximo común divisor de n números introducidos por teclado. Defina, para la implementación del programa, una función llamada mcd, con el siguiente prototipo:

short mcd(short*, short);

La función principal almacenará los enteros sobre los que se busca el máximo común divisor en un array, y pasará ese array como parámetro a la función mcd. El otro parámetro de la función será el número de elementos introducidos en el array, que deberá ser menor que la dimensión del array . La función devolverá el valor del máximo común divisor de todos los enteros del array.

Téngase en cuenta que mcd(a1,a2,a3)=mcd(mcd(a1,a2)a3), y que mcd(a1,a2,a3,a4)=mcd(mcd(mcd(a1,a2)a3)a4), y asi sucesivamente.


#include
#define MAX 100


int mcd2(int a, int b)
{
int mcd;

if (a>b) {
mcd=b;
} else {
mcd=a;
}

while (mcd!=1) {
if ((a%mcd==0) && (b%mcd==0)) {
return(mcd);
}
mcd--;
}
return(1);
}


int mcd(int v[MAX], int n)
{

int res, i;
res=v[0];
for (i=1; i res=mcd2(res, v[i]);
}
return(res);
}

void main()
{
int v[MAX], n, i;

printf("Cuantos numeros quieres introducir?: ");
scanf("%d", &n);

for (i=0; i printf("Introduce numero: ");
scanf("%d", &v[i]);
}

printf("El maximo comun divisor es: %d\n", mcd(v, n));
}
0 respuestas