Programação C/C++ Slide 5 Nielsen Castelo Damasceno

Documentos relacionados
ECT1203 Linguagem de Programação

Curso de Programação C em Ambientes Linux Aula 04

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

Ponteiros de Variáveis

Comandos em C (cont.)

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

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

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

Estrutura de dados 1. Ponteiros

ESTRUTURA DE DADOS (TCC )

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

As funções são blocos de instruções que facilitam o entendimento do código. Sua sintaxe é:

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

Explicação do 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.

Instituto de Informática Estrutura de Dados II

Funções em Linguagem C Parte II

Algoritmos II prof. Daniel Oliveira

ponteiros INF Programação I Prof. Roberto Azevedo

- Mapa de memória de um processo - Ponteiros

Ponteiros. Introdução

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

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Algoritmos. Algoritmos. Linguagem de programação. Conceitos. Conceitos. Conceitos. Sintaxe do comando para incluir bibliotecas no programa:

Variáveis primitivas e Controle de fluxo

Programação científica C++

Aula 24: Ponteiros e Alocação Dinâmica

Algoritmos e Programação

Alocação Dinâmica em C

Aula 13 Oficina de Programação Modularização. Profa. Elaine Faria UFU

GEQ Prof. Paulo R. Coelho. Lista para prova

3. Linguagem de Programação C

Computação 2. Aula 7. Profª. Fabiany Ponteiros

Programação Orientada a Objetos para Redes de Computadores

Linguagem C: Introdução

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

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

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Classes e Objetos. Sintaxe de classe em Java

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 Ponteiros

Programação Orientada a Objetos para Redes de Computadores. Arrays. Arrays

Computação eletrônica: Funções

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

Aula 17: Ponteiros e Alocação Dinâmica em C

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

Universidade Estadual do Maranhão Curso de Engenharia da Computação Mestrado em Engenharia da Computação e Sistemas

Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende

Ponteiros. Introdução e Alocação Dinâmica

Introdução à Programação Aula 09. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Programação Estruturada Prof. Rodrigo Hausen VAMOS USAR O LINUX. SE TIVER ENTRADO NO WINDOWS, REINICIE O COMPUTADOR.

Introdução a Programação de Jogos

Exercícios. 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

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Módulo 5 Vetores e Alocação Dinâmica

3. Linguagem de Programação C

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Algoritmos. Conceitos e Comandos

Programação: Vetores

Técnicas de Programação:

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

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

1 Exercícios com ponteiros

Introdução a Linguagem C (Parte II) UFPA Sistemas de Informação. Roberto Araujo 2013

Aula 4: Introdução à Linguagem C++

Algoritmos e Programação

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

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

Aula 3 PROFESSOR TUTA

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

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.

Estrutura de Dados. Aula 07 Alocação Dinâmica

Modularidade - Funções e Procedimentos

Linguagem de Programação C. Ponteiros

Aula 25: Alocação Dinâmica

Aula 27: Estruturas heterogêneas e alocação dinâmica

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Programação Estruturada

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

Tipos Abstratos de Dados. Estrutura de Dados

Programação científica C++

Programação Estruturada

ECT1203 Linguagem de Programação

Linguagens de Programação I

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Linguagem C: Ponteiros. Prof. Tiago Alves de Oliveira

1. Faça um programa que leia uma string digitada pelo usuário e salve em um arquivo em branco.

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

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Lista Encadeada (Linked List)

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

Array em Java. Figura 1 - Exemplo de um array de inteiros

Linguagem de Programação I. Aula 10 Funções

CI208 - Programação de Computadores. Aula 24: Arrays. Prof. MSc. Diego Roberto Antunes

Transcrição:

Programação C/C++ Slide 5 Nielsen Castelo Damasceno

Programação estruturada

Programação estruturada

Programação estruturada

Programação estruturada

Programação estruturada

vetores

vetores

vetores

vetores

vetores

vetores

Vetores e constantes

Vetores e constantes

Vetores (Regras)

Vetores (caracteres)

Vetores (strings)

Vetores (strings)

Vetores (strings)

Funções básicas (strings)

Funções básicas (strings)

Funções

FUNÇÕES Função main Função Função Função Função Função

FUNÇÕES (CMATH)

Definindo uma função tipo_da_função nome_da_função (lista de parâmetros) { corpo da função } A lista de parâmetros, também chamada de lista de argumentos, é opcional. A função pode não ter entrada (void).

