Algoritmo de Cadastro de Produtos utilizando matrizes

Fala galera, tudo beleza? Aqui vai um exemplo bem legal utilizando praticamente todos aprendizados de algoritmos. Se você for professor, este é um exemplo para trabalhos finais de disciplina.
Imagine que você precisa desenvolver um programa para cadastrar produtos em uma loja. Cada produto tem as seguintes informações: nome, preço e quantidade em estoque.
Para isso, crie uma matriz ou vetores onde cada linha representa um produto e cada coluna representa uma informação desse produto (nome, preço e quantidade em estoque). O programa deve ser capaz de realizar as seguintes operações:
- Cadastrar um novo produto
- Listar todos os produtos cadastrados
- Sair
Lembre-se de validar as entradas do usuário e tratar possíveis erros que possam ocorrer.
Testes:
Aqui estão alguns testes que podem ser realizados para verificar se o programa está funcionando corretamente:
- Cadastre 3 produtos com nome, preço e quantidade em estoque diferentes.
- Liste todos os produtos cadastrados.
- utilize o menu sair.
Esses testes devem ajudar a verificar se o programa está funcionando corretamente e a identificar possíveis erros ou falhas que precisam ser corrigidos.
No final do post terá o link com este mesmo exercício para o site showdelphi.com.br com sugestões de resposta e explicações em pascal / Delphi / Lazarus.
Resposta em Algoritmo em Português
// criado por Giovani DA Cruz
algoritmo cadastro_produtos;
const
MAX_PRODUTOS <- 100;
MAX_CARACTERES <- 50;
tipo
TProduto <- registro
nome: vetor[MAX_CARACTERES] de caractere;
preco: real;
quantidade: inteiro;
fim_registro;
TListaProdutos <- vetor[1..MAX_PRODUTOS] de TProduto;
var
listaProdutos: TListaProdutos;
numProdutos, opcao: inteiro;
procedimento cadastrarProduto(var listaProdutos: TListaProdutos; var numProdutos: inteiro);
var
produto: TProduto;
inicio
escreva("CADASTRO DE PRODUTO");
escreva("-------------------");
escreva;
// leitura dos dados do produto
escreva("Nome: ");
leia(produto.nome);
escreva("Preco: ");
leia(produto.preco);
escreva("Quantidade: ");
leia(produto.quantidade);
// adiciona o produto na lista
numProdutos <- numProdutos + 1;
listaProdutos[numProdutos] <- produto;
escreva;
escreva("Produto cadastrado com sucesso!");
escreva;
fim_procedimento;
procedimento exibirProdutos(listaProdutos: TListaProdutos; numProdutos: inteiro);
var
i: inteiro;
inicio
escreva("LISTA DE PRODUTOS");
escreva("-----------------");
escreva;
// exibe os dados de cada produto cadastrado
para i <- 1 ate numProdutos faca
escreva("Nome: ", listaProdutos[i].nome);
escreva("Preco: ", listaProdutos[i].preco:0:2);
escreva("Quantidade: ", listaProdutos[i].quantidade);
escreva;
fim_para;
fim_procedimento;
inicio
numProdutos <- 0; // inicializa o contador de produtos cadastrados
repita
// exibe o menu de opções
escreva("MENU DE OPCOES");
escreva("--------------");
escreva("1 - Cadastrar produto");
escreva("2 - Exibir lista de produtos");
escreva("0 - Sair");
escreva;
// leitura da opção escolhida
escreva("Opcao: ");
leia(opcao);
// realiza a operação escolhida pelo usuário
caso opcao de
1: cadastrarProduto(listaProdutos, numProdutos);
2: exibirProdutos(listaProdutos, numProdutos);
0: escreva("Saindo...");
senao escreva("Opcao invalida!");
fim_caso;
escreva;
ate opcao = 0;
fim.
Explicando o código em algoritmo:
O código acima é um programa simples em português estruturado (Portugol) que permite cadastrar produtos em uma lista e exibir a lista de produtos cadastrados. Vamos analisar o código por partes:
- Declaração de constantes: As constantes MAX_PRODUTOS e MAX_CARACTERES definem o tamanho máximo da lista de produtos e a quantidade máxima de caracteres para o nome do produto, respectivamente.
- Declaração de tipos: O tipo TProduto é definido como um registro que possui três campos: nome (uma cadeia de caracteres), preco (um número real) e quantidade (um número inteiro). O tipo TListaProdutos é definido como um vetor de TProduto.
- Variáveis globais: As variáveis listaProdutos (do tipo TListaProdutos), numProdutos (do tipo inteiro) e opcao (do tipo inteiro) são declaradas.
- Procedimento cadastrarProduto: Esse procedimento é responsável por solicitar ao usuário os dados de um produto (nome, preço e quantidade) e adicioná-lo à lista de produtos. Os dados são lidos do teclado usando o comando leia e são armazenados na variável produto, que é então adicionada à lista de produtos.
- Procedimento exibirProdutos: Esse procedimento percorre a lista de produtos e exibe na tela os dados de cada produto cadastrado, como nome, preço e quantidade.
- Função principal: A função principal (ou programa principal) inicia com a declaração da variável numProdutos com o valor 0. Em seguida, um laço de repetição repita é utilizado para exibir um menu de opções ao usuário e executar a operação escolhida. A variável opcao é lida do teclado usando o comando leia, e um comando caso é utilizado para executar a operação correspondente com base no valor da opcao.
- Operações do menu: O menu de opções possui três opções: cadastrar um produto, exibir a lista de produtos e sair do programa. Para cada opção selecionada, o código chama o procedimento correspondente.
- Fim do programa: O laço de repetição é encerrado quando a opcao digitada pelo usuário for igual a 0, o que encerra o programa.
O código em Portugol é uma versão simplificada da linguagem Pascal, e a estrutura do código em si é bastante similar. Ele permite cadastrar produtos e exibir a lista de produtos cadastrados, utilizando procedimentos para organizar as ações.
Resposta em C / C++ utilizando Dev C++
#include <stdio.h>
#include <string.h>
#define MAX_PRODUTOS 100
#define MAX_CARACTERES 50
/* Criado por Giovani Da Cruz - https://giovanidacruz.com.br */
typedef struct {
char nome[MAX_CARACTERES];
float preco;
int quantidade;
} TProduto;
void cadastrarProduto(TProduto listaProdutos[], int *numProdutos) {
TProduto produto;
printf("\nCADASTRO DE PRODUTO\n");
printf("-------------------\n\n");
// leitura dos dados do produto
printf("Nome: ");
scanf("%s", &produto.nome);
printf("Preco: ");
scanf("%f", &produto.preco);
printf("Quantidade: ");
scanf("%d", &produto.quantidade);
// adiciona o produto na lista
*numProdutos += 1;
listaProdutos[*numProdutos - 1] = produto;
printf("\nProduto cadastrado com sucesso!\n\n");
}
void exibirProdutos(TProduto listaProdutos[], int numProdutos) {
printf("\nLISTA DE PRODUTOS\n");
printf("-----------------\n\n");
// exibe os dados de cada produto cadastrado
for (int i = 0; i < numProdutos; i++) {
printf("Nome: %s\n", listaProdutos[i].nome);
printf("Preco: %.2f\n", listaProdutos[i].preco);
printf("Quantidade: %d\n\n", listaProdutos[i].quantidade);
}
}
int main() {
TProduto listaProdutos[MAX_PRODUTOS];
int numProdutos = 0, opcao;
do {
// exibe o menu de opções
printf("MENU DE OPCOES\n");
printf("--------------\n");
printf("1 - Cadastrar produto\n");
printf("2 - Exibir lista de produtos\n");
printf("0 - Sair\n\n");
// leitura da opção escolhida
printf("Opcao: ");
scanf("%d", &opcao);
// realiza a operação escolhida pelo usuário
switch (opcao) {
case 1:
cadastrarProduto(listaProdutos, &numProdutos);
break;
case 2:
exibirProdutos(listaProdutos, numProdutos);
break;
case 0:
printf("Saindo...\n");
break;
default:
printf("Opcao invalida!\n");
break;
}
printf("\n");
} while (opcao != 0);
return 0;
}
Explicação do código em C++
O código acima é um exemplo simples de um sistema de cadastro de produtos utilizando um array de registros em Pascal.
O programa é dividido em três partes principais: declaração das variáveis e tipos, procedimentos e a lógica principal.
Na declaração de variáveis e tipos, são definidas as constantes MAX_PRODUTOS e MAX_CARACTERES, que determinam o tamanho máximo do array e da string que armazena o nome do produto, respectivamente. Em seguida, é definido o tipo TProduto, que é um registro que contém os campos nome (uma string), preco (um número real) e quantidade (um número inteiro). O tipo TListaProdutos é definido como um array de TProduto com tamanho MAX_PRODUTOS.
As variáveis numProdutos e opcao são inicializadas com o valor zero. A variável numProdutos é usada para contar quantos produtos foram cadastrados na lista, e a variável opcao é usada para ler a opção escolhida pelo usuário no menu.
Em seguida, são definidos dois procedimentos: cadastrarProduto e exibirProdutos. O procedimento cadastrarProduto é responsável por ler os dados de um novo produto e adicioná-lo à lista. O procedimento exibirProdutos é responsável por exibir na tela todos os produtos cadastrados na lista.
Na lógica principal do programa, é iniciado um loop que apresenta um menu com as opções “Cadastrar produto”, “Exibir lista de produtos” e “Sair”. O usuário escolhe uma das opções digitando o número correspondente, e o programa executa a operação correspondente a essa opção. Se o usuário escolher “Cadastrar produto”, o programa chama o procedimento cadastrarProduto para ler os dados do novo produto e adicioná-lo à lista. Se o usuário escolher “Exibir lista de produtos”, o programa chama o procedimento exibirProdutos para exibir todos os produtos cadastrados. Se o usuário escolher “Sair”, o programa encerra o loop e termina a execução. Se o usuário escolher qualquer outra opção inválida, o programa exibe a mensagem “Opcao invalida!” e volta ao menu.
Exemplo em JavaScript – Testado no console do Microsoft Edge
const MAX_PRODUTOS = 100;
const MAX_CARACTERES = 50;
class Produto {
constructor(nome, preco, quantidade) {
this.nome = nome;
this.preco = preco;
this.quantidade = quantidade;
}
}
class ListaProdutos {
constructor() {
this.produtos = [];
this.numProdutos = 0;
}
cadastrarProduto(produto) {
if (this.numProdutos >= MAX_PRODUTOS) {
console.log('Não é possível cadastrar mais produtos.');
return;
}
this.produtos.push(produto);
this.numProdutos++;
console.log('Produto cadastrado com sucesso!');
}
exibirProdutos() {
console.log('LISTA DE PRODUTOS');
console.log('-----------------');
for (let i = 0; i < this.numProdutos; i++) {
console.log('Nome: ' + this.produtos[i].nome);
console.log('Preco: ' + this.produtos[i].preco.toFixed(2));
console.log('Quantidade: ' + this.produtos[i].quantidade);
console.log();
}
}
}
let listaProdutos = new ListaProdutos();
let opcao;
do {
console.log('MENU DE OPCOES');
console.log('--------------');
console.log('1 - Cadastrar produto');
console.log('2 - Exibir lista de produtos');
console.log('0 - Sair');
console.log();
opcao = parseInt(prompt('Opcao: '));
switch (opcao) {
case 1:
let nome = prompt('Nome: ');
let preco = parseFloat(prompt('Preco: '));
let quantidade = parseInt(prompt('Quantidade: '));
let produto = new Produto(nome, preco, quantidade);
listaProdutos.cadastrarProduto(produto);
break;
case 2:
listaProdutos.exibirProdutos();
break;
case 0:
console.log('Saindo...');
break;
default:
console.log('Opcao invalida!');
break;
}
console.log();
} while (opcao != 0);
Este código em JavaScript usa classes para representar um Produto e uma Lista de Produtos. O usuário é apresentado com um menu de opções, e pode escolher entre cadastrar um novo produto ou exibir a lista de produtos cadastrados. O programa é executado em loop até que o usuário escolha a opção de sair (0).
Exemplo em Python
const MAX_PRODUTOS = 100;
const MAX_CARACTERES = 50;
class Produto {
constructor(nome, preco, quantidade) {
this.nome = nome;
this.preco = preco;
this.quantidade = quantidade;
}
}
class ListaProdutos {
constructor() {
this.produtos = [];
this.numProdutos = 0;
}
cadastrarProduto(produto) {
if (this.numProdutos >= MAX_PRODUTOS) {
console.log('Não é possível cadastrar mais produtos.');
return;
}
this.produtos.push(produto);
this.numProdutos++;
console.log('Produto cadastrado com sucesso!');
}
exibirProdutos() {
console.log('LISTA DE PRODUTOS');
console.log('-----------------');
for (let i = 0; i < this.numProdutos; i++) {
console.log('Nome: ' + this.produtos[i].nome);
console.log('Preco: ' + this.produtos[i].preco.toFixed(2));
console.log('Quantidade: ' + this.produtos[i].quantidade);
console.log();
}
}
}
let listaProdutos = new ListaProdutos();
let opcao;
do {
console.log('MENU DE OPCOES');
console.log('--------------');
console.log('1 - Cadastrar produto');
console.log('2 - Exibir lista de produtos');
console.log('0 - Sair');
console.log();
opcao = parseInt(prompt('Opcao: '));
switch (opcao) {
case 1:
let nome = prompt('Nome: ');
let preco = parseFloat(prompt('Preco: '));
let quantidade = parseInt(prompt('Quantidade: '));
let produto = new Produto(nome, preco, quantidade);
listaProdutos.cadastrarProduto(produto);
break;
case 2:
listaProdutos.exibirProdutos();
break;
case 0:
console.log('Saindo...');
break;
default:
console.log('Opcao invalida!');
break;
}
console.log();
} while (opcao != 0);
Exemplos em Pascal / Delphi / Lazarus
Publicamos no site Show Delphi, exemplo em Pascal compatível com Delphi e Lazarus e outros. Acesse o site e confira. Este exemplo em pascal ficou bem completo, inclusive com o uso de record e apresentação de um menu para o usuário.
Beleza pessoal?
Neste post vimos um ótimo exemplo de algoritmo em pascal que utiliza matrizes e estruturas. Muito bom para treinar para as provas finais de semestre.
Dúvidas ou sugestões? Deixe o seu comentário!
Um abraço e até o próximo post! Valeu!