sábado, 29 de setembro de 2012

2ª lista de recursividade

Exercício 1:
#include <stdio.h>

float calc_tarifa(int, int, int, int, int *);

int main(void)
{
    int h1,h2,m1,m2, tempo;

    printf("\nInforme a hr de entrada: ");
    scanf("%d", &h1);
    printf("\nInforme a min de entrada: ");
    scanf("%d", &m1);
    printf("\nInforme a hr de saída: ");
    scanf("%d", &h2);
    printf("\nInforme a min de saída: ");
    scanf("%d", &m2);

    printf("Valor a ser pago = R$ %2.2f", calc_tarifa(h1, m1, h2, m2, &tempo));
    return 0;
}

float calc_tarifa(int h1, int m1, int h2, int m2, int *tempo)
{
    int i;
    float total;

    if(m1 > 0) h1++;//se minutos forem maior que 0, serão arredondados
    if(m2 > 0) h2++;

    *tempo = h2-h1;

    for(i=1; i<=*tempo; i++)
    {
        switch(i)
        {
            case 1:
                total = 8.00;
                break;
            case 2:
                total += 6.00;
                break;
            case 3:
                total += 3.5;
                break;
            case 4:
                total += 3.0;
                break;
            case 5:
                total += 3.0;
                break;
            default:
                total += 2.0;
                break;
        }
    }
    printf("\nVocê permaneceu %d hrs no estacionamento! \n", *tempo);
    return total;
}

Exercício 2: #include <stdio.h>//biblioteca para entrada/saída
#include <string.h>//biblioteca para manipulação de cadeia de caracteres
#include <stdlib.h>//biblioteca para funções acessar algumas funções do sistema, neste seu uso é para alocação dinâmica de memória
#define MAX 100//constante define o tamanho máximo de caracteres que podem ser inseridos no vetor

char * mesclar(char *, char *);

int main(void)
{

    char original[MAX];//vetor original, ele quem armazena a palavra completa fornecida pelo usuário
    int i, v1=0, v2=0;//variaveis de controle
    char * pCp1, * pCp2;//ponteiros para a posição de memória dos vetores cp1, cp2[]
    pCp1=malloc(MAX*sizeof(char));//alocando MAX memória para garantir que todas as letras serão armazenadas com sucesso
    pCp2=malloc(MAX*sizeof(char));//alocando MAX memória para garantir que todas as letras serão armazenadas com sucesso
    if(!pCp1 || !pCp2) printf("\n** ERRO : MEMÓRIA INSUFFICIENTE **");//verifica se não houve erro ao alocar a memória por falta de espaço

    //exibindo msg na tela e capurando a entrada do usuário
    printf("\nEntre com a palavra : ");
    gets(original);//função própia para ler cadeia de caracters... gets armazena inclusive espaços em branco

    /*
        comando irá percorrer até o tamanho da palavra digitada (strlen), afim de dividir o vetor em outros
        dois vetores. O vetor pCp1 armazena todas as letras que se encontram em indices pares. Já o vetor
        pCp2 armazena todas as letras que se encontram em indices ímpares.
    */
    for(i=0; i<strlen(original); i++)
    {
        if(i%2==0)
        {
            pCp1[v1] = original[i];
            v1++;
        }
        else
        {
            pCp2[v2] = original[i];
            v2++;
        }
    }
    pCp1 = realloc(pCp1,v1*sizeof(char));//realocando a memória a fim de economizá-la
    pCp2 = realloc(pCp2,v2*sizeof(char));//realocando a memória a fim de economizá-la

    printf("%s", mesclar(pCp1, pCp2));//chamada da função para refazer as palavras

    return 0;
}

char * mesclar(char * cp1, char * cp2)
{
    int i, size, v1=0, v2=0;/* A variavel i, v1, v2 são controladoras... já a variavel size é responsável por indicar a soma
        entre os tamanhos das cadeias de caracteres passadas por parametro.
    */
    char * final;//Essa será a cadeia de caracteres final, ou seja, a mesma cadeia que foi digitada no inicia do programa
    size = strlen(cp1)+strlen(cp2);//somando os tamanhos das cadeias distintas
    final=malloc(size*sizeof(char));//alocando o espaço de memoria de acordo com o tamanho que a palavra possui
    if(!final)
    {
        printf("\n** ERRO : MEMÓRIA INSUFFICIENTE **");//verifica se não houve erro ao alocar a memória por falta de espaço
        return NULL;
    }
    else
    {
        for(i=0; i<size; i++)
        {
            if(i%2==0)
            {
                final[i] = cp1[v1];
                v1++;
            }
            else
            {
                final[i] = cp2[v2];
                v2++;
            }
        }
        return final;
    }
}

Nenhum comentário:

Postar um comentário

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...