O comando return A instrução return expressão; tem os seguintes efeitos: 1) avaliação da expressão 2) conversão automática do resultado da expressão para o tipo da função 3) retorno do resultado 4) término da execução da função e retorno do controle para a instrução seguinte do código de chamada Sintaxe de um comando return: return; return expressão; return (expressão);

O comando return No exemplo anterior, temos a definição das funções: Função com um comando return Função com mais de um comando return

O comando return Funções do tipo void podem ter um comando return sem expressão, servindo para terminar a execução da função Em funções do tipo void, o comando return não é obrigatório Uma função sem comando return termina quando encontra a chave de fechamento O valor de retorno é obtido através de uma chamada à função, como no exemplo:

Funções definidas pelo usuário

Declaração e definição de funções Em geral, o nome de uma função aparece em três lugares em um programa: 1) na declaração (protótipo/assinatura) 2) na definição 3) na chamada

Exemplo Declaração de funções (protótipos) Chamadas de funções Definição de funções

Declaração de uma função A declaração de uma função, dita protótipo da função, é uma instrução, geralmente colocada no início do programa, que estabelece o tipo da função e os argumentos que ela recebe. Uma função não pode ser chamada sem antes ter sido declarada No exemplo, temos a declaração das funções: a função de nome le_numero() é do tipo int e não recebe argumentos a função de nome max() é do tipo int e recebe como argumento dois valores do tipo int

Observações 1) No protótipo de uma função, o seu tipo, o número e o tipo dos parâmetros devem corresponder àqueles do cabeçalho da definição. 2) O nome dos parâmetros podem ser omitidos na declaração. 3) Se uma função não tem parâmetros, pode-se declarar a lista de parâmetros como (void) ou simplesmente ()

Outras observações 1) Se uma função é definida antes da sua primeira chamada, esta não precisa ser declarada. 2) O comando return pode retornar somente um único valor. 3) Se uma função não tem valor de retorno, deve-se indicar o tipo de retorno como void 4) Não se pode definir funções dentro de uma outra função.

Escopo de variáveis O escopo de uma variável é o bloco de código onde esta variável é válida As variáveis podem ser declaradas em três lugares: 1)dentro de funções variáveis locais 2)como parâmetros de funções parâmetros formais 3)fora de todas as funções variáveis globais

Variáveis locais void funcao1(void) { int x; x = -10; } void funcao2(void) { int x, y; x = 2; y = 18; } São visíveis apenas dentro de seu próprio bloco de código. Um bloco de código é delimitado por { }. O espaço de memória usado pela variável é liberado na saída do bloco de código.

Variáveis globais São visíveis no programa inteiro. O espaço de memória fica reservado durante toda a execução do programa.

Variáveis globais São úteis quando o mesmo dado é usado em muitas funções Ocupam espaço de memória mesmo quando desnecessárias Podem levar a erros no programa

Variáveis globais x locais Qual a diferença entre as funções? int produto(int x, int y) { return (x * y); } int x, y; int produto(void) { return (x * y); }

Variáveis globais x locais Qual a diferença entre as funções? int produto(int x, int y) { return (x * y); } int x, y; int produto(void) { return (x * y); }

Parâmetros de uma função Variáveis locais que são inicializadas pelos valores passados na chamada da função. São visíveis apenas dentro da função: são criadas na entrada e destruídas na saída da função No momento da chamada de uma função, o número e o tipo dos parâmetros devem corresponder à declaração da função Os parâmetros são convertidos automaticamente para os tipos da declaração antes de serem passados à função

Passagem de parâmetros Em geral, pode-se passar parâmetros para funções de duas maneiras: 1) Por valor: o valor do argumento é copiado para o parâmetro e as alterações feitas no parâmetro não tem efeito sobre a variável usada na chamada da função 2) Por referência: o endereço de uma variável copiado para o parâmetro, assim as mudanças feitas no parâmetro afetam a variável usada na chamada da função

Passagem de parâmetros por valor o valor de n é copiado para o parâmetro x da função quadrado() a variável n, usada para chamar quadrado(), ainda tem o valor 10 na atribuição, apenas a variável local x é modificada

Passagem de parâmetros por referência Operador unário de referência & A referencia de n é passado para o parâmetro x da função quadrado() na atribuição, a variável referenciada por x é modificada a variável n, usada para chamar quadrado(), teve seu valor modificado

Passagem de parâmetros por valor Considere o seguinte programa:

