{tipo da função} nome_da_função ({parâmetros}) { comandoa; comandob;... }

Tamanho: px
Começar a partir da página:

Download "{tipo da função} nome_da_função ({parâmetros}) { comandoa; comandob;... }"

Transcrição

1 19. Funções Forma Geral As funções em linguagem C podem ser encaradas como algo similar as sub-rotinas em programas escritos em Assembly, guardadas as suas devidas proporções. Sua forma geral, descrita pelo padrão ANSI C, é mostrada a seguir: tipo da função nome_da_função (parâmetros) comandoa; comandob;... Onde: Tipo da função: especifica o tipo de dado (int, char, float, doble, etc.) que a função irá devolver para o local de onde ela foi chamada. Nome_da_função: identificador a ser utilizado para referenciar aquela função. Ela passará a ser reconhecida pelo resto do programa por este nome. Parâmetros: são utilizados para a passagem de valores para que a função possa utilizá-los e efetuar os procedimentos para o qual foi escrita. Veja um exemplo de funções no programa (EXEMPLO-14): // Exemplo de funções // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Extraído do Livro "PIC - Programação em C", do Fábio Pereira // Editora Érica - Página 139 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> int soma ( int a, int b) return a + b; main ( ) printf("1 + 1 = %d \n", soma (1,1)); Página 95

2 Funções do tipo void Um dos usos de void é declarar explicitamente funções que não devolvem valores. Isso evita seu uso em expressões e ajuda a afastar um mau uso acidental. Antes de poder usar qualquer função como void, você deve declarar seu protótipo. Se isto não for feito, o C assumirá que ela devolve um valor inteiro e, quando o compilador encontrar de fato a função, ela declarará um erro de incompatibilidade O comando return O comando return tem dois importantes usos. Primeiro, ele provoca uma saída imediata da função que o contém. Isto é, faz com que a execução do programa retorne ao código que o chamou. Se o comando return for executado na função main, então o programa será encerrado. Segundo, ele pode ser utilizado para devolver um valor a função que o chamou. O primeiro programa (EXEMPLO-1) dá uma demonstração de como as funções podem trocar valores entre si: // Exemplo de variáveis globais e locais // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> int somatorio; // VARIÁVEL GLOBAL! SERÁ ACESSADA POR TODAS AS FUNÇÕES void soma (int valor) //AO ACESSAR ESTA FUNÇÃO, O PARÂMETRO VALOR RECEBE DADOS DE QUEM O CHAMOU int conta; // VARIÁVEL LOCAL! SERÁ ACESSADA APENAS PELA FUNÇÃO SOMA somatorio = somatorio + valor; printf("0"); for (conta = 1;(conta<(valor+1));conta++) printf("+%u",conta); printf(" = %u\r\n",somatorio); void main() WDTCTL = WDTPW+WDTHOLD; // Stop WDT int conta; // VARIÁVEL LOCAL! SERÁ ACESSADA APENAS PELA FUNÇÃO MAIN somatorio = 0; // A VARIÁVEL GLOBAL É INICIALIZADA for (conta=1;conta<20;conta++) soma(conta); // É CHAMADA A FUNÇÃO SOMA, ONDE É PASSADO O VALOR DE CONTA Página 96

3 19.2. Passagem de parâmetros Fixo (por valor) Exatamente como vem sendo executado até agora nos programas exemplos Variável (por referência) Utilizando ponteiros. Veja o exemplo abaixo (EXEMPLO-15): // Exemplo de funções // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Extraído do Livro "PIC - Programação em C", do Fábio Pereira // Editora Érica - Página 141 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> float divide ( float a, float b) if (!b) return 0; a /= b; return a; main ( ) float a, b, c ; a = 7 ; b = 3 ; c = divide ( a, b ); printf("a = %f, b = %f, c = %f \n", a, b, c); Protótipos de função Em programas profissionais, muito extensos, com diversas funções, pode acontecer de determinada função ser chamada e ainda não ter sido definida. Isto irá gerar um erro no compilador. Para evitar que isto ocorra, utiliza-se o protótipo da função, que será uma declaração prévia com o intuito de informar ao compilador que mais adiante no programa esta função será definida. Para isto basta colocar a primeira linha da função, que contem os dados do tipo da função, do nome da função e os parâmetros da função, como pode ser visto abaixo: tipo da função nome_da_função (parâmetros) Página 97

4 20. Tipos de dados avançados Ponteiros Ponteiros são um dos recursos mais poderosos da linguagem C. Qualquer programa de utilidade prática escrito em C dificilmente dispensará o uso de ponteiros. A tentativa de evitálos implicará quase sempre códigos maiores e de execução mais lenta. Para quem está começando, pode parecer (e algumas vezes é) um tanto difícil. Mas não há outro caminho senão enfrentar a realidade. São muitas as aplicações de ponteiros. A seguir, relação das mais comuns. Acessar endereços de memória que o programa aloca em tempo de execução. Acessar variáveis que não são visíveis em uma função. Manipulação de arrays. Manipulação de strings. Passar o endereço de uma função para outra. Retornar mais de um valor para uma função. Genericamente, um ponteiro é uma variável utilizada para guardar o endereço de outra variável, ou seja, um ponteiro é um apontador de outra variável. Veja um exemplo de ponteiros no programa (EXEMPLO-16): // Exemplo de ponteiro // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> int main() char letra = 's'; int idade = 35; char nome[10] = "samuel"; float peso = 87.8; float altura = 1.82; printf("exibindo o endereço de memória de variáveis\n\n"); printf("o valor da variável letra é %c e seu endereço é %x\n",letra,&letra); printf("o valor da variável idade é %d e seu endereço é %x\n",idade,&idade); printf("o valor da variável nome é %s e seu endereço é %x\n",nome,&nome); printf("o valor da variável peso é %2.1f e seu endereço é %x\n",peso,&peso); printf("o valor da variável altura é %1.2f e seu endereço é %x\n",altura,&altura); Para entender exatamente como os ponteiros podem ser utilizados, execute os programas exemplos que vão de (EXEMPLO-18) a (EXEMPLO-23). Página 98

5 (EXEMPLO-18) // Exemplo de ponteiro // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> /* atribuindo valor a uma variável ponteiro */ int main() int idade = 35; int *ptr_idade; ptr_idade = &idade; /* foi atribuído o endereço da variável idade a variável ponteiro ptr_idade. Observe o uso do operador & que devolve o endereço de memória da variável idade. */ printf("o valor da variável idade é %d\n",idade); printf("o endereço da variável idade é %x\n",&idade); printf("o valor da variável ponteiro ptr_idade é %x\n",ptr_idade); return(0); (EXEMPLO-19) // Exemplo de ponteiro // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> /* atribuindo valor a uma variável ponteiro */ int main() int idade = 35; int *ptr_idade; ptr_idade = &idade; /* foi atribuído o endereço da variável idade a variável ponteiro ptr_idade. Observe o uso do operador & que devolve o endereço de memória da variável idade. */ printf("o valor da variável idade é %d\n",idade); printf("o endereço da variável idade é %x\n",&idade); printf("o valor da variável ponteiro ptr_idade é %x\n",ptr_idade); printf("o valor apontado por ptr_idade é %d\n",*ptr_idade); /* observe, na linha acima, o uso do operador de indireção ( * ) * para desreferenciar o ponteiro ptr_idade e, assim, exibir * o valor armazenado no endereço de memória apontado por ele. */ return(0); Página 99

6 (EXEMPLO-20) // Exemplo de ponteiro // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> /* Alterando o valor armazenado no endereço apontado * por um ponteiro */ int main() int numero = 35; int *ptr; ptr = &numero; /* atribuindo o endereço de numero a ptr */ printf("o ponteiro ptr armazena o endereço %x que,\npor sua vez,\ armazena o valor %d\n",ptr,*ptr); *ptr = 25; /* alterando o valor armazenado no endereço * apontado por ptr. Observe que o ponteiro * deve ser desreferenciado.*/ printf("\nagora o ponteiro ptr armazena o endereço %x que,\npor sua vez,\ armazena o valor %d\n",ptr,*ptr); return(0); (EXEMPLO-21) // Exemplo de ponteiro // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> /* ponteiros como parâmteros de função */ /* a função que recebe como argumento o valor * da variável não consegue alterar o valor * deste */ int valor(int a) a = 35;/* alterando o valor do argumento passado */ /* a função que recebe como argumento um ponteiro * consegue alterar o valor apontado por este*/ int ponteiro(int *a) *a = 35; /* alterando o valor do argumento passado */ int main() int nr = 26; int *ptr_nr; printf("o valor inicial de nr é %d\n",nr); valor(nr); /* função que recebe o valor. Não consegue alterar este */ printf("valor de nr após a chamada da função valor = %d\n",nr); ptr_nr = &nr; ponteiro(ptr_nr); /* função que recebe ponteiro. Consegue alterar valor * apontado*/ printf("valor de nr após a chamada da função ponteiro = %d\n",nr); return(0); Página 100

