Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/11/2006, 08:41
Tram
 
Fecha de Ingreso: noviembre-2006
Mensajes: 82
Antigüedad: 18 años, 1 mes
Puntos: 0
Tengo un error por algun lado y no lo veo

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