Ir ao conteúdo
  • Cadastre-se

Ordenar vetor com struct C


Ir à solução Resolvido por Midori,

Posts recomendados

Olá pessoal! Estou com problemas para ordenar uma struct em ordem decrescente de numero de votos no codigo abaixo. Alguém poderia me ajudar?

# include <stdlib.h>
# include <string.h>
# include <conio.h>
# include <stdio.h>
 struct Candidatos
    {
        char cand[50];
        int voto;
    };
 
    struct Candidatos candidatos[5];
    int voto;
     int voto_mf=0;
     int voto_sp=0;
     int voto_cx=0;
     int voto_ms=0;
     int voto_fp=0; 
char cand_mf[]= "Maria Ferreira";
     char cand_sp[]= "Silas Prado";
     char cand_cx[]= "Carlos Xavier";
     char cand_ms[]= "Marina Stuart";
     char cand_fp[]= "Francisca Pimenta";
     
int main(void)
 
{
int N=0, B=0, i;
int apuracao[5];
char resp='s';
char ord[5][50];
 
while(resp=='s')
{
system("cls");
 
printf("Abaixo, os candidatos a eleicao do edificio XYZ e seus respectivos numeros: ""\n""\n 1: Maria Ferreira \n 2: Silas Prado \n 3: Carlos Xavier \n 4: Marina Stuart \n 5: Francisca Pimenta \n 6: Voto nulo \n 0: Voto em branco");
printf("\n \n Por favor, digite seu voto: \n");
scanf("%d", &voto);
if (voto==1)
{
voto_mf=voto_mf+1;
printf("voce votou em : %s \n\n", cand_mf );
 
}else
if (voto==2)
{
 
voto_sp=voto_sp+1;
printf("voce votou em : %s \n\n", cand_sp );
}else
if (voto==3)
{
voto_cx=voto_cx+1;
printf("voce votou em : %s \n\n", cand_cx );
}else
if (voto==4)
{
voto_ms=voto_ms+1;
printf("voce votou em : %s \n\n", cand_ms );
}else
if (voto==5)
{
voto_fp=voto_fp+1;
printf("voce votou em : %s \n\n", cand_fp );
}else
if (voto==6)
{
printf("Seu voto foi considerado Nulo \n");
N=N+1;
}else
if (voto==0)
{
printf("voce votou em Branco \n");
B=B+1;
}
printf("\n Continua apuracao com novo eleitor? (s / n) \n");
do
{
scanf("%s", &resp);
}while (resp!='s' && resp!='n');
}
printf("\n O total de votos em branco foi de:"" %d", B);
printf("\n O total de votos nulos foi de: ""%d \n", N);
 
 
 
 
 
 
 
 
 
return 0;
}
Link para o comentário
Compartilhar em outros sites

Segue um exemplo.

Na ordenação eu uso o bubble sort.

    while(continua){        continua = 0;        for(i = 0; i < MAX - 1; i++){            if(cand[i].votos > cand[i + 1].votos){                CANDIDATO tmp;                continua = 1;                memcpy(&tmp, &cand[i], sizeof(CANDIDATO));                memcpy(&cand[i], &cand[i + 1], sizeof(CANDIDATO));                memcpy(&cand[i + 1], &tmp, sizeof(CANDIDATO));                    }        }        }
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Tentei isso aqui mas dá pau:

 

 

for(i=1;i<=6;i++)
  {
  for (h=1;h<=6;h++)
  {     
  
  if(candidato.voto<candidato[h].voto)
  {        
  
  aux[j].voto=candidato[h].voto;   
  candidato[h].voto=candidato.voto;   
  candidato.voto=aux[j].voto;
}
}
}
printf("\n%d", aux[j].voto);
printf("\n%s ", candidato.cand);
Link para o comentário
Compartilhar em outros sites

  • Solução

Segue um exemplo de como você pode fazer.

Veja que defini MAX como o número de candidatos

#include <stdio.h>#define MAX 5typedef struct tagCANDIDATO{    char nome[20];    int votos;}CANDIDATO;int main(){    CANDIDATO cand[MAX];    int continua = 1, i;    for(i = 0; i < MAX; i++){        printf("Nome: ");                scanf("%s[^\n]", cand[i].nome);        while(getchar() !=  '\n');        printf("Votos: ");        scanf("%d", &cand[i].votos);            puts("-------------------");    }    while(continua){        continua = 0;        for(i = 0; i < MAX - 1; i++){            if(cand[i].votos > cand[i + 1].votos){                CANDIDATO tmp;;                continua = 1;                tmp = cand[i];                cand[i] = cand[i + 1];                cand[i + 1] = tmp;            }                }    }        for(i = 0; i < MAX; i++)        printf("%4d - %s\n", cand[i].votos, cand[i].nome);    return 0;}
Link para o comentário
Compartilhar em outros sites

