Ir ao conteúdo
  • Cadastre-se

VisualG Listar compras sem utilizar vetores


Posts recomendados

Comecei fazendo essa questão,porém não entendi direito, principalmente essa parte que fala

de listar, o professor disse que não precisava usar essa parte de vetores ainda, como

resolver essa questão?

Obs : É para usar o "caso" e escrever em portugol.

 

Aqui o código que comecei a criar :

 

Var  produto:caractere
opcao,quantidade:inteiro
preco,total,pagamento,desconto:real
credito:real
// Seção de Declarações das variáveis 


Inicio
// Seção de Comandos, procedimento, funções, operadores, etc... 
         escreval (" Menu :")
escreval ("1 - Comprar produto")
escreval("2 - Listar compra")
escreval("3 - Sair")
escreval (" Digite a opção")
leia(opcao)
 Caso = 1
 escreval("Qual o nome do produto?")
 leia (produto)
 escreval (" Qual é a quantidade do produto")
 leia (quantidade)
 escreval (" Qual é o preço do produto?")
 leia (preco)
 total <- quantidade*preco
 escreval(" O total é :" , total)
 escreval(" Qual é a forma de pagamento?")
 escreval (" 1 - Crédito")
 escreval (" 2 - Débito")
 Escreval (" Digite a opcão")
 leia(opcao)
 credito <- total*0.05
 caso = 1
 escreval(" Haverá um acréscimo de" , credito," no total do produto")

 

Fimalgoritmo

 

 

 

Captura da Web_28-2-2023_213355_drive.google.com.jpeg

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

@Eli Almeidaa     não é obrigatório , mas o modo como todos costumam fazer ,  coloque um nome no seu programa ,   faça a identação e organize seu código facilitando a leitura ,  e use o botão code "<>" que está desenhado lá na barra de ferramentas da janela de postar e seu código vai ficar todo coloridinho  e com uma melhor aparência ,   e poste o código todo desde o "algoritmo" até o "fimagoritmo" ,  isso facilita "copiar colar salvar"  para testar ,  e por isso uma imagem não é uma boa ideia , melhor escrever em forma de texto ,    e se não usar vetor / matriz / registro ,  só vai poder listar 1 produto / compra  mesmo , pois essas variáveis são simples e só podem armazenar nelas um valor de cada vez ,  e assim  vai listar o último dado gravado nelas  ,  

Algoritmo "sistema de compras"
// Disciplina  :  [Linguagem e Lógica de Programação] 
// Professor   : Antonio Carlos Nicolodi 
// Autor(a)    :
// Data atual  : 01/03/2023
// Objetivo:
// Construa um programa em C que seja um sistema de compras de um supermercado.
// Este programa deverá conter um menu com as seguintes opções:
// * Comprar Produto
// * Listar Produto
// * Sair
// Na opção de comprar produto, deve stá presente as segintes informações :
// * Nome do Produto
// * Quantidade
// * Preço
// ApOs recolher as informações digitadas pelo usuário, o sistema deve
// mostrar o Valor Total do produto comprado.  Em seguida perguntar ao
// usuário a forma de pagamento .  Caso seja crédito, haverá acréscimo
// de 5% no total do produto.    Se débito, haverá desconto de 10% no
// total do produto.   Faça uso de vetores para realizar a compra de
// mais de um produto se o usuário desejar.
// Ao listar produto, primeiro verifique se já existe algum produto
// cadastrado,  Senão, uma mensagem deverá ser exibida , informando que
// não   existe produtos cadastrados, faça a listagem dos mesmos
// incluíndo as informações de forma de pagamento, valor total ,
// desconto ou acréscimo.
Var                                    // variAveis Globais
  produto                  : caractere // recebe valor vazio ""
  opcao , quantidade , opc : inteiro   // recebe valor inteiro "0"
  preco , total            : real
  credito , desconto       : real      // recebe valor de pt flutuante "0.00"
  porcentagem , pagamento  : real
  existe                   : logico    // recebe valor "falso"
