P. 1
LogicaProgramacao.VariaveisIndexadas-Registros

LogicaProgramacao.VariaveisIndexadas-Registros

|Views: 11|Likes:
Publicado porjaimeroberto

More info:

Published by: jaimeroberto on May 01, 2011
Direitos Autorais:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/01/2011

pdf

text

original

Lógica de programação

Prof. Jonas de Araújo Luz Junior http://jonasluz.com.br jonasluz@gmail.com

Variáveis Indexadas e Registros

Motivação

Algumas vezes, pode-se querer que uma única variável armazene mais de um valor.

As variáveis indexadas armazenam mais de um valor do mesmo tipo e, por isto, são também chamadas variáveis compostas homogêneas. Os registros são tipos definidos pelo programador que mantém uma estrutura de dados com sub-variáveis, que podem ser de tipos diferentes. Por isto, são chamadas também de variáveis compostas heterogêneas.

Variáveis Indexadas

Diversos problemas computacionais requerem a declaração de um grande número de variáveis com a mesma semântica.

Exemplos:
● ●

obter a média de 100 números, exibindo-os no final. ordenar 500 nomes ou valores.

Podem-se declarar variáveis indexadas, ou seja, com o mesmo identificador (portanto, declaradas somente uma vez), mas com que armazenam diferentes valores em diferentes índices.

● Classificam-se. vetores ou arrays. os valores podem ser de tipos diferentes. N-dimensionais: algumas linguagens permitem a declaração de variáveis com n dimensões. Bidimensionais: possuem duas dimensões de índice. Conhecidas também por arranjos. Unidimensionais: apenas uma dimensão de índice. quanto ao número de dimensões: – – – . Também conhecidas como matrizes. ou seja. do mesmo tipo. – Em linguagens fracamente tipadas.Variáveis Indexadas ● Representam conjuntos ordenados de valores homogêneos.

.. Sintaxe: <nome_var>: vetor[ <li>.Vetores ● ● São as variáveis indexadas unidimensionais... ● VI é uma variável indexada de 4 posições.. 74 75 76 77 78 79 -10 VI 56 1 0 VS 10 MEMÓRIA . MEMÓRIA .. ..<lf> ] de <tipo> ● Representação na memória do computador: .. ocupa 4 posições na memória... 80 81 82 83 84 85 Ao lado: ● VS é uma variável simples de valor 10 ocupando a posição 76 da memória.

podendo ser. . Deve-se portanto ter cuidado pra se verificar se a linguagem inicia a indexação pelo 0 ou pelo 1. – Tentar acessar um elemento com índice fora dos limites do vetor constitui um erro de programação. de 0 a n . por exemplo.Vetores ● Notas importantes: – A indexação do vetor com n elementos não precisa ser de 1 a n. ● Algumas linguagens de programação permitem que se indique apenas o tamanho do vetor e não seus índices limites.1 ou de 5 a n + 4.

● Exemplo: estrutura para vasculhar um vetor: // i varia do limite inicial (li) até o limite final (lf)  para i <­ li até lf faca valor <­ variavelIndexada[i] // faça algo com o valor  fimpara // Algumas linguagens possuem uma estrutura própria:  foreach foreach (valor in variavelIndexada) {  // faça algo com valor  } . pode-se usar uma variável inteira para referenciá-lo.Vetores ● Notas importantes: – O índice de um vetor é inteiro e. portanto.

