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
#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");*/
}
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.
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
#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;
}
}