Mostrando postagens com marcador Estrutura de Dados. Mostrar todas as postagens
Mostrando postagens com marcador Estrutura de Dados. Mostrar todas as postagens

quarta-feira, 7 de agosto de 2013

Estrutura de dados usando C - Pilha

Olá pessoal, como disse no post biblioteca de estrutura de dados estou criando uma biblioteca para facilitar a vida de programadores que desejam utilizar linguagem C para trabalhar com estrutura de dados, assim como de professores e alunos em sala de aula.

Nesse post irei mostrar como usar a stack.h. Essa biblioteca serve para manipular estrutura de dados do tipo pilha, vamos lá?!

Adicionando a biblioteca em seu arquivo C

Meu objetivo não é dizer o que é uma pilha e nem como ela funciona na memória de seu computador (já estou trabalhando em um post para isso). Hoje vamos aprender como facilitar a sua vida na criação e manipulação de uma pilha.

Primeiramente é necessário que você tenha o código fonte da biblioteca que pode ser obtido no no meu repósitorio de código, feito isso salve em um local de seu HD para que possamos utilizá-lo.

Agora crie um arquivo C para que possamos trabalhar =). Importante: crie o arquivo C no mesmo local onde você salvou o código da biblioteca.

Para adicionar a biblioteca a seu arquivo C use o include passando o caminho em que a mesma se encontra. No nosso caso o arquivo C e o código fonte da biblioteca estão no mesmo local. Veja:
#include "stdio.h" #include "stdlib.h" #include "stack.h"

Declarando uma variável do tipo Pilha e criando uma Pilha

Para declarar uma variável do tipo pilha devemos declarar um ponteiro do tipo Stack, e posteriormente para criar uma pilha na memória devemos chamar a função new( ) que retorna a pilha criada. Veja:

/* Declarando variável do tipo Stack */ Stack* pilha; /* Criando uma Pilha */ pilha = new();
Fácil não é? Pronto com isso temos uma pilha alocada em nossa memória, porém, ela ainda está vazia. Vamos ver como fazemos para inserir valores nessa pilha.

Inserindo e removendo valores da pilha

Até a versão atual da biblioteca (1.0 beta) as estruturas de dados trabalham unicamente com o tipo de dado float. Para inserir valores na pilha temos a função push(Stack*, float), e para remover valores temos a função pop(Stack*). Veja:

/* Adicionando valores a pilha */ push(pilha, 10); push(pilha, 20); push(pilha, 30); /* Removendo valores da pilha */ float item_removido = pop(pilha); printf("%f, foi o item removido \n\n", item_removido);
E ai pessoal está fácil? Nem parece linguagem C? kkkk. Ainda temos mais duas funções que devemos saber trabalhar, digamos que você tenha que listar os valores contidos na pilha ... e agora? Calma pequeno gafanhoto eu também fiz essa função ... ufaa ^_^. E a ultima função é talvez uma das mais importantes, ela será a responsável por liberar o espaço de memória ocupado por sua pilha. Vamos ver como utilizá-las!

Listando valores contidos na pilha, e destruindo a pilha

Algo muito importante quando estamos trabalhando com pilhas é listar os valores que estão contidos na pilha, para fazer isso podemos usar a função show(Satck*), antes de encerrar a nossa aplicação devemos limpar a memória para evitarmos que a mesma fica ocupada com os dados que foram utilizados durante a execução de nosso código. Para destruir a pilha temos a função clean(Stack*). Veja:

/* Exibindo os valores presentes na pilha */ printf("Itens da pilha:\n"); show(pilha); /* Limpando a memória */ clean(pilha);
Pronto pessoal, agora podemos fazer qualquer aplicação C utilizando Pilhas =). Em breve está chegando a versão 2.0, fique ligado no blog. Segue o código completo:

#include "stdio.h" #include "stdlib.h" #include "stack.h" /* Sabemos que para usar a ED de Pilha devemos usar o tipo Stack. * Uma vez que haja uma variável do tipo Stack podemos usar os recursos da stack.h =) */ int main() { /* Declarando variável do tipo Stack */ Stack* pilha; /* Criando uma Pilha */ pilha = new(); /* Adicionando valores a pilha */ push(pilha, 10); push(pilha, 20); push(pilha, 30); /* Removendo valores da pilha */ float item_removido = pop(pilha); printf("%f, foi o item removido \n\n", item_removido); /* Exibindo os valores presentes na pilha */ printf("Itens da pilha:\n"); show(pilha); /* Limpando a memória */ clean(pilha); return 0; }
Bom pessoal e aqui termina mais um post! Se você gostou recomende e assine o nosso feed de noticias para ficar a par das novidades =). Até a próxima!

domingo, 4 de agosto de 2013

Biblioteca de estrutura de dados - Linguagem C

Olá pessoal, no meu tempo livre venho trabalhando em algo que pode ajudar muitos estudantes de programação a entenderem alguns conceitos de estruturas de dados sem quebrarem tanto a cabeça (como eu quebrei kkk).

Eu resolvi criar uma biblioteca (escrita em linguagem ANSI C), para facilitar o uso DA linguagem no ensino aprendizagem da disciplina de estruturas de dados. Como estou programando a biblioteca em meu tempo livre (que não é muito) ela está em sua versão BETA e ainda incompleta.

Na versão atual (versão 1.0) temos incluídos os arquivos headers para trabalharmos com as estruturas de: Pilha, Lista Encadeada, Lista Circular, Lista Duplamente Encadeada, Árvores Binárias e Gráfos (BETA).

Nessa primeira versão cada estrutura pode trabalhar com tipos de dados de pontos flutuantes, porém, já estou trabalhando para que as mesmas trabalhem com qualquer tipo de dados (int, float e char).

O código fonte estará disponível no Github para quem quiser usá-lo =). Abaixo colocarei os links com o How-To para usar a biblioteca com cada uma das estruturas de dados.

Isso é tudo pessoal, e até a próxima. =)

OBS: OS LINKS ESTÃO CEGOS POR ENQUANTO.

Pilhas 
Listas encadeadas 
Listas circulares 
Listas duplamente encadeadas 
Árvores binárias 
Grafos (BETA) 
Link do projeto (Github) 

