terça-feira, 25 de setembro de 2012

Qual a do C?: Verdadeiro e falso

Qual a do C?: Verdadeiro e falso: A linguagem c não possui um tipo de dado booleano, então de que forma ele trada o que é verdadeiro e falso? Sabe-se que para a linguagem C ...

Qual a do C?: Verdadeiro e falso

Qual a do C?: Verdadeiro e falso: A linguagem c não possui um tipo de dado booleano, então de que forma ele trada o que é verdadeiro e falso? Sabe-se que para a linguagem C ...

Como instalar o gcc no Mac OS.

Existe várias maneiras de instalar o gcc no mac, no entanto vamos tratar aqui apenas uma delas:

Primeiro você tem que ter instalado em sua máquina o Xcode.

Agora basta instalar, siga os passos:

1: Abra o Xcode
2:  Agora installe a ferramenta de linha de comando ou"command line tools" a partir do seguinte atalho:

 Xcode menu > Preferences > Downloads.

3: Clique em install e pronto.

segunda-feira, 24 de setembro de 2012

Função getch() no Linux

A função getch() está disponivel na biblioteca conio.h não disponível em linux.

Para isso basta usar um comando similar que tem a mesma função e está diponível na stdio.h

ex:

include

main()
{
char x;

scanf("%c", &x);
// funciona da mesma maneira que o getche()
}

Espero que tenha sido de ajuda.

Dicas Rápidas de C

Contante hexadecimal (base dezesseis)  Começam com '0x'
Octal (base oito) Começam com '0'

Portanto não escreva 013 achando que o C vai complicar como  13. 013 diferente de 13.

Declaração de Varialvel

tipo_da_variavel nome_da_variavel = contante;

Ex.
Char ch='D';
int count=0;
float pi=3.141;
int a = 17, b = 3;




- Constantes de barra invertida : São caracteres com código
Código
\b
\f
\n
\r
\t
\"
\'
\0
\\
\v
\a
\N
\xN 
Significado 
Retrocesso ("back")
Alimentação de formulário ("form feed")
Nova linha ("new line")
Retorno de carro ("carriage return")
Tabulação horizontal ("tab")
Aspas
Apóstrofo
Nulo (0 em decimal)
Barra invertida
Tabulação vertical
Sinal sonoro ("beep")
Constante octal (N é o valor da constante)
Constante hexadecimal (N é o valor da constante) 

Funções:

Printf() : A função printf tem a seguinte forma geral
printf(string_de_controle), lista_de_argumentos);

Codigo           Significado
%d                   Inteiro
%f                    Float
%c                   Caractere
%s                   String
%%                 Coloca na tela um %

Operadores Aritméticos e de Atribuição

Os operadores aritméticos são usados para desenvolver operações matemáticas. A seguir apresentamos a lista dos operadores aritméticos do C:

Operador 
+
-
*
/
%
++
-- 

Ação
Soma (inteira e ponto flutuante)
Subtração ou Troca de sinal (inteira e ponto flutuante)
Multiplicação (inteira e ponto flutuante)
Divisão (inteira e ponto flutuante)
Resto de divisão (de inteiros)
Incremento (inteiro e ponto flutuante)
Decremento (inteiro e ponto flutuante) 


Os operadores de incremento e decremento são unários que alteram a variável sobre a qual estão aplicados. O que eles fazem é incrementar ou decrementar, a variável sobre a qual estão aplicados, de 1. 

Então
x++; x--;
são equivalentes a

x=x+1; x=x-1


Operadores Relacionais e Lógicos

Os operadores relacionais do C realizam comparações entre variáveis. São eles:

Operador 
>.=
<
<=
==
!= 
Ação 
Maior do que
Maior ou igual a
Menor do que
Menor ou igual a
Igual a
Diferente de 
Os operadores relacionais retornam verdadeiro (1) ou falso (0). Para fazer operações com valores lógicos (verdadeiro e falso) temos os operadores lógicos:

Operador
&&
||
Ação 
AND (E)
OR (OU)
NOT (NÃO) 
Usando os operadores relacionais e lógicos podemos realizar uma grande gama de testes. A tabela-verdade destes operadores é dada a seguir:


falso
falso
verdadeiro
verdadeiro 

