FUNDAMENTO DE PROGRAMAÇÃO

Slides:



Advertisements
Apresentações semelhantes
Recursividade Prof. Rosana Palazon.
Advertisements

Programação II Estruturas de Dados
Algoritmos e Estrutura de Dados I
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
Técnicas de Desenvolvimento de Programas
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Ameliara Freire Dividir para Conquistar.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Funções definidas pelo usuário Escola Olímpio Professor Marcelo Josué Telles Linguagem de Programação I1 de 36.
INE5408 Estruturas de Dados Ponteiros, passagem de parâmetros e modelos de memória.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
SISTEMAS EMBARCADOS I UNIDADE 3 – PROGRAMAÇÃO BÁSICA EM C TURMA: 7º Período DISCIPLINA: Sistemas Embarcados I PROFESSOR: Pedro Pacheco Bacheti
Linguagens de Programação Conceitos e Técnicas Amarrações Prof. Isabel Cafezeiro
Linguagens de Programação Conceitos e Técnicas Expressões Prof. Isabel Cafezeiro
1 Programação em C Aula 7. 2 Um lojista atribui o preço de venda dos itens de sua loja com um número racional (uma fração de inteiros). Este comerciante.
Respostas dos Exercícios. Lista 1 1.a) Escreva uma função que receba como parâmetro uma temperatura dada em graus Fahrenheit e retorna a temperatura.
Algoritmos e Programação Prof. Marcos Saúde
Estruturas de Dados Aula 2: Estruturas Estáticas
Construção de Algoritmos AULA 05
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
Programação em Assembly
Vetores e Matrizes em C/C++
Fundamentos de Programação 1
INF1007: Programação 2 2 – Alocação Dinâmica
1) Complete as seguintes frases:
INE5408 Estruturas de Dados
Estruturas de Decisão.
Capítulo II – Listas Lineares Gerais
INF1007: Programação 2 5 – Tipos Estruturados
INF1007: Programação 2 1 – Ponteiros
Estrutura de Dados Revisão
Introdução à Computação para Engenharia MAC2166
Introdução ao VisuALG Prof. Andrew Rodrigues
Algoritmos e Estruturas de Dados I
Introdução a Linguagem Java
Módulo I Capítulo 2: IDE e Variáveis
Programação em C Aula 2.
Prof. Wellington Franco Sub-Rotinas:Funções e Procedimentos
Aula 4 Estruturas.
Prof. Wellington Franco
FUNDAMENTO DE PROGRAMAÇÃO
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
FUNDAMENTO DE PROGRAMAÇÃO
CONCEITO DE VARIÁVEIS ESTÁTICAS
Fundamentos de Programação1
FUNDAMENTO DE PROGRAMAÇÃO PROF. WELLINGTON FRANCO
Algoritmos e Estruturas de Dados I
Lógica de Programação e Algoritmos - LPA Professora: Ecila Alves de Oliveira UNIP – 2.Sem/2015 Décima Primeira Aula - Função.
Lógica de Programação e Algoritmos - LPA Professora: Ecila Alves de Oliveira UNIP – 2.Sem/2015 Décima Primeira Aula - Função.
Algoritmos e Estruturas de Dados I
FUNDAMENTO DE PROGRAMAÇÃO
aritmética de ponteiros
IP – Repetições for Prof. Eduardo Falcão.
Programação de Computadores I – Ponteiros
Listas Encadeadas.
Aula 22 Modularização 22/10/08.
3.2 Sobrecarga de Métodos (Overloading)
Programação de Computadores I – Ponteiros
Prof. Rafael Mesquita Fila Prof. Rafael Mesquita
Computação Eletrônica Vetores e Matrizes
Algoritmos e Estruturas de Dados I – Ponteiros
Referências.
Estruturas de Dados em C
Estruturas definidas pelo programador
Programação de Computadores LINGUAGEM C – AULA 03 – PROF. WELLINGTON TELLES.
Fundamentos de Programação 1
parâmetros e modelos de memória
Aula 4 Professores: Conteúdo: Dante Corbucci Filho
Transcrição da apresentação:

FUNDAMENTO DE PROGRAMAÇÃO LINGUAGEM C – PONTEIROS PARTE 2

Ponteiros como Argumento de Funções Ponteiros para Funções Exercícios SUMÁRIO Ponteiros como Argumento de Funções Ponteiros para Funções Exercícios

PONTEIROS COMO PARÂMETROS DE FUNÇÕES

PONTEIROS COMO PARÂMETROS DE FUNÇÕES Em C, uma função A não pode alterar diretamente valores de variáveis da função B que fez a chamada da função A. Em outras palavras, uma função não pode alterar as variáveis de outro escopo local que não seja o seu.

PONTEIROS COMO PARÂMETROS DE FUNÇÕES Por exemplo: Escreva um programa que permute os valores de duas variáveis utilizando apenas atribuições entre elas.

PONTEIROS COMO PARÂMETROS DE FUNÇÕES Solução: 01. int temp,x=10,y=5; 02. temp = x; 03. x = y; 04. y = temp;