10] de real    i: inteiro    ac: real inicio    para i <­ 1 ate 10 faca       escreva ("Informe o ". . . "º valor: ")       leia (valores[i])       ac <­ ac + valores[i]    fimpara . algoritmo "MediaValoresVetor" var    valores: vetor [1.Vetores ● Exemplo: média aritmética de 10 números.. i. .

.    escreval("­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­")    escreval("O cálculo da média é determinado por: ")    escreva ("( ")    para i <­ 1 ate 10 faca       escreva (valores[i])       se i < 10 entao          escreva (" +")       fimse    fimpara    escreva (" ) / 10 = ". (ac / 10)) fimalgoritmo .Vetores ● Exemplo: média aritmética de 10 números. . .

 i.5] de caracter    procura: caracter    i. . ": ")       leia (nomes[i])    fimpara    escreval  ("­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­")    escreva ("Escreva parte do nome de quem procura: ")    leia (procura) ..Vetores ● Exemplo: pesquisa em vetor algoritmo "ProcuraNome" var    nomes: vetor[1... resposta: inteiro inicio    para i <­ 1 ate 5 faca       escreva("Escreva o nome do aluno nº ".

   i <­ 1    repita       se pos(procura.. nomes[resposta])    fimse fimalgoritmo .. nomes[i]) <> 0 entao          resposta <­ i       fimse       i <­ i + 1    ate (i > 5) ou (resposta <> 0)    se resposta = 0 entao       escreval ("Nome não encontrado!")    senao       escreval ("Nome encontrado: ".Vetores ● Exemplo: pesquisa em vetor .

2] 3 V[1.<lf1>.5] V[2.Matrizes ● ● São as variáveis indexadas bidimensionais.5] V[3.3] V[3.4] 5 V[1.3] V[4.  <li2>.4] V[4.5] V[4. Sintaxe: <nome_var>: vetor[ <li1>.3] 4 V[1.1] V[3.1] V[2.2] V[2.5] .1] 2 V[1..2] V[3.4] V[3.3] V[2..2] V[4.4] V[2.<lf2> ] de <tipo> ● Representação em matriz de uma variável V: Índices 1 2 3 4 1 V[1.1] V[4.

.1] M[2.2] ..1] M[3.5....Matrizes ● Representação na memória do computador – .1] M[4.2] M[5.1] M[5...1] M[1. 49 56 1 0 -10 86 87 88 89 90 91 91 92 93 94 95 96 M[1..2] M[4. -10 56 1 0 21 O espaço total ocupado da matriz de tamanho M : [1. 1.2] M[3.2] M por N (M linhas e N colunas) é igual a M×N MEMÓRIA .2] M[2..

. 1.3] de real   nome  : caracter   a...100. n  : inteiro .Matrizes ● Exemplo: Grade de notas algoritmo "GradeNotas" var   aluno : vetor[1.100] de caracter   nota  : vetor[1.

 n] <= 10)       fimpara       // calcula a média       nota[a. n] >= 0) e (nota [a.   a <­ 1   enquanto (a <= 100) e (nome <> "­") faca     escreval ("Nome do aluno (sinal ­ encerra a leitura): ")     leia (nome)     se nome <> "­" entao       aluno[a] <­ nome       // faz a leitura das notas       para n <­ 1 ate 2 faca         repita           escreva ("Informe a ". "ª nota (de 1 a 10): ")           leia (nota[a. 3] <­ (nota[a. 1] + nota[a. n. n])         ate (nota [a. 2]) / 2     fimse     a <­ a + 1   fimenquanto .inicio   // faz a leitura de até 100 alunos.

 " | ".1].3])   fimpara   escreval ("­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­") fimalgoritmo .   se a > 100 entao     a <­ 100   senao     a <­ a ­ 2   fimse      // exibe grade   limpatela   escreval ("GRADE DE NOTAS")   escreval ("­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­")   escreval (" ALUNO                        |N­1|N­2|MEDIA")   escreval ("­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­")   para n <­ 1 ate a faca     escreva (aluno[n]. " | ". nota[n.2])     escreval (" | ".  // Ajusta a para marcar total de alunos informados. nota[n. nota[n.

. sendo: n∈ℕ .<lf1>] de vetor [<li2>......<lf2>. n≥1 São duas construções possíveis: <nome_var> :  vetor [<li1>. ... uma matriz é contruída como um vetor bidimensional. Vetores podem ter n dimensões..<lfn>] de <tipo> <nome_var> :  vetor [<li1>.Vetores multidimensionais ● Como visto.<lfn>] de tipo ● ● . <li2>.. <lin>.<lf1>.. de  vetor[<lin>.<lf2>] .

. por uma função específica.. num_elem : integer.Vetores dinâmicos ● Um vetor dinâmico não possui um tamanho fixo. i. var  <nome_var>  : array of <tipo>.  // vasculha o vetor: for i := low(<nome_var>) to high(<nome_var>) do .  .  begin setLength(<nome_var>. seu tamanho pode ser definido e alterado após sua declaração. <tamanho>).  // retorna o número de elementos do vetor: num_elem := length(<nome_var>).

– Exemplo: em PHP. mapas de dispersão. tabela ou mapa de dispersão. todos os arrays são.Vetores associativos ou tabelas de dispersão ● Um vetor associativo. tabela ou mapa de espalhamento – em inglês. => 0 . ou ainda.  => "". na verdade. 0). $mapaAluno = array( "numero"  "nome"  "notas" "media" ). => "". hash map ou hash table – associa os valores a chaves únicas.  => array(0.

// Em Portugol: (abstração: limini e limfim dão os limites do vetor) para i <­ limini(<var_vetor>) ate limfim(<var_vetor>) faca ..length. // Em Pascal: (funciona no Free Pascal – freepascal. . } ● As linguagens mais modernas apresentam já uma estrutura específica que evita o uso de uma variável de controle para o índice... i++) { .  // Em Java:  for (int i = 0.. na maioria das linguagens).foreach – estrutura para varrer vetores ● Tradicionalmente. um vetor é varrido por uma estrutura para (for. i < <var_vetor>.org) for i := low(<var_vetor>) to high(<var_vetor>) do ...

 } // Em PHP:  foreach (<var_vetor> as <var_item>) { . // Em Java:  for (<tipo> <var_item> : <var_vetor>) { ...foreach – estrutura para varrer vetores ● As linguagens mais modernas já apresentam uma estrutura específica que evita o uso de uma variável de controle para o índice: o foreach.. } // ou: foreach (<var_vetor> as <var_item_chave> => <var_item_valor>) { .. // onde <var_item> deve ser do mesmo tipo dos elementos de <var_vetor> // Em Pascal.. a estrutura não existe. ficaria: (estrutura não existe na literatura) paracada <var_item> em <var_vetor> faca .. // Em Portugol... } .

