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

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

IFTO LÓGICA DE PROGRAMAÇÃO AULA 05

Neste artigo estudaremos os conceitos relacionados às matrizes unidimensionais (vetores) e multidimensionais.

9.1.2 Laços Controlados por Entrada: Contador

Linguagens de Programação

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

Linguagem C Funções definidas pelo usuário. Lógica de Programação

Tipos de Dados Avançados Vetores e Matrizes

PROGRAMAÇÃO FUNÇÕES NA LINGUAGEM C

14.1 Vetor - Problemas

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Convertendo Algoritmos para a Linguagem C

Tabela ASCII de caracteres de controle

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

Plano de Aula. if(condição) { bloco de comandos; } else { bloco de comandos2; }

Métodos Computacionais. Fila

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

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

Estrutura de Dados Básica

Introdução a Computação

Registros. Técnicas de Programação. Rafael Silva Guimarães

LINGUAGEM C. Estrutura básica de um programa

INF 1007 Programação II

Programação. MEAer. Bertinho Andrade da Costa. Instituto Superior Técnico. Introdução ao Pré-Processador. 2011/2012 1º Semestre

I Semana de Software Livre da USP Dojo C

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

INF 1005 Programação I

INTRODUÇÃO À LINGUAGEM C++

Introdução à Engenharia ENG1000

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

Métodos Computacionais. Vetores e Matrizes Dinâmicas

5 Apresentando a linguagem C

Implementando uma Classe e Criando Objetos a partir dela

GFM015 Introdução à Computação Linguagem C / Introdução à Modularização de Programas (uso de subprogramas)

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação

Listas (Parte 2) Túlio Toffolo BCC202 Aula 10 Algoritmos e Estruturas de Dados I

7. Estrutura de Decisão

Algoritmos e Programação

Curso de Linguagem C

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3

Linguagem de Programação C

9 Comandos condicionais

Algoritmos e Programação. Curso de Engenharia de Produção Prof. Ms. Rogério Cardoso rogerio.cardoso@aedu.com professor@rogeriocardoso.com.

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

15 a Aula Subprogramação /Subalgoritmos Função e Procedimento

Universidade Federal de Rondônia Técnicas de Desenvolvimento de Programas Lista 4

Elementos de programação em C

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

Sistemas de Apoio à Decisão

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

Conversão de Tipos e Arrays

cast poderia ser usado também para transformar um real (float) em inteiro. A sintaxe C (float)i pode ser substituída em C++ por float(i).

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

Linguagem de Programação I

MC-102 Aula 17 Strings e Matrizes

Estruturas de Dados. Alguns dados não costumam ser tão simples assim... Podem ser compostos por vários dados distintos

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

José Romildo Malaquias

Estruturas de entrada e saída

Vetores. Professor Dr Francisco Isidro Massettto

Programação científica C++

Algoritmo Iterativo. Dilema do Martelo x Edifício. O Martelo. O Edifício 01/06/2014. Dilema das ações x declarações

QUITETURA AVANÇADA DE SISTEMAS

Resolução da lista de exercícios de casos de uso

Conceitos básicos da linguagem C

Capítulo 2: Introdução à Linguagem C

INF 1007 Programação II

Técnicas de Programação I

Filas: conceitos e implementações

Java Como Programar, 8/E

INF 1005 Programação I

Q1 Q2 Q3 Nota. Departamento de Informática - PUC-Rio INF 1005 Programação I P2 20/10/2010. Aluno: Exemplo (apenas um exemplo!):

Programação com Posix Threads

Linguagem e Técnicas de Programação I Tipos de dados, variáveis e constantes. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1:

Trabalho Prático 1 Revisão de Programação, Tipos Abstratos de Dados e Combinação de Alocação Estática e Dinâmica de Memória

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

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Variáveis e Comandos de Atribuição

LTP-IV. Prof. Dr. Silvio do Lago Pereira. Departamento de Tecnologia da Informação Faculdade de Tecnologia de São Paulo

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros.

