Ir para conteúdo
Fórum Script Brasil
  • 0

Carga de Vetores em C


Guest Eduardo Oliveira

Pergunta

Guest Eduardo Oliveira

Pessoal,

Tenho que fazer um projeto para a faculdade, onde tenho que desenvolver um Simulador de Urna Eletrônica em C. A minha dúvida é a seguinte:

- Tenho que carregar uma quantidade "x" de candidatos em um vetor, e a cada inclusão fazer uma pesquisa no vetor para verificar se já existe um outro candidato registrado com aquele mesmo número.

- Meu código pesquisa no vetor, verifica se já existe aquele número no vetor, porém eu quero que ele peça para repetir a digitação sempre da última posição do vetor. Ao invés de fazer isso, ele verifica e altera/substitui o valor da posição em que o número existente se encontra no vetor, e não na última!!

Galera..não reparem o meu código. Sou iniciante em Programação e realmente estou vindo para o Fórum porque tranquei nesta etapa e não tem jeito de eu achar a lógica para isso. Agradeço muito se puderem me ajudar.

Abraço!

Att,

Eduardo Oliveira

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Putz..já começei mal..rsrs.

Olha só. Para ficar melhor entendível o meu problema execute ele e informe um número "x" do 1º canditado, em seguida informe um número diferente para o 2º e 3º candidato. Quando chegar no 4º candidato, informe o mesmo número que você digitou para o 1º candidato novamente, aí você vai ver o problema.

Obrigado.

Eduardo

Segue meu código:

#include <stdio.h>
#include <stdlib.h>
#define N 5
int main (){
    int i,j,op_1,tst;
    int numero[10];
    char nome[255][10];
       label:
       system("cls");
       printf("-- JUSTICA ELEITORAL --\n");
       printf("\n");
       printf("1. Inclusao\n");
       scanf("%d",&op_1);
       for(i=0;i<N;i++){
           printf("Entre com o nome do candidato %d\n",i+1);
           scanf("%s",&nome[i]);
           printf("Entre com o numero dele\n");
           scanf("%d",&numero[i]);
           tst=numero[i];
              for(i=0;i<N;i++){
                  if (tst==numero[i]){
                     break;
                  } 
                  if (tst!=numero[i]){
                     continue;
                  }           
              }
       }   goto label;
}

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

  • 0

eduardo, no segundo for não use a variavel i, use alguma outra, porque o i faz parte do for de cima.

e não precisa ir ate o final (N), pode ir só ate onde ele digitou ate agora (i).

exemplo:

bool achou = false;
              for(int j=0;j<i;j++){
                  if (tst==numero[j]){
                     achou = true;
                     break;
                  }
              }
              if (achou) i--; //Aqui ele decrementa 1 do i pra q ele digite de novo o mesmo numero[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi,

/ / ! Funcionou perfeitamente. Tu não tem noção do tempo que eu já estava quebrando a cabeça em cima deste código. Estou para te dizer que muitas das vezes o se aprende mais aqui no Fórum do que na própria Faculdade. Muuuuuuuuito Obrigado mesmo!

Uma única duvida que ainda fiquei é quanto ao que voce disse que não preciso ir até o final do (N) e ir só onde ele digitou até agora. Não sei se é isso que voce quer dizer, mas te confesso que o que eu quero realmente é que saia do laço quando quiser (finalize/saia da inclusão de candidatos quando desejar) mas agora terei que estudar como fazer essa implementação. Se tiver uma dica para me dar em relação a isso, será bem vinda. Deixando claro que não quero estar sendo chato viu..quando puder tá beleza.

Mais uma vez, Muito Obrigado!

Abraço!

Eduardo

Link para o comentário
Compartilhar em outros sites

  • 0
eu quero realmente é que saia do laço quando quiser (finalize/saia da inclusão de candidatos quando desejar) mas agora terei que estudar como fazer essa implementação.

o q a gente costuma fazer é sair quando ele digitar 0 por exemplo. tipo você dexa uma mensagem printf("Entre com o numero (0) para sair\n"); e ai se ele digitou 0, você poe um break; q ele sai do for.

