Ir ao conteúdo

Posts recomendados

Postado

Alguém poderia me ajudar

 

Dado um vetor V de tamanho N e um inteiro K, contabilize quantos elementos de V são maiores ou iguais ao inteiro K.

 

Entrada
O programa terá apenas um caso de teste. O programa deve ler, obrigatoriamente, um número N que pertença ao intervalo 1 ≤ N ≤ 1000. Se N lido não for válido, o programa deve fazer uma nova leitura de N. Caso N seja válido, N representa o tamanho do vetor V. Na próxima linha há N números inteiros separados por um espaço em branco cada, representando cada elemento do vetor V. E finalmente, na última linha há um inteiro K.
Saída
Seu programa gera apenas uma linha de saída contendo um número inteiro representando quantos elementos do vetor V são maiores ou iguais ao inteiro K. Após a impressão do valor quebre uma linha.

 

Exemplo:

Entrada

0
-3
4
1 2 3 4
0

Saída

4

Entrada

10
1 2 3 4 5 6 7 8 9 10
20

Saída

0

Entrada

1

2

3

Saída

0

Entrada

4
1 4 6 4
4

Saída

3

Entrada

10
1 2 3 4 5 6 7 8 9 10
5

Saída

6

 

Código <- Eu não estou conseguindo realizar o teste lógico para saber se é maior ou igual ao número digitado pelo o usuário por último

 

#include <stdio.h>

int main(){
    int aux, v, n, vetor[1000], i, k, j, total;
    while(v == 0){
      scanf("%d",&aux);
      if(aux >= 1 && aux <= 1000){
        n = aux;
        v = 1;
      }
      else{
        scanf("%d",&aux);
      }
    }
    for (i = 0; i < n; i++){
        scanf("%d", &vetor);
    }
    scanf("%d", &k);
    
    for(j = n; j > n; j--){
      if(k >= vetor[j]){
        total++;
      }
    }
    printf("%d\n", total);
}

 

Postado

@Math.Pi Verdade tenho que começar a fazer isso  

adicionado 1 minuto depois
1 minuto atrás, Eduardo_Braz disse:

@Math.Pi Verdade tenho que começar a fazer isso  

Zero no inicio o no termino?

adicionado 7 minutos depois
1 hora atrás, Eduardo_Braz disse:

for(j = n; j > n; j--){      

    if(k >= vetor[j]){

        total++;

    }

}

Essa parte não está funcionando, porque?

Postado

@Eduardo_Braz Oi, tudo bem? Tem um erro de lógica aí, se o j vai ser o mesmo valor do n, a condição para entrar no laço do loop é que o j seja maior que o n, isso é impossível as duas variáveis tem o mesmo valor.

n = 10

j = n

j == n (true)

j > n (false)

 

Abraço

Postado

@brund321 Assim compreendi 

adicionado 9 minutos depois
12 minutos atrás, brund321 disse:

@Eduardo_Braz Veja essa parte com atenção, se o j vai ter o valor de n (j = n), como o j vai ser maior que o n(j > n)?


for(j = n; j > n; j--){

}

 

Assim?

 

#include <stdio.h>

int main(){
  int aux, v, n, vetor[1000], i, k, j, total, l;
  while(v == 0){
    scanf("%d",&aux);
    if(aux >= 1 && aux <= 1000){
      n = aux;
      v = 1;
    }
    else{
      scanf("%d",&aux);
    }
  }
  for (i = 0; i < n; i++){
    scanf("%d", &vetor);
  }
  scanf("%d", &k);
  
  for (j = n; j >= 0; j--)
  {
    if (k >= vetor[j])
    {
      total++;
    }
  }
  printf("%d\n", total);
}

Postado

@Eduardo_Braz Oi Eduardo, então eu realmente nunca estudei C, mas analisando o seu código vejo que você está com dificuldade na parte lógica do problema. Você precisa receber o valor de n entre 1-1000 se não estiver nesse range você tem que ficar "pedindo" o input até que fique dentro do range, o ideal aqui é usar um while loop, até que o valor recebido seja no range e então usar o break para finalizar o while loop. Então com o valor de n definido você cria um for loop para ir pegando os valores para jogar no vetor, depois que esse for loop acabar você pega o valor de k. Na última parte faça um for loop para comparar cada valor salvo no vetor com k para ver se é maior ou igual a k, caso seja imprima ele, terminado o for loop imprima uma quebra de linha.

 

Exemplo de while loop:

//esse loop só irá parar de executar o laço quando a for maior que 100
while(1){
  scanf("%i",&a);
  if(a > 100){
    break;
  }
}

 

Abraço

  • Amei 1
Postado

@Eduardo_Braz Deixa eu mencionar alguns erros no seu código

for (i = 0; i < n; i++){
    scanf("%d", &vetor);
}

//o correto não seria isso? :
for (i = 0; i < n; i++){
    scanf("%d", &vetor[i]);
}
for (j = n; j >= 0; j--)