falso
verdadeiro
falso
verdadeiro 
p AND q 
falso
falso
falso
verdadeiro 
p OR q 
falso
verdadeiro
verdadeiro
verdadeiro 
Exemplo: No trecho de programa abaixo o if será executado, pois o resultado da expressão lógica é verdadeiro:


Operadores Lógicos Bit a Bit

O C permite que se faça operações lógicas "bit-a- bit" em números. Ou seja, neste caso, o número é representado por sua forma binária e as operações são feitas em cada bit dele. Imagine um número inteiro de 16 bits, a variável i, armazenando o valor 2. A representação binária de i, será: 0000000000000010 (quinze zeros e um único 1 na segunda posição da direita para a esquerda). Poderemos fazer operações em cada um dos bits deste número. Por exemplo, se fizermos a negação do número (operação binária NOT, ou operador binário ~ em C), isto é, ~i, o número se transformará em 1111111111111101. As operações binárias ajudam programadores que queiram trabalhar com o computador em "baixo nível". As operações lógicas bit a bit só podem ser usadas nos tipos charint e long int. Os operadores são:
OperadorAção
&AND
|OR
^XOR (OR exclusivo)
~NOT
>>Deslocamento de bits a direita
<<Deslocamento de bits a esquerda
Os operadores &|^ e ~ são as operações lógicas bit a bit. A forma geral dos operadores de deslocamento é:
valor>>número_de_deslocamentos
valor<
O número_de_deslocamentos indica o quanto cada bit irá ser deslocado.  Por exemplo, para a variável i anterior, armazenando o número 2:
i << 3;
fará com que i agora tenha a representação binária:  0000000000010000, isto é, o valor armazenado em i passa a ser igual a 16.

domingo, 23 de setembro de 2012

Bibliotecas em C


Falando um pouco de Biblioteca em C:
Os arquivos de biblioteca tem a extensão .h (header) e os arquivos que programamos na linguagem c usam a extensão .c.
Quando criamos um programa que precisa usar uma função de sistema somos obrigados a incluir o cabeçalho da biblioteca que contém a função desejada.
Por exemplo, para criar um programa que mostre mensagens na tela usamos a função printf(). Como ela está contida na biblioteca stdio somos obrigados a incluir essa biblioteca no começo do nosso programa.
Biblioteca stdio


stdio.h (acrônimo de standard input/output header ) é uma biblioteca que contém funções, macros e constantes padrões ao compilador.
Todo programa em C que usar funções para entrada ou saída de dados como o resgate de valores digitados pelo usuário ou então exibição de mensagens de retorno exigirá a inclusão do cabeçalho stdio.h
Uma lista de Funções  da biclioteca sdtio

Functions

Operations on files:

File access:

Formatted input/output:

Character input/output:

Direct input/output:

File positioning:

Error-handling:

Macros

And also _IOFBF_IOLBF_IONBFBUFSIZFOPEN_MAXL_tmpnamSEEK_CURSEEK_END and SEEK_SET, each described with its corresponding function.



cstdlib (stdlib.h)

C Standard General Utilities Library
Este cabeçalho define várias funções de uso geral, incluindo a gestão de memória dinâmica, geração de números aleatórios, a comunicação com o meio ambiente, aritiméticos inteiros, pesquisa, classificação e conversão.

Functions

String conversion:

Pseudo-random sequence generation:

Dynamic memory management:

Environment:

Searching and sorting:

Integer arithmethics:

Multibyte characters:

Multibyte strings:

Macros


Types




Desafio em C no Unix – Simulando o comando: cat | more


Considere um programa que apresenta a sua saída página por página. Ao invés de reinventar a paginação feita por vários utilitários do sistema Unix, desejamos chamar o paginador favorito do usuário (more, less, …). Faça um programa que use um pipe para redirecionar a saída para o paginador. O programa recebe o nome do arquivo a ser mostrado como entrada e repassa linha a linha deste arquivo a um processo filho através de um pipe. O processo filho irá executar o paginador.

Vamos inicialmente conceituar alguns comandos a serem utiliados:

more filtro de arquivo para leitura e visualização em monitores

Descrição: é um filtro para  paginar textos em uma tela de cada vez. Este paginador é simples. Os usuários devem perceber que o comendo less (1) prover mais de emulação (1) e mais melhorias.

less - O oposto do more

Descrição: less é um programa semelhante ao more , mas que permite o movimento para trás no arquivo, bem como o movimento para frente. Além disso, menos não tem que ler o arquivo de entrada inteiro antes de começar, portanto, com grandes entradas começa-se mais rápido do que editores de texto como vi.

