Implementação de Estruturas de Controle e Lógica Computacional em C

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 + 1 limita o resultado ao intervalo de 1 a 100.
  • Formatador %04d: Este especificador de formato no printf define uma largura mínima de 4 caracteres, preenchendo os espaços vazios à esquerda com zeros.
  • Semente (Seed): Sem srand(time(0)), a função rand() 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;
}

Tags: linguagem-c Algoritmos estruturas-de-controle programacao-estruturada

Publicado em 6-15 00:55 por Thomas