Ir ao conteúdo
  • Cadastre-se

C Identificar número dentro de um vetor e dizer se já foi digitado antes


Belírio
Ir à solução Resolvido por devair1010,

Posts recomendados

Bom dia pessoal, estou aqui com algumas dificuldades, sou novo no mundo de programação, então estou tendo dificuldades a interpretação da lógica e por aí fora, pediram-me pra fazer um programa que pede ao usuário que digite 10 números aleatórios, caso o usuário digite um número antes já digitado, o programa informá-lo que o número já foi digitado, e pede a ele para digitar um número diferente, no final mostrar os valores digitados pelo usuário.
Me ajudem por favor.

 

#include<stdio.h>

int main (){
    
    int valor[10];
    int i;
    
    
    for (i=0; i<10; i++){
        
        printf("\n\t||Digite 10 valores diferentes: ");
    scanf("%d",&valor[i]);
        

    
        if (valor[i]==i){
            
            printf("\n\tEste valor ja foi digitado, digite um valor diferente\n");
        }
        
        
    }
    
    printf("\n\tOs valores armazenados são: %d",i);
        
    return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, .if disse:
int valor[10];
    int i,j;
    
    
    for (i=0; i<10; i++){
        
        printf("\n\t||Digite 10 valores diferentes: ");
    scanf("%d",&valor[i]);
        j=i;

    	while (j--) if (valor[i]==valor[j-1]{

 

Vou lá testar agora irmão@.if

@.if Não funciona, termina mesmo aí o código?

@.if

int main (){
	
int valor[10];
    int i,j;
    
    
    for (i=0; i<10; i++){
        
        printf("\n\t||Digite 10 valores diferentes: ");
    scanf("%d",&valor[i]);
        j=i;

    	while (j--) if (valor[i]==valor[j-1]){
 
	printf("\n\tOs valores armazenados são: %d",i);
		
}	
}
return 0;


}

Está apresentando problemas kkk

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Belírio    esse loop while

while (j--) if (valor[i]==valor[j-1])
{
  printf("\n\tOs valores armazenados são: %d",i);
}	

não resolve nada  ,  apenas mostra uma msg ,  e então o que precisa é verificar se o número já está colocado em alguma das posições  do vetor , e se não houver nenhum igual , aí coloca esse número nessa posição "[ i ]" do vetor ,  e você pode testar isso dentro do loop FOR mesmo , mas o loop ficaria grande e resolvendo muitas coisas  ,  então use uma função que verifica   o  número e retorna 1 se já tem o número no vetor ou retorna zero se não , 

#include<stdio.h>
int verifica( int*, int, int );
int main ()
{
  int valor[10] = {0};                        /// todas as posições de vetor inicializadas com valor zero
  int i;
  int ret = 0;
  int numero = 0;
  printf("\n\t||____*    Digite 10 valores diferentes -:\n\n");
  for (i=0; i<10; i++)
  {
    do
    {
      printf("  %d%c nUmero ", i+1 , 167 );   /// o 167 Eh o cOdigo ASCII do sImbolo º ordinal
      scanf( "%d", & numero );
      ret = verifica( valor, i, numero );
      printf("valor de Retorno da FunCAo = %3d\n",ret);
      if ( ret == 1 )  
      {
        printf("\n\tEste valor já foi digitado, digite um valor diferente\n");
      }
    }  while( ret );                          /// repete enquanto achar no vetor um numero igual  ao digitado
    valor[ i ] = numero;                      /// finalmente armazena o nUmero no vetor
    printf( "\n\n\n" );
  }
  printf("\n\tOs valores armazenados sAo: %d nUmeros . . . !\n\n" , i );
  for( i=0; i<10; i++ ) 
    printf( "\t%3d PosiCAo = %3d\n" , i , valor[ i ] );
  printf( "\n\n\n" );
  return 0;
}
int verifica( int* v, int tam, int num )
{
  printf("tam ---= %3d\n",tam);
  printf("num ---= %3d\n",num);               /// ver se a funCAo recebeu os valores corretos
  for( int j=0; j<tam; j++ )                  /// alguns compiladores aceitam cria a variAvel dentro do Loop
  {
    printf("v[ %d ] = %3d\n",j,v[j] );        /// mostra a valor que já esta no vetor 
    if( v[ j ] == num )                       /// testa se o nUmero Eh igual em cada uma das posições do veTor
      return 1;                               /// achou um numero igual ; já no vetor
  }
  return 0;                                   /// retorna zero pois o nUmero não tem nenhum outro igual
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Belírio escreva em torno dos dados.

 

Como faria isso com um bloco de papel? 

 

Escreva em torno dos dados e faça o simples. São só 10 números. Antes de perguntar pro usuário faça o óbivo: mostre quantos e quais foram digitados. Leia o valor. Mostre na tela. Você está começando e é bom saber que o computador concorda com o valor que acha que devia estar lá.

 

Você compara os números olhando na lista. E é claro que precisa saber sempre quantos números já tem na tal lista...

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Reativando modo minimalista...

Em 26/11/2022 às 07:18, Belírio disse:

caso o usuário digite um número antes já digitado, o programa informá-lo que o número já foi digitado

#include <stdio.h>

int main() {
  int valor[10],i,j;
    
  for (i=0; i<10; i++)
	{
  	printf("\n\t||Digite 10 valores diferentes: ");
  	scanf("%d",&valor[i]);
  	j=i;
	while (j) if (valor[i]==valor[--j]) printf("\nja digitou ");
	}
}

Testei em https://replit.com/languages/c

😁

O preço.. entenda e explique o funcionamento..😉

 

 

  • Curtir 1
  • Obrigado 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, devair1010 disse:

o enunciado , diz para apenas informar que o número já foi digitado , e então não precisa que ao  digitar um outro número , ele não exista no vetor 

 

Em 26/11/2022 às 07:18, Belírio disse:

caso o usuário digite um número antes já digitado, o programa informá-lo que o número já foi digitado, e pede a ele para digitar um número diferente

 

Não podem ser os dois verdade. Se pede para digitar um número diferente mas já colocou o repetido no vetor qual o sentido de pedir?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
4 horas atrás, devair1010 disse:

no Replit está dando um erro que não sei como resolver mesmo .

Desculpe amigo. É que não coloquei loop principal e nem finalizei o programa. Assim sendo quando sai do loop de 10 iterações, cai num terminal doidão do replit.

E não dei o peixe todo... não pedi pra colocar número diferente. Deixo o desafio pro autor

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@Belírio    não está completo ,  ali só está testando se tem número repetido ou não ,  precisa incluir esse trecho no seu código do #1 post  , e ficaria assim  :

#include    <stdio.h>
#include    <stdlib.h>
#include    <conio.h>
#include    <windows.h>
#define    _h GetStdHandle(STD_OUTPUT_HANDLE)
int main ()
{

  int valor[10];
  int i;
  int cor_letra, cor_fundo;
  CONSOLE_SCREEN_BUFFER_INFO c;
  if(GetConsoleScreenBufferInfo( _h, &c))
  {
    cor_letra = ( c.wAttributes & 0xFF) & 0x0F;
    cor_fundo = ((c.wAttributes & 0xFF) >> 4) & 0x0F;
  }
  for (i=0; i<10; i++)
  {
    printf("\n\t||Digite 10 valores diferentes: ");
    scanf("%d",&valor[i]);
    for (int j = 0; j < i; j++)
    {
      if (valor[j] == valor[i])
      {
        printf("%d -> Numero repetido\n", valor[i]);
        i -= 1;
        break;
      }
    }
  }
  SetConsoleTextAttribute(_h, 12 + ( 10 << 4 ) );
  printf("\n\tOs valores armazenados são: %d\n\n",i);
  for( int i=0; i<10; i++)
    printf("%3d   \n",valor[i] );
  SetConsoleTextAttribute(_h, cor_letra + ( cor_fundo << 4 ) );
  printf("\n\n\n");
  return 0;
}

 

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

 

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!