Aula 15 Variáveis Indexadas (vetores)

Documentos relacionados
Vejamos agora mais alguns exemplos de problemas envolvendo seqüência de números.

Aula 11 - Repetições Encaixadas

Aula 17 Variáveis indexadas de vários índices (matrizes)

Aula 5 - Mais C e repetição

Funções Vetores Matrizes

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

MC-102 Aula 06 Comandos Repetitivos

1) Operadores de auto incremento ++ e auto decremento --

Universidade Federal de Goiás Instituto de Informática Introdução à Computação Professor: Julliano Rosa Nascimento

Estruturas de Controle

Aula 21 - Algoritmos e Funções Recursivas

Aula 18 Algoritmos básicos de busca e classificação

Computação 2. Aula 2. Profª. Fabiany Vetores e Matrizes

Linguagem C vetores. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

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

Programação: Vetores

Aula 5 ESTRUTURAS DE REPETIÇÃO (WHILE)

MC-102 Aula 08 Comandos Repetitivos

Prof. A. G. Silva. 25 de abril de Prof. A. G. Silva INE5231 Computação Científica I 25 de abril de / 68

Aula 10 Comandos de Repetição For e Do While

MC-102 Aula 07 Comandos Repetitivos

Aula 15: Repetição (Parte 3)

ESTRUTURAS DE CONTROLE

Aula 8 Oficina de Programação Vetores. Profa. Elaine Faria UFU

imprimir seus quadrados.

Expressões lógicas, expressões condicionais, prioridades e operadores, base binária, operadores de bits

Programação Estruturada

Aula 4 Introdução ao C

Exercícios em C 1 Saulo O. D. Luiz

Aula 4 ESTRUTURAS DE REPETIÇÃO (FOR)

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Aula 16: Laços aninhados e desvios

Estruturas de Repetição

Vetores. e o programa deverá ler os valores separadamente:

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Estruturas de repetição

Vetores(Arrays) Olimpíadas de Informática. Aulas preparatórias Introdução a Programação em C.

Quantas variáveis para armazenar as notas e as médias são necessárias para resolver este problema?

MAC 2166 Introdução à Computação para Engenharia

MC102 Algoritmos e Programação de Computadores

Exercícios Repetição

Introdução à Computação - Linguagem C: aula 06. Mauro Cesar Bernardes 04/Junho/2014

Computação eletrônica: Estruturas de repetição

Algoritmos e Estruturas de Dados I (DCC/003) Variáveis Indexadas. Aula Tópico 6 Variáveis Indexadas

Algoritmos e Programação

Linguagem C estruturas de repetição

Aula 10 Algoritmos e Funções Recursivas

BAC004 Informática Teórica T2 Professora: Fabiana Costa Guedes Lista 05 Vetores e Matrizes Vetores

Programação de Computadores I Funções de Repetição da Linguagem C PROFESSORA CINTIA CAETANO

Aula 10: Introdução a Vetores e Matrizes

Aula 14: Repetição (Parte 2)

Linguagem de Programação C

Aula 12- Variáveis e valores reais

ponteiros INF Programação I Prof. Roberto Azevedo

Vetores. Marina Andretta. 11 de abril de 2016 ICMC-USP. Marina Andretta (ICMC-USP) sme0230-ipc 11 de abril de / 20

Algoritmos e Programação

Linguagem de Programação I. Aula 08 Linguagem C: Arrays

Vetores e Strings. 6. Comandos de entrada e saída formatada que trabalham sobre strings

LINGUAGEM C: ARRAY: VETORES E MATRIZES

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

Aula 14 Funções, Estrutura de Blocos e Macros.

Tratamento de Caracteres

CCO 016 / COM 110 Fundamentos de Programação

LÓGICA DE PROGRAMAÇÃO (C) VETORES E MATRIZES. Professor Carlos Muniz

SITUAÇÃO VETORES. Imagine o seguinte problema:

ESTRUTURAS COMPOSTAS

Introdução à Programação C

Introdução à Programação

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Matrizes. Marina Andretta. 17 de abril de 2017 ICMC-USP. Marina Andretta (ICMC-USP) sme0230-ipc 17 de abril de / 30

Aula 03 -Introdução àlinguagc Programação: Estrutura-Repetição. OPL e IC1 Prof: Anilton Joaquim da Silva

Programação estruturada

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

Linguagem C. Prof.ª Márcia Jani Cícero