7 (EXEMPLO-22) // Exemplo de ponteiro // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> /* visualizando como funciona a aritmética de ponteiros */ int main() char letra[6] = 'a','e','i','o','u','\0'; int contador, nr[5] = 30,12,67,13,41; char *ptr_letra; int *ptr_nr; ptr_letra = letra; ptr_nr = nr; printf("visualizando como funciona a aritmética de ponteiros\n"); printf("\nmatriz letra = a, e, i, o, u\n"); printf("matriz nr = 30,12,67,13,41\n"); printf("\nverificando o tamanho dos tipos de dados\n"); printf("tamanho do tipo de dado char = %d\n",sizeof(char)); printf("tamanho do tipo de dado int = %d\n",sizeof(int)); printf("\nponteiro para letra aponta para %c no endereço %x\n",*ptr_letra,ptr_letra); printf("ponteiro para nr aponta para %d no endereço %x\n",*ptr_nr,ptr_nr); printf("\nincrementando os ponteiros\n"); printf("ptr_letra + 3, ptr_nr + 2\n"); ptr_letra += 3; ptr_nr += 2; printf("\nponteiro para letra agora aponta para %c no endereço %x\n",*ptr_letra,ptr_letra); printf("ponteiro para nr agora aponta para %d no endereço %x\n",*ptr_nr,ptr_nr); return(0); Página 101

8 (EXEMPLO-23) // Exemplo de ponteiro // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> /* percorrendo uma matriz de strings com um ponteiro */ int main() char *dia[] = "Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado",0; char **ptr_dia; /* *dia é um ponteiro para uma string e * **ptr_dia é um ponteiro para um ponteiro para uma string */ ptr_dia = dia; /* apontando ptr_dia para o início da matriz dia */ while(*ptr_dia) printf("%s\n",*ptr_dia); ptr_dia++; return(0); /* Quando você declara uma matriz de strings o compilador * não acrescenta um caractere NULL para indicar o final * da matriz como o faz com uma matriz de caracteres (strings). * Por isso você mesmo tem que inserir o caractere NULL para * indicar o final da matriz. * * Foi isso que foi feito ao inserir 0 no final da matriz dia */ Matrizes de dados Uma matriz é uma estrutura de dados que pode armazenar vários valores do mesmo tipo. A sintaxe para declarar uma matriz é: TIPO nome_da_matriz [QUANTIDADE]; Onde: TIPO: é o tipo dos dados que serão armazenados na matriz. Todos os dados colocados na matriz devem ser deste tipo. NOME: é o nome a ser dado a matriz. Este nome identificará a matriz no código do programa. QUANTIDADE: é a quantidade máxima de itens a ser armazenados. Página 102

9 Exemplo: int nr_de_livros [50]; //esta matriz pode armazenar até 50 valores do tipo int float nota [30]; //esta matriz pode armazenar até 30 valores do tipo float Os valores armazenados na matriz são chamados de "elementos da matriz". O primeiro elemento da matriz é indexado como item zero e o último é indexado como QUANTIDADE menos 1. Assim, para nossa matriz nota, mostrada no exemplo acima, o primeiro elemento é nota[0] e o último elemento é nota[29]. Você pode inicializar os elementos de uma matriz na sua declaração usando a sintaxe: int notas [5] = 60,70,35,50,68; // No exemplo acima o elemento zero da matriz notas receberá o valor 60, o elemento 1 receberá o valor 70, e assim por diante. Para melhorar o entendimento observe o código do exemplo (EXEMPLO-24). Esta matriz pode armazenar até 50 valores do tipo int // Exemplo de matriz // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> int main() int notas[5] = 60,70,35,50,68; printf("analisando os elementos da matriz notas\n"); printf("o primeiro elemento tem o valor %d\n",notas[0]); printf("o segundo elemento tem o valor %d\n",notas[1]); printf("o terceiro elemento tem o valor %d\n",notas[2]); printf("o quarto elemento tem o valor %d\n",notas[3]); printf("o quinto e último elemento tem o valor %d\n",notas[4]); return(0); Página 103

10 Praticamente o mesmo efeito obtido pelo exemplo anterior pode ser obtido de modo muito mais eficiente pelo próximo programa (EXEMPLO-25): // Exemplo de matriz // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> int main() int notas[5] = 60,70,35,50,68; int contador; printf("analisando os elementos da matriz notas\n"); for(contador = 0;contador < 5;contador++) printf("o %do elemento tem o valor %d\n",contador+1,notas[contador]); return(0); Para entender exatamente como as matrizes podem ser utilizadas, execute os programas (EXEMPLO-26) e (EXEMPLO-27). (EXEMPLO-26) // Exemplo de matriz // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> /* visualizando strings como matrizes de caracteres */ int main() char palavra[7] = "matriz"; int contador; printf("em C strings são matrizes de caracteres e podem ser manipuladas como tal.\n"); printf("\na string é %s\n",palavra); printf("\nexibindo cada elemento da matriz palavra\n"); for(contador = 0;contador < 7;contador++) printf("%c\n",palavra[contador]); return(0); Página 104

11 (EXEMPLO-27) // Exemplo de matriz // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> void exibe(int matriz[],int elementos) int contador; for(contador = 0;contador < elementos;contador++) printf("o %do elemento tem o valor %d\n",contador+1,matriz[contador]); int main() int notas[5] = 60,70,35,50,68; int contador; printf("analisando os elementos da matriz notas\n"); exibe(notas,5); return(0); Matrizes bi-dimensionais Imagine uma matriz bidimensional como uma tabela de linhas e colunas. Por exemplo, a matriz: pesos [3][5]; Ela pode ser imaginada como o seguinte arranjo de linhas e colunas, formando células: Observe que o primeiro índice ([3]) indica as linhas da matriz e o segundo ([5]) indica as colunas. Como sabemos que [3] varia de zero a 2 e [5] varia de zero a 4, fica fácil determinar os índices de cada posição da matriz: 0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 1,4 2,0 2,1 2,2 2,3 2,4 Página 105

12 Visto a posição de cada índice vamos preencher nossa matriz pesos com valores: De tudo que foi exposto acima podemos entender que: pesos [1][3] = 82; pesos [0][4] = 36; pesos [0][0] = 10; pesos [2][4] = 74; Para preencher nossa matriz com os valores mostrados na tabela acima podemos usar uma declaração como: int pesos [3][5] = 10,30,45,70,36,86,44,63,82,80,70,61,52,63,74; Podemos manipular os elementos de nossa matriz bidimensional usando duas variáveis e um laço for da mesma maneira que fizemos com as matrizes comuns. Observe o código do programa (EXEMPLO-28): // Exemplo de matriz // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> /* manipulando uma matriz bidimensional */ int main() int pesos[3][5] = 10,30,45,70,36, 86,44,63,82,80, 70,61,52,63,74; int linha,coluna; for(linha = 0;linha < 3;linha++) for(coluna = 0;coluna < 5; coluna++) printf("elemento[%d][%d] = %d\n",linha,coluna,pesos[linha][coluna]); return(0); Página 106

13 Passando uma matriz bi-dimensional para uma função Uma função que manipula uma matriz bidimensional deve receber a matriz e o número de linhas desta matriz. O número de colunas da matriz também deve estar especificado nesta declaração. Ao chamar a função, deve-se passar a matriz e o número de linhas. Como isto funciona? Veja o programa (EXEMPLO-29): // Exemplo de matriz // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> /* manipulando uma matriz bidimensional */ void exibe(int matriz[][5], int linhas) int linha,coluna; for(linha = 0;linha < 3;linha++) for(coluna = 0;coluna < 5; coluna++) printf("elemento[%d][%d] = %d\n",linha,coluna,matriz[linha][coluna]); int main() int pesos[3][5] = 10,30,45,70,36, 86,44,63,82,80, 70,61,52,63,74; exibe(pesos,3); return(0); Estruturas de dados As estruturas são utilizadas para agrupar informações relacionadas de tipos de dados diferentes. Digamos que você precisa controlar os seguintes dados relacionados ao estoque de um pequeno estabelecimento comercial: código nome do produto quantidade estocada valor de compra valor a ser vendido lucro observacões sobre o produto Página 107

14 Este seria um caso para o uso de estruturas, pois relacionados a cada produto teremos dados do tipo int(código,quantidade), char(nome, observações) e float(valor de compra, valor de venda, lucro). A sintaxe para a declaração (ou criação) de uma estrutura é: struct nome_da_estrutura tipo campo1; tipo campo1;... tipo campon; Para o caso exemplificado no item anterior poderíamos ter algo como: struct produto int codigo; char nome[50]; int quantidade; float valor_compra; float valor_venda; float lucro; char obs[200]; É importante observar que a declaração da estrutura não cria, ainda, uma variável. A declaração da estrutura apenas cria um novo tipo de dado. Após criar a estrutura você pode declarar variáveis do tipo de estrutura criado Declarando variáveis do tipo de uma estrutura criada Após a declaração da estrutura você pode declarar variáveis do tipo da estrutura com a sintaxe: struct nome_da_estrutura nome_da_variável struct produto item Página 108

