Ir ao conteúdo

Posts recomendados

Postado

Estou tentando desenvolver um código que separe o numero de uma variavel em um vetor, em seguida coloquei o numero menos significativo(o ultimo numero a direita diferente de 0), na primeira posição do vetor, e exiba esse vetor ordenado, como mostra a imagem abaixo:
Ex: Entrada - 1250
      Saida - 5120image.png.10d9589e2d3a3246f35f83a443301e1b.png
Além disso como mostrado acima, tem de manter os zeros no final.

 

Eu desenvolvi um código porém ele elimina o 0 no final.
Se alguem puder ajudar, agradeço desde já!
 

  • Curtir 1
Postado

Há muitas formas de fazer isso. Minha preferida é aplicar a função sprintf do cabeçalho #include <stdio.h> para converter o inteiro em string. Depois é só percorrer a string e transformar os elementos em ASCII para resultar em um vetor de algarismos correspondente.

 

 

 

Seguindo isso o restante do programa fica trivial F5Rua4D.gif.

 

 

 

Espero ter ajudado GbhmuXl.gif.

  • Curtir 1
Postado
Citação

    int v1, v2, ia=0, ib=0;
    float tam1 = 0, tam2 = 0;
    bool saber = false, saber2 = true;

    int cont10a = 0, cont10b = 0;
    int aux1 =0, aux2=0, aux1ini = 0, aux2ini=0;
while(v1 > 10000 || v2 > 10000){
    printf("Entre com um numero: \n");
    scanf("%d", &v1);
    printf("Entre com um numero: \n");
    scanf("%d", &v2);
}
    aux1ini = v1;
    aux2ini = v2;
   while(aux1ini % 10 == 0){
        aux1ini = aux1ini / 10;
        cont10a++;
        saber = true;

    }
    while(aux2ini % 10 == 0){
        aux2ini = aux2ini / 10;
        cont10b++;
        saber2 = true;
    }

v1 = aux1ini;
v2 = aux2ini;

    if (aux1ini == 0) tam1 = 1;
    else
        while (v1 != 0)
           {
              tam1 = tam1 + 1;
               v1 = v1 / 10;
           }
    //----------------------------------------------
    if (aux1ini == 0) tam2 = 1;
    else
        while (v2 != 0)
           {
              tam2 = tam2 + 1;
               v2 = v2 / 10;
           }

   char va[(int)tam1], vb[(int)tam2];
    int i;

int contador = 0;
//atirbui e ordena A
while (aux1ini > 0){

    va[contador] = aux1ini%10;
    aux1ini = aux1ini/10;
    contador++;
}
if(tam1 == 4){
        aux1 = va[1];
        va[1] = va[2];
        va[2] = aux1;
}
//atirbui e ordena B
contador =0;
while (aux2ini > 0){

    vb[contador] = aux2ini%10;
    aux2ini = aux2ini/10;
    contador++;
}
if(tam2 == 4){
        aux2 = vb[1];
        vb[1] = vb[2];
        vb[2] = aux2;
}
printf("\n");
//-----------------------

char vacerto[(int)tam1+cont10a], vbcerto[(int)tam2+cont10b];

if(saber == true){
for(i=0;i<((int)tam1+cont10a);i++){
    if(va[i] != 0){
        vacerto[i] = va[i];
    }
    else{
        vacerto[i] = 0;
    }
}
for(i = 0; i<((int)tam1+cont10a); i++){
    printf("Va[%d]: %d  ",i, vacerto[i]);
}
}
else{
    for(i = 0; i<tam1; i++){
    printf("Va[%d]: %d  ",i, va[i]);
}
}
//---------------------
printf("\n");
if(saber2 == true){
for(i=0;i<((int)tam1+cont10b);i++){
    if(va[i] !=0){
        vbcerto[i] = vb[i];
    }
    else{
        vbcerto[i] = 0;
    }
}
for(i = 0; i<((int)tam2+cont10b); i++){
    printf("Vb[%d]: %d  ",i, vbcerto[i]);
}
}
else{
    for(i = 0; i<tam2; i++){
    printf("Vb[%d]: %d  ",i, vb[i]);
}
}

por enquanto o código está assim, porém ainda ta dando errado kkkk

 

adicionado 3 minutos depois

a separação eu fiz, de boa, problema foi na hora de colocar o algarismo menos significativo na primeira posição do vetor

 

  • Curtir 1
Postado

@Luis Felipe Aparecido

 

 

Montado o vetor de algarismos, percorra-o de trás para frente através de um loop. O primeiro dígito diferente de zero você armazena em uma variável, além de sua posição no vetor. Por fim, é só imprimir o número salvo e posteriormente o vetor de algarismos, excetuando o número daquela posição salva.

 

 

 

Espero ter ajudado GbhmuXl.gif.

  • Curtir 1
