Você está na página 1de 6

Programao I - Vetores

AUTARQUIA EDUCACIONAL DO VALE DO SO FRANCISCO AEVSF FACULDADE DE CINCIAS APLICADAS E SOCIAIS DE PETROLINA FACAPE CURSO DE CINCIA DA COMPUTAO PROFESSOR LUIS NCOLAS DE AMORIM TRIGO

APOSTILA DE PROGRAMAO I Vetores

Petrolina-PE, 2008

Programao I - Vetores

INTRODUO ESTRUTURA DE DADOS


Algoritmos precisam de dados e informaes para exercer as suas funes. Informaes simples atendem a uma pequena parcela dos algoritmos. A maioria utiliza uma grande carga de informaes e estas quando utilizadas com tipos primitivos precisam ser criadas inmeras variveis, tornando o algoritmo um monstro carregado de variveis, j que uma varivel contm apenas uma informao. A alternativa para atendermos a esta demanda seria criar novos tipos que suportem outras informaes que so denominados tipos construdos. Utilizando os armrios como demonstrao, uma gaveta s pode conter um objeto, uma varivel tem somente uma informao, no tipo primitivo. Quando se trata de tipos construdos, uma gaveta, ou melhor, uma varivel pode conter inmeras informaes.

A partir da, iremos trabalhar com um tipo construdo, denominado Variveis Compostas Homogneas. Tem este nome porque formado por variveis que aceitam um nmero indeterminado de informaes a partir de um tipo primitivo. Ele dividido em duas partes: Variveis compostas Unidimensionais, conhecido como Vetor e Variveis compostas Multidimensionais, conhecido como Matriz.

VETOR
Para entendermos um vetor iremos utilizar o cenrio de um edifcio. Digamos que um edifcio contm apenas um apartamento por andar. Um edifcio corresponde a um vetor e cada apartamento corresponde a um elemento deste vetor.

Programao I - Vetores

DECLARAO
Os comandos que sero utilizados para de declarar um vetor so:

VAR <VARIAVEL>: ARRAY[VI..VF] OF <tipo>; VI VF <tipo> Corresponde ao elemento inicial do vetor. Corresponde ao elemento final do vetor. Corresponde a qualquer tipo primitivo ou tipo construdo que foi declarado anteriormente. <VARIAVEIS> Corresponde a uma ou inmeras variveis (separados por vrgulas, se for este caso) que tero o mesmo tipo denominado em <tipo>. Exemplo 01: VAR EDIFICIO: ARRAY[1..4] OF INTEGER;

Exemplo 02: Usando o cenrio de uma fila de um cinema com 50 pessoas. VAR FILA: ARRAY[1..50] OF STRING;

Observaes: VI e VF so obrigatoriamente constantes inteiras e VI menor do que VF (VI < VF). A quantidade de elementos de um vetor dada pela frmula VF VI + 1. Isto significa que o vetor inicia a partir de VI e incrementado um a um, at VF.

MANIPULAO
Voltando o cenrio do edifcio, para irmos para um apartamento, primeiro temos que saber qual edifcio, ou seja, primeiro deve saber o nome do vetor para depois identificar o elemento deste quer acessar. O apartamento tem uma identificao, como por exemplo, apartamento 301 de um edifcio, j o elemento do vetor tambm tem a sua identificao: EDIFICIO[2]. Depois de isolar o elemento, este pode ser manipulado atravs de qualquer operao de entrada, sada ou atribuio, como uma varivel do tipo primitivo. Exemplo: EDIFICIO[3] := 301; READLN(EDIFICIO[4]); WRITELN(EDIFICIO[1]);

Para uma melhor percepo do conceito de vetor, iremos elaborar um algoritmo que leia o nome e duas notas de um aluno, calcule a sua mdia, repetindo este processo com cinco alunos. No final, imprima os nomes dos alunos e suas mdias em ordem inversa a de entrada. Normalmente o algoritmo para se calcular a mdia corresponde a este que vem a seguir:

Programao I - Vetores

PROGRAM MEDIATURMA; VAR NOME: STRING; N1, N2, MEDIA: REAL; I: INTEGER; {CONTADOR} BEGIN FOR I := 1 TO 10 DO BEGIN WRITE('Digite o nome do ',I,' aluno: '); READLN(NOME); WRITE('Digite a sua 1 nota: '); READLN(N1); WRITE('Digite a sua 2 nota: '); READLN(N2); MEDIA := (N1 + N2) / 2; WRITELN; WRITELN(NOME,' teve mdia igual a ',MEDIA:1:2); WRITELN; END; END.

