SdevLab – Exemplo de Código | Ordenação de vetores dinâmicos em C/C++

Fala Galera!

Segue abaixo um código de ordenação de vetores dinâmicos em c++. Na verdade são dois exemplos, o quick sort e o shell sort.

Ordenação de vetores dinâmicos em C/C++

O exemplo é bastante simples, primeiro você entra com o vetor e depois dele povoado você escolhe o algoritmo à usar e o vetor sai ordenado no final. É uma aplicação simples porque a idéia é mostrar os algoritmos de ordenação na prática!

Segue o código:


#include
#include
using namespace std;
// shellsort ..........................................
void shellsort(int x[], int tamanho, int nPassos)
{
    int incr,i,j,k,span,y;
    int *incrementos;
    incrementos = new int[nPassos];
    for (i=0;i<=nPassos;i++)
        incrementos[i] = (int)round(exp((nPassos-i)*log(2.0)));
    for (incr=0;incr<=nPassos;incr++)
    {
        //span é o tamanho de incrementos
        span = incrementos[incr];
        for (j=span;j=0 && y< pivo)
             esq++;
        while (vetor[dir] > pivo)
            dir--;
        if (esq <= dir)
        {
            trab = vetor[esq];
            vetor[esq] = vetor[dir];
            vetor[dir] = trab;
            esq++;
            dir--;
        }
    }while (esq <= dir);     if (dir-i >= 0)
        quickSort(vetor,tamanho,i,dir);
    if (j-esq >= 0)
        quickSort(vetor, tamanho, esq, j);
}
int main(){
    int *vetor;
    int aux,aux2,aux3;
    cout << "Quantos elementos voce deseja armazenar?" << endl;
    cin >> aux;
    vetor = new int[aux];
    for(int i=0;i<< "Entre com um número." << endl;
        cin >> aux2;
        vetor[i] = aux2;
        }
    cout << "Entre com 1 para ordenar usando o quickSort ou 2 para ordenar usando o shellsort."    << endl;
    cin >> aux3;
        if(aux3==1)
            quickSort(vetor,aux,0,aux-1);
        if(aux3==2)
            shellsort(vetor,aux,2);
    cout << "O vetor ordenado é: " << endl;
    for(int j=0;j<< vetor[j] << " ";
        }
    delete [] vetor;
}

Até a próxima!
😉

SdevLab – Exemplo de Código | Árvore Binária em C/C++

Eae galera!

Segue neste post um código que mostra como utilizar uma outra estrutura de dados que é a árvore binária.

Árvore Binária em C/C++

Este tipo de estrutura utiliza termos como nó, folha e raiz para denominar seus elementos, que possuem uma estrutura parecida com a imagem abaixo:

Acredito ser o tipo de árvore mais utilizado na computação, utiliza muita recursividade e é usada principalmente em algoritmos de árvores de busca binária.

Segue então o código que além de povoar a árvore, soma todos os seus elementos:

#include
using namespace std;
struct treenode
{
    int info;
    treenode *left;
    treenode *right;
};
typedef treenode *treenodeptr;
void tInsere(treenodeptr &p, int x)
{
    if (p == NULL) // insere na raiz
    {
        p = new treenode;
        p->info = x;
        p->left = NULL;
        p->right = NULL;
    }
    else
    {
        if(x < p->info)//insere na subarvore esquerda
            tInsere(p->left, x);
        else
            tInsere(p->right, x);
    }
}
void emOrdem(treenodeptr arvore, int &x)
{
    if(arvore != NULL)
    {
        emOrdem(arvore->left,x);
        x = x + arvore->info;
        emOrdem(arvore->right,x);
    }
}
void soma(treenodeptr arvore)
{
    int x = 0;
    emOrdem(arvore, x);
    cout << "Somatório dos elementos da árvore: " << x << endl;
}
int main(){
    int x = 0;
    treenodeptr arvore = NULL;
    while (x != -1)
    {
        cout << "Digite elemento a ser inserido." << endl;
        cin >> x;
        if (x != -1)
            tInsere(arvore, x);
    }
    soma(arvore);
}

Até a próxima!
😉

SdevLab – Exemplo de Código | Como abrir um arquivo e procurar uma string dentro dele em C/C++

Este código, como diz o título do post, abre um arquivo (de texto) e procura uma string dentro.

Como abrir um arquivo e procurar uma string dentro dele em C/C++

Imagine que você tenha um dicionário em arquivo texto e queira facilmente encontrar o significado de uma palavra. No lugar de procurar, use este código!

#include <iostream>
#include <fstream>
#include  <cstring>
using namespace std;
int procura(char  *string, char *delim1, char *delim2, char *palavra)
{
char  *inicio, *final;
char *p;
int i;
inicio = strstr(string,  delim1);
if (inicio != NULL)
{
final =  strstr(string, delim2);
i = 0;
for  (p=inicio+strlen(delim1);p<final;p++)
palavra[i++] = *p;
palavra[i]= '';
return 0;
}
else
return 1;
}
int  main(int argc, char *argv[])
{
char procurado[100];
char aux[512];
char palavra[512];
strcpy(procurado,argv[1]);
ifstream arquivo;
arquivo.open("exemplo.txt");
if(arquivo.is_open())
{
while(!arquivo.eof())
{
arquivo.getline(aux,512);
if  (procura(aux, "<hw>","</hw>",palavra)==0)
cout << "Palavra: " << palavra << endl;
if (procura(aux, "<def>","</def>",palavra)==0)
cout << "Definição: " << palavra << endl;
}
arquivo.close();
}
else
cout << "Cade o arquivo??" << endl;
return 0;
}