Inicio
  repita
    escreval("     Menu :         ") // não Eh obrigatOrio , mas habitual como
    escreval(" 1 - Comprar produto") // todos costumam fazer , organizar e
    escreval(" 2 - Listar compra  ") // identar o cOdigo facilitando ler e com
    escreval(" 3 - Sair           ") // aparEncia mais agradAveL
    escreva ("     Digite a opção ") // deixe um espaCo final e sem pular linha
    leia    ( opcao                )
    escreval
  
    escolha opcao // a escolha do primeiro menu não precisa sinal de igual
    caso 1
      escreva ("Qual o nome do produto ? -------: ")
      leia    ( produto                            )
      escreva ("Qual é a quantidade do produto -: ")
      leia    ( quantidade                         )
      escreva ("Qual é o preço do produto ? ----: ")
      leia    ( preco                              )
      total   <- quantidade * preco
      escreval(" O total é :" , total              )
      escreval(" Qual é a forma de pagamento ? -: ")
      escreval(" 1 - Crédito                      ")
      escreval(" 2 - Débito                       ")
      escreval(" Digite a opcão ----------------: ")
      leia    ( opc                                )
    
      escolha opc    // a escolha do segundo menu
      caso 1
        escreval
        escreval("está no caso 1 do segundo Menu  ")
        escreval
        porcentagem <- total * 0.05
        total       := total + porcentagem
        escreval("Haverá um acréscimo de 5 porcento = ",porcentagem)
        escreval(" e o valor total será ------------: ",total      )
      caso 2
        porcentagem := total * 0.10
        total       := total - porcentagem
        escreval
        escreval("Haverá um Desconto de 10 porcento = ",porcentagem)
        escreval("e o valor total será -------------: ",total      )
      outrocaso
        escreval
        escreval("opCAo invALida . . . !          ")
      fimescolha   // fim do segundo escolha / caso

      escreval
      existe := verdadeiro  // marca como existe produtos comprados
    caso 2
      escreval("está no Listar Compra  !  !       ")
      escreval
      // sem vetor matriz ou Registro só pode listar
      // um mesmo pois essa var simples só armaz 1 val
      se existe então // se existir produtos comprados
        escreval("Nome  do Produto -: ",   produto     )
        escreval("Qtd   do Produto -: ",1: quantidade  )
        escreval("Preço do Produto -: ",   preco       )//qtd espaCos
        se opc  = 1 então
          escreval("Frm de Pagamento -: Crédito       ")
          escreval("Acrescimo --------: ", porcentagem )
        senao
          escreval("Frm de Pagamento -: Débito        ")
          escreval("Desconto ---------: ", porcentagem )
        fimse
        escreval("Valor Total ------: "  , total       )
      senao
        escreval("// não   existe produtos cadastrados")
      fimse
    caso 3
      escreval
      escreval("Saindo Do Propgrama . . . !           ")
    outrocaso
      escreval("opção inváLida . . . !                ")
    fimescolha    // fim do primeiro escolha / caso
    escreval
  ate opcao = 3
Fimalgoritmo

 

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

Em 28/02/2023 às 21:50, Eli Almeidaa disse:

Obs : É para usar o "caso" e escrever em portugol.

Que desserviço ao ensino. O ensino de informática possui  2 pontos: ensinar lógicas de manipulação de dados que atendam a demanda e a linguagem utilizada. Quando se faz o ensino utilizando if, while, read se está ensinando ambos. Quando se adota esse nacionalismo idi*ta isso força o programador a ter que traduzir os termos escolares (se, senao, escreva1) aos reais utilizados na prática. Tive a sorte de não ter ideologia nos meus tempos de escola. Lamento pelo novos.

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

@devair1010, esse "repita  até opção 3" que você colocou significa o quê? E "escolha opc" serve para quê? Utiliza ela junto com o "caso"?

Tenho outra dúvida, por exemplo, se eu for escrever no VisualG um algoritmo para somar dois números, precisa indentar o "escreval", ou só indenta o código quando tem uma condicional?

No exemplo abaixo, precisa indentar? Indentar seria dá espaço, nesse caso, traria essa estrutura abaixo mais para à direita ?

 

num1, num2, soma : inteiro

