You are on page 1of 3

Dicas sobre o uso da linguagem C/C++

Alm dos recursos gerais da linguagem C/C++, pode ser necessrio vez por outra utilizar e a alguns recursos especiais providos pelo ambiente de execuao para obter resultados especiais como, c por exemplo, para manipular arquivos, acessar a tela diretamente, ou gerar nmeros aleatrios. u o Este documento apresenta uma breve descriao dos recursos mais comuns que podem ser uteis c durante o desenvolvimento de programas. Argumentos de linha de comando Ao ser iniciado, um programa pode receber informaoes adicionais sobre como ele deve ser comc portar durante a execuao. Isso feito atravs do que se denomina usualmente parmetros (ou c e e a argumentos) de linha de comando. Por exemplo, quando se executa um comando como diff arq1 arq2, o comando diff recebe dois argumentos, o primeiro igual a arq1 e o segundo igual a arq2. Assim sendo, um programa deve ser capaz de manipular os parmetros de linha de comando com a que for executado. Parmetros so usualmente vistos como seqncias de caracteres separadas a a ue por caracteres em branco. Em C/C++, parmetros da linha de comando (qualquer coisa digitada aps o nome do proa o grama na linha de execuao) so manipulados atravs de dois parmetros denidos para a funao c a e a c main, que na verdade denida como e int main( int argc, char* argv[] ); o primeiro parmetro, argc, indica o nmero de argumentos do programa (incluindo seu prprio a u o nome) e o segundo, argv, um vetor com as cadeias de caracteres (strings) que correspondem a e cada parmetro (o nome do programa pode ser encontrado em argv[0]). a Um exemplo de programa que use esses recursos apresentado a seguir: e #include <stdio.h> main(int argc, char* argv[]) { int i; printf("argc=%d\n",argc); for (i=0;i<argc;++i) printf("arg.%d: \"%s\"\n",i,argv[i]); } Manipulao de arquivos ca Em C, arquivos texto so manipulados de forma bastante semelhante a entrada e sa padro, a ` da a utilizando comandos de leitura e escrita (fprintf, fscanf). O que preciso fazer para aplicar e esses comandos a um arquivo declarar uma varivel de acesso ao arquivo, abri-lo e fech-lo ao e a a nal. Isso feito pelos comandos fopen e fclose. e Um pequeno exemplo de programa em C que manipula um arquivo de nome exemplo.txt e apresentado a seguir: #include <stdio.h> main() { FILE* f; char c; f = fopen("exemplo.txt","r"); // "r": leitura; "w": escrita printf("Os caracteres antes do primeiro espaco em exemplo.txt sao: "); while ( (fscanf(f,"%c",&c)>0)&&(c!= ) ) printf("%c",c); 1

printf("\n"); fclose(f); } Manipulao de entradas de dados como caracteres ca Em certos casos, pode ser preciso tratar a entrada de dados caractere por caractere, como feito com o arquivo exemplo.txt no exemplo anterios. Para simplicar esse tipo de operaao, C oferece c funoes espec c cas para tratar caracteres e a constante EOF que permite testar pelo m do arquivo de entrada. O exemplo a seguir ilustra o uso dessas funoes. c main() { char c; while ((c=getchar())!=EOF) { while ((c!=\n)&&(c!=EOF)) { putchar(c); putchar(\n); c=getchar(); } putchar(@); // para marcar o fim de linha } } Gerao de n meros aleatrios ca u o Praticamente todas as linguagens oferecem alguma forma de geraao de nmeros aleatrios. A c u o teoria por trs dessa geraao foge ao escopo do curso, bastando que se entenda que a idia que a c e e programas devem ser capazes de gerar nmeros seguindo uma sequncia aparentemente aleatria. u e o Isso no quer dizer que os nmeros sejam realmente imprevisiveis, mas apenas que no haja uma a u a regra simples que relacione um nmero na sequncia com os anteriores e que a distribuiao dos u e c nmeros ao longo do tempo seja uniforme dentro do intervalo denido. u Em particular, para simulaoes as vezes importante que a sequncia no seja to aleatria c e ` e a a o que no seja poss se repetir um experimento exatamente. Para isso, todo gerador de nmeros a vel u aleatrios possui a deniao de um estado inicial denominado semente, que pode ser um unico o c nmero ou um conjunto de nmeros. Para os casos em que o usurio no deseja escolher esse valor, u u a a um procedimento permite ler o relgio do computador e gerar uma semente a partir do mesmo. o Como o relgio muda continuamente, isso d uma boa iluso de que as sequncias so realmente o a a e a aleatrias. o A semente, em C, armazenada atravs de uma chamada da funao srandom(seed); o proe e c cedimento time(0) pode ser usado para extrair um inteiro baseado no relgio que sirva como o semente (com a resoluao de segundos) e a funao random usada para gerar nmeros entre zero c c e u e RAND MAX na seqncia aleatria. Para gerar nmeros aleatrios entre zero e um, basta dividir ue o u o esse valor por RAND MAX. #include <stdio.h> #include <stdlib.h> main() { unsigned int seed = 13131; // Primeiro, uma semente fixa. srandom(seed); printf("Semente fixa: %u\n",seed); printf("No. aletorio entre 0 e 13: %2ld\n",random()%14); printf("Outro: %2ld\n",random()%14); 2

printf("No. aletorio entre 0 e 1: %f\n",((double)random())/RAND_MAX); printf("Outro: %f\n",((double)random())/RAND_MAX); printf("\n"); // Agora, trocamos a semente para outra derivada do relogio seed=time(0); srandom(seed); printf("Semente baseada no tempo: %u\n",seed); printf("No. aletorio entre 0 e 13: %2ld\n",random()%14); printf("Outro: %2ld\n",random()%14); printf("No. aletorio entre 0 e 1: %f\n",((double)random())/RAND_MAX); printf("Outro: %f\n",((double)random())/RAND_MAX); } Redirecinamento da entrada e sa padro da a Muitas vezes, os programas utilizam apenas rotinas de manipulaao da entrada (e sa c da) padro, a como getchar(), printf(), etc. Isso no signica que os programa sejam limitados a operar com a o teclado e a tela. Para execuao com um arquivo fornecido e para coleta de resultados em um c arquivo de sa para utilizaao em relatrios deve-se utilizar os comandos de redirecionamento da c o de entrada e sa do DOS ou Unix, os sinais < (maior que) e > (menor que). da Por exemplo, se o programa foi compilado para gerar um executvel com o nome tp0 (ou a tp0.exe, no caso de DOS/Windows) e um arquivo entrada.txt contm os dados de entrada, o e comando tp0 < entrada.txt > saida.txt tem o efeito de redirecionar a entrada padro do comando tp0 para o arquivo entrada.txt e a sa a da para o arquivo saida.txt (que ser criado, caso ainda no exista). Pode-se tambm redirecionar a a e apenas a entrada, ou apenas a sa da, independentemente.
Ultima alteraao: 25 de janeiro de 2005 c

You might also like