Tipo de Dados em Linguagem C

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Bases de Dados 2007/2008. Aula 8

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

Introdução à Programação

Algoritmos e Programação II. Sobrecarga

struct LISTA item quant

insfcanceof new public switch transient while byte continue extends for int null

Introdução à Programação. Programação Imperativa (Registros X Classes e Métodos Nativos )

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

compreender a importância de cada estrutura de controle disponível na Linguagem C;

1 - INTRODUÇÃO: O QUE É C?

Filas. A ordem de saída corresponde diretamente à ordem de entrada dos elementos. Fila de caixa bancário

Aula 12: Funções. Pré-requisitos: Todas as aulas anteriores deste módulo. 1. Aproveitando Códigos no Programa

O COMPUTADOR. Introdução à Computação

Transcrição:

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 como armazenar grande quantidade de informação Necessidade de armazenamento Utilização de muitas variaveis Manipulação incremental das informações Aprenderemos a utilizar vetores Conceito Criação Inicialização Acesso Limites de um vetor Passagem de vetores como argumentos Vetores bidimensionais (matrizes) 3

Necessidade de Armazenamento Sistemas armazenam informações para que possam posteriormente acessá-las e manipulá-las Maioria dos sistemas requer o armazenamento de grande quantidade de valores do mesmo tipo Mesmas operações para manipular estes valores Ex: processamento de imagens Milhões de imagens e cada imagem composta de milhões de pixels No desenvolvimento de um programa, devemos definir estruturas e mecanismos para armazenar e manipular esta grande quantidade de informação 4

Calculando a Média Aritmética A média aritmética de um conjunto de valores é dada pela seguinte expressão m n i 1 n x i 5

Como Armazenar Grande Quantidade de Informações? Até agora, vimos construções de programação que permitem guardar uma única informação de cada vez Variável e constante Neste caso, a solução seria criar uma variável para cada valor que desejamos armazenar Não é uma boa solução, porém hoje veremos como podemos trabalhar com esta alternativa 6

Tentativa com Muitas Variáveis #include <stdio.h> int main() { float numero1, numero2; float media; 2 variáveis para armazenar números printf( Digite 2 numeros:\n ); scanf( %f %f, &numero1,&numero2); media = (numero1 + numero2)/2; printf( \na media eh %f\n,media); return 0; Limitação: Só permite média de 2 números 7

Tentativa com Muitas Variáveis #include <stdio.h> int main() { float numero1, numero2, numero3; float media; printf( Digite 3 numeros:\n ); scanf( %f %f %f, &numero1,&numero2,&numero3); media = (numero1 + numero2 + numero3)/3; printf( \na media eh %f\n,media); return 0; Limitação: Só permite média de 3 números 3 variáveis para armazenar números Trecho de código depende da quantidade de números suportados 8

Problemas com Uso de Muitas Variáveis Dificuldade de lidar com mudança do número de informações que devem ser armazenados Acrescentar ou remover variável Muitas vezes requer modificações em várias linhas de código 9

#include <stdio.h> int main() { int qtdnumeros; int contador = 0; float numero; float media = 0.0; Outra Estratégia: Manipulação Incremental da Informação printf( Digite quantidade de numeros:\n ); scanf( %d, &qtdnumeros); while (contador < qtdnumeros) { scanf( %f,&numero); media = media + numero; contador++; media = media/qtdnumeros; printf( \na media eh %f\n,media); return 0; Variável que guarda a quantidade de números entrados Cada número entrado é armazenado na variável numero Permite média de quantidade variada de números 10

#include <stdio.h> int main() { int qtdnumeros; int contador = 0; float numero; float media = 0.0; Outra Estratégia: Manipulação Incremental da Informação Código independe da quantidade de números que serão utilizados na média printf( Digite quantidade de numeros:\n ); scanf( %d, &qtdnumeros); while (contador < qtdnumeros) { scanf( %f,&numero); media = media + numero; contador++; media = media/qtdnumeros; printf( \na media eh %f\n, media); return 0; Contudo perdemos informação sobre cada número digitado! 11