inicio
escreval(" Informe o 1° número")
leia(num1)
escreval(" Informe o 2° número")
leia(num2)
soma <- n1+n2
escreval(" A soma é : ", soma)
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Eli Almeidaa    o "repita"   como o nome diz , vai repetir tudo que esteja entre o repita e o comando ate ,  pois senão seu menu não faria sentido ,  e você só usaria uma opção dele e terminaria o programa , e o que precisa  é o programa ficar em loop repetindo  , e só sair quando for digitado o "3"  que é a condição de sair do programa ,   e você poderia usar outro comando para isso , como o "enquanto/fimenquanto" ,   

   o "opc" é uma variável  para não perder o valor digitado no "menu"  que é "opcao"  , pois  tem uma outra opção para escolher "credito ou debito" , e se usasse a mesma variável "opcao" ,  iria interferir nas opções do menu principal ,

   identar serve para organizar o código , e assim pode se perceber facilmente os blocos do código ,   por exemplo ,  num loop "para/fimpara" ,  você vê quais comandos fazem parte desse loop pois eles estão mais para  dentro do loop  , e no VisualG , o código vai funcionar do mesmo jeito independente de estar identado ou não , mas em outras linguagens não funcionariam , pois nelas a identação é obrigatória , como no python .

Link para o comentário
Compartilhar em outros sites

@devair1010 ,   você saberia como transformar esse código abaixo

para o comando "repita ate" ?

Obs: Esse algoritmo é para mostrar números ímpares

Var
   // Seção de Declarações das variáveis
n,i:inteiro

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   i<- 1
   escreval (" Digite um número")
   leia(n)
   enquanto (i<n) faça
      se (i mod 2 <> 0) então
         escreval(i)
      senao
      fimse
      i<- i+1
   fimenquanto

Fimalgoritmo

 

 

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

@Eli Almeidaa   o comando repita/ate , pode ser usado  em qualquer parte do programa ,  e você escolhe  o que vai repetir , podendo ser o algoritmo todo ou apenas uma linha dele ,  e nesse seu código  , se você quer repetir  para escolher vários números  imprimindo os ímpares ,  vai precisar de mais uma variável  para controlar o loop do "repita"  ,  e seu código ficaria assim :

Algoritmo "impares"
Var
  n , i : inteiro
  resp  : caractere
Inicio
  repita
    i <- 1               // inicializar a variAvel pois vai repetir tudo
    escreval (" Digite um número")
    leia( n )
    enquanto i < n faca
      se i % 2 = 1 então // esse simbolo  %  eh igual a esse "mod"
        escreval(i)
                         // senao
      fimse
      i <- i + 1
    fimenquanto
    escreva("outra vez S/N ")
    leia( resp )
  ate resp = "n"
Fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

@devair1010 , acho que está com problema esse seu código, quando digita o número fica pedindo para

digitar novamente o número e depois manda digitar "outra vez s/n" e nunca sai disso. Não tem como substituir o " Enquanto .. faça" pelo "repita..até", ou é obrigatório utilizar " Enquanto .. faça" junto com o "Repita até"? 

 

image.png.b8ae288b27a22c7c17b6eeedd4e21281.png

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

@Eli Almeidaa    sim ,  esse programa pergunta se você quer repetir tudo novamente , e  escreve "S/N"  que significa "sim" ou "não" ,  aí você escolhe e digita a resposta , se for "n" ele termina o programa e se for qualquer outra letra  ele repete , mas agora percebi que você que mesmo é substituir o comando "enquanto / fimenquanto" pelo "repita / ate" , e seria assim :

Algoritmo "impares 2"
Var
  n , i : inteiro
Inicio
  i <- 1              
  escreva (" Digite um número ")
  leia( n )
  repita
    se i % 2 = 1 então // esse simbolo  %  eh igual a esse "mod"
      escreval( i )
    fimse
    i <- i + 1
   ate i > n
Fimalgoritmo

 

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

Para lidar com volumes de dados considero C++ mais apropriado. Cria arquivos, indexa, pesquisa fácil. Numa lista de compras a variedade de itens é errática. Criando um arquivo para o cliente em curso  tem-se fácil a totalização das compras, emissão de nota fiscal ou lista de compras no caso de ser online. Dá um pouco de trabalho mas a estruturação é de fácil compreensão e isso simplifica futuras ampliações ou modificações. É um banco de dados natural.

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

  • Membro VIP
Em 10/03/2023 às 17:23, Eli Almeidaa disse:

esse "i" significa o quê?

 

O "i" é uma variável do tipo inteiro, assim como é o "n". Só verificar lá parte de cima do código.

 

Em 09/03/2023 às 21:55, devair1010 disse:
Var
  n , i : inteiro

 

No contexto do algoritmo, funciona como um contador. Utilizamos essa letra "i" apenas por convenção, ou seja, como se fosse um padrão no mundo da programação... Quando tem dois contadores, utilizamos "i" e "j"... depois o "k"... por aí vai. Veja, poderia ser qualquer nome válido (existe uma regra, por exemplo, não pode começar com um número) para uma variável...

 

