Ir ao conteúdo
  • Cadastre-se

C Elementos consecutivos com maior intervalo


Igor Vargas

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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?

 

 

Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
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
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...