Problemas com Manipulação Incremental de Informação Perda de informação sobre os valores individuais que foram armazenados No exemplo, sabemos apenas qual foi o somatório dos valores inseridos e não quais valores foram inseridos Limita a utilização da informação armazenada No exemplo, se quiséssemos utilizar os mesmos dados para uma operação diferente (ex: multiplicação), não conseguiríamos 12

Necessidade de Vetores Precisamos de alguma estrutura de armazenamento que: armazene vários valores de um determinado tipo permita que os valores sejam acessados de forma simples 9.0 7.5 6.3 8.8 9.8 10.0 Vetores! 13

Vetores Vetor ou array é um tipo de dado utilizado para representar um conjunto de valores homogêneos utilizando um único nome Define uma estrutura que armazena valores de um determinado tipo Um vetor é declarado usando tipo nome[tamanho]; No ato da declaração, devemos especificar o tamanho (dimensão) do vetor Vetores têm tamanho fixo depois de criados 14

float notas[10]; Vetores Índices do vetor notas 0 1 2 3 4 5 6 7 8 9 4 9 8 6 3 7 8 2 9 5 notas[0] notas[1]... notas[9] Cada elemento do vetor é referenciado através do índice do vetor Índice começa em 0 e vai até tamanho -1

Acessando Elementos de Vetores Um determinado elemento do vetor pode ser acessado usando o nome do vetor seguido do índice do elemento entre colchetes ([ ]) A expressão notas[2] se refere ao valor 8 (3º elemento do array) notas 10 9 8 7 notas[2] A expressão notas[2] representa um local para armazenar um inteiro e pode ser utilizada da mesma forma que uma variável do tipo inteiro 16

Calculando a Média com Vetores #include <stdio.h> int main() { int qtdnumeros,contador = 0; float numeros[2000]; float media = 0.0; do{ printf( Quantidade de numeros? (<= 2000):\n ); scanf( %d, &qtdnumeros); while (qtdnumeros <= 0 qtdnumeros > 2000); while (contador < qtdnumeros) { scanf( %f,&numeros[contador]); media = media + numeros[contador]; contador++; media = media/qtdnumeros; printf( \na media eh %f\n,media); return 0; Vetor que guarda números entrados Números podem ser acessados individualmente 17

Vetores na Memória int v[10]; Aloca espaço para 10 valores inteiros, referenciados por v 144 É reservado um espaço de memória contínuo v[0] Acessa o primeiro elemento de v v[9] Acessa o último elemento de v v 104 Mas: v [10] Está errado! 18

Checando os Limites dos Vetores Ao utilizar o índice para referenciar um elemento do vetor, este índice deve permitir o acesso a um elemento válido ( em um endereço da memória alocado para o vetor) Índice deve variar de 0 a tamanho -1 C não avisa quando o limite de um vetor é excedido! Se o programador transpuser o fim do vetor durante a operação de atribuição, os valores serão armazenados em outros dados ou mesmo no código do próprio programa O programador tem a responsabilidade de verificar o limite do vetor! 19

