Ir para o conteúdo
ou

Software livre Brasil

0 comunidades

Nenhum(a)

Felipe da Silva Braz

Apresentações

Tela cheia
 Feed RSS

Blog

27 de Maio de 2009, 0:00 , por Software Livre Brasil - | Ninguém está seguindo este artigo ainda.

Pré-processador e macros

12 de Novembro de 2016, 19:35, por Felipe da Silva Braz - 0sem comentários ainda

O pré-processador da linguagem C faz alterações no código de determinadas diretivas antes de envia-lo ao compilador. Ele é usado para facilitar futuras manutenções no código.

Uma diretiva é o include, o pré-processador substitui o nome do arquivo pelo corpo do arquivo especificado. Quando o nome usa aspas, ele procura no diretório local e depois na pasta include e se o nome do arquivo estiver de entre <>, o pré-processador procura direto na pasta include.

Outra diretiva de pré-processamento é a diretiva de definição. Abaixo segue um exemplo:

#define NUM 3

int mult (int a)

{

                int b  = a * NUM;

                return b;

}

Neste exemplo, todos os lugares que tiver a palavra NUM, será substituída pelo número 3.

Agora vamos fazer uma definição com parâmetros. Abaixo temos um exemplo:

#include <stdio.h>

#define SOMA(a,b)  a + b

int main()

{

                printf(“ %d “, SOMA(5,3));

                return 0;

}

Neste exemplo, o que está acontecendo de verdade é que a palavra SOMA(5,3) está sendo substituída por 5 + 3.

Entretanto, é importante tomar alguns cuidados como no exemplo abaixo:

#include <stdio.h>

#define DIF(a,b) a – b

int main ()

{

                printf(“ %d “, 2 * DIF(7,2));

                return 0;

}

Neste caso, quando é feito a substituição de 2 * DIF(7,2) temos a expressão 2 * 7 - 2 que é igual a 12 em vez de 10. O código correto seria:

#include <stdio.h>

#define DIF(a,b)  (a – b)

int main ()

{

                printf(“ %d “, 2 * DIF(7,2));

                return 0;

}



Ponteiros em Linguagem C - Parte 3 (Final)

5 de Novembro de 2016, 14:53, por Felipe da Silva Braz - 0sem comentários ainda

Aqui iremos falar  um  pouco  sobre  strings.

As  strings  são  do  tipo  char*,  isto  permite  que  a  gente  escreva  uma  função  similar  ao  strcpy().

Segue  abaixo  um  exemplo:

#include<stdio.h>

void  StrCpy(char  *destino,  char *origem)

{

    while(*origem)

    {

        *destino=*origem;

        origem++;

        destino++;

    }

    *destino=’\0’;

}

int  main()

{

    char str1[100], str2[100], str3[100];

    printf(“Entre  com  uma string:  “);

    gets (str1);

    StrCpy(str2, str1);

    StrCpy(str3,  “Você  digitou  a string:  ”);

    printf(“\n%s%s\n”,str3,str2);

    return(0);

}

Inicialmente  podemos  ver  no  exemplo  acima  que  ponteiros  podem  ser  passados  como argumentos de  funções. Na verdade  é  assim  que  funções  como  gets()  e  strcpy()  funcionam.  

E  como  está  sendo  alterados  os  valores?  Quando  os  ponteiros  recebem  os  argumentos,  eles apontam  para  o  endereço  de  memória  da  variável,  fazendo  alterações  nelas,  mesmo  fora  da função  main.

Apesar  de  ponteiro  ser  um  assunto  extenso,  não  tenho  a  intensão  de  esgotar  o  assunto  nos meus  posts,  mas  vocês  perceberam  que  o  assunto  será  muitas  vezes  retomado  durante  alguns posts  futuro.



Ponteiros em Linguagem C – Parte 2

27 de Outubro de 2016, 18:23, por Felipe da Silva Braz - 0sem comentários ainda

Agora falaremos sobre ponteiros e vetores.

O vetor é um conjunto de variáveis do mesmo tipo, com um identificador comum e alocado de forma sequencial. Quando você declara um vetor:

Tipo_da_variavel nome_da_variavel [tamanho];

O compilador C calcula o tamanho, em bytes, necessário para armazenar o vetor na memória. Exemplo:

Int vet[10];

Int = 4 bytes

Então:

tamanho x tamanho_do_tipo

10 x 4 = 40 bytes

Após reserva o espaço necessário na memória, o identificador comum será o nome que você declarou para o vetor, sendo esse identificador um ponteiro que aponta para o primeiro elemento do vetor.