domingo, 2 de junho de 2013

Estruturas em C - struct (só o básico)

Olá pessoal, hoje vamos falar de struct (Estruturas). As estruturas existem em linguagem C para agrupar dados de diferentes tipos. Podemos definir estruturas como tipo de dados  que armazenam dados de tipos desiguais.

Nota: Podemos imaginar estruturas como sendo matrizes, porém, ela seria uma matriz turbinada que pode armazenar mais de um tipo de dado.

Criando uma estrutura

Para criar uma estrutura usamos a palavra-chave struct. Quando fazemos isso estamos definindo para o compilador um novo tipo de dado. Exemplo:

struct Relogio { int horas; int minutos; int segundos; };
A definição de uma estrutura não cria nenhuma variável, somente informa ao compilador as características de um novo tipo de dado. A palavra struct indica que um novo tipo de dados está sendo definido e Relogio será a sua entiqueta.

Outra coisa importante a dizer é que nesse exemplo definimos a struct como sendo global, ou seja, ela está acessível em qualquer parte do código. Podemos definir nossa struct dentro de uma função, com isso ela só poderá ser utilizada dentro dessa função pois seu escopo será local e não mais global. Exemplo:

#include <stdio.h>  int main(void) { struct Relogio { int horas; int minutos; int segundos; }; struct Relogio r; printf("\n O ponteiro hora está parado em qual número? \n >>> "); scanf("%d", &r.horas); printf("\n O ponteiro minuto está parado em qual número? \n >>> "); scanf("%d", &r.minutos); printf("\n O ponteiro de segundo está parado em qual número? \n >>> "); scanf("%d", &r.segundos); /* Não estou considerando se a hora é inválida! */ printf("\n Hora lida \n >>> %d:%d:%d", r.horas, r.minutos, r.segundos); return 0; }
No exemplo acima Relogio só pode ser acessado dentro da função principal (main). Por fim dessa introdução ao assunto gostaria de deixar uma definição sobre estruturas:
Uma estrutura é um tipo de dado cujo formato é definido pelo programador.

typedef + struct

Em C temos um recurso para dar novos nomes a tipos de dados que já existem (typedef). Com ele podemos então nomear as nossas estruturas. Podemos utilizar ele de 3 distintas formas, porém, para ser mas breve o possível vou adotar apenas uma forma e levar até o fim desse post.

typedef struct { int horas; int minutos; int segundos; } Relogio; Relogio rolex; /*Declara uma variavel do tipo Relogio*/
Para acessar os membros contidos em nossa struct utilizamos o operador "." (ponto final).
rolex.horas = 1;
Para acessar os membros de uma struct devemos utilizar o operador ponto. Esse operador conecta o nome de uma variável estrutura ao membro dela.

Estruturas aninhadas

Podemos ter uma estrutura que contém outra estrutura. Quando isso ocorre damos o nome de estruturas aninhadas. Para criar uma estrutura aninhada devemos criar todas as estruturas que agregam/compõem outras estruturas afim de suprir essa hierarquia montada:

typedef struct { int notas[3]; } Boletim; typedef struct { char nome[30]; Boletim boletim; } Aluno;
No exemplo acima temos duas estruturas: Boletim e Aluno. A estrutura Boletim possui apenas um membro já a estrutura Aluno possui dois membros, inclusive um de seus membros é do tipo Boletim. Então devido essa dependência devemos definir primeiramente Boletim e depois Aluno.
Para utilizar estruturas contidas em outras estruturas a ideia é a mesma. Devemos acessar os níveis hierárquicos utilizando o operador ponto e depois fazer a atribuição do valor, ou recuperar o mesmo. Exemplo:

typedef struct { int notas[3]; } Boletim; typedef struct { char nome[30]; Boletim boletim; } Aluno; Aluno Guilherme; int main(void) { Guilherme.boletim.notas[i]=10; return 0; }
Pessoal escrevi só o basicão, caso você goste e se interessou pelo assunto deixe seu comentário pedindo uma segunda parte mais avançada que eu farei ... lembre-se só farei se a demanda for alta por isso ajude ai compartilhando. Bons estudos!

quarta-feira, 9 de janeiro de 2013

Estruturas de dados - Resolução da lista 7 (Listas Encadeadas)

Olá pessoal esse post tem a resolução dos exercícios do 1 - 10. O exercício 11 postarei mais tarde. Qualquer duvida comentem, ok? A outra coisa se faz necessário usar o arquivo cabeçalho que eu criei (utils.h). Eu postei ele aqui no blog http://programando-ads.blogspot.com.br/2013/01/lista-de-exercicios-eda-listas.html.