15 Observe que esta sintaxe obedece a sintaxe normal para a declaração de variáveis: tipo nome_da_variável sendo que o TIPO da variável, a nova estrutura criada. Você também pode declarar a variável logo após a declaração da estrutura com uma sintaxe do tipo: struct produto int codigo; char nome[50]; int quantidade; float valor_compra; float valor_venda; float lucro; char obs[200]; item; Acessando os campos de uma estrutura A sintaxe para acessar e manipular campos de estruturas é a seguinte: nome_da_estrutura.campo Observe o código do programa (EXEMPLO-30), mostrado a seguir, para um melhor esclarecimento: Página 109

16 // Exemplo de struct // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> /* acessando os campos de uma estrutura */ /* criando um novo tipo de dado "produto" */ struct produto int codigo; char nome[50]; int quantidade; float valor_compra; float valor_venda; ; int main() struct produto item; /* declarando uma variável "item" do tipo "struct produto" */ printf("preenchendo a variável \"item\"\n"); printf("item...:\n"); fgets(item.nome,50,stdin); // este commando apenas funciona com a FULLDLIB printf("código...:\n"); scanf("%d",&item.codigo); printf("quantidade...:\n"); scanf("%d",&item.quantidade); printf("valor de compra.:\n"); scanf("%f",&item.valor_compra); printf("valor de revenda:\n"); scanf("%f",&item.valor_venda); printf("\n"); printf("exibindo os dados\n"); printf("código...:%d\n",item.codigo); printf("item...:%s\n",item.nome); printf("quantidade...:%d\n",item.quantidade); printf("valor de compra.:%.2f\n",item.valor_compra); printf("valor de revenda:%.2f\n",item.valor_venda); return(0); Acessando uma estrutura com ponteiros Para acessar uma estrutura usando ponteiros você pode usar duas sintaxes: (*nome_da_estrutura).campo nome_da_estrutura -> campo Observe o código do programa (EXEMPLO-31), mostrado a seguir, para um melhor esclarecimento: Página 110

17 // Exemplo de struct // // Alessandro Ferreira da Cunha // Tech Training - Engenharia e Treinamentos // Janeiro 2009 // Built with IAR Embedded Workbench Version: #include <msp430xg46x.h> #include <stdio.h> /* acessando uma estrutura com ponteiros */ struct registro char nome[30]; int idade; ; altera_estrutura1(struct registro *ficha) (*ficha).idade -= 10; altera_estrutura2(struct registro *ficha) ficha->idade += 20; int main() struct registro ficha; printf("entre com seu nome:\n"); fgets(ficha.nome,30,stdin); // este commando apenas funciona com a FULLDLIB printf("qual sua idade?\n"); scanf("%d",&ficha.idade); printf("\nexibindo os dados iniciais\n"); printf("nome: %s \n",ficha.nome); printf("idade: %d.\n",ficha.idade); altera_estrutura1(&ficha); printf("\nexibindo os dados após a primeira alteração\n"); printf("nome: %s \n",ficha.nome); printf("idade: %d.\n",ficha.idade); altera_estrutura2(&ficha); printf("\nexibindo os dados após a segunda alteração\n"); printf("nome: %s \n",ficha.nome); printf("idade: %d.\n",ficha.idade); return(0); Página 111

18 20.4. Uniões Em C uma union é uma posição de memória que é compartilhada por duas ou mais variáveis diferentes, geralmente de tipo de diferentes, em momentos diferentes. A definição de uma union é semelhante à definição de estrutura. Sua forma geral é: union identificador tipo nome_da_variável; tipo nome_da_variável; tipo nome_da_variável;... variáveis_união; Exemplo: union teste int i; char ch; ; Página 112

19 21. EXERCÍCIO: Tipos de dados avançados Armazenamento e tratamento de dados (EXERCÍCIO-13) Já foi identificado no diagrama elétrico da Experimenter Board, mostrado no item 9, as seguintes conexões, envolvendo pinos do MSP430FG4618 e hardwares externos: a) Botão S1 pino P1.0; b) Botão S2 pino P1.1; c) LED1 pino P2.1; d) LED2 pino P2.2; e) LED4 pino P5.1. Com estas informações escreva um programa que execute o algoritmo mostrado abaixo, de modo que o programa fique em Low Power Mode e apenas saia deste estado para executar ações, fazendo economia de energia e realizando as atividades pedidas. 1. Aguardar o usuário pressionar o botão S1 para iniciar as atividades. Enquanto o botão não for pressionado, a Experimenter Board deve ficar em LPM3. 2. Ao pressionar o botão S1 deve ser aceso o LED1 e o terminal I/O deve mostrar a mensagem: Insira o dado 01: E o programa deve ficar aguardando, com o LED1 aceso, o usuário inserir, via terminal I/O, um número entre 0 e Ao término da digitação, o programa deve apagar o LED1, acender o LED2 e aguardar o usuário pressionar o botão S2. Enquanto o usuário não pressionar o botão S2, a Experimenter Board deve ficar em LPM3. 4. Ao pressionar o botão S2 deve ser aceso o LED1 e o terminal I/O deve mostrar a mensagem: Insira o dado 02: E o programa deve ficar aguardando, com o LED1 aceso, o usuário inserir, via terminal I/O, um número entre 0 e O ciclo composto pelos passos 2, 3 e 4 deve se repetir até que o usuário entre com o vigésimo dado. 6. Ao final da entrada do vigésimo dado o LED4 deve ficar aceso e a Experimenter Board deve ficar em LPM3 enquanto o usuário não pressionar o botão S1. Página 113

20 7. Ao pressionar o botão S1, o LED4 deve ser apagado, o LED1 deve ser aceso e o terminal I/O deve mostrar a mensagem: O dado 01 é XX Onde XX é exatamente o mesmo valor que foi inserido pelo usuário no passo Um segundo após mostrar a mensagem, o LED1 deve ser apagado, o LED4 aceso e a Experimenter Board deve ficar em LPM3 enquanto o usuário não pressionar o botão S1. 9. Ao pressionar o botão S1, o LED4 deve ser apagado, o LED1 deve ser aceso e o terminal I/O deve mostrar a mensagem: O dado 02 é YY Onde YY é exatamente o mesmo valor que foi inserido pelo usuário no passo Um segundo após mostrar a mensagem, o LED1 deve ser apagado, o LED4 aceso e a Experimenter Board deve ficar em LPM3 enquanto o usuário não pressionar o botão S O ciclo composto pelos passos 7, 8, 9 e 10 deve se repetir até que seja mostrado no terminal I/O o último dado armazenado. 12. Ao final da amostragem do vigésimo dado o programa deve retornar ao passo 1, e recomeçar tudo novamente. Página 114

21 22. REAL TIME CLOCK Este periférico presente nos chips da família 4 é composto de registradores de propósito geral que podem ser configurados como um timer de 32 bits ou como um relógio de tempo real. Dentre as funcionalidades deste módulo estão: Modos de funcionamento como relógio e calendário Contador de 32 bits com fonte de clock de contagem selecionável Quando configurado no modo calendário é feito o incremento automático dos segundos, minutos, horas, dias da semana, dia do mês, mês e ano Capacidade de gerar interrupções Capacidade de trabalhar em BCD O diagrama deste módulo é mostrado na figura abaixo: Todos os valores dos registradores que pertencem ao módulo RTC tem valor inicial em estado X. Isto significa que o programador deve inicializar cada um deles adequadamente. Página 115

22 Os modos de funcionamento são ajustáveis pelo registrador RTCCTL (Real Time Clock Control Register), mostrado a seguir: Página 116

23 22.1. Operação como contador Os bits RTCMODEx com qualquer valor diferente de 11 fazem o módulo RTC operar como um contador de 32 bits, totalmente acessível via software. Caso haja uma troca do modo de operação de contador para RTC todos os registradores com valores serão resetados. Quatro resitradores de 8 bits são cascateados (RTCNTx), formando um contador de 32 bits. Com esta arquitetura é possível obter interrupções quando ocorre um estourou em qualquer um destes quatro registradores (em 8 bits, 16 bits, 24 bits ou 32 bits). Qualquer um destes registradores são totalmente acessíveis para escrita ou leitura Operação como calendário Quando os bits RTCMODEx são ajustados com 11 módulo RTC opera como calendário. Neste modo de operação o RTC fornecerá segundos, minutos, horas, dia da semana, dia do mês, mês e ano. Estas informações podem ser fornecidas em formato hexadecimal ou em BCD. Caso haja uma troca do modo de operação de RTC para contador faz com que os registradores dos com valores segundos, minutos, horas, dia da semana e ano sejam restados. Já os registradores com os valores do dia do mês e do mês serão receberão os valor 1. O algoritmo interno deste módulo permite ajuste de data em qualquer dia entre os anos de 1901 e 2099, incluindo a contagem dos anos bissextos. 32 bits, totalmente acessível via software. Caso haja uma troca do modo de operação de contador para RTC ou vice-versa, todos os registradores com valores serão resetados Interação entre o RTC e o Basic Timer 1 Quando o RTC está ajustado para o modo de calendário, o Basic Timer 1 é automaticamente configurado como um divisor prévio para o RTC, com os dois registradores de 8 bits do Basic Timer cascateados e o ACLK selecionado como fonte de clock do Basic Timer. Os ajustes que tenham sido feitos nos bits BTSSEL, BTHOLD and BTDIV do Basic Timer serão ignorados. O bit RTCHOLD do módulo RTC passará a controlar os dois periféricos simultaneamente (RTC e BT1). Página 117

