Gerenciamento de Identificadores Aleatórios
Nesta implementação, exploramos a geração de números pseudo-aleatórios para simular a criação de números de matrícula. O uso da função srand() com a semente baseada no tempo atual garente que os resultados variem a cada execução.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TOTAL_ITENS 5
int main() {
int valor_aleatorio;
int contador;
// Inicializa o gerador com a hora atual do sistema
srand((unsigned int)time(NULL));
for(contador = 0; contador < TOTAL_ITENS; ++contador) {
// Gera um valor entre 1 e 100
valor_aleatorio = rand() % 100 + 1;
// %04d garante 4 dígitos com zeros à esquerda
printf("ID-SISTEMA-%04d\n", valor_aleatorio);
}
return 0;
}
Notas Técnicas:
- Geração de Intervalo: A expressão
rand() % 100 + 1limita o resultado ao intervalo de 1 a 100. - Formatador %04d: Este especificador de formato no
printfdefine uma largura mínima de 4 caracteres, preenchendo os espaços vazios à esquerda com zeros. - Semente (Seed): Sem
srand(time(0)), a funçãorand()utilizaria uma semente fixa, resultando na mesma sequência de números sempre que o programa fosse iniciado.
Simulação de Sistema de Vendas Automático
O código abaixo implementa uma máquina de vendas com loop de repetição e validação de dados de entrada.
#include <stdio.h>
int main() {
int codigo, qtd;
float subtotal = 0, pagamento, troco;
while(1) {
printf("\n--- MENU DE BEBIDAS ---\n");
printf("1. Cafe Express - R$ 4.00\n");
printf("2. Cha Gelado - R$ 3.50\n");
printf("3. Energetico - R$ 8.00\n");
printf("0. Finalizar Operacao\n");
printf("Escolha uma opcao: ");
scanf("%d", &codigo);
if (codigo == 0) break;
if(codigo < 1 || codigo > 3) {
printf("Opcao inexistente. Tente novamente.\n");
continue;
}
printf("Quantidade desejada: ");
scanf("%d", &qtd);
if(qtd <= 0) {
printf("Quantidade invalida.\n");
continue;
}
switch(codigo) {
case 1: subtotal = 4.0 * qtd; break;
case 2: subtotal = 3.5 * qtd; break;
case 3: subtotal = 8.0 * qtd; break;
}
printf("Total a pagar: R$ %.2f. Insira o valor: ", subtotal);
scanf("%f", &pagamento);
if(pagamento >= subtotal) {
troco = pagamento - subtotal;
printf("Pagamento confirmado. Troco: R$ %.2f\n", troco);
} else {
printf("Saldo insuficiente. Operacao cancelada.\n");
}
subtotal = 0; // Reinicialização para o próximo cliente
}
return 0;
}
Neste exemplo, a reinicialização da variável subtotal é crucial. Se omitida, o custo da compra anterior seria somado à nova transação, gerando valores incorretos. A instrução continue permite interromper a iteração atual e retornar ao início do menu caso o usuário insira dados inválidos.
Processamento de Sinais de Controle
Este módulo processa caracteres de entrada para simular o comportamento de um semáforo.
#include <stdio.h>
int main() {
char sinal;
while((sinal = getchar()) != EOF) {
if(sinal == '\n') continue;
switch(sinal) {
case 'v': printf("Pare!\n"); break;
case 'f': printf("Siga em frente\n"); break;
case 'a': printf("Atencao, reduza a velocidade\n"); break;
default: printf("Sinal invalido ou em manutencao\n"); break;
}
}
return 0;
}
Análise de Despesas Diárias
O algoritmo a seguir calcula métricas financeiras básicas (total, máximo e mínimo) a partir de uma série de entradas do usuário.
#include <stdio.h>
int main() {
double valor, acumulado = 0.0;
double v_max = 0.0, v_min = 999999.0;
int registros = 0;
printf("Informe os gastos (digite -1 para encerrar):\n");
while(1) {
scanf("%lf", &valor);
if(valor == -1) break;
if(valor < 0) {
printf("Valor negativo ignorado.\n");
continue;
}
acumulado += valor;
registros++;
if(valor > v_max) v_max = valor;
if(valor < v_min) v_min = valor;
}
if(registros > 0) {
printf("Soma total: %.2f\n", acumulado);
printf("Maior despesa: %.2f\n", v_max);
printf("Menor despesa: %.2f\n", v_min);
}
return 0;
}
Classificação Geométrica de Triângulos
Lógica para verificar a viabilidade de um triângulo e sua respectiva classificação com base nos lados.
#include <stdio.h>
int main() {
float x, y, z;
while(scanf("%f %f %f", &x, &y, &z) != EOF) {
if((x + y <= z) || (x + z <= y) || (y + z <= x)) {
printf("Nao e um triangulo valido.\n");
} else {
if(x == y && y == z) {
printf("Triangulo Equilatero\n");
} else if((x*x + y*y == z*z) || (x*x + z*z == y*y) || (y*y + z*z == x*x)) {
printf("Triangulo Retangulo\n");
} else if(x == y || y == z || x == z) {
printf("Triangulo Isosceles\n");
} else {
printf("Triangulo Escaleno\n");
}
}
}
return 0;
}
Jogo de Adivinhação Numérica
Um pequeno sistema interativo com limite de tentativas e feedback direcionla.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int alvo, chute, tentativas = 3;
srand(time(NULL));
alvo = rand() % 31 + 1;
printf("Tente adivinhar o dia da sorte (1 a 31). Voce tem 3 chances.\n");
for (int i = 1; i <= tentativas; i++) {
printf("Tentativa %d: ", i);
scanf("%d", &chute);
if (chute == alvo) {
printf("Parabens! Voce acertou.\n");
return 0;
}
if (i < tentativas) {
if (chute < alvo) {
printf("Dica: O numero e maior.\n");
} else {
printf("Dica: O numero e menor.\n");
}
} else {
printf("Fim de jogo. O numero correto era %d.\n", alvo);
}
}
return 0;
}