Programação Estruturada

Vetores(Arrays) Olimpíadas de Informática. Aulas preparatórias Introdução a Programação em C.

Aula 06 Introdução à Programação Matrizes

Programação de Computadores II

Aula 04. Agregados Homogêneos. Agregados Heterogêneos. Matrizes

1 Exercícios com ponteiros

Linguagem C ponteiros

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

Aula 18: Vetores Introdução a Programação Túlio Toffolo & Puca Huachi

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

VETORES ADAPTADO DO MATERIAL DE PROF. L. A. ALVARES

5 Comando de Seleção Simples e Composta

Comandos de Repetição -Laços

SSC300- Linguagens de Programação e Aplicações Profa Vânia de Oliveira Neves. ICMC/USP São Carlos

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

Disciplina de Algoritmos e Programação

Estruturas Compostas Matriz

Instituto Federal de Educação, Ciência e Tecnologia do RN Câmpus Currais Novos. LINGUAGEM C++ VARIÁVEIS COMPOSTAS Arrays Aula I

ARQUIVOS DE DADOS EM C: UMA INTRODUÇÃO

Algoritmos e Programação

MAC 2166 Introdução à Computação para Engenharia

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

ESTRUTURAS COMPOSTAS VETOR

Arranjos. David Déharbe

Transcrição:

Aula 15 Variáveis Indexadas (vetores) Além das variáveis normais já conhecidas, podemos ter também variáveis indexadas. Tais variáveis são referenciadas por um nome e um índice. Especialmente úteis para armazenar seqüências de valores com as mesmas características. Variáveis indexadas de um só índice são mais conhecidas como vetores. Variáveis indexadas com mais de um índice são conhecidas como matrizes. Os elementos de um vetor estão localizados contiguamente na memória. a[0] a[1] a[2]... a[9] Declaração: int a[10]; float b[100]; double c[345]; /*declara 10 variáveis a[0], a[1],..., a[9]*/ /*declara 100 variáveis b[0], b[1],..., b[99]*/ /*declara 345 variáveis c[0], c[1],..., c[344]*/ Declara-se sempre o tamanho máximo de elementos, mesmo que não sejam todos utilizados. Uso Como se fossem variáveis simples /* atribuição */ a[1] = 0; b[5] = b[2]; c[i] = c[j]; /* zerar o vetor a */ for (i=0; i < 10; i++) a[i] = 0; /* zerar o vetor a (outra forma) */ i = 0; while (i < 10) a[i++] = 0; /* ler e imprimir os 100 elementos do vetor b */ for (i = 0; i < 100; i++) { scanf( %d, &b[i]); printf ( %d, b[i]); /* contar quantos nulos tem nos primeiros 100 elementos de c */ cont = 0; for (j = 0; j < 100; j++) if (c[i] == 0.0) cont++; /* calcular o maior, o menor é a média dos n primeiros elementos de c */ max = min = soma = c[0]; for (i = 1; i < n; i++) { if (c[i] > max) max = c[i]; if (c[i] < min) min = c[i]; soma = soma + c[i]; printf ( máximo = %10.5lf mínimo = %10.5lf média = %10.5lf, max, min, soma/n);

/* inverter a ordem dos n primeiros elementos do vetor a, isto é: trocar a[0] com a[n-1], a[1] com a[n-2], etc. */ for (i = 0; i < n/2; i++) { aux = a[i]; a[i] = a[n-1 i]; a[n 1-i] = aux; Observe na solução acima que se n for ímpar, o elemento médio fica intacto. Tente agora resolver o seguinte problema sem usar vetores: P53) Dado n<=100 e uma sequência de n elementos, imprimir a sequência na ordem inversa à que foi lida. O problema é que para imprimir a seqüência na ordem inversa, é necessário em primeiro lugar, armazenar todos os elementos na memória. Além disso, não sabemos quantos elementos tem a seqüência a priori, pois n também é um dado do problema. Se soubéssemos que a sequência teria exatamente 5 elementos, por exemplo, seria fácil resolver. Com vetores fica fácil: /* dado n inteiro 0<n<=100, e um vetor de n elementos inteiros, imprimir o vetor na ordem inversa a que foi lido */ int vet[nmax], /* vetor de nmax elementos */ n, /* número de elementos */ i; printf("\n - entre com o proximo elemento %5d:", i); scanf("%d", &vet[i]); /* imprima os elementos na ordem inversa */ printf("\n *** ordem inversa ***"); for (i = n-1; i >= 0; i--) printf("\n * elemento %5d = %5d", i, vet[i]); system("pause"); return 0; Sobre o tamanho do vetor O vetor deve sempre ser declarado com uma quantidade fixa de elementos. Ocorre que muitas vezes usamos parte do vetor apenas. Não há problema nisso. Observe o programa acima. O n é no máximo 100. Portanto declaramos o vetor com 100 elementos. Entretanto, vamos usar apenas os primeiros n elementos do vetor. Se o n lido for 5, usaremos apenas 5 elementos e os demais 95 ficarão sem uso.

P54) Dado n inteiro, 0<n<=100, e uma seqüência de n números entre 0 e 99, determinar quantos estão entre 0 e 9, entre 10 e 19,..., entre 90 e 99. Existem várias soluções para este problema. Vamos usar um vetor de contadores de frequências, freq[0] a freq[9], que conterão a quantidade de elementos em cada intervalo. Note que dado um elemento seq[i] da seqüência, o contador que será incrementado devido a este elemento será freq[seq[i]/10]. int seq[nmax],/* vetor de nmax elementos */ freq[10], /* freq[0] conterá a quantidade de elementos entre 0 e 9 freq[1] conterá a quantidade de elementos entre 10 e 19 assim por diante até freq[9] que conterá a quantidade entre 90 e 99 */ n, /* numero de elementos */ i; /* contador */ for (i = 0; i < n; i++) /* consistência números entre 00 e 00 */ while (1==1) /* esta comparação será sempre verdadeira */ {printf("\n - entre com o %5d-esimo numero entre 00 e 99:", i); scanf("%d", &seq[i]); /* sai do while se foi digitado elemento entre 00 e 99 e volta para o for */ if (seq[i] >= 0 && seq[i] <= 99) break; else printf("valor errado ####### digite novamente"); /* zerar o vetor de freqüências */ for (i = 0; i < 10; i++) freq[i] = 0; /* incrementar a freqüência correspondente a cada valor */ for (i = 0; i < n; i++) freq[seq[i]/10]++; /* imprima o vetor de freqüências */ printf("\n *** vetor de frequências ***"); for (i = 0; i < 10; i++) printf("\n * existem %5d elementos entre %5d e %5d", freq[i], i*10,(i+1)*10-1); Neste exemplo apareceu uma construção nova com o while. Quando colocamos while(1 == 1) estamos fazendo uma repetição infinita, pois a comparação será sempre verdadeira. Outra forma equivalente seria while(1). Como veremos à frente, 0 está associado ao valor FALSO enquanto qualquer número diferente de zero está associado ao valor VERDADEIRO.

P55) Dado n inteiro, 0<n 1000, gerar uma seqüência de n números inteiros entre 0 e 999 usando a função rand(). Em seguida verificar quantos números estão entre 0 e 99, 100 e 199,..., 900 e 999. Em seguida traçar um gráfico de freqüências da seguinte forma: 0 99 20 * * * * * * * * * * * * * * * * * * * * 100 199 5 * * * * * 200-299 12 * * * * * * * * * * * * 300 399 3 * * * : : : 900 999 10 * * * * * * * * * * 0 int seq[nmax],/* vetor de nmax elementos */ freq[10], /* freq[0] conterá a quantidade de elementos entre 0 e 99 freq[1] conterá a quantidade de elementos entre 100 e 199. Assim por diante até freq[9] que conterá a quantidade de elementos entre 900 e 999 */ n, /* número de elementos */ i,j; /* contadores */ /* Gerar n elementos entre 0 e 999. A função rand() gera um número aleatório entre 0 e 2^16-1. Portanto, basta pegar o resto do número gerado por 1000 */ seq[i] = rand()%1000; printf("%5d", seq[i]); /* zerar o vetor de freqüências */ for (i = 0; i < 10; i++) freq[i] = 0; /* incrementar a freqüência correspondente a cada valor */ for (i = 0; i < n; i++) freq[seq[i]/100]++; /* imprima o gráfico de freqüências */ printf("\n *** gráfico de frequencia ***\n"); for (i = 0; i < 10; i++) { printf("\n %3d - %3d %3d ", i, (i+1)*100-1, freq[i]); /* imprima o número de asteriscos necessário */ for (j = 0; j < freq[i]; j++) printf("* ");

P56) Dado n inteiro, 0 < n 100 e uma seqüência com n elementos, contar quantas vezes cada elemento ocorre, isto é, para cada um dos n elementos da seqüência calcular quantas vezes ele aparece repetido na seqüência. int seq[nmax], /* vetor de nmax elementos */ n, /* numero de elementos */ i,j,cont; /* contador */ scanf("%d", &seq[i]); /* para cada elemento seq[i] verificar quantas vezes ele ocorre */ printf("\n\n******* numero de vezes que cada elemento ocorre *******"); cont = 0; for (j = 0; j < n; j++) if (seq[i] == seq[j]) cont++; printf("\n *elemento %5d = %5d * ocorre %5d vezes", i, seq[i], cont); Na solução acima, se um elemento aparece mais de uma vez, ele será impresso mais de uma vez também. No problema a seguir fazer a mesma coisa, só que se o elemento já foi impresso com o número de vezes que ele ocorre não mostrar mais de uma vez. P57) Idem sem repetição int seq[nmax], /* vetor de nmax elementos */ n, /* numero de elementos */ i,j,cont; /* contador */