24 22.4. As interrupções do RTC O módulo RTC utiliza duas fontes de controle de interrupção: BT1IF RTCIE O RTC compartilha as flags com o BT1. Quando RTCIE = 0, o BT1 passará a controlar a interrupção através do bit BTIPx. Neste caso, os bits RTCTEVx serão responsáveis por selecionar o intervalo em que será setado o bit RTCIF, mas este bit, mesmo quando levado para nível lógico 1, não irá gerar um evento de interrupção. Mesmo assim ainda haverá a necessidade de que o software apague o bit RTCIF para que haja um novo registro de que aconteceu mais uma interrupção. Quando RTCIE = 1, o RTC passará a controlar a interrupção e os bits BTIPx serão ignorados. Neste caso, os bits RTCFG e BT1FG serão setados a cada intervalo de tempo que foi previamente ajustado pelos bits RTCEVx. Um evento de interrupção será gerado automaticamente cada vez que um destes dois bits sejam setados, desde que o bit GIE já esteja ajustado. Ao entrar na rotina de interrupção estes dois bits serão resetados automaticamente, não necessitando de intervenção do programador. Mesmo assim ainda haverá a necessidade de que o software apague o bit RTCIF para que haja um novo registro de que aconteceu mais uma interrupção Todos os registradores do RTC A listagem de todos os registradores utilizados no RTC são mostrados na figura a seguir. Página 118

25 Página 119

26 Observe o código do programa (EXEMPLO-31), mostrado a seguir, para um melhor esclarecimento: // MSP430xG461x Demo - Real Time Clock, Toggle P5.1 Inside ISR, 32kHz ACLK // // Description: This program toggles P5.1 by xor'ing P5.1 inside of // a Real Time Clock ISR. The Real Time Clock ISR is called once a minute using // the Alarm function provided by the RTC. ACLK used to clock basic timer. // ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = Hz // //* An external watch crystal between XIN & XOUT is required for ACLK *// // // MSP430FG4619 // // / \ XIN - // 32kHz // -- RST XOUT - // // P5.1 -->LED // // S.Schauer / A. Dannenberg // Texas Instruments Inc. // June 2007 // Built with IAR Embedded Workbench Version: 3.42A #include <msp430xg46x.h> // void main(void) WDTCTL = WDTPW + WDTHOLD; // Stop Watchdog Timer FLL_CTL0 = XCAP14PF; // Configure load caps RTCCTL = RTCBCD+RTCHOLD+RTCMODE_3+RTCTEV_0+RTCIE; // RTC enable, BCD mode, // alarm every Minute, // enable RTC interrupt // Init time RTCSEC = 0x00; // Set Seconds RTCMIN = 0x00; // Set Minutes RTCHOUR = 0x08; // Set Hours // Init date RTCDOW = 0x02; RTCDAY = 0x23; RTCMON = 0x08; RTCYEAR = 0x2005; RTCCTL &= ~RTCHOLD; P5DIR = 0x02; bis_sr_register(lpm3_bits + GIE); // Set DOW // Set Day // Set Month // Set Year // Enable RTC // Set P5.1 to output direction // Enter LPM3 w/ interrupt // Basic Timer interrupt service routine #pragma vector=basictimer_vector interrupt void basic_timer(void) P5OUT ^= 0x02; // Toggle P5.1 using exclusive-or Página 120

27 23. EXERCÍCIO: Relógio digital Relógio Digital com RTC (EXERCÍCIO-14) Já foi identificado no diagrama elétrico da Experimenter Board, mostrado no item 9, as seguintes conexões, envolvendo pinos do MSP430FG4618 e hardwares externos: a) Botão S1 pino P1.0; b) Botão S2 pino P1.1; c) LED1 pino P2.1; d) LED2 pino P2.2; e) LED4 pino P5.1. Com estas informações escreva um programa que execute o algoritmo mostrado abaixo, de modo que o programa fique em Low Power Mode e apenas saia deste estado para executar ações, fazendo economia de energia e realizando as atividades pedidas. 1. Aguardar o usuário pressionar o botão S1 para iniciar as atividades. Enquanto o botão não for pressionado, a Experimenter Board deve ficar em LPM3. 2. Ao pressionar o botão S1 deve ser aceso o LED1 e o terminal I/O deve mostrar a mensagem: Insira o ano: E o programa deve ficar aguardando, com o LED1 aceso, o usuário inserir, via terminal I/O, o ano atual. 3. Ao término da digitação, o programa deve apagar o LED1, acender o LED2 e aguardar o usuário pressionar o botão S2. Enquanto o usuário não pressionar o botão S2, a Experimenter Board deve ficar em LPM3. 4. Ao pressionar o botão S2 deve ser aceso o LED1 e o terminal I/O deve mostrar a mensagem: Insira o mês: E o programa deve ficar aguardando, com o LED1 aceso, o usuário inserir, via terminal I/O, o mês atual. 5. O ciclo composto pelos passos 2, 3 e 4 deve se repetir até que o usuário entre com o o ano, mês, dia da semana, dia do mês, hora, minuto e segundo atual. 6. Ao terminar este processo o LED4 deve ficar aceso e a Experimenter Board deve ficar em LPM3 enquanto o usuário não pressionar o botão S1. Página 121

28 7. Ao pressionar o botão S1, o LED4 deve ser apagado, o LED1 deve ser aceso e o terminal I/O deve mostrar a mensagem: Hora do alarme: E o programa deve ficar aguardando, com o LED1 aceso, o usuário inserir, via terminal I/O, a hora do alarme. 8. Ao término da digitação, o programa deve apagar o LED1, acender o LED4 e aguardar o usuário pressionar o botão S1. Enquanto o usuário não pressionar o botão S1, a Experimenter Board deve ficar em LPM3. 9. Ao pressionar o botão S1, o LED4 deve ser apagado, o LED1 deve ser aceso e o terminal I/O deve mostrar a mensagem: Minuto do alarme: E o programa deve ficar aguardando, com o LED1 aceso, o usuário inserir, via terminal I/O, a hora do alarme. 10. Ao término da digitação, o programa deve apagar o LED1, acender o LED4 e aguardar o usuário pressionar o botão S1. Enquanto o usuário não pressionar o botão S1, a Experimenter Board deve ficar em LPM Ao pressionar o botão S1, o LED4 deve ser apagado, o LED1 deve ser aceso e o terminal I/O deve mostrar a mensagem: Segundo do alarme: E o programa deve ficar aguardando, com o LED1 aceso, o usuário inserir, via terminal I/O, a hora do alarme. 12. Ao término da digitação, o programa deve passar a piscar rapidamente os três LEDs da placa (LED1, LED2 e LED4) a cada segundo computado pelo RTC. Quando o RTC atingir o horário estipulado pelo alarme, o buzzer deve soar por um minuto e o programa deve voltar ao passo inicial. Durante todo este processo a Experimenter Board deve ficar em LPM3 na maior parte do tempo possível. Página 122

29 24. CONTROLADOR DE DISPLAY DE LCD O hardware LCD_A tem a capacidade de alimentar diretamente displays de LCD através da criação de sinais AC por segmento e tensões comuns automaticamente. Suas principais características são: Uma memória onde são armazenados os dados a serem exibidos no display; Geração automática dos sinais necessários ao funcionamento do display; Freqüência de exibição de quadro configurável; Possibilidade de piscar o display independentemente do sinal de clock; Fonte de alimentação regulada; Controle de contraste via software; Suporte a quatro tipos de displays de LCD: o Estático; o 2-mux, ½ bias ou ⅓ bias o 3-mux, ½ bias ou ⅓ bias o 4-mux, ½ bias ou ⅓ bias. O diagrama em blocos deste controlador pode ser visto na figura a seguir: Memória para o LCD No mapeamento de memória do MSP 430 existe um trecho dedicado ao funcionamento do controlador de LCD, conforme mostrado na figura a seguir. Cada um dos bits deste mapeamento de memória corresponde a um segmento do display de LCD, o que pode ser utilizado ou não, dependendo do modelo do LCD e do dispositivo utilizado. Acionar um determinado segmento do display LCD corresponde a colocar um bit em nível lógico Piscando o LCD O controlador de LCD permite que todos os segmentos ativos pisquem, sem a necessidade de modificação da taxa de tempo. Isto é feito através do bit LCDSON. Quando LCDSON = 1, cada segmento que está ativo permanece ligado. Os segmentos que não estão ativos permanecem desligados. Quando LCDSON = 0, todos os do LCD são desligados, independentemente de seu estado ativo ou não. Página 123