//esse for loop não tem o menor sentido, não era para ele percorrer cada elemento do vetor? então ele tem que ser algo assim:
//supondo que n seja o tamanho do vetor
for (j = 0; j < n; j++)

//dentro desse loop você precisa verificar se vetor[j] é maior ou igual a k, caso seja imprimir ele

 

Abraço.

  • Obrigado 1
Postado

@brund321 Muito obrigado

adicionado 5 minutos depois
adicionado 14 minutos depois

@brund321 Ele ainda está com erro no último for

 

#include <stdio.h>

int main(){
  int aux, v, n, vetor[1000], i, k, j, total, l;
    while(1){
        scanf("%d",&n);
        if(n <= 1000){
            break;
        }
    }
    for (i = 0; i < n; i++){
        scanf("%d", &vetor);
    }
    
    scanf("%d", &k);
    
    for (j = 0; j < n; j++){
        if(k >= vetor[j]){
            total ++;
        }
    }
    
  printf("%d\n", total);
}

adicionado 14 minutos depois
14 minutos atrás, Eduardo_Braz disse:

for (j = 0; j < n; j++){
        if(k >= vetor[j]){
            total ++;
        }
    }

Nesse

  • Amei 1
Postado

@Eduardo_BrazOi Eduardo, segue algumas observações:

while(1){
  scanf("%d",&n);
  if(n <= 1000){
    break;
  }
}
//no while você precisa quebrar quando o n for entre 1 e 1000, nesse caso se o n fosse -10 ele "aceitaria" e quebraria o loop o que não é o que você deseja
//então você também precisa verificar se o n é maior que 0 para quebrar o loop
//ficaria assim:
while(1){
  scanf("%d",&n);
  if(n <= 1000 && n > 0){
    break;
  }
}
for (i = 0; i < n; i++){
  scanf("%d", &vetor);
}
//aqui o correto para colocar o valor dentro do vetor não seria assim ? 
scanf("%d", &vetor[i]);
for (j = 0; j < n; j++){
	if(k >= vetor[j]){
		total ++;
	}
}
//aqui você precisa passar por cada valor do vetor e verificar se esse valor é maior ou igual a k
//você está verificando se k é maior ou igual que o valor do vetor, você está fazendo exatamente o contrário
//ficaria assim
for (j = 0; j < n; j++){
	if(vetor[j] >= k){
		total++;
	}
}

Abraço.

  • Obrigado 1
Postado

@brund321

Em 19/11/2019 às 01:19, brund321 disse:

@Eduardo_BrazOi Eduardo, segue algumas observações:


while(1){
  scanf("%d",&n);
  if(n <= 1000){
    break;
  }
}
//no while você precisa quebrar quando o n for entre 1 e 1000, nesse caso se o n fosse -10 ele "aceitaria" e quebraria o loop o que não é o que você deseja
//então você também precisa verificar se o n é maior que 0 para quebrar o loop
//ficaria assim:
while(1){
  scanf("%d",&n);
  if(n <= 1000 && n > 0){
    break;
  }
}

for (i = 0; i < n; i++){
  scanf("%d", &vetor);
}
//aqui o correto para colocar o valor dentro do vetor não seria assim ? 
scanf("%d", &vetor[i]);

for (j = 0; j < n; j++){
	if(k >= vetor[j]){
		total ++;
	}
}
//aqui você precisa passar por cada valor do vetor e verificar se esse valor é maior ou igual a k
//você está verificando se k é maior ou igual que o valor do vetor, você está fazendo exatamente o contrário
//ficaria assim
for (j = 0; j < n; j++){
	if(vetor[j] >= k){
		total++;
	}
}

Abraço.

Muito obrigado vou estudar ele

 

  • Amei 1
Postado

Olá

for(j = n; j > n; j--)
{
    if(k >= vetor[j])
    {
        total++;
    }
}

Que pretendia escrever? Uma coisa j que é igual a uma outra coisa n não será maior que a outra, e não vai dar tempo de diminuir...

 

Acho que já te disse para não misturar coisas e ir aos poucos em seus programas. Ninguém vai saber se você escreveu seu código em dez pequenos programas depois que você juntar todas. Seu problema está em extrair a contagem dos maiores, no momento? 

 

Que seja. Veja esse programa

int main(int argc, char** argv)
{
    int vetor[1000] = { 1,2,3,4,5,6,7,8,9,10 };
    int N = 10;
    int K = 6;
    int maiores = 0;
    for (int i = 0; i < N; i = i + 1)
    {
        if (vetor[i] >= K) maiores = maiores + 1;
    };  // for
    printf("%d dos %d  sao maiores ou iguais a K=%d\n", maiores, N, K);
    return 0;
}

Que mostra isso

5 dos 10  sao maiores ou iguais a K=6

Já usando os nomes de variáveis que estão no enunciado e no seu programa. Entende a diferença? Sem scanf() sem ler do teclado, sem mudar o cursor pela tela, sem mudar a linguagem, nada. Só testa o seu caso e pronto. Depois você põe o resto.

 

Programação defensiva

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!