Ir ao conteúdo

Posts recomendados

Postado

Eai galera. Estou com duvida em um exercício.  Como eu faço pra pegar esses números que tem o maior intervalo e printar eles.

 

Desenvolva um algoritmo que contenha uma função para ler 8 valores inteiros e apresentar ao usuário o par de elementos consecutivos que possuem o maior intervalo entre eles.

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

void leitura(){
	int vet[8];
	int x;
	int diferenca=0;
	for(x=0; x<8; x++){
		scanf("%d",&vet[x]);
		if(vet[x]<0){
		vet[x]=vet[x]*1;
	}	
			if(vet[x]<vet[x+1]){
				if(vet[x]-vet[x+1]>diferenca)
				diferenca=vet[x]-vet[x+1];	
			}	else{
					if(vet[x]-vet[x+1]>diferenca){
						diferenca=vet[x]-vet[x+1];
					}
			}
	}		
}





main(){

leitura();	
	
	
	
	
	
	
	
	
}

 

  • Obrigado 1
Postado

A cerca:

  • 1 Só funciona se for -1, ou poderia ser: vet [x] = - vet [x]; Tanto faz o resultado é igual.
  • 2 Neste parte da rotina temos uma comparação, porém se entendi; apenas uma informação atual existe dentro do vetor, x + 1 não existe em teoria, podendo ser zero ou qualquer outro valor do tipo inteiro. 
  • 3 Duas inclusões de bibliotecas sem utilidade, eu não lembro como a inteligencia artificial lida com esses casos, mais se nada for feito você adicionou mais bytes a seu programa sem necessidade, no mínimo passou a impressão de não saber a diferença.
  • 0 Com relação a lógica: nada podemos dizer, pois não há uma linha de documentação para servi de base.
#include <stdio.h>
#include <stdlib.h>// •3
#include <math.h>// •3

void leitura(){
	int vet[8];
	int x;
	int diferenca=0;
	for(x=0; x<8; x++){
		scanf("%d",&vet[x]);
		if(vet[x]<0){
		vet[x]=vet[x]*1;// •1
	}	
			if(vet[x]<vet[x+1]){// •2
				if(vet[x]-vet[x+1]>diferenca)
				diferenca=vet[x]-vet[x+1];	
			}	else{
					if(vet[x]-vet[x+1]>diferenca){
						diferenca=vet[x]-vet[x+1];
					}
			}
	}		
}





main(){

leitura();	
	
	
	
	
	
	
	
	
}

Boa Sorte.

  • Obrigado 1
Postado

@Igor Vargas     você precisa pegar o primeiro número e a partir do segundo você verifica qual dos dois é o maior até o momento, e então verifica se se o maior menos o menor é maior que o valor da variável diferenca , se for então faça diferenca igual a diferença do maior menos o menor e guardar em outras duas variáveis os dois números que teve a maior diferença .  assim no final você terá a maior diferença e entre quais dois números .

  • Membro VIP
Postado

Olá.

 

@Igor Vargas alguns pontos:

 

1#

Sempre... veja..., SEMPRE deixe seu código indentado e organizado. É de fundamental importância, e não existe desculpa para fazer o contrário :). Ex.:
 

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

void leitura() {
    int vet[8];
    int x;
    int diferenca=0;
    for(x=0; x<8; x++) {
        scanf("%d",&vet[x]);
        if (vet[x]<0) {
            vet[x]=vet[x]*1;
        }
        if (vet[x]<vet[x+1]) {
            if (vet[x]-vet[x+1]>diferenca)
                diferenca=vet[x]-vet[x+1];
        } else {
            if (vet[x]-vet[x+1]>diferenca) {
                diferenca=vet[x]-vet[x+1];
            }
        }
    }
}
main() {
leitura();
}

Veja a diferença...

 

DICA:

Desativa a tabulação do seu editor de texto, ou seja, faça que inseria "espaços" ao pressionar tab.

 

obs.: independente da tabulação ou não, a indentação do seu código está errada e possuem erros lógicos... criou dente onde não existe e não deu dente onde deveria... é só comparar.

obs.2: claro que não existe uma regra única para indentar, mas tem que ter coerência. Se tiver dúvidas sobre essa parte é só perguntar.

 

 

 

2#

1 hora atrás, Igor Vargas disse:

Como eu faço pra pegar esses números que tem o maior intervalo e printar eles.

 

Então, esta parte está nas suas mãos... é você que precisar "quebrar um pouco a cabeça" e tentar fazer...

 

Daí você postou um código... mas tá, qual a sua dúvida em relação ao que você tentou fazer? ou seja, você "perguntou como faz" e "postou um código sem dizer o que ele significa ou que problema está dando..". Entende?

 

 