Exercicio 1.
#include #include #include "utils.h" int lst_comp (Lista *l) { int i = 0; while (l != NULL) { i++; l = l->prox; } return i; } int main(void) { Lista *l; l = lst_cria (); l = lst_insere (l, 20); l = lst_insere (l, 20); l = lst_insere (l, 20); l = lst_insere (l, 20); l = lst_insere (l, 20); printf ("\ncomprimento da lista: %d \n", lst_comp (l)); return 0; }
Exercício 2.
#include #include #include "utils.h" int lst_maiores (Lista *l, int n) { Lista *p = l; int x = 0; for (p = l; p != NULL; p = p->prox) { if (p->value > n) x++; } return x; } int main(void) { Lista *l; l = lst_cria (); l = lst_insere (l, 20); l = lst_insere (l, 120); l = lst_insere (l, 40); l = lst_insere (l, -100); l = lst_insere (l, 13); system ("clear"); printf ("\n Numero de elementos maiores que %d = %d\n", 20, lst_maiores (l, 20)); printf ("\n Numero de elementos maiores que %d = %d\n", 10, lst_maiores (l, 10)); printf ("\n Numero de elementos maiores que %d = %d\n", 0, lst_maiores (l, 0)); printf ("\n Numero de elementos maiores que %d = %d\n", 240, lst_maiores (l, 240)); printf ("\n Numero de elementos maiores que %d = %d\n", 2, lst_maiores (l, 2)); return 0; }
Exercício 3.
#include #include #include "utils.h" int main(void) { Lista *l; l = lst_cria (); l = lst_insere (l, 20); l = lst_insere (l, 120); l = lst_insere (l, 40); lst_imprime (l); Lista *y = lst_ultimo (l); printf ("\nUltimo elemento da lista %d\n", y->value); return 0; }
Exercício 4.
#include #include #include "utils.h" Lista *lst_concatena (Lista *l1, Lista *l2) { Lista *p = NULL; p = lst_ultimo (l1); p->prox = l2; } int main (void) { Lista *l1; Lista *l2; l1 = lst_cria (); l1 = lst_insere (l1, 1); l1 = lst_insere (l1, 2); l1 = lst_insere (l1, 3); l2 = lst_cria (); l2 = lst_insere (l2, 4); l2 = lst_insere (l2, 5); l2 = lst_insere (l2, 6); Lista *p = lst_concatena (l1, l2); printf ("Valor: %d\n", p->prox->value); return 0; }
Exercício 5. #include #include #include "utils.h" Lista *lst_retira_n (Lista *l, int n) { Lista *p =NULL; while (l != NULL) { if (l->value != n) p = lst_insere (p, l->value); l = l->prox; } return p; } int main (void) { Lista *l; l = lst_cria (); l = lst_insere (l, 10); l = lst_insere (l, 50); l = lst_insere (l, 10); l = lst_insere (l, 50); l = lst_insere (l, 10); l = lst_retira_n (l, 50); lst_imprime (l); return 0; }
Exercício 6.
#include #include #include "utils.h" Lista *lst_separa (Lista *l, int n) { Lista *p = NULL; while (l != NULL && l->value != n) l = l->prox; l = l->prox; while (l != NULL) { p = lst_insere (p, l->value); l = l->prox; } return p; } int main (void) { Lista *l; l = lst_cria (); l = lst_insere (l, 10); l = lst_insere (l, 50); l = lst_insere (l, 60); l = lst_insere (l, 70); l = lst_insere (l, 80); printf ("\nOcorrencia: 50\n"); printf ("\nLista Original\n"); lst_imprime (l); printf ("\n\nLista separada:"); l = lst_separa (l, 50); lst_imprime (l); return 0; }
Exercício 7. #include #include #include "utils.h" Lista *lst_merge (Lista *l1, Lista *l2) { Lista *p = NULL; Lista *p1 = NULL; Lista *p2 = NULL; for (p1=l1, p2=l2; p1 != NULL && p2 != NULL; p1=p1->prox, p2=p2->prox) { p = lst_insere (p, l2->value); l2 = l2->prox; p = lst_insere (p, l1->value); l1 = l1->prox; } return p; } int main (void) { Lista *l1; Lista *l2; l1 = lst_cria (); l1 = lst_insere (l1, 1); l1 = lst_insere (l1, 2); l1 = lst_insere (l1, 3); l2 = lst_cria (); l2 = lst_insere (l2, 4); l2 = lst_insere (l2, 5); l2 = lst_insere (l2, 6); Lista *p; p = lst_merge (l1, l2); lst_imprime (p); return 0; }
Exercício 8.
#include #include #include "utils.h" Lista *lst_inverte (Lista *l) { Lista *p; Lista *aux=NULL; p=l->prox; l->prox=NULL; while(p!=NULL) { aux=p->prox; p->prox=l; l=p; p=aux; } return l; } int main (void) { Lista *l; l = lst_cria (); l = lst_insere (l, 10); l = lst_insere (l, 20); l = lst_insere (l, 30); puts ("Matriz Original"); lst_imprime (l); puts ("\nMatriz Invertida"); l = lst_inverte (l); lst_imprime (l); return 0; }
Exercício 9.
#include #include #include "utils.h" int lst_igual (Lista *l1, Lista *l2) { for (l1, l2; l1 != NULL && l2 != NULL; l1 = l1->prox, l2 = l2->prox) { if (l1->value != l2->value) return 0; } return 1; } int main (void) { Lista *l1, *l2; l1 = lst_cria (); l1 = lst_insere (l1, 10); l1 = lst_insere (l1, 20); l2 = lst_cria (); l2 = lst_insere (l2, 1); l2 = lst_insere (l2, 20); if (lst_igual(l1, l2)) printf ("\nAs listas são iguais!\n"); else printf ("\nAs listas são diferentes\n"); return 0; }
Exercício 10.
#include #include #include "utils.h" Lista *lst_copia (Lista *l) { Lista *p = l; Lista *y = NULL; while (p != NULL) { y = lst_insere (y, p->value); p = p->prox; } return y; } int main (void) { Lista *l; l = lst_cria (); l = lst_insere (l, 20); l = lst_insere (l, 100); l = lst_insere (l, 30); l = lst_insere (l, 20); l = lst_insere (l, 20); Lista *y; y = lst_copia (l); system ("clear"); lst_imprime (y); return 0; }

terça-feira, 8 de janeiro de 2013

Lista de exercícios EDA - Listas encadeadas

Esse arquivo cabeçario eu criei com base nos métodos de exemplos mostrados no livro "Introdução a Estruturas de Dados - José Lucas Rangel.

Para inseri-lo em seu programa C, basta fazer a cópia do arquivo e salvar com extensão .h (utils.h). Depois basta incluir ele no código fonte que deseja utilizar com o comando #include. Exemplo:

#include <stdio.h>
int main (void) {
    Lista *l;
    l = lst_cria ();
    l = lst_insere (l, 2000);
    lst_libera (l);
    return 0;
}


Curtam meu blog pô, e compartilha também :D!! Até mais!

typedef struct lista {
int value;
struct lista *prox;
} Lista;

/* função de criação: retorna uma lista vazia */
Lista *lst_cria (void) {
return NULL;
}

/* inserção no início: retorna lista atualizada */
Lista *lst_insere (Lista *l, int i) {
Lista *novo = (Lista *) malloc(sizeof(Lista));
novo->value = i;
novo->prox = l;
return novo;
}