Para ficar mais claro, quando você declara nome_da_variavel[índice], seria a mesma coisa que você declarar *(nome_da_variavel+índice). Veja no exemplo abaixo:

#include<stdio.h>

int main()

{

    int vet [50];

    int *p;

    int count;

    p=vet;

    for(count=0;count<50;count++)

        vet[count]=count;

    for(count=0;count<50;count++)

   {

           printf(“%d\t”,*p);

           P++;

    }

    return (0);

}

Agora que sabemos que o nome de um vetor é na verdade um ponteiro, podemos concluir que os ponteiros podem ser transformados em vetores. Segue abaixo um exemplo:

#include<stdio.h>

int main()

{

    int vet[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    int *p, count;

    p=vet;

    for(count-0; count<10; count++)

        printf(“%d\n”,p[count]);

    return (0);

}



Ponteiros em Linguagem C – Parte 1

18 de Outubro de 2016, 18:06, por Felipe da Silva Braz - 0sem comentários ainda

Da mesma forma que int armazena inteiros e char armazena caracteres, os ponteiros armazenam endereços de memórias. E para que armazenar um endereço de memória? Simples, para poder recuperar os dados armazenados naquele local da memória. Existem alguns usos mais específicos para os ponteiros, mas não será abordado aqui.

Em Linguagem C, quando declaramos um ponteiro, temos que declarar o tipo da variável que vamos apontar. Para declararmos um ponteiro temos a seguinte forma geral:

Tipo_de_ponteiro *nome da variável;

O asterisco ( * ) indica para o compilador que a variável é um ponteiro. Abaixo segue exemplos de declarações:

int *pt;

char *temp, *pt2;

Obs.: É importante que nunca se esqueça de usar o asterisco ( * ), pois ele indica que está sendo manipulado os valores que o ponteiro está apontando.

Outro operador importante é o &. Ele é usado para obter o endereço de memória de uma variável. Como podemos ver no exemplo abaixo:

int count = 10;

int *pt;

pt = &count;

Como você pode ver no exemplo, para pegamos o valor do endereço de memória da variável count não é usado o asterisco ( * ). Após o ponteiro pt ser apontado para a variável count, podemos ler e escrever na variável por meio do ponteiro.

Segue abaixo um exemplo simples de ponteiro:

#include<stdio.h>

int main()

{

                int num, *p;

                num = 55;

                p=&num;

                printf(“Valor inicial: %d\n”, num);

                *p=100;

printf(“Valor final: %d \n”, num);

printf(“Valor da variável apontada: %d\n”, *p);

printf(“Endereço da variável: %p\n”, p);

return (0);

}

E como você faria para somar +1 em um ponteiro? Simples, basta indicar que a soma de +1 é no valor que o ponteiro está apontando. Ex.: (*p)++;



Calculadora Simples em Linguagem C

8 de Outubro de 2016, 19:20, por Felipe da Silva Braz - 1Um comentário

Quem nunca tentou fazer uma calculadora simples e no final acabou fazendo algo relativamente complicado. Nesse artigo é explicado como fazer uma calculadora de operações simples e sem nenhuma complicação.

Para fazer a calculadora, será necessário ter duas variáveis do tipo float ou double para receber os números e uma variável char para receber o operador.  O comando para receber os valores é scanf(“%f %c %f”, &num1, &op, &num2), sendo verificado o operador pelo comando switch() para fazer a operação. Ponto, já temos a calculadora. Segue abaixo um código de exemplo.

 

#include<stdio.h>

int main()

{

    float num1, num2;

    char op;

    printf (“Digite uma expressão (Ex.: 1+1): “);

    scanf (“%f %c %f”, &num1, &op, &num2);

    switch(op)

    {

        case ‘+’:

            printf(“\n\t%.2f %c %.2f = %.2f\n\n”, num1, op, num2, num1+num2);

            break;

        case ‘-’:

             printf(“\n\t%.2f %c %.2f = %.2f\n\n”, num1, op, num2, num1-num2);

             break;

        case ‘*’:

             printf(“\n\t%.2f %c %.2f = %.2f\n\n”, num1, op, num2, num1*num2);

             break;

        case ‘/’:

             if(num2 != 0)

                 printf(“\n\t%.2f %c %.2f = %.2f\n\n”, num1, op, num2, num1/num2);

             else

                 printf(“Nenhum número pode ser dividido por zero!\n\n”);

             break;

        default:

            printf(“Operação invalida!\n\n”);

            break;

    }

return 0;

}