PONTEIROS COMO PARÂMETROS DE FUNÇÕES E se o problema fosse: Escreva uma função apta a permutar os valores de duas variáveis da função main utilizando apenas atribuições entre elas.

PONTEIROS COMO PARÂMETROS DE FUNÇÕES Possível Solução (main): int main ( void ){ 01. int a = 5, b = 7; 02. troca(a, b); 03. printf("%i %i \n", a, b); 04. return 0; }

PONTEIROS COMO PARÂMETROS DE FUNÇÕES Possível Solução (função requerida): void troca (int x, int y ){ 01. int temp; 02. temp = x; 03. x = y; 04. y = temp; }

PONTEIROS COMO PARÂMETROS DE FUNÇÕES Possível Solução (função requerida): void troca (int x, int y ){ 01. int temp; 02. temp = x; 03. x = y; 04. y = temp; } Repare que está função não atende ao problema pois os valores de a e b na função main permanecem inalterados.

PONTEIROS COMO PARÂMETROS DE FUNÇÕES A solução para este problema consiste no uso de ponteiros, onde: Passamos para a função troca os endereços de memória onde as variáveis a e b estão armazenadas; E assim a função troca poderá alterar, indiretamente, os conteúdos (valores) das variáveis locais a e b da função main.

PONTEIROS COMO PARÂMETROS DE FUNÇÕES Seguindo este raciocínio, a função troca é reescrita como: void troca (int *px, int *py ){ 01. int temp; 02. temp = *px; 03. *px = *py; 04. *py = temp; }

PONTEIROS COMO PARÂMETROS DE FUNÇÕES void troca (int *px, int *py ){ 01. int temp; //* = “contéudo de” 02.temp = *px; 03.*px = *py; 04.*py = temp; /*Nesta função, os valores serão passados por referência.*/ } Como pode ser visto, agora a função troca receba os endereços das variáveis e, assim, alterar seus valores indiretamente.

PONTEIROS COMO PARÂMETROS DE FUNÇÕES Solução correta: void troca (int *px, int *py ){ int temp; temp = *px; *px = *py; *py = temp; } void main ( void ) { int a = 5, b = 7; troca(&a, &b); /* passamos os endereços das variáveis */ printf("%d %d \n", a, b);

PONTEIROS COMO PARÂMETROS DE FUNÇÕES Pilha de Execução do Programa:

PONTEIROS COMO PARÂMETROS DE FUNÇÕES Pilha de Execução do Programa:

PONTEIROS COMO PARÂMETROS DE FUNÇÕES Pilha de Execução do Programa:

PONTEIROS PARA FUNÇÕES

PONTEIROS PARA FUNÇÕES Em C, ponteiros para funções servem, normalmente, para passar uma função como argumento de uma outra função. A forma geral para declarar um ponteiro para uma função é: tipo_retorno (*nome_do_ponteiro) (lista de tipos de parâmetros)

PONTEIROS PARA FUNÇÕES Exemplo: int soma(int a, int b) { return a + b; } int operacao(int x, int y, int (*func)(int,int)) { int g; g = (*func)(x, y); return g;

PONTEIROS PARA FUNÇÕES Exemplo: void main () { int m; m = operacao(7, 5, soma); printf("%i\n", m); }

Exercícios

PONTEIROS PARA FUNÇÕES Desenhe a pilha de execução do programa a seguir: void main(){ int x = 10; int *p_x = &x; int **p_p_x = &p_x; printf("%d\n", x); printf("%d\n", *p_x); printf("%d\n", **p_p_x); }

PONTEIROS PARA FUNÇÕES Depure o programa a seguir e desenhe sua pilha de execução: void main(){ int *a, *b, c = 4, d = 2; a = &c; b = &d; *b = 8; *a = *b; *a = 1; b = a; *b = 0; }

PONTEIROS PARA FUNÇÕES Depure o programa a seguir e desenhe sua pilha de execução: void main(){ int *a, *b, c = 8, d = 2; a = &c; b = &d; *a = 5; (*a)+=10; *b = *a; }

PONTEIROS PARA FUNÇÕES Depure o programa a seguir e desenhe sua pilha de execução: void main(){ int *a, *b, *c, d = 12, e = 4, f=0; a = &d; b = &e; c = &f; *a = 5; *c = 1; ++*c; (*a)+=10; *b = *a; c = b; *a = 25; *c = 3; }

PONTEIROS PARA FUNÇÕES Escreva uma função apta a permutar os valores de duas variáveis locais da função main utilizando para isso apenas atribuições entre estas variáveis.

PONTEIROS PARA FUNÇÕES Escreva um programa em C para ler 2 números e ao final, caso o usuário selecione a opção 1, o programa imprimi a tabuada de multiplicação do produto dos dois números, e caso usuário selecione a opção 2, o programa imprimi o maior dos dois e informa se é par,impar,positivo, negativo. Observações: Não deve ser aceito zero para os dois valores informados; O programa deve conter uma função a parte para: tabuada; par/impar;positivo/negativo; Estas funções devem ser ativadas por meio de ponteiros.