Registro ● Às vezes. ● Uma estrutura de dados que integra dados de tipos diferentes e pode ser usada para atender à necessidade anterior é o registro. Os dados de um formulário a ser preenchido no programa. – Exemplos: ● ● A ficha de um aluno (matrícula. disciplinas). notas. nome. há a necessidade de se integrar uma estrutura de dados. .

● A estrutura de dados comumente usada por sistemas gerenciadores de banco de dados relacionais (SGBDR) é uma espécie de registro. subvariáveis de diferentes tipos relacionadas entre si. vetores. em um tipo definido pelo programador. ou mesmo outro tipo registro. – As sub-variáveis do registro podem ser de quaisquer tipos nativos. .Registro ● O registro é a uma estrutura de dados que agrupa.

<nome_subvariavel> ← <valor> .Registro ● Sintaxe: – Declaração do tipo: tipo <tipo_registro> = registro   <declaração de tipos e variáveis> .. fim tipo – Declaração de variável: var <variavel> : <tipo_registro> – Uso: <variavel>..

  aluno  : array[1. // Tipo definido para o registro (a ficha) do aluno.2] of single. program ControleNotas.. end.50] of recAluno. type recAluno = record   matricula : string.   sexo      : char.   nome   : string.   nome      : string. end. // Note o uso de um vetor de alunos para os integrantes da turma. type recTurma = record   codigo : string. .Registro ● Exemplo em Pascal: Controle de notas.. // Tipo definido para o registro (a ficha) da turma.   nota      : array[1.   media     : single.

  writeln( '­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­').   // o acesso aa subvariavel e´ feito pela sintaxe de ponto:   readln( turma.   readln( turma.   continuar : string. .Registro ● Exemplo em Pascal: Controle de notas (continuação) var   i.codigo).   // LEITURA DOS DADOS DA TURMA:   writeln( 'Informe os dados da turma:' ).   write( 'Codigo: ').   turma     : recTurma.   write( 'Nome: '). j      : integer. begin   writeln( 'CONTROLE DE NOTAS' ).nome).

sexo )..     write( 'Nome: ' ).aluno[i].' ).sexo = 'F'). ': ' ).       readln( turma.     end until (turma. continuar := ''.matricula ). i.aluno[i]. '.aluno[i].aluno[i].     // note o acesso ao registro aninhado em outro por um vetor:     readln(turma.   while (i <= 50) and (continuar = '') do begin     writeln( 'Informe os dados do aluno nº '.nota[j] ). j.     for j := 1 to 2 do begin       write( 'Nota '.nome ).     repeat begin       write( 'Sexo (M ou F): ' ).     end.Registro ● Exemplo em Pascal: Controle de notas (continuação)   // LEITURA DOS DADOS DOS ALUNOS:   i := 1. .aluno[i].       readln(turma.aluno[i].     write( 'Matricula: ' ).     readln(turma..sexo = 'M') or                (turma.

    readln( continuar ).nota[2] ) / 2.aluno[i].   writeln( ' TURMA: '.aluno[i]. .     writeln(       'Digite algo seguido de [ENTER] para parar a leitura '.     turma.aluno[i].Registro ● Exemplo em Pascal: Controle de notas (continuação)     // calcula a media deste aluno durante a leitura.     // Pergunta se continua a ler alunos.   writeln( ' ALUNO                    NOTA 1 ­ NOTA 2 ­ MEDIA ').   writeln( '­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­'). turma.nota[1] + turma.       'ou apenas [ENTER] para ler os dados de outro aluno.     i := i + 1.   writeln( '­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­').'     ).media :=       ( turma. ' ­ '. turma.      // EXIBIÇAO DA FICHA DE NOTAS:   writeln( '­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­').nome ).codigo.   end.

  end.nome) < 40 ) then       // nao requer begin ou end porque executa apenas uma  instruçao.Registro ● Exemplo em Pascal: Controle de notas (continuação)   for i := 1 to i ­ 1 do begin     write( Copy(turma. ' ­ '. .   writeln( '­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­').aluno[i].nota[1]. 40) ). turma.     if ( length(turma.nome.aluno[i]. 40 – length(turma.     write(        turma.aluno[i].aluno[i].     writeln( turma. 1.nome))        ).media ).nota[2]      ). end.aluno[i].aluno[i].       write(          StringOfChar(' '.

André Luiz Villar. Algoritmo e Lógica de Programação.org (3) SOUZA. São Paulo: Thomson Learning.wikipedia. Lógica de Programação. .wikipedia. 2005.al. al. 2005. et.org (2) Wikipédia. Marco Antônio Furlan de.Bibliografia (1) Wikipedia. Em: http://en. (4) FORBELLONE. Em: http://pt. São Paulo: Pearson Prentice-Hall. et.

You're Reading a Free Preview

Descarregar
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->