30 Página 124

31 24.3. Controle de tensão e de geração de sinal de offset O módulo LCD permite selecionar qual será a fonte para gerar o sinal de tensão de saída que é aplicada aos planos de fundo (back planes) do display (chamada de tensão V1), bem como a fração desta tensão que será utilizada como offset (de V2 a V5). Isto possibilita que o LCD seja alimentado através do AV CC, de um gerador interno ou de uma fonte externa ao microcontrolador. Todas as fontes de alimentação internas são desligadas quando o ACLK está desligado (OSCOFF = 1) ou quando o módulo LCD_A é desligado (LCDON = 0) Selecionando as fontes de tensão Para determinar qual será a fonte de tensão a ser utilizada pelo módulo é necessário atuar sobre dois registradores de controle vistos a seguir: LCDAVCTL0 e LCDAVCTL0. Eles atuam sob o hardware de tensão mostrado a seguir. Página 125

32 Página 126

33 Controle de contraste. A tensão de saída em conjunto com o modo de operação e o offset determinam qual será o contraste a ser utilizado no LCD. Assim, um ajuste de contraste via software necessitará que seja feito um ajuste no gerador de voltagem, atuando sobre os bits V LCDx, presentes no registrador LCDAVCTL0. A taxa de contraste dependerá display LCD utilizado e do offset escolhido. Um exemplo desta configuração é mostrada na tabela abaixo. Página 127

34 24.4. Freqüência de operação do LCD_A O módulo LCD_A utiliza o sinal f LCD (proveniente do Basic Timer), que deve ser previamente ajustado a partir do ACLK para gerar a base de tempo necessária ao funcionamento dos displays de LCD. O valor da freqüência a ser ajustada é controlada através dos bits LCDFREQx, presentes no registrador LCDACTL. O valor correto depende do tipo de LCD que se está utilizando. Então uma consulta ao manual do fabricante do LCD se faz necessário. A taxa de quadros que serão amostrados no display quando este fizer uso de vários back planes, e tiver a necessidade de ser multiplexado, é calculada pela expressão abaixo: f = 2 mux LCD f FRAME Por exemplo: um LCD com três back planes, que necessita de um mux de três vias, com uma freqüência de quadro entre 30 Hz e 100 Hz: f = 2 3 LCD f FRAME flcd = 180 Hz f = 600Hz MÍNIMO LCD MÁXIMO Isto faz com que o microcontrolador seja ajustado para as seguintes opções: 32768Hz 32768Hz f LCD = = 256Hz f LCD = = 341Hz Hz f LCD = = 512Hz 64 Página 128

35 24.5. Saídas do módulo LCD Alguns dos segmentos do display de LCD são multiplexados com funções de I/O digital. Então estes pinos podem ter a função de I/O ou de LCD. Em que momento cada pino deste será ajustado para qual função dependerá exclusivamente do ajuste feito através do registrador PxSELx aplicável a porta onde o LCD está conectado. Página 129

36 24.6. Modo estático (um único back plane) Neste modo cada pino de segmento do driver do MSP430 controla apenas um segmento de LCD e apenas a linha comum COM0 é utilizada. Um exemplo dos sinais gerados seguir e da conexão a ser feita pode ser vista nas figuras abaixo. Página 130

37 24.7. Modo 2-Mux (dois back planes) Página 131

38 24.8. Modo 3-Mux (três back planes) Página 132

39 24.9. Modo 4-Mux (quatro back planes) Página 133

40 Outros registradores que controlam o LCD Página 134

41 25. EXERCÍCIO: Configurar e utilizar o display de LCD da Experimenter Board. O Primeiro passo para configurar e utilizar o display de LCD presente na Experimenter Board é buscar o datasheet do mesmo, o que pode ser feito através do site do fabricante. O modelo na placa é o SBLCDA4. O segundo passo é verificar como os terminais do display estão conectados na placa, o que é feito no próximo item. Página 135

42 25.1. O display LCD da Experimenter Board A conexão entre os pinos do Display SoftBaugh SBLCDA4 e o MSP430FG4618 são mostrados nas duas figuras a seguir. A seguir são mostrados todos os segmentos deste display e a suas respectivas numerações. Página 136

43 Página 137

44 25.2. (EXERCÍCIO-15) Mapear a memória do MSP430 Preencha o mapeamento de memória do MSP430 mostrado abaixo adequadamente. Para isto você deve indicar onde cada bit da memória representa cada um dos segmentos do display SBLCDA4 da SoftBaugh. Página 138

45 25.3. (EXERCÍCIO-16) Relógio Digital com display de LCD Aproveite o exercício 5, que foi desenvolvido para o RTC, e faça com que as mensagens que são enviadas ao Terminal I/O, para entrada e saída de dados, sejam mostradas no Display de LCD. Para isto, crie imagens que substituam adequadamente as mensagens e que possibilitem ao usuário o entendimento do que se está pedindo para fazer. Não formataremos qual é esta mensagem. Deixaremos que utilizem sua criatividade! (EXERCÍCIO-17) Relógio Digital com display de LCD Utilize o exercício anterior e acrescente a seguinte funcionalidade a ele: Para ativar o programa (sair do estado inicial de Low Power Mode), o usuário deve manter pressionado o botão S1 por 30 segundos. Somente após este tempo é que o software deve iniciar os procedimentos de entrada para ajuste do relógio e do despertador. Página 139

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA CURSO DE ENGENHARIA DE COMPUTAÇÃO. EletroTerm

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA CURSO DE ENGENHARIA DE COMPUTAÇÃO. EletroTerm PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA CURSO DE ENGENHARIA DE COMPUTAÇÃO EletroTerm CURITIBA 2009 Leandro Alves de Menezes EletroTerm Documentação referente

Leia mais

Funções em Linguagem C Parte II

Funções em Linguagem C Parte II Slides inicialmente preparados pelo Prof. Dr. Claudio Fabiano Motta Toledo Funções em Linguagem C Parte II Profa. Dra. Elisa Yumi Nakagawa 1. Semestre 2017 Sumário Introdução a Ponteiros Escopo de Variáveis

Leia mais

PROGRAMAÇÃO DO TREINAMENTO:

PROGRAMAÇÃO DO TREINAMENTO: PROGRAMAÇÃO DO TREINAMENTO: Página 2 0. Objetivos deste treinamento Quem está fazendo este módulo avançado II é porque já passou pelos módulos anteriores. Portanto não serão abordados aqui os tópicos já

Leia mais

Linguagem C. Programação Estruturada. Estrutura de Dados Heterogêneos. Prof. Luis Nícolas de Amorim Trigo

Linguagem C. Programação Estruturada. Estrutura de Dados Heterogêneos. Prof. Luis Nícolas de Amorim Trigo Programação Estruturada Linguagem C Estrutura de Dados Heterogêneos Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.br Sumário Introdução Struct Declaração Manipulação Vetor de Struct

Leia mais

MICROCONTROLADORES 2 EL08D - TURMA M12

MICROCONTROLADORES 2 EL08D - TURMA M12 MICROCONTROLADORES 2 EL08D - TURMA M12 SISTEMA DE RESET E SISTEMA DE CLOCK Prof. Gabriel Kovalhuk E-mail: Kovalhuk@utfpr.edu.br Site: http://pessoal.utfpr.edu.br/kovalhuk MSP430 SISTEMAS DE RESET E SISTEMAS

Leia mais

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência Introdução a Programação Ponteiros e Passagem de Argumentos por Referência Tópicos da Aula Hoje aprenderemos a manipular endereços de memória ou ponteiros Variáveis e Endereços Conceito de Ponteiro Operadores

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação

Leia mais

Prática de Programação. Prof. Tiago A. E. Ferreira Aula 9 Estruturas, Uniões, Enumerações e Tipos Definidos pelo Usuário

Prática de Programação. Prof. Tiago A. E. Ferreira Aula 9 Estruturas, Uniões, Enumerações e Tipos Definidos pelo Usuário Prática de Programação Prof. Tiago A. E. Ferreira Aula 9 Estruturas, Uniões, Enumerações e Tipos Definidos pelo Usuário Introdução A linguagem C/C++ permite criar tipos de dados definidos pelo usuário

Leia mais

Linguagem C: Ponteiros. Prof. Tiago Alves de Oliveira

Linguagem C: Ponteiros. Prof. Tiago Alves de Oliveira Linguagem C: Ponteiros 1 Sumário Ponteiros; Variáveis ponteiros; Operadores de ponteiros; Expressões com ponteiros; Atribuição de ponteiros; Aritmética de ponteiros; Comparação de ponteiros; Ponteiros

Leia mais

Programação I Funções. Prof. Carlos Alberto

Programação I Funções. Prof. Carlos Alberto Programação I Funções Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br Funções Funções são blocos de códigos que podem ser nomeados e chamados de dentro de um programa; Funções

