Prof. Marco Antonio M. Carvalho

Documentos relacionados
Fundamentos de Programação

Programação: Vetores

Treinamento Olimpíada Brasileira de Informática

Introdução à Computação MAC0110

Prof. Marco Antonio M. Carvalho

Aula 14: Funções Passagem de Parâmetros por Referência

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

Introdução a Programação de Jogos

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

ITENS FUNDAMENTAIS Programando em C++

PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia

Aula 12- Variáveis e valores reais

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

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

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

Métodos Computacionais

Programação Aplicada à Engenharia

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

Linguagem C: Introdução

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

Aula 10: Introdução a Vetores e Matrizes

Outras Linguagens. Aulas 26 e 27. DECivil Departamento de Engenharia Civil, Arquitectura e Georrecursos

Slides trabalhados durante a quinta aula

Revisão C++ - Parte 1

Paradigmas de Linguagens

Disciplina de Algoritmos e Programação

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Exercícios... Capítulo 15. if62c. prof. Robinson Vida Noronha. Monday, March 23, 15

Linguagem de Programação C. Prof. Fabrício Olivetti de França

LISTA DE EXERCÍCIOS 2

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Recursividade UFOP 1/48

Disciplina de Algoritmos e Programação

Introdução à Linguagem C

Fundamentos de Programação. Linguagem C++ Introdução, identificadores, tipos de dados. Prof. Bruno E. G. Gomes IFRN

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

Introdução à Linguagem C Variáveis e Expressões

Matrizes em C. Lucas Ferrari de Oliveira Professor Adjunto. Universidade Federal do Paraná

Módulo 1. Introdução. AEDS I C++ (Rone Ilídio)

Aula 2 Listas Lineares Sequenciais. prof Leticia Winkler

Linguagem C Princípios Básicos (parte 1)

Linguagem C vetores multidimensionais

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

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

INTRODUÇÃO A LINGUAGEM C

Vetores são estruturas indexadas utilizadas para armazenar dados de um mesmo tipo: int, char, float ou double. Oexemploaseguirédeumvetordeinteiros:

Prof. Marco Antonio M. Carvalho

Modularidade - Fun ções e Procedimentos

LP II Estrutura de Dados

Algoritmos: Conceitos Fundamentais. Slides de autoria de Rosely Sanches e Simone Senger de Souza

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Estrutura de Programas e Tipos de Dados Simples

Linguagem de Programação

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

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

Matrizes. DCC 119 Algoritmos

Linguagens compiladas: C++ Fora do livro adoptado

Vetores e Matrizes. Conceito. Conceito. Conceito. Conceito. Conceito. Variáveis Compostas Homogêneas. Matriz

Olimpíadas de Informática

1 Resumo: Matrizes. 2.1 Como declarar uma matriz IME/USP. Departamento de Ciência da Computação

Algoritmos e Estruturas de Dados I

19 Vetores, Ponteiros e Funções

Introdução à linguagem C++

Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz

TÉCNICO DE INFORMÁTICA - SISTEMAS

TP062-Métodos Numéricos para Engenharia de Produção Erros-Ponto Flutuante

Módulo Lógica Programação com aplicações em Java. Projeto khouse Profissionalizante Profª Larissa Brandão

Capítulo 2 Operadores. A função scanf()

INTRODUÇÃO À LINGUAGEM C. Prof. Msc. Luis Filipe Alves Pereira 2015

FACULDADE BATISTA MINEIRA - CST Banco de Dados Estruturas de Dados - Variáveis

Laboratório 4 Correcção de erros sintácticos e tipos de dados primitivos

Estruturas de Repetição

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

Linguagens de Programação I

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

1 Exercícios com ponteiros

Introdução à Programação. Vanessa Braganholo

Trabalho Linguagem e Programação de Compiladores

Introdução. 17-out-08 Leandro Tonietto 2

Biblioteca STL aplicada à Maratona de

Linguagens de Programação PROGRAMAÇÃO DE COMPUTADORES. Linguagem C. Linguagem C Estrutura Básica. Constante (literais) Linguagem C Primeiro Programa

Linguagem C Funções. André Tavares da Silva.

INF 1007 Programação II

ESTRUTURAS COMPOSTAS. Variáveis Compostas Unidimensionais VETOR. Baseado nos slides de Rosely Sanches e Simone Senger de Souza

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 3 de setembro de 2010

Computação e Programação Aula prática nº 5. Enunciados dos problemas

Introdução à Computação (IC) Linguagem C: Variáveis e Constantes

Variáveis, Tipos de Dados e Operadores

Aula 10 Alocação Dinâmica de Memória Listas Encadeadas. prof Leticia Winkler

