Experimentos com a memória cache do CPU

Save this PDF as:
 WORD  PNG  TXT  JPG

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

Download "Experimentos com a memória cache do CPU"

Transcrição

1 Experimentos com a memória cache do CPU Alberto Bueno Júnior & Andre Henrique Serafim Casimiro Setembro de

2 Contents 1 Introdução 3 2 Desvendando o cache Para que serve o cache? Funcionamento básico Cache misses Causando falhas de cache Teste 1: Percorrendo matrizes O código O programa Testes Conclusões Teste 2: Somando vetores O código O programa Testes Conclusões Teste 3: Memória compartilhada entre cores O código O programa Testes Conclusões Conclusões gerais 23 5 Bibliografia 24 2

3 1 Introdução Este é um trabalho feito para a disciplina MAC Organização de Computadores, ministrada, em 2010, pelo professor Alfredo Goldman ( Esta disciplina é oferecida aos alunos de graduação em Ciência da Computação do Instituto de Matemática e Estatística (IME - da Universidade de São Paulo (USP - O objetivo é mostrar algumas experiências que podem ser feitas com a memória cache do CPU. 2 Desvendando o cache 2.1 Para que serve o cache? A memória cache é uma forma utilizada pelo CPU para diminuir o tempo de acesso à memória. O cache é muito menor do que a memória principal, tanto em bytes quanto espaço físico, muitas vezes cabendo no próprio chip do processador. Além disso, o tempo de acesso ao cache é muito menor. 2.2 Funcionamento básico O cache é dividido nas chamadas linhas de cache, onde cada uma delas contém 3 campos: data: dados index: um índice que indica a posição daquela linha no cache tag: um índice que indica qual é a posição da memória principal que contém a outra cópia do dado Dessa forma, quando o processador recebe uma instrução que precisa fazer uma leitura ou escrita na posição de memória x, ele verifica se existe alguma linha de cache cujo campo tag contém o valor x. Se ele encontrar, dizemos que ocorreu um cache hit. Caso contrário, ocorreu um cache miss. Quando ocorre um cache miss, uma nova linha é criada no cache, colocando o valor x no campo tag. Depois disso o processador tem que copiar os dados da memória principal para essa nova linha (no caso em que a instrução foi de leitura) ou copiar para a memória (caso de escrita). Um detalhe importante 3

4 é que para criar uma nova linha no cache, o mesmo precisa abrir mão de outra linha. A heurística utilizada pelo processador para escolher tal linha é chamada de Política de substituição. 2.3 Cache misses Existem três tipos de cache miss: Leitura de instrução: É quando o processador não encontra um instrução no cache e então tem que buscá-la na memória principal, fazendo com que o processo tenha que esperar até que a instrução seja obtida. É o que causa mais delay. Leitura de dados: É quando o processador não encontra um determinado dado no cache. Enquanto o dado não é retornado da memória principal, as instruções que não dependem daquela leitura podem ser executadas. Assim que o dado vier da memória, as instruções dependendes daquela leitura podem voltar à execução. É o que causa delay mediano. Escrita de dados: Semelhante ao item acima, com a diferença de que a escrita na memória principal pode ser enfileirada (para ser escrita, de fato, mais tarde). Assim, o processador só escreve os dados na memória principal quando esta fila está cheia. É o que causa menos delay. 3 Causando falhas de cache Nesta seção estão alguns exemplos de como se pode causar falhas de cache. Algumas considerações preliminares acerca dos testes: Computador: A máquina utilizada tem o processador Intel Core 2 Duo 2.26 GHz com 3 MB de cache L2. Sistema operacional: Ubuntu Linux Linguagem de programação: A linguagem utilizada foi C. Compilação de código: O compilador utilizado foi o gcc, com as opções -O1, -O2, -O3, -O4, dependendo do teste. 4

5 Medida de consumo de tempo: A ferramenta utilizada para medir o tempo de execução dos programas foi /usr/bin/time, do Linux, com a opção %U, que mede a quantidade de tempo que o processador gastou processando as instruções do programa (não conta o tempo de criação do processo no sistema operacional nem o tempo em que o processo está esperando na fila do S.O., por exemplo). Medida do número de cache misses: Foi utilizada a ferramenta valgrind para medir o número de falhas de cache, com a opção tool=cachegrind. 5

6 3.1 Teste 1: Percorrendo matrizes O código teste1.c: 1 #include <s t d i o. h> 2 #include <s t d l i b. h> int main ( int argc, char argv [ ] ) { 6 int i, j, s i z e ; 7 int p ; 8 9 s i z e = a t o i ( argv [ 1 ] ) ; / matriz de s i z e l i n h a e s i z e colunas / p = ( int ) malloc ( s i z e sizeof ( int ) ) ; 12 for ( i = 0 ; i < s i z e ; i ++) 13 p [ i ] = ( int ) malloc ( s i z e sizeof ( int ) ) ; i f ( argc == 2) { / Se f o i passado apenas um argumento, p e r c o r r e por l i n h a s / 16 for ( i = 0 ; i < s i z e ; i++) { 17 for ( j = 0 ; j < s i z e ; j++) { 18 p [ i ] [ j ] = 0 ; 19 } 20 } 21 } else {/ Senao, p e r c o r r e por colunas / 24 for ( i = 0 ; i < s i z e ; i++) { 25 for ( j = 0 ; j < s i z e ; j++) { 26 p [ j ] [ i ] = 0 ; 27 } 28 } 29 } for ( i = 0 ; i < s i z e ; i ++) 32 f r e e ( p [ i ] ) ; 33 f r e e ( p ) ; 34 return 0 ; 35 } 6

7 3.1.2 O programa O programa teste1.c aloca na memória uma matriz de inteiros com size linhas e size colunas, onde size é um argumento passado para o programa pela linha de comando. Em seguida, a matriz é preenchida com zeros. A principal questão do problema é o modo como a matriz é percorrida. Se nenhum argumento, além de size, for passado, a matriz será percorrida por linhas (isto é, serão zerados os elementos p[0][0], p[0][1],...,p[0][size - 1], p[1][0],..., p[size - 1][size - 1], nesta ordem). Caso contrário, ela será percorrida por colunas (p[0][0], p[1][0],..., p[size - 1][0], p[0][1],..., p[size - 1][size - 1]). 7

8 3.1.3 Testes Consumo de tempo No gráfico acima, as linhas tracejadas representam os testes por linha, enquanto as linhas continuas representam os testes por coluna. As cores representam o nível de otimização usado pelo compilador gcc. O tamanho da matriz (a variável size) foi variado de 0 até 15000, de 1000 em

9 Falhas de cache O esquema de cores e linhas do gráfico acima é o mesmo do gráfico por tempo. A diferença agora é que o eixo vertical representa a porcentagem de misses do L2 que ocorreram durante a execução do programa (n o de misses por n o de acessos ao cache). 9

10 3.1.4 Conclusões Nesse teste estamos atacando uma característica da linguagem de programação C, que é a de armazenar as matrizes na memória alocadas em blocos de linhas. Assim, posições adjacentes em uma mesma linha estão também fisicamente adjacentes na memória. Independentemente da política de substituição dos dados do cache, a escrita que é feita no cache é feita por blocos de memória. Assim, ao acessarmos as posições de memória da matriz, percorrendo-a tanto por linha quanto por coluna, sempre teremos trechos inteiros das linhas da matriz copiadas da memória principal no cache. Isso explica o comportamento das curvas referentes a percorrer a matriz por linha nos gráficos. Vale notar, entretanto, alguns detalhes sobre as curvas referentes a percorrê-la por coluna. No 1 o gráfico, o formato exponencial da curva de gasto de tempo é decorrente do fato que o número de operações cresce conforme o tamanho da matriz, e este cresce exponencialmente conforme size varia linearmente. No 2 o gráfico, o salto que a curva dá ao variar size de 2000 para 3000 é devido o fato de que com size = 2000 a matriz cabe inteira no cache L2, e apartir de size = 3000 já não cabe mais. É isso que faz com que tantos cache misses aconteçam. 10

11 3.2 Teste 2: Somando vetores O código teste2.c: 1 #include <s t d i o. h> 2 #include <s t d l i b. h> 3 4 #define SIZE int main ( int argc, char argv [ ] ) { 7 int o f f s e t, array1, array2, ans, i, j ; 8 9 / Se nenhum argumento f o r passado, roda com o f f s e t 1 / 10 i f ( argc > 1) 11 o f f s e t = a t o i ( argv [ 1 ] ) ; 12 else 13 o f f s e t = 1 ; array1 = ( int ) malloc ( SIZE sizeof ( int ) ) ; 16 array2 = ( int ) malloc ( SIZE sizeof ( int ) ) ; 17 ans = ( int ) malloc ( SIZE sizeof ( int ) ) ; for ( i = 0 ; i < SIZE ; i ++) { 20 array1 [ i ] = rand ( ) %1000; 21 array2 [ i ] = rand ( ) %1000; 22 } for ( i = 1 ; i <= o f f s e t ; i++) { 25 for ( j = i 1; j < SIZE ; j += o f f s e t ) 26 ans [ j ] = array1 [ j ] + array2 [ j ] ; 27 } f r e e ( array1 ) ; 30 f r e e ( array2 ) ; 31 f r e e ( ans ) ; 32 return 0 ; 33 } 11

12 3.2.2 O programa O programa teste2.c aloca três vetores de 10 milhões de posições na memória, inicializa os dois primeiros e depois soma, de posição em posição, os dois e guarda no terceiro. Se um número offset for passado como argumento, o programa soma de offset em offset (isto é, soma a posição 0, depois a posição offset, depois a posição 2 * offset, até y = k * offset tal que y 10 milhões, depois soma 1, 1 + offset, etc). 12

13 3.2.3 Testes Consumo de tempo v1 Para melhorar a legibilidade do gráfico acima, omitimos as linhas referentes às otimizações -O2, -O3, -O4, pois elas apresentaram o mesmo comportamento que a otimizaçao -O1. O gráfico foi feito com o offset variando de 1 até 3001, de 10 em

14 Consumo de tempo v2 O gráfico acima é basicamente a mesma coisa do anterior, mas estendendo a variação até

15 Falhas de cache O gráfico acima mostra, no eixo vertical, a porcentagem de cache misses que ocorreram no cache L2 e, no eixo horizontal, o offset variando de 1 até 4501, de 10 em

16 3.2.4 Conclusões Este teste ilustra dois fatores muito importantes nas políticas de substituição de dados na memória cache: o tamanho dos blocos a serem copiados para a memória de cache e o tempo de permanência dos mesmos lá até que sejam substituídos. Como essas políticas não são muito fáceis de se definir para cada processador, nossa conclusão aqui não é totalmente certa. O 1 o (consumo de tempo) e o 3 o gráfico (cache miss) revelam um comportamento bastante semelhante entre consumo de tempo e cache misses. Dessa forma, vamos nos concentrar em analisar trechos importantes do 2 o gráfico (consumo de tempo - extendido): offset <1000 Aqui encontramos o pico do consumo de tempo. Os valores de offset aqui são bastante pequenos em relação ao tamanho do vetor, o que significa que são necessárias muitas iterações de tamanho offset para percorrê-lo completamente. Conforme o vetor é percorrido de offset em offset posições, blocos do vetor são copiados para o cache. O aumento da taxa de cache misses se deve ao fato de que, na próxima varredura do vetor, os blocos que haviam sido copiados já foram sobreescritos por outros dados. Assim, o mesmo bloco precisa ser recopiado para o cache <offset <3000 Conforme offset vai aumentando, as varreduras do vetor inteiro demoram menos e então blocos de memória passam a utilizados em mais de uma varredura. O fato de essa região também apresentar o vale de consumo de tempo (e o mesmo estar logo após o pico) tem a ver com o equilíbrio entre tempo de retorno ao mesmo bloco de dados e a quantidade de blocos distintos do vetor que estão distribuídos no cache (que neste ponto ainda são muitos, pois offset ainda não cresceu muito) <offset <15000 Conforme offset vai aumentando, o número de blocos distintos do vetor que estão distribuídos no cache também vai diminuindo. E isso faz com que aumente um pouco o número de cache misses. Este crescimento é linear pois a proporção do blocos é diminui lineramente com o crescimento linear de offset. 16

17 offset >15000 O processo tende a ficar constante. Provavelmente aqui já não há mais influências diretas das falhas de cache. Este tempo deve ser somente o tempo de processamento para um número mais ou menos fixo delas. 17

18 3.3 Teste 3: Memória compartilhada entre cores O código teste3.c: 1 #include <s t d l i b. h> 2 #include <sched. h> 3 #include <s t d i o. h> 4 #define SIZE struct s h a r e d d a t a s t r u c t { 7 unsigned int data1 ; 8 unsigned int data2 ; 9 } ; struct s h a r e d d a t a s t r u c t shared data ; static int i n c s e c o n d ( struct s h a r e d d a t a s t r u c t ) ; int main ( int argc, char argv [ ] ) { int i, j, pid, f l a g = 0 ; 18 void c h i l d s t a c k ; i f ( argc > 1) f l a g = 1 ; / Aloca a memoria da p i l h a do segundo processo / 23 i f ( ( c h i l d s t a c k = ( void ) malloc (4096) ) == NULL) { 24 p e r r o r ( Cannot a l l o c a t e stack f o r c h i l d ) ; 25 e x i t ( 1 ) ; 26 } / Cria um c l o n e que roda no mesmo espaco de memoria / 29 / Se por acaso e s t e programa der f a l h a de segmentacao ao rodar, t e n t e t i r a r o da chamada da funcao / 31 i f ( f l a g == 1) { 32 i f ( ( pid = c l o n e ( ( void )&inc second, c h i l d s t a c k +4096, 33 CLONE VM, &shared data ) ) < 0) { 34 p e r r o r ( c l o n e c a l l e d f a i l e d. ) ; 35 e x i t ( 1 ) ; 36 } 37 } / Modifica a primeira v a r i a v e l da s t r u c t compartilhada / 40 for ( j = 0 ; j < SIZE ; j++) { 41 for ( i = 0 ; i < ; i++) { 18

19 42 shared data. data1++; 43 } 44 } return 0 ; } / Funcao que r e p r e s e n t a a execucao do processo f i l h o / 51 int i n c s e c o n d ( struct s h a r e d d a t a s t r u c t sd ) 52 { 53 int i, j ; 54 / Modifica a segunda v a r i a v e l da s t r u c t compartilhada / 55 for ( j = 1 ; j < SIZE ; j++) { 56 for ( i = 1 ; i < ; i++) { 57 sd >data2++; 58 } 59 } 60 } O programa O programa teste3.c possui a estrutura shared data struct, que possui duas variáveis. Se nenhum argumento for passado, o programa teste3.c realiza SIZE 100, 000 incrementos na primeira variável. Caso contrário, ele cria um processo filho, que compartilha a estrutura shared data struct e realiza o mesmo número de incrementos na segunda variável, e depois realiza os incrementos na primeira variável. 19