Exercício Faça um programa que calcula as raízes de uma equação do 2 segundo grau ( ax bx c 0), onde a, b e c são números reais fornecidos pelo usuário. Observação: use funções para calcular e imprimir o resultado.

Exercício Implemente duas funções uma que converte em Real para dólar e outra que faz a operação inversa. Chame essa função através do main. O programa deve ter uma boa interação com usuário. Mostre a cotação do dólar utilizado.

Problema 1 Crie uma função para encontrar o maior entre 3 inteiros. O usuário entra com os inteiros e o programa imprime os 3 inteiros e mostrando o maior elemento.

Local e global

Uso do define

Constantes

Operador (?:)

Problema 2 Escreva um programa que calcula a soma dos quadrados de dois números fornecido pelo usuário. Implemente 3 funções: Calcula a soma dos quadrados de dois números, calcula o quadrado de um número e calcula a soma de dois números. A função main deve chamar somente a função que apresente todo o resultado.

Funções e variáveis globais

Funções e variáveis globais

Funções e variáveis globais

Passando array a função Para passar um argumento array a uma função, especifique o nome do array sem colocar colchetes. Por exemplo, se o array temperaturaporhora for declarado como

Passando array a função

Exercício Crie um programa em que o usuário entre com o tamanho do vetor. A função main deve chamar outra função que preenche os valores desse vetor aleatoriamente (passando como parâmetro o vetor e seu tamanho). Crie uma função que imprima esse vetor (passando como parâmetro o vetor e seu tamanho). A função deve ser chamada pelo main. Pesquise na Internet a função rand.

Argumento de defaults

Setprecision

Variável static

Exemplo

Exemplo

Problema 3: Passeio do cavalo Um dos problemas mais interessantes para os fãs do jogo de xadrez é o problema do Passeio do Cavalo, proposto originalmente pelo matemático Euler. A questão é esta: a peça do jogo de dez chamada ao cavalo pode se mover ao longo de um tabuleiro vazio e passar uma única vez em cada uma 64 casas?

Problema 3: Passeio do cavalo O cavalo faz movimentos em formato de L (percorre duas casas em uma direção e uma no sentido perpendicular às duas primeiras). Dessa forma, de uma casa no meio do tabuleiro, o cavalo pode fazer movimentos diferentes (numerados de 0 a 7).

Problema 3: Passeio do cavalo Desenhe um tabuleiro de xadrez 8-por-8 em uma folha de papel e tente fazer o Passeio do Cavalo a mão, Coloque um 1 no primeira casa para a qual se mover, um 2 na segunda casa, um 3 na terceira etc. Antes de começar os movimentos, imagine até onde você chegará, lembrando-se que um passeio completo consiste em 64 movimentos. Até onde você chegou? Você chegou perto do quanto havia imaginado?

Problema 3: Passeio do cavalo

Problema 3: Passeio do cavalo Escreva um programa para mover o cavalo pelo tabuleiro de xadrez. Rode o programa. Quantos movimentos o cavalo fez? Depois de tentar escrever e rodar o programa do Passeio do Cavalo, provavelmente você adquiriu alguns conceitos valiosos.

Problema 4: Puzzle15

Problema 4: Puzzle15 1.3 trilhões de estados alcançáveis Instâncias aleatórias são resolvidas otimamente em alguns milissegundos pelos melhores algoritmos de busca 24-puzzle (5 x 5): possui 10 estados. Resolver através da busca em profundidade.

Problema 4: Puzzle8 A estratégia deve tentar uma regra e, se mais tarde descobrir que essa regra não era apropriada, voltar atrás e tentar outra regra. Essa estratégia é chamada Backtracking (Tentativa e erro).

Problema 4: Puzzle8

Ponteiros Os ponteiros são variáveis que contêm endereços de memória como valores. Normalmente, uma variável faz uma referência direta a um valor específico. Um ponteiro, por outro lado, contém um endereço de uma variável que contém um valor específico.

Ponteiros contptr é um ponteiro para int ou contptr aponta para um objeto do tipo inteiro

Ponteiros Os ponteiros devem ser inicializados ao serem declarados. Um ponteiro pode ser inicializado com 0, NULL ou um endereço. Um ponteiro com o valor NULL não aponta para lugar algum. Inicializar um ponteiro com 0 é equivalente a inicializar um ponteiro com NULL

Operadores de Ponteiros O & ou operador de ponteiro é um operador que retorna o endereço de seu operando. Por exemplo, admitindo as declarações a instrução

