Ir ao conteúdo
  • Cadastre-se

C como exibir um vetor do lado do outro


Hugo Picello

Posts recomendados

Como exibo um vetor do lado do outro?

Exemplo:

Vetor A    Vetor B

0                   9

5                   8

7                   7

8                   5

9                   0

 

O exercício em si diz o seguinte: Dado o vetor A={6,4,3,11,0}, crie o vetor B com os valores de A em
ordem inversa. Exibir os dois vetores lado a lado. 

 

Esse é o código praticamente pronto, só falta a parte de exibir

#include "stdio.h"
#include "stdlib.h"
int main()
{
	system("color f4");
	int i;
	int vetora[5]={6,4,3,11,0};
	printf("Vetor A  Vetor B\n ");
	for(i=4;i>-1;i--)
	{
		printf("%d\t", vetora[i] );
	}
		for(i=0;i<5;i++)
		{
			printf("\t%d ", vetora[i]);
		}		
		
	return 0;
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Hugo Picello Você tem que colocar tudo dentro de 1 laço for somente.

Com 2 laços, primeiro ele persiste no 1º, e só depois vai para o 2º.

Não esqueça que além do \t, tem que usar \n para que fiquem 2 números por linha.

int i,j;
int vetor[5]={0,5,7,8,9};
printf("Vetor A  Vetor B\n");
for(i=0,j=4;i<5;i++,j--)
{
  printf("   %d\t", vetor[i] );
  printf("    %d\n", vetor[j]);
}

Porém, quando for ter que fazer a atribuição do vetor A ao vetor B, daí terá que usar 2 laços for: o 1º para a atribuição e o 2º para a impressão.

Mostre o código depois que tentar fazer isso.

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

@Lucca Rodrigues

Fiz igual esse que você mandou e ficou certo.

#include "stdio.h"
int main()
{
	int hpp_i, hpp_a;
	int vetora[5]={6,4,3,11,0};
	printf("Vetor A  Vetor B\n");
	for(hpp_i=0, hpp_a=4; hpp_i<5; hpp_i++, hpp_a--)
	{
  		printf("   %d\t", vetora[hpp_i] );
  		printf("    %d\n", vetora[hpp_a]);
	}
}

Porém não entendi isso aqui.. o Vetor B já está imprimindo do lado do A com os números inversos, mesmo com 1 laço for

Citação

Porém, quando for ter que fazer a atribuição do vetor A ao vetor B, daí terá que usar 2 laços for: o 1º para a atribuição e o 2º para a impressão.

 

adicionado 1 minuto depois

@AdrianoSiqueira com o laço for ali, o VetorB está sendo impresso ao contrário no programa

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Hugo Picello Olhe o enunciado:

13 horas atrás, Hugo Picello disse:

O exercício em si diz o seguinte: Dado o vetor A={6,4,3,11,0}, crie o vetor B com os valores de A em
ordem inversa. Exibir os dois vetores lado a lado. 

Você tem que primeiramente criar o vetor B com os valores do vetor A em ordem inversa para depois imprimir. Faça primeiro um laço para a atribuição, e outro para a impressão.

No programa que mostrou, você declarou apenas 1 vetor. Você precisa do vetor A preenchido com os números, e um vetor B ao qual serão atribuídos os valores do vetor A em ordem inversa.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Use a própria tabela que postou como um gabarito. Em geral é assim que se faz em relatórios multi-coluna

 

Veja como pode ser fácil:

0    *    1    *    2    *    3    *   3
0123456789012345678901234567890123456789
 Vetor A       Vetor B

0123456789    0123456789
0123456789    0123456789
0123456789    0123456789
0123456789    0123456789
0123456789    0123456789
0123456789    0123456789
0123456789    0123456789
0123456789    0123456789
0123456789012345678901234567890123456789
0    *    1    *    2    *    3    *   3

Digite no próprio IDE. Veja aqui em cima com um grid com os números das colunas... Cada número vai ter no máximo 10 dígitos, certo? Lá estão eles. O espaço entre as colunas pode ser de 4 bytes. 

 

Já sabe o que imprimir em cada linha. Na tabela você vê as colunas e o resto é trivial.

 

DICA importante: use sprintf() e formatar as linhas fica um passeio

 

Na família printf() tem fprintf() que imprime em um arquivo e sptrintf() que imprime em uma variável, um vetor de char que você pode usar para montar a linha.

 

TODAS essas funções retornam o tamanho da saída em bytes. Em geral ninguém lê ou usa isso. Mas tem hora que é salvador. Ou útil ao menos. 


Exemplo


	int coluna[4] = {
		1'000'000'123,
		2'000'000'234,
		1'000'000'123,
		2'000'000'234
	};
	char  espaco = ' ';
	char  linha[80];
	
	int col = sprintf(linha, "%10d%4c%10d\n", coluna[0], espaco, coluna[1]);
	printf("colunas em uso: %d\n", col);
	for(int i=0;i<5;i+=1)
		printf("%s", linha);

Você ajusta as posições lado a lado para tantas colunas quanto precise, e sprintf() monta a linha em linha. O 10 em %10d indica que vai usar 10 posições para o valor, e pra não ter que ficar contando espaços que não da pra ver na linha usa %4c para imprimir a variável que tem um espaço usando 4 posições e assim alinha a segunda coluna.

 

No gabarito dá pra ver que a segunda coluna termina na posição 23 então com o '\n' para pular de linha serão 25 (começa de 0) e não custa nada fazer o computador trabalhar e mostrar o retorno de sprintf() pra ver se está dando 25.. Depois apagamos.

Aí fica fácil.

Só de ler o sprintf() e somar 10+10+4 já sabe que vai imprimir 24 colunas e olhando o gabarito vê que a linha está terminando na coluna 23 --- a partir de 0 ---  e então sabe que está certo.

 

E se protege para o futuro: se tivesse 4 colunas e você for separar duas a duas com mais espaço no meio escreveria 

	sprintf(linha, "%10d%4c%10d%8c%10d%4c%10d\n",
		coluna[0], espaco, coluna[1], espaco, 
	    coluna[2], espaco, coluna[3]);
	for (int i = 0; i < 5; i += 1)
		printf("%s", linha);

usando a mesma variável espaco 

 

E imprime no for 5 linhas de cada só pra ver se está bom...

 

Eis um trecho de código graças ao control-c control-v    

    int col = sprintf(linha, "%10d%4c%10d\n", coluna[0], espaco, coluna[1]);
    printf("colunas em uso: %d\n", col);
    for(int i=0;i<5;i+=1)
        printf("%s", linha);

    sprintf(linha, "%10d%4c%10d%8c%10d%4c%10d\n",
        coluna[0], espaco, coluna[1], espaco, 
        coluna[2], espaco, coluna[3]);
    for (int i = 0; i < 5; i += 1)
        printf("%s", linha);

Que mostra

colunas em uso: 25
1000000123    2000000234
1000000123    2000000234
1000000123    2000000234
1000000123    2000000234
1000000123    2000000234
1000000123    2000000234        1000000123    2000000234
1000000123    2000000234        1000000123    2000000234
1000000123    2000000234        1000000123    2000000234
1000000123    2000000234        1000000123    2000000234
1000000123    2000000234        1000000123    2000000234

Espero que tenha entendido a ideia: monta a linha em linha[] no programa e depois mostra com printf() normal usando só o %s...

 

Esse é um conceito importante para as 3 ou 4 pessoas que imprimem relatórios complexos em C hoje em dia

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

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