20 3.3.3 Testes Consumo de tempo No gráfico acima, o tempo consumido pelo programa compilado com as otimazações -O1, -O2, -O3, -O4 é praticamente zero e por isso as barras não aparecem no gráfico. 20

21 3.3.4 Conclusões O Teste 3 mostra que compartilhar memória cache entre processos (ou entre cores, se o processador for multicore) pode causar falhas de cache. A estrutura criada no programa tem dois inteiros (4 bytes cada um), totalizando 8 bytes. Essa quantidade é pequena se comparada ao tamanho do cache line do cache L2, que é de 64 bytes. Isso quer dizer que toda a estrutura cabe em apenas uma cache line. Assim, quando o primeiro processo (processo pai) altera a primeira variável da estrutura, o cache marca aquela linha como suja. Assim, quando o segundo processo (processo filho) tenta alterar a segunda variável da estrutura (que está na mesma cache line) ele percebe que aquela linha está marcada como suja e daí é necessário fazer dois acessos à memória: um para escrever a linha suja na memória principal e outra para copiar para o cache a nova informação da memória principal. Por esse motivo, o caso em que o processo filho é criado (quando passamos um argumento para o programa) leva mais que o dobro do tempo do caso em que ele não é criado. Uma possível solução para esse problema é fazer com que as duas variáveis da estrutura estejam em cache lines diferentes. Um jeito de fazer isso é substituindo as linhas 1 struct s h a r e d d a t a s t r u c t { 2 unsigned int data1 ; 3 unsigned int data2 ; 4 } ; por 1 struct s h a r e d d a t a s t r u c t { 2 unsigned int data1 ; 3 int aux [ 2 0 ] ; 4 unsigned int data2 ; 5 } ; Dessa forma, o vetor aux ocupará 20 4 = 80 bytes na memória, fazendo com que as variáveis data1 e data2 estejam em cache lines diferentes. 21