/* função imprime:  imprime valores dos elementos */
void lst_imprime (Lista *l) {
Lista *p; /* variável auxiliar para percorrer a lista */

for (p = l; p != NULL; p = p->prox) {
printf ("Value = %d\n", p->value);
}
}

/* função vazia: retorna 1 se vazia ou 0 se não vazia */
int lst_vazia (Lista *l) {
if (l == NULL)
return 1;
else
return 0;
}

/* função busca: busca o elemento na lista */
Lista * lst_busca (Lista * l , int v) {
Lista * p;
for (p = l; p != NULL; p = p->prox) {
if (p->value == v)
return p;
}
return NULL; /* não achou o elemento */
}

/* função retirra: retira o elemento da lista */
Lista *lst_retira (Lista *l, int v) {
Lista *ant = NULL; /* ponteiro para o elemento anterior */
Lista *p = l; /* ponteiro para percorrer a lista */

/* procura o valor na lista, guardando o anterior */
while (p != NULL && p->value != v) {
ant = p;
p = p->prox;
}

/* verifica se achou o elemento */
if (p == NULL)
return l; /* não achou: retorna a lista original */

/* retira o elemento */
if (ant == NULL)
/* retira o elemento de inicio*/
l = p->prox;
else
/* retira o elemento do meio da lista */
ant->prox = p->prox;

free (p);
return l;
}

/* função libera: libera o espaço em memória ocupado pela lista */
void lst_libera (Lista *l) {
Lista * p = l;

while (p != NULL) {
Lista * t = p->prox; /* guarda referência para o próximo elemento */
free (p); /* libera a memória apontada por p */
p = t;  /* faz p apontar para o próximo */
}
}

sexta-feira, 7 de dezembro de 2012

Lista 6 de EDA - Estrutura de dados

Lista de estrutura de dados - 6ª lista

Faça um programa que cadastre 50 produtos.
Cada produto deve ser cadastrado com os seguintes dados: código, nome e preço.

1. Use 3 métodos de ordenação diferentes, liste todos os dados na seguintes formas:
  • Ordem crescente de código;
  • Ordem decrescente de preço;
  • Ordem alfabética de nome;
 2. Verifique no vetor ordenado:
  • O produto mais barato, se houver mais de um com o mesmo preço, mostrá-los.
  • Calcule e mostre a diferença entre os preços do produto mais barato e do mais caro.
3. Mostre quantas comparações devem ser feitas para encontrar um produto pelo código usando:
  • Busca sequencial;
  • Busca binária;
Resolução:
#include <stdio_ext.h>
#include <stdlib.h>
#include <string.h>

#define TAMANHO 50

typedef struct
{
    int codigo;
    char nome[80];
    float preco;
} Produto;

/* Protótipos das funções */
void inicializa_vetor (Produto**);
void menu (Produto**, int*);
void cadastrar (Produto**, int*);
void listar (Produto**, int*);
void ordenacao (Produto**, int*, int);
void bubblesort(Produto**, int*);
void selectionsort(Produto**, int*);
void insertionsort(Produto**, int*);
float buscarMaisBarato(Produto**, int*, int);
float buscarMaisCaro(Produto**, int*, int);
int buscaLinear(Produto**, int*, int);
int buscaBinaria(Produto**, int*, int);

int
main (void)
{
    Produto *p[TAMANHO];
    int qtde=0; // quantidade de elementos cadastrados em meu vetor

    inicializa_vetor(p);
    menu(p, &qtde);

    return 0;
}

void
inicializa_vetor(Produto **p)
{
    int i;
    for (i=0; i<TAMANHO; i++) p[i]=NULL;
}

void
menu(Produto **p, int *qtde)
{
    int opcao, ordenado=0;

    while (1)
    {
        printf ("\nInforme a opção desejada\n");
        puts ("1 - Cadastrar");
        puts ("2 - Listar");
        puts ("3 - Ordenar");
        puts ("4 - Produto mais barato");
        puts ("5 - Diferença entre produtos");
        puts ("6 - Busca Linear");
        puts ("7 - Busca Binária");
        puts ("8 - Sair");
        printf (".: ");
        scanf ("%d", &opcao);

        switch (opcao)
        {
            case 1:
                cadastrar(p, qtde);
                ordenado=0;
            break;
            case 2:
                listar(p, qtde);
            break;
            case 3:
                system ("clear");
                puts ("--- Métodos de ordenação ---");
                puts ("1 - Bubble Sort (código)");
                puts ("2 - Selection Sort (preço)");
                puts ("3 - Insertion Sort (alfabética)");
                int ordem;
                scanf ("%d", &ordem);

                if (ordem==1) ordenado=1;

                ordenacao(p, qtde, ordem);
            break;
            case 4:
                system ("clear");
                buscarMaisBarato(p, qtde, 1); // despresando o retorno
            break;
            case 5:
                system ("clear");
                printf ("Mais caro custa = %.2f\nMais barato custa = %.2f\nDiferença = %.2f \n", buscarMaisCaro(p, qtde, 0), buscarMaisBarato(p,qtde,0),
                        buscarMaisCaro(p,qtde,0) -buscarMaisBarato(p,qtde,0));
            break;
            case 6:
                printf ("\nInforme o código.: ");
                int codigo;
                scanf ("%d", &codigo);
                system ("clear");
                printf ("\nForam feitos %d loop(s) para encontrar o número %d.\n", buscaLinear(p, qtde, codigo), codigo);
            break;
            case 7:
                printf ("\nInforme o código.: ");
                scanf ("%d", &opcao);
                if(ordenado)
                {
                    system ("clear");
                    printf ("\nForam feitos %d loop(s) para encontrar o número %d.\n", buscaBinaria(p, qtde, opcao), opcao);
                }
                else puts ("\n -- Primeiro ordene o vetor pelo código antes de realizar a busca binária! -- ");
            break;
            case 8:
                system ("clear");
                puts ("Programa encerrado!");
                exit(0);
            break;
        }
    }
}

