A pilha é uma das estruturas de dados utilizadas para diversas finalidades na computação. Ela é tida como uma estrutura de dados LIFO (Last in, First out), ou seja, o último elemento que entra na pilha é o primeiro a sair.

No nosso exemplo abaixo reproduzimos as operações:

  • PUSH – Insere um elemento na pilha.
  • POP – Retira um elemento da pilha.
  • DISPLAY – Exibe todos os elementos da pilha.

 

Nossa STRUCT stack possui duas variáveis:

 

  1. stk[MAXSIZE] – Vetor que armazena os valores na pilha. MAXSIZE é uma constante que define o tamanho da pilha.
  2. top – Variável que armazena a posição do ultimo elemento a entrar na pilha.

 

 

Mostrarei nesta breve postagem como deletar um arquivo usando a linguagem C.

Para deletar um arquivo usamos a função delete(“nome_do_arquivo”). No exemplo abaixo o programa deletará o arquivo masterdaweb.txt:

Neste artigo falaremos de funções de arquivo de operação em C, abertura de um arquivo, fechamento de um arquivo, o getw e funções putw, as funções fprintf e fscanf, o acesso aleatório a arquivos e função fseek.

Funções para operação de arquivos:

Função Operação
fopen() Cria um novo arquivo
Abre um arquivo existente
fclose() Fecha um arquivo em uso
fgetc() Lê um caractere de um arquivo
fgets() Lê uma string de um arquivo
putc() Escreve um caractere em um arquivo
fprintf() Writes a set of data values to a file
fscanf() Lê o arquivo em um tamanho definido
getw() Lê um inteiro de um arquivo
putw() Escreve um inteiro no arquivo
fseek() Aponto para uma posição definida em um arquivo
ftell() Mostra a posição atual em bytes
rewind() Aponta para o inicio do arquivo

fopen()

Para criar ou abrir um arquivo ou para leitura e/ou escrita:

Em “modo” usamos um paramêtro que defini quais operações serão feitas no arquivo tais como leitura e/ou gravação, tais parâmetros são definidos como:

R – Abrir para leitura.
R+ – Leitura e gravação.
W – Gravação, caso um arquivo já exista ele será subscrito, caso o contrário um novo será criado.
W+ – Gravação e leitura, caso um arquivo já exista ele será subscrito, caso o contrário um novo será criado.
RB – Leitura em arquivo binário.
RB+ – Leitura e gravação em arquivo binário.
WB – Gravação em arquivo binário, caso um arquivo já exista ele será subscrito, caso o contrário um novo será criado.
WB+ – Gravação e leitura, caso um arquivo já exista ele será subscrito, caso o contrário um novo será criado.

fclose()

Um arquivo aberto usando a função fopen() pode ser fechado com a função fclose():

fgetc()

A função fgetc() lê um único caractere de um arquivo.

O exemplo acima lê um caractere do arquivo arq.

fgets()

A função fgets() lê até o final de uma linha caso o tamanho de definido no parâmetro da função seja suficiente, caso o contrário lê o tamanho definido.

O exemplo acima armazena o que foi lido na variável nome.

putc()

Escreve um caractere no arquivo.

O exemplo acima escreve a letra ‘a‘ no arquivo arq.

getw() e putw()

São semelhantes às funções GETC e PUTC e são usados ​​para ler e escrever valores inteiros:

fprintf() e fscanf()

As funções fprintf e fscanf são idênticas às funções printf e scanf, a diferença é que são usadas em arquivos.

fseek()

Aponta para um posição contada em bytes a partir de uma determinada posição:

O exemplo acima aponta para a posição de 50 bytes contadas a partir de SEEK_SET (inicio do arquivo).

SEEK_SET – Início do arquivo.

SEEK_CUR – Posição atual.

SEEK_END – Final do arquivo.

ftell()

Mostra a posição atual no arquivo, contado a partir do início do arquivo.

rewind()

Aponta para o inicio do arquivo.

Você vai aprender como usar o comando switch em C para executar um bloco de código com base na seleção de múltipla escolha.

Logo abaixo temos um exemplo de um MENU usando o comando switch:

Caso a variável menu valha 1 a seguinte linha de comando será executada:

Caso a variável menu valha 2 a seguinte linha de comando será executada:

Caso MENU não seja igual a nenhum dos valores acima a seguinte linha de comando será executada:

A sequência de Fibonacci é dada pela seguinte ordem  Fibonacci = 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 . . .. O algoritmo para o cálculo do enésimo elemento é dado por:  N = N - 1 + N - 2 , ou seja, o enésimo elemento é igual à soma dos dois dois elementos anteriores a ele, por exemplo:

Dada a sequência de Fibonnaci  0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55. . . calcule o 3º elemento da sequência:

Sempre levamos em consideração o valor dos dois primeiros termos, tais que X = 0 (primeiro elemento) e Z = 1. Então o terceiro elemento da sequência será igual à soma dos dois elementos anteriores, nesse caso  N = X + Z , N = 0 + 1 , N = 1.

Progrma em linguagem C que calcula o enésimo termo da sequência de Fibonacci:

Logo abaixo um exmplo de programa base em OpenGL, tendo como resultado uma janela com um triângulo vermelho no centro.

[c]

#include <stdlib.h>
#include <GL/glut.h>
//Funçao de Call Back
void desenha (void)
{
//Define a cor de fundo da Janela
glClear Color(1,1,1,0);
//Limpa a Tela
glClear (GL_COLOR_BUFFER_BIT);
//Define a cor do desenho
glColor3i(1,0,0);
glBegin(GL_TRIANGLES);
//Define a posição do ponto do vértice
glVertex2i(-5,-5);
glVertex2i(0,5);
glVertex2i(5,-5);
glEndl();
//Desenha os itens definidos anteriormente
glFlush();
}

void teclado(unsingned char key,int x,int y)
{
if(key==27)
{ exit(0); }
}
void inicializa()
{
//define a janela de visualização 2d
glMatrixMode(GL_PROJECTION)
glOrtho2d(-15,15,-15,15);
glMatrixMode(GL_MODELVIEW);
}
int main(void)
{
//define o modo de operaçao da glut
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
//especifica tamanho da janela
glutInitWindowSize(400,400);
//cria a janela e insere o titulo
glutCreateWindow(“Primeiro Programa”);
//registra CallBack de desenho
glutDisplayFunc(desenha);
//registra a funçao de teclado
glutKeyboardFunc(teclado);
inicializa();
//Ativa funçoes de callback
glutMainLoop();
return 0;
}
[/c]___________________________________________________________________________

 

___________________________________________________________________________
Padrão de Nomes de Funções
Para facilitar o uso, dos nomes das funções da biblioteca OPENGL segue um padrão.                    O padrão adotado é simples a primeira parte do nome representa a biblioteca representante. A segunda parte é o nome do comando. A quarta parte represneta o tipo de parâmetro da função e a terceira parte o numero de parâmetros.

Exemplo:

___________________________________________________________________________
Tipos de dados aceitos
___________________________________________________________________________
Argumento                                             Tipo
s                                                                     Short
i                                                                    Integer
f                                                                     Float
d                                                                  Double
uc                                                           Unsigned Char
us                                                           Unsigned Short
ui                                                           Unsigned Int
___________________________________________________________________________

Padrão de nomes de funções

Outros exemplos :

gl Load Identity();
gl Vertex3f(1.0,2.3,0.5);
gl Vertex2i(1,2);
gl Vertex2f(2.3,0.5);
glut Solid Cube(30);

Segundo [Scheiner,2004], a OpenGL fornee um conjunto de comandos muito importantes para a modelagem e visualização de objetos geométricos. Porém, esses comandos são muito primitivos,no sentido que fornecem um baixo nível para a elaboração de desenhos deve ser implementada utilizando tais comandos. Além disso, como a OpenGL não contém funções para gerenciamento de janelas, também seria nescessário trabalhar com o sistema de janelas disponível no ambiente do  Sistema Operacional.

Para facilitar o desenvolvimento das aplicações gráficas, foram criadas algumas bibliotecas que fornecem uma maior abstração, alem de prover funções para a criação de janelas e gerenciamento de eventos. Entre as várias bibliotecas e toolkits existentes hoje, pode-se considerar que as mais utilizadas são a GLU.h e a GLUT.h.

A GLUT é adequada para aprender a programar em OpenGL e para construir aplicações pequenas. Para o desenvolvimento de programas mais complexos, que nesseitam de uma interfae mais elaborada, torna-se nescessário trabalhar com o sistema de janelas do ambiente operacional ou utilizar um outro toolkit mais completo.

 