***

 

Resumindo:

O que você tentou fazer e o que está dando errado?

 

 

No aguardo.

adicionado 15 minutos depois

ADENDO:

Em relação ao algoritmo para "descobrir" a diferença, sugiro o seguinte... ESQUEÇA o C/C++... tente fazer essa verificação no papel. Se você tivesse uma lista com 8 números, como você encontraria o maior intervalo?

  • Curtir 1
  • Membro VIP
Postado

@Boko Moko, não sei se você citou a partir do meu comentário achando que o código foi meu, ou se sua intenção foi verificar junto ao autor mesmo... de qualquer forma fiz o ajuste...

 


Mas aproveitando, então, analisando pela condição do if, acho que ele está tentando verificar se o número é negativo, caso fosse, tentou multiplicar por -1 para tornar positivo.

 

Da mesma forma que @AnsiC pensou:

2 horas atrás, AnsiC disse:

•1 Só funciona se for -1, ou poderia ser: vet [x] = - vet [x]; Tanto faz o resultado é igual.


PS: não faria muito sentido multiplicar algo por 1 (elemento neutro da multiplicação). :)

 

 

  • Curtir 1
Postado

A ideia de perguntar é justamente para fazer o autor pensar. Provavelmente ele copiou/colou e não entendeu qual era a ideia. Talvez a partir do questionamento surgisse ...

 

  • Curtir 1
Postado
1 minuto atrás, Igor Vargas disse:

@Boko Moko se o numero for negativo ele transforma em positivo

Nesse caso, teria que multiplicar por -1 e não por 1

if(vet[x]<0){
    vet[x]=vet[x]*-1;
}

ou
if(vet[x]<0){
   vet[x] *= -1;
}

 

adicionado 1 minuto depois
1 minuto atrás, Igor Vargas disse:

@Boko Moko a minha duvida é que eu n sei como pegar as variáveis consecutivas que tem o maior intervalo. Nunca fiz nada parecido desse tipo.

O que você tem que fazer é pegar a diferença de cada par. calcular todos os pares possíveis e calcular a diferença entre eles. Em seguida, salvar o que tiver  diferença maior.

 

  • Curtir 1
  • Membro VIP
Postado

1#

12 minutos atrás, Boko Moko disse:

A ideia de perguntar é justamente para fazer o autor pensar. Provavelmente ele copiou/colou e não entendeu qual era a ideia. Talvez a partir do questionamento surgisse ...

Só para esclarecer... @Boko Moko, na sua postagem anterior você citou a minha postagem (como se o código fosse meu...), ou seja, como se tivesse perguntando para mim. (eu tomei a liberdade de editar seu comentário e tornar a citação para o @Igor Vargas).

 

 

2#

13 minutos atrás, Igor Vargas disse:

@Boko Moko se o numero for negativo ele transforma em positivo

Então foi o que imaginamos mesmo.

Então... no caso você colocou apenas "1"... qualquer coisa vez 1, vai continuar sendo qualquer coisa... não muda nada... ali teria que ser -1, ou como @AnsiC e @Boko Moko sugeriram.

 

Mas vamos lá... para que tornar positivo?

 

 

 

3#

5 minutos atrás, Igor Vargas disse:

@Boko Moko a minha duvida é que eu n sei como pegar as variáveis consecutivas que tem o maior intervalo. Nunca fiz nada parecido desse tipo.

@Igor Vargas... isso é o problema em si. Precisa tentar desenvolver alguma lógica, e ter dúvidas na lógica!!! Entende? Você postou um código e disse que não está conseguindo fazer, então, mas qual seria a lógica que você quer implementar? o que está dando errado?

 

 

Postado

@Simon Viegas a lógica que eu faria. Pegaria o numero maior dps pegaria o menor consecutivo, salvaria o menor em uma variável e o maior também, depois faria um for com a variável menor e a condição se o menor for menor que o maior ele incrementava, tb faria um contador pra ver o tamanho do intervalo

  • Curtir 1
  • Membro VIP
Postado
15 minutos atrás, Igor Vargas disse:

@Simon Viegas a lógica que eu faria. Pegaria o numero maior dps pegaria o menor consecutivo, salvaria o menor em uma variável e o maior também, depois faria um for com a variável menor e a condição se o menor for menor que o maior ele incrementava, tb faria um contador pra ver o tamanho do intervalo

 

Crie uma lista com 8 números, tente fazer isso no papel e vê se dá certo...

 

Ex.: [2,1, 7, 3, 8, 2, 9, 8].

 

Qual "o par de elementos consecutivos que possuem o maior intervalo entre eles"?

 

 

No aguardo.

  • Curtir 1

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!