Leia mais

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues SEL0433 Aplicação de Microprocessadores I Revisão da Linguagem C Prof. Evandro L. L. Rodrigues Estrutura de um programa C Diretivas de pré processamento Declaração de variáveis globais Declaração de protótipos

Leia mais

Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros

Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II Ponteiros Profa.: Simone Ceolin Slides (Prof.Tiago Rios da Rocha) Primeiro Semestre 2011 Sumário

Leia mais

Linguagem C: Ponteiros. Prof. Leonardo Barreto Campos 1

Linguagem C: Ponteiros. Prof. Leonardo Barreto Campos 1 Linguagem C: Ponteiros Prof. Leonardo Barreto Campos 1 Sumário Ponteiros; Variáveis ponteiros; Operadores de ponteiros; Expressões com ponteiros; Atribuição de ponteiros; Aritmética de ponteiros; Comparação

Leia mais

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. LINGUAGEM C: FUNÇÕES Prof. André Backes FUNÇÃO Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. printf(): função que escreve na tela scanf(): função que lê o teclado

Leia mais

Microcontroladores 2 EL08D Turma M12

Microcontroladores 2 EL08D Turma M12 Microcontroladores 2 EL08D Turma M12 Prof. Gabriel Kovalhuk E-mail: kovalhuk@utfpr.edu.br Site: http://paginapessoal.utfpr.edu.br/kovalhuk TEMPORIZADORES / CONTADORES NO MSP430 Este material foi retirado

Leia mais

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador; 1 Microprocessador Um microprocessador é um circuito eletrônico capaz de realizar diversas tarefas conforme os comandos específicos. Para isso ele deve ler esses comandos da memória de programa (ROM) e

Leia mais

Linguagem C Princípios Básicos (parte 1)

Linguagem C Princípios Básicos (parte 1) Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos

Leia mais

Conversor Analógico Digital do MSP430G2553

Conversor Analógico Digital do MSP430G2553 UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE ELETRÔNICA CURSO TÉCNICO INTEGRADO DE NÍVEL MÉDIO - ELETRÔNICA MICROCONTROLADORES 2 Conversor Analógico Digital do MSP430G2553 O MSP430G2553

Leia mais

LÓGICA DE PROGRAMAÇÃO (C) VETORES E MATRIZES. Professor Carlos Muniz

LÓGICA DE PROGRAMAÇÃO (C) VETORES E MATRIZES. Professor Carlos Muniz Vetores são estruturas de dados que armazenam usualmente uma quantidade fixa de dados de um certo tipo; por esta razão, também são conhecidos como estruturas homogêneas de dados. Internamente, um vetor

Leia mais

Ponteiros e Tabelas. K&R: Capítulo 5

Ponteiros e Tabelas. K&R: Capítulo 5 Ponteiros e Tabelas K&R: Capítulo 5 Ponteiros e Tabelas Ponteiros e endereços Ponteiros e argumentos de funções Ponteiros e tabelas Alocação dinâmica de memória Aritmética de ponteiros Tabelas de ponteiros

Leia mais

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. LINGUAGEM C: FUNÇÕES Prof. André Backes FUNÇÃO Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. printf(): função que escreve na tela scanf(): função que lê o teclado

Leia mais

CCO 016 / COM 110 Fundamentos de Programação

CCO 016 / COM 110 Fundamentos de Programação CCO 016 / COM 110 Fundamentos de Programação Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 12 Agregados Homogêneos Variáveis Indexadas matrizes Variáveis Indexadas bi dimensionais

Leia mais

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal Exercício Crie uma função que recebe o número de dias até um determinado evento e calcula e retorna o equivalente em meses, semanas e dias, sem usar vetor ou o conceito de vetor. Considerar que todos os

Leia mais

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Estruturas de Dados Revisão de Ponteiros Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros e Arranjos

Leia mais

MSP 430 Lab 04 Fontes de clock e configuração das entradas e saídas digitais

MSP 430 Lab 04 Fontes de clock e configuração das entradas e saídas digitais MSP 430 Lab 04 Fontes de clock e configuração das entradas e saídas digitais Teste com o sociloscópio Neste Lab iremos descrever os passos necessários para inicialização de duas fontes de clock da CPU

Leia mais

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO Ponteiros Definição Variável: área de memória que armazena dados de um certo tipo. Na memória, toda variável possui um endereço. Um Ponteiro é uma variável especial

Leia mais

Programação: Vetores

Programação: Vetores Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia

Leia mais

11a. Aula Ponteiros e Vetores

11a. Aula Ponteiros e Vetores 11a. Aula Ponteiros e Vetores 2013.2 2 É um tipo de variável com uma ressalva...... armazena apenasendereçode memória (ou null) Se eu tiver o endereço da casa de Francisca, eu poderei visitá-la e lhe fazer

Leia mais

A sintaxe para se declarar uma variável do tipo ponteiro é dada por:

A sintaxe para se declarar uma variável do tipo ponteiro é dada por: Pense duas vezes e faça uma vez. Provérbio Chinês. PONTEIROS Um ponteiro nada mais é que uma variável capaz de armazenar um número hexadecimal que corresponde a um endereço de memória de outra variável.

Leia mais

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. 1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras

Leia mais

Objetivo. Compreender a definição e dominar a implementação de ponteiros em C. Dominar a manipulação de arquivos

Objetivo. Compreender a definição e dominar a implementação de ponteiros em C. Dominar a manipulação de arquivos Objetivo Compreender a definição e dominar a implementação de ponteiros em C. Dominar a manipulação de arquivos Motivação para a utilização de ponteiros O que precisamos para fazer para que uma função

Leia mais

Programação I Ponteiros e alocação dinâmica de memória. Prof. Carlos Alberto

Programação I Ponteiros e alocação dinâmica de memória. Prof. Carlos Alberto Programação I Ponteiros e alocação dinâmica de memória Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br Ponteiros O ponteiro é um tipo de dado como int, char ou float; Variáveis

Leia mais

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;

Leia mais

Vetores. e o programa deverá ler os valores separadamente:

Vetores. e o programa deverá ler os valores separadamente: Vetores Vetor é um tipo de dado usado para representar uma certa quantidade de variáveis de valores homogêneos (do mesmo tipo). Imagine o seguinte problema: calcular a média das notas da prova de 5 alunos.

Leia mais

EL08D - MICROCONTROLADORES

EL08D - MICROCONTROLADORES Curso Técnico de Nível Médio Integrado Eletrônica - 8o Período Disciplina de Microcontroladores 2 (EL08D) 1º Sem 2016 Professor Gabriel Kovalhuk Email: kovalhuk@utfpr.edu.br Página pessoal: http://paginapessoal.utfpr.edu.br/kovalhuk

Leia mais

Arrays, Criação de Funções, Estruturas e Manipulação de Arquivos.

Arrays, Criação de Funções, Estruturas e Manipulação de Arquivos. Faculdade de Engenharia da Computação Disciplina: Lógica de Programação Arrays, Criação de Funções, Estruturas e Manipulação de Arquivos. Site : http://www1.univap.br/~wagner/ec.html Prof. Responsáveis

Leia mais

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros Métodos Computacionais Funções, Escopo de Variáveis e Ponteiros Tópicos da Aula Hoje vamos detalhar funções em C Escrevendo funções Comando return Passagem de argumentos por valor Execução de uma função

Leia mais

Introdução. Ponteiros

Introdução. Ponteiros Introdução O correto entendimento e uso de ponteiros é crítico para um programador C. Há três razões para isso: 1. Ponteiros fornecem os meios pelos quais as funções podem modificar seus argumentos; 2.

Leia mais

LINGUAGEM C: ALOCAÇÃO DINÂMICA

LINGUAGEM C: ALOCAÇÃO DINÂMICA LINGUAGEM C: ALOCAÇÃO DINÂMICA Prof. André Backes DEFINIÇÃO Sempre que escrevemos um programa, é preciso reservar espaço para as informações que serão processadas. Para isso utilizamos as variáveis Uma

Leia mais

Introdução a Programação. Tipos Estruturados de Dados

Introdução a Programação. Tipos Estruturados de Dados Introdução a Programação Tipos Estruturados de Dados Tópicos da Aula Hoje aprenderemos a trabalhar com tipos de dados mais complexos Tipos Primitivos x Tipos Estruturados Conceito de Tipos Estruturados

Leia mais

Tipos de Dados, Variáveis e Entrada e Saída em C. DCC 120 Laboratório de Programação

Tipos de Dados, Variáveis e Entrada e Saída em C. DCC 120 Laboratório de Programação Tipos de Dados, Variáveis e Entrada e Saída em C DCC 120 Laboratório de Programação Variáveis Uma variável representa um espaço na memória do computador para armazenar um determinado tipo de dado. Em C,

Leia mais

Aula 06 Introdução à Programação Matrizes