22 O gráfico abaixo mostra o que acontece com o consumo de tempo fazendo essa modificação. Como a máquina utilizada no teste possui dois cores, os processos rodam em paralelo, consumindo praticamente o mesmo tempo que apenas um processo. 22

23 4 Conclusões gerais A melhor conclusão que pode ser feita a partir dos resultados apresentados é que o programador deve conhecer as formas como o cache é utilizado e, dependendo da aplicação, conhecer a máquina onde tal aplicação irá rodar. Ter esse conhecimento ajuda a diminuir os cache misses e, consequentemente, aumentar o desempenho (em relação ao tempo consumido) da aplicação. Essa não é uma tarefa fácil, pois o simples fato de percorrer uma matriz por colunas na linguagem C pode aumentar em muito o tempo de execução, como foi mostrado aqui. Contudo, qualquer conhecimento pode vir a ser útil. 23

24 5 Bibliografia

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 Vazamento de memória & Erros em tempo de execução Vazamento de memória Introdução: Vazamento de memória (memory leak),

Leia mais

Listas (cont.) K&R: Capitulo 6. Lista Simplesmente Ligada IAED, 2012/2013. Conjunto de nós. Cada nó contém. head NULL. typedef struct node {

Listas (cont.) K&R: Capitulo 6. Lista Simplesmente Ligada IAED, 2012/2013. Conjunto de nós. Cada nó contém. head NULL. typedef struct node { Listas (cont.) K&R: Capitulo 6 Lista Simplesmente Ligada Conjunto de nós head NULL Cada nó contém Informação útil Ponteiro para o próimo nó typedef struct node Item item; struct node *net; *link; Item

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

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

ponteiros INF Programação I Prof. Roberto Azevedo

ponteiros INF Programação I Prof. Roberto Azevedo ponteiros INF1005 -- Programação I -- 2016.1 Prof. Roberto Azevedo razevedo@inf.puc-rio.br ponteiros tópicos o que são ponteiros operadores usados com ponteiros passagem de ponteiros para funções referência

Leia mais

Instituto de Matemática e Estatística - USP MAC Organização de Computadores. EP1 - Experimentos com o cache

Instituto de Matemática e Estatística - USP MAC Organização de Computadores. EP1 - Experimentos com o cache Instituto de Matemática e Estatística - USP MAC0412 - Organização de Computadores Relatório EP1 - Experimentos com o cache Ana Luiza Domingues Fernandez Basalo - 6431109 29 de setembro de 2010 Sumário

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

Semáforos em Unix. Criar um conjunto (vetor) de semáforos: semid = semget ( chave, nsems, flag); onde:

Semáforos em Unix. Criar um conjunto (vetor) de semáforos: semid = semget ( chave, nsems, flag); onde: Semáforos em Unix Criar um conjunto (vetor) de semáforos: onde: semid = semget ( chave, nsems, flag); semid identificador de acesso ao vetor de semáforos. chave identificador global que identifica este

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 02: Alocação Dinâmica de Memória Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Ciência da Computação, DECOM Website: www.decom.ufop.br/reifortes

Leia mais

Controlo de Execução. K&R: Capitulo 3

Controlo de Execução. K&R: Capitulo 3 Controlo de Execução K&R: Capitulo 3 IAED, 2009/2010 Controlo de Execução Instruções e Blocos if else-if switch Ciclos: Instruçõeswhile e for Instruçãodo-while break e continue goto e labels 2 IAED, 2009/2010

Leia mais

Programação Imperativa. Lição n.º 16 A pilha de execução

Programação Imperativa. Lição n.º 16 A pilha de execução Programação Imperativa Lição n.º 16 A pilha de execução A pilha de execução Registos de execução. Arrays locais. Caso da alocação dinâmica. Segmento de dados. 11/17/16 Programação Imperativa 2 A pilha

Leia mais

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. 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,

Leia mais

Sistemas Operacionais. Pilha de execução Volnys B. Bernal 1. Agenda. Pilha de execução. Os problemas. Os problemas.

Sistemas Operacionais. Pilha de execução Volnys B. Bernal 1. Agenda. Pilha de execução. Os problemas. Os problemas. 25-215 Volns Bernal 1 25-215 Volns Bernal 2 Agenda Volns Borges Bernal volns@lsi.u.br Os problemas Controle do endereço de retorno da função Controle do quadro da pilha de Departamento de Sistemas Eletrônicos

Leia mais

Experimentos com o Cache Organização de Computadores

Experimentos com o Cache Organização de Computadores Experimentos com o Cache Organização de Computadores Bruno Milan Perfetto - n o USP : 6552421 Steven Koiti Tsukamoto - n o USP : 6431089 Departamento de Ciência da Computação Instituto de Matemática e

Leia mais

Message Passing Interface - MPI

Message Passing Interface - MPI Message Passing Interface - Pedro de Botelho Marcos Maio/2008 1 Sumário Introdução; Conceitos básicos; Comunicação; Principais rotinas; Compilando e executando códigos ; Exemplos; Referências; 2 Introdução

Leia mais

ÁRVORE BINÁRIA DE BUSCA TDA-ABB

ÁRVORE BINÁRIA DE BUSCA TDA-ABB ÁRVORE BINÁRIA DE BUSCA TDA-ABB Conceitos Gerais sobre Árvores Uma árvore é uma estrutura hierárquica dividida em níveis, que ou está vazia, ou contém elementos chamados nós; Diferentemente da árvore natural,

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

Gilberto A. S. Segundo. 24 de agosto de 2011

Gilberto A. S. Segundo. 24 de agosto de 2011 Exercícios - Alocação Dinâmica Gilberto A. S. Segundo Programação Aplicada de Computadores Engenharia Elétrica Universidade Federal do Espírito Santo - UFES 24 de agosto de 2011 1 / 23 Grupo de e-mail

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação Linguagem C++: arrays - aula I Bruno Emerson Gurgel Gomes 1 1 Instituto Federal de Educação, Ciência e Tecnologia do RN (IFRN) 2012 Bruno Gomes (IFRN) Fundamentos de Programação

Leia mais

Laboratório de Introdução à Ciência da Computação I Aula de Vetores e Matrizes

Laboratório de Introdução à Ciência da Computação I Aula de Vetores e Matrizes Laboratório de Introdução à Ciência da Computação I Aula de Vetores e Matrizes Professor: Jó Ueyama Estagiária PAE: Aurea Soriano 1 Vetores em C Variável para armazenar valores homogêneos e é unidimensional

Leia mais

Lista Encadeada (Linked List)

Lista Encadeada (Linked List) Lista Encadeada (Linked List) As listas ou listas encadeadas são a estrutura de dados mais simples concebível excetuando-se naturalmente os arrays. Listas encadeadas nada mais são que uma seqüência de

Leia mais

Linguagem C: Ponteiros - Alocação Dinâmica

Linguagem C: Ponteiros - Alocação Dinâmica Prof. Paulo R. S. L. Coelho paulo@facom.ufu.br 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

Leia mais

C++ - Ponteiros (continuação) cout << \nquantas notas? ; cin >> tamanho; notas = new int[tamanho]; //aloca memória

C++ - Ponteiros (continuação) cout << \nquantas notas? ; cin >> tamanho; notas = new int[tamanho]; //aloca memória C++ - Ponteiros (continuação) Dimensionando matrizes em tempo de execução : Exemplo int tamanho; int *notas; // ponteiro para inteiro cout > tamanho; notas = new int[tamanho];

Leia mais

O Modelo Síncrono BSP para Computação Paralela

O Modelo Síncrono BSP para Computação Paralela O Modelo Síncrono BSP para Computação Paralela Raphael Y. de Camargo Ricardo Andrade Departamento de Ciência da Computação Instituto de Matemática e Estatística Universidade de São Paulo, Brasil São Paulo,

Leia mais

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição Fundamentos de Programação Linguagem C++ Estruturas de controle Parte II Estruturas de repetição Prof. Bruno E. G. Gomes IFRN 1 Estruturas de Controle Permitem o controle da sequência de execução de um

Leia mais

Algoritmos e Estruturas de Dados 2005/2006. Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema

Algoritmos e Estruturas de Dados 2005/2006. Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema Vectores: Algoritmos de Pesquisa Algoritmos e Estruturas de Dados 2005/2006 Introdução Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema noção de algoritmo muito

Leia mais

Organização e Arquitetura de Computadores

Organização e Arquitetura de Computadores Organização e Arquitetura de Computadores Hierarquia de Memória: Introdução Alexandre Amory Edson Moreno Nas Aulas Anteriores Computação Organização interna de CPU Parte operativa: Lógica combinacional

Leia mais

O que é um apontador em C (type pointer in C)?

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

Leia mais

SSC0304 Introdução à Programação para Engenharias

SSC0304 Introdução à Programação para Engenharias SSC0304 Introdução à Programação para Engenharias Aula 1 - Apresentação Professor: Jó Ueyama - joueyama@icmc.usp.br Estagiário PAE: Heitor Freitas Vieira - heitorfv@icmc.usp.br 1 Objetivo Programa resumido

Leia mais

Hierarquia de Memória

Hierarquia de Memória Hierarquia de Memória Introdução e Análise do Desempenho AC1 Hierarquia da Memória: Análise do Desempenho 1 Hierarquia de Memória A velocidade dos processadores tem aumentado muito mais rapidamente do

Leia mais

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento Hello World Linguagem C printf("hello world!\n"); main é a função principal, a execução do programa começa por ela printf é uma função usada para enviar dados para o vídeo Palavras Reservadas auto double

Leia mais

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Prova - 23a de junho de 2008

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Prova - 23a de junho de 2008 Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Prova - 23a de junho de 2008 Nome: Assinatura: 1 a Questão: (2.0 pontos) Números Aleatórios Escreva um programa que gere N números

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

1 O filtro da mediana

1 O filtro da mediana CCM0118 Computação I Departamento de Ciência da Computação IME-USP Curso de Ciências Moleculares Turma 22 Segundo Semestre de 2012 Quarto Exercício-Programa Prazo de entrega: até 4 de dezembro de 2012.

Leia mais

Introdução à Computação

Introdução à Computação Introdução à Computação Linguagem C Professor: André de Carvalho Aula de hoje Introdução Tipos compostos Tipo enumeração Conclusão Tipos compostos A Linguagem C permite criar tipos de dados definíveis

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

Professora Jeane Melo

Professora Jeane Melo Professora Jeane Melo Roteiro Lista Encadeada Alocação: Estática x Dinâmica O que são Ponteiros? Ponteiros Variáveis que Armazenam Endereços de Memória Mas, toda variável não é armazenada na memória? Ponteiros

Leia mais

Programação. MEAer e LEE. Bertinho Andrade da Costa. Instituto Superior Técnico. Argumentos da linha de comando Funções recursivas

Programação. MEAer e LEE. Bertinho Andrade da Costa. Instituto Superior Técnico. Argumentos da linha de comando Funções recursivas Programação MEAer e LEE Bertinho Andrade da Costa 2010/2011 1º Semestre Instituto Superior Técnico Argumentos da linha de comando Funções recursivas Programação 2010/2011 DEEC-IST Arg. da linha de comando;

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

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos: CAP. IX - MANIPULAÇÃO DE ARQUIVOS 9.1 Generalidades sobre arquivos 9.2 Abertura e fechamento de arquivos 9.3 Arquivos textos e arquivos binários 9.4 Leitura e escrita em arquivos binários 9.5 Procura direta

Leia mais

Hierarquia de memória

Hierarquia de memória Hierarquia de memória Capítulo 6, Secção.{3..} Caches Slides adaptados dos slides do professor Pedro Pereira Consultar slides originais no moodle Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Leia mais

4. Estruturas Fundamentais de Programação em C

4. Estruturas Fundamentais de Programação em C 4. Estruturas Fundamentais de Programação em C 4.1. Imprimindo Mensagens e Valores no Monitor de Vídeo A biblioteca de entrada e saída (stdio.h) possui a função printf que imprime mensagens e valores diretamente

Leia mais

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

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

Leia mais

Funções Vetores Matrizes

Funções Vetores Matrizes Funções Vetores Matrizes Além dos tipos elementares (float, double, char, etc.), é possível também passar um vetor ou uma matriz como parâmetro de funções. Quando um vetor é passado como parâmetro, o que

Leia mais

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização.

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização. UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Sistemas de Computação 2016.2 Profa.: Simone Martins Lista 1 1. Um programa P foi compilado com um compilador

Leia mais

Representação de Dados (inteiros não negativos)

Representação de Dados (inteiros não negativos) Representação de Dados (inteiros não negativos) 1 Memória Armazena instruções e dados durante a execução de um programa A memória principal pode ser vista como um array de bytes, cada um com seu endereço

Leia mais

Representação de Dados

Representação de Dados Representação de Dados Representação binária Exemplo: 15213 10 11101101101101 2 Vantagens: Implementação eletrônica Possibilidade de armazenar elementos com dois estados Transmissão eletrônica confiável

Leia mais

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis Introdução a classes e objetos Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis Estruturas de Seleção if... else Operador condicional (? : ) switch Aula de Hoje Estruturas de Repetição: while/do... while/for

Leia mais

1 Exercícios com ponteiros

1 Exercícios com ponteiros 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

Leia mais

Introdução à Programação em C (II)

Introdução à Programação em C (II) Introdução à Programação em C (II) Resumo Streams de Texto Leitura e escrita de caracteres Caracteres como números inteiros Exemplos Cópia de Ficheiros Contagem de Caracteres Contagem de Linhas Contagem

Leia mais

Módulo 10 Listas Encadeadas

Módulo 10 Listas Encadeadas Estruturas de Dados Módulo 10 Listas Encadeadas 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus

Leia mais

Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de Dados I Algoritmos e Estruturas de Dados I Prof. Daniel M. Martin (daniel.martin@ufabc.edu.br) Aula 9 (laboratório) O Labirinto Descrição do problema O problema é achar o caminho entre dois pontos de interesse

Leia mais

Métodos Computacionais. Listas Encadeadas

Métodos Computacionais. Listas Encadeadas Métodos Computacionais Listas Encadeadas Vetores Declaração de vetor implica na especificação de seu tamanho Não se pode aumentar ou diminuir tamanho Outra alternativa no uso de vetores é alocar dinamicamente

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

INF 1620 P1-04/10/03 Questão 1 Nome:

INF 1620 P1-04/10/03 Questão 1 Nome: INF 1620 P1-04/10/03 Questão 1 a) Implemente uma função para calcular as raízes de uma equação do segundo grau do tipo ax 2 +bx+c=0. O protótipo dessa função deve ser: void raizes (float a, float b, float

Leia mais

5 Comando de Seleção Simples e Composta

5 Comando de Seleção Simples e Composta 5 Comando de Seleção Simples e Composta Ronaldo F. Hashimoto e Carlos H. Morimoto Essa aula introduz o comando de seleção, que permite ao seu programa tomar decisões sobre o fluxo do processamento, ou

Leia mais

EXERCÍCIO 1 MUDANDO AS CORES

EXERCÍCIO 1 MUDANDO AS CORES EXERCÍCIO 1 MUDANDO AS CORES O código abaixo ilustra o uso da comunicação ponto-a-ponto e a comunicação coletiva. Nesse código, uma matriz de três cores (verde, branco, vermelho e) é distribuída para todos

Leia mais

C++ - Funções Virtuais (Polimorfismo) Base. Deriv0 Deriv1 Deriv2. print( ) print( ) print( ) dv0 dv1 dv2. p[0] = &dv0; p[1] = &dv1; p[2] = &dv2;

C++ - Funções Virtuais (Polimorfismo) Base. Deriv0 Deriv1 Deriv2. print( ) print( ) print( ) dv0 dv1 dv2. p[0] = &dv0; p[1] = &dv1; p[2] = &dv2; C++ - Funções Virtuais (Polimorfismo) Polimorfismo : (assumir várias formas) Em C++ indica a habilidade de uma única instrução chamar diferentes funções e portanto assumir formas diferentes. Veja isto

Leia mais

Revisão C++ - Parte 1

Revisão C++ - Parte 1 Revisão C++ - Parte 1 Prof. Gustavo Leitão Campus Natal Central Disciplina Programação para Ambiente de Redes 5/3/2010 Objetivo da Aula 5/3/2010 5/3/2010 OBJETIVO DA AULA Revisar os principais comandos

Leia mais

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura Árvores B Prof. Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Fonte: Material da Prof a Ana Eliza Lopes Moura Situação Problema Memória Principal Volátil e limitada Aplicações Grandes

Leia mais

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 04 Alocação Dinâmica Edirlei Soares de Lima Vetores - Declaração e Inicialização Declaração de um vetor: int meu_vetor[10]; Reserva um espaço de 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

Leia mais

Pesquisa Linear. Adriano J. Holanda 15/3/2016

Pesquisa Linear. Adriano J. Holanda 15/3/2016 Pesquisa Linear Adriano J. Holanda 15/3/2016 Busca Linear em memória principal Introdução O dados estarão sempre armazenados na memória principal (DRAM 1 ): não há necessidade de acesso à memória secundária

Leia mais

Curso de C. Introdução by Arnaldo V. Moura e Daniel F. Ferber 3/10/ :43 AM

Curso de C. Introdução by Arnaldo V. Moura e Daniel F. Ferber 3/10/ :43 AM Curso de C Introdução 1 Introdução Roteiro: Recordando Algoritmos Linguagem de Programação O computador Instruções de Máquina Níveis de Abstração Compilação 2 Algoritmos Recordando: Algoritmo: conjunto

Leia mais

Universidade Federal de Mato Grosso do Sul. Implementação de um Sistema Simplificado de Memória Cache

Universidade Federal de Mato Grosso do Sul. Implementação de um Sistema Simplificado de Memória Cache Universidade ederal de Mato Grosso do Sul acom - aculdade de Computação Linguagem de Programação Orientada a Objetos Prof. Me. Liana Duenha Implementação de um Sistema Simplificado de Memória Cache O objetivo

Leia mais

Programação de Computadores II. Cap. 17 Busca

Programação de Computadores II. Cap. 17 Busca Programação de Computadores II Cap. 17 Busca Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais dos profs.:

Leia mais

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Estruturas de Dados Módulo 17 - Busca 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)

Leia mais

Algoritmos e Programação. Linguagem C Procedimentos e. Eliane Pozzebon

Algoritmos e Programação. Linguagem C Procedimentos e. Eliane Pozzebon Algoritmos e Programação Linguagem C Procedimentos e Funções Eliane Pozzebon Procedimentos e Funções Procedimentos são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento

Leia mais

Métodos e Procedimentos. Prof. Jesus José de Oliveira Neto

Métodos e Procedimentos. Prof. Jesus José de Oliveira Neto Métodos e Procedimentos Prof. Jesus José de Oliveira Neto Procedimentos são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. Métodos são procedimentos

Leia mais

Figura 1: Uma matriz contem elementos de um mesmo tipo, com início em (0,0). 30 é o número de colunas!

Figura 1: Uma matriz contem elementos de um mesmo tipo, com início em (0,0). 30 é o número de colunas! 22 Matrizes Ronaldo F Hashimoto e Carlos H Morimoto Oobjetivodestaaulaéintroduzirotipomatriz Aofinaldessaaulavocêdeverásaber: descrever o que são matrizes em C Declarar matrizes Como acessar elementos

Leia mais

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. 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

Leia mais

Trabalho Linguagem e Programação de Compiladores

Trabalho Linguagem e Programação de Compiladores Trabalho Linguagem e Programação de Compiladores Responda as questões. Os exercícios deverão ser desenvolvidos utilizando as estruturas apresentadas em aula e adequadas para cada problema. Forma de entrega:

Leia mais

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1 INF1007: Programação 2 8 Listas Encadeadas (c) Dept. Informática - PUC-Rio 1 Tópicos Principais Motivação Listas encadeadas Implementações recursivas Listas de tipos estruturados (c) Dept. Informática

Leia mais

Universidade de Brasília. Departamento de Ciência da Computação. Curso C: Estruturas. Prof. Ricardo Pezzuol Jacobi

Universidade de Brasília. Departamento de Ciência da Computação. Curso C: Estruturas. Prof. Ricardo Pezzuol Jacobi Universidade de Brasília Departamento de Ciência da Computação Curso C: Estruturas Prof. Ricardo Pezzuol Jacobi rjacobi@cic.unb.br Estruturas Struct s o cole es de dados heterog neos agrupados em uma mesma

Leia mais

Computadores de Programação (DCC/UFRJ)

Computadores de Programação (DCC/UFRJ) Computadores de Programação (DCC/UFRJ) Aula 14: 04 de junho de 2013 1 2 ...antigamente.. No início da Computação, todos os programas eram escritos em linguagem de montagem Complexidade, propenso a erros,

Leia mais

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

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

Leia mais

As notícias são recebidas no formato texto, contendo o nome da fonte geradora (agência):

As notícias são recebidas no formato texto, contendo o nome da fonte geradora (agência): MAC122 Princípios de Desenvolvimento de Algoritmos Segundo Semestre de 2013 BMAC IMEUSP Prof. Marcilio EXERCÍCIO PROGRAMA II Entregar 27/Out/2013 O programa recebe mensagens da rede. As mensagens podem

Leia mais

Arrays em Java. Prof. Renato Pimentel. GGI030 Programação Orientada a Objetos. Universidade Federal de Uberlândia Faculdade de Computação

Arrays em Java. Prof. Renato Pimentel. GGI030 Programação Orientada a Objetos. Universidade Federal de Uberlândia Faculdade de Computação Universidade Federal de Uberlândia Faculdade de Computação Arrays em Java Prof. Renato Pimentel GGI030 Programação Orientada a Objetos GGI030 Arrays em Java Prog. Orient. Objetos 1 / 20 Sumário 1 API GGI030

Leia mais

Complexidade de algoritmos Notação Big-O

Complexidade de algoritmos Notação Big-O Complexidade de algoritmos Notação Big-O Prof. Byron Leite Prof. Tiago Massoni Engenharia da Computação Poli - UPE Motivação O projeto de algoritmos é influenciado pelo estudo de seus comportamentos Problema

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

Programação II. Busca em Vetor (search) Bruno Feijó Dept. de Informática, PUC-Rio

Programação II. Busca em Vetor (search) Bruno Feijó Dept. de Informática, PUC-Rio Programação II Busca em Vetor (search) Bruno Feijó Dept. de Informática, PUC-Rio Busca em Vetor Problema: Entrada: vetor v com n elementos elemento d a procurar Saída m se o elemento procurado está em

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

1.Quais serão os valores de x, y e p ao final do trecho de código abaixo? int x, y, *p;y = 0; p = &y; x = *p; x = 4; (*p)++; --x; (*p) += x;

1.Quais serão os valores de x, y e p ao final do trecho de código abaixo? int x, y, *p;y = 0; p = &y; x = *p; x = 4; (*p)++; --x; (*p) += x; PONTEIROS 1.Quais serão os valores de x, y e p ao final do trecho de código abaixo? int x, y, *p;y = 0; p = &y; x = *p; x = 4; (*p)++; --x; (*p) += x; 2.Os programas (trechos de código) abaixo possuem

Leia mais

1 Questões de Múltipla Escolha

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

Leia mais

Slides trabalhados durante a quinta aula

Slides trabalhados durante a quinta aula Slides trabalhados durante a quinta aula prática Estruturas de Controle de Fluxo 3. Laços de repetição (continuação) Exercício: Construa um algoritmo, representando-o através de um pseudocódigo e de um

Leia mais

Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de Dados I Algoritmos e Estruturas de Dados I Prof. Daniel M. Martin (daniel.martin@ufabc.edu.br) Aula 6 Modularização Método que consiste em organizar programas grandes em pequenas partes (módulos) Cada módulo tem

Leia mais

Introdução à Programação em C

Introdução à Programação em C Introdução à Programação em C Tipos e Operadores Elementares Estruturas de Controlo Resumo Novidades em C Exemplo: Factorial Tipos de Dados Básicos Saltos Condicionais: if-then-else Valor de retorno de

Leia mais

Introdução aos Sistemas Operacionais. Subsistema de Arquivos

Introdução aos Sistemas Operacionais. Subsistema de Arquivos Introdução aos Sistemas Operacionais Subsistema de Arquivos Eleri Cardozo FEEC/Unicamp Subsistema de Arquivos O subsistema de arquivos deve prover soluções para as seguintes questões: Como a informação

Leia mais

Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de Dados I Algoritmos e Estruturas de Dados I Prof. Daniel M. Martin (daniel.martin@ufabc.edu.br) Aula 8 Aplicação de Fila Calcular a distância entre pessoas no Facebook Aplicação de Fila Calcular a distância entre

Leia mais

Memória Cache: Funcionamento

Memória Cache: Funcionamento Microcontroladores e Interfaces º Ano Eng. Electrónica Industrial Carlos A. Silva º Semestre de 5/6 http://www.dei.uminho.pt/lic/mint Assunto: Memória Cache Aula #9 9Maio6-M Memória Cache: Funcionamento

Leia mais

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1 INF1007: Programação 2 6 Ordenação de Vetores 01/10/2015 (c) Dept. Informática - PUC-Rio 1 Tópicos Introdução Ordenação bolha (bubble sort) Ordenação por seleção (selection sort) 01/10/2015 (c) Dept. Informática

Leia mais

Fábio da Fontoura Beltrão Felipe Augusto Chies Lucas Fialho Zawacki Marcos Vinicius Cavinato Matheus de Carvalho Proença

Fábio da Fontoura Beltrão Felipe Augusto Chies Lucas Fialho Zawacki Marcos Vinicius Cavinato Matheus de Carvalho Proença C++ Fábio da Fontoura Beltrão Felipe Augusto Chies Lucas Fialho Zawacki Marcos Vinicius Cavinato Matheus de Carvalho Proença Primeiro Programa //Primeiro Programa C++ #include int main() { std::cout

Leia mais

Universidade Federal do Espírito Santo. Programação I Tipos de Dados Básicos - C Professora: Norminda Luiza

Universidade Federal do Espírito Santo. Programação I Tipos de Dados Básicos - C Professora: Norminda Luiza Universidade Federal do Espírito Santo Programação I Tipos de Dados Básicos - C Professora: Norminda Luiza Variáveis Tipos de Dados Básicos Formação dos identificadores o nome deve começar com uma letra

Leia mais

Leitura Segura de Strings

Leitura Segura de Strings Leitura Segura de Strings As funções da biblioteca padrão de C que podem ser usadas para leitura de strings não são suficientemente adequadas para esta finalidade básica. Nesta seção, serão descritos alguns

Leia mais

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 04 Pag.: 1

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 04 Pag.: 1 Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 04 Pag.: 1 - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) PIP/CA - Programa Interdisciplinar de Pós-Graduação