Valeu, Adequei aqui e funcionou perfeitamente!

# include <stdlib.h>
# include <string.h>
# include <conio.h>
# include <stdio.h>
 
#define MAX 6
 
typedef struct tagCANDIDATO{
char nome[20];
int votos;
}CANDIDATO;
 
 
int voto_mf=0;
int voto_sp=0;
int voto_cx=0;
int voto_ms=0;
int voto_fp=0;
char cand_mf[]= "Maria Ferreira";
char cand_sp[]= "Silas Prado";
char cand_cx[]= "Carlos Xavier";
char cand_ms[]= "Marina Stuart";
char cand_fp[]= "Francisca Pimenta";
 
int main()
{
CANDIDATO cand[MAX];
int continua = 1, i;
char resp='s';
int N=0, B=0;
for(i = 0; i < MAX; i++)
{
 
while(resp=='s')
{
 
system("cls");
 
 
printf("Abaixo, os candidatos a eleicao para sindico do edificio XYZ e seus respectivos numeros: ""\n""\n 1: Maria Ferreira \n 2: Silas Prado \n 3: Carlos Xavier \n 4: Marina Stuart \n 5: Francisca Pimenta \n 6: Voto nulo \n 0: Voto em branco");
printf("\n \n Por favor, digite seu voto: \n");
scanf("%d", &cand.votos);
if(cand.votos != 1 && cand.votos!=2 && cand.votos!=3 && cand.votos!=4 && cand.votos!=5 && cand.votos!=6 && cand.votos!=0){
 
printf("Voto invalido!\n""Por favor insira um voto valido \n");
}
if (cand.votos==1)
{
voto_mf=voto_mf+1;
printf("voce votou em : %s \n\n", cand_mf );
 
}else
if (cand.votos==2)
{
 
voto_sp=voto_sp+1;
printf("voce votou em : %s \n\n", cand_sp );
}else
if (cand.votos==3)
{
voto_cx=voto_cx+1;
printf("voce votou em : %s \n\n", cand_cx );
}else
if (cand.votos==4)
{
voto_ms=voto_ms+1;
printf("voce votou em : %s \n\n", cand_ms );
}else
if (cand.votos==5)
{
voto_fp=voto_fp+1;
printf("voce votou em : %s \n\n", cand_fp );
}else
if (cand.votos==6)
{
printf("Seu voto foi considerado Nulo \n");
N=N+1;
}else
if (cand.votos==0)
{
printf("voce votou em Branco \n");
B=B+1;
}
 
printf("\n Continua apuracao ? (s / n) \n");
do
{
scanf("%s", &resp);
}while (resp!='s' && resp!='n');
}
}
cand[1].votos = voto_mf;
cand[2].votos = voto_sp;
cand[3].votos = voto_cx;
cand[4].votos = voto_ms;
cand[5].votos = voto_fp;
 
strcpy(cand[1].nome, "Maria Ferreira");
strcpy(cand[2].nome, "Silas Prado");
strcpy(cand[3].nome, "Carlos Xavier");
strcpy(cand[4].nome, "Marina Stuart");
strcpy(cand[5].nome, "Francisca Pimenta");
 
while(continua){
continua = 0;
for(i = 1; i < MAX - 1; i++){
if(cand.votos < cand[i + 1].votos){
CANDIDATO tmp;;
continua = 1;
tmp = cand;
cand = cand[i + 1];
cand[i + 1] = tmp;
}
}
}
printf("\n Apos a apuracao dos votos, o resultado da eleicao no edificio XYZ é: \n\n");
 
 
for(i = 1; i < MAX; i++)
 
printf("%d - %s\n", cand.votos, cand.nome, "\n\n");
 
printf("\n O vencedor e novo sindico do Edificio XYZ é: %s \n",cand[1].nome, "\n\n");
printf("\n O total de votos em branco foi de:"" %d", B, "\n");
printf("\n O total de votos nulos foi de: ""%d \n", N ,"\n");
 
return 0;
}
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!