No linux, para testar, abra o terminal e digite as linhas:

g++ -o dict teste.cc
./dict teste

Note que como delimitadores eu usei os termos <hw> e <def> mas isto não é uma regra, usei desta forma porque o meu dicionário era na verdade um arquivo xml.

Até a próxima!

SdevLab – Exemplo de Código | Manipulação de Listas – Delafter e Remove tudo C/C++

Eae galera!

Agora que já vimos o básico da montagem de lista, vamos ver um código como exemplo de código que manipula listas.

Manipulação de Listas – Delafter e Remove tudo C/C++

O código abaixo trabalha com as funções delafter (remove o próximo registro depois de uma dada referência) e a remove tudo que limpa uma lista.

Segue o código:

#include <iostream>
using namespace std;
struct no
{
int info;
no* next;
};
typedef no* noptr;
void push (noptr &s, int t)
{
no *p;
p = new no;
p->info = t;
if (s == NULL)
p->next=NULL;
else
p->next = s;
s=p;
};
void delafter(noptr &p, int &x)
{
noptr q;
q = p->next;
x = q->info;
p->next = q->next;
delete q;
}
int pop (noptr &lista)
{
int q;
no *p;
if (lista == NULL)
cout << "Lista vazia";
else
{
p=lista;
lista = p->next;
q = p->info;
delete p;
}
return q;
};
void removetudo(noptr &lista, int x)
{
noptr p,q;
int aux;
q = NULL;
p = lista;
while(p != NULL)
{
if (p->info == x)
if (q == NULL) // remove o primeiro da lista
{
aux = pop(lista);
p = lista;
}
else
{
p = p->next;
delafter(q,aux);
}
else // continua atravessando a lista
{
q = p;
p = p->next;
}
}
}
int main()
{
noptr lista = NULL;
int informacao;
int auxtel;
cout <<"Entre com o número do telefone (-1 para sair)" << endl;
cin >> informacao;
while (informacao != -1)
{
push(lista, informacao);
cout <<"Entre com o número do telefone (-1 para sair)" << endl;
cin >> informacao;
}
cout << "Digite o telefone que você deseja remover." << endl;
cin >> auxtel;
removetudo(lista, auxtel);
cout << "Sua nova lista é: " << endl;
while (lista != NULL)
{
informacao=pop(lista);
cout << informacao << endl;
}
return 0;
}

Até a próxima!

😉

SdevLab – Exemplo de Código | Filas FIFO em C/C++

Eae galera!

Continuando no tema C/C++ o assunto agora não é mais lista, e sim filas. Desta vez veremos como manipular uma fila FIFO, First In, First Out. Ou seja, o primeiro a entrar na fila é também o primeiro a sair (como nas filas de banco, médico, etc).

Filas FIFO em C/C++

O código abaixo cadastra pacientes que deverão fazer uma consulta com um médico. Ele armazena os dados dos pacientes e depois monta a ordem da consulta, que é a ordem dos cadastros (first in first out).

Para esta idéia funcionar a única coisa que foi feita e difere dos outros códigos é a estrutura fila, que armazena os dados da consulta (início e fim).

Segue o código:

#include <iostream>
#include <cstring>
using namespace std;
struct no
{
char nome[200];
no* next;
};
typedef no* noptr;
struct fila
{
noptr inicio;
noptr fim;
};
void insere (fila* pq, char x[])
{
noptr p;
p = new no;
strcpy(p->nome,x);
p->next = NULL;
if (pq->fim == NULL)
pq->inicio = p;
else
(pq->fim)->next = p;
pq->fim = p;
}
void remove (fila* pq, char x[])
{
noptr p;
//verificando se a fila esta vazia
if(pq->inicio == NULL)
{
cout << "Sua fila está vazia." << endl;
exit(1);
}
//removendo nó do ini­cio da fila
p = pq->inicio;
strcpy(x,p->nome);
pq->inicio = p->next;
//para fila vazia, os dois ponteiros apontam para NULL
if (pq->inicio == NULL)
pq->fim = NULL;
delete p;
}
int main()
{
fila q;
char name[200];
//inicializando a fila
q.inicio = NULL;
q.fim = NULL;
//inserindo elementos na fila
cout << "Entre com o nome do paciente (Digite n para sair)" << endl;
cin.getline(name,200);
while(strcmp(name,"n"))
{
insere(&q,name);
cout << "Entre com o nome do paciente (Digite n para sair)" << endl;
cin.getline(name,200);
}
//removendo os pacientes da fila
cout << endl;
cout << "A ordem de atendimento sera: " << endl;
while (q.fim != NULL)
{
remove(&q,name);
cout << name << endl;
}
system("Pause");
return 0;
}

Até a próxima!