quinta-feira, 7 de junho de 2012

Lista de exercícios - modularização, apontadores e recursividade


algoritmo Banco
    declare
    var Registro Conta{
                nro:numerico
                nome:literal
                saldo:numerico
            }
           
    var vetConta[1..50]:Conta
    var opcao:numerico
   
    opcao <- 0
   
    zerarVetor($vetConta) //passagem por referência
   
    enquanto opcao <> 6 então
        escreva '1-cadastrar 2-remover 3-depositar 4-sacar 5-consultar 6-sair'
        leia opcao
       
        escolha opcao
            caso 1:
                cadastrar($vetConta)
            caso 2:
                remover($vetConta)
            caso 3:
                depositar($vetConta)
            caso 4:
                sacar($vetConta)
            caso 5:
                consultar($vetConta)
        fim_escolha
       
    fim_enquanto
   
fim_algoritmo

subrotina zerarVetor(vetConta[1..50])
    var i:numerico
    para i <- 1 até 50 faça
        vetConta[i].nro <- 0
        vetConta[i].nome <- NULO
        vetConta[i].saldo <- 0
    fim_para
fim_subrotina

subrotina cadastrar(vetConta[1..50)
    var i, aux:numerico
   
    aux <- -1
   
    para i <- 1 até 50 faça
        se vetConta[i].nro = 0 então
            aux <- i
        fim_se
    fim_para
   
    se aux = -1 então
        escreva 'Não há espaço suficiente para realizar um novo cadastro de conta'
    senão
        escreva 'Informe o número da conta:'
        leia vetConta[aux].nro
       
        escreva 'Informe o nome do cliente:'
        leia vetConta[aux].nome
       
        vetConta[aux].saldo <- 0
       
        Escreva 'Conta cadastrada com sucesso!'
    fim_se
fim_subrotina

subrotina remover(vetConta[1..50])
    var i, aux, nro:numerico
   
    aux <- -1
   
    escreva 'Informe o número da conta que deseja remover:'
    leia nro
   
    para i <- 1 até 50 faça
        se nro = vetConta[i].nro então
            aux <- i
        fim_se
    fim_para
   
    se aux = -1 então
        escreva 'Não foi encontrada nenhuma conta com o número informado, por favor verifique o número e repita a operação!'
    senão
        vetConta[aux].nro <- 0
        vetConta[aux].nome <- NULO
        vetConta[aux].saldo <- 0
        escreva 'Conta removida com sucesso!'
    fim_se
fim_subrotina

subrotina depositar(vetConta[1..50])
    var i, aux, nro, valor:numerico
   
    aux <- -1
   
    escreva 'Informe o número da conta:'
    leia nro
   
    para i <- 1 até 50 faça
        se nro = vetConta[i].nro então
            aux <- i
        fim_se
    fim_para
   
    se aux = -1 então
        escreva 'Essa conta não está cadastrada!'
    senão
        escreva 'Informe o valor que deseja depositar:'
        leia valor
       
        se valor > então
            vetConta[aux].saldo <- vetConta[aux].saldo + valor
            escreva 'Depositado realizado com sucesso!'
        senão
            escreva 'Valor inválido!'
    fim_se
fim_subrotina

subrotina sacar(vetConta[1..50])
    var i, aux, nro, valor:numerico
   
    aux <- -1
   
    escreva 'Informe o número da conta:'
    leia nro
   
    para i <- 1 até 50 faça
        se nro = vetConta[i].nro então
            aux <- i
        fim_se
    fim_para
   
    se aux = -1 então
        escreva 'Essa conta não está cadastrada!'
    senão
        escreva 'Informe o valor que deseja sacar:'
        leia valor
       
        se valor > 0 então
            vetConta[aux].saldo <- vetConta[aux].saldo - valor
            escreva 'Saque realizado com sucesso!'
        senão
            escreva 'Valor inválido!'
        fim_se
fim_subrotina

subrotina consultar(vetConta[1..50])
    var i, aux, nro:numerico
   
    aux <- -1
   
    escreva 'Informe o número da conta:'
    leia nro
   
    para i <- 1 até 50 faça
        se nro = vetConta[i].nro então
            aux <- i
        fim_se
    fim_para
   
    se aux = -1 então
        escreva 'Essa conta não está cadastrada!'
    senão
        escreva 'Número: ', nro
        escreva 'Cliente: ', vetConta[aux].nome
        escreva 'Saldo: ', vetConta[aux].saldo
    fim_se
fim_subrotina


quarta-feira, 6 de junho de 2012

Lista de exercícios - modularização, apontadores e recursividade

#include <stdio_ext.h>
struct Conta {
    char nome[100];
    int numero;
    float saldo;
};

void inicializar(struct Conta[50]);
int cadastrar(int, struct Conta[50]);
int remover(struct Conta[50]);
void depositar(struct Conta[50]);
void sacar(struct Conta[50]);
void consultar(struct Conta[50]);

void inicializar(struct Conta contas[50]) {
    int i=0;

    for(i = 0; i < 50; i++) {
        contas[i].numero = 0;
        contas[i].saldo = 0;
    }
}

int cadastrar(int nroContas, struct Conta contas[50]) {
    int i, aux, numero, existe, cadastardoComSucesso;

    existe = 0;
    cadastardoComSucesso = 0;

    if(nroContas<=50) {
        for(i = 0; i < 50; i++) {
            if(contas[i].numero == 0) {
                aux = i;
            }
        }

        printf("\nInforme um número para conta: ");
        scanf("%d", &numero);

        for(i = 0; i < 50; i++) {
            if(numero == contas[i].numero)
                existe = 1;
        }

        if(existe) {
            printf("\nA conta %d já existe!\n", numero);
        }else{
            __fpurge(stdin);
            printf("\nInforme o nome: ");
            gets(contas[aux].nome);
            contas[aux].saldo = 0;
            contas[aux].numero = numero;
            cadastardoComSucesso = 1;
            printf("\nConta cadastrada com sucesso!\n\n");
        }
    } else {
        printf("\nNão há mais espaço para cadastrar novos clientes!\n\n");
    }
    return cadastardoComSucesso;
}

int remover(struct Conta contas[50]) {
    int codigo, i, aux, cadastardoComSucesso;

    aux = -1;
    cadastardoComSucesso = 0;

    printf("\nInforme o número da conta: ");
    scanf("%d", &codigo);

    for(i = 0; i < 50; i++) {
        if(contas[i].numero == codigo)
            aux = i;
    }

    if(aux == -1)
        printf("\nEssa conta não está cadastrada!\n\n");
    else {
        contas[aux].numero = 0;
        contas[aux].saldo = 0;
        cadastardoComSucesso = 1;
        printf("\nConta excluida com sucesso!\n\n");
    }
    return cadastardoComSucesso;
}

void depositar(struct Conta contas[50]) {
    int numero, i, aux;

    aux = -1;

    printf("\nInforme o número da conta: ");
    scanf("%d", &numero);

    for(i = 0; i < 50; i++) {
        if(contas[i].numero == numero) {
            aux = i;
        }
    }

    if(aux == -1) {
        printf("\nEssa conta não está cadastrada!\n\n");
    }else{
        float valor;
        printf("\nInforme o valor que deseja depositar: ");
        scanf("%f", &valor);

        if(valor > 0) {
            contas[aux].saldo = contas[aux].saldo + valor;
            printf("\nDeposito realizado com sucesso!\n");
        }else{
            printf("\nNão é possível depositar um valor negativo ou nulo a sua conta!\n\n");
        }
    }
}

void sacar(struct Conta contas[50]) {
    int numero, i, aux;

    aux = -1;

    printf("\nInforme o número da conta: ");
    scanf("%d", &numero);

    for(i = 0; i < 50; i++) {
        if(contas[i].numero == numero) {
            aux = i;
        }
    }

    if(aux == -1) {
        printf("\nEssa conta não está cadastrada!\n\n");
    }else{
        float valor;
        printf("\nInforme o valor que deseja sacar: ");
        scanf("%f", &valor);

        if(valor > 0) {
            contas[aux].saldo = contas[aux].saldo - valor;
            printf("\nValor sacado com sucesso!\n\n");
        }else{
            printf("\nNão é possível salvar um valor negativo ou nulo!\n\n");
        }
    }
}

void consultar(struct Conta contas[50]) {
    int numero, i, aux;

    aux = -1;

    printf("\nInforme o número da conta: ");
    scanf("%d", &numero);

    for(i = 0; i < 50; i++) {
        if(contas[i].numero == numero) {
            aux = i;
        }
    }

    if(aux == -1) {
        printf("\nEssa conta não está cadastrada!\n\n");
    }else{
        printf("\n\nDADOS DA CONTA %d", aux);
        printf("\nNúmero.: %d", contas[aux].numero);
        printf("\nCliente.: %s", contas[aux].nome);
        printf("\nSaldo.: R$%.2f", contas[aux].saldo);
        printf("\n\n");
    }
}

int main() {
    int opcao=0, nroContas=1, aux, i;
    struct Conta contas[50];

    inicializar(contas);

    while(opcao != 6) {
        printf("1-Cadastramento da conta \n2-Remoção da conta \n3-Depósito \n4-Saque \n5-Consulta\n6-Sair\n: ");
        scanf("%d", &opcao);

        switch(opcao) {
            case 1:
                if(cadastrar(nroContas, contas))
                    nroContas++;
                break;
            case 2:
                if(remover(contas))
                    nroContas--;
                break;
            case 3:
                depositar(contas);
                break;
            case 4:
                sacar(contas);
                break;
            case 5:
                consultar(contas);
                break;
            case 6:
                break;
            default:
                printf("\nA opção digita não existe!\n\n");
                break;
        }
    }

    return 0;
}


#include <stdio_ext.h>
#include <string.h>

struct Filme {
    int codigo, ano;
    char titulo[50], sinopse[100], diretor[50], genero[30];
};

void inicializar(struct Filme[50]);
void cadastrar(struct Filme[50]);
void alterar(struct Filme[50]);
void listarFilmes(struct Filme[50]);
void ordemCrescenteArray(struct Filme[50]);
void procurarFilmePorTitulo(struct Filme[50]);

void inicializar(struct Filme filmes[50]) {
    int i = 0;

    for(i = 0; i < 50; i++) {
        filmes[i].codigo = 0;
        filmes[i].ano = 0;
    }
}

void cadastrar(struct Filme filmes[50]) {
    int aux, i;

    aux = -1;

    for(i = 0; i < 50; i++) {
        if(filmes[i].codigo == 0) {
            aux = i;
        }
    }

    if(aux == -1) {
        printf("\nMemória insuficiente para realizar cadastro\n\n");
    }else{
        int codigo, jaExiste = 0;

        for(i = 0; i < 50; i++) {
            if(filmes[i].codigo == codigo) {
                jaExiste = 1;
            }
        }

        if(jaExiste) {
            printf("\nJá existe um filme cadastrado com o código %d\n\n", codigo);
        }else{
            printf("\nInforme o código: ");
            scanf("%d", &filmes[aux].codigo);

            __fpurge(stdin);
            printf("\nInforme o título: ");
            gets(filmes[aux].titulo);

            __fpurge(stdin);
            printf("\nInforme a sinopse: ");
            gets(filmes[aux].sinopse);

            __fpurge(stdin);
            printf("\nInforme o diretor: ");
            gets(filmes[aux].diretor);

            __fpurge(stdin);
            printf("\nInforme o genêro: ");
            gets(filmes[aux].genero);

            printf("\nInforme o ano: ");
            scanf("%d", &filmes[aux].ano);

            printf("\nFilme cadastrado com sucesso!\n\n");

            ordemCrescenteArray(filmes); //manter o array organizado
        }
    }
}

void alterar(struct Filme filmes[50]) {
    int aux, codigo, i;

    aux = -1;

    printf("\nInforme o código do filme que deseja alterar: ");
    scanf("%d", &codigo);

    for(i = 0; i < 50; i++) {
        if(codigo == filmes[i].codigo) {
            aux = i;
        }
    }

    if(aux == -1) {
        printf("\nEsse filme não está cadastrado!\n\n");
    }else{
        __fpurge(stdin);
        printf("\nInforme um novo título para o filme: ");
        gets(filmes[i].titulo);

        __fpurge(stdin);
        printf("\nInforme uma nova sinopse para o filme: ");
        gets(filmes[i].sinopse);

        __fpurge(stdin);
        printf("\nInforme um novo diretor para o filme: ");
        gets(filmes[i].diretor);

        __fpurge(stdin);
        printf("\nInforme um novo genêro para o filme: ");
        gets(filmes[i].genero);

        __fpurge(stdin);
        printf("\nInforme um novo ano para o filme: ");
        scanf("%d", &filmes[i].ano);

        printf("\nFilme alterado com sucesso!\n\n");
    }
}

void listarFilmes(struct Filme filmes[50]) {
    int i, nroFilmes;

    nroFilmes = 0;

    for(i = 0; i < 50; i++) {
        if(filmes[i].codigo != 0) {
            printf("\nCódigo: %d", filmes[i].codigo);
            printf("\nTítulo: %s" , filmes[i].titulo);
            printf("\nSinopse: %s", filmes[i].sinopse);
            printf("\nGenêro: %s", filmes[i].genero);
            printf("\nDiretor: %s", filmes[i].diretor);
            printf("\nAno: %d", filmes[i].ano);
            printf("\n");
            nroFilmes++;
        }
    }

    printf("\nTotal de filmes: %d\n\n", nroFilmes);
}

void ordemCrescenteArray(struct Filme filmes[50]) {
    struct Filme filme;
    int i;

    for(i = 1; i < 50; i++) {
        if(filmes[i].codigo != 0 && filmes[i-1].codigo != 0) {
            if(filmes[i].ano < filmes[i-1].ano) {
                filme = filmes[i];
                filmes[i] = filmes[i-1];
                filmes[i-1] = filme;
            }
        }
    }
}

void procurarFilmePorTitulo(struct Filme filmes[50]) {
    char titulo[50];
    int i, aux;

    aux = -1;

    __fpurge(stdin);
    printf("\nInforme o titulo que deseja buscar: ");
    gets(titulo);

    for(i = 0; i < 50; i++) {
        if(strcmp(titulo, filmes[i].titulo) == 0) {
            aux = 1;
            printf("\nCódigo: %d", filmes[i].codigo);
            printf("\nTítulo: %s", filmes[i].titulo);
            printf("\nSinopse: %s", filmes[i].sinopse);
            printf("\nDiretor: %s", filmes[i].diretor);
            printf("\nGenêro: %s", filmes[i].genero);
            printf("\nAno: %d", filmes[i].ano);
            printf("\n");
        }
    }
    if(aux == -1) {
        printf("\nEsse filme não está cadastrado!\n\n");
    }
}

int main() {
    int opcao;
    struct Filme filmes[50];

    opcao = 0;

    inicializar(filmes);

    while(opcao != 6) {
        printf("\n1-Cadastrar\n2-Alterar\n3-Listar filmes\n4-Listar filmes por ano\n5-Procurar filme por nome\n6-Sair:");
        scanf("%d", &opcao);

        switch(opcao) {
            case 1:
                cadastrar(filmes);
            break;
            case 2:
                alterar(filmes);
            break;
            case 3:
                listarFilmes(filmes);
            break;
            case 4:
                listarFilmes(filmes);
            break;
            case 5:
                procurarFilmePorTitulo(filmes);
            break;
            case 6:
                printf("\n\nSistema encerrado!!\n");
            break;
            default:
                printf("\nOperação inválida!\n\n");
            break;
        }
    }

    return 0;
}

Novidade!!! Agora vamos ter canal no Youtube =D

Fala pessoal tudo beleza, estou sumido a correria está forte por aqui. Estou querendo dar um start em um projeto antigo que vem desde o temp...