void
cadastrar(Produto **p, int *qtde)
{
    int codigo;
    printf ("\nEntre com o código do produto.: ");
    scanf("%d", &codigo);

    int i;
    for (i=0; i<*qtde; i++)
        if (p[i]->codigo == codigo) break;

    if (i != *qtde)
    {
        system ("clear");
        printf ("\n\n--- Esse Código já está cadastrado! ---\n\n");
    }
    else
    {
        // variável qtde diz o indice que o meu vetor deve inserir o novo registro
        p[*qtde] = (Produto*) malloc (sizeof(Produto));
        p[*qtde]->codigo = codigo;
        __fpurge (stdin);
        printf ("\nEntre com a descrição do produto.: ");
        gets (p[*qtde]->nome);
        printf ("\nEntre com o valor do produto.: ");
        scanf ("%f", &p[*qtde]->preco);
        *qtde = *qtde + 1; // incrementa a quantidade de produtos inseridos em meu vetor
        system ("clear");
        puts ("Produto inserido com sucesso!");
    }
}

void
listar(Produto **p, int *qtde)
{
    system ("clear");
    puts ("--- Lista de produtos ---");
    int i;
    for (i=0; i<*qtde; i++)
        printf ("\nCódigo.: %d \tNome.: %s \tPreço.: %.2f\n", p[i]->codigo, p[i]->nome, p[i]->preco);
}

void
ordenacao(Produto **p, int *qtde, int ordem)
{
    if (ordem == 1) bubblesort(p, qtde);
    else if (ordem == 2) selectionsort(p, qtde);
    else if (ordem == 3) insertionsort(p, qtde);
    else
    {
        system ("clear");
        puts ("--- Opção não cadastrada ---");
    }
}

void
bubblesort(Produto **p, int *qtde)
{
    int i,j;
    Produto *aux;

    for (i=0; i<*qtde; i++)
    {
        for (j=0; j<*qtde; j++)
        {
            if (p[i]->codigo<p[j]->codigo)
            {
                aux = p[i];
                p[i] = p[j];
                p[j] = aux;
            }
        }
    }
    puts ("-- Vetor ordenado com sucesso pelo método BUBBLE SORT! -- \n");
}

void
selectionsort(Produto **p, int *qtde)
{
    int i,j;
    Produto *aux;

    for (i=0; i<*qtde; i++)
    {
        for (j=i; j<*qtde; j++)
        {
            if (p[i]->preco < p[j]->preco)
            {
                aux = p[i];
                p[i] = p[j];
                p[j] = aux;
            }
        }
    }
    puts ("-- Vetor ordenado com sucesso pelo método SELECTION SORT! -- \n");
}

void
insertionsort(Produto **p, int *qtde)
{
    int i,j;
    Produto *eleito;

    for (j=1; j<=*qtde-1; j++)
    {
        eleito = p[j];
        i = j-1;

        while (i>=0 && (strcmp(eleito->nome, p[i]->nome) == -1))
        {
            p[i+1] = p[i];
            i--;
        }
        p[i+1] = eleito;
    }
    puts ("-- Vetor ordenado com sucesso pelo método INSERTION SORT! -- \n");
}

float
buscarMaisBarato(Produto **p, int *qtde, int listar)
{
    int i, index=0;
    float v=p[index]->preco;
    for (i=1; i<*qtde; i++)
    {
        if (p[i]->preco<v)
        {
            v=p[i]->preco;
            index=i;
        }
    }

    if (listar)
    {
        puts ("\n -- Produto(s) mais barato(s) da base de dados --");

        for (i=0; i<*qtde; i++)
        {
            if (v==p[i]->preco)
            {
                printf ("\nCódigo.: %d", p[i]->codigo);
                printf ("\nNome.: %s", p[i]->nome);
                printf ("\nPreço.: %.2f", p[i]->preco);
            }
            puts("");
        }
    }
    return v;
}

float
buscarMaisCaro(Produto **p, int *qtde, int listar)
{
    int i, index=0;
    float v=p[index]->preco;
    for (i=1; i<*qtde; i++)
    {
        if (p[i]->preco>v)
        {
            v=p[i]->preco;
            index=i;
        }
    }

    if (listar)
    {
        puts ("\n -- Produto(s) mais Caro(s) da base de dados --");
        for (i=0; i<*qtde; i++)
        {
            if (v==p[i]->preco)
            {
                printf ("\nCódigo.: %d", p[i]->codigo);
                printf ("\nNome.: %s", p[i]->nome);
                printf ("\nPreço.: %.2f", p[i]->preco);
            }
            puts("");
        }
    }
    return v;
}

int
buscaLinear(Produto **p, int *qtde, int codigo)
{
    int i, x=0;
    for (i=0; i<*qtde; i++)
    {
        if (p[i]->codigo == codigo)
        {
            x=1;
            break;
        }
    }
    if (x==0)
        puts ("-- Nenhum registro foi encontrado! --");
    return i;
}

int
buscaBinaria(Produto **p, int *qtde, int codigo)
{
    int esquerda=0, meio, direita=*qtde-1;
    int status=0, x=0;

    while (esquerda <= direita)
    {
        x++;
        meio = (esquerda+direita)/2;
        if (p[meio]->codigo == codigo) status = 1;
        if (p[meio]->codigo < codigo) esquerda = meio + 1;
        else direita = meio - 1;
    }

    if (status == 1)
    {
        printf ("\n \t\t -- Registro número %d", p[meio]->codigo);
        printf ("\n Nome.: %s", p[meio]->nome);
        printf ("\n Preço.: %.2f", p[meio]->preco);
        puts("");
    }
    else
        printf ("\n\t\t -- Nenhum registro foi encontrado!--\n");
    return x;
}

Dúvidas ou sugestões deixe um comentário. Até a próxima!

sexta-feira, 16 de novembro de 2012

Exercício de C - Estrutura de dados - Lista 5

#include <stdio_ext.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
/*
 *    Área de definição das estruturas
 **/
struct aluno
{
    int matricula;
    char nome[80];
    char endereco[120];
    char telefone[20];
};

// Criando o tipo Aluno que representa a estrutura aluno
typedef struct aluno Aluno;

/*
 *    Área dos protótipos da função
 **/