Aula 06 Introdução à Programação Matrizes Aula 06 Introdução à Programação Matrizes Prof. Gustavo Callou gustavo.callou@ufrpe.br gcallou@gmail.com Roteiro Matrizes Unidimensionais (Vetor) Bidimensionais String Exercícios Gustavo Callou DEINFO/UFRPE

Leia mais

Princípios de Desenvolvimento de Algoritmos MAC122

Princípios de Desenvolvimento de Algoritmos MAC122 Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Aula de Revisão: Variáveis e Atribuições Introdução Memória Principal: Vimos no curso anterior que a CPU usa a memória

Leia mais

Modularidade - Funções e Procedimentos

Modularidade - Funções e Procedimentos Modularidade - Funções e Procedimentos José Gustavo de Souza Paiva Problema Em diversas situações, é preciso executar uma tarefa específica diversas vezes em um programa, variando apenas os dados de entrada

Leia mais

MODOS DE ENDEREÇAMENTO E CONJUNTO DE INSTRUÇÕES

MODOS DE ENDEREÇAMENTO E CONJUNTO DE INSTRUÇÕES MODOS DE ENDEREÇAMENTO E CONJUNTO DE INSTRUÇÕES Alexandre Lucas Chichosz Discente do curso Engenharia da Computação Calwann de Souza Freire Discente do curso Engenharia da Computação Myke Albuquerque Pinto

Leia mais

char *strchr (const char *str, int ch);

char *strchr (const char *str, int ch); Ponteiros / Vetores e Strings - strchr Sua forma geral é: char *strchr (const char *str, int ch); A função strchr() devolve um ponteiro à primeira ocorrência do byte menos significativo de ch na string

Leia mais

Introdução à Computação MAC0110

Introdução à Computação MAC0110 Introdução à Computação MAC0110 Prof. Dr. Paulo Miranda IME-USP Aula 2 Variáveis e Atribuições Memória Principal: Introdução Vimos que a CPU usa a memória principal para guardar as informações que estão

Leia mais

MODOS DE ENDEREÇAMENTO E CONJUNTO DE INSTRUÇÕES

MODOS DE ENDEREÇAMENTO E CONJUNTO DE INSTRUÇÕES MODOS DE ENDEREÇAMENTO E CONJUNTO DE INSTRUÇÕES Alexandre Lucas Chichosz Graduando em Engenharia da Computação, Faculdades Integradas de Três Lagoas FITL/AEMS Calwann de Souza Freire Graduando em Engenharia

Leia mais

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ Ponteiros em C Adriano Joaquim de Oliveira Cruz 21 de julho de 2017 Instituto de Matemática Departamento de Ciência da Computação UFRJ 1 Resumo da Seção Introdução Declaração Incrementando e Decrementando

Leia mais

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes? Introdução à Ciência da Computação Ponteiros em C Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros

Leia mais

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória ALGORITMOS E ESRUTRA DE DADOS I Ponteiros Passagem por Valor e Referência Alocação de Memória 2 Agenda Ponteiros Conceitos gerais O que é Ponteiro? Declaração de Ponteiros Operadores para Ponteiros Exemplos

Leia mais

#include <stdio.h> main() { int i; // Cabeçalho for (i = 1; i <=20; i++) putchar( * ); putchar( \n ); puts( Numeros entre 1 e 5 );

#include <stdio.h> main() { int i; // Cabeçalho for (i = 1; i <=20; i++) putchar( * ); putchar( \n ); puts( Numeros entre 1 e 5 ); O todo é igual à soma das partes. Euclides. FUNÇÕES E PROCEDIMENTOS Embora sem saber, ao longo dos outros laboratórios, já foram utilizadas funções tais como printf, scanf, getchar, putchar, dentre outras

Leia mais

Linguagens de Programação I

Linguagens de Programação I Linguagens de Programação I Tema # 4 Operadores em C Susana M Iglesias FUNÇÕES ENTRADA-SAÍDA I/O printf(), utilizada para enviar dados ao dispositivo de saída padrão (stdout), scanf(), utilizada para ler

Leia mais

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 7 Vetores Profa. Marina Gomes marinagomes@unipampa.edu.br 19/05/2017 Engenharia de Computação - Unipampa 1 Motivação Problema: Leia as notas de uma turma de cinco estudantes

Leia mais

10 Comandos de repetição

10 Comandos de repetição 10 Comandos de repetição 10.1 Definição Um comando de repetição é um tipo instrução que permite para executar outra instrução (ou um conjunto de instruções) mais de uma vez. O número de execuções (repetições)

Leia mais

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Introdução Criada em 1972, por Dennis Ritchie; Centro de Pesquisas da Bell Laboratories; Para utilização no S.O. UNIX; C é uma linguagem

Leia mais

Estruturas Dinâmicas - Ponteiros Parte I

Estruturas Dinâmicas - Ponteiros Parte I SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Estruturas Dinâmicas - Ponteiros Parte I Prof. Vanderlei Bonato: vbonato@icmc.usp.br Prof. Claudio Fabiano Motta Toledo: claudio@icmc.usp.br

Leia mais

CCO 016 Fundamentos de Programação

CCO 016 Fundamentos de Programação CCO 016 Fundamentos de Programação Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 09 Agregados Homogêneos Variáveis Indexadas Vetores EXEMPLO 1 Um programa deve calcular quem

Leia mais

Programação científica C++

Programação científica C++ Programação científica C++ NIELSEN CASTELO DAMASCENO Slide 2 Expressões Combinação de dados e operadores que resulta em um valor. expressão x = 2 * y + 4; variável operador constante Memória do computador

Leia mais

O Pino P2.7 não está sendo usado e cada Display mostrará valores de 0 a 9.

O Pino P2.7 não está sendo usado e cada Display mostrará valores de 0 a 9. Lista de Exercícios 2 Conceitos envolvidos: a) Interface serial RS232 b) Interface com Teclado Matricial c) Interface com Displays de 7 segmentos d) Interface com LCD e) Interface com Conversores A/D e

Leia mais

Arranjos. David Déharbe

Arranjos. David Déharbe Arranjos. David Déharbe 1 1 Roteiro da aula Exercícios motivadores para arranjos; Motivação; Definição; Arranjos em C; Arranjos e ponteiros; Exemplos. 2 2 Exercícios. Escreva um programa que lê cinco números

Leia mais

Estruturas. Estruturas. Estruturas. Estruturas. Estruturas. Algoritmos e Lógica de Programação. Estruturas. Uniões Enumerações CANSI

Estruturas. Estruturas. Estruturas. Estruturas. Estruturas. Algoritmos e Lógica de Programação. Estruturas. Uniões Enumerações CANSI Algoritmos e Lógica de Programação Linguagem C Reinaldo Gomes reinaldo@cefet-al.br Definição: Éadefiniçãodeumnomeparaumagrupamento de variáveis, podendo ser de tipos diferentes. informações de tipos diferentes

Leia mais

1. Revisão de Vetores, Ponteiros, Funções e Estruturas em C

1. Revisão de Vetores, Ponteiros, Funções e Estruturas em C Introdução à Computação II 5952011 1. Revisão de Vetores, Ponteiros, Funções e Estruturas em C Prof. Renato Tinós Local: Depto. de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 1.1. Revisão

Leia mais

Programação de Computadores I Funções Básicas da Linguagem C PROFESSORA CINTIA CAETANO

Programação de Computadores I Funções Básicas da Linguagem C PROFESSORA CINTIA CAETANO Programação de Computadores I Funções Básicas da Linguagem C PROFESSORA CINTIA CAETANO Função Printf() Sintaxe printf( expressão de controle, argumentos); É uma função padrão para exibir uma mensagem na

Leia mais

Estrutura de Dados. Struct (Registro) Lais Farias Alves

Estrutura de Dados. Struct (Registro) Lais Farias Alves Estrutura de Dados Struct (Registro) Lais Farias Alves Conceito de Struct Struct (Registro). Um registro (=record) é uma coleção de várias variáveis, possivelmente de tipos diferentes. Na linguagem C,

Leia mais

Introdução à Programação

Introdução à Programação Programação de Computadores Introdução à Programação Prof. Helton Fábio de Matos hfmatos@dcc.ufmg.br Agenda Algoritmo & Programa Variáveis Declaração de tipos Comando de entrada ou de leitura Comando de

Leia mais

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 7 Arrays. Arrays

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 7 Arrays. Arrays 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação Cap. 7 Sumário: Classificação de tipos de dados Características gerais de tipos de dados compostos Definição de array (ou tabela)

Leia mais

1ª Lista de Exercícios

1ª Lista de Exercícios Universidade Federal do Rio de Janeiro Data: 26/04/05 Disciplina: Computação I 1ª Lista de Exercícios 1) Faça um programa, em pseudo-código, que peça ao usuário que informe n números reais e então calcule

Leia mais

Podemos declarar um ponteiro para um ponteiro com a seguinte notação: tipo_da_variável **nome_da_variável;

Podemos declarar um ponteiro para um ponteiro com a seguinte notação: tipo_da_variável **nome_da_variável; Ponteiros - Ponteiros para Ponteiros Podemos declarar um ponteiro para um ponteiro com a seguinte notação: tipo_da_variável **nome_da_variável; Algumas considerações: **nome_da_variável é o conteúdo final

