Ir ao conteúdo
  • Cadastre-se

kgin

Membro Pleno
  • Posts

    380
  • Cadastrado em

  • Última visita

posts postados por kgin

  1. Pode ser energia estática.

    Aço escovado, pvc, isopor e algumas madeiras (como peroba rosa, cedrinho e alguns tipos de mdf e mdp) podem guardar energia estatística, principalmente se estiverem perto de algum transformador.

     

    Coloque em cima de algum isolante na mesa e teste pra ver se é isso mesmo.

  2. Você poderia fazer assim

        /* Pega a quantidade de clientes */
        do {
            printf("Quantos clientes deseja cadastrar?\n");
            fgets(buffer_teclado, TAMANHO_BUFFER, stdin);
            sscanf(buffer_teclado, "%i", &numero_clientes);
            /* Checa se o primeiro caractere é uma letra do alfabeto
             * isalpha e uma função que pertence a biblioteca ctype 
             */
            if (isalpha(*buffer_teclado)) {
                printf("Entrada Invalida!\n");
            }
        } while ((isalpha(*buffer_teclado) != 0) || (numero_clientes <= 0));

    Checando toda vez se a entrada do teclado não começa com uma letra.

     

    Quando for postar no fórum utilize o botão code e poste todos os arquivos do programa.

     

    exemplo completo

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    #include "cliente.c"
    
    #define TAMANHO_BUFFER 256
    
    int main(void) {
        char buffer_teclado[TAMANHO_BUFFER];
        int
            numero_clientes = 0,
            contador;
    
        /* Pega a quantidade de clientes */
        do {
            printf("Quantos clientes deseja cadastrar?\n");
            fgets(buffer_teclado, TAMANHO_BUFFER, stdin);
            sscanf(buffer_teclado, "%i", &numero_clientes);
            /* Checa se o primeiro caractere é uma letra do alfabeto
             * isalpha e uma função que pertence a biblioteca ctype 
             */
            if (isalpha(*buffer_teclado)) {
                printf("Entrada Invalida!\n");
            }
        } while ((isalpha(*buffer_teclado) != 0) || (numero_clientes <= 0));
        
        //Alocação dinâmica do ponteiro clientes do tipo Cliente
        Cliente *clientes = malloc(sizeof(*clientes)*numero_clientes); 
        for (int contador = 0; contador < n; contador++) {
            //Cadastro do nome do cliente
            printf("Informe o nome do cliente: ");
            fgets(buffer_teclado, TAMANHO_BUFFER, stdin);
            buffer_teclado[strlen(buffer_teclado)] = '\0';
            strcpy(clientes[contador].nome, buffer_teclado);
            
            //Cadastro do enedereço do cliente
            printf("Informe o endereço do cliente: ");
            fgets(buffer_teclado, TAMANHO_BUFFER, stdin);
            buffer_teclado[strlen(buffer_teclado)] = '\0';
            strcpy(clientes[contador].endereco, buffer_teclado);
            
            //Cadatro do código do cliente
            printf("informe o código do cliente: ");
            fgets(buffer_teclado, TAMANHO_BUFFER, stdin);
            sscanf(buffer_teclado, "%i", &clientes[contador].endereco);
        }
    
        atribuirDados(clientes, numero_clientes);
        //CRIAR FUNÇÃO QUE APAGA O ARQUIVO TXT
        free(clientes); //Esvaziamento da memória alocada pelo ponteiro clientes 
        clientes = NULL;
        return(0);
    }

     

    • Curtir 1
    • Obrigado 1
  3. Boa noite!

     

    O problema principal é que você declarou todos os tipos caractere como caractere

    26 minutos atrás, luluvito disse:
    funcao desenharTabuleiro(caractere tabuleiro[][])

    e a outros problemas pontuais que tornam meio difícil consertar o algoritmo.

    recomendaria começar de novo e focar só no jogo em si por enquanto.

    • Obrigado 1
  4. 3 horas atrás, HenriqueArisi disse:

    @kgin Amigo, testei aqui e continua no mesmo erro... 😬

     

    Na hora que eu estava testando o programa eu fiz algumas modificações 😕. Por isso não percebi o erro, mas o erro está na linha 50.

    5 horas atrás, kgin disse:
             i <- 1
             Enquanto (i <= 10) E (RA[i] <> 0) faca
                i <- i + 1
             FimEnquanto

     

    Funcionando agora

    Algoritmo "CadastroAlunos"
    
    const
       // AQUI VOCÊ ALTERA A QUANTIDADE DE ALUNOS NO PROGRAMA AAAAAAAAAAH........ •`_´•
       QUANTIDADE_MAXIMA_ALUNOS = 2
    
    Var
       opcao: Caractere
       RA: Vetor[1..QUANTIDADE_MAXIMA_ALUNOS] de Inteiro
       Nota1: Vetor[1..QUANTIDADE_MAXIMA_ALUNOS] de Real
       Nota2: Vetor[1..QUANTIDADE_MAXIMA_ALUNOS] de Real
       Cidade: Vetor[1..QUANTIDADE_MAXIMA_ALUNOS] de Caractere
       MEDIA: Vetor[1..QUANTIDADE_MAXIMA_ALUNOS] de Real
       contador: Inteiro
       raPesquisa: Inteiro
       encontrou: Logico
       alunosCadastrados: Logico
    
    procedimento espera
    var
       entrada:caractere
    inicio
       escreval("Pressione enter para continuar...")
       leia(entrada)
    fimProcedimento
    
    Inicio
       Para contador de 1 ate QUANTIDADE_MAXIMA_ALUNOS faca
          RA[contador] <- 0
          Nota1[contador] <- 0
          Nota2[contador] <- 0
          MEDIA[contador] <- 0
       FimPara
    
       alunosCadastrados <- Falso
       contador <- 1
    
       Enquanto opcao <> "S" faca
          Escreval("==================================================")
          Escreval("                    -=MENU=-")
          Escreval("1 - Cadastrar aluno")
          Escreval("2 - Pesquisar aluno")
          Escreval("3 - Listar alunos")
          Escreval("4 - Lista média de todos alunos da turma")
          Escreval("S - Sair")
          Escreval("==================================================")
          Escreval("Digite Opção: ")
          Leia(opcao)
          LimpaTela
    
          Escolha opcao
          Caso "1"
             // O ERRO ERA AQUI!
             // Cadastrar aluno
             // Enquanto (contador <= QUANTIDADE_MAXIMA_ALUNOS) E (RA[i] <> 0) faca
             //    contador <- contador + 1
             // FimEnquanto
             // FIM DO ERRO!
    
             Se contador <= QUANTIDADE_MAXIMA_ALUNOS então
                Escreva("Digite o RA do aluno: ")
                Leia(RA[contador])
                Escreva("Digite a Nota 1 do aluno: ")
                Leia(Nota1[contador])
                Escreva("Digite a Nota 2 do aluno: ")
                Leia(Nota2[contador])
                Escreva("Digite a Cidade do aluno: ")
                Leia(Cidade[contador])
    
                MEDIA[contador] <- (Nota1[contador] + Nota2[contador]) / 2
                LimpaTela
    
                Escreval("Aluno cadastrado com sucesso!")
                contador <- contador+1
             Senao
                Escreval("Limite de alunos atingido.")
                espera
             FimSe
    
          Caso "2"
             // Pesquisar aluno
             Se alunosCadastrados então
                Escreval("Digite o RA para pesquisa: ")
                Leia(raPesquisa)
                encontrou <- Falso
                Para contador de 1 ate QUANTIDADE_MAXIMA_ALUNOS faca
                   Se RA[contador] = raPesquisa então
                      LimpaTela
                      Escreval("Média: ", MEDIA[contador])
                      encontrou <- Verdadeiro
                      Interrompa
                   FimSe
                FimPara
    
                Se não encontrou então
                   Escreval("RA inexistente")
                FimSe
             Senao
                Escreval("Nenhum aluno cadastrado até o momento.")
             FimSe
    
          Caso "3"
             // Listar alunos
             Se alunosCadastrados então
                Para contador de 1 ate QUANTIDADE_MAXIMA_ALUNOS faca
                   Se RA[contador] <> 0 então
                      Escreval("RA: ", RA[contador])
                      Escreval("Nota 1: ", Nota1[contador])
                      Escreval("Nota 2: ", Nota2[contador])
                      Escreval("Média: ", MEDIA[contador])
                      Escreval("---------------------------------")
                   FimSe
                FimPara
             Senao
                Escreval("Nenhum aluno cadastrado até o momento, consequentemente, nenhuma média calculada.")
             FimSe
    
          Caso "4"
             // Listar médias
             Se alunosCadastrados então
                Para contador de 1 ate QUANTIDADE_MAXIMA_ALUNOS faca
                   Se RA[contador] <> 0 então
                      Escreval("RA: ", RA[contador])
                      Escreval("Média: ", MEDIA[contador])
                      Escreval("---------------------------------")
                   FimSe
                FimPara
             Senao
                Escreval("Nenhum aluno cadastrado até o momento.")
             FimSe
    
          Caso "S"
             Escreval("Agradecemos por utilizar o programa!")
    
          OutroCaso
             Escreval("Opção inválida. Tente novamente.")
          FimEscolha
       FimEnquanto
    
    FimAlgoritmo

    Tente reestruturar o programa, e evite usar variáveis com nomes pouco significativos como i ou ra acaba dificultando o entendimento do mesmo.

    • Curtir 1
  5. 7 horas atrás, HenriqueArisi disse:

    O ERRO SE DA NA SEGUINTE PARTE: O limite de alunos deve ser 10, após tentar cadastrar mais alunos porém com esse limite já atingido, mandar uma informação.(que já foi atingido)

    Você tem que colocar para o programa parar nesse momento.

    Exemplo:

    Algoritmo "CadastroAlunos"
    
    Var
       opcao: Caractere
       RA: Vetor[1..10] de Inteiro
       Nota1: Vetor[1..10] de Real
       Nota2: Vetor[1..10] de Real
       Cidade: Vetor[1..10] de Caractere
       MEDIA: Vetor[1..10] de Real
       i: Inteiro
       raPesquisa: Inteiro
       encontrou: Logico
       alunosCadastrados: Logico
       
    procedimento espera
    var
       entrada:caractere
    inicio
          escreval("Pressione enter para continuar...")
          leia(entrada)
    fimProcedimento
    
    Inicio
       Para i de 1 ate 10 faca
          RA[i] <- 0
          Nota1[i] <- 0
          Nota2[i] <- 0
          MEDIA[i] <- 0
       FimPara
    
       alunosCadastrados <- Falso
    
       Enquanto opcao <> "S" faca
          Escreval("==================================================")
          Escreval("                    -=MENU=-")
          Escreval("1 - Cadastrar aluno")
          Escreval("2 - Pesquisar aluno")
          Escreval("3 - Listar alunos")
          Escreval("4 - Lista média de todos alunos da turma")
          Escreval("S - Sair")
          Escreval("==================================================")
          Escreval("Digite Opção: ")
          Leia(opcao)
          LimpaTela
    
          Escolha opcao
          Caso "1"
             // Cadastrar aluno
             i <- 1
             Enquanto (i <= 10) E (RA[i] <> 0) faca
                i <- i + 1
             FimEnquanto
    
             Se i <= 10 então
                Escreva("Digite o RA do aluno: ")
                Leia(RA[i])
                Escreva("Digite a Nota 1 do aluno: ")
                Leia(Nota1[i])
                Escreva("Digite a Nota 2 do aluno: ")
                Leia(Nota2[i])
                Escreva("Digite a Cidade do aluno: ")
                Leia(Cidade[i])
    
                MEDIA[i] <- (Nota1[i] + Nota2[i]) / 2
                LimpaTela
    
                Escreval("Aluno cadastrado com sucesso!")
                alunosCadastrados <- Verdadeiro
             Senao
                Escreval("Limite de alunos atingido.")
                espera
             FimSe
    
          Caso "2"
             // Pesquisar aluno
             Se alunosCadastrados então
                Escreval("Digite o RA para pesquisa: ")
                Leia(raPesquisa)
                encontrou <- Falso
                Para i de 1 ate 10 faca
                   Se RA[i] = raPesquisa então
                      LimpaTela
                      Escreval("Média: ", MEDIA[i])
                      encontrou <- Verdadeiro
                      Interrompa
                   FimSe
                FimPara
    
                Se não encontrou então
                   Escreval("RA inexistente")
                FimSe
             Senao
                Escreval("Nenhum aluno cadastrado até o momento.")
             FimSe
    
          Caso "3"
             // Listar alunos
             Se alunosCadastrados então
                Para i de 1 ate 10 faca
                   Se RA[i] <> 0 então
                      Escreval("RA: ", RA[i])
                      Escreval("Nota 1: ", Nota1[i])
                      Escreval("Nota 2: ", Nota2[i])
                      Escreval("Média: ", MEDIA[i])
                      Escreval("---------------------------------")
                   FimSe
                FimPara
             Senao
                Escreval("Nenhum aluno cadastrado até o momento, consequentemente, nenhuma média calculada.")
             FimSe
    
          Caso "4"
             // Listar médias
             Se alunosCadastrados então
                Para i de 1 ate 10 faca
                   Se RA[i] <> 0 então
                      Escreval("RA: ", RA[i])
                      Escreval("Média: ", MEDIA[i])
                      Escreval("---------------------------------")
                   FimSe
                FimPara
             Senao
                Escreval("Nenhum aluno cadastrado até o momento.")
             FimSe
    
          Caso "S"
             Escreval("Agradecemos por utilizar o programa!")
    
          OutroCaso
             Escreval("Opção inválida. Tente novamente.")
          FimEscolha
       FimEnquanto
    
    FimAlgoritmo

     

    7 horas atrás, HenriqueArisi disse:

    Esse é o código, e aqui está o erro na hora da execução - Acredito que essas linhas que o Visualg acusa estejam erradas, mas resumindo, Eu cadastro os 10 alunos porém quando clico novamente na Opção 1(de cadastro), ao invés de aparecer a mensagem de "Limite de alunos atingido", e aí o erro se apresenta. Se algum expert puder me ajudar ficarei muito agradecido!!

    Eu testei aqui e está tudo normal, mas esse erro aí seria na linha 43 no comando Leia(opcao) que estaria faltando ) um parênteses.

    tudo_ok.thumb.png.618a1f23c26637e83dd8abed883f8d1c.png

  6. Você errou na sintaxe do se..então

    38 minutos atrás, dmoret disse:
       se categoria = "1" então
          vlr_diaria <- 299.99
          escreval("Categoria: Popular")
       senao se categoria = "2" então
          vlr_diaria <- 399.99
          escreval("Categoria: Hatch ou Sedan Intermediário")
       senao se categoria = "3" então
          vlr_diaria <- 499.99
          escreval("Categoria: SUV ou Sedan Luxo")

    No final teria que ter um fimSe, e eu recomendo não usar acentos nas palavras no visualG. Ele tem a tendência de buggar até com as próprias palavras reservadas.

     

    Outra melhoria seria usar a estrutura de decisão escolha ao invés do se...então.

    Exemplo:

    algoritmo "_"
    
    Var
       // Seção de Declarações das variáveis
       categoria: caractere
       tipoc: caractere
       diarias: inteiro
       vlr_diaria: real
       vlr_total: real
       desconto: real
    
    Inicio
    
       // Seção de Comandos, procedimento, funções, operadores, etc...
    
       escreval("Escolha a categoria do veículo (1, 2 ou 3): ")
       leia(categoria)
       escreval("Digite a qtd de diárias: ")
       leia(diarias)
    
       escolha categoria
       caso "1"
          vlr_diaria <- 299.99
          escreval("Categoria: Popular")
       caso "2"
          vlr_diaria <- 399.99
          escreval("Categoria: Hatch ou Sedan Intermediário")
       caso "3"
          vlr_diaria <- 499.99
          escreval("Categoria: SUV ou Sedan Luxo")
       fimEscolha
    
    
       escreval("Tipo Categoria: ", tipoc)
       escreval("Qtd de diárias: ", diarias)
       escreval("Vlr da diária: R$ ", vlr_diaria)
    
       se diarias <= 6 então
          desconto <- 0
       senao se diarias <= 14 então
          desconto <- 0.05
       senao se diarias <= 30 então
          desconto <- 0.1
       fimSe
    
       vlr_total <- diarias * vlr_diaria * (1 - desconto)
       escreval("Valor total do aluguel: R$ ", vlr_total)
    Fimalgoritmo

     

    • Curtir 2
    • Obrigado 1
  7. 1 hora atrás, devair1010 disse:

    olá ,   baixei o turbo pascal junto com DOSBOX e instalei ele e até funcionou , mas não estou conseguindo colocar em tela cheia ,  ele fica só minimizado dificultando ler as letras pequeninhas ., teria algum modo de maximizar a janela desse Turbo Pascal ?

    Pressione alt+enter para colocar em modo tela cheia. o programa não tem um modo maximizado!

    e ctrl+F10 para soltar o cursor do mouse.

     

    Seria melhor você baixar os dois separados.

    nesse link tem o turbo pascal 7

    • Amei 2
  8. @matheus.Matta testei aqui e funcionando "normal"!

    funcionando.thumb.png.60a2ef9a4d45d6da448469574069859b.png

    O replit funciona com uma maquina virtual linux, então você precisa de um ambiente igual ao replit para funcionar.

     

    a maioria das versões do gcc para o windows não ligam para a compatibilidade entre os sistemas, então seu problema seja esse.

    recomendo usar o tdm-gcc pelo fato de ser bem mais simples pra quem está iniciando.

    • Curtir 1
  9. 1 hora atrás, carcleo1999 disse:

    Rapaz acho que fiz burrada;

     

    Xcopy G: I:\backup /E /H /C /I

     

    Parece ele está copindo tudo para o I: mas ão dento da pasta backup

    Creio eu que o ideal seria usar o seguinte comando

    /s /e /k /p /i

    Se a pasta não existir ele vai forçar para ser criada.

    O ideal seria usar o comando robocopy porque o xcopy coloca o arquivo todo na memória (até onde eu me lembro) antes de copiar.

     

    colocando o comando /Z você pode acompanhar o progresso do xcopy.

     

    XCOPY Microsoft learn

    • Curtir 1
  10. 23 horas atrás, Eli Almeidaa disse:

    Tô tentando fazer assim agora,

    troquei a função cadastrarProduto pelo procedimento cadastrarProduto, porque não sei o que a função

    poderia retornar e o procedimento não retorna nada. Será que esse início estaria adequado agora?

    Esta sim!

    Veja que no enunciado não pede para retornar nada

    Em 17/09/2023 às 17:13, Eli Almeidaa disse:

    Cadastro de Produto: Crie uma função que permita ao usuário cadastrar um novo produto, informando o nome, preço unitário e quantidade em estoque. Os dados devem ser armazenados no vetor de produtos.

     

    Uma melhoria seria colocar algumas checagens de entrada para evitar informações duplicadas.

    Dessa maneira

    funcao produto_existe(nome:caractere):inteiro
    var
       contador:inteiro
    inicio
       retorne 0
       para contador de 1 ate quantidade_produtos_cadastrados faca
          se nome = produtos[contador].nome então
             retorne contador
             interrompa
          fimSe
       fimPara
    fimFuncao
    
    procedimento cadastra_produto
    var
       opcao:caractere
    inicio
       repita
          escreva("Digite o nome do produto:")
          leia(p_temp.nome)
          se (produto_existe(p_temp.nome) > 0) então
             escreval("O produto ", p_temp.nome, " Já existe no cadastro!")
             escreval("Deseja continuar cadastrando outro?")
             escreva("[S/N]:")
             leia(opcao)
             se (opcao <> "s") então
                interrompa
             fimSe
          fimSE
       ate não ((produto_existe(p_temp.nome) > 0) e (opcao = "s"))
    fimProcedimento

    Fiz de cabeça e provavelmente nem funciona :b

    • Curtir 2
  11. 5 horas atrás, Eli Almeidaa disse:

    Fiz esse código para a questão, mas não sei se está correto e se o que as funções retornam está legal, se alguém puder

    executar e me ver o que precisa mudar, melhorar :

    Eu acho que você deveria usar registros, veja nesse trecho do enunciado

    5 horas atrás, Eli Almeidaa disse:

    A loja possui um catálogo de produtos, cada um representado por um vetor de registro com as seguintes informações:

    então nessa parte do seu código

    Var
       nomesProdutos : vetor [1..2] de caractere
       precosProdutos : vetor [1..2] de real
       estoqueProdutos : vetor [1..2] de inteiro
       produtosNaoCadastrados : logico

    Deveria ser algo assim

    const
       QUANTIDADE_MAXIMA_PRODUTOS = 100
    
    tipo
       t_produto = registro
          nome:caractere
          preco:real
          estoque:inteiro
       fimRegistro
       
       integer = inteiro
    
    var
       produtos: vetor [1..QUANTIDADE_MAXIMA_PRODUTOS] de t_produto
       quantidade_produtos_cadastrados:inteiro

    isso é um recurso pouco documentado do visualG, então eu sugiro você ler esse livro de pascal para entender melhor o funcionamento (pagina 105 - Registros).

    • Curtir 1
    • Obrigado 1
  12. Em 15/09/2023 às 20:34, Eli Almeidaa disse:

    @kgin, @Midori , valeu os dois códigos funcionaram. A constante sendo usada como tamanho do vetor

    Só funciona assim no caso :  [1..QUANTIDADE_FRUTAS], assim, não funciona :

    [QUANTIDADE_FRUTAS]?

    Não porque você tem que especificar qual é a primeira posição do vetor, mas essa lógica é valida em C e C++ pelo fato da primeira posição do vetor ser sempre a posição "0".

    exemplo em C

    #include <stdio.h>
    
    #define TAMANHO_STR 30
    
    enum tipos_frutas
    {
        TF_ABACAXI = 0,
        TF_BANANA,
        TF_CEREJA,
        TF_DAMASCO,
        TF_EMBUABA,
        TF_QUANTIDADE_FRUTAS
    };
    
    int main(void)
    {
        char buffer[256];       /* Utilizado para pegar a entrada padrão! */
        int contador;
        /* Declara e inicia a matriz */
        char nome_frutas[TF_QUANTIDADE_FRUTAS][TAMANHO_STR] = {
            "Abacaxi",
            "Banana",
            "Cereja",
            "Damasco",
            "Embuaba"
        };
        
        /* Mostra o nome das frutas */
        for (contador = 0; contador < TF_QUANTIDADE_FRUTAS; contador++) {
            printf("[%i]-%s\n", contador, nome_frutas[contador]);
        }
        
        /* Salta uma linha */
        printf("\n");
        
        /* Mostra a primeira e a ultima fruta */
        printf("A primeira fruta e %s\n", nome_frutas[TF_ABACAXI]);
        printf("A ultima fruta e %s\n", nome_frutas[TF_EMBUABA]);
        
        /* Pausa o programa */
        printf("Pressione enter para continuar!\n");
        fgets(buffer, 256, stdin);
        return(0);
    }

    Experimente online!

     

    Você poderia contornar isso declarando a primeira posição do vetor e a ultima.

    Exemplo

    Algoritmo "Tipos_de_fruta"
    
    const
         QF_INICIO = 1
         QF_FIM = 5
    
    var
       nome_frutas: vetor [QF_INICIO..QF_FIM] de caractere
       contador:inteiro
    
    inicio
       // Inicia o vetor!
       nome_frutas[1] <- "Abacaxi"
       nome_frutas[2] <- "Banana"
       nome_frutas[3] <- "Cereja"
       nome_frutas[4] <- "Damasco"
       nome_frutas[5] <- "Embauba"
    
       // Mostra o nome das frutas
       limpaTela
       escreval("Nomes das frutas no sistema!")
       para contador de QF_INICIO ate QF_FIM faca
          escreval("[", contador, "]-", nome_frutas[contador])
       fimPara
    fimAlgoritmo

    Em pascal (a linguagem pai do visualG) isso é uma declaração bem útil, mas no visualG não tem muito sentido fazer isso pelo fato da linguagem ser bem mais limitada.

    • Obrigado 1
  13. Algoritmo "Tipos_de_fruta"
    
    const
       QUANTIDADE_FRUTAS = 5
    
    var
       nome_frutas: vetor [1..QUANTIDADE_FRUTAS] de caractere
       contador:inteiro
    
    inicio
       // Inicia o vetor!
       nome_frutas[1] <- "Abacaxi"
       nome_frutas[2] <- "Banana"
       nome_frutas[3] <- "Cereja"
       nome_frutas[4] <- "Damasco"
       nome_frutas[5] <- "Embauba"
    
       // Mostra o nome das frutas
       limpaTela
       escreval("Nomes das frutas no sistema!")
       para contador de 1 ate QUANTIDADE_FRUTAS faca
          escreval("[", contador, "]-", nome_frutas[contador])
       fimPara
    fimAlgoritmo

    Consulte o manual para mais detalhes!

    • Curtir 1
    • Obrigado 1
  14. Ficaria mais fácil usando vetores

    exemplo

    algoritmo "reserva_lugares"
    
    const
       QUANTIDADE_LINHAS = 10
       QUANTIDADE_COLUNAS = 10
    
       LUGAR_VAZIO = 0
       LUGAR_RESERVADO = 1
    
    var
       lugares: vetor [1..QUANTIDADE_LINHAS, 1..QUANTIDADE_COLUNAS] de inteiro
       btecla: caractere
       fileira: caractere
       cadeira: inteiro
    
    procedimento limpa_lugares
    var
       linhas, colunas:inteiro
    
    inicio
       para linhas de 1 ate QUANTIDADE_LINHAS faca
          para colunas de 1 ate QUANTIDADE_COLUNAS faca
             lugares[linhas, colunas] <- LUGAR_VAZIO
          fimPara
       fimPara
    fimProcedimento
    
    procedimento mostra_lugares
    var
       linhas, colunas:inteiro
    
    inicio
       escreva("-")
       para colunas de 1 ate QUANTIDADE_COLUNAS faca
          se colunas < QUANTIDADE_COLUNAS então
             escreva(colunas)
          seNao
             escreval(colunas)
          fimSe
       fimPara
    
       para linhas de 1 ate QUANTIDADE_LINHAS faca
          escreva(carac(asc("A")+(linhas-1)))
          escreva(" |")
          para colunas de 1 ate QUANTIDADE_COLUNAS faca
             se lugares[linhas, colunas] = LUGAR_VAZIO então
                se colunas < QUANTIDADE_COLUNAS então
                   escreva("-|")
                seNao
                   escreva("-")
                fimSe
             seNao
                se colunas < QUANTIDADE_COLUNAS então
                   escreva("B|")
                seNao
                   escreva("B")
                fimSe
             fimSe
          fimPara
          escreval("|")
       fimPara
    fimProcedimento
    
    inicio
       limpa_lugares
       limpaTela
       mostra_lugares
       escreval("Digite a fileira desejada")
       leia(fileira)
       escreval("Digite a cadeira desejada")
       leia(cadeira)
       lugares[(asc(maiusc(fileira))-asc("A"))+1, cadeira] <- LUGAR_RESERVADO
       mostra_lugares
    fimAlgoritmo

     

    • Curtir 1
  15. A lógica para o visualg nessa sentença está errada.

    6 horas atrás, João Lucas Gomes de Moura disse:

    Se ((F = "S" OU "C" OU "T") = Falso) então

    Você teria que comparar a variável com todas as letras. mais ou menos dessa maneira

    // Estou negando a sentença para ela ser verdadeira 
    Se (não (operacao = "S") OU (operacao = "C") OU (operacao = "T")) então

    No visualg quando você for usar operadores lógicos (não, E ou OU) você tem que proteger as operações de desigualdade (<, <=, >=, >, =, <>) desta maneira

    // Correto!
    se ((valor >= 1) E (valor <= 3)) então

    se você colocar dessa maneira vai esta errado

    // Errado!
    se valor >= 1 E valor <= 3 então

    Não vai funcionar.

     

    Seu algoritmo funcionando

    algoritmo "Perguntando se quer tan, cos ou sen"
    // Função : Criar uma espécie de calculadora trigonométrica
    // Autor : João Lucas Gomes de Moura, modificador por KGIN!
    // Data : 15/07/2023
    var
       operacao:caractere
       valor, resposta:real
    inicio
       Escreval("Bem vindo a calculadora trigonométrica!")
       Escreval("Escolha uma função: S para Seno, C para Cosseno, e T para Tangente")
       Leia(operacao)
    
       Se (operacao = "S") então
          Escreval("Escreva um número para calcularmos o Seno:")
          Leia(valor)
          resposta <- Sen(valor)
          Escreval("O seno de ", valor, " é igual a ", resposta)
          Escreva("Obrigado pela preferência!")
       Fimse
    
       Se (operacao = "C") então
          Escreval("Escreva um número para calcularmos o Cosseno:")
          Leia(valor)
          resposta <- Cos(valor)
          Escreval("O Cosseno de ", valor, " é igual a ", resposta)
          Escreva("Obrigado pela preferência!")
       Fimse
    
       Se (operacao = "T") então
          Escreval("Escreva um número para calcularmos a Tangente:")
          Leia(valor)
          resposta <- Tan(valor)
          EscrevaL("A Tangente de ", valor, " é igual a ", resposta)
          Escreva("Obrigado pela preferência!")
       Fimse
    
       Se (não (operacao = "S") OU (operacao = "C") OU (operacao = "T")) então
          Escreva("É para escolher uma das letras acima bobo. Executa essa ***** de novo!")
       Fimse
    fimalgoritmo

    Outra dica é tente dar nomes mais significativos para as variáveis.

    uma variável com o nome valor e muito mais significativa do que usar uma letra solta como V ou F. e tente escrever mais em torno dos dados que o usuário vai fornecer, veja que o seu algoritmo é só um copia e cola. isso não é uma coisa ruim as vezes.

     

    Veja que muitas partes davam para ser reutilizadas

    algoritmo "Otimização maxima!"
    
    var
       NOME_OPERACOES: vetor [1..3] de caractere
    
       operacao, contador:inteiro
       valor:real
    
    
    inicio
       // Define o nome das operações
       NOME_OPERACOES[1] <- "Seno"
       NOME_OPERACOES[2] <- "Cosseno"
       NOME_OPERACOES[3] <- "Tangente"
    
       // Mensagem de boas vindas!
       escreval("Bem vindo a calculadora trigonometrica!")
    
       // Loop principal....
       repita
          // Pega o tipo de operação
          escreval("Escolha uma das operações a baixo")
          para contador de 1 ate 3 faca
             escreval(contador ," para ", NOME_OPERACOES[contador])
          fimPara
          escreval(" 0 para sair!")
          leia(operacao)
    
          // Pega o valor para a operação
          se ((operacao >= 1) e (operacao <=3)) então
             escreval
             escreva("Escreva um numero para calcularmos ")
             se (operacao <= 2) então
                escreva("o ", NOME_OPERACOES[operacao], ":")
             seNao
                escreva("a ", NOME_OPERACOES[operacao], ":")
             fimSe
             leia(valor)
    
             // Faz a operação
             escreval
             se (operacao <= 2) então
                escreva("O ", NOME_OPERACOES[operacao])
             seNao
                escreva("A ", NOME_OPERACOES[operacao])
             fimSe
             escreva(" de ", valor," e igual a ")
             escolha operacao
             caso 1
                escreval(sen(valor))
             caso 2
                escreval(cos(valor))
             caso 3
                escreval(tan(valor))
             fimEscolha
             escreval("Pressione enter para continuar")
             leia(contador)      // Reutilizei :b
          fimSe
          limpaTela
       ate operacao = 0
    fimAlgoritmo

     

    • Curtir 1
  16. Comecei esse algoritmo como um exemplo, mas na hora que vi estava grande demais para tal proposito.

     

    Deixo como exercício para quem está começando.

    algoritmo "Restaurante"
    
    const
       // Constantes do programa
       CATEGORIA_LANCHES = 1
       CATEGORIA_BEBIDAS = 2
       CATEGORIA_ACOMPANHAMENTOS = 3
       CATEGORIA_QUANTIDADE_MAXIMA = 3
    
       QUANTIDADE_MAXIMA_PRODUTOS = 20
    
       QUANTIDADE_MAXIMA_PEDIDOS = 50
    
    tipo
       informacao_produto=registro
          nome:caractere
          preco:real
       fimRegistro
    
       informacao_pedido=registro
          categoria:inteiro
          produto:inteiro
          quantidade:inteiro
       fimRegistro
    
    var
       contador:inteiro
    
       // Vetor que vai guardar todos os produtos do restaurante
       NOMES_CATEGORIAS: vetor[1..CATEGORIA_QUANTIDADE_MAXIMA] de caractere
       PRODUTOS: vetor[1..CATEGORIA_QUANTIDADE_MAXIMA, 1..QUANTIDADE_MAXIMA_PRODUTOS] de informacao_produto
       QUANTIDADE_PRODUTOS: vetor[1..CATEGORIA_QUANTIDADE_MAXIMA] de inteiro
    
       pedidos_usuario: vetor[1..QUANTIDADE_MAXIMA_PEDIDOS] de informacao_pedido
       total_pedidos:inteiro
    
       opcao:inteiro
    
    procedimento p_programa
    var
       tmp:caractere
    inicio
       escreval("Pressione enter para continuar...")
       leia(tmp)
    fimProcedimento
    
    procedimento barra_simples(laterais, meio:caractere; tamanho:inteiro)
    var
       contador:inteiro
    
    inicio
       escreva(laterais)
       para contador de 1 ate tamanho-2 faca
          escreva(meio)
       fimPara
       escreva(laterais)
    fimProcedimento
    
    procedimento banner(str, laterais, meio:caractere; tamanho:inteiro)
    var
       tamanho_restante:inteiro
       contador:inteiro
    
    inicio
       tamanho_restante <- int(((tamanho-2)-compr(str))/2)
       escreva(laterais)
       para contador de 1 ate tamanho_restante faca
          escreva(meio)
       fimPara
       escreva(str)
       para contador de 1 ate tamanho_restante faca
          escreva(meio)
       fimPara
       escreva(laterais)
    fimProcedimento
    
    procedimento mostra_produto(categoria, produto:inteiro)
    var
       tamanho_restante:inteiro
       contador:inteiro
    
    inicio
       tamanho_restante <- 30-compr(PRODUTOS[categoria, produto].nome)
       escreva(PRODUTOS[categoria, produto].nome)
       barra_simples(".", ".", tamanho_restante)
       escreva(":", PRODUTOS[categoria, produto].preco:2:2)
    fimProcedimento
    
    procedimento menu_produtos(categoria:inteiro)
    var
       contador:inteiro
       opcao:inteiro
       quantidade_pedido:inteiro
       decisao_pedido:caractere
       achou_pedido:logico
    
    inicio
       repita
          limpaTela
          banner(NOMES_CATEGORIAS[categoria], "+", "=", 40)
          escreval
          para contador de 1 ate QUANTIDADE_PRODUTOS[categoria] faca
             escreva(contador, "-")
             mostra_produto(categoria, contador)
             escreval
          fimPara
          escreval(" 0-Para retornar ao menu anterior")
          escreval
          escreval("Digite uma das opções a cima")
          escreval("para incluir no pedido")
          barra_simples("+", "-", 40)
          escreval
          leia(opcao)
          se opcao <> 0 então
             se (opcao > 0) e (opcao <= QUANTIDADE_PRODUTOS[categoria]) então
                repita
                   escreva("Informe a quantidade desejada:")
                   leia(quantidade_pedido)
                   se quantidade_pedido <= 0 então
                      escreval("Informe uma quantidade valida!")
                   fimSe
                ate não (quantidade_pedido <= 0)
    
                achou_pedido <- falso
                para contador de 1 ate total_pedidos faca
    
                   se (pedidos_usuario[contador].categoria = categoria) e (pedidos_usuario[contador].produto = opcao) então
                      escreval("voce ja fez esse pedido anteriormente!")
                      escreval("Deseja acrecentar no pedido anterior?")
                      escreva("[S/N]:")
                      leia(decisao_pedido)
                      se maiusc(decisao_pedido) = "S" então
                         pedidos_usuario[contador].quantidade <- pedidos_usuario[contador].quantidade+quantidade_pedido
                      fimSe
                      achou_pedido <- verdadeiro
                      interrompa
                   fimSe
                fimPara
                se (achou_pedido = falso) e (total_pedidos < QUANTIDADE_MAXIMA_PEDIDOS) então
                   total_pedidos <- total_pedidos+1
                   pedidos_usuario[total_pedidos].categoria <- categoria
                   pedidos_usuario[total_pedidos].produto <- opcao
                   pedidos_usuario[total_pedidos].quantidade <- quantidade_pedido
                fimSe
             seNao
                escreval("Opcao invalida!")
                p_programa
             fimSe
          fimSe
       ate opcao = 0
    fimProcedimento
    
    procedimento mostra_pedidos
    var
       contador:inteiro
       valor_total:real
    inicio
       limpaTela
       banner("Registro De Pedidos", "!", "+", 40)
       escreval
       para contador de 1 ate total_pedidos faca
          mostra_produto(pedidos_usuario[contador].categoria, pedidos_usuario[contador].produto)
          escreval("X", pedidos_usuario[contador].quantidade, "=", pedidos_usuario[contador].quantidade*PRODUTOS[pedidos_usuario[contador].categoria, pedidos_usuario[contador].produto].preco:2:2)
          valor_total <- valor_total+pedidos_usuario[contador].quantidade*PRODUTOS[pedidos_usuario[contador].categoria, pedidos_usuario[contador].produto].preco
       fimPara
       escreval("Valor total da conta:", valor_total:2:2)
       escreval("Total de pedidos:", total_pedidos)
    fimProcedimento
    
    procedimento inicia_produtos_lanches
    inicio
       NOMES_CATEGORIAS[CATEGORIA_LANCHES] <- "Lanches"
       PRODUTOS[CATEGORIA_LANCHES, 1].nome <- "X EGG"
       PRODUTOS[CATEGORIA_LANCHES, 1].preco <- 10.00
    
       PRODUTOS[CATEGORIA_LANCHES, 2].nome <- "X EGG Especial"
       PRODUTOS[CATEGORIA_LANCHES, 2].preco <- 12.00
    
       PRODUTOS[CATEGORIA_LANCHES, 3].nome <- "X Bacon"
       PRODUTOS[CATEGORIA_LANCHES, 3].preco <- 14.00
    
       PRODUTOS[CATEGORIA_LANCHES, 4].nome <- "X Bacon Especial"
       PRODUTOS[CATEGORIA_LANCHES, 4].preco <- 18.00
    
       PRODUTOS[CATEGORIA_LANCHES, 5].nome <- "X Dog"
       PRODUTOS[CATEGORIA_LANCHES, 5].preco <- 10.00
    
       PRODUTOS[CATEGORIA_LANCHES, 6].nome <- "X Dog Especial"
       PRODUTOS[CATEGORIA_LANCHES, 6].preco <- 14.00
    
       PRODUTOS[CATEGORIA_LANCHES, 7].nome <- "Fantasminha"
       PRODUTOS[CATEGORIA_LANCHES, 7].preco <- 11.00
       QUANTIDADE_PRODUTOS[CATEGORIA_LANCHES] <- 7
    fimProcedimento
    
    procedimento inicia_produtos_bebidas
    inicio
       NOMES_CATEGORIAS[CATEGORIA_BEBIDAS] <- "Bebidas"
       PRODUTOS[CATEGORIA_BEBIDAS, 1].nome <- "Guarana jesus"
       PRODUTOS[CATEGORIA_BEBIDAS, 1].preco <- 9.99
    
       PRODUTOS[CATEGORIA_BEBIDAS, 2].nome <- "Mineirinho"
       PRODUTOS[CATEGORIA_BEBIDAS, 2].preco <- 4.65
    
       PRODUTOS[CATEGORIA_BEBIDAS, 3].nome <- "Korona extra"
       PRODUTOS[CATEGORIA_BEBIDAS, 3].preco <- 6.99
    
       PRODUTOS[CATEGORIA_BEBIDAS, 4].nome <- "Agua minelau com gas"
       PRODUTOS[CATEGORIA_BEBIDAS, 4].preco <- 3.50
    
       PRODUTOS[CATEGORIA_BEBIDAS, 5].nome <- "Agua minelau sem gas"
       PRODUTOS[CATEGORIA_BEBIDAS, 5].preco <- 1.99
    
       PRODUTOS[CATEGORIA_BEBIDAS, 6].nome <- "Vinho tinto"
       PRODUTOS[CATEGORIA_BEBIDAS, 6].preco <- 19.90
    
       PRODUTOS[CATEGORIA_BEBIDAS, 7].nome <- "Suco de laranja natural"
       PRODUTOS[CATEGORIA_BEBIDAS, 7].preco <- 4.99
       QUANTIDADE_PRODUTOS[CATEGORIA_BEBIDAS] <- 7
    fimProcedimento
    
    procedimento inicia_produtos_acompanhamentos
    inicio
       NOMES_CATEGORIAS[CATEGORIA_ACOMPANHAMENTOS] <- "Acompanhamentos"
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 1].nome <- "Batata Rustica"
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 1].preco <- 8.00
    
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 2].nome <- "Onion Rings"
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 2].preco <- 12.50
    
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 3].nome <- "Bacon Em Tiras"
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 3].preco <- 14.00
    
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 4].nome <- "Frango Frito"
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 4].preco <- 9.00
    
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 5].nome <- "Batata Frita"
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 5].preco <- 10.00
    
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 6].nome <- "Bolinho De Arroz"
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 6].preco <- 5.00
    
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 7].nome <- "Almondegas Ao Molho"
       PRODUTOS[CATEGORIA_ACOMPANHAMENTOS, 7].preco <- 13.00
       QUANTIDADE_PRODUTOS[CATEGORIA_ACOMPANHAMENTOS] <- 7
    fimProcedimento
    
    inicio
       // Inicia os produtos dos menus
       inicia_produtos_lanches
       inicia_produtos_bebidas
       inicia_produtos_acompanhamentos
    
       repita
          limpaTela
          barra_simples("+", "=", 70)
          escreval
          escreval(" ______   __  __     ______   ______   ______   ______   ______    ")
          escreval("/\  __ \ /\ \_\ \   /\  ___\ /\  __ \ /\  == \ /\  __ \ /\  == \   ")
          escreval("\ \ \/\ \\ \  __ \  \ \___  \\ \  __ \\ \  __< \ \ \/\ \\ \  __<   ")
          escreval(" \ \_____\\ \_\ \_\  \/\_____\\ \_\ \_\\ \_____\\ \_____\\ \_\ \_\ ")
          escreval("  \/_____/ \/_/\/_/   \/_____/ \/_/\/_/ \/_____/ \/_____/ \/_/ /_/ ")
          barra_simples("+", "=", 70)
          escreval
          para contador de 1 ate CATEGORIA_QUANTIDADE_MAXIMA faca
             escreval(contador, "-", NOMES_CATEGORIAS[contador])
          fimPara
          escreval("0-Para encerrar o programa")
          escreval("Digite uma das opções a cima")
          banner("Monte o seu pedido!", "+", "=", 40)
          escreval
          leia(opcao)
          se (opcao <> 0) então
             se (opcao > 0) e (opcao <= CATEGORIA_QUANTIDADE_MAXIMA) então
                menu_produtos(opcao)
             seNao
                escreval("Opcao invalida!")
                p_programa
             fimSe
          fimSe
       ate opcao = 0
       mostra_pedidos
    
    fimAlgoritmo

     

    • Obrigado 1
  17. 5 horas atrás, Eli Almeidaa disse:

    Alguém sabe o por quê?

    se você compilou e não funcionou o porque geralmente é o windows.

     

    O locale e dependente do sistema e das configurações do sistema.

    veja que linux ele vai funcionar, mas vai funcionar porque o linux esta configurado para utf-8 o terminal por padrão.

    exemplo linux

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    
    #define TAMANHO_BUFFER 256
    
    void
    p_pausa(void)
    {
        char buffer_entrada[TAMANHO_BUFFER];
        printf("Pressione enter para continuar.\n");
        fgets(buffer_entrada, TAMANHO_BUFFER-1, stdin);
    }
    
    int main(void)
    {
        char buffer_entrada[TAMANHO_BUFFER];
        setlocale(LC_ALL, "");
        printf("Digite o seu nome:");
        fgets(buffer_entrada, TAMANHO_BUFFER-1, stdin);
        printf("O nome digitado é: %s\n", buffer_entrada);
        p_pausa();
        return(0);
    }

     

    • Curtir 2
  18. @rieidi_gamer  Se vai mudar para c++ de uma olhada no meu código

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define TAMANHO_BUFFER 256
    
    #define TAMANHO_BARRA 60
    
    void
    barra_progresso(int progresso, char adorno);
    
    int
    extrai_progresso(int valor_atual, int valor_total);
    
    void
    barra_comum(int tamanho_barra, char adorno, char meio);
    
    void
    pausa_msg(char *msg);
    
    int main(void)
    {
        int contador;
        for (contador = 0; contador < 400; contador++) {
            barra_progresso(extrai_progresso(contador, 400), '>');
            usleep(10000);
        }
        return(0);
    }
    
    void
    barra_progresso(int progresso, char adorno)
    {
        int progresso_atua = (progresso*TAMANHO_BARRA)/100;
        int progresso_falta = TAMANHO_BARRA-progresso_atua;
        int contador;
        printf("\r[");
        for (contador = 0; contador < progresso_atua; contador++) {
            printf("%c", adorno);
        }
        
        for (contador = 0; contador < progresso_falta; contador++) {
            printf(" ");
        }
        printf("]-%i%%", progresso);
        fflush(stdout);
    }
    
    int
    extrai_progresso(int valor_atual, int valor_total)
    {
        return(((valor_atual+1)*100)/valor_total);
    }
    
    void
    barra_comum(int tamanho_barra, char adorno, char meio)
    {
        int contador;
        putchar(adorno);
        for (contador = 0; contador < tamanho_barra; contador++) {
            putchar(meio);
        }
        printf("%c\n", adorno);
    }
    
    void
    pausa_msg(char *msg)
    {
        char buffer[TAMANHO_BUFFER];
        if (msg != NULL) {
            puts(msg);
        }
        puts("Pressione enter para continuar...");
        fgets(buffer, TAMANHO_BUFFER, stdin);
    }

    versão online!

     

    Isso é apenas um recorte desse código.

    apaga_arquivos.zip

    Era só um teste e não funciona 😞

  19. Seria interessante você colocar o enunciado.

    Você pode fazer dessa maneira para adicionar vetores

    programa {
    	funcao inicio() {
    	    // Constante com o tamanho do vetor
    	    const inteiro QUANTIDADE_RESPOSTAS = 7
    	    // Constante que especifica a resposta correta
    	    const inteiro RESPOSTA_ESPERADA = 0
    	    // Varivel que vai guardar a resposta do usuario
    	    cadeia resposta
    	    // Um vetor de constantes que guarda todas as respostas validas do programa
    	    const cadeia respostas_validas[QUANTIDADE_RESPOSTAS] = {
    	        "what do you do?",
    	        "I work in marketing. how about you?",
    	        "I'm a student. i study german.",
    	        "my sister studies german, too!",
    	        "nice!",
    	        "what does your sister do?",
    	        "she works in a restaurant"
    	    }
    	    
    	    //Lição 19: Ela trabalha em marketing, página 5
    		escreva("\t\t\t\t========== Lição 19: Ela trabalha em marketing, página 5 ==========\n\n")
    		
    		faca {
    		    escreva("O que você faz?\n")
    		    leia(resposta)
    		    se (resposta == respostas_validas[RESPOSTA_ESPERADA]) {
    		        escreva("Resposta correta! Parabéns!\n")
    		    } senao {
    		        escreva("Resposta errada!\nPor favor tente novamente!\n")
    		    }
    		} enquanto (resposta != respostas_validas[RESPOSTA_ESPERADA])
    	}
    }

     

    Recomendo ler essa pagina (Declaração de vetores) do manual do portugol studio.

    • Curtir 1

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!