Postado
1 minuto atrás, rjjj disse:

@Luis Felipe Aparecido

 

 

Montado o vetor de algarismos, percorra-o de trás para frente através de um loop. O primeiro dígito diferente de zero você armazena em uma variável, além de sua posição no vetor. Por fim, é só imprimir o número salvo e posteriormente o vetor de algarismos, excetuando o número daquela posição salva.

 

 

 

Espero ter ajudado GbhmuXl.gif.

entendi, muito obr :)

adicionado 11 minutos depois
28 minutos atrás, rjjj disse:

Há muitas formas de fazer isso. Minha preferida é aplicar a função sprintf do cabeçalho #include <stdio.h> para converter o inteiro em string. Depois é só percorrer a string e transformar os elementos em ASCII para resultar em um vetor de algarismos correspondente.

 

 

 

Seguindo isso o restante do programa fica trivial F5Rua4D.gif.

 

 

 

Espero ter ajudado GbhmuXl.gif.

@rjjj como ficaria o código caso eu usasse sprintf? eu nunca use ele par separar numeros e colocar numa char kkkk

  • Curtir 1
Postado

@Luis Felipe Aparecido

 

 

Segue um exemplo dessa jogada. Um bom programador otimiza seu código F5Rua4D.gif.

 

 

int n = 12345;
char v[8];
sprintf(v, "%d", n);
int i = 0;
while(v[i] != '\0') {
    v[i] -= '0';
    i++;
}
printf("Vetor: ");
int j = 0;
while(j < i) {
    printf("%d", v[j]);
    j++;
}

 

 

 

Espero ter ajudado GbhmuXl.gif.

  • Curtir 1
Postado

@Luis Felipe Aparecido  Olá,

Mostrarei de uma forma mais simples, o seu código estava muito complicado para uma questão simples (Acontece todos já foram iniciantes em algo, alguma vez).

 

Para fazer isto basta salvar o input utilizando fgets() e depois analisar o input e fazer o que @rjjj já sugeriu (exceto o sprintf() que neste caso não seria necessário), segue exemplo em código (Apenas um vetor):

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int msize = 10000; // Tamanho máximo
	int xpos = 0; // Marca a posição do algarismo
	int vsize = 0; // Quantidade de digitos
	int va[msize]; // Vetor, OK...

	char a[msize]; // Guarda os valores de stdin

	// INPUT HERE:
	fgets(a, msize, stdin);
	
	// E se o input não for de numeros inteiros positivos?
	if (atoi(a) == 0 || atoi(a) < 0)
		return 1; // retorne 1

	// Quantos digitos foram passados? Vamos ver:
	for (size_t i = 0; a[i]; i++)
		vsize++;
	vsize--;

	// Qual a posição do algarismo menos significativo?
	for (int i = vsize; i > -1; i--)
	{
		if((a[i] - '0') > 0)
		{
			// Adiciona o algarismo ao vetor na posição 0
			va[0] = a[i] - '0'; 
			xpos = i; // Marca a posição
			break; // Quebra o loop já achemos o algarismo
		}
	}

	// Vetor contem apenas o algarismo menos significativo?
	// Bora adicionar os outros digitos:
	for (int i = 1, j = 0; j < vsize; j++)
	{
		// Sem contar o algarismo é claro:
		if(a[j] != a[xpos])
		{
			// Adicionar digito ao vetor:
			va[i] = ((int)a[j]) - ((int)'0');
			i++; // Próxima posição do vetor
		}
	}

	// Imprimir digitos do vetor:
	for (int i = 0; i < vsize; i++)
		printf("%d", va[i]);

	// Execução completada com sucesso?
	return 0; // retorne 0
}

 

Espero ter lhe ajudado, até mais!

 

Postado
9 horas atrás, Luis Felipe Aparecido disse:

Ex: Entrada - 1250
      Saida - 5120image.png.10d9589e2d3a3246f35f83a443301e1b.png
Além disso como mostrado acima, tem de manter os zeros no final.

 

Comentarei porque vai que alguém tenha a mesma opinião então já encontra outro aqui.

 

Uma coisa é manter o zero no final, outra coisa é a troca de posição que acontece entre o polo significativo. Por último, esse enunciado que não se relaciona com a entrada e saída em sua totalidade.

"

 

Na minha opinião faça na forma do enunciado: O algarismo menos significativo é também o menos preciso, ou, o último. 

 

Lei os números, coloque-os um em cada vetor invertidamente persistindo os 0s finais. Lembre-se que terá uma tarefa para duas vezes (dois números) então é melhor que as ações fossem programadas para função/método.

 

[<]ENTRADA .: 1234 6700
[>]SAIDA ...: 4321 7600

[<]ENTRADA .: 1234 6070
[>]SAIDA ...: 4321 7600

 "

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!