agora acho q aquele goto no final ta atrapalhando, pra q ele serve?? se você dexar ele la ele vai voltar sempre não??

Uma única duvida que ainda fiquei é quanto ao que voce disse que não preciso ir até o final do (N) e ir só onde ele digitou até agora.

o q eu quis dizer é o seguinte, ele digitou 3 numeros. e o N é 5. ele digita o quarto e você tem q procurar se o numero já não existe certo??

se você for ate o N (5), o principal erro de todos é q você vai passar pelo quarto numero e comparar com ele mesmo. e vai dar q igual e você vai falar q o numero já existe, mas logico q vai ser igual, afinal é ele mesmo. você não pode comparar o numero com ele mesmo.

agora otra coisa é, você não precisa testar os numeros q ele ainda não digitou. porque você vai comparar com o quinto numero se ele nem digitou ainda??

e 5 numeros é poco, tudo bem, mas imagine q fossem 1000 numeros. você vai ficar comparando ate o 1000 e vai gastar tempo de processamento a troco de q se ele nem digitou ainda??

alem do mais, assim q você declara um array (e tb variaveis comuns) ele aponta cada indice pra uma regiao da memoria. mas a regiao pode ta preenchida com qualquer coisa. você não sabe o q tem la. logico q a probabilidade é minima, mas existe a possibilidade de em um desses indices, o valor ser exatamente igual ao q ele digitou. e ai você fala q existe mas não existe.

você pode ter mtos problemas se tentar usar variaveis q não foram inicializadas com nd, porque o valor dela pode ser qualquer um. ele aloca um espaco na memoria, e a aplicacao q usou esse espaco antes pode ter dexado qualquer valor la, e você não pode prever qual vai ser.

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi,

Ainda tenho dificuldade na lógica do for por exemplo..É bem como tu falou..agora por exemplo eu queria listar os candidatos cadastrados, porém eu pesquisando no vetor enquanto (i<N) ele imprime todas as posições até N. Isso quer dizer se eu cadastro apenas 1 candidato, mesmo assim ele imprime todas as posições do Vetor até N (com caractéres alheios). Como posso fazer para ele me listar somente os candidatos cadastrados até o momento?

Segue o código:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> 
#define N 5
int main (){
int i,j,tst;
int op_1,op_2;
char opint_1,opint_2;
int numero[10];
char nome[25][10];
   //Menu 1 : Inicialização do Sistema - Cadastrar Candidatos.
   system("cls");
   printf("\n");
   printf("-----------------------------------------------\n");
   printf("       SIMULADOR SISTEMA URNA ELETRONICA       \n");
   printf("-----------------------------------------------\n");
   printf("\n\n");
   printf(" [1]  Cadastrar Candidatos no Sistema\n");
   scanf("%d",&op_1);
   //Inclusão dos Candidatos Até N.
   if(op_1==1){
          for(i=0;i<N;i++){
              system("cls");
              printf("\n");
              printf("-----------------------------------------------\n");
              printf("            CADASTRO DOS CANDIDATOS            \n");
              printf("-----------------------------------------------\n");
              printf("\n\n");
              printf(" Informe o nome do %d %c candidato:\n",i+1,167);
              scanf("%s",&nome[i]);
              printf(" Informe o numero de sua chapa:\n");
              scanf("%d",&numero[i]);
              tst=numero[i];
                 bool achou = false;
                 for(j=0;j<i;j++){
                     if (tst==numero[j]){                                                        
                         achou = true;
                         system("cls");
                         printf("\n");
                         printf("---------------     ATENCAO    ---------------\n");
                         printf("\n");
                         printf("  NUMERO já CADASTRADO PARAR OUTRO CANDIDATO\n  "); 
                         printf("TECLE 1 PARA CONTINUAR E INFORMAR OUTRO NUMERO\n"); 
                         printf("----------------------------------------------\n");
                         break;
                         system("pause");
                     }
                 }
                 if (achou){
                     i--; //Aqui ele decrementa 1 do i pra q ele digite de novo o mesmo numero
                 }
                  /**/printf("\n\n");
                      printf("[0] ENCERRAR INCLUSAO             [1] CONTINUAR\n");
                      printf("\n");
                      scanf("%d",&opint_1);
                      if (opint_1==0){
                            break;
                      } 
                      if (opint_1!=0){  
                            continue;
                            
                      } /**/ 
           } 
           //Menu 2 : Listar Candidatos e Iniciar Votação.
           system("cls");
           printf("\n");
           printf("-----------------------------------------------\n");
           printf("         MENU SISTEMA - Entre com a opcao      \n");
           printf("-----------------------------------------------\n");
           printf("\n\n");
           printf(" [1]  Listar Candidatos Cadastrados\n");
           printf(" [2]  Iniciar Votacao\n");
           scanf("%d",&op_2);
           //Listagem dos Candidatos Cadastrados
           system("cls");
           if (op_2==1){
              printf("-----------------------------------------------\n");
              printf("             CANDIDATOS CADASTRADOS:           \n");
              printf("-----------------------------------------------\n");
              printf(" Nomes:                     Numeros:           \n");
              printf("-----------------------------------------------\n");
              for(i=0;i<N;i++){
                  printf(" %s      %d\n",nome[i],numero[i]);
              }  
           }
   }
   getch();
}

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Paulo --