Leia mais

- Mapa de memória de um processo - Ponteiros

- Mapa de memória de um processo - Ponteiros 1 MCTA028 Programação Estruturada - Mapa de memória de um processo - Ponteiros Material preparado a partir de slides dos profs. Jesús Mena-Chalco e Fabrício Olivetti Luiz Rozante 3Q-2018 2 Alocação de

Leia mais

13 Registros (Structs)

13 Registros (Structs) 13 Registros (Structs) Apesar das facilidades introduzidas até agora na manipulação de variáveis de diversos tipos, em certos momentos podemos estar interessados em agrupar várias delas em uma única entidade.

Leia mais

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação Introdução à Para Engenharias s GE4 Bio GE4Bio Grupo de Estudos em Sinais Biológicos Prof.Dr.

Leia mais

Métodos Computacionais. Vetores e Matrizes Dinâmicas

Métodos Computacionais. Vetores e Matrizes Dinâmicas Métodos Computacionais Vetores e Matrizes Dinâmicas Vetores Um programa para o cálculo da média Média m n i= = 1 n x i Variância v n i= = 1 ( x i n m) 2 A forma mais simples de estruturar um conjunto de

Leia mais

Introdução à Programação Estruturada Parte 3. Material da Prof. Ana Eliza

Introdução à Programação Estruturada Parte 3. Material da Prof. Ana Eliza Introdução à Programação Estruturada Parte 3 Material da Prof. Ana Eliza Arquitetura do Computador Digital MEMÓRIA Armazena dados e comandos UNIDADE DE ENTRADA UNIDADE DE CONTROLE UNIDADE LÓGICA E ARITMÉTICA

Leia mais

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta Algoritmos e Estruturas de Dados Prof. Marcelo Zorzan Profa. Melissa Zanatta Assuntos da Aula Alocação de Memória Alocação estática de memória Alocação dinâmica de memória Malloc, Calloc, Free, Realloc

Leia mais

Capítulo 6: Arquivos

Capítulo 6: Arquivos Capítulo 6: Arquivos Waldemar Celes e Roberto Ierusalimschy 29 de Fevereiro de 2012 1 Funções de entrada e saída em arquivos Nos capítulos anteriores, desenvolvemos programas que capturam seus dados de

Leia mais

Aula 26: Estruturas heterogêneas

Aula 26: Estruturas heterogêneas Aula 26: Estruturas heterogêneas Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2018/2 Departamento de Computação UFOP Aulas anteriores Memória Ponteiro Utilização

Leia mais

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses 1 3 Estrutura de dados 2 Ponteiro Ponteiro 2 O ponteiro é um tipo de dado como int, char ou float. A diferença do ponteiro ponteiro guardará um endereço de memória. Por meio deste endereço pode-se acessar

Leia mais

SSC510 Arquitetura de Computadores 1ª AULA

SSC510 Arquitetura de Computadores 1ª AULA SSC510 Arquitetura de Computadores 1ª AULA REVISÃO DE ORGANIZAÇÃO DE COMPUTADORES Arquitetura X Organização Arquitetura - Atributos de um Sistema Computacional como visto pelo programador, isto é a estrutura

Leia mais

Explicação do programa:

Explicação do programa: Disciplina: Introdução à Programação. IPRJ/UERJ Professora: Sílvia Mara da Costa Campos Victer Índice: Aula10 Sub-rotina: Em algoritmos Em C Sub-rotinas subprograma - programação modularizada Definição:

Leia mais

Linguagem C. André Tavares da Silva.

Linguagem C. André Tavares da Silva. Linguagem C André Tavares da Silva dcc2ats@joinville.udesc.br Variáveis Posição nomeada de memória que é usada para guardar um valor que pode ser modificado pelo programa. Todas as variáveis devem ser

Leia mais

ESTRUTURA DE DADOS (TCC )

ESTRUTURA DE DADOS (TCC ) ESTRUTURA DE DADOS (TCC-00.319) Ponteiros e funções Cristina Boeres 2 Ponteiros Variável do tipo ponteiro:! Linguagens como C permite o armazenamento e a manipulação de valores de endereços de memória!

Leia mais

28. COMUNICAÇÃO WIRELESS

28. COMUNICAÇÃO WIRELESS 28. COMUNICAÇÃO WIRELESS Nos chips das famílias 1, 2, 3 e 4, a comunicação wireless é feita através dos tranceivers da Chipcom. As famílias CC tem diversos dispositivos, com freqüências de atuação desde

Leia mais

Alocação Dinâmica em C

Alocação Dinâmica em C Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Alocação Dinâmica em C Profa Rosana Braga Adaptado de material preparado pela profa Silvana Maria Affonso de Lara

Leia mais

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI Introdução à Programação em C Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI Linguagem C Criada em 1972 para uso no LINUX; Sintaxe base para diversas outras (Java, JavaScript, PHP, C++,

Leia mais

LINGUAGEM C PARA O 8051

LINGUAGEM C PARA O 8051 LINGUAGEM C PARA O 8051 Disciplina de Microcontroladores Prof. Ronnier e Rubão VARIÁVEIS E TIPOS DE DADOS SIMPLES Char 8 bits Short e int 16 bits Long 32 bits Float 32 bits Unsigned int 16 bits Unsigned

Leia mais

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Estruturas em C

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Estruturas em C Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Estruturas em C 1 Material preparado pela profa Silvana Maria Affonso de Lara 2º semestre de 2010 ROTEIRO DA AULA

Leia mais

LABORATÓRIO DE ARQUITETURA DE COMPUTADORES PREPARAÇÃO 03: INTERRUPÇÕES

LABORATÓRIO DE ARQUITETURA DE COMPUTADORES PREPARAÇÃO 03: INTERRUPÇÕES AEVSF Autarquia Educacional do Vale do São Francisco FACAPE Faculdade de Ciências Aplicadas e Sociais de Petrolina Curso de Ciência da Computação LABORATÓRIO DE ARQUITETURA DE COMPUTADORES Prof. Sérgio

Leia mais

Programação 11543: Engenharia Informática 6619: Tecnologias e Sistemas de Informação. Cap. 8 Endereçamento de Memória Endereçamento de Memória

Programação 11543: Engenharia Informática 6619: Tecnologias e Sistemas de Informação. Cap. 8 Endereçamento de Memória Endereçamento de Memória Programação 11543: Engenharia Informática 6619: Tecnologias e Sistemas de Informação Cap. 8 Endereçamento de Memória Endereçamento de Memória Sumário: O que nós já sabemos sobre endereçadores (ou apontadores

Leia mais

LINGUAGEM DE PROGRAMAÇÃO C AULA 2. Professor: Rodrigo Rocha

LINGUAGEM DE PROGRAMAÇÃO C AULA 2. Professor: Rodrigo Rocha LINGUAGEM DE PROGRAMAÇÃO C AULA 2 Professor: Rodrigo Rocha TIPOS, VARIÁVEIS E CONSTANTES Tipos de Dados Variáveis Constantes Introdução a entrada e saída Printf Scanf Ferramentas: Dev-C++ Code::Blocks

Leia mais

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas Tipos Básicos Quantos valores distintos podemos representar com o tipo char? Estruturas de Dados Aula 2: Estruturas Estáticas 03/03/2010 Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa

Leia mais

Prof. Gabriel Kovalhuk

Prof. Gabriel Kovalhuk Curso Técnico de Nível Médio Integrado Eletrônica - 8º Período Disciplina de Microcontroladores 2 (EL08D) 1º Sem 2016 Professor Gabriel Kovalhuk Email: kovalhuk@utfpr.edu.br Página pessoal: http://paginapessoal.utfpr.edu.br/kovalhuk

Leia mais

Essencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória.

Essencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória. Ponteiros e Arrays Ponteiros são fundamentais para a programação bem sucedida em C: Passagem de parâmetros por referência; Alocação dinâmica de memória; Aumentar a eficiência de certar rotinas. Essencialmente,

Leia mais

DAS5102 Fundamentos da Estrutura da Informação

DAS5102 Fundamentos da Estrutura da Informação Ponteiros e Funções Funções ou sub-rotinas são parcelas de código que podem ser invocadas a partir do programa principal ou até mesmo por outras sub-rotinas. Elas têm como objetivo a execução de uma tarefa

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.2. Estrutura de Programas e Representação

Leia mais

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char? Estruturas de Dados Aula 2: Estruturas Estáticas Tipos Básicos Quantos valores distintos podemos representar com o tipo char? 1 Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa o

Leia mais

Aula 08: Funções (Parte II)

Aula 08: Funções (Parte II) Aula 08: Funções (Parte II) Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2019/1 Departamento de Computação UFOP Aula Anterior Introdução a Funções Aula prática

Leia mais

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011 Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011 Tipos Básicos Quantos valores distintos podemos representar com o tipo char? Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa

Leia mais