Veja o exemplo abaixo:

 

algoritmo "Ímpares 2"
var
   n, cidade : inteiro
Inicio
   cidade <- 1 //inicializando o contador
   escreva ("Digite um número: ")
   leia(n)
   
   repita
      se cidade % 2 = 1 então // esse simbolo  %  eh igual a esse "mod"
         escreval(cidade)
      fimse
      cidade <- cidade + 1 //atualiza o contator para o próximo número
   ate cidade > n //condição de parada
fimAlgoritmo

 

Vai funcionar exatamente como o código postado anteriormente... Por que é recomendável seguir um padrão? Fazemos isso par dar uma "semântica" melhor ao código. Veja como "cidade" não tem nada a ver com o contexto. Tende a confundir quem for ler o código... inclusive o próprio autor!!! "Oxe! tá escrito cidade, mas tá recebendo um número... que bizarro".

 

Uma outra nomenclatura que ficaria boa:

var
   n, contador : inteiro

 

É muito comum também utilizar "cont".

 

Entende? Ao ter contato com essa variável, de cara saberia para quê ele deve (deveria) servir, ou seja, "a nomenclatura estaria com uma boa semântica". 

 

É também preciso exercitar a abstração... Tentar entender o que cada coisa é... ao seguir um padrão, utilizando o "i", já facilita o processo, pois essa tal de convenção já ajuda a entender que isso aquilo um contador. Dá menos trabalho para pensar. 😄

 

Quando mais padrões seguirmos, menos complicado tende a ficar.

 

 

 

 

Em 10/03/2023 às 17:23, Eli Almeidaa disse:

No início ele aparece  assim : i <- 1

depois aparece isso i <- i + 1 ate  i > n

 

Aí entramos na questão da lógica do problema. No código acima já dei a dica. Resumidamente estamos querendo verificar se os números de 1 a n são ímpares ou não. Daí, idealizou que o número atual a ser verificado começaria com 1, por isso utilizou o "<-" para atribuir o valor a variável, ou seja, quando ele for verificado lá pela primeira vez, vai verificar se 1 é ímpar.

 

Já o" i <- i+1" está atribuindo o valor da própria variável acrescido de 1, logo, o seu sucessor. Como começou com 1, ao chegar nessa linha vai passar a ser 2. Na próxima 3, depois 4 etc.

 

Por fim, o ate "i > n" é que, ao "i" ter um valor maior que "n", significa que já deve parar o laço de repetição.. é a "condição de parada". Tudo isso é "uma abstração". Nós humanos entendemos que está se verificando a paridade de vários números... Mas para o computador, são apenas sequência de passos. 

 

 

 

Em 10/03/2023 às 17:23, Eli Almeidaa disse:

E ao invés de colocar se i % 2 = 1 não poderia colocar assim : i mod 2 <> 0?

 

O que significa "i % 2 = 1"? Para que serve a % no VisualG? Quando não souber, pesquisa no Google... Verás que % é um dos Operadores Aritméticos do VisualG, ele retorna o "resto da divisão do valor que está no lado esquerdo, pelo valor que está no lado direito".... e o MOD? É exatamente a mesma coisa.

 

 i % 2 = 1

É o mesmo que:

 i MOD 2 = 1

 

Beleza?

 

 

Agora perceba, o que você estaria comparado?

 

 i %MOD 2 = 1

e

 i %MOD 2 <> 1

 

Logo, o quê o primeiro representa e o segundo representa?

 

Tá, no primeiro, "quando um número inteiro é dividido por 2 e dá resto 1 significa o quê?". Significa que é ímpar! (sugiro pesquisar mais a fundo o que é um número ímpar e o que é um número par. Entender matematicamente. Isso é importante! O algoritmo é só um meio de entramos em temas... no caso "o quê é paridade")

 

No segundo, "quando um número inteiro é dividido por 2 e dá resto DIFERENTE 0, significa o quê?". Significa que ele NÃO é par. Quando não é par é o quê? É ímpar, logo... as duas fórmulas são equivalentes... em outras palavras: são a mesma coisa!

 

Adendo: perceba também que ao dividir um inteiro por 2, necessariamente OU vai dar resto 0 OU vai dar resto 1. Sempre!!! Logo, quando é "<> 0" é automaticamente "= 1". Concebe abstrair sobre isso?

 