Lição 4 Fundamentos da programação

4. Estruturas Fundamentais de Programação em C

LP2 Laboratório de Programação 2 Ciência da Computação. Problema proposto

MC102 Algoritmos e Programação de Computadores

Computação I (MAB120) DCC/UFRJ

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

1 Exercícios com ponteiros

Introdução a Programação na Linguagem C.

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

Transcrição:

Prof. Marco Antonio M. Carvalho

Lembretes Lista de discussão Endereço: programaacao@googlegroups.com Solicitem acesso: http://groups.google.com/group/programaacao Página com material dos treinamentos http://www.decom.ufop.br/marco/extensao/obi/ Repositório online de problemas das edições passadas da OBI http://br.spoj.com/problems/obi/sort=-7 Moodle http://programaacao.net.br/login/index.php 2

Avisos 3

Na aula de hoje Vetores Ordenação. Representação de Tipos; Problemas Ad Hoc. 4

Vetores 5

Vetores Um vetor é um conjunto de variáveis Do mesmo tipo; Referenciadas pelo mesmo identificador (nome); Cada variável é diferenciada das outras por um número, chamado de índice. vector<int> nota[9]; Índice 0 1 2 3 4 5 6 7 8 Valor 6.5 4.3 7.8 9.8 10.0 9.8 8.7 10.0 10.0 6

Vetores Vetores são variáveis compostas homogêneas unidimensionais; Sintaxe vector<tipo> identificador(dimensao); Em que: tipo: é um tipo da linguagem C++; identificador: é um identificador válido em linguagem C++; dimensao: é o número de posições, um número inteiro, que determina quantos valores poderão ser armazenados no vetor. Note que é necessário incluir a biblioteca <vector>.! 7

! Vetores #include <vector>! using namespace std;! int main()! {! vector<int> numeros(50);! vector<char> letras(10);! vector<float> notas(14);! vector<double> aproximacoes(999);! return 0;! }! 8

Vetores Somente um identificador é utilizado A distinção entre as posições é feita pelo índice. O índice permite o acesso direto a uma determinada posição Não é necessário percorrer todas as outras até chegar na desejada. 9

!! Vetores int main()! {! vector<int> numeros(50);! numeros[4] = 1;! numeros[10] = 2;! numeros[49] = 3;! }! return 0;! 10

Vetores Atenção! A primeira posição de um vetor sempre é a posição zero; A última posição é sempre tamanho-1; É possível tentar escrever/ler uma posição indevida no vetor O compilador não faz esta verificação; Causa erro de execução! 11