Este algoritmo fornece a mdia da turma, mas no pode imprimir os dez alunos com suas respectivas mdias na ordem inversa, pois foi utilizada somente uma varivel para os dez alunos e dez mdias e quando um fornecida a anterior apagada. Ento, se utilizarmos um varivel para cada mdia: 10 nomes, 10 mdias, 20 notas. Imagine calcular a mdia de 300 alunos desta forma? Totalmente invivel. Uma proposta de algoritmo para atender a esta necessidade vem a seguir:

PROGRAM MEDIATURMA; VAR NOME: ARRAY[1..10] OF STRING; N1, N2, MEDIA: ARRAY[1..10] OF REAL; I,J: INTEGER; {CONTADOR} BEGIN FOR I := 1 TO 10 DO BEGIN WRITE('Digite o nome do ',I,' aluno: '); READLN(NOME[I]); WRITE('Digite a sua 1 nota: '); READLN(N1[I]); WRITE('Digite a sua 2 nota: '); READLN(N2[I]); MEDIA[I] := (N1[I] + N2[I]) / 2; WRITELN; END; FOR I := 10 DOWNTO 1 DO BEGIN WRITELN(NOME[I],' teve mdia igual a ',MEDIA[I]:1:2); WRITELN; END; WRITE('Digite um nmero: '); READLN(J); WHILE (J <> 0) DO BEGIN WRITELN; WRITELN('O registro de n ',J,' do aluno ',NOME[J],' que obteve as notas ',N1[J]:1:2,' e ',N2[J]:1:2, ', alcanando mdia igual a ',MEDIA[J]:1:2); WRITELN; WRITE('Digite outro nmero: '); READLN(J) END; END.

Programao I - Vetores

EXERCCIO
1. Sendo o vetor V igual ao que est descrito abaixo e as variveis X=2 e Y=4, escreva o valor correspondente solicitao: V 2 1 6 2 8 3 3 4 10 5 16 6 1 7 21 8 33 9 14 10

a) V[X+1] b) V[X+2] c) V[X+4] d) V[X*1] e) V[X*3] f) V[Y+3] g) V[Y+4] h) V[Y*2] i) V[Y+X] j) V[X*Y] k) V[V[4]] l) V[V[2*X+Y]] m) V[V[2]*V[7]]

2. Elabore um algoritmo que leia um vetor A de 30 nmeros inteiros e imprima o maior valor.

3. Elabore um algoritmo que, dados dois vetores inteiros de 10 posies, leia os dois vetores, some os valores da mesma posio e armazene em um terceiro vetor inteiro de 10 posies. No final imprima este terceiro vetor.

4. Um time de basquete possui 12 jogadores. Elabore um algoritmo que, dados dois vetores NOME e ALTURA, calcule e imprima o nome do jogador mais alto e a sua altura.

5. Utilizando a questo 4, elabore um algoritmo que calcule a mdia de altura do time.

6. Faa o acompanhamento da execuo do algoritmo abaixo, preencha o vetor N conforme os valores fornecidos no vetor M e descreva o que este algoritmo est fazendo.

Programao I - Vetores

PROGRAM Qst01; VAR M,N: ARRAY[1..5] OF INTEGER; I: INTEGER; BEGIN FOR I := 1 TO 5 DO BEGIN WRITE(Digite valor para M[.I.]: ); READLN(M[I]); IF ((M[I] MOD 2) = 0) THEN BEGIN N[I] := (M[I] 2) * 2; END ELSE BEGIN N[I] := (M[I] + 2) * (2 3); END; END; FOR I := 1 TO 5 DO BEGIN WRITELN(N[I]); END; END.

1 2 3 4 5

M 4 7 10 3 1

1 2 3 4 5

N 4 -9 16 -5 -3

7. Elabore um algoritmo que dado trs vetores reais de 5 posies, leia estes vetores (usando uma estrutura de repetio), calcule a expresso ((vetor1 * vetor3) / vetor2 ), utilizando os valores da mesma posio, armazenando em um quarto vetor, tambm de nmeros reais de 5 posies. No final, imprima os nmeros do quarto vetor, com trs casas decimais.

8. Elabore um algoritmo que leia os vetores A e B de nmeros reais de 4 posies (usando uma estrutura de repetio), calcule a mdia ponderada. Armazene a mdia em um terceiro vetor e, no final, imprima, na ordem inversa, este terceiro vetor, com duas casas decimais. Frmula: MEDIA = (A[?] * 4 + B[?] * 6) / 10.

9. Elabore um algoritmo que dado dois vetores inteiros de 3 posies, leia estes vetores (usando uma estrutura de repetio), calcule a expresso (vetor1 - vetor2 ), utilizando os valores da mesma posio, armazenando em um terceiro vetor, tambm de nmeros inteiros de 3 posies. No final, imprima os nmeros mpares do terceiro vetor.