int show_menu ();
void initializer (Aluno*);
void select_action (int, int*, Aluno*);
void insert_register (int*, Aluno*);
void remove_register (int, Aluno*, int*);
void change_register (int, Aluno*, int*);
void sort_registers (Aluno*, int*);
void show_registers (Aluno*, int*);
void show_register (int, Aluno*, int*);

/*
 * Método principal, start do programa.
 **/
int
main (void)
{
    Aluno alunos[MAX];
    int index = 0; // Essa variável é responsável por controlar os índices do vetor que mantem os alunos

    initializer (alunos);

    while (1)
        select_action (show_menu(), &index, alunos);

    sort_registers (alunos, &index);
    show_registers (alunos, &index);

    return 0;
}

/*
 * Exibe o menu de funcionalidades
 **/
int
show_menu (void)
{
    int option;

    printf ("\n1 -\tInserir novo aluno");
    printf ("\n2 -\tApagar registro de aluno");
    printf ("\n3 -\tModfificar registro");
    printf ("\n4 -\tListar registros");
    printf ("\n5 -\tBuscar registro por matricula");
    printf ("\n0 -\tExit \n.: ");
    scanf("%d", &option);

    return option;
}

/*
 * Inicializa todas as matriculas com o número 9999
 **/
void
initializer (Aluno *a)
{
    int i;
    for (i = 0; i < MAX; i++)
        a[i].matricula = 9999;
}

/*
 * Esse método dita o comportamento do programa. É ele quem chama as funções que são exibidas pelo programa no menu.
 * Ele é a chave central, todas as chamadas principais, passam por ele.
 **/
void
select_action (int option, int *index, Aluno *a)
{
    int number; /* Variável number armazena o número de matricula do aluno que o usuário deseja excluir/alterar/buscar */

    int dialog_option; /* Variável dialog_option tem a função de armazenar a escolha do usuário quando o mesmo entra na tela de encerramento do programa, caso o valor armazenado pela variável seja 1 o encerramento do programa deve ser feito, caso seja 0 o encerramento do programa é abortado */

    int list_option = 0; /* Variável list_option tem a função de selecionar qual a ordem da exibição, caso seja 0 (default) os registros serão dispostos em ordem crescente. Caso contrário os registros serão dispostos em ordem decrescente */

    switch (option)
    {
        case 1:
            insert_register (index, a);
        break;
        case 2:
            printf ("\nInforme o número de matricula do aluno que deseja excluir.: ");
            scanf ("%d", &number);
            remove_register (number, a, index);
        break;
        case 3:
            printf ("\nInforme o número de matricula do aluno que deseja alterar.: ");
            scanf ("%d", &number);
            change_register (number, a, index);
        break;
        case 4:
            show_registers (a, index);
        break;
        case 5:
            printf ("\nInforme o número do registro que deseja buscar.: ");
            scanf ("%d", &number);
            show_register (number, a, index);
        break;
        case 0:
            system ("clear");
            printf ("\nDeseja encerrar o programa? \n[1]Sim \n[0]Não \n");
            scanf ("%d", &dialog_option);
            if (dialog_option == 1)
                exit (0);
        break;
    }
}

/*
 * Esse método é responsável pela inserção de registros existentes na persistencia.
 **/
void
insert_register (int *index, Aluno *a)
{
    int avaliable = 1;
    /* Essa variavel irá responder se o nro de matricula solicitado para novo registro já se encontra cadastrado na persistência de dados.
        Caso o valor de avaliable seja igual a 0 corresponde que o número solicitado já se encontra na persistência de dados, caso seja 1 corresponde que o número está disponível para identificar um novo registro.
     */
    int number; /* variável armazana o número da matricula do aluno depois que ela foi validada */
    do
    {
        int i;

        system("clear");
        printf ("\nInforme o número de matricula.: ");
        scanf ("%d", &number);

        for (i = 0; i < MAX; i++)
        {
            if (number < 0 || number == 9999)
            {
                printf ("\nEsse número não é válido!");
                avaliable = 0;
                break;
            }
            else if (number == a[i].matricula)
            {
                printf("\nEsse número já está cadastrado, informe um número válido!");
                avaliable = 0;
                break;
            }
            else
                avaliable = 1;
        }
    }
    while (avaliable == 0);

    a[*index].matricula = number;
    __fpurge (stdin);
    printf ("\nInforme o nome.: ");
    gets (a[*index].nome);
    __fpurge (stdin);
    printf ("\nInforme o endereço: ");
    gets (a[*index].endereco);
    __fpurge (stdin);
    printf ("\nInforme o telefone: ");
    gets (a[*index].telefone);

    // Incrementando a variável responsável pelo controle do vetor dos alunos
    *index = *index + 1;

    // Reordenando os registros que se encontram na persistencia, já que um novo aluno foi inserido
    sort_registers (a, index);

    printf ("\n\n \t\t -- Registro inserido com sucesso! -- \n");
}

/*
 * Esse método é responsável pela exclusão de registros existentes na persistencia.
 **/
void
remove_register (int number, Aluno *a, int *index)
{
    system ("clear");

    int i;
    int status = 0; /* Variável armazena se foi possível realizar a exclusão, se 0 não se 1 sim */

    for (i=0; i < *index; i++)
    {
        if (a[i].matricula == number)
        {

            /* Exibindo o registro de aluno que foi encontrado, e perguntando ao usuário se realmente deseja efetuar a exclusão */
            int dialog_option = 0; // Se o valor for 0 o registro não será removido, se o valor for igual a 1 o registro será removido

            show_register (number, a, index);

            printf ("\n Deseja realmente excluir o registro? [1] Sim [0] Não.: ");
            scanf ("%d", &dialog_option);

            // Sinalizando que foi encontrado registro com codigo de matricula equivalente
            status = 1;

            if (dialog_option == 1)
            {
                a[i].matricula = 9999;
                strcpy (a[i].nome, "");
                strcpy (a[i].endereco, "");
                strcpy (a[i].telefone, "");

                // Decrementando a variável responsável pelo controle do vetor dos alunos
                *index = *index - 1;

                // Reordenando os registros que se encontram na persistencia, já que um registro de aluno fio removido
                sort_registers (a, index);

                system ("clear");

                printf ("\n\t\t --Registro removido com sucesso!--\n");
                break;
            }
        }
    }
    if (status == 0)
        printf ("\n\t\t -- Nenhum registro foi encontrado!--\n");
}