! int main()! {! vector<int> numeros(5);//o vetor possui 5 posicoes! numeros[0] = 1;//primeira posicao! numeros[1] = 2;! numeros[2] = 3;! numeros[3] = 4;! numeros[4] = 5;//última posicao! numeros[5] = 6;//erro! numeros[6] = 7;//erro! return 0;! }! 12

Vetores As posições de um vetor podem ser utilizadas em expressões algébricas e lógicas Cuidado para o tipo resultante da expressão não ser diferente do tipo do vetor. 13

!!!! int main()! {! vector<int> numeros(5);! numeros[0]+=numeros[1];! cout<<numeros[3]<<endl;! numeros[1]=numeros[2]*numeros[3];! }! if(numeros[3]>=numeros[4])! numeros[3]++;! return 0;! 14

Vetores e Estruturas de Repetição Para percorrer ou preencher um vetor, utilizamos estruturas de repetição Qualquer uma delas; Porém, a instrução for é a mais utilizada, por causa do seu contador, que pode ser utilizado como índice. 15

!!!!! #define TAMANHO 5! int main()! {! vector<int> vetor(tamanho);! printf("digite %d números\n", TAMANHO);! for(int i=0; i<tamanho; i++)! cin>>vetor[i];! for(int i=0; i<tamanho; i++)! cout<<vetor[i]<<endl;! }! return 0;! 16

Ordenação Frequentemente nos deparamos com a tarefa de ordenar valores numéricos armazenados em um vetor; Felizmente, temos um algoritmo de ordenação eficiente já implementado na biblioteca padrão do C++; Por padrão, o algoritmo ordena um vetor de modo crescente, mas podemos alterá-lo para ordenar de modo decrescente. 17

!! #include <iostream>! #include <algorithm>! #include <vector>! using namespace std;! int main(){! vector<int> vetor(tamanho);! printf("digite %d números\n", TAMANHO);! for(int i=0; i<tamanho; i++)! cin>>vetor[i];! //ordena de forma crescente! sort (vetor.begin(), vetor.end());! return 0;! } 18

!!! //função auxiliar! bool decrescente (int i,int j){! "return (i>j);! }! int main(){! vector<int> vetor(tamanho);! } printf("digite %d números\n", TAMANHO);! for(int i=0; i<tamanho; i++)! cin>>vetor[i];! //ordena de forma decrescente! sort (vetor.begin(), vetor.end(), decrescente);! return 0;! 19

Mandamentos do Uso de Vetores 1. Não alocarás dinamicamente; 2. Declararás o vetor com tamanho maior do que o limite máximo do problema; 3. Limparás o vetor antes de usar; 4. Não cobiçarás a memória do próximo. 20

Problemas Selecionados http://br.spoj.com/problems/pusapo11/ http://br.spoj.com/problems/fliperam/ http://br.spoj.com/problems/minado12/ http://br.spoj.com/problems/eleicoes/ http://br.spoj.com/problems/impedido/ 21

Representação de Tipos 22

Representação de tipos Mantenha a simplicidade Nada de matar formiga usando tanques de guerra. Familiarize-se com os tipos de dados primitivos A partir deles quase tudo pode ser criado e resolvido. Será que a variável comporta os valores dos problemas? 23

! Mandamentos do Overflow Aritmético 1. Não dividirás por zero; 2. Realizarás testes dos limites dos valores; 3. Compararás números reais usando cmp(): const double EPS = 1e-10;! //retorna 1 caso x>y! //retorna 0 caso x==y! //retorna -1 caso x<y! int cmp(double x, double y = 0, double tol = EPS) {! return (x <= y + tol)? (x + tol < y)? -1 : 0 : 1;! } 24

Representação de Tipos Tipo Faixa Mínima Caracteres char -128 a 127 Inteiros Ponto Flutuante int 2.147.483.648 a 2.147.483.647 unsigned int 0 a 4.294.967.295 long 2.147.483.648 a 2.147.483.647 unsigned long 0 a 4.294.967.295 long long 9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 float double 3.4E +/- 38 (precisão de 6 dígitos) 1.7E +/- 308 (precisão de 15 dígitos) 25

Representação de Tipos Note que o tamanho dos tipos não é definido pela linguagem Na verdade, depende da arquitetura utilizada 16 bits, 32 bits, 64 bits Para maior precisão, existem estruturas e bibliotecas para números de alta precisão Por exemplo, a bignum; Com isso surge a aritmética de inteiros de alta precisão; Mas isso é assunto para outra aula 26

Representação de Tipos Estar atento aos limites de cada tipo é especialmente importante para evitar erros; Na descrição da entrada de cada problema, é informado o intervalo de valores que podem ser utilizados na entrada Por exemplo, se um inteiro da entrada está entre 0 e 3x10 9, o tipo int não servirá; Consequentemente, um programa que usa o tipo int funcionará para alguns casos e outros não. 27

Problemas Ad Hoc 28

Problemas Ad Hoc Ad Hoc Para isto, para um determinado ato; Para este caso específico; Eventualmente investido em função provisória, para um fim especial. 29

Problemas Ad Hoc Problemas Ad Hoc são aqueles cujos algoritmos de solução não recaem em categorias bem estudadas; Cada problema é diferente do outro Não existe técnica específica ou genérica para resolvê-los. São os mais divertidos (às vezes frustrantes) Desafios novos a cada problema. A solução pode exigir uma estrutura nova ou um conjunto nada usual de laços e condições. 30

Problemas Ad Hoc Às vezes requerem combinações especiais raras, ou pelo menos, raramente encontradas; Exigem leitura cuidadosa do enunciado A solução pode ser o ataque a cada uma das dicas dadas no enunciado. Por serem tão livres, é necessário vigiar-se para não cair em códigos ineficientes Por exemplo, cinco laços aninhados 31

Problemas Ad Hoc Problemas Ad Hoc podem ser superficialmente categorizados Triviais, fáceis, médios Jogos (cartas, tabuleiros, etc.); Combinatórios (Josephus, Palíndromos, Anagramas); Problemas reais/simulação; Simplesmente Ad Hoc. 32

Problemas Ad Hoc Truque de Cartas Um mágico faz o seguinte truque tendo n cartas do naipe de espadas com a face para baixo: Se retirar a carta do topo, a próxima será o ás; Se retirar duas cartas, a próxima será o 2; Se retirar três cartas, a próxima será o 3; Cartas retiradas voltam ao fundo das n cartas, menos as viradas. Qual é o algoritmo de embaralhamento das cartas? 33

Problemas Selecionados http://br.spoj.com/problems/quadrad2/ http://br.spoj.com/problems/fatoria2/ http://br.spoj.com/problems/querm/ http://br.spoj.com/problems/jsedex/ http://br.spoj.com/problems/overf09/ 34

Perguntas? 35