Checando os Limites dos Vetores São comuns, erros de programação no uso de vetores dentro de laços Deve-se prestar atenção na parte de teste do laço int main() { int pares[20]; int i,somapares = 0; for (i = 0; i <= 20; i++) { pares[i] = 2 * i ; somapares = somapares + pares[i];... Por causa do teste errado, esta linha gerará um erro Teste deveria ser i < 20 20

Inicializando Vetores Inicializadores de vetores são representados da seguinte forma: {expressões,onde expressões representam expressões de tipos válidos separadas por vírgulas Vetores podem ser inicializados na declaração int v[5] = {5,10,15,20,25 ; ou simplesmente: int v[]= {5,10,15,20,25; Vetores só podem ser inicializados no ato da declaração! 21

Opções de Inicialização de Vetores No caso de utilizar inicializadores de vetores, note que: Quando não especificado o tamanho, o compilador aloca espaço suficiente para armazenar todos os valores contidos na inicialização Quando o tamanho for especificado e houver a lista de inicialização Se há menos inicializadores que o tamanho especificado, os outros serão zero Mais inicializadores que o necessário implica em um warning Quando o vetor não for inicializado, o tamanho deve ser especificado na declaração! 22

Passando Vetores como Argumentos de Funções Um vetor pode ser passado como argumento para uma função Parâmetro da função deve ser do tipo tipo[] Ao passar um vetor para uma função podemos modificar o conteúdo deste vetor dentro da função Passa-se na verdade o endereço do vetor na memória (veremos em breve!) Modificar um elemento do vetor ou incluir um novo elemento Podemos passar também um elemento em particular de um vetor para uma função Parâmetro deve ser to tipo tipo 23

Passando Vetores como Argumentos para Funções #include <stdio.h> float media(int n, float num[]){ int i; float s = 0.0; for(i = 0; i < n; i++) s = s + num[i] ; return s/n ; int main(){ float numeros[10] ; float med; int i ; for(i = 0; i < 10; i++) scanf ( %f, &numeros[i]) ; med = media(10, numeros ) ;... Parâmetro do tipo vetor de float Passando o vetor numeros como argumento 24

Passando Vetores como Argumentos para Funções #include <stdio.h> void incrementar(int n,float num[], float valor){ int i; for(i = 0; i < n; i++) num[i] = num[i] + valor ; int main(){ float numeros[10] ; int i ; for(i = 0; i < 10; i++) scanf ( %f, &numeros[i]) ; incrementar( 10,numeros,1.5) ;... Modificando o conteúdo do vetor passado como argumento 25

#include <stdio.h> int reprovado(float nota, float media){ int resultado = 0; if ( nota < media) resultado = 1; return resultado; int main(){ float notas[] = {6.5,5.0,7.5,9.4,3.8; int i ; for(i = 0; i < 5; i++){ if (reprovado(notas[i],7.0) == 1) Passando Elementos de Vetores como Argumentos... Passando um único elemento do vetor para uma função printf( Aluno %d: REPROVADO\n,i); else printf( Aluno %d: aprovado\n,i); 26

Um vetor unidimensional armazena uma lista de elementos Um vetor bidimensional pode ser visto como uma matriz com linhas e colunas Em C, um vetor bidimensional é um vetor de vetores uma dimensão Vetores Bidimensionais int matriz[9][6]; duas dimensões 27

Inicializando Matrizes A inicialização de uma matriz também pode ser feita das seguintes formas: float mat[4][3]={{5.0,10.0,15.0,{20.0,25.0,30.0, {35.0,40.0,45.0,{50.0,55.0,60.0 float mat[4][3] = {5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0,45.0, 50.0,55.0,60.0 float mat [][3]= {5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0,40.0,45.0,50.0,55.0,60.0 Deve ser passada a segunda dimensão 28

Percorrendo Matrizes int main() { int i,j; int matriz[2][2]={{1,2,{5,6; for (i=0;i<2;i++){ for (j=0;j<2;j++){ printf("%d ",matriz[i][j]); printf("\n"); return 0; Saída: 1 2 5 6 Laços aninhados para percorrer matriz

Passando Matrizes como Argumentos de Funções Uma matriz pode ser passada como argumento para uma função Parâmetro da função deve ser do tipo tipo[][tamanho colunas] A linguagem C exige que a segunda dimensão seja especificada 30

Passando Matrizes como Argumentos void imprimematriz(int linhas, int mat[][2]) { int i,j; for (i=0; i < linhas; i++){ for (j=0;j < 2; j++){ printf("%d ",mat[i][j]); printf("\n"); Deve ser especificada pelo menos a segunda dimensão

Resumindo... Armazenamento de grande quantidade de informação Necessidade de armazenamento Problemas Utilização de muitas variaveis Manipulação incremental das informações Vetores Conceito Declaração Inicialização Acesso Limites de um vetor Passagem de vetores como parâmetros Vetores bidimensionais (matrizes) 32