Adendo 2: veja como poderia ficar utilizar o para, no lugar do repita.

 

algoritmo "Ímpares 2"
var
   n, i : inteiro
inicio
   escreva ("Digite um número: ")
   leia(n)

   para i de 1 ate n faca
      se (i % 2 = 1) então
         escreval(i)
      fimse
   fimPara
fimAlgoritmo

 

Observe como fica "mais simples", pois nesse caso, como tem um contador, o comando para se encaixa como uma luva. Nesse caso, o "de" ali no para serve para dar o valor inicial da variável que está servindo para controlar o laço e o "ate" define qual é o limite.

 

Se pararmos para exercitar a abstração, poderíamos concluir que o para seria uma "especialização do enquanto ou do repita", ou seja, feito para "simplificar determinado tipo de laços de repetições". Já o repita e o enquanto são mais genéricos. Tudo que se faz com o para, dá para fazer com repita e enquanto, mas no VisualG, nem tudo que faz com repita ou enquanto dá para fazer com para... pois este último é "mais específico", saca? Portando, tem menos flexibilidade (Exemplo: no VisualG não meio que não dá par afazer um loop infinito com para).

 

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

@Eli Almeidaa o comando "mod" só funciona com números inteiro  ,  assim se não der para dividir por dois o compilador considera que o resto é o próprio número  1 , pois a parte inteira da divisão de 1 por 2 é igual a zero ,  e  0 * 2 = 0 ,  e  de 0 para 1 = 1 ,   assim o resto é 1 .

17382323_provadosnoves.jpg.3955a46d3ffa8b89705d6f8015bf2040.jpg

 

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

Em 13/03/2023 às 19:22, Eli Almeidaa disse:

@Simon Viegas , dei uma pesquisada aqui, mas não conseguir encontrar respostas e nem entendi o porquê 

1%2 o resto dá 1 . Não seria 0 , já que 1 não pode ser dividido por 2 e acrescenta um zero no 1? Exemplo :

1    |_2__

10    0,5

- 10

___

 0 <----- Resto

A divisão não gera decimal exceto nas operações com float. O conceito básico de divisão é quantos divisores cabem dentro do número. Assim sendo 1/2 = 0 sobra 1

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

  • Membro VIP
Em 14/03/2023 às 21:32, Sérgio Lembo disse:

A divisão não gera decimal exceto nas operações com float.


No VisualG, "toda divisão de inteiros gera um real", ou seja, o inteiro 1, dividido pelo inteiro 2, gera o real 0.5. Isso para quaisquer números reais (com exceções do 0 no denominador, é claro)... por isso que uma variável que receberia um resultado de uma divisão de inteiros precisa ser real, mesma que a divisão seja exata. (Não pode ser inteiro.)

 

Abaixo tem como seria uma divisão padrão:

 

image.png

 

No VisualG, esse quociente é sempre real. Mas aqui a divisão é como no dia a dia, não fica limitada à definição... se a divisão não é exata, vai continuar dividindo até o resto ficar zero ou até um limite pré-programado. Exemplo:

 

image.png

 

Ou:

image.png

 

Nesse exemplo teriam infinitas casas decimais, mas meio que ao chegar na 12ª casa decimal, o cálculo termina. Isso seria um "parâmetro" da linguagem*. 

 

Em relação ao operadores aritméticos % ou mod (que são a mesma coisa no VisualG), eles apenas podem ser utilizados com inteiros mesmo e o resultado também sempre será um inteiro, pois o resto de uma divisão é sempre inteiro.

 

1 mod 2 (ou 1 % 2) = 1, pois, como já citato, 1/2 dá 0, e tem resto 1. Esse "1" é o que esse operador buscou. No exemplo da imagem mais acima, 17 mod 2 resulta em 1 também.

 

 

@Eli Almeidaa, nesse caso, você estava pesquisando sobre o mod e % e surgiu uma dúvida sobre a divisão, certo?. Está tudo bem! Mas como percebeu que tinha algo estranho ou que não estava dominando do assunto, expandiria a pesquisa, ou seja, pesquisaria uma pouco sobre "como funciona uma divisão"... poderia ter chegado aos tais "elementos da divisão" que citei. Por aí vai.

 

Só para exemplificar, o operador \ que retorna apenas o quociente. Vejam:

image.png

 

 

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