Estruturas de Dados Aula 2: Estruturas Estáticas

Slides:



Advertisements
Apresentações semelhantes
Programação II Estruturas de Dados Aula 01
Advertisements

Programação II Estruturas de Dados
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Revisão da Linguagem C.
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Curso de Nivelamento LCG
Introdução a Linguagem de Programação C
Linguagem C : Ponteiros
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Uso de parâmetros na linha de comando. Parâmetros da função main:
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Introdução à Linguagem C
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
INE5408 Estruturas de Dados Ponteiros, passagem de parâmetros e modelos de memória.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
INE5408 Estruturas de Dados Alocação Dinâmica de Memória.
1 Aula 06 – Funções Prof. Filipe Mutz Colocar mais exemplos de funções simples no começo.
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Alocação Dinâmica de Memória.
Introdução à Computação para Engenharia MAC2166
VARIÁVEIS EM C Dilvan Moreira.
INF1007: Programação 2 2 – Alocação Dinâmica
1) Complete as seguintes frases:
INE5408 Estruturas de Dados
INF1007: Programação 2 5 – Tipos Estruturados
INF1007: Programação 2 1 – Ponteiros
Fundamentos de Programação 1
Estrutura de Dados Revisão
Programação em C Aula 2.
FUNDAMENTO DE PROGRAMAÇÃO LINGUAGEM C - CONCEITOS FUNDAMENTAIS
Linguagem C Para programadores Python
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
INF1007: Programação 2 9 – Tipos Abstratos de Dados
Prof. Wellington Franco
FUNDAMENTO DE PROGRAMAÇÃO
FUNDAMENTO DE PROGRAMAÇÃO PROF. WELLINGTON FRANCO
Fundamentos de Programação 1
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
FUNDAMENTO DE PROGRAMAÇÃO
FUNDAMENTO DE PROGRAMAÇÃO
CONCEITO DE VARIÁVEIS ESTÁTICAS
Programação de Computadores I – Arquivos
FUNDAMENTO DE PROGRAMAÇÃO PROF. WELLINGTON FRANCO
Algoritmos e Estruturas de Dados I
UNIDADE 7 Tipos estruturados
aritmética de ponteiros
Algoritmos e Programação MC102
Programação de Computadores I – Ponteiros
Listas Encadeadas.
Aula 22 Modularização 22/10/08.
Fundamentos de Programação 1
DHD – Desenvolvimento em Hardware
Profa. Maria Augusta Constante Puget
Linguagem de Programação Aplicações Avançadas de Microprocessadores
Programação de Computadores I – Arquivos
3.1.7 Variáveis de Classe e Instância
Programação Orientada a Objetos
DHD – Desenvolvimento em Hardware
Programação de Computadores I – Ponteiros
Computação Eletrônica Vetores e Matrizes
Estruturas definidas pelo programador
Linguagem C Linguagem Imperativa
Programação de Computadores LINGUAGEM C – AULA 03 – PROF. WELLINGTON TELLES.
Fundamentos de Programação 1
Ponteiros.
Transcrição da apresentação:

Estruturas de Dados Aula 2: Estruturas Estáticas 08/08/2016 1 1

Tipos Básicos Quantos valores distintos podemos representar com os tipos básicos? long long int 8 bytes -9223372036854775807 9223372036854775807 unsigned long long int 8 bytes 0 18446744073709551615 2

Operadores de Incremento e Decremento em C Incrementa ou decrementa o valor de uma variável de uma unidade O incremento/decremento pode ser antes ou depois da variável ser usada N++, incrementa n depois de ser usado ++N, incrementa n antes de ser usado 3

Operador sizeof tipo size_t em geral = unsigned int Retorna o número de bytes ocupado por um determinado tipo size_t a = sizeof (float); Armazena 4 na variável a, pois um float (número real de ponto flutuante) ocupa 4 bytes de memória Também pode ser usado em uma variável, retornando o número de bytes ocupado por esta variável double x = 17.0; size_t b = sizeof(x); // b == 8 4

Conversão de tipo Ou “Type Casting” Conversão é feita automaticamente pelo C na avaliação de expressões Pode ser requisitado explicitamente pelo programador C não tem arredondamento como função Truque: Macro #define ROUND(x) ((int)(x+0.5)) 5

Entrada e saída São feitas com uso de funções Função printf printf (formato, lista de constantes/variáveis/expr...); %c char %d int %ld long int %u unsigned int %f float %lf double %e float ou double em notação científica %g float ou double em notação mais apropriada (%f ou %g) %s string = cadeia de caracteres %p ponteiro (em hexadecimal), e.g. 0xf5874a8c 6

Entrada e saída printf ("Inteiro = %d Real = %g", 33, 5.3); com saída: Inteiro = 33 Real = 5.3 Caracteres de escape \b volta um campo (“backspace”) 7

Entrada e saída Especificação do tamanho do campo 8

Entrada e saída scanf (formato, lista de endereços das variáveis...) int n; scanf ("%d", &n); 9

Funções Comando de definição de uma função Tipo_retorno nome_função (lista de parâmetros) { Corpo da função } 10

Definição de Funções 11

