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:  
Amanda Kellen

C como colocar em ordem alfabética?

Recommended Posts

Preciso criar um programa que coloque em ordem alfabetica as referencias bibliograficas dadas mas não sei como criar uma função que faça isso.Também queria saber o porque na função imprime ai invés de imprimir um ao lado do outro imprime abaixo e porque a editora não aparece.

#include <stdio.h>
 #include <string.h>
 #define TAMANHO1 150
 #define TAMANHO2 50
 #define nlivros 3

 struct TipoLivro
 {
 char NomeAutor[TAMANHO1];
 char titulo[TAMANHO1];
 char cidade[TAMANHO1];
 char editora[TAMANHO2];
 char isbn[TAMANHO2];
 int edicao, volume, ano, pag;
 };

 int main()
 {
 struct TipoLivro VetorLivro[nlivros];
 cadastrarlivro(VetorLivro);
 ordenaLivros(VetorLivro);
 imprime(VetorLivro);
 return 0;
 }

 void cadastrarlivro(struct TipoLivro livro[nlivros])
 {
 int i;
 printf("----------------------------------------\n");
 printf("-----------------CADASTRO---------------\n");
 for(i = 0; i<nlivros; i++)
    {
    printf("Livro %d\n", i+1);

    printf("Digite o nome do autor: ");
    gets(livro[i].NomeAutor);
    printf("\n");

    printf("Digite o titulo do livro: ");
    gets(livro[i].titulo);
    printf("\n");

    printf("Digite o numero da edicao: ");
    scanf("%d", &livro[i].edicao);
    setbuf(stdin,'\0');
    printf("\n");

    printf("Digite o Volume: ");
    scanf("%d", &livro[i].volume);
    setbuf(stdin,'\0');
    printf("\n");

    printf("Digite o cidade de publicacao: ");
    gets(livro[i].cidade);
    printf("\n");

    printf("Digite o nome da editora: ");
    gets(livro[i].editora);
    printf("\n");

    printf("Digite o ano de publicacao: ");
    scanf("%d", &livro[i].ano);
    setbuf(stdin,'\0');
    printf("\n");

    printf("Digite o numero de paginas: ");
    scanf("%d", &livro[i].pag);
    printf("\n");
    setbuf(stdin,'\0');

    printf("Digite o numero de ISBN: ");
    gets(livro[i].isbn);
    printf("\n----------------------------------------\n");

    }
 }
 void imprime(struct TipoLivro livro[nlivros])
 {
  int i;
 printf("----------------------------------------\n");
 printf("-----------------SAIDA------------------\n");
 PRINTF("Referencias Bibliograficas");
 for(i=0;i<nlivros;i++)
  {
  printf("%d -",i+1);
  puts(livro[i].NomeAutor);
  printf(".");
  puts(livro[i].titulo);
  printf(".");
  printf("%d Edicao,",livro[i].edicao);
  printf("%d Volume.",livro[i].volume);
  puts(livro[i].cidade);
  printf(":");
  printf("Editora");
  puts(livro[i].editora);
  printf(",");
  printf("%d .",livro[i].ano);
  printf("%d .",livro[i].pag);
  printf("ISBN ");
  puts(livro[i].isbn);
 }
 printf("----------------------------------------\n");
 }

 

Editado por Amanda Kellen
Antes de postar um código, favor pressionar o botão <>
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Amanda Kellen.

 

1) ORDENAÇÃO DE VETORES

4 horas atrás, Amanda Kellen disse:

Preciso criar um programa que coloque em ordem alfabetica as referencias bibliograficas dadas mas não sei como criar uma função que faça isso.

 

Como está utilizando vetores, pode usar algum algoritmo de ordenação já existente. Um bastante popular, e de fácil implementação, é o Bubble Sort. O processo de ordenação vetores com struct é análogo a um vetor sem ele, a diferença que em vez de usar o próprio valor da posição do vetor, utilizará o valor de um dos campos struct, algo assim:

 

Pegando como exemplo o código do Wikipedia:

void BubbleSort(int vetor[], int tam) {
    for (int fim = tam-1; fim > 0; --fim) {
        for (int i = 0; i < fim; ++i) {
            if (vetor[i] > vetor[i+1]) {
                int aux = vetor[i];
                vetor[i] = vetor[i+1];
                vetor[i+1] = aux;
            }
        }
    }
}

Observe que está comparando o valor que está em vetor[i ]. Supondo que esse vetor acima está utilizando a struct TipoLivro igual ao do seu código, nesse caso, é necessário definir qual será o parâmetro de ordenação, por exemplo, o NomeAutor....  daí usaria algo assim:

void BubbleSort(int vetor[], int tam) {
    for (int fim = tam-1; fim > 0; --fim) {
        for (int i = 0; i < fim; ++i) {
            if (vetor[i].NomeAutor > vetor[i+1].NomeAutor) {
                int aux = vetor[i];
                vetor[i] = vetor[i+1];
                vetor[i+1] = aux;
            }
        }
    }
}

Obs.: lembrando que é necessário adaptar o algoritmo ao seu código... apenas utilizei esse trecho para exemplificar.

 

Ou seja, o vetor ficará ordenado tomando como base o NomeAutor, entende? a ordenação sempre será relativa a alguma coisa... É como ordenar linhas no Excel... é necessário escolher qual coluna vai servi como parâmetro de ordenação...  aqui você escolhe qual campo da struct vai servi de base.

 

ADENDO: existe ainda a questão caso tenha nomes iguais, ou seja, ai teria (ou não) que usar outro sub-critério... mas ai vai depender da exigência do enunciado.

 

 

 

2) IMPRESSÃO DE TEXTOS

 

4 horas atrás, Amanda Kellen disse:

Também queria saber o porque na função imprime ai invés de imprimir um ao lado do outro imprime abaixo e porque a editora não aparece.

 

Vou tentar explicar como entender os erros e procurar uma solução:

 

Veja, aparentemente você não inseriu nenhum comando para pular a alinha... daí observei que está utilizando o comando puts() (que eu não conheço), apenas dei uma pesquisada no Google...

 

Citação

puts

int puts ( const char * str );

Write string to stdout

Writes the C string pointed by str to the standard output (stdout) and appends a newline character ('\n').

The function begins copying from the address specified (str) until it reaches the terminating null character ('\0'). This terminating null-character is not copied to the stream.

Notice that puts not only differs from fputs in that it uses stdout as destination, but it also appends a newline character at the end automatically (which fputs does not).

 

Fonte: http://www.cplusplus.com/reference/cstdio/puts/

Caso não saiba inglês, é só colocar no Google Translator... mas dá para deduzir.. veja.. lá na 4a linha tem "appends a newline character ('\n')", ou seja, "acrescenta um caractere de nova linha ('\ n').".

 

Resumindo: o comando que está utilizando faz pular a linha a cada escrita... use outro!

 

 

 

***

 

No aguardo.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Amanda Kellen     você quer ordenar os nomes dos autores em ordem alfabética ?, então é do mesmo jeito que para ordenar números, apenas que você precisa passar  todas as letras do nome para maiúsculas e pegar o valor da primeira letra do nome,  e para ordenar struct é como ordenar vetores, mas para facilitar é melhor usar um espaço do struct para armazenar os dados na hora de trocar o maior pelo menor, então usei o primeiro espaço do struct que é o zero, portanto sobrará os espaços de 1 em diante para fazer os cadastros .
        na função imprimir estava confuso e não entendi o que você disse sobre imprimir do lado do outro  então coloquei para imprimir um embaixo do outro mesmo .  no caso de você querer imprimir um do lado do outro não coloque " \n " no printf e quando quiser pular de linha coloque " \n " e a editora está sendo impressa .
  seu código ficou assim :

#include <stdio.h>
#include <string.h>
#define TAMANHO1 150
#define TAMANHO2 50
#define nlivros 3

struct TipoLivro
{
    char NomeAutor[TAMANHO1];
    char titulo[TAMANHO1];
    char cidade[TAMANHO1];
    char editora[TAMANHO2];
    char isbn[TAMANHO2];
    int edicao, volume, ano, pag;
};
char a[30],b[30];
int main(){
     struct TipoLivro VetorLivro[nlivros];
     cadastrarlivro(VetorLivro);
     ordenaLivros(VetorLivro);
     imprime(VetorLivro);
     return 0;
}
int cadastrarlivro(struct TipoLivro livro[nlivros]){
    int i;
    printf("----------------------------------------\n");
    printf("-----------------CADASTRO---------------\n");
    for(i = 1; i<nlivros; i++){
        printf("Livro %d\n", i);
        printf("Digite o nome do autor: ");
        gets(livro[i].NomeAutor);
        printf("\n");
        printf("Digite o titulo do livro: ");
        gets(livro[i].titulo);
        printf("\n");
        printf("Digite o numero da edicao: ");
        scanf("%d", &livro[i].edicao);
        setbuf(stdin,'\0');
        printf("\n");
        printf("Digite o Volume: ");
        scanf("%d", &livro[i].volume);
        setbuf(stdin,'\0');
        printf("\n");
        printf("Digite o cidade de publicacao: ");
        gets(livro[i].cidade);
        printf("\n");
        printf("Digite o nome da editora: ");
        gets(livro[i].editora);
        printf("\n");
        printf("Digite o ano de publicacao: ");
        scanf("%d", &livro[i].ano);
        setbuf(stdin,'\0');
        printf("\n");
        printf("Digite o numero de paginas: ");
        scanf("%d", &livro[i].pag);
        printf("\n");
        setbuf(stdin,'\0');
        printf("Digite o numero de ISBN: ");
        gets(livro[i].isbn);
        printf("\n----------------------------------------\n");
    }
 }
int imprime(struct TipoLivro livro[nlivros]){
    int i;
    printf("----------------------------------------\n");
    printf("-----------------SAIDA------------------\n");
    printf("Referencias Bibliograficas\n");
    for(i=1;i<nlivros;i++){
        printf("%d - Livro\n",i);
        printf("    Autor   -> %s\n",livro[i].NomeAutor);
        printf("    Titulo  -> %s\n",livro[i].titulo);
        printf("    %d Edicao,\n",livro[i].edicao);
        printf("    %d Volume.\n",livro[i].volume);
        printf("    Cidade  -> %s\n",livro[i].cidade);
        printf("    Editora -> ");
        puts(livro[i].editora);
        printf("    Ano Do Livro      -> %d\n",livro[i].ano);
        printf("    Numero De Paginas -> %d\n",livro[i].pag);
        printf("    ISBN ");
        puts(livro[i].isbn);
        printf("\n");
    }
    printf("----------------------------------------\n");
}
int ordenaLivros(struct TipoLivro livro[nlivros]){
    int i,j,n;
    for(i=1;i<nlivros;i++){
        for(j=i+1;j<nlivros;j++){
            strcpy(a,livro[i].NomeAutor);
            for(n=0;n<strlen(a);n++)
                a[n]=toupper(a[n]);
            strcpy(b,livro[j].NomeAutor);
            for(n=0;n<strlen(b);n++)
                b[n]=toupper(b[n]);
            if(a[0] > b[0]){
                livro[0] = livro[i];
                livro[i] = livro[j];
                livro[j] = livro[0];
            }
        }
    }
    return 0;
}

 

  • 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

×