quinta-feira, 12 de fevereiro de 2009

Artigo: Manipulando arquivos.

Escreverei neste artigo como manipular arquivos com a biblioteca do C++. Particularmente eu acho mais fácil utilizar suas funções do que as funções do .
Mostrarei agora o exemplo e depois o explicarei:

#include <fstream>
#include <iostream>
using namespace std;

void main()
{
char palavra[30];
ofstream out;
ifstream in;

out.open("arquivo.txt");
cout << "Informe uma palavra: ";
cin >> palavra;
out << palavra;
out.close();

in.open("arquivo.txt");
in >> palavra;
cout << "Voce escreveu: " << palavra;
in.close();
}

Primeiramente adicionamos a biblioteca <fstream> para podermos utilizar as funções de manipulação de arquivo. Declaramos uma variável de ofstream e outra de ifstream, que servem para gravar e ler no arquivo respectivamente.
No comando out.open("arquivo.txt") estamos abrindo um arquivo, caso ele não exista, esta função o criará. Então esperamos o usuário informar uma palavra e a gravamos no arquivo com a chamada de out << palavra.Feito isso fechamos o ofstream out.close(). Caso não o faça, na hora de abrir o arquivo com a variável in ele não aceitará e terá uma excessão.
Agora abrimos o arquivo para leitura in.open("arquivo.txt"), e lemos uma palavra in >> palavra.
Essa biblioteca suporta também outras maneiras de leitura e gravação. Uma delas é que com a variável in pode-se ler uma linha, ou ler até achar um caractere delimitador. Pode-se também criar uma única variável que servirá como gravação e leitura, para isso utilize uma variável do tipo fstream, porém tome cuidado quando utilizá-la, por causa de posições no arquivo.

Até a próxima.

quarta-feira, 11 de fevereiro de 2009

Artigo: Criando funções com Templates.

Estamos acostumados a criar função para determinados tipos que ja sabemos que serão usados. Mas quando precisamos escrever funções mais genéricas necessitamos utilizar template.
Esta é uma função para ordenar valores em ordem ascendente.
Para a ordenação utilizei o método bubble sort. Não aconselho utilizá-lo para grandes quantidades de valores.


Abaixo segue o exemplo:



template <class T>
void ordenar(T valores[], int controle)
{
for(int i=0; i<controle; i++)
{
for(int j=i+1; j<controle; j++)
{
if(controle[i] > controle[j])
{
T temp = controle[i];
controle[i] = controle[j];
controle[j] = controle[i];
}
}
}
}

Repare no template antes do tipo de retorno e nome da função, é ele que indica que existirá um valor ainda não definido, e então você pode utilizar esse tipo T como se fosse um tipo qualquer, pode declarar uma variável, pode passar esse tipo como parâmetro, etc.

Agora você pode utilizar sua função com diferentes tipos:

void main()
{
int inteiros[] = {7, 4, 8, 1, 2};
double doubles[] = {3.4, 2.3, 9.8, 1.2};
ordenar(inteiros, 5);
ordenar(doubles, 4);

for(int i=0; i<5; i++)
cout << inteiros[i] << " ";
cout << endl;
for(int i=0; i<4; i++)
cout << doubles[i] << " ";
cout << endl;
}

Tome cuidado quando utilizar template, teste no caso de array de chars, veja que não daria certo, quando for assim faça uma sobrecarga de função, e passe como parâmetro um array de char.

Até a próxima.

terça-feira, 10 de fevereiro de 2009

Deixe suas dúvidas.

Pessoal é só vocês postarem suas dúvidas que responderemos. Este blog será destinado a C e C++. Temos também o os blogs destinados a Java http://javaprogramando.blogspot.com/ e a C# http://csharpprogramando.blogspot.com/.
Bom pra começar é isso, colocaremos artigos também, e caso tenha curiosidade nós atualizaremos o blog todos os dias, respondendo as dúvidas sequencialmente.