Pilha de Execução Variáveis locais têm escopo local Funções são independentes entre si Transferência de dados entre funções através de Passagem de parâmetros Valor de retorno Parâmetros em C são passados por valor Pilha de Execução: Coordena comunicação entre a função que chama e a função chamada Permite passagem de parâmetros e valores de retorno 12

Esquema representativo da memória Porém na memória existem somente bits com valores 0 e 1 = Representação A semântica surge na entrada/saída das variáveis 13

Exemplo fat (5) 14

Pilha de execução 15

Ponteiro de variáveis Pode ser necessário comunicar mais de um valor de retorno para função que chama Por exemplo, uma função que deve calcular a soma e o produto de dois números #include <stdio.h> void somaprod (int a, int b, int c, int d) { c = a + b; d = a * b; printf("VAR. LOCAL: soma=%d produto=%d\n",c, d); // ok } int main (int argc, char** argv) { int s, p; somaprod (3, 5, s, p); // NÃO FUNCIONA!!! Por quê? printf (“soma = %d produto =%d\n”, s, p); return 0; 16

Ponteiros Permitem manipulação direta de endereços de memória no C Variáveis do tipo ponteiro Armazenam endereços de memória É possível definir um ponteiro para cada tipo do C que seja capaz de armazenar endereços de memória em que existem valores do tipo correspondente int a; int* p; // p armazena endereço de memória em que há valor inteiro 17

Operadores de ponteiros Operador & (“endereço de”) Aplicado a variáveis, retorna o endereço da posição de memória reservada para variável Operador * (“conteúdo de”) Aplicado a ponteiros, acessa o conteúdo de memória do endereço armazenado pela variável ponteiro 18

Exemplo int a; int* p; int c; 19

Exemplos #include <stdio.h> #include <stdlib.h> int main (int argc, char** argv) { int a; int *p = NULL; p = &a; *p = 2; printf (“a=%d “, a); return EXIT_SUCCESS; } Imprime o valor 2 20

Exemplos int main (void) { } int a, b, *p; a = 2; *p = 3; b = a + (*p); printf (“ %d “, b); return 0; } AVISO na compilação: 'p' usado sem ser inicializado ERRO na execução! “Segmentation fault” Ponteiro p aponta para endereço indefinido e tenta atribuir valor 3 a esse endereço, ou seja, p invade memória fora do seu escopo. 21

Passando ponteiros para função Ponteiros permitem modificar o valor das variáveis indiretamente Possível solução para passagem por ref! void somaprod (int a, int b, int *p, int *q) { *p = a + b; *q = a * b; } int main (int argc, char** argv) int s, p; somaprod (3, 5, &s, &p); printf (“soma = %d produto =%d\n”, s, p); return EXIT_SUCCESS; 22

Exemplo “swap” #include <stdio.h> #include <stdlib.h> void troca (int *px, int *py) { int temp; temp = *px; *px = *py; *py = temp; } int main (int argc, char** argv) int a = 5, b = 7; printf (“ANTES: a=%d b=%d\n”, a, b); troca(&a, &b); printf (“DEPOIS: a=%d b=%d\n”, a, b); return EXIT_SUCCESS; 23

Exemplo 24

Variáveis Globais Declaradas fora do escopo das funções São visíveis a todas as funções Existem enquanto o programa existir (não estão na pilha de execução) Utilização: Devem ser usadas com critério Podem criar muita dependência entre as funções Dificulta o entendimento e o reuso de código Encapsulamento: Acesso via 'get' e 'set' 25

Exemplo de Variáveis Globais 26

Exemplo de variável estática Função que imprime números reais Imprime um número por vez (máximo de 5 números por linha) void imprime (float a) { static int n=1; printf (“ %f “, a); if ((n%5) == 0) printf (“ \n”); n++; } Main: imprime(1.0); imprime(2.0); imprime(3.0); imprime(4.0); imprime(5.0); imprime(6.0); ===> 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 27

Variáveis Estáticas Declaradas no escopo de funções (ou globais) Existem enquanto o programa existir (não estão na pilha de execução) Somente são visíveis dentro das funções nas quais são declaradas Utilização Quando for necessário recuperar o valor de uma variável na execução passada da função 28

Sobre variáveis estáticas e globais... Variáveis estáticas e globais são inicializadas com zero, quando não forem explicitamente inicializadas Variáveis globais estáticas São visíveis para todas funções subsequentes Não podem ser acessadas por funções de outros arquivos static int x; Funções estáticas static float f(float) 29

Pré-processador e Macros Código C antes de ser compilado é passado pelo pré- processador O Pré-processador Reconhece diretivas Altera o código e envia para o compilador Substituição no nível sintático (textual) do programa Diretiva #include O pré-processador substitui pelo corpo do arquivo especificado 30

Pré-processador e Macros # include “nome_do_arquivo” Procura o arquivo do diretório local Caso não encontre, procura nos diretórios de include especificados para compilação # include <nome_do_arquivo> Não procura no diretório local Para ver o resultado do pré-processador (Compilador GNU C em Unix) gcc -c -E prog.c > progpreprocessado.c 31

Pré-processador e Macros Constantes #define PI 3.1415 Macros Definição com parâmetros #define MAX (a,b) ((a)>(b)?(a):(b)) O pré-processador substituirá o trecho de código: v = 4.5; c = MAX (v, 3.0); Por: c = ((v) > (3.0) ? (v): (3.0)); 32