Tengo hecho este programa. Consiste en generar un vector de numeros aleatorios entre 0 y 12, por ejemplo el vector [1 4 5]. Despues mediante una funcion se calcula cuantos dias tiene cada mes (mes 1, mes 4 y mes 5) y lo devuelve en otro vector. (Devolveria [31 30 31]).
Luego clona el vector [31 30 31] mediante una funcion a la que se le pasa el vector y devuelve otro con el clonado.
Y por ultimo invierte el contenido, mediante una funcion a la que se le pasa el vector y devuelve el mismo vector invertido.
Este es el codigo que tengo.
fichero1.c
Código:
#include <stdio.h>
#include <stdlib.h>
#include "ficheroh.h"
int esBisiesto(int anyo){
if(anyo%400==0) return 1;
else if (anyo%100==0) return 0;
else if (anyo%4==0) return 1;
}
int numDias(int mes, int anyo){
int num;
num=0;
switch(mes){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
num = 31;
break;
case 4: case 6: case 9: case 11:
num = 30;
break;
case 2:
num = 28;
if(esBisiesto(anyo)==1) num=num+1;
break;
}
return num;
}
int * clonar(int *a,int tam){
int * temp;
int i;
i=0;
temp =(int*)malloc(tam*sizeof(int));
while(a[i]!=0){
temp[i]=a[i];
i++;
}
return temp;
}
int * invertir(int *a, int tam)
{
int i,j,aux;
j=tam-1;
for (i=0;i<tam/2;i++)
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
j--;
}
return a;
}
int * diasPorMes(int*a,int tam,int anyo){
int i;
int *temp;
i=0;
temp =(int*)malloc(tam*sizeof(int));
while(a[i]!=0){
temp[i]=numDias(a[i],anyo);
i++;
}
return temp;
}
ficheroh.h
Código:
#include <stdio.h>
#ifndef _FICHEROH_H
#define _FICHEROH_H
int esBisiesto(int anyo);
int numDias(int mes, int anyo);
int * clonar(int *a,int tam);
int * invertir(int* a, int tam);
int * diasPorMes(int*a, int tam,int anyo);
#endif
fichero2.c, donde esta el main
Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "ficheroh.h"
#define LIMITE 12
int main(){
int * vector;
int * res;
int * clon;
int * invertido;
int tamano;
int anyo;
int i;
char c;
//Preguntar tamaño del array
printf("Tamaño del array: ");
scanf("%d",&tamano);
vector = (int *)malloc(tamano*sizeof(int));
res = (int *)malloc(tamano*sizeof(int));
clon = (int *)malloc(tamano*sizeof(int));
invertido = (int *)malloc(tamano*sizeof(int));
//Inicializar array con numeros aleatorios del 0 al 12
srand((int)time(NULL));
for (i = 0;i<tamano;i++)
vector[i] = (int)(rand() % LIMITE);
//Ver array creado
for(i=0;i<tamano;i++)
printf("valor[%d]=%d\n",i,vector[i]);
printf("\n");
//Preguntar al usuario año concreto
printf("Año: ");
scanf("%d",&anyo);
//Calcular dias del array creado, mediante funcion diasPorMes
res = diasPorMes(vector,tamano,anyo);
//Imprimir array calculado
printf("Array calculado:\n");
for(i=0;i<tamano;i++)
printf("Valor[%d]=%d\n",i,res[i]);
//Clonar array calculado
clon = clonar(res,tamano);
//Invertir el clon
invertido = invertir(clon, tamano);
printf("Array tras clonar e invertir:\n");
//Imprimir tras invertir
for(i=0;i<tamano;i++)
printf("Valor[%d]=%d\n",i,invertido[i]);
free(vector);
free(res);
free(clon);
free(invertido);
scanf("%c", &c);
return 0;
}
Al ejecutar, el programa da error cuando tiene que hacer el clonado. No soy capaz de encontrar el error, alguien podria ayudarme? gracias