scanf("%d", &seq[i]); /* para cada elemento verificar quantas vezes ele ocorre na sequência */ printf("\n\n******* numero de vezes que cada elemento ocorre *******"); /* Verifica se já foi contado. Para isso, basta verificar se é igual a algum elemento anterior ao i */ for (j = i - 1; j >= 0; j--) if (seq[i] == seq[j]) break; /* já foi contado */ /* só contar se ainda não foi contado */ if (j < 0) { cont = 0; /* Basta contar a partir do i, pois antes não tem */ for (j = i; j < n; j++) if (seq[i] == seq[j]) cont++; printf("\n *valor %5d * ocorre %5d vezes", seq[i], cont); P58) Dado inteiro n, 0<n 1000 e uma seqüência de n números, determinar o elemento mais próximo da média. Para resolver esse é necessário primeiro calcular a média e em seguida, verificar qual elemento cujo valor absoluto de sua diferença com a média é mínimo. P59) Dados n,m inteiros, 0<n,m 100 e dois vetores, a com n elementos e b com m elementos,construir um terceiro vetor contendo os elementos que estão em a e b ao mesmo tempo, ou seja, a intersecção de a com b. #define nmmax 100 int a[nmmax],b[nmmax],c[nmmax]; /* vetores dados de n e m elementos */ int n, m, k, /* numero de elementos dos vetores a b c */ i,j; /* contadores */ /* ler n e m com consistência */ while (0 == 0) { /* repita sempre */ printf("\ndigite os valores de n e m separados por branco(s):"); scanf("%d%d", &n, &m); if ((n > 0 && n <= nmmax) && (m > 0 && m <= nmmax)) break; else printf("\n***n ou m digitados errados"); /* Um conjunto não deve ter elementos repetidos. Vamos deixar essa consistência como exercício. Para isso, a cada elemento lido deve-se verificar se já foi lido anterior igual. */ /* ler o vetor a de n elementos */ printf("\n--------- digitacao do conjunto a\n"); scanf("%d", &a[i]);

/* ler o vetor b de m elementos */ printf("\n--------- digitacao do conjunto b\n"); for (i = 0; i < m; i++) { scanf("%d", &b[i]); /* construir o vetor c com a intersecção de a com b */ printf("\n\n******* interseccao de a com b"); k = 0; /* k é o número de elementos de c */ for (i = 0; i < n; i++) /* procurar a[i] no vetor b */ for (j = 0; j < m; j++) if (a[i] == b[j]) { /* encontrou então pode colocar em c e sair */ c[k++] = a[i]; break; /* sai do for mais interno */ /* imprimir o vetor c */ for (i = 0; i < k; i++) printf("\n elemento %5d = %5d", i, c[i]); P60) Idem com os elementos que estão em a ou b, ou seja a união de a com b. P61) Idem com os elementos que estão em a mas não estão em b, ou seja a diferença de a com b. Atribuição de Valores aos Elementos do Vetor na Declaração Assim como no caso das variáveis simples, pode-se atribuir valores a vetores na declaração. int a[10] = {0,1,2,3,4,5,6,7,8,9; double b[5] = {0.1, 0.2, 0.3, 0.4; char c[26] = { abcdefghijklmnopqrstuvwxyz ; char d[10] = {48, 49, 50, 51, 52, 53, 54, 55, 56, 57;