1 Exercícios com ponteiros
|
|
|
- Pedro Henrique Castilhos Brunelli
- 9 Há anos
- Visualizações:
Transcrição
1 Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Oitava Aula Prática - 29 de outubro de 2010 O objetivo desta aula prática é exercitar ponteiros e funções. 1 Exercícios com ponteiros Exercício 1: Objetivo: Usar ponteiros para passar parâmetros para funções. Complete o programa 1. Este programa usa a função void troca (int *a, int *b). Esta função função troca os valores apontados por a e b. Listing 1: Programa do problema 1. void troca ( int *a, int * b) int temp ; temp = *a; *a = *b; /* ******* Falta um comando aqui */ /* Fim de troca */ int x, y; scanf ("%d %d", &x, &y ); troca (&x, &y ); printf (" Troquei ----> %d %d\n", x, y ); Exercício 2: Objetivo: Manipular variáveis usando ponteiros para variáveis previamente declaradas. Considere o programa 2. Procure entender o que será impresso. Procure entender a diferença na notação de ponteiros em p2 = &j e *p2 = temp. #include < stdlib.h > int i = 10, j = 20; int temp ; int *p1, * p2 ; Listing 2: Programa do problema 2. p1 = & i; /* p1 recebe endereco de i */ 1 Adriano Cruz
2 p2 = & j /* p2 recebe endereco de j */ temp = * p1 ; /* conteudo apontado por p1 para temp */ * p1 = * p2 ; /* conteudo apontado por p2 para o apontado p1 */ * p2 = temp ; /* conteudo apontado por p1 para p2 */ /* O que sera impresso???? */ printf ("%d %d\n", i, j ); Exercício 3: O programa 1 foi modicado levemente e virou 3. faltam. Complete os pedaços que Listing 3: Programa do problema 3. void Troca ( int *a, int * b) int temp ; temp = *a; *a = *b; *b = temp ; /* Fim de Troca */ int x, y; int *px, * py ; /* Nao se usa isto normalmente. Isto é um exercício para aprendermos ponteiros */ px = &x; py = &y; /* * Como seria o comando scanf com px e py ao inves x e y? * Dica : lembre - se que era scanf ("% d %d", &x, &y ); * Agora olhe os dois comandos acima e verifique quem e igual * a &x e &y. */ scanf ("%d %d",, ); /* Como seria Troca com px e py? */ Troca (, ); /* Como seria printf com px e py? */ printf (" Troquei ----> %d %d\n",, ); 2 Adriano Cruz
3 Exercício 4: O exercício 4 mostra um exemplo de função que retorna um ponteiro. A função achasobrenome retorna o ponteiro pnome. O que você acha que o programa imprime? Listing 4: Programa do problema 4. char * achesobrenome ( char nome []) char * pnome ; int i = 0; while ( nome [i]!= ' ') i ++; i ++; pnome = & nome [i ]; return pnome ; char nomecompleto [80]; char *p; puts (" Entre com o seu nome e um sobrenome." ); gets ( nomecompleto ); p = achesobrenome ( nomecompleto ); puts (p ); 3 Adriano Cruz
4 2 Alocando Memória Atenção Nos próximos exercícios usaremos vetores com tamanhos variáveis. Para isto vamos usar funções para reservar memória e quando este espaço não for mais necessário usar uma função para liberá-lo. Estas funções são as seguintes: malloc(), calloc() e free(). Protótipos #include < stdlib.h > void * calloc ( size_t nmemb, size_t size ); void * malloc ( size_t size ); void free (void * ptr ); Pode considerar que size_t é equivalente a int. Descrição calloc reserva memória para um vetor de nmemb elementos de tamanho size bytes cada e retorna um ponteiro para a memória reservada. A memória é inicializada com zero. malloc reserva size bytes e retorna um ponteiro para a memória reservada. A memória não é inicializada com zero. free libera a área de memória apontada por ptr, que foi previamente reservada por uma chamada a uma das funções malloc() ou calloc(). Comportamento indenido ocorre se a área já foi liberada antes ou as funções não foram chamadas antes. Se o valor de ptr é NULL nada é executado. Retorno Em calloc() e malloc(), o valor retornado é um ponteiro para a memória alocada, que é alinhada corretamente para qualquer tipo de variável ou NULL se o pedido não pode ser atendido. free() returns no value. 4 Adriano Cruz
5 Exemplo Como exemplo de uso destas funções considere o problema de reservar n posições para armazenar variáveis do tipo int. Para isto usamos o trecho de programa mostrado em 5. Observe que após alocar o espaço foi usada a notação de vetores comuns. Listing 5: Programa do problema 5. #include < stdlib.h > int i, n, * pvetor ; f l o a t media ; /* Define um valor para n, scanf ou n = */ scanf ("%d", &n ); /* aloca espaco na memoria */ pvetor = ( int *) malloc (n * s i z e o f ( int )); i f (! pvetor ) puts (" Sem memória." ); return 1; /* A PARTIR DE AGORA VOLTAMOS PARA VETORES COMUNS */ /* aqui uso pvetor, vamos ler um vetor */ for (i = 0; i < n; i ++) scanf ("%d", & pvetor [i ]); /* faco alguma coisa */ media = 0.0; for (i = 0; i < n; i ++) media += pvetor [ i ]; printf ("%f\n", media ); /* aqui nao preciso mais de pvetor */ free ( pvetor ); Exercício 5: Execute o programa 5. Exercício 6: Agora vamos usar somente ponteiros. Execute o programa 6. 5 Adriano Cruz
6 Listing 6: Programa do problema 6. #include < stdlib.h > int i, n, * pvetor ; f l o a t media ; /* Define um valor para n, scanf ou n = */ scanf ("%d", &n ); /* aloca espaco na memoria */ pvetor = ( int *) malloc (n * s i z e o f ( int )); i f (! pvetor ) puts (" Sem memória." ); return 1; /* aqui uso pvetor, vamos ler um vetor */ for (i = 0; i < n; i ++) scanf ("%d", pvetor + i ); /* faco alguma coisa */ media = 0.0; for (i = 0; i < n; i ++) media += *( pvetor + i ); printf ("%f\n", media ); /* aqui nao preciso mais de pvetor */ free ( pvetor ); Exercício 7: Modique o programa anterior para descobrir quantos números são maiores do que a média. Exercício 8: Modique o programa anterior para colocar o vetor em ordem crescente. Exercício 9: Escreva um programa que descubra qual é o maior segmento de memória que é possível reservar neste computador. Dica: Faça um laço que tente reservar espaço, se conseguir libere (usar free()) este espaço e tente reservar um espaço ainda maior. Vai assim até vericar que o programa não consegue. Ir aumentando de 1 byte em 1 byte vai fazer o programa demorar muito. 6 Adriano Cruz
7 Exercício 10: Objetivo: Aritmética de ponteiros. Vamos somar um a um ponteiro. Digite o programa 7 e diga o que ele faz, caso você digite o seu primeiro e último nomes separados por um branco. Compare este programa com o programa 4. Listing 7: Exercício de cadeias de caracteres void misterio ( char * n ); char nome [41]; gets ( nome ); misterio ( nome ); void misterio ( char * n) while (* n!= ' ') n ++; n ++; puts (n ); Exercício 11: Objetivo: Vericar que ao se mudar o conteúdo de um vetor dentro de uma função muda-se também o conteúdo do vetor no trecho de programa que chamou a função. Complete o programa 8 que converte um número inteiro positivo da base 10 para a base 2. A função recebe o número na variável numerobase10 e retorna todos os 32 bits no vetor numerobase2. O número na base 2 deve ser armazenado no vetor da seguinte maneira: bit 31 na posição 31, bit 30 na posição 30 e assim sucessivamente. Entrada A entrada é composta de vários conjuntos de teste. Cada caso de teste é um número inteiro positivo. A entrada termina quando um número inteiro negativo for digitado. Saída Para cada conjunto de teste da entrada seu programa deve produzir três linhas. A primeira linha identica o conjunto de teste, no formato "Teste n", onde n é numerado a partir de 1. A segunda linha deve conter o número lido. A terceira linha deve conter todos os bits do número convertido, inclusive os zeros à esquerda. A quarta linha deve ser deixada em branco. A formato mostrado no Exemplo de Saída, abaixo, deve ser seguida rigorosamente. Exemplo de entrada e saída 7 Adriano Cruz
8 Entrada: Saída para o Exemplo da Entrada Teste Teste Teste Listing 8: Exercício de uso de vetor em funcoes void Converter ( int numerobase10, int numerobase2 [32]); int main ( int argc, char * argv []) int nb10, nb2 [32], i, teste = 1; while (1) scanf ("%d", & nb10 ); i f ( nb10 < 0 ) break; /* * Como a funcao e void nao ha valor retornado * e portanto nao posso atribuir a nenhuma variavel */ Converter ( nb10, nb2 ); printf (" Teste %d\n", teste ++); printf ("%d\n", nb10 ); /* Aqui imprimo o vetor */ /* Aqui falta codigo */ printf ("\n\n" ); void Converter ( int numerobase10, int numerobase2 [32]) /* aqui falta codigo */ /* Nao tem return. 8 Adriano Cruz
1 Exercícios com ponteiros
Computação para Informática Funções e Ponteiros1 EXERCÍCIOS COM PONTEIROS Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Funções e ponteiros O objetivo desta aula prática
1/34 GESTÃO DINÂMICA DE MEMÓRIA
1/34 GESTÃO DINÂMICA DE MEMÓRIA Memória Estática 2/34 Memória Estática Exemplo #include main() { int V[300], N; do{ printf ( N =? ); scanf ( %d, &N); while ((N < 0) (N > 300); for (i = 0; i
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
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
Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica
Introdução a Programação Ponteiros e Vetores, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos que existe uma forte relação entre ponteiros e vetores Associação entre ponteiros e vetores Ponteiros constantes
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
Exercícios 1) Crie uma função que recebe os coeficientes de uma função do 2o. grau e retorna as raízes sem usar vetor. 2) Faça um programa que acha o maior e o menor inteiro dentro de um vetor de 10 inteiros,
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
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.
Aula 17: Ponteiros e Alocação Dinâmica em C
Aula 17: Ponteiros e Alocação Dinâmica em C Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Ponteiros e Alocação Dinâmica Programação de Computadores
Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória
Ponteiros - Parte I Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória Ponteiros Um ponteiro é uma variável que contém um endereço de memória. Esse endereço é normalmente
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
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
Estruturas de Dados Aula 6: Cadeias de 28/03/2010
Estruturas de Dados Aula 6: Cadeias de Caracteres 28/03/2010 Caracteres Caracteres são representados internamente por códigos numéricos Tipo char (inteiro pequeno ) 1 byte (8 bits) 256 caracteres possíveis
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
Alocação Estática e Dinâmica. Prof. M.Sc. Mariella Berger
Alocação Estática e Dinâmica Prof. M.Sc. Mariella Berger http://www.inf.ufes.br/~mberger [email protected] [email protected] Alocação Estática Estratégia de alocação de memória na qual toda a
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
Faculdade de Computação
Faculdade de Computação Programação Procedimental 1 o Laboratório de Programação C Prof. Cláudio C. Rodrigues 1. Introdução O objetivo desta aula prática é exercitar o uso de variáveis de vários tipos
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
Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo
Introdução à Ciência da Computação I Alocação Dinâmica Prof. Claudio Fabiano Motta Toledo Sumário Funções para alocação de memória Ponteiros para ponteiros 8/12/16 2 Funções para alocação de memória malloc(),
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
Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 3 de setembro de 2010
Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 3 de setembro de 2010 1 Introdução O objetivo desta aula prática é exercitar o uso de variáveis de vários tipos
Modulo 12: alocação dinâmica de memória
PROGRAMAÇÃO DE COMPUTADORES V - TCC- 00.323 Modulo 12: alocação dinâmica de memória Aura - Erick [email protected], [email protected] Roteiro porque e como utilizar a alocação dinâmica funções: malloc (
Ponteiros. Introdução e Alocação Dinâmica
Ponteiros Introdução e Alocação Dinâmica Conceito Um PONTEIRO ou APONTADOR é uma variável usada para armazenar um endereço de memória. Normalmente, o endereço armazenado em um PONTEIRO é a posição de uma
Ponteiros e Alocação de Memória
Algoritmos e Estrutura de Dados I Ponteiros e Alocação de Memória Prof. Paulo Henrique Pisani fevereiro/2019 Memória Podemos entender a memória como um grande vetor de bytes devidamente endereçados: 0x1051
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
Módulo 5 Vetores e Alocação Dinâmica
Estruturas de Dados Módulo 5 Vetores e Alocação Dinâmica 1/9/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora
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
Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores 14/03/2011 e 16/03/2011 Uso da memória Existem 3 maneiras de reservar o espaço da memória: Variáveis globais (estáticas) Espaço existe enquanto
O que é um apontador em C (type pointer in C)?
O que é um apontador em C (type pointer in C)? Um apontador é uma variável que contém um endereço de outra variável. int x = 10;//variável inteira iniciada com o valor 10 int *px = &x;//variável apontadora
Curso de Programação C em Ambientes Linux Aula 05
Curso de Programação C em Ambientes Linux Aula 05 Centro de Engenharias da Mobilidade - UFSC Professores Gian Berkenbrock e Giovani Gracioli http://www.lisha.ufsc.br/c+language+course+resources Conteúdo
Estruturas Dinâmicas - Ponteiros
SSC0800 - ICC1 Teórica Introdução à Ciência da Computação I Estruturas Dinâmicas - Ponteiros Prof. Claudio Fabiano Motta Toledo: [email protected] Sumário Ponteiros Ponteiros e Vetores Funções para alocação
Estrutura de Dados. Aula 07 Alocação Dinâmica
Estrutura de Dados Aula 07 Alocação Dinâmica 2 ALOCAÇÃO DINÂMICA Existem três modos de reservar espaço de memória para o armazenamento de informações: 1ª - através do uso de variáveis globais (e estáticas).
Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008
Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008 Introdução O objetivo desta aula prática é exercitar comandos de entrada e saída simples
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
Linguagem C: Introdução
Linguagem C: Introdução Linguagem C É uma Linguagem de programação genérica que é utilizada para a criação de programas diversos como: Processadores de texto Planilhas eletrônicas Sistemas operacionais
FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara
Universidade do Estado de Minas Gerais - UEMG Curso de Engenharia da Computação FUNÇÕES EM C 1 Material adaptado da profa Silvana Maria Affonso de Lara ROTEIRO DA AULA Definição de Função Argumentos, retornos
3.1 - Funções para manipular dados de entrada e saída padrão
1616161616161616161616161616161616161616161616161616 3- ENTRADA E SAÍDA EM C Os principais meios para executar operações de entrada e saída (E/S) são: Entrada e saída pelo console (ou padrão): teclado
1 Questões de Múltipla Escolha
Universidade Federal do Rio de Janeiro Centro de Ciências Matemáticas e da Natureza Instituto de Matemática Departamento de Ciência da Computação Computação para Informática - Prof. Adriano Joaquim dm
Estrutura de dados 1. Ponteiros
Estrutura de dados 1 Ponteiros Ponteiros Um ponteiro é um endereço de memória O valor de um ponteiro indica onde uma variável está armazenada Um ponteiro proporciona um modo de acesso a uma variável sem
Algoritmos e Estruturas de dados
Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores
PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco
PONTEIROS E LISTAS Kalinka Regina Lucas Jaquie Castelo Branco [email protected] ALOCAÇÃO DINÂMICA DE MEMÓRIA Pode-se assumir que as variáveis declaradas na cláusula variável do pseudo-código do algoritmo
Tratamento de Caracteres
Tratamento de Caracteres Notas de Aula Prof. Francisco Rapchan www.geocities.com/chicorapchan A tabela ASCII Se os computadores manipulam apenas números, como eles podem armazenar os caracteres de um nome
Linguagem C: Ponteiros - Alocação Dinâmica
Prof. Paulo R. S. L. Coelho [email protected] Faculdade de Computação Universidade Federal de Uberlândia GEQ007 Organização 1 Ponteiros Alocação Dinâmica de Memória 2 3 4 Organização Ponteiros Alocação
Alocação Dinâmica de Memória - Exercício
Alocação Dinâmica de Memória - Exercício Construa um programa que leia da entrada padrão o número de linhas e de colunas de uma matriz de floats, aloque espaço dinamicamente para esta e a inicialize, com
Aula 8 Oficina de Programação Vetores. Profa. Elaine Faria UFU
Aula 8 Oficina de Programação Vetores Profa. Elaine Faria UFU - 2017 Variáveis Compostas Homogêneas O que uma variável composta homogênea? - Conjunto de variáveis do mesmo tipo - É chamada de forma geral
Programação de Computadores II. Cap. 5 Alocação Dinâmica
Programação de Computadores II Cap. 5 Alocação Dinâmica Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais
Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação
Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Programação em C Variáveis e Expressões DCA0800 Algoritmos e Lógica de Programação Heitor Medeiros Florencio
Algoritmos e Programação
Algoritmos e Programação Aula 9 Subalgoritmos, funções e passagem de parâmetros Profa. Marina Gomes [email protected] 22/06/2017 Engenharia de Computação - Unipampa 1 Modularização Facilita a
INF 1620 P2-14/10/05 Questão 1 Nome:
INF 1620 P2-14/10/05 Questão 1 Considere um cadastro de produtos de um estoque, com as seguintes informações para cada produto: Código de identificação do produto: representado por um valor inteiro Nome
