Ir para conteúdo
Fórum Script Brasil
  • 0

Ordenar Vetor com Printf


Binder

Pergunta

Olá pessoal, não estou conseguindo ordenar meu vetor de 42 posições com printf,conforme figura abaixo, alguém sabe como fazer?

01   02       03    04
05   06       07    08
09   10       11    12 
13   14       15    16
17   18       19    20
21   22       23    24
25   26       27    28
29   30       31    32
33   34       35    36
37   38       39    40
41   42

Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0

Olá LacosTTe, é bem simples, tenho um vetor de inteiro e ele está declarado dentro do main assim: v[42], de uma dimensão, apenas queria imprimir ele conforme menceonei anteriormente, pois se eu fizer um "for(i=0;i<42;i++)" ele iria imprimir um numero de baixo do outro conforme abaixo.

1
2
3
4
5
...

Editado por Prog_Junior
Link para o comentário
Compartilhar em outros sites

  • 0

Sua dúvida é sobre como ordenar, ou sobre como imprimir os números daquela maneira?

Se é ordenar, há vários artigos na wikipedia sobre os diversos tipos de ordenação: Bubble Sort, Quick Sort, Comb Sort, Merge Sort, enfim.

Já se é sobre como imprimir, saiba que você deve ir colocando os números da esquerda para a direita (á cada número impresso, dê uma tabulação ("\t"), e após imprimir quatro números, deve dar uma quebra de linha ("\n"). Bem simples.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá mJi, minha dúvida era apenas de como imprimir meu vetor daquela forma. Eu tentei, mas não consegui...

for (i=0;i<42;i++)
 { 
    printf("\t");                
    printf("%4d",v[i]);
    printf("\n");
 }

Editado por Prog_Junior
Link para o comentário
Compartilhar em outros sites

  • 0

Tente assim:

cont=-1;
    for(i=0;i<42;i++){
        cont++;
        if(cont==4){
            printf("\n%d\t", x[i]);
            cont=0;
        } else {
            printf("%d\t", x[i]);
        }
    }

Link para o comentário
Compartilhar em outros sites

  • 0

Há uma coisa errada no código. Note que na struct

struct rodoviaria{
    int codigo,horapartida,poltrona[42];
    char destinoviagem[100];
};
o elemento 'poltrona' é um vetor de 42 posições. Você inicializa ele dessa maneira:
for (i=0;i<42;i++){
       cont++;  
       vet[i].poltrona[i]= cont;
     }
O que significa que apenas um elemento 'poltrona' de cada estrutura do seu vetor 'vet' irá receber cont. O elemento vet[0].poltrona[0] irá receber 1; O elemento vet[1].poltrona[1] irá receber 2; O elemento vet[2].poltrona[2] irá receber 3; O elemento vet[3].poltrona[3] irá receber 4; O elemento vet[4].poltrona[4] irá receber 5; e assim em diante... Agora perceba a como você exibe no printf:
cont=-1;                    
for (i=0;i<42;i++){      
      cont++;
      if(cont == 4) {  
            printf("\n%d\t",vet[i].poltrona);
            cont=0;
       }   else    {
            printf("%d\t",vet[i].poltrona);    
       }    
}

É inválido exibir vet.poltrona. Já se você exibir vet.poltrona, irá exibir todos os elementos que foram inicalizados com cont no 'for' anterior.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá mJi, aqui está a minha função grava

void grava(struct rodoviaria a[1000],int fim)
  {
      FILE *arq;
      int teste,i;
      arq = fopen("arquivo.txt","wb"); // w = cria arquivo, b = modo binario
       if(arq != NULL)
       {
          for(i=0;i<fim;i++)
          {
              teste = fwrite(&a[i],sizeof(struct rodoviaria),1,arq);
              if (teste !=1) // retorna 1 gravou e 0 senao gravou
              {
                 printf("erro ao salvar"); 
                 getch();                 
              }
          } 
            fclose(arq);  
       }  
          else 
          {         
             printf("erro ao abrir arquivo");
          }  
  }

Editado por Prog_Junior
Link para o comentário
Compartilhar em outros sites

  • 0

Tente sem o '&'...

teste = fwrite(a[i],sizeof(struct rodoviaria),1,arq);

Embora a função precise receber o endereço da memória do elemento, pelo fato de ser um vetor, 'a' já manda para a função o endereço de memória.

Mas não sei se é realmente isso.

Link para o comentário
Compartilhar em outros sites

  • 0

Tenho uma struct que grava em um arquivo txt.

Gostaria de saber como faço o "for" para listar todos passageiros do meu onibus,sendo que meu onibus tem 42 lugares livres, e consequentemente poderá ter até 42 pessoas cadastradas para cada onibus.

//struct é um vet[1000] posições
  struct rodoviaria
  {
    int codigo,horapartida,poltrona[42];
    char destinoviagem[100],passageiro[42];
   
  };
Main()
int main()
  {
    struct rodoviaria vet[1000]; 
  }
Informa nome do passageiro:
printf("Informe nome do passageiro:"); 
  fflush(stdin);
  fgets (vet[i].passageiro,100,stdin);
  fflush(stdin);
Imprime
printf("Informe codigo do onibus:");
                        scanf("%d",&bus);    
                        printf("\n");
                                   
                 for(i=0;i<1000;i++) // laço no arquivo
                 {
                        if(vet[i].codigo == bus) // se codigo do onibus for igual ao que foi digitado...
                        {
                                 printf("Passageiros desse onibus: \n"); / imprime lista.
                             
                                  for(?)
                                  {
                                      printf(vet[i].passageiro);
                                      printf("\n");
                                  }
                        }          
                 }

Editado por Prog_Junior
Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Passageiro possui o nome do passageiro, correto?

O que ocorre é que na sua struct, passageiro é uma string com espaço para 42 caracteres. Caso você queira armazenar os nomes de todos os passageiros, precisará de uma matriz de caracteres.

Por exemplo:

struct rodoviaria
  {
    int codigo,horapartida,poltrona[42];
    char destinoviagem[100],passageiro[42][100];
  
  };
Nessa estrutura, 'passageiro' é uma matriz de caracteres que suporta 42 nomes, com no máximo 99 caracteres. Para acessar um nome individualmente, basta acessar
vet[numerodoonibus].passageiro[numerodopassageiro]
Ou seja, caso faça dessa maneira, poderá exibir os nomes de todos os passageiros assim:
printf("Informe codigo do onibus:");
scanf("%d",&bus);    
printf("\n");     
 for(i=0;i<1000;i++){
        if(vet[i].codigo == bus){
                  printf("Passageiros desse onibus: \n");
                   for(j=0;j<42;j++){
                          printf(vet[i].passageiro[j]);
                   }
        }          
}

Editado por mJi
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...