Anúncio

Collapse
No announcement yet.

[Ajuda aos programadores] Dúvida em C

Collapse

Ads nos topicos Mobile

Collapse

Ads Nos topicos Desktop

Collapse
X
Collapse
Primeira Anterior Próxima Última
 
  • Filtrar
  • Tempo
  • Show
Clear All
new posts

    [Ajuda aos programadores] Dúvida em C

    Pessoal, tenho um trabalho de projecto em que tenho que fazer uma máquina dar várias opções de escolha ao cliente e consoante a escolha do cliente a máquina dá um produto, do estilo:
    Se o cliente quer SG ventil, prima 1, se o cliente quer Portugues, prima 2, estão a perceber a ideia?

    Logo eu tenho uma matriz com os vários produtos e por baixo a sua quantidade, a máquina tem 5 produtos de cada e o que eu estou com dúvidas é como é que tiro um produto à máquina de forma a que ela fique com 4 e dê 1 ao cliente, estou assim:

    printf ("Escolha o produto desejado")
    scanf ("%d" & escolha);
    if (escolha=1);
    for (prod[0]
    Prod é o nome da matriz, só que não sei o que escrever à frente para ele ir tirar?
    Tão a entender a ideia?

    Podem-me ajudar?

    #2
    Não consigo perceber mto bem o que é que estás a fazer com esse IF (escolha = 1) :S
    Até porque não estás a fazer uma comparação mas sim uma assignação o que é sempre TRUE...

    O que tens de fazer é inicializar o array (e não a matriz) com valor 5 (ou outro)para o número de marcas que queres vender:
    int maquina[4];

    maquina[0]=5;
    maquina[1]=10;
    maquina[2]=5;
    maquina[3]=15;

    Depois o que tens de ler é o valor que o utilizador escolhe.
    Consoante esse valor tens de verificar primeiro se ainda tens maços para vender.
    Para isso fazes:

    if (maquina[k] == 0)
    {
    printf("Esgotado");
    }
    else
    {
    maquina[k] -= 1;
    }

    E pronto... Acho que é isto.

    Comentário


      #3
      Eu acho que podias fazer um switch/case.
      Dentro de cada case subtrais uma unidade ao valor do array que contém a marca em questão.

      Cumprimentos

      Comentário


        #4
        O que é o array? Eu sou iniciante a programação, não posso ir buscar funções que nunca foram dadas na disciplina, e tenho mesmo que usar matrizes.

        Jeandré, boa opção a do Switch Case.

        Prophecy, o If continua com mais elses, é uma estrutura de decisão, se a escolha for o número 1, ele vai buscar o produto que está na posição coluna 0 da matriz, etc etc, não sei se me estás a entender.

        Comentário


          #5
          Jeandré:
          switch (escolha);

          case 1: {
          prod [0] --;
          }
          case 2: {
          prod [1] --;
          }
          case 3: {
          prod [2] --;
          }
          case 4: {
          prod [3] --;
          }
          case 5: {
          prod [4] --;
          }
          case 6: {
          prod [5] --;
          }
          Que noob que sou, mas tem que ser.

          Comentário


            #6
            Originalmente Colocado por Gmigas Ver Post
            O que é o array? Eu sou iniciante a programação, não posso ir buscar funções que nunca foram dadas na disciplina, e tenho mesmo que usar matrizes.
            O array é a matriz.
            Só que estou tão habituado aos termos em inglês da área que me esqueço que há tradução para português...

            Cumprimentos

            Comentário


              #7
              GMigas, não te esqueças de meter o break; a seguir cada case, senão o sistema faz-te os cases todos sem parar.
              Aproveita também o conselho do Prophecy e faz a verificação aquando da escolha se há stock com um if/else.
              E cria um case default para o caso de alguém escolher uma opção que não exista.

              Cumprimentos
              Editado pela última vez por 0003; 31 January 2009, 19:33.

              Comentário


                #8
                Só mais uma coisa pessoal

                Neste programa tenho que fazer uma verificação de password para entrar num modo da máquina se a password estiver certa ele entra no modo, mas se estiver errada não entra no modo, eu queria que quando a password estivesse errada ele voltasse ao inicio.

                Eu aprendi isso, mas não me estou a lembrar.

                Comentário


                  #9
                  utiliza um strcmp, compara duas strings.

                  PS: uma matriz é algo que tem n*n posições, um array(vector) tem n posições, não confundam os termos.

                  Comentário


                    #10
                    Crias uma variável booleana "naoautenticado" que fica inicialmente a "true".
                    Depois verificas o estado dessa variável num ciclo while, dentro desse while metes um if, if password errada mantém-se dentro do ciclo a perguntar, else metes a variavel booleana "naoautenticado" a false e ele sai do ciclo while e continua a execução.

                    Cumprimentos

                    Comentário


                      #11
                      Originalmente Colocado por Jeandré Ver Post
                      Crias uma variável booleana "naoautenticado" que fica inicialmente a "true".
                      Depois verificas o estado dessa variável num ciclo while, dentro desse while metes um if, if password errada mantém-se dentro do ciclo a perguntar, else metes a variavel booleana "naoautenticado" a false e ele sai do ciclo while e continua a execução.

                      Cumprimentos
                      Estás a falar chinês ou quê? :D

                      Eu só quero que o programa volte ao inicio pá! À escolha do modo de utilização (a máquina tem dois modos em que um precisa de password)

                      É que se o utilizador errar a password, ele fica ali à espera e isso obviamente que nem eu nem o meu professor queremos...

                      Comentário


                        #12
                        Por isso é que recomendei a utilização de uma variável auxiliar boolean e de um ciclo while.

                        bool admin=false;
                        bool naoautenticado=true;

                        o user escolhe o modo de admin e colocas a variável admin a true para ele entrar no while do admin:

                        while(admin){
                        while(naoautenticado){
                        printf("Diz a pass pá:");
                        scanf(...);
                        if(passcerta){naoautenticado=false}
                        else{admin=false;}
                        }
                        printf("bem vindo Mestre!");
                        }

                        Entendes?

                        Cumprimentos

                        Comentário


                          #13
                          Eu tenho assim

                          "Introduza a password"
                          If Password = X
                          ... (entra no modo)
                          Else
                          printf (" A Password está errada")

                          Agora era meter aqui qualquer coisa que o fizesse voltar ao "Qual modo queres pá :D"

                          Comentário


                            #14
                            O que tu queres então é um "goto" para o início.
                            Ora pessoalmente considero isso uma má prática de programação, e até em linguagens de baixo nível como o ABEL-HDL ou o assembly é má prática a sua utilização (pelo que deve ser evitada), por isso não te ajudo. :p

                            Cumprimentos

                            Comentário


                              #15
                              printf ("Escolha o produto desejado")
                              scanf ("%d" & escolha);
                              if ((escolha=> 1) && (escolha<=5)) {
                              prod[escolha-1]--;
                              }


                              Creio que seja algo do género o que tu pretendes.

                              Comentário


                                #16
                                Originalmente Colocado por Jeandré Ver Post
                                O que tu queres então é um "goto" para o início.
                                Ora pessoalmente considero isso uma má prática de programação, e até em linguagens de baixo nível como o ABEL-HDL ou o assembly é má prática a sua utilização (pelo que deve ser evitada), por isso não te ajudo. :p

                                Cumprimentos
                                Vá láááá!!!!!!!!!!

                                É mesmo isso que eu quero, um "Go To home"

                                ptsyndicate, essa parte já foi, agora a minha dúvida é como voltar ao inicio.

                                Cumpts e obrigadíssimo a todos pelas dúvidas.

                                Comentário


                                  #17
                                  Originalmente Colocado por Gmigas Ver Post
                                  É mesmo isso que eu quero, um "Go To home"
                                  Podes usar um "goto", tipo isto:

                                  inicio:
                                  printf("bla bla pardais ao ninho");
                                  printf("fui e voltei");
                                  goto inicio;

                                  Mas começas mal se te habituas a usar os goto's, como digo é má prática, e deve ser evitado, uma das maneiras é como te sugeri com ciclos while e variáveis boolean que te fazem entrar e saír de blocos de código.

                                  Cumprimentos

                                  Comentário


                                    #18
                                    Originalmente Colocado por Gmigas Ver Post
                                    Vá láááá!!!!!!!!!!

                                    É mesmo isso que eu quero, um "Go To home"

                                    ptsyndicate, essa parte já foi, agora a minha dúvida é como voltar ao inicio.

                                    Cumpts e obrigadíssimo a todos pelas dúvidas.


                                    Em relação a essa parte, não percebi bem o que queres, mas deve ser algo do género:

                                    int pass_certa = 0;


                                    while (pass_certa == 0) {
                                    printf("introduza a password .......",...);

                                    if (password = password_correcta) {
                                    pass_certa = 1;
                                    }
                                    }

                                    printf("Blablabla, introduziu a password correcta, introduza o modo");

                                    Mas acho que foi isto que o Jeandré te disse para fazer.

                                    Comentário


                                      #19
                                      Já tá.

                                      Obrigadissimo a todos.

                                      Comentário


                                        #20
                                        Originalmente Colocado por Jeandré Ver Post
                                        Podes usar um "goto", tipo isto:

                                        inicio:
                                        printf("bla bla pardais ao ninho");
                                        printf("fui e voltei");
                                        goto inicio;

                                        Mas começas mal se te habituas a usar os goto's, como digo é má prática, e deve ser evitado, uma das maneiras é como te sugeri com ciclos while e variáveis boolean que te fazem entrar e saír de blocos de código.

                                        Cumprimentos
                                        Atenção que em determinados sitios(cadeiras), a utilização do goto dá logo direito a chumbo. ;)

                                        Comentário


                                          #21
                                          Originalmente Colocado por ptsyndicate Ver Post
                                          Em relação a essa parte, não percebi bem o que queres, mas deve ser algo do género:

                                          int pass_certa = 0;


                                          while (pass_certa == 0) {
                                          Fica sempre melhor;)
                                          Código:
                                          while (!pass_certa) {

                                          Comentário


                                            #22
                                            Originalmente Colocado por Jeandré Ver Post
                                            Por isso é que recomendei a utilização de uma variável auxiliar boolean e de um ciclo while.

                                            bool admin=false;
                                            bool naoautenticado=true;

                                            o user escolhe o modo de admin e colocas a variável admin a true para ele entrar no while do admin:

                                            while(admin){
                                            while(naoautenticado){
                                            printf("Diz a pass pá:");
                                            scanf(...);
                                            if(passcerta){naoautenticado=false}
                                            else{admin=false;}
                                            }
                                            printf("bem vindo Mestre!");
                                            }

                                            Entendes?

                                            Cumprimentos
                                            Qual o sentido do primeiro while aqui? Visto que nunca é utilizado e que esta sempre a false?

                                            Comentário


                                              #23
                                              Originalmente Colocado por chambas Ver Post
                                              Qual o sentido do primeiro while aqui? Visto que nunca é utilizado e que esta sempre a false?
                                              O primeiro while fica a true quando o utilizador escolhe o modo admin (protegido pela tal pass), como eu escrevi lá.

                                              Cumprimentos

                                              Comentário


                                                #24
                                                Já agora visto que isto deve ser um projecto de aprendizagem de programação devia-se estruturar o código neste caso(linguagem C-linguagem funcional), devias fazer funções com determinados objectivos ie: verificar password, escolher produto, etc. E depois vais chamando as funções dentro do main em que colocas a lógica do programa. Podes utilizar uma abordagem "top-down approach".

                                                Comentário


                                                  #25
                                                  Originalmente Colocado por Jeandré Ver Post
                                                  O primeiro while fica a true quando o utilizador escolhe o modo admin (protegido pela tal pass), como eu escrevi lá.

                                                  Cumprimentos
                                                  Ok, eu percebi que estavas a colocar aquilo tudo dentro do main e nesse caso não faz sentido...quer dizer para mim não faz sentido dessa forma pois é ciclos de relógio que estas a desperdiçar;) Colocas o segundo ciclo dentro duma função e quando acertares na password podes fazer o print e depois um return. :D

                                                  Comentário


                                                    #26
                                                    Originalmente Colocado por chambas Ver Post
                                                    Ok, eu percebi que estavas a colocar aquilo tudo dentro do main e nesse caso não faz sentido...quer dizer para mim não faz sentido dessa forma pois é ciclos de relógio que estas a desperdiçar;) Colocas o segundo ciclo dentro duma função e quando acertares na password podes fazer o print e depois um return. :D
                                                    Caso não tenhas percebido, a dúvida e o trabalho é do Gmigas.
                                                    Eu só fiz algumas sugestões em pseudo-código para passar uma ideia, não ia estar a desperdiçar tempo a fazer um trabalho escolar que nem é meu, e a colocá-lo chapadinho direitinho na internet até porque não ia estar a ajudar o Gmigas, visto que ele tem de aprender por ele a fazer estas coisas, como eu tive de aprender quando fiz as cadeiras de programação...

                                                    Cumprimentos

                                                    Comentário


                                                      #27
                                                      Originalmente Colocado por Jeandré Ver Post
                                                      Caso não tenhas percebido, a dúvida e o trabalho é do Gmigas.
                                                      Eu só fiz algumas sugestões em pseudo-código para passar uma ideia, não ia estar a desperdiçar tempo a fazer um trabalho escolar que nem é meu, e a colocá-lo chapadinho direitinho na internet até porque não ia estar a ajudar o Gmigas, visto que ele tem de aprender por ele a fazer estas coisas, como eu tive de aprender quando fiz as cadeiras de programação...

                                                      Cumprimentos
                                                      Boa.

                                                      Comentário


                                                        #28
                                                        Gmigas, acho que o que te estava a faltar para voltar ao inicio é a expressão "do" "while", ou seja, enquanto (while) não se verifica uma condição o programa vai correr (do) alguns comandos que lhe mandas

                                                        do{
                                                        comandos
                                                        }
                                                        while(qq. coisa)

                                                        Comentário


                                                          #29
                                                          Originalmente Colocado por tjose Ver Post
                                                          Gmigas, acho que o que te estava a faltar para voltar ao inicio é a expressão "do" "while", ou seja, enquanto (while) não se verifica uma condição o programa vai correr (do) alguns comandos que lhe mandas

                                                          do{
                                                          comandos
                                                          }
                                                          while(qq. coisa)
                                                          O que fazes com o do -while também podes fazer com o while normal só tens de lhe dar a condição de validação a true, tal como nos exemplos do Jeandré
                                                          Código:
                                                          bool naoautenticado=true;
                                                          
                                                          while(naoautenticado){
                                                          É que a diferença é que o do-while corre sempre pelo menos uma vez e o while pode não correr(se a condição não for true).

                                                          Comentário


                                                            #30
                                                            Originalmente Colocado por chambas Ver Post
                                                            O que fazes com o do -while também podes fazer com o while normal só tens de lhe dar a condição de validação a true, tal como nos exemplos do Jeandré
                                                            Código:
                                                            bool naoautenticado=true;
                                                            
                                                            while(naoautenticado){
                                                            É que a diferença é que o do-while corre sempre pelo menos uma vez e o while pode não correr(se a condição não for true).
                                                            Exacto, mas neste caso quer-se que pelo menos se corra uma vez o "ciclo" do.
                                                            Só sugeri esta forma pois, quando se trata de menus, parece-me mais simples de estruturar o raciocínio.

                                                            Comentário

                                                            AD fim dos posts Desktop

                                                            Collapse

                                                            Ad Fim dos Posts Mobile

                                                            Collapse
                                                            Working...
                                                            X