Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Igor Vargas

C Elementos consecutivos com maior intervalo

Recommended Posts

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

Compartilhar este post


Link para o post
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.

Editado por AnsiC
melhorar as mensagens
  • Obrigado 1

Compartilhar este post


Link para o post
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 .

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, Igor Vargas disse:

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

 

Qual e a ideia por traz desse código aqui? o que você pretendia fazer? 

 

Editado por Simon Viegas
Corrigir citação; Inserir tag CODE na citação (dica: copie o código, cite qualquer techo do tópico, e insira o código com a tag CODE dentro da citação). Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

 

 

Editado por Simon Viegas

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×