Página 1 de 1

funcion y vector

Publicado: 10 Nov 2010, 18:42
por tomario
hola hice un programa en c, tengo unos vectores pero no se como llevarlos a una funcion trabajar con ellos y devolverlos con valores nuevos, si me podeis dar unas nociones, gracias

Código: Seleccionar todo

#include<stdio.h>
#include <stdlib.h>
#include <math.h> 

void(int *metod,int *vec,int n,int esca, int part);

	
main()
{
	
    int partidos=0;
        
    printf("\n\n Bienvenido al sistema de calculo de escanos.\n por favor siga las instrucciones, gracias\n");

    while ( partidos <2 || partidos>16){
        printf("\n eliga el numero de partidos politicos que desea (numero entre 2 y 16)\t");
        scanf("%d",&partidos);
    }
	/*system('clear');*/
	int mpartidos[17][50];
	
	float votos;
	
	int i;
	int f;
	int c;
	
	for (f=0;f<partidos;f++){
		for (c=0;c<50;c++){

			mpartidos[f][c]=0;
        }
    }
	int escanos=0;
		while (escanos<7 || escanos>100){
		printf("\n numero de escanos:(numero entre 7 y 100)\t");
		scanf("%d",&escanos);
    }
	/*system('clear');*/
	int a=0;
	printf("\n A continuacion meta los votos recibidos por cada partido:\n");
	for (i=0;i<partidos;i++){
		a=i+1;
		printf("\n partido(%d)=\t",a);
		scanf("%f",&votos);
		mpartidos[i][0]=votos;
	}
	
	printf("\n\n Ahora el programa calculara los escanos segun estos 4 metodos:\n \n HAMILTON \n \n D'HONT \n \n LAGUE \n \n HILL-HUNTINGTON \n \n");
     
	 int TAM=100;
	
	/*METODO DHONT*/
	float metod[17];
	float aq;
	int fil;
	int col;
	float cl;
	int vec[partidos];
	int x=1;
	for (fil=0;fil<partidos;fil++){
			metod[fil]=mpartidos[fil][0];
			vec[fil]=mpartidos[fil][1];
        }
	
			
	funcion (metod[partidos],vec[partidos],x,escanos,partidos);
	
	for (fil=0;fil<partidos;fil++){
		mpartidos[fil][1]=vec[fil];
        }
			
	/*system("clear");*/
	
	/*fin metodo DHONT*/
	
	/*system("clear");*/
	printf("\n\t\tDHONT \t\tHAMILTON \t\t LEAGUE \t HILL-HUNTINGTON\n");
	int z;
	for (i=0; i<partidos; i++) {
					z=i+1;
					printf("\n partido%d \t%d  \t\t  %d \t\t\t %d \t\t\t %d\n",z,mpartidos[i][1],mpartidos[i][2],mpartidos[i][3],mpartidos[i][4]);
				}
	printf("\n");
		
		
		/*FUNCION*/
		
		void funcion(float *metod,int *vec,int x,int escanos, int partidos){
		float metodo[17][1000];
		float aq;
		int fil;
		int col;
		float cl;
		int TAM=100;
		float d;
		for (fil=0;fil<part;fil++){
			cl=0;
			for (col=0;col<TAM;col++){
				if (x==1){
					d=cl+1;
					}
				if (x==2){
					d=(2*cl)+1;
				}
				if (x==3){
					d=sqrt(cl*(cl+1));
				}
				aq=(*vect)/(d);
				metodo[fil][col]=(aq);
				cl++;
			}
			
		}
		
		float mx=0;
		int aa,bb;
		int i;
		for(i=0;i<esca;i++){
			for (fil=0;fil<part;fil++){
				for (col=0;col<TAM;col++){
					if (metodo[fil][col]>mx){
						mx=metodo[fil][col];
						aa=fil;
						bb=col;
					}
				}
			}
			metodo[aa][bb]=0;
		
			mx=0;
			vec(aa=vec(aa)+1;
		}
	
	}
			
	/*system("clear");*/
	
	
	}

Re: funcion y vector

Publicado: 10 Nov 2010, 23:55
por pac-man
1º Tenes que darle un nombre a la función!
2º Al main si no le especificas un dato de retorno, es entero, agrega un return 1; al final del main.
3º El nombre de un vector es un puntero a la primera posicion del array.

Trata de leer un poco sobre funciones y punteros.

SaluDOS!

Re: funcion y vector

Publicado: 11 Nov 2010, 10:28
por tomario
eso lo cambie, pero el fallo es que no compila da violacion de segmento, no se como se lleva un vector o una matriz a una funcion y como se puede trabajar con ese vector o esa matriz para recorrerlo cambiar sus valores y devolverlos al main,
gracias

AYUDA

Publicado: 11 Nov 2010, 20:10
por tomario
hola hasta ahora lo mas que he conseguido a sido esto, pero no compila, por favor ayudenme, gracias

Código: Seleccionar todo

#include<stdio.h>
#include <stdlib.h>
#include <math.h> 

void funci( float *metod, int *vector, int n, int escanos, int partidos );

	
main()
{
	
    int partidos=0;
    int mpartidos[17][50];
	float votos;
	int i;
	int f;
	int c;
	int a=0; 
	int TAM=100;
	float metod[17];
	int fil;
	int vector[18];
	int x=1;
	int z;
    printf("\n\n Bienvenido al sistema de calculo de escanos.\n por favor siga las instrucciones, gracias\n");

    while ( partidos <2 || partidos>16){
        printf("\n eliga el numero de partidos politicos que desea (numero entre 2 y 16)\t");
        scanf("%d",&partidos);
    }
	for (f=0;f<partidos;f++){
		for (c=0;c<50;c++){

			mpartidos[f][c]=0;
        }
    }
	int escanos=0;
		while (escanos<7 || escanos>100){
		printf("\n numero de escanos:(numero entre 7 y 100)\t");
		scanf("%d",&escanos);
    }
		
	printf("\n A continuacion meta los votos recibidos por cada partido:\n");
	for (i=0;i<partidos;i++){
		a=i+1;
		printf("\n partido(%d)=\t",a);
		scanf("%f",&votos);
		mpartidos[i][0]=votos;
	}
	
	printf("\n\n Ahora el programa calculara los escanos segun estos 4 metodos:\n \n HAMILTON \n \n D'HONT \n \n LAGUE \n \n HILL-HUNTINGTON \n \n");
     
		/*METODO DHONT*/
	
	for (fil=0;fil<partidos;fil++){
			metod[fil]=mpartidos[fil][0];
			vector[fil]=mpartidos[fil][1];
        }
	
	funci (metod,vector, x, escanos, partidos );
	
	for (fil=0;fil<partidos;fil++){
		mpartidos[fil][1]=vector[fil];
        }
			
	
	/*fin metodo DHONT*/
	
	printf("\n\t\tDHONT \t\tHAMILTON \t\t LEAGUE \t HILL-HUNTINGTON\n");
	
	for (i=0; i<partidos; i++) {
					z=i+1;
					printf("\n partido%d \t%d  \t\t  %d \t\t\t %d \t\t\t %d\n",z,mpartidos[i][1],mpartidos[i][2],mpartidos[i][3],mpartidos[i][4]);
				}
	printf("\n");
	return 0;
}	
			/*FUNCION*/
		
		void funci( float *metod, int *vector, int n, int escanos, int partidos ){
		float metodo[17][1000];
		float aq;
		int fil;
		int col;
		float cl;
		int TAM=100;
		float d;
		float mx=0;
		int aa,bb;
		int i;
		for (fil=0;fil<partidos;fil++){
			cl=0;
			for (col=0;col<TAM;col++){
				if (n==1){
					d=cl+1;
					}
				if (n==2){
					d=(2*cl)+1;
				}
				if (n==3){
					d=sqrt(cl*(cl+1));
				}
				aq=metod(fil)/(d);
				metodo[fil][col]=(aq);
				cl++;
			}
			
		}
			
		for(i=0;i<escanos;i++){
			for (fil=0;fil<partidos;fil++){
				for (col=0;col<TAM;col++){
					if (metodo[fil][col]>mx){
						mx=metodo[fil][col];
						aa=fil;
						bb=col;
					}
				}
			}
			metodo[aa][bb]=0;
		
			mx=0;
			vector(aa)=vector(aa)+1;
		}

	}

Re: funcion y vector

Publicado: 11 Nov 2010, 21:51
por Alejandro
Desde el 2006 no toco algo de C, sino te daba una mano.

Verifica que estén bien todos los puntos y comas, y como no es muy largo... corre el programa mentalmente parte a parte a ver si encuentras la falla.

Generalmente son pequeños detalles los que hacen que todo funcione mal :type:

Re: funcion y vector

Publicado: 12 Nov 2010, 14:10
por tomario
ya lo solucione muchas gracias

Re: funcion y vector

Publicado: 12 Nov 2010, 14:37
por elQuique
Llegue tarde, perob ueno ya que lo solucionaste publica la solución para que otros usuarios con problemas similares se benficien de tu experiencia.