Experimentos com a memória cache do CPU

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 (http://www.ime.usp.br/~gold). 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 24

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org Breve Histórico A linguagem de programação C foi criada na década de 70, por Dennis Ritchie, que a implementou,

Leia mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais

Leia mais

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos Vetores Nos capítulos anteriores estudamos as opções disponíveis na linguagem C para representar: Números inteiros em diversos intervalos. Números fracionários com várias alternativas de precisão e magnitude.

Leia mais

Experimentos com o Cache

Experimentos com o Cache IME-USP Departamento de Ciência da Computação Experimentos com o Cache Diogo de Jesus Pina 6798294 (diogojpina@gmail.com) Disciplina: Organização de Computadores Ministrada por: Prof. Dr. Alfredo Goldman

Leia mais

Diminui o gargalo existente entre processador e memória principal; 5 a 10 vezes mais rápidas que a memória principal; Ligada diretamente à MP;

Diminui o gargalo existente entre processador e memória principal; 5 a 10 vezes mais rápidas que a memória principal; Ligada diretamente à MP; Diminui o gargalo existente entre processador e memória principal; Diferença de velocidade 5 a 10 vezes mais rápidas que a memória principal; Ligada diretamente à MP; Tecnologia semelhante à da CPU e,

Leia mais

Algoritmos e Programação Estruturada

Algoritmos e Programação Estruturada Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.

Leia mais

Programação Estruturada I

Programação Estruturada I Programação Estruturada I Introdução a Linguagem C Prof. Thiago Caproni Tavares 1 Prof. Mateus dos Santos 2 1 thiago.tavares@ifsuldeminas.edu.br 2 mateus.santos@ifsuldeminas.edu.br Última Atualização:

Leia mais

Alocação dinâmica de memória

Alocação dinâmica de memória Alocação dinâmica de memória Jander Moreira 1 Primeiras palavras Na solução de problemas por meio algoritmos ou programas, é comum surgir a necessidade de manter todo o conjunto de dados a ser processado

Leia mais

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa Prof. Yandre Maldonado - 1 PONTEIROS Prof. Yandre Maldonado e Gomes da Costa PONTEIROS Prof. Yandre Maldonado - 2 Ponteiro é uma variável que possui o endereço de outra variável; É um poderoso recurso

Leia mais

Programação de Computadores I. Ponteiros

Programação de Computadores I. Ponteiros Ponteiros Prof. Edwar Saliba Júnior Outubro de 2012 Unidade 13 Ponteiros 1 Identificadores e Endereços Na linguagem C, uma declaração de variável faz associação entre um identificador e endereços de memória;

Leia mais

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador Linguagem C Tipos de Dados void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador Funções void void pode ser usado em lugar de um tipo, para indicar a ausência de valor

Leia mais

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti ESTRUTURAS DE DADOS I Notas de Aula 1 SUMÁRIO 1. INTRODUÇÃO... 2 1.1 Array (vetores)... 2 2. BUSCA DE ELEMENTOS... 3 2.1 Busca Seqüencial... 3 2.2 Busca Binária... 3 2.3 Busca Indexada... 3 2.4 Busca Hash...

Leia mais

ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas

ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Biológicas Departamento de Computação ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas Luiz Henrique Santos

Leia mais

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS Disciplina de Nivelamento - 2000/1: ALGORITMOS & ESTRUTURAS DE DADOS Professor Responsável: Prof. Fernando Santos

Leia mais

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

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica Introdução a Programação Ponteiros e Strings, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos a relação entre ponteiros e strings Ponteiros para strings X Vetores de Caracteres Vetores de ponteiros

Leia mais

MC102 Algoritmos e Programação de Computadores

MC102 Algoritmos e Programação de Computadores MC102 Algoritmos e Programação de Computadores Instituto de Computação UNICAMP Primeiro Semestre de 2015 Roteiro 1 Fundamentos de análise de algoritmos 2 Cálculo da função de custo 3 Exercícios Instituto

Leia mais

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

INF 1620 P1-10/04/02 Questão 1 Nome: INF 1620 P1-10/04/02 Questão 1 Considere uma disciplina que adota o seguinte critério de aprovação: os alunos fazem duas provas (P1 e P2) iniciais; se a média nessas duas provas for maior ou igual a 5.0,

Leia mais

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu. Programação Estruturada Linguagem C Fundamentos da Linguagem Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.br Sumário Estrutura Básica Bibliotecas Básicas Tipos de Dados Básicos Variáveis/Declaração

Leia mais

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++ UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: Bacharelado em Ciências e Tecnologia INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++ Profª ª Danielle Casillo COMPILADORES Toda linguagem de programação

Leia mais

Tipo de Dados em Linguagem C

Tipo de Dados em Linguagem C Tipo de Dados em Linguagem C Principais tipos de dados em C int : tipo de dados inteiros (exemplo: 1, -3, 100, -9, 18, etc.) float : tipo de dados reais (exemplo: 1.33, 3.14, 2.00, -9.0, 1.8, etc.) Ocupa

Leia mais

Programação: Tipos, Variáveis e Expressões

Programação: Tipos, Variáveis e Expressões Programação de Computadores I Aula 05 Programação: Tipos, Variáveis e Expressões José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/56 Valores Valor é uma entidade

Leia mais

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO Curso: Engenharia de Computação e Ciência da Computação Data: 10/09/2013 Disciplina: Programação Estruturada Valor: 3,0 pontos Professor: Henrique Monteiro Cristovão Nota: Aluno: Prova resolvida 4ª Prova

Leia mais

Algoritmos e Programação

Algoritmos e Programação Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Algoritmos e Programação Parte 05 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti

Leia mais

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo. Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto

Leia mais

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores Introdução à Programação Armazenamento de Grande Quantidade de Informação Usando Vetores Armazenando Grande Quantidade de Informação Como armazenar tanta informação? Vetores! 2 Tópicos da Aula Hoje, aprenderemos

Leia mais

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

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados Tipo de dados, tipo abstrato de dados, estruturas de dados Termos parecidos, mas com significados diferentes Tipo de dado Em linguagens de programação

Leia mais

Métodos Computacionais. Árvores

Métodos Computacionais. Árvores Métodos Computacionais Árvores Árvores Vetores e Listas são ótimos para representar estrutura de dados lineares, mas não para modelar dados hierárquicos Exemplos de dados hierárquicos: sistema de arquivos

Leia mais

Curso de Linguagem C

Curso de Linguagem C Curso de Linguagem C 1 Aula 1 - INTRODUÇÃO...4 AULA 2 - Primeiros Passos...5 O C é "Case Sensitive"...5 Dois Primeiros Programas...6 Introdução às Funções...7 Introdução Básica às Entradas e Saídas...

Leia mais

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO Tópicos Estrutura Básica B de Programas C e C++ Tipos de Dados Variáveis Strings Entrada e Saída de Dados no C e C++ INTRODUÇÃO O C++ aceita

Leia mais

Programação de Computadores I. Linguagem C Vetores

Programação de Computadores I. Linguagem C Vetores Linguagem C Vetores Prof. Edwar Saliba Júnior Fevereiro de 2011 Unidade 08 Vetores 1 Vetores Sintaxe: tipo_variável nome_vetor[tamanho]; Um vetor é uma variável que possui várias ocorrências de um mesmo

Leia mais

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Resumo da Introdução de Prática de Programação com C. A Linguagem C Resumo da Introdução de Prática de Programação com C A Linguagem C O C nasceu na década de 70. Seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 rodando o sistema operacional

Leia mais

Sistemas Processadores e Periféricos Aula 9 - Revisão

Sistemas Processadores e Periféricos Aula 9 - Revisão Sistemas Processadores e Periféricos Aula 9 - Revisão Prof. Frank Sill Torres DELT Escola de Engenharia UFMG Adaptado a partir dos Slides de Organização de Computadores 2006/02 do professor Leandro Galvão

Leia mais

Análise de complexidade

Análise de complexidade Introdução Algoritmo: sequência de instruções necessárias para a resolução de um problema bem formulado (passíveis de implementação em computador) Estratégia: especificar (definir propriedades) arquitectura

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

MC102 Algoritmos e programação de computadores Aula 3: Variáveis MC102 Algoritmos e programação de computadores Aula 3: Variáveis Variáveis Variáveis são locais onde armazenamos valores na memória. Toda variável é caracterizada por um nome, que a identifica em um programa,

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação CP41F Conversão de tipos. Alocação dinâmica de memória. Recursão. Aula 16 Prof. Daniel Cavalcanti Jeronymo Universidade Tecnológica Federal do Paraná (UTFPR) Engenharia de Computação

Leia mais

Busca. Pesquisa sequencial

Busca. Pesquisa sequencial Busca Banco de dados existem para que, de tempos em tempos, um usuário possa localizar o dado de um registro, simplesmente digitando sua chave. Uma tabela ou um arquivo é um grupo de elementos, cada um

Leia mais

Índice. Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial

Índice. Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial Índice i Índice Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial 1. A Estrutura Abstrata de Dados Lista... 1 1.1. Definição... 1 1.2. Implementação de Listas utilizando armazenamento

Leia mais

Programação Paralela e Distribuída (DCC/UFRJ)

Programação Paralela e Distribuída (DCC/UFRJ) Programação Paralela e Distribuída (DCC/UFRJ) Aula 7: Programação com memória compartilhada usando OpenMP 1, 8, 10 e 15 de abril de 2015 OpenMP (Open MultiProcessing) Projetado para sistemas de memória

Leia mais

17 - Funções e Procedimentos em C Programação Modular

17 - Funções e Procedimentos em C Programação Modular 17 - Funções e Procedimentos em C Programação Modular Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro Ministrado por: Prof. André Amarante 17

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

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação CP41F Aula 38 Prof. Daniel Cavalcanti Jeronymo Declaração de tipos (typedef). Tipos enumerados (enum). Registros (struct). Uniões (union). Universidade Tecnológica Federal do

Leia mais

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação Linguagem C: variáveis, operadores, entrada/saída Prof. Críston Algoritmos e Programação Linguagem C Linguagem de uso geral (qualquer tipo de aplicação) Uma das linguagens mais utilizadas Foi utilizada

Leia mais

Organização e Arquitetura de Computadores

Organização e Arquitetura de Computadores Organização e Arquitetura de Computadores MemóriaVirtual Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Gerência de memória convencional Divide um programa em unidades menores Partes

Leia mais

Estruturas compostas

Estruturas compostas Estruturas compostas Estruturas são um tipo de dados definido pelo programador, capaz de armazenar, sob um msmo nome de variável, diversos dados inter-relacionados e possivelmente de tipos diferentes.

Leia mais

Resumo da Matéria de Linguagem de Programação. Linguagem C

Resumo da Matéria de Linguagem de Programação. Linguagem C Resumo da Matéria de Linguagem de Programação Linguagem C Vitor H. Migoto de Gouvêa 2011 Sumário Como instalar um programa para executar o C...3 Sintaxe inicial da Linguagem de Programação C...4 Variáveis

Leia mais

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre Cap. 02 Fundamentos de Linguagens Sumário : Linguagem, alfabeto e gramática

Leia mais

Manipulação de Arquivos

Manipulação de Arquivos Manipulação de Arquivos Estrutura de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM Tipo

Leia mais

Arquiteturas de Computadores Paralelos

Arquiteturas de Computadores Paralelos Universidade Tuiuti do Paraná UTP Faculdade de Ciências Exatas - FACET Tecnologia de Análise e Desenvolvimento de Sistemas Organização de Computadores Prof. André Luiz 1 Paralelismo O estudo de paralelismo

Leia mais

INF 1005 Programação I

INF 1005 Programação I INF 1005 Programação I Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição de constantes:

Leia mais

Introdução à Organização de Computadores Memória Principal

Introdução à Organização de Computadores Memória Principal Introdução à Organização de Computadores Memória Principal Sistemas da Computação Prof. Rossano Pablo Pinto, Msc. rossano at gmail com 2 semestre 2007 Tópicos Processadores Memória Principal (seção 2.2)

Leia mais

Programação 1. Rafael Vargas Mesquita. http://www.ci.ifes.edu.br ftp://ftp.ci.ifes.edu.br/informatica/rafael/

Programação 1. Rafael Vargas Mesquita. http://www.ci.ifes.edu.br ftp://ftp.ci.ifes.edu.br/informatica/rafael/ Programação 1 Rafael Vargas Mesquita http://www.ci.ifes.edu.br ftp://ftp.ci.ifes.edu.br/informatica/rafael/ Definição de Matriz Definição: é um conjunto de espaços de memória referenciados por um mesmo

Leia mais

Comunicação entre pai e filho

Comunicação entre pai e filho Comunicação entre pai e filho Ao chamar um fork(), processos pai e filho deixam de compartilhar memória Como fazer então para que o resultado de um processo possa ser recebido pelo outro? Exemplos: Processo

Leia mais

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES CAPÍTULO 5 5 VETORES E MATRIZES 5.1 Vetores Um vetor armazena uma determinada quantidade de dados de mesmo tipo. Vamos supor o problema de encontrar a média de idade de 4 pessoas. O programa poderia ser:

Leia mais

ALGORITMOS E PROGRAMAÇÃO PARA COMPUTADORES II

ALGORITMOS E PROGRAMAÇÃO PARA COMPUTADORES II 1 Disciplina: ALGORITMOS E PROGRAMAÇÃO PARA COMPUTADORES II Faculdade de Análise de Sistemas Práticas de Laboratório 1- Cronograma Previsto (este cronograma pode sofrer alterações em decorrência de ajustes

Leia mais

PARALELIZAÇÃO DE APLICAÇÕES NA ARQUITETURA CUDA: UM ESTUDO SOBRE VETORES 1

PARALELIZAÇÃO DE APLICAÇÕES NA ARQUITETURA CUDA: UM ESTUDO SOBRE VETORES 1 PARALELIZAÇÃO DE APLICAÇÕES NA ARQUITETURA CUDA: UM ESTUDO SOBRE VETORES 1 DUTRA, Evandro Rogério Fruhling 2 ; VARINI, Andre Luis 2 ; CANAL, Ana Paula 2 1 Trabalho de Iniciação Científica _UNIFRA 2 Ciência

Leia mais

MC-102 Algoritmos e Programação de Computadores IC-UNICAMP. Aula 21 - Registros. Por: Luís Augusto Angelotti Meira (Sala IC-71) 1S2005

MC-102 Algoritmos e Programação de Computadores IC-UNICAMP. Aula 21 - Registros. Por: Luís Augusto Angelotti Meira (Sala IC-71) 1S2005 MC-102 Algoritmos e Programação de Computadores IC-UNICAMP Esta aula foi baseada em [1]. Aula 21 - Registros Por: Luís Augusto Angelotti Meira (Sala IC-71) 1S2005 1 Objetivos Conceituar tipos de dados

Leia mais

Tipos de Dados Avançados Vetores e Matrizes

Tipos de Dados Avançados Vetores e Matrizes SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Tipos de Dados Avançados Vetores e Matrizes Prof. Vanderlei Bonato: vbonato@icmc.usp.br Prof. Claudio Fabiano Motta Toledo: claudio@icmc.usp.br

Leia mais

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS João Gabriel Ganem Barbosa Sumário Motivação História Linha do Tempo Divisão Conceitos Paradigmas Geração Tipos de Dados Operadores Estruturada vs

Leia mais

Unidade 14: Arquiteturas CISC e RISC Prof. Daniel Caetano

Unidade 14: Arquiteturas CISC e RISC Prof. Daniel Caetano Arquitetura e Organização de Computadores 1 Unidade 14: Arquiteturas CISC e RISC Prof. Daniel Caetano Objetivo: Apresentar os conceitos das arquiteturas CISC e RISC, confrontando seus desempenhos. Bibliografia:

Leia mais

Memory Leak em Java?

Memory Leak em Java? 1 Memory Leak em Java? Saiba como memory leaks se manifestam em Java e como evitá-los Sobre o Autor Carlos Eduardo G. Tosin (carlos@tosin.com.br) é formado em Ciência da Computação pela PUC-PR, pós-graduado

Leia mais

EFICIÊNCIA DE ALGORITMOS E

EFICIÊNCIA DE ALGORITMOS E AULA 2 EFICIÊNCIA DE ALGORITMOS E PROGRAMAS Medir a eficiência de um algoritmo ou programa significa tentar predizer os recursos necessários para seu funcionamento. O recurso que temos mais interesse neste

Leia mais

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Operações com Strings Introdução a Ponteiros e Funções Profa Rosana Braga 1 Strings Strings são seqüências de caracteres

Leia mais

1 Introdução. 2 Algumas funções úteis para lidar com strings

1 Introdução. 2 Algumas funções úteis para lidar com strings Departamento de Engenharia Electrotécnica PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008 Mestrado Integrado em Engenharia Electrotécnica e Computadores 1º ano 1º semestre Strings e apontadores http://tele1.dee.fct.unl.pt

Leia mais

Análises Geração RI (representação intermediária) Código Intermediário

Análises Geração RI (representação intermediária) Código Intermediário Front-end Análises Geração RI (representação intermediária) Código Intermediário Back-End Geração de código de máquina Sistema Operacional? Conjunto de Instruções do processador? Ambiente de Execução O

Leia mais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais Notas da Aula 4 - Fundamentos de Sistemas Operacionais 1. Threads Threads são linhas de execução dentro de um processo. Quando um processo é criado, ele tem uma única linha de execução, ou thread. Esta

Leia mais

Infra-Estrutura de Software. Introdução

Infra-Estrutura de Software. Introdução Infra-Estrutura de Software Introdução Aula Extra Assembly! NASM 32bits e 16bits (para uso no projeto do bootloader) quinta-feira, dia 18/08, 17h no Anfiteatro 2 Computador Moderno Componentes físicos

Leia mais

Sistemas Operacionais INF 09344 Prof. José Gonçalves

Sistemas Operacionais INF 09344 Prof. José Gonçalves Sistemas Operacionais INF 09344 Prof. José Gonçalves 1 o Trabalho de Programação Período: 2014/1 Data de Entrega: 2/6/2014 Parte I. Usando Fork e Wait Você deve criar um programa C partei.c. Durante a

Leia mais

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++. Data: 14/8 Página 1 de 9 Primeiros passos Introdução Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++. No tutorial anterior, mostramos como

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor

Leia mais

Persistência de Dados

Persistência de Dados Persistência de s Universidade do Estado de Santa Catarina - Udesc Centro de Ciências Tecnológicas - CCT Departamento de Ciência da Computação Tecnologia de Sistemas de Informação Estrutura de s II - DAD

Leia mais

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos Estruturas de Dados Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos Árvores Conceitos Árvores binárias Árvores binárias de pesquisa Árvores binárias balanceadas Árvores ESTRUTURAS

Leia mais

Linguagem C. TGSI Lógica de Programação / Linguagem C Prof. Marcos Roberto

Linguagem C. TGSI Lógica de Programação / Linguagem C Prof. Marcos Roberto Linguagem C O C nasceu na década de 70. Seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 rodando o sistema operacional UNIX. O C é derivado de uma outra linguagem: o B,

Leia mais

struct LISTA item quant

struct LISTA item quant UNIVERSIDADE SÃO JUDAS TADEU ESTRUTURA DE DADOS - PROF. H. Senger IMPLEMENTAÇÃO DE LISTAS COM VETORES A implementação de listas utilizando vetores é simples. Existe apenas uma pequena questão, com relação

Leia mais

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C Sistemas Operacionais e Introdução à Programação Programação com linguagem C 1 Variáveis na linguagem C: tipo char O tipo char representa um caractere ASCII (ocupa só 1 byte) int main(int argc, char **

Leia mais

INTRODUÇÃO BUFFER OVERFLOWS

INTRODUÇÃO BUFFER OVERFLOWS BUFFER OVERFLOW INTRODUÇÃO As vulnerabilidades de buffer overflow são consideradas ameaças críticas de segurança, apesar de ser uma falha bem-conhecida e bastante séria, que se origina exclusivamente na

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 07 Nomes, Vinculações, Escopos e Tipos de Dados Edirlei Soares de Lima Introdução Linguagens de programação imperativas são abstrações

Leia mais

LABORATÓRIO DE SISTEMAS OPERACIONAIS. PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO

LABORATÓRIO DE SISTEMAS OPERACIONAIS. PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO LABORATÓRIO DE SISTEMAS OPERACIONAIS PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO Gerenciamento de Memória no Linux O Linux é um sistema operacional com memória virtual paginada, isto quer dizer que

Leia mais

Esta apresentação ensinará os conceitos de Orientação a Objetos com C++, do mais básico para o mais avançado. É suposto que o aluno já tenha

Esta apresentação ensinará os conceitos de Orientação a Objetos com C++, do mais básico para o mais avançado. É suposto que o aluno já tenha Esta apresentação ensinará os conceitos de Orientação a Objetos com C++, do mais básico para o mais avançado. É suposto que o aluno já tenha conhecimento avançado de C. Exemplo em C: Faça um programa que

Leia mais

Infraestrutura de Hardware. Memória Virtual

Infraestrutura de Hardware. Memória Virtual Infraestrutura de Hardware Memória Virtual Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é entendido e executado pelo HW? Qual é a interface

Leia mais

Sumário. Armazenamento de dados. Tipos de dados dinâmicos. Exemplos. Vectores Vectores dinâmicos Dados dinamicos. Declaração Uso 10-1

Sumário. Armazenamento de dados. Tipos de dados dinâmicos. Exemplos. Vectores Vectores dinâmicos Dados dinamicos. Declaração Uso 10-1 Sumário Armazenamento de dados Vectores Vectores dinâmicos Dados dinamicos Tipos de dados dinâmicos Declaração Uso Exemplos 10-1 Armazenamento de dados Tamanho conhecido antes compilação Vectores BI vect[200]

Leia mais

Algoritmos e Programação _ Departamento de Informática

Algoritmos e Programação _ Departamento de Informática 16 ARQUIVOS Um arquivo corresponde a um conjunto de informações (exemplo: uma estrutura de dados-registro), que pode ser armazenado em um dispositivo de memória permanente, exemplo disco rígido. As operações

Leia mais

2ª Lista de Exercícios

2ª Lista de Exercícios Universidade Federal de Minas Gerais Departamento de Ciência da Computação Algoritmos e Estruturas de Dados II (Turmas M, N, W, F) 1º Semestre de 2012 Profs. Camilo Oliveira, Gisele Pappa, Ítalo Cunha,

Leia mais

Estruturas de Repetição

Estruturas de Repetição Estruturas de Repetição Introdução No capítulo anterior verificamos que a execução seqüencial dos comandos da função main nos limita a programação de algoritmos muito simples. Passamos, então, a dedicar

Leia mais

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme AULA 2: INTRODUÇÃO A LINGUAGEM DE C Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme Agenda Introdução a linguagem C Compiladores Variáveis IDEs Exemplos Exercícios Introdução A Linguagem C

Leia mais

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes Modelagem e Implementação de Aquário de Peixes- por Jorge Fernandes - Página 1 Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes Jorge Fernandes Natal, Agosto de

Leia mais

Balanceamento de Carga

Balanceamento de Carga 40 4. Balanceamento de Carga Pode-se entender por balanceamento de carga uma política a ser adotada para minimizar tanto a ociosidade de utilização de alguns equipamentos quanto a super utilização de outros,

Leia mais

Um processo sob UNIX ocupa uma área de memória formada basicamente por 3 partes:

Um processo sob UNIX ocupa uma área de memória formada basicamente por 3 partes: Processos O UNIX é um sistema operacional multitarefa (suporta multiprogramação). Isso significa que ele é capaz de gerenciar a execução simultânea de vários programas. O termo processo é usado para caracterizar

Leia mais

14.1 Vetor - Problemas

14.1 Vetor - Problemas Problema 14: Um método de Criptografia consiste em substituir as letras de uma mensagem através do emparelhamento de alfabetos tal como dado abaixo. Construir um programa que codifica mensagens usando

Leia mais

Introdução a POO. Introdução a Linguagem C++ e POO

Introdução a POO. Introdução a Linguagem C++ e POO Introdução a POO Marcio Santi Linguagem C++ Introdução a Linguagem C++ e POO Programação Orientada a Objetos (POO) e C++ Recursos C++ não relacionados às classes Incompatibilidades entre C e C++ Classes

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Linguagem de Programação I

Linguagem de Programação I Linguagem de Programação I Curso de Sistemas de Informação Karla Donato Fook karladf@ifma.edu.br DESU / DAI 2016 Linguagem de Programação C 2 1 Linguagem de Programação C Os programas em C consistem em

Leia mais

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 08 Busca em Vetor Edirlei Soares de Lima Busca em Vetor Problema: Entrada: vetor v com n elementos; elemento d a procurar; Saída: m se o elemento procurado

Leia mais

Estruturas (Registros)

Estruturas (Registros) Estruturas (Registros) Agrupa conjunto de tipos de dados distintos sob um único nome string string inteiro inteiro inteiro float float Cadastro Pessoal Nome Endereço Telefone Idade Data de Nascimento Peso

Leia mais

Introdução à Linguagem C

Introdução à Linguagem C Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa Prof. Yandre Maldonado - 2 Linguagem C: Desenvolvida por Dennis Ritchie nos laboratórios da AT&T Bell (EUA) no início dos anos 70; Algol

Leia mais