Leia mais

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP Introdução à Computação II AULA 16 BCC Noturno - EMA896115B Prof. Rafael Oliveira olivrap@gmail.com Universidade Estadual Paulista Júlio de Mesquita Filho UNESP Rio Claro 2014 (Sem 2) Estruturas de Dados

Leia mais

Linguagem C Ficheiros Compilação Separada

Linguagem C Ficheiros Compilação Separada Linguagem C Ficheiros Compilação Separada typedef definição de tipos Apontadores para estruturas Ficheiros na bibiloteca standard do C Compilação Separada Definição de novos tipos em C É possível definir

Leia mais

Programação Estruturada e Orientada a Objetos REVISÃO

Programação Estruturada e Orientada a Objetos REVISÃO Programação Estruturada e Orientada a Objetos REVISÃO 2013 O que veremos hoje? Introdução Revisão arrays e matrizes Exercícios Transparências baseadas no material do Prof. Gilbert Azevedo Vetor (Array)

Leia mais

C++ - Matrizes. Observ.: C++ não avisa quando o limite de uma matriz foi excedido. Providenciar a verificação é responsabilidade do programador.

C++ - Matrizes. Observ.: C++ não avisa quando o limite de uma matriz foi excedido. Providenciar a verificação é responsabilidade do programador. C++ - Matrizes É um conjunto de variáveis, do mesmo tipo, referenciadas por um único nome, onde cada variável é diferenciada por meio de um número entre colchetes chamado índice. Declaração : tipo nome

Leia mais

Prova de Recuperação

Prova de Recuperação Programação I Prova de Recuperação 1. (1 ponto) Considere um programa que leia de um arquivo de veículos os seguintes dados: placa de um veículo, ano de fabricação, consumo médio de combústivel, modelo

Leia mais