Ir ao conteúdo
  • Cadastre-se

C Contagem se é Maior ou Igual em C


Eduardo_Braz

Posts recomendados

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);
}

 

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

@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);
}

Link para o comentário
Compartilhar em outros sites

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

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

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

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

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

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!