#include <stdlib.h>
#define MAX 1000

main()
{
      int x, y, n, v[MAX], m, q, s,i,z;
      printf("Digite o intervalo de x ate y: ");
      scanf("%d %d", &x, &y);
      void clrscr(void);
      n=(y-x)+1;
      s=0;
      q=0;
      for(;x>y;)
      {
            
           
            printf("Digite o intervalo de x ate y: ");
            scanf("%d %d", &x, &y);
           
            
            
      }
      for(;y>MAX;)
      {
            printf("Digite intervalo 0 ate y no maximo %d: ",MAX);
            scanf("%d",&n);
            
            
      }
      
      for(int i=0; i<n; i++)
      {   
                  v[i]=x;
                  x++;
                  printf("\n%d",v[i]);
          
      }
      
      for(int i=0; i<n; i++)
      {
              if(v[i]%2==0)
              {
                           s=s+v[i];
                           q=q+1;
                          
              }
      }
     
      m=s/q;
      printf("\n\n A media é = %d\n\n", m);
      void clrscr(void);
      getch();
}

não consigo pois quando erro o intervalo não continua o progama

Link para o comentário
Compartilhar em outros sites

  • 0
Ainda tenho dificuldade na lógica do for por exemplo..É bem como tu falou..agora por exemplo eu queria listar os candidatos cadastrados, porém eu pesquisando no vetor enquanto (i<N) ele imprime todas as posições até N. Isso quer dizer se eu cadastro apenas 1 candidato, mesmo assim ele imprime todas as posições do Vetor até N (com caractéres alheios). Como posso fazer para ele me listar somente os candidatos cadastrados até o momento?

então, é como aquele exemplo do j q eu passei. o i esta guardando o ultimo valor q ele digitou. então você faria um for ate o i em vez de ate o N.

Link para o comentário
Compartilhar em outros sites

  • 0
Ainda tenho dificuldade na lógica do for por exemplo..É bem como tu falou..agora por exemplo eu queria listar os candidatos cadastrados, porém eu pesquisando no vetor enquanto (i<N) ele imprime todas as posições até N. Isso quer dizer se eu cadastro apenas 1 candidato, mesmo assim ele imprime todas as posições do Vetor até N (com caractéres alheios). Como posso fazer para ele me listar somente os candidatos cadastrados até o momento?

então, é como aquele exemplo do j q eu passei. o i esta guardando o ultimo valor q ele digitou. então você faria um for ate o i em vez de ate o N.

Beleza..beleza..consegui fazer..to começando a ficar craque em vetores hein..hehe. Valeu mais uma vez pela força e atenção. Depois que ficar pronto, eu entregar o Projeto e tudo mais compartilho com você minha Nota ok.

Abraço.

Att,

Eduardo

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...