/*
 * Esse método é responsável pela alteração de registros existentes na persistencia.
 **/
void
change_register (int number, Aluno *a, int *index)
{
    system ("clear");

    int i;
    int status = 0; /* Variável armazena se foi possível realizar a alteração, se 0 não se 1 sim */
    Aluno aux;

    for (i=0; i < *index; i++)
    {
        if (a[i].matricula == number)
        {
            __fpurge (stdin);
            printf ("\nNovo nome.: ");
            gets (aux.nome);
            printf ("\nNovo endereço.: ");
            gets (aux.endereco);
            printf ("\nNovo telefone.: ");
            gets (aux.telefone);

            strcpy (a[i].nome, aux.nome);
            strcpy (a[i].endereco, aux.endereco);
            strcpy (a[i].telefone, aux.telefone);

            // Modificando o valor de status, sinalizando que o registro foi localizado e removido com sucesso!
            status = 1;

            printf ("\n\t\t --Registro alterado com sucesso!--\n");
            break;
        }
    }
    if (status == 0)
        printf ("\n\t\t -- Nenhum registro foi encontrado!--\n");
}

/*
 * Esse método reorganiza a persistencia de dados (vetores) toda vez que o mesmo tem uma alteração, seja uma adição ou subtração de registros.
 **/
void
sort_registers (Aluno *a, int *index)
{
    int i, j;
    Aluno aux;

    for (i = 0; i < *index; i++)
    {
        for (j = 0; j < *index; j++)
        {
            if (a[i].matricula < a[j].matricula)
            {
                aux.matricula = a[i].matricula;
                strcpy (aux.nome, a[i].nome);
                strcpy (aux.endereco, a[i].endereco);
                strcpy (aux.telefone, a[i].telefone);

                a[i].matricula = a[j].matricula;
                strcpy (a[i].nome, a[j].nome);
                strcpy (a[i].endereco, a[j].endereco);
                strcpy (a[i].telefone, a[j].telefone);

                a[j].matricula = aux.matricula;
                strcpy (a[j].nome, aux.nome);
                strcpy (a[j].endereco, aux.endereco);
                strcpy (a[j].telefone, aux.telefone);
            }
        }
    }
}

/*
 * Esse método exibe todos os registros cadastrados na persistencia (vetores)
 **/
void
show_registers (Aluno *a, int *index)
{
    system ("clear");

    int i = 0;

    for (i = 0; i < *index; i++)
    {
        if (a[i].matricula != 9999)
        {
            printf ("\n \t\t -- Registro número %d --", a[i].matricula);
            printf ("\n Nome.: %s", a[i].nome);
            printf ("\n Endereço.: %s", a[i].endereco);
            printf ("\n Telefone.: %s", a[i].telefone);
            puts("");
        }
    }

    if (*index == 0)
        printf ("\n\t\t -- Nenhum registro cadastrado -- \n");
}

/*
 * O método show_register tem um funcionamento parecido com o método show_registers.
 * A diferença é que esse método busca um único registro e caso encontre o exibe.
 **/
void
show_register (int number, Aluno *a, int *index)
{
    system ("clear");

    int i;
    int status = 0;

    for (i = 0; i < *index; i++)
    {
        if (a[i].matricula == number)
        {
            status = 1;
            break;
        }
    }

    if (status == 1)
    {
        printf ("\n \t\t -- Registro número %d", a[i].matricula);
        printf ("\n Nome.: %s", a[i].nome);
        printf ("\n Endereço.: %s", a[i].endereco);
        printf ("\n Telefone.: %s", a[i].telefone);
        puts("");
    }
    else
        printf ("\n\t\t -- Nenhum registro foi encontrado!--\n");
}

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;
    }
}

sexta-feira, 21 de setembro de 2012

1ª lista de exercícios EDA

Fala galera, acho que vcs já estavam com saudades ... ou não, mas enfim vamos ao que interessa, coma a volta das aulas na faculdade voltaram também as listas de exercicíos, e como muitos adoram verificar e corrigir exercicíos alheios deixo para vcs a resolução dos 29 exercicíos da lista de ETA.


 #include <stdio.h> int main() { printf("\nÉ preciso fazer todos os algoritmos para aprender!"); return 0; }


#include <stdio.h> int main() { printf("\nGuilherme Carvalho!"); return 0; }
#include <stdio.h> int main() { printf("%d", 28*43); return 0; }
#include <stdio.h> <stdio.h> int main() { printf("%d", (9+8+7)/3); return 0; }

#include <stdio.h> int main() { int i; printf("\nInforme um numero inteiro: "); scanf("%d", &i); printf("%d", i); return 0; }
#include <stdio.h> int main() { int i, ii; printf("\nInforme dois numeros inteiro: "); scanf("%d%d", &i, &ii); printf("%d \n%d", i,ii); return 0; } 


 #include <stdio.h>  int main() { int i, s, a; printf("\nInforme um numero: "); scanf("%d", &i); s = i + 1; a = i - 1; printf("Sucessor: %d \nAntecessor: %d", s, a); return 0; }


 #include <stdio.h>  int main() { char nome[80]; char endereco[80]; char telefone[20]; printf("\nInforme o nome: "); gets(nome); printf("\nInforme o endereço: "); gets(endereco); printf("\nInforme o telefone: "); gets(telefone); printf("\nNome: %s \nEndereço: %s \nTelefone: %s", nome, endereco, telefone); return 0; } 


#include <stdio.h>  int main() { int x, y; printf("\nInforme 2 numeros inteiros: "); scanf("%d%d", &x, &y); printf("Soma = %d", x+y); return 0; }


 #include <stdio.h> int main() { int x, y; printf("\nInforme 2 numeros inteiros: "); scanf("%d%d", &x, &y); printf("Produto = %d", x*y); return 0; }

#include <stdio.h> <stdio.h> int main() { int x; printf("\nInforme um numero: "); scanf("%d", &x); printf("Terça parte de %d = %d", x, x/3); return 0; }

