Hola amigos, hice un pequeño código en C para obtener el mcm y el mcd de varios números y el fallo que tengo es al rellenar el array dinámico, me da un error de segmentación. La función es getArray. Aquí mi código:
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
/*
Función que muestra el menu principal
*/
int menu(void){
int op;
printf("1-Maximo Comun Divisor\n"); printf("2-Minimo Comun Multiplo\n"); return op;
}
/*
Función que obtiene el array con los valores
*/
int getArray(int **num){
int i,size;
if(*num!=NULL){
*num=NULL;
}
printf("Ingrese el numero de valores: "); *num
=malloc(sizeof(int)*size
); for(i=0;i<size;i++){
}
return size;
}
/*
Función principal
*/
int main(void) {
int *num=NULL,i,op,salir=0;
do{
op=menu();
switch(op){
case 1:
i=getArray(&num);
printf("El M.C.D es: %d\n",mcd
(num
,i
)); break;
case 2:
i=getArray(&num);
printf("El M.C.M es: %d\n",mcm
(num
,i
)); break;
case 0:
printf("Pulsa intro para salir"); salir=1;
break;
default:
printf("Opcion incorrecta. Pulse intro para volver a intentarlo.\n"); }
if(num!=NULL){
num=NULL;
}
}while(salir !=1);
return 0;
}
/*
Función para calcular el mayor de x números
*/
int max(int *num,int size) {
int i,mayor=0;
for(i=0;i<size;i++){
if (num[i]>mayor) {
mayor=num[i];
}
}
return mayor;
}
/*
Función para calcular el menor de x números
*/
int min(int *num, int size) {
int i,menor=num[0];
for(i=0;i<size;i++){
if (num[i]<menor) {
menor=num[i];
}
}
return menor;
}
/*
Función para hallar el Máximo Común Divisor por fuerza bruta
*/
int mcd(int *num, int size) {
int mcd = 1,contador,i;
int b = min(num, size);
do {
contador=0;
for(i=0;i<size;i++){
if(num[i]%b==0){
contador++;
}
}
if(contador==size){
mcd=b;
}
b--;
} while(contador !=size);
return mcd;
}
/*
Función para hallar el Mínimo Común Múltiplo por fuerza bruta
*/
int mcm(int *num, int size) {
int mcm = 0,j=1,contador,i;
int b = min(num, size);
do{
contador=0;
mcm=b*j;
for(i=0;i<size;i++){
if(mcm%num[i]==0){
contador++;
}
}
j++;
}while (contador !=size);
return mcm;
}