Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
diogo moura

C Como ordenar com Certas decisões ?

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
  • Triste 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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 3

Compartilhar este post


Link para o post
Compartilhar em outros sites
37 minutos atrás, devair1010 disse:

mas faltou mover o número quando move a palavra e vice versa

Bem lembrado

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×