#include <stdio.h>  int main() { int x, y; printf("\nInforme 2 numeros inteiros: "); scanf("%d%d", &x, &y); printf("Media = %d", (x+y)/2); return 0; }


#include <stdio.h> int main() { float v; printf("\nInforme valor: "); scanf("%f", &v); v *= 1.01; printf("\n%f", v); return 0; }


#include <stdio.h> int main() { int a, h; printf("\nárea: "); scanf("%d", &a); printf("\nbase: "); scanf("%d", &h); printf("\narea=%d \nperimetro=%d", h*a, (h*2)+(a*2)); return 0; }


#include <stdio.h> #define PI 3.1415 int main() { int r; printf("\nRaio: "); scanf("%d", &r); printf("\nPerimetro = %f, Area = %f", 2*PI*r, PI*r*r); return 0; }


#include <stdio.h> int main() { int a, h; printf("\nlado: "); scanf("%d", &a); printf("\narea=%d \nperimetro=%d", a*a, (a*2)+(a*2)); return 0; }


#include <stdio.h> int main() { int b, a; printf("\naltura: "); scanf("%d", &a); printf("\nbase: "); scanf("%d", &b); printf("\narea=%d ", (b*a)/2); return 0; }


#include <stdio.h> int main() { float x; printf("\nvalor: "); scanf("%f", &x); printf("\nnovo valor = %f", x*0.91); return 0; }


#include <stdio.h> int main() { int x; printf("\nnumero: "); scanf("%d", &x); if(x >= 20 && x <= 90) { printf("\nNro está compreendido entre o intervalo!"); } else { printf("\nNro não está compreendido entre o intervalo!"); } return 0; }


#include <stdio.h> int main() { char nome[100]; int idade; char sexo; printf("\nInforme o nome: "); gets(nome); printf("\nInforme a idade: "); scanf("%d", &idade); __fpurge(stdin); printf("\nInforme sexo [M/F]: "); scanf("%c", &sexo); sexo = toupper(sexo); if(sexo == 'F' && idade < 25) { printf("\nNome: %s \nAceito (a)", nome); } else { printf("\nNome: %s \nNão aceito (a)", nome); } return 0; }


#include <stdio.h> int main() { int x, y, z; printf("\nInforme 3 valores: "); scanf("%d%d%d", &x, &y, &z); if((x + y > z) && (x + z > y) && (y + z > x)) { printf ("É triangulo"); } else { printf("\nNão é triangulo"); } return 0; }


#include <stdio.h> int main() { int x, y, z; printf("\nInforme 3 valores: "); scanf("%d%d%d", &x, &y, &z); if((x + y > z) && (x + z > y) && (y + z > x)) { printf("\nTriângulo "); if((x == y) && (z == x) && (y == z)) printf("Equilátero"); else if((x != y) && (z != x) && (y != z)) printf("Escaleno"); else printf("Isóceles"); } else { printf("\nNão é triangulo"); } return 0; }


#include <stdio.h> int main() { int x; printf("\nInforme um numero: "); scanf("%d", &x); if(x % 4 == 0) { printf("\nMultiplo de 4!"); } else if(x % 7 == 0) { printf("\nMultiplo de 7!"); } else { printf("\nNão é multiplo de 4 nem de 7!"); } return 0; } 


#include <stdio.h> int main() { int x; printf("\nInforme um numero: "); scanf("%d", &x); if(x <= 1) { x = 1; } else if(x > 1 && x <= 2) { x = 2; } else if(x > 2 && x <= 3) { x = x*x; } else { x = x*x*x; } printf("\nValor de x = %d", x); return 0; }


#include <stdio.h> int main() { int i; for(i = 1; i <= 600; i++) { if(i % 2 == 0) { printf("%d\t", i); } } return 0; }


#include <stdio.h> int verificaPrimo(int n) { int i; for(i = 2; i < n; i++) { if(n % i == 0) { return 1;//não é primo break; } } return 0;//primo } int main() { int i; for(i = 1; i < 2001; i++) { if(!verificaPrimo(i))//nega condição printf("%d\t", i); } return 0; } 


#include <stdio.h> int main() { float v; printf("\nInforme o valor do produto: "); scanf("%f", &v); if(v < 20) v *= 1.45; else v *= 1.3; printf("\nValor de venda: %5.2f", v); return 0; } 


#include <stdio.h> int main() { int nBg, nBm;//número do boi gordo e boi magro respectivamente float pBg, pBm;//peso do boi gordo e boi magro respectivamente int i = 1; int n; float p; printf("\nInforme o numero do %dº boi: ", i); scanf("%d", &nBg); printf("\nInforme o peso do %dº boi: ", i); scanf("%f", &pBg); nBm = nBg; pBm = pBg; for(i = 2; i <= 90; i++) { printf("\nInforme o numero do %dº boi: ", i); scanf("%d", &n); printf("\nInforme o peso do %dº boi: ", i); scanf("%f", &p); if(p > pBg) { pBg = p; nBg = n; } else { pBm = p; nBm = n; } } printf("\nBoi + gordo = %dº %3.2f \nBoi + magro = %dº %3.2f", nBg, pBg, nBm, pBm); return 0; } 


#include <stdio.h> #include <stdio.h> <stdio.h> int main() { char sexo; char olhos[9]; char cabelos[9]; float porcentagem = 0; int idade, i, mIdade = -1; for(i = 1; i <= 200; i++) { __fpurge(stdin); printf("\nSexo [M/F]: "); scanf("%c", &sexo); sexo = toupper(sexo); __fpurge(stdin); printf("\nOlhos: "); gets(olhos); __fpurge(stdin); printf("\nCabelos: "); gets(cabelos); printf("\nIdade: "); scanf("%d", &idade); if(idade > mIdade) mIdade = idade; if(sexo == 'F') { if(idade > 17 && idade < 36) { if(strcasecmp("castanho", olhos) == 0 && strcasecmp("preto", cabelos) == 0) porcentagem++; } } } printf("\nMaior idade = %d", mIdade); printf("\nPorcentagem = %3.2f", porcentagem/2); 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...