INSTALANDO A GLUT NO DEV-C++

Download  DEV-C++;

Download GLUT;

Logo após efetuarem os downloads:

  • Instalem o compilador Dev-C++;
  • Vá no menu Ferramentas/Atualizações;

  • Clique na janela WebUpdate;
  • Selecione o servidor devpaks.org;
  • Clique em Check for updates;
  • Irá aparecer na tela uma lista de pacotes disponíveis;
  • Selecione o grupo OpenGL (em Groups)
  • Marque a linha contendo a glut;

Pronto! Agora começaremos a criar nossa aplicação.

Abra o Dev-C++, abra o menu Arquivo e selecione a opção Novo/Projeto, irá surgir uma janela , clique na aba Multimedia, a seguir, ícone glut, defina um nome para o projeto e selecione a linguagem a ser usada (escolha C++).

Clique em OK.

A seguir,o Dev-C++ solcita o nome do arquivo que irá guardar as informações do projeto. Defina um nome e salve o arquivo no diretório que desejar. Feito tudo isso com sucesso, será criado o ambiente Dev-C++.

Testando a Bliblioteca:

  • Clique no “+” localizado no canto superior esquerdo;

  • Agora vamos compilar o main;
  • Clique no botão colorido como na imagem abaixo:

  • Logo irá aparecer:
  • Se apareceu esta janela em seu ecrã a instalação foi um secesso.

Neste momento vocês devem estar pensando o motivo do segundo download postado por mim, se por acaso você não conseguir fazer o download da biblioteca por meio da opção de atualização do próprio Dev-C++, você deverá copiar os arquivos dentro da pasta que baixou e colar no diretório onde o Dev-C++ foi instalado;

Ex: C:\Dev-Cpp

Você poderá subistituir os arquivos existentes.

 

Bibliografia

Isabel Harb Manssour -OpenGL-Uma Abordagem Prática e Objetiva

Variáveis globais são variáveis declaradas fora de uma função, ao contrário das locais que são declaradas dentro de uma função.

Quando uma variável é declarada dentro de uma função, ela só poderá ser usada dentro da mesma, no exemplo acima a variável ‘a’ só poderá ser usada dentro função MAIN, caso o contrário será dada como inexistente. Já as globais, como o próprio nome diz, podem ser usadas por toda parte do programa.

Apesar de certas facilidades que as variáveis globais nos trazem elas também tem suas desvantagens. Quando declarada como global ela ocupará memória até que o programa seja finalizado, por isso deve ser usada apenas quando necessário. As variáveis locais só ocupam memória enquanto aquela função for executada, ao término dessa função ela é destruída.

Existem três maneiras de se reservar espaço de memória para
o armazenamento de informações:

Uso de variáveis globais – o espaço reservado existe enquanto
o programa estiver sendo executado.
Uso de variáveis locais – o espaço reservado existe apenas
enquanto a função que declarou a variável está sendo
executada.
Reservar um espaço na memória dinamicamente: requisitar ao
sistema, em tempo de execução, um espaço de um
determinado tamanho.

A função malloc:

 

  • Recebe como parâmetro o número de bytes que se deseja alocar.
  • Retorna o endereço inicial da área de memória alocada.

Alocação dinâmica de um vetor de inteiros com 10 elementos, exemplo:

Se a alocação for bem sucedida, ‘v’ armazenará o endereço inicial de uma área contínua de memória suficiente para armazenar 10 valores inteiros.

Operador sizeof(tipo) retorna o número de bytes que um
dado tipo ocupa na memória.

Exemplo esquemático do que ocorre na memória:

Se não houver espaço livre suficiente para realizar a alocação,
a função malloc retorna um endereço nulo (NULL).

A liberação do espaço alocado dinamicamente é feito através do uso da função ‘free()’, que recebe como parâmetro o ponteiro da memória a ser liberada.

OBS:

  • Só devemos passar para a função free um endereço de memória que tenha sido alocado dinamicamente.

 

  • Uma vez liberado o espaço de memória alocado, o mesmo não pode mais ser acessado.
  • Enquanto a função free não for utilizada, o espaço alocado dinamicamente permanecerá válido mesmo após o término de uma dada função.