Ir ao conteúdo
  • Cadastre-se

Erro de segmesntação ao executar


andrels07

Posts recomendados

to fazendo um trabalho mas ta o codigo ta compilando sem erro, mas na hora de executar esta dando erro de segmentação

é p/ faz uma eleição. Eu recebo 4 arquivos. um contem os prefeitos(com nome, numero e partido). um contem os vereadores(idem). outro os votos, sendo na primeira linha p/ prefeito e na segunda p/ vereador. e outro para coligação, sendo q cada linha é uma coligação contendo 4 partido com seus respectivos numeros.

Tenho q criar dois arquivos com o resultado para prefeito e vereador. imprimindo na ordem crescente do numero de votos de cada um.

eu acho q estou acessando algum lugar do vetor q não devia mas eu não sei ond. Ou o problema e com a leitura do arquivo

segue o programa:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef struct{ // estrutura para o candidato a vereador e prefeito

char str; // ler o nome composto do candidato

int n; // numero dele

char pa; //partido

int votos;

}tCand;

typedef struct{ // estrutura para a coligações

char pa;

int n; // numeor do partido

int votCol;

}tCol;

typedef struct{ vetor para armazenar os 120 candidatos a vereador

tCand vet[120];

int n;

}tVetorIntVer;

typedef struct{ // vetor para armazenar os 5 candidatos a prefeito

tCand vet[5];

int n;

}tVetorIntPref;

typedef struct{ matriz para armazenar as 6 coligações. cada linha e uma coligação as colunas armazenam os partidos das coligações q são 4.

tCol mat[6][4];

int nl;

int nc;

}tMatrizCol;

typedef struct{ vetor para armazenar os votos. o primeiro é para prefe. e o swgundo para vereador

int vet[300000];

int n;

int bp;

int bv;

int nulo;

}tVetorIntVoto;

tCand leCand (FILE *p){

tCand a;

a.votos = 0;

fscanf (p,"%[^\n]%d %s", a.str, &a.n, a.pa);

return a;

}

tCol leCol (FILE *p){

tCol a;

a.votCol = 0;

fscanf (p, "%s %d ", a.pa, &a.n);

return a;

}

int votoBrancoPref(tVetorIntVoto v){

int i, vou = 0;

for(i = 0; i < v.n; i++){

if (i%2==0){

if(v.vet == 0){

vou++;

}

}

}

return vou;

}

int votoBrancoVer(tVetorIntVoto v){

int i, vou = 0;

for(i = 0; i < v.n; i++){

if (i%2==1){

if(v.vet == 0){

vou++;

}

}

}

return vou;

}

int votoNulo(tVetorIntVoto v){

int i, vou = 0;

for(i = 0; i < v.n; i++){

if (i%2==1){

if(v.vet == -1){

vou++;

}

}

}

return vou;

}

int prefeito(tVetorIntVoto v, int n){

int i, votos = 0;

for (i = 0; i < v.n; i++){

if (i%2==0){

if (v.vet == n){

votos ++;

}

}

}

return votos;

}

int vereador(tVetorIntVoto v, int a){

int i, votos = 0;

for (i = 0; i < v.n; i++){

if (i%2==1){

if (v.vet == a){

votos ++;

}

}

}

return votos;

}

tCol colig(tVetorIntVoto v, tCol a, tVetorIntVer B){

int i, j;

for (i = 0; i < v.n; i++){

if (i%2==1){

if (v.vet == a.n){

a.votCol ++;

}

}

}

for (j = 0; j < 120; j++){

if (b.vet[j].pa == a.pa){

a.votCol += b.vet[j].votos;

}

}

return a;

}

tVetorIntPref ordena( tVetorIntPref v){

int pos, i, ind;

tCand menor;

for (pos = 0 ; pos < v.n - 1 ; pos ++) {

menor = v.vet[pos];

for (i = pos + 1 ; i < v.n ; i++) {

if(v.vet.votos < menor.votos){

menor = v.vet;

ind = i;

}

}

v.vet[ind] = v.vet[pos ];

v.vet[pos] = menor ;

}

return (v);

}

tVetorIntVer ordena2( tVetorIntVer v){

int pos, i, ind;

tCand menor;

for (pos = 0 ; pos < v.n - 1 ; pos ++) {

menor = v.vet[pos];

for (i = pos + 1 ; i < v.n ; i++) {

if(v.vet.votos < menor.votos){

menor = v.vet;

ind = i;

}

}

v.vet[ind] = v.vet[pos ];

v.vet[pos] = menor ;

}

return (v);

}

main(){

FILE *p, *ve, *c, *v, *resPref, *resVer;

tVetorIntVer ver, rVer;

tVetorIntPref pref;

tVetorIntVoto vot;

tMatrizCol col;

int i, j, l, co, aux, votValPref = 0, votValVer = 0, votColig = 0, cad = 0, quoc;

p=fopen("prefeitos.txt","r");

i = 0;

pref.n = 5;

while (!feof (p)){

pref.vet = leCand(p);

i++;

}

fclose(p);

ve = fopen("vereadores.txt","r");

i = 0;

ver.n = 120;

while (!feof (ve)){

ver.vet = leCand(p);

i++;

}

fclose(v);

c = fopen ("coligacoes.txt","r");

col.nl = 6;

col.nc = 4;

l = 0;

while (!feof ©){

for(co = 0; co < 4; co++){

col.mat[l][co] = leCol(p);

}

l++;

}

fclose©;

vot.n = 300000;

aux = 0;

vot.bp = 0;

vot.bv = 0;

vot.nulo = 0;

v = fopen ("votos.txt","r");

while (!feof (v)){

fscanf (p,"%d", &vot.vet[aux]);

aux ++;

}

fclose(v);

vot.bp = votoBrancoPref(vot);

resPref = fopen ("resultadoPrefeito.txt","w");

for(j=0; j < 5; j++){

pref.vet[j].votos = prefeito(vot, pref.vet[j].n);

votValPref += pref.vet[j].votos;

}

fprintf(resPref,"Total de Votos: %d\n", vot.n/2);

fprintf(resPref,"Votos Validos: %d\n", votValPref);

fprintf(resPref,"Votos Nulos: %d\n", vot.n/2 - (votValPref + vot.bp));

fprintf(resPref,"Votos Brancos: %d\n\n\n", vot.bp);

pref = ordena(pref);

for(j=4; j >= 0; j--){

fprintf(resPref,"%s\n%d\n", pref.vet[j].str, pref.vet[j].votos);

}

fclose(resPref);

resVer = fopen ("resultadoVereador.txt","w");

vot.bv = votoBrancoVer(vot);

vot.nulo = votoNulo(vot);

for(j=0; j < 120; j++){

ver.vet[j].votos = vereador(vot, ver.vet[j].n);

votValVer += ver.vet[j].votos;

}

ver = ordena2(ver);

fprintf(resVer,"Total de Votos: %d\n", vot.n/2);

fprintf(resVer,"Votos Validos: %d\n", votValVer);

fprintf(resVer,"Votos Nulos: %d\n", vot.nulo);

fprintf(resVer,"Votos Brancos: %d\n\n\n", vot.bv);

quoc = votValVer/10;

fclose(resVer);

}

eu acho q estou acessando algum lugar do vetor q não devia mas eu não sei ond

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...