Ir ao conteúdo

Posts recomendados

Postado

A questão pede que leia nome(sem espaço) e numero(inteiro) e se ordenado pelo numero e caso o número fosse igual seria ordenado por ordem alfabética, tentei fazer mas não consegui

 

O meu código

 

#include <stdio.h>
#include <string.h>

struct pessoas
{
	char nome[100];
	int nota;
};


int main(int argc, char** argv)
{
	struct pessoas pessoa[100];
	int teste, aux;
	char a[100];
	scanf("%d", &teste);

	for(int i = 0; i < teste; i++)
	{
		scanf("%s %d", pessoa[i].nome, &pessoa[i].nota);
	}


	for(int i = 0; i < teste; i++)
	{
		for(int j = i + 1; j < teste; j++)
		{
			if(pessoa[i].nota == pessoa[j].nota)
			{
				strcpy(a, pessoa[i].nome);
				strcpy(pessoa[i].nome, pessoa[j].nome);
				strcpy(pessoa[i].nome, a);
			}
			else if(pessoa[i].nota > pessoa[i].nota)
			{
				aux = pessoa[i].nota;
				pessoa[i].nota = pessoa[j].nota;
				pessoa[j].nota = aux;
			}
		}
	}
	
	for(int i = 0; i < teste; i++)
	{
		printf("%s  %d\n",pessoa[i].nome,pessoa[i].nota);
	}
	return 0;
}

   

  • Curtir 1
Postado

caso o número seja igual você em que fazer um strcmp dos nomes e decidir qual é o maior. Se persistir o empate, considere o ítem com o menor subscrito como menor.

 

adicionado 2 minutos depois
18 minutos atrás, diogo moura disse:

strcpy(a, pessoa[i].nome); strcpy(pessoa[i].nome, pessoa[j].nome); strcpy(pessoa[i].nome, a)

Esse codigo e o que troca o nome de um pelo nome do outro
Ele só deve ser utilizado depois de um if usando strcomp

algo assim

x = strcomp( um nome, outro nome)

se  x indica que um nome é menor que outro nome, troca

se x indica ue outro nome é menor , troca

se x indica que 'sao iguais, pegue o nome que tá no menor subscrito

 

  • Curtir 1
Postado

Seria assim ? @Boko Moko

#include <stdio.h>
#include <string.h>

struct pessoas
{
	char nome[100];
	int nota;
};


int main(int argc, char** argv)
{
	struct pessoas pessoa[100];
	int teste, aux;
	char a[100];
	scanf("%d", &teste);

	for(int i = 0; i < teste; i++)
	{
		scanf("%s %d", pessoa[i].nome, &pessoa[i].nota);
	}


	for(int i = 0; i < teste; i++)
	{
		for(int j = i + 1; j < teste; j++)
		{
			if(pessoa[i].nota == pessoa[j].nota)
			{
				if(strcmp(pessoa[i].nome, pessoa[j].nome) == 1)
				{
					strcpy(a, pessoa[i].nome);
					strcpy(pessoa[i].nome, pessoa[j].nome);
					strcpy(pessoa[i].nome, a);
				}
			}
			else if(pessoa[i].nota > pessoa[j].nota)
			{
				aux = pessoa[i].nota;
				pessoa[i].nota = pessoa[j].nota;
				pessoa[j].nota = aux;
			}
		}
	}

	for(int i = 0; i < teste; i++)
	{
		printf("%s  %d\n", pessoa[i].nome, pessoa[i].nota);
	}
	return 0;
}

, acho que não deu certo 

  • Amei 1
Postado

@diogo moura    seu código está bom, mas faltou mover o número quando move a palavra e vice versa ,  então seu código com algumas modificações ficaria assim  :

#include <stdio.h>
#include <string.h>
struct pessoas
{
    char nome[100];
    int nota;
};
int main(){
    struct pessoas pessoa[100];
    int teste, aux,j,i;
    char a[100];
    scanf("%d",&teste);
    for(i = 0; i < teste; i++){
        scanf("%s %d", pessoa[i].nome, &pessoa[i].nota);
    }
    for(i = 0; i < teste; i++){
        for(j = i + 1; j < teste; j++){
            if(pessoa[i].nota == pessoa[j].nota){
                if(strcmp(pessoa[i].nome,pessoa[j].nome)>0){
                    strcpy(a, pessoa[i].nome);
                    strcpy(pessoa[i].nome, pessoa[j].nome);
                    strcpy(pessoa[j].nome, a);
                    aux = pessoa[i].nota;
                    pessoa[i].nota = pessoa[j].nota;
                    pessoa[j].nota = aux;
                }
            }
            else
                if(pessoa[i].nota > pessoa[j].nota){
                    aux = pessoa[i].nota;
                    pessoa[i].nota = pessoa[j].nota;
                    pessoa[j].nota = aux;
                    strcpy(a, pessoa[i].nome);
                    strcpy(pessoa[i].nome, pessoa[j].nome);
                    strcpy(pessoa[j].nome, a);
                }
        }
    }
    for(i = 0; i < teste; i++){
        printf("%s ",pessoa[i].nome);
        for(j=0;j<10-strlen(pessoa[i].nome);j++){/*está com um warning aqui, não consegui tirar */
            printf("-");
        }
        printf("> %d\n",pessoa[i].nota);
    }
    return 0;
}

 

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!