pipe - Cria um pipe

Descrição

O Pipe, utilizado através do comando “|” permite que a saída de um comando seja diretamente utilizado em outro comando. O pipe tem seu nome inspirado nos tubos (pipes), de transporte de fluídos. A ideia do PIPE é encadear um conjunto de processos, de modo que a saída de cada um seja a entrada do seguinte. 

 O exemplo abaixo mostra claramente como utilizar o Pipe:


$ ls -l | grep imagem | sort -r
O primeiro comando ls -l lista o conteúdo do diretório em formato longo, a seguir o comando Pipe faz com que a saída do primeiro comando entre no segundo comando, grep imagem que procura na listagem do diretório qualquer arquivo que possua a palavra imagem, por final, a saída do comando grep imagem é utilizada no comando sort -r que faz a classificação de forma crescent
Conding in C

 Vamos ao Primeiro Código:  

 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <sys/wait.h>
 int main(int argc, char *argv[]) {
 int fd[2], pid1, pid2;
 char *my_program1[3] = {“/bin/cat”, argv[1], NULL};
 char *my_program2[2] = {“/bin/more”, NULL};
 pipe(fd);
 if((pid1 = fork()) == 0) {
 close(STDOUT_FILENO);
 dup(fd[1]);
 close(fd[0]); close(fd[1]);
 execv(my_program1[0], my_program1);
 }
 if((pid2 = fork()) == 0) {
 close(STDIN_FILENO);
 dup(fd[0]);
 close(fd[0]); close(fd[1]);
 execv(my_program2[0], my_program2);
 }
 close(fd[0]); close(fd[1]);
 waitpid(pid1, NULL, 0);
 waitpid(pid2, NULL, 0);
 return 0;
 }

Executando
Para executar o código, não se esqueça de gerar a compilação do arquivo, como por exemplo:
gcc -o CatMore CatMore.c
Após, para execução, o programinha espera que você passe o nome do arquivo que deve ser lido por parâmetro, por exemplo:
./CatMore CatMore.c
O resultado disso será a leitura do próprio arquivo CatMore.c.

Explicação do Primeiro Código
Este código está bem simples. Foi a primeira versão que fiz para atender ao problema, porém ainda não está completamente correto. Se vocês repararem no enunciado, tem o seguinte detalhe: ‘e repassa linha a linha deste arquivo a um processo filho através de um pipe’, o que quer dizer que não podemos usar o cat para ler o arquivo desejado, devemos fazer o código que percorrerá linha a linha do arquivo passado por parâmetro e jogar no pipe para que o more possa lê-lo da forma desejada.


 Então, Vamos ao Segundo Código:  
 #include <unistd.h>  
 #include <stdio.h>  
 #include <stdlib.h>  
 #include <string.h>  
 #define MAXLINE 4096  
 int main(int argc, char *argv[]) {  
 int n, fd[2];  
 pid_t pid;  
 char line[MAXLINE];  
 char *my_program[2] = {“/bin/more”, NULL};  
 FILE *arquivo;  
 if (pipe(fd) < 0) {  
 fprintf(stderr, “pipe error”);  
 }  
 if ((pid = fork()) < 0) {  
 fprintf(stderr, “fork error”);  
 } else if (pid > 0) {  
 /* parent */  
 close(fd[0]);  
 arquivo = fopen(argv[1],”r”);  
 while (fgets(line, MAXLINE, arquivo) != NULL)  
 {  
 write(fd[1], line , (strlen(line)));  
 }  
 fclose(arquivo);  
 close(fd[1]);  
 waitpid(pid, NULL, 0);  
 exit(0);  
 } else {  
 /* child */  
 close(STDIN_FILENO);  
 dup(fd[0]);  
 close(fd[1]);  
 execv(my_program[0], my_program);  
 }  
 return 0;  
 }  




Fontes:

http://www.vivaolinux.com.br/dica/Pipes-no-Linux; http://jairofranchi.wordpress.com/2011/03/24/utilizando-o-comando-pipe-linux/ http://www.quaddro.com.br/blog/programando-em-ansi-c/estudando-bibliotecas-de-c-stdio-h
http://joelsonlucena.wordpress.com/2012/09/19/desafio-em-c-no-unix-simulando-o-comando-cat-more/