Operadores de Ponteiros

Operadores de Ponteiros

Operadores de Ponteiros O operador *, chamado frequentemente operador de referência indireta ou operador de desreferenciamento, retorna o valor do objeto ao qual seu operando (i.e., um ponteiro) aponta. Usar * dessa maneira é chamado desreferenciar um poteiro.

Operadores de Ponteiros

Chamando funções por referência Há duas maneiras de passar argumentos a uma função chamada por valor e chamada por referência. Usar ponteiros e o operador de referência indireta para simular chamadas por referência.

Chamando funções por referência

Chamando funções por referência

Passagem por referência Funções que recebem argumentos por referencia utilizam o operador & somente na definição do tipo de argumento. Pelo comando return só é possível retornar um valor. Por referência podemos retornar mais de um valor.

Passagem por referência

Passagem por referência

Exercício Implemente um programa que ordene 3 números de forma ascendente fornecido pelo usuário. Utiliza chamada por referência. A função main deve chamar a função ordena que apresenta os resultados.

Expressões e aritmética com ponteiro

Expressões e aritmética com ponteiro Quando um inteiro é adicionado ou subtraído de um ponteiro, este último não é simplesmente incrementado ou decrementado por tal inteiro, mas sim por tal inteiro vezes o tamanho do objeto ao qual o ponteiro se refere. O número de bytes depende do tipo de dado do objeto. vptr += 2, produziria 3008 (3 000 + 2 * 4) admitindo que um inteiro está armazenado em 4 bytes de memória

Expressões e aritmética com ponteiro Se um ponteiro for incrementado ou decrementado de um, os operadores de incremento e decremento podem ser usados. Qualquer uma das instruções ++vptr; vptr++; As variáveis de ponteiros podem ser subtraídas entre si. Por exemplo, se vptr possuir o local 3000 e v2ptr possuir o endereço 3008, a instrução x = v2ptr - vptr; A Aritmética de ponteiros não tem significado algum se não for realizada em um array.

Ponteiros e Arrays bptr = &b[0]; O elemento b [ 3 ] do array pode ser referenciado alternativamente com a expressão de ponteiro *(bptr + 3). Notação ponteiro/offset Os parênteses são necessários porque a precedência do * é maior do que a precedência do +. O array em si pode ser tratado como um ponteiro e usado com a aritmética de ponteiros. Por exemplo, a expressão *(b + 3).

Ponteiros e Arrays Os arrays podem conter ponteiros. Um uso comum de tais estruturas de dados é para formar um array de strings.

Ponteiros e Arrays Embora pareça que essas strings estão sendo colocadas no array naipe, apenas os ponteiros são de fato colocados no array.

Ponteiros e Arrays

Ponteiros e Arrays

Ponteiros e Arrays

Ponteiros e Arrays

Ponteiros e Arrays

Ponteiros e Arrays

Alocando memória typename * pointer_name = new typename; int * pn = new int;

Alocando memória

Liberando memória

Operador new e delete O operador new é utilizado para alocar um bloco de memória. Primeiro o operador new solicita ao SO um bloco de memória, após alocar o bloco de memória, new retorna um ponteiro para o bloco alocado. Se new falhar, retorna um bad_aloc.

Operador new e delete Para destruir o objeto e devolver a memória para o SO utiliza-se o operador delete. Delete destrói o objeto e devolve o bloco de memória para o SO. Observe que apenas o bloco de memória é destruído. O ponteiro continua existindo, e continua apontando para o bloco de memória que agora não existe mais. Depois de usar delete, o ponteiro aponta para um monte de lixo e não deve mais ser utilizado.

Operador new e delete

Ponteiro para função

Problema 5 Faça um programa na linguagem C++ que imprima os 50 primeiros números inteiros pares positivos. Utilize ponteiros e funções.

Problema 6 Num frigorífico existem 90 bois. Cada boi traz preso no pescoço um cartão contendo seu número de identificação e seu peso. Fazer um programa na linguagem C++ que escreva o número e peso do boi mais gordo e do boi mais magro.

Problema 7 Suponha que no ano N a população americana seja maior que a brasileira. Sabendo-se que os Estados Unidos possuem um crescimento anual de 2% na sua população e que o Brasil tem crescimento anual de 4%, determinar o ano em que as duas populações serão iguais (em quantidade). São dados os números de habitantes dos Estados Unidos e do Brasil no ano N.