Você está na página 1de 55

NDICE

2 bimestre

CAPTULO 9 MODULARIZAO...................................................................................109 9.1 NECESSIDADE DA MODULARIZAO EM PROGRAMAS.....................................................................109 9.2 CONSTRUO DE MDULOS..................................................................................................109 9.3 ESCOPO DE VARIVEIS.........................................................................................................110 9.4 MDULOS PROCEDIMENTO...................................................................................................110 Pseudocdigo..................................................................................................................110 Java..................................................................................................................................111 9.5 MDULOS FUNO............................................................................................................112 Pseudocdigo..................................................................................................................112 Java..................................................................................................................................113 9.6 PARAMETRIZAO DE MDULOS.............................................................................................113 Pseudocdigo..................................................................................................................114 Java..................................................................................................................................115 9.7 CHAMADA DOS MDULOS.....................................................................................................115 Pseudocdigo mdulo procedimento sem parametrizao.........................................116 Java mdulo procedimento sem parametrizao........................................................116 Pseudocdigo mdulo funo sem parametrizao....................................................116 Java mdulo funo sem parametrizao...................................................................117 Pseudocdigo mdulo procedimento com parametrizao.........................................117 Java mdulo funo com parametrizao...................................................................117 9.8 EXEMPLO DE MODULARIZAO EM PSEUDOCDIGO......................................................................118 9.9 EXEMPLO DE MODULARIZAO EM JAVA ..................................................................................124 9.10 EXERCCIOS DE MODULARIZAO..........................................................................................131 CAPTULO 10 ESTRUTURA DE DADOS HOMOGNEA VETORES..........................137 10.1 DEFINIO DE VETOR........................................................................................................137 10.2 DECLARAO DE VETOR.....................................................................................................137 Pseudocdigo..................................................................................................................137 Java..................................................................................................................................138 10.3 EXEMPLO DE VETOR..........................................................................................................138 10.4 ATRIBUINDO VALORES AO VETOR..........................................................................................139 Pseudocdigo..................................................................................................................139 Java..................................................................................................................................139 10.5 MOSTRANDO OS ELEMENTOS DE UM VETOR.............................................................................140 Pseudocdigo..................................................................................................................140 Java..................................................................................................................................140 10.6 EXEMPLOS DE VETORES EM PSEUDOCDIGO............................................................................141 10.7 EXEMPLOS DE VETORES EM JAVA.........................................................................................143 10.8 EXERCCIOS DE VETORES...................................................................................................145 CAPTULO 11 ESTRUTURA DE DADOS HOMOGNEA MATRIZES.........................149 11.1 DEFINIO DE MATRIZ.......................................................................................................149 11.2 DECLARAO DE MATRIZ....................................................................................................150 Pseudocdigo..................................................................................................................150 Java..................................................................................................................................150 11.3 EXEMPLO DE MATRIZ.........................................................................................................151 11.4 ATRIBUINDO VALORES MATRIZ...........................................................................................152 Pseudocdigo..................................................................................................................153 Java..................................................................................................................................153 11.5 MOSTRANDO OS ELEMENTOS DE UMA MATRIZ...........................................................................154 Pseudocdigo..................................................................................................................154 Java..................................................................................................................................154 11.6 EXEMPLOS DE MATRIZES EM PSEUDOCDIGO...........................................................................155 11.7 EXEMPLOS DE MATRIZES EM JAVA........................................................................................157 11.8 EXERCCIOS DE MATRIZES...................................................................................................159

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Captulo 9 Modularizao
Muitas vezes, fica complicado desenvolvermos um algoritmo extenso de um nico problema. Para isso, utilizaremos a modularizao desse algoritmo, isto , a diviso do algoritmo em mdulos ou sub-rotinas, para que o problema dividido em subproblemas possa ser facilmente interpretado e desenvolvido. Nesse sentido, veremos a necessidade da modularizao, aprenderemos como construir mdulos de um algoritmo, mdulos esses que so conjuntos de comandos que tm como finalidade executar determinada funo. Temos dois tipos de mdulos: procedimentos e funes. Os procedimentos so aqueles mdulos que executam um conjunto de comandos sem retorno para o mdulo que o chamou. As funes so aqueles mdulos que executam um conjunto de comando e retornam algum dado para o mdulo que o chamou. A seguir vamos ver como e quando trabalhar com cada um deles. 9.1 Necessidade da modularizao em programas Um dos pontos principais para o uso da modularizao a diviso do algoritmo em mdulos para que ele seja melhor interpretado e desenvolvido. Esses mdulos acabam sendo mais simples e menos complexos. A diviso em mdulos facilita o entendimento parcial do problema e entendendo todos os problemas parciais, no final, teremos entendido o problema maior. A maioria dos mdulos pode ser vista como um mini-algoritmo, ou seja, com entrada de dados, processamento desses dados e sada de resultados. Outro ponto principal para o uso de modularizao a reutilizao de cdigo. Muitas vezes, precisamos repetir um mesmo pedao do algoritmo, por exemplo, um menu de opes, vrias vezes, dentro de um mesmo algoritmo. Nesse caso, basta desenvolver um mdulo com esse pedao do algoritmo e sempre que precisarmos dele no algoritmo, basta fazer a chamada do mdulo, evitando reescrever o mesmo cdigo. 9.2 Construo de mdulos Para focalizarmos o problema e dividi-lo em subproblemas, precisamos adotar uma regra. Essa regra serve para nos orientar na diviso e construo de mdulos. Para construir os mdulos, primeiro precisamos analisar o problema e dividi-lo em partes principais, que so os mdulos; depois precisamos analisar os mdulos obtidos para verificar se a diviso est coerente. Se algum mdulo ainda estiver complexo, devemos dividi-lo tambm em outros submdulos. Por fim, precisamos analisar todos os mdulos e o problema geral para garantir que o algoritmo mais os mdulos resolvam o problema de forma simples. Esse processo chamado de Mtodo de Refinamento Sucessivo, pois o problema complexo dividido em problemas menores e, a partir do resultado dos problemas menores, teremos o resultado do problema complexo.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

109

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Por exemplo, suponha que queremos desenvolver um algoritmo que receba dois valores numricos e uma opo do usurio que decida qual entre as quatro operaes bsicas da matemtica (soma, subtrao, diviso e multiplicao) ele quer resolver. Analisando esse problema, vamos dividi-lo em subproblemas, por exemplo, um menu de opes para que o usurio possa escolher uma operao matemtica, o clculo da soma, o clculo da subtrao, o clculo da diviso e o clculo da multiplicao. Temos assim cinco mdulos para resolver o nosso problema. So mdulos coerentes que ajudam a resolver o nosso problema de forma simples. Mas, analisando bem os mdulos, verificamos que falta mais um mdulo, o mdulo principal que se encarrega de fazer a chamada dos mdulos, enviar e receber dados para esses mdulos. Agora sim temos o nosso problema dividido e analisado, basta agora comear a desenvolv-los. Mas para isso, precisamos assimilar outros conceitos como escopo de variveis, mdulo procedimento, mdulo funo e chamada de mdulo que veremos a seguir, completando com um exemplo. 9.3 Escopo de variveis O escopo de uma varivel onde, dentro do algoritmo, uma varivel vlida ou pode ser reconhecida. Uma varivel pode ter o escopo dividido em dois tipos: varivel global ou varivel local. Uma varivel global aquela declarada no incio do algoritmo e pode ser utilizada por qualquer parte desse algoritmo, seja nos comandos do prprio algoritmo, bem como, dentro de qualquer mdulo que pertena ao algoritmo. Nesse caso, sua declarao feita apenas uma nica vez, no sendo permitido que o mesmo nome de varivel seja declarado dentro de qualquer outra parte do algoritmo, por exemplo, dentro de qualquer outro mdulo. Uma varivel local aquela declarada dentro de algum bloco, por exemplo, dentro de um mdulo. Nesse caso, essa varivel vlida e reconhecida somente dentro do bloco em que foi declarada. Assim, o mesmo nome de varivel pode ser declarado dentro de diferentes blocos, pois sero reconhecidas como uma nova varivel. Por exemplo, se declararmos uma varivel x no incio de um algoritmo, essa varivel x pode ser usada e alterada em qualquer parte desse algoritmo e em nenhum momento declarada novamente, ou seja, ela nica no algoritmo inteiro. Mas muito importante ter o controle dessas variveis globais, justamente porque elas podem ser alteradas a qualquer momento. No entanto, se declararmos, usarmos e alterarmos uma varivel y dentro do mdulo soma, poderemos tambm declar-la, utiliz-la e alter-la dentro do mdulo subtrao, do mdulo diviso e do mdulo multiplicao, se assim o desejarmos. Nesse caso, no precisando tomar os cuidados necessrios que uma varivel global precisa. 9.4 Mdulos Procedimento Os mdulos procedimento so os mdulos que no retornam valor para o mdulo ou algoritmo que os tenham chamado. Nesse sentido, esse tipo de mdulo utilizado quando o algoritmo principal ou mdulo que chama o mdulo procedimento no necessita de retorno de qualquer dado do mdulo. Pseudocdigo Nos mdulos procedimento, utilizaremos as palavras incio_mdulo e fimmdulo; que representam as palavras principais deste mdulo, ou seja, o incio e o fim do mdulo,
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

110

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

respectivamente. Os mdulos procedimento em pseudocdigo seguem a seguinte regra sinttica: <nome do mdulo> ( ) incio_mdulo <comandos>; fimmdulo; Note que os comandos dentro do mdulo so comuns queles de qualquer algoritmo, ou seja, com entrada de dados, processamento desses dados e sada de resultados. Por exemplo, suponha que queremos desenvolver um mdulo que imprima o nome da disciplina e o nome da instituio de ensino: Dados ( ) incio_mdulo Declarar disc, fac alfanumrico; disc "Lgica de Programao"; fac "IBTA"; escrever ("nome da disciplina => " , disc); escrever ("nome da instituio de ensino =>" , fac); fimmdulo; Neste exemplo, Dados o nome do mdulo procedimento. O mdulo parece um minialgoritmo com declarao de variveis, entrada de dados para essas variveis e a sada de resultados. O que difere um algoritmo de um mdulo justamente sua simplicidade. Java Nos mdulos procedimento em Java, utilizaremos a palavra void que representa a palavra principal dessa estrutura e a chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte desse mdulo. Os mdulos procedimento em Java seguem a seguinte regra sinttica: void <nome do mdulo> ( ) { <comandos>; } Note que os comandos dentro do mdulo so comuns queles de qualquer programa, ou seja, com entrada de dados, processamento desses dados e sada de resultados. Por exemplo, suponha que queremos desenvolver um mdulo que imprima o nome da disciplina e o nome da instituio de ensino: void Dados ( ) { String disc, fac; disc = "Lgica de Programao"; fac = "IBTA"; System.out.println ("nome da disciplina => " + disc); System.out.println ("nome da instituio de ensino =>" + fac);
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

111

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

} Neste exemplo, Dados o nome do mdulo procedimento. O mdulo parece um miniprograma com declarao de variveis, entrada de dados para essas variveis e a sada de resultados. O que difere um programa de um mdulo justamente sua simplicidade. Perceba o uso da palavra void, ela utilizada no Java para identificar um mdulo procedimento. 9.5 Mdulos Funo Os mdulos funo so os mdulos que retornam algum valor para o mdulo ou algoritmo que os tenha chamado. Nesse sentido, esse tipo de mdulo utilizado quando o algoritmo principal ou mdulo que chama o mdulo funo necessita de retorno de qualquer dado do mdulo. Pseudocdigo Nos mdulos funo, utilizaremos as palavras incio_mdulo e fimmdulo; que representam as palavras principais desse mdulo, ou seja, o incio e o fim do mdulo, respectivamente. Alm dessas palavras, utilizaremos a palavra retornar que a principal palavra do mdulo funo, pois a partir desse comando que um valor retornado para o algoritmo ou mdulo que o chamou. Os mdulos funo em pseudocdigo seguem a seguinte regra sinttica: <tipo de retorno> <nome do mdulo> ( ) incio_mdulo <comandos>; retornar <valor de retorno>; fimmdulo; Note que os comandos dentro do mdulo so comuns queles de qualquer algoritmo, ou seja, com entrada de dados, processamento desses dados e sada de resultados. Note ainda que o valor de retorno enviado pelo comando retornar precisa ser do mesmo tipo de dado declarado para o mdulo funo. Por exemplo, suponha que queremos desenvolver um mdulo que retorne o nome da disciplina e o nome da instituio de ensino: alfanumrico Dados ( ) incio_mdulo Declarar disc, fac, mens alfanumrico; disc "Lgica de Programao"; fac "IBTA"; mens "nome da disciplina => " + disc + "\nnome da instituio de ensino => " + fac; retornar mens; fimmdulo; Neste exemplo, Dados o nome do mdulo funo. O mdulo parece um mini-algoritmo com declarao de variveis, entrada de dados para essas variveis, processamento de dados e retorno dos resultados. O que difere um algoritmo de um mdulo justamente sua simplicidade. Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 112

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Note que o tipo de retorno do mdulo funo Dados alfanumrico e o retorno do mdulo o contedo da varivel mens do tipo alfanumrico, ou seja, do mesmo tipo de dados, isso obrigatrio. Java Nos mdulos funo em Java, utilizaremos a palavra return que representa a palavra principal dessa estrutura e a chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte desse mdulo. a partir do comando return que um valor retornado para o programa ou mtodo que o chamou. Os mdulos funo em Java seguem a seguinte regra sinttica: <tipo de retorno> <nome do mdulo> ( ) { <comandos>; return <valor de retorno>; } Note que os comandos dentro do mdulo so comuns queles de qualquer programa, ou seja, com entrada de dados, processamento desses dados e sada de resultados. Note ainda que o valor de retorno enviado pelo comando return precisa ser do mesmo tipo de dado declarado para o mdulo funo. Por exemplo, suponha que queremos desenvolver um mdulo que retorne o nome da disciplina e o nome da instituio de ensino: String Dados ( ) { String disc, fac, mens; disc = "Lgica de Programao"; fac = "IBTA"; mens = "nome da disciplina => " + disc + "\nnome da instituio de ensino => " + fac; return mens;

Neste exemplo, Dados o nome do mdulo funo. O mdulo parece um miniprograma com declarao de variveis, entrada de dados para essas variveis, processamento de dados e o retorno dos resultados. O que difere um programa de um mdulo justamente sua simplicidade. Note que o tipo de retorno do mdulo funo Dados String e o retorno do mdulo o contedo da varivel mens que do tipo String, ou seja, do mesmo tipo de dados. Isso obrigatrio. 9.6 Parametrizao de mdulos Aprendemos a dividir um problema usando o mtodo de refinamentos sucessivos e tambm a identificar cada subdiviso do problema como um mdulo do algoritmo que desejamos desenvolver. Aprendemos tambm que temos dois tipos de mdulos, o mdulo funo e o mdulo procedimento, para desenvolver cada um dos mdulos detectados. No entanto, cada mdulo interage com o mdulo principal ou mesmo com outros mdulos e, muitas
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

113

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

vezes, quando os mdulos so chamados h a necessidade de enviar dados para que esses mdulos possam resolver o seu subproblema. Esses dados, que so enviados para os mdulos, so chamados de argumentos que so passados como parmetros aos mdulos. O uso de argumentos passados como parmetros em mdulos, sejam eles funes ou procedimentos muito comum. Os exemplos vistos anteriormente para funes e procedimentos esto sem o uso de parametrizao de mdulos, por isso, aps o nome dos mdulos, os parnteses esto vazios. dentro dos parnteses que os argumentos so passados como parmetros aos mdulos. Quando passamos argumentos como parmetros, precisamos identificar qual o tipo de dado ser passado como parmetro. Nesse caso, cada argumento dever ser declarado no momento em que o mdulo for desenvolvido. Note que, o uso de parametrizao em mdulos depende do subproblema que o mdulo precisa resolver. Nesse caso, o desenvolvedor do algoritmo ou mdulos quem deve decidir se o uso ou no da parametrizao necessrio para um determinado mdulo. Muitas vezes, possvel desenvolver o mesmo problema com ou sem o uso de parametrizao, como vimos nos exemplos anteriores, por isso, essa deciso cabe ao desenvolvedor. Vamos rever os mesmos exemplos do mdulo procedimento em pseudocdigo e do mdulo funo em Java, agora passando argumentos como parmetro. Note que o uso de parametrizao em mdulos pode ser tanto para o mdulo funo como para o mdulo procedimento, no havendo diferenas no seu desenvolvimento, apenas o retorno ou no de um valor. Pseudocdigo Nos mdulos procedimento, utilizaremos as palavras incio_mdulo e fimmdulo; que representam as palavras principais deste mdulo, ou seja, o incio e o fim do mdulo, respectivamente. Os mdulos procedimento em pseudocdigo com parametrizao seguem a seguinte regra sinttica: <nome do mdulo> (<nome da var> <tipo da var>, ... , <nome da var> <tipo da var>) incio_mdulo <comandos>; fimmdulo; Note que a quantidade de argumentos que pode ser passada como parmetro no determinada, pode ser um nico argumento ou uma quantidade finita de argumentos. Por exemplo, suponha que queremos desenvolver um mdulo que receba dois argumentos do tipo alfanumrico como parmetro e imprima o nome da disciplina e o nome da instituio de ensino: Dados (disc alfanumrico, fac alfanumrico) incio_mdulo escrever ("nome da disciplina => " , disc); escrever ("nome da instituio de ensino => " , fac); fimmdulo; Neste exemplo, no mais necessria a declarao das variveis disc e fac dentro do mdulo Dados, pois esses dados esto declarados no cabealho do mdulo como
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

114

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

argumentos que recebero dados que sero passados como parmetros na chamada desse mdulo. Java Nos mdulos funo em Java, utilizaremos a palavra return que representa a palavra principal dessa estrutura e a chave aberta, {, e a chave fechada, }, para representar o conjunto de comandos que fazem parte desse mdulo. a partir do comando return que um valor retornado para o programa ou mtodo que o chamou. Os mdulos funo em Java com parametrizao seguem a seguinte regra sinttica: <tipo de retorno> <nome mdulo> (<tipo var> <nome var> , ... , <tipo var> <nome var>) { <comandos>; return <valor de retorno>; } Note que a quantidade de argumentos que pode ser passada como parmetro no determinada, pode ser um nico argumento ou uma quantidade finita de argumentos. Por exemplo, suponha que queremos desenvolver um mdulo que receba dois argumentos do tipo String como parmetro e imprima o nome da disciplina e o nome da instituio de ensino: String Dados (String disc , String fac) { String mens; mens = "nome da disciplina => " + disc + "\nnome da instituio de ensino => " + fac; return mens; } Neste exemplo, no mais necessria a declarao das variveis disc e fac dentro do mdulo Dados, pois esses dados esto declarados no cabealho do mdulo como argumentos que recebero dados que sero passados como parmetros na chamada deste mdulo. 9.7 Chamada dos mdulos Aprendemos como desenvolver um mdulo e como passar argumentos como parmetros para um mdulo. No entanto, quando usamos modularizao, o algoritmo principal ou outros mdulos precisam chamar os mdulos para que eles sejam executados. A chamada de mdulos depende do tipo de mdulo. Para o mdulo procedimento, basta fazer a chamada desse mdulo pelo nome do mdulo, passando os respectivos dados como argumento se for necessrio. Para o mdulo funo, a chamada desse mdulo precisa estar vinculada a uma varivel, ou seja, o retorno de dado da chamada do mdulo funo deve ser atribudo a uma varivel cujo tipo de dado deve ser o mesmo que o dado que est sendo retornado. Nesse caso, a passagem de dados como argumentos, se for necessria, no se difere do mdulo procedimento.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

115

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Por exemplo, vamos fazer a chamada dos mdulos funo e procedimento dos exemplos vistos anteriormente. Pseudocdigo mdulo procedimento sem parametrizao A chamada dos mdulos procedimento sem parametrizao em pseudocdigo segue a seguinte regra sinttica: <nome do mdulo> ( ); Por exemplo, vamos chamar o mdulo que imprime o nome da disciplina e o nome da instituio de ensino desenvolvido anteriormente em pseudocdigo: Dados ( ); Neste exemplo, Dados o nome do mdulo procedimento, como ele um mdulo sem parametrizao, seus parnteses ficam vazios. Java mdulo procedimento sem parametrizao A chamada dos mdulos procedimento sem parametrizao em Java segue a seguinte regra sinttica: <nome do mdulo> ( ); Por exemplo, vamos chamar o mdulo que imprime o nome da disciplina e o nome da instituio de ensino desenvolvido anteriormente em Java: Dados (); Neste exemplo, Dados o nome do mdulo procedimento; como ele um mdulo sem parametrizao, seus parnteses ficam vazios. Pseudocdigo mdulo funo sem parametrizao A chamada dos mdulos funo sem parametrizao em pseudocdigo segue a seguinte regra sinttica: <varivel> <nome do mdulo> ( ); Por exemplo, vamos chamar o mdulo que imprime o nome da disciplina e o nome da instituio de ensino desenvolvido anteriormente em pseudocdigo: alfanumrico m; m Dados ( ); Neste exemplo, Dados o nome do mdulo funo; como ele um mdulo sem parametrizao, seus parnteses ficam vazios. No entanto, como ele deve retornar um valor, esse valor atribudo varivel m. Note que o tipo de retorno do mdulo funo Dados alfanumrico e a varivel m que recebe o valor de retorno da funo tambm do tipo alfanumrico, ou seja, do mesmo tipo de dados. Isso obrigatrio!

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

116

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Java mdulo funo sem parametrizao A chamada dos mdulos funo sem parametrizao em Java segue a seguinte regra sinttica: <varivel> = <nome do mdulo> ( ); Por exemplo, vamos chamar o mdulo que imprime o nome da disciplina e o nome da instituio de ensino desenvolvido anteriormente em Java: String m; m = Dados ( ); Neste exemplo, Dados o nome do mdulo funo; como ele um mdulo sem parametrizao, seus parnteses ficam vazios. No entanto, como ele deve retornar um valor, esse valor atribudo varivel m. Note que o tipo de retorno do mdulo funo Dados String e a varivel m que recebe o valor de retorno da funo tambm do tipo String, ou seja, do mesmo tipo de dados. Isso obrigatrio. Pseudocdigo mdulo procedimento com parametrizao A chamada dos mdulos procedimentos com parametrizao em pseudocdigo segue a seguinte regra sinttica: <nome do mdulo> (<valor ou varivel > , ... , <valor ou varivel >); Por exemplo, vamos chamar o mdulo que imprime o nome da disciplina e o nome da instituio de ensino desenvolvido anteriormente em psedocdigo: Dados ("Lgica de Programao" , "IBTA"); Neste exemplo, Dados o nome do mdulo procedimento; como ele um mdulo com parametrizao, dentro de seus parnteses so passados os argumentos como parmetros para o mdulo Dados. Note que a quantidade de argumentos que foi passada como parmetro a mesma do mdulo quando ele foi declarado. No nosso exemplo, a quantidade de argumentos dois: "Lgica de Programao" e "IBTA". Java mdulo funo com parametrizao A chamada dos mdulos funo com parametrizao em Java segue a seguinte regra sinttica: <varivel> = <nome do mdulo> (<valor ou varivel > , ... , <valor ou varivel>); Por exemplo, vamos chamar o mdulo que imprime o nome da disciplina e o nome da instituio de ensino desenvolvido anteriormente em Java: String m; m = Dados ("Lgica de Programao" , "IBTA");

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

117

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Neste exemplo, Dados o nome do mdulo funo; como ele um mdulo com parametrizao, dentro de seus parnteses so passados os argumentos como parmetros para o mdulo Dados. Note que a quantidade de argumentos que foi passada como parmetro a mesma do mdulo quando ele foi declarado. No nosso exemplo, a quantidade de argumentos dois: "Lgica de Programao" e "IBTA". 9.8 Exemplo de modularizao em pseudocdigo 1. Desenvolva um algoritmo que receba dois valores numricos inteiros e o smbolo da operao conforme tabela abaixo, calcule e mostre a operao efetuada: Smbolo da operao + * / Nome da operao adio subtrao multiplicao diviso

// mdulo funo Mais que recebe dois valores inteiros e retorna um valor inteiro numrico_inteiro Mais (n1 numrico_inteiro , n2 numrico_inteiro) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res numrico_inteiro; // processamento de dados res n1 + n2; // retorno do mdulo retornar res; fimmdulo; // Mais // mdulo procedimento Menos que recebe dois valores inteiros Menos (n1 numrico_inteiro, n2 numrico_inteiro) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res numrico_inteiro; // processamento de dados res n1 - n2; // sada de resultados escrever ("A diferena de " , n1 , " com " , n2 , " " , res); fimmdulo; // Menos // mdulo procedimento Vezes que recebe dois valores inteiros Vezes (n1 numrico_inteiro, n2 numrico_inteiro) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res numrico_inteiro; // processamento de dados res n1 * n2;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

118

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

// sada de resultados escrever ("O produto de " , n1 , " com " , n2 , " " , res); fimmdulo; // Vezes // mdulo funo Dividido que recebe dois valores inteiros e retorna um valor real numrico_real Dividido (n1 numrico_inteiro, n2 numrico_inteiro) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res numrico_real; // processamento de dados res n1 / n2; // retorno do mdulo retornar res; fimmdulo; // Dividido // mdulo principal Algoritmo Calculo incio_algoritmo // declarao de variveis e/ou constantes que podem ser usadas no algoritmo Calculo Declarar d numrico_real; soma, num1, num2 numrico_inteiro; oper alfanumrico; // mensagem ao usurio escrever ("Digite dois inteiros e a operao"); // entrada de dados ler (num1, num2, oper); // processamento de dados escolha (oper) caso '+' : // chamada do mdulo funo Mais, passando num1 e num2 como // parmetro e atribuindo o retorno do mdulo na varivel soma soma Mais(num1 , num2); // sada de resultados escrever ("A soma de " , num1 , " com " , num2 , " " , soma); caso '-' : // chamada domdulo procedimento Menos, passando num1 e num2 como // parmetro Menos (num1 , num2); caso '*' : // chamada do mdulo procedimento vezes, passando num1 e num2 como // parmetro Vezes (num1 , num2); caso '/' : // chamada do mdulo funo Dividido, passando num1 e num2 como // parmetro e atribuindo o retorno do mdulo na varivel d d Dividido (num1 , num2); // sada de resultados escrever ("A diviso de " , num1 , " com " , num2 , " " , d); caso contrrio : // sada de resultados escrever ("operao invlida"); fimescolha; fim_algoritmo.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

119

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

2. Desenvolva um algoritmo que mostre um menu de opes para: calcular a soma de trs nmeros fornecidos pelo usurio; verificar se um nmero fornecido pelo usurio par; e verificar se um nmero fornecido pelo usurio divisvel por 3. // mdulo procedimento Menu Menu() incio_mdulo // mensagens ao usurio escrever ("Digite 1 para somar trs nmeros\n"); escrever ("Digite 2 para verificar se um nmero par\n"); escrever ("Digite 3 para verificar se um nmero divisvel por 3\n"); escrever ("Digite 0 para sair do programa\n"); fimmdulo; // Menu // mdulo funo SomaTudo que retorna um valor inteiro numrico_inteiro SomaTudo () incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar s0, i numrico_inteiro; // entrada de dados e processamento de dados ler (i); s s + i; ler (i); s s + i; ler (i); s s + i; // retorno do mdulo retornar s; fimmdulo; // SomaTudo // mdulo procedimento Pares que recebe um valor inteiro Pares (par numrico_inteiro) incio_mdulo // processamento de dados se ((par mod 2) = 0) ento // sada de resultados escrever ("O nmero ", par, " par "); seno // sada de resultados escrever ("O nmero ", par, " no par "); fimse; fimmdulo; // Pares // mdulo funo Divisivel3 que recebe um valor inteiro e retorna um valor lgico lgico Divisivel3 (d numrico_inteiro) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res lgico; // processamento de dados
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

120

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

se ((d mod 3) = 0) ento res verdadeiro; seno res falso; fimse; // retorno da funo retornar res; fimmdulo; // Divisivel3 // mdulo principal Algoritmo Somador incio_algoritmo // declarao de variveis que s podem ser usadas dentro do algoritmo Somador Declarar op, soma, num numrico_inteiro; log lgico; // processamento de dados // chamada do mdulo procedimento Menu, sem parametrizao Menu(); // entrada de dados leia (op); escolha (op) caso 1 : // chamada do mdulo funo SomaTudo, sem parmetrizao e atribuindo o // retorno do mdulo na varivel soma soma SomaTudo(); // sada de resultados escrever ("A somatria de trs nmeros fornecidos pelo usurio : " , soma); caso 2 : // entrada de dados pelo usurio ler (num); // chamada do mdulo procedimento Pares, passando o nmero num como // parmetro Pares(num); caso 3 : // entrada de dados pelo usurio ler (num); // chamada do mdulo funo Divisivel3, passando o nmero num como // parmetro e atribuindo o retorno do mdulo na varivel log log Divisivel3(num); // processamento de dados se (log = verdadeiro) ento // sada de resultados escrever ("O nmero ", num, " divisvel por 3 "); seno // sada de resultados escrever ("O nmero ", num, " no divisvel por 3 "); fimse; caso 0 : escrever ("Saindo do programa!"); caso contrrio : escrever ("opo invlida, tente novamente"); fimescolha; fim_algoritmo.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

121

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

3. Desenvolva um algoritmo modularizado que receba o nome e os dados para clculo da rea de uma figura geomtrica conforme tabela abaixo, e a partir da escolha do usurio por um menu de opes, calcule e mostre a rea da figura geomtrica: Figura geomtrica quadrado tringulo retngulo trapzio Frmula lado * lado (base * altura) / 2 base * altura ((Base maior + base menor) * altura) / 2

// mdulo procedimento Menu Menu() incio_mdulo // mensagens ao usurio escrever ("Digite 1 para rea do quadrado\n"); escrever ("Digite 2 para rea do tringulo\n"); escrever ("Digite 3 para rea do retngulo\n"); escrever ("Digite 4 para rea do trapzio\n"); escrever ("Digite 0 para sair do programa\n"); fimmdulo; // Menu // mdulo funo Quadrado que recebe um valor real e retorna um valor real numrico_real Quadrado (l numrico_real) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res numrico_real; // processamento de dados res l * l; // retorno do mdulo retornar res; fimmdulo; // Quadrado // mdulo procedimento Triangulo que recebe dois valores reais Triangulo (b numrico_real, h numrico_real) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res numrico_real; // processamento de dados res (b * h) / 2; // sada de resultados escrever ("A rea do tringulo de base " , b , " e altura " , h , " " , res); fimmdulo; // Triangulo // mdulo procedimento Retangulo que recebe dois valores reais Retangulo (b numrico_real, h numrico_real) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res numrico_real; // processamento de dados
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

122

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

res b * h; // sada de resultados escrever ("A rea do retngulo de base " , b , " e altura " , h , " " , res); fimmdulo; // Retangulo // mdulo funo Trapezio que retorna um valor real numrico_real Trapezio ( ) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res, b1, b2, h numrico_real; // entrada de dados ler (b1, b2, h); // processamento de dados res ((b1 + b2) * h) / 2; // retorno do mdulo retornar res; fimmdulo; // Trapezio // mdulo principal Algoritmo CalculoArea incio_algoritmo // declarao de variveis e/ou constantes que podem ser usadas no algoritmo // CalculoArea Declarar retorno, lado, base, altura numrico_real; figura numrico_inteiro; // processamento de dados // chamada do mdulo procedimento Menu, sem parametrizao Menu(); // entrada de dados leia (figura); escolha (figura) caso 1 : // entrada de dados ler (lado); // chamada do mdulo funo Quadrado, passando lado como // parmetro e atribuindo o retorno do mdulo na varivel retorno retorno Quadrado(lado); // sada de resultados escrever ("A rea do quadrado de lado " , lado , " " , retorno); caso 2 : // entrada de dados ler (base, altura); // chamada do mdulo procedimento Triangulo, passando base e altura // como parmetro Triangulo (base, altura); caso 3 : // entrada de dados ler (base, altura); // chamada do mdulo procedimento Retangulo, passando base e altura // como parmetro Retangulo (base, altura); caso 4 : // chamada do mdulo funo Trapezio e atribuindo o retorno do mdulo na // varivel retorno retorno Trapezio ( ); Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 123

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

// sada de resultados escrever ("A area do trapzio " , retorno); caso 0 : escrever ("Saindo do programa!"); caso contrrio : // sada de resultados escrever ("operao invlida"); fimescolha; fim_algoritmo. 9.9 Exemplo de modularizao em Java 1. Desenvolva um algoritmo que receba dois valores numricos inteiros e o smbolo da operao conforme tabela abaixo, calcule e mostre a operao efetuada: Smbolo da operao + * / class Calculo { // mdulo funo Mais que recebe dois valores inteiros e retorna // um valor inteiro static int Mais (int n1 , int n2) { // declarao de variveis que s podem ser usados dentro // deste mdulo int res; // processamento de dados res = n1 + n2; // retorno do mdulo return res; } // fim do mdulo Mais // mdulo procedimento Menos que recebe dois valores inteiros static void Menos (int n1 , int n2) { // declarao de variveis que s podem ser usadas dentro // deste mdulo int res; // processamento de dados res = n1 - n2; // sada de resultados System.out.println ("A diferena de " + n1 + " com " + n2 + " " + res); } // fim do mdulo Menos // mdulo procedimento Vezes que recebe dois valores inteiros static void Vezes (int n1 , int n2) {
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

Nome da operao adio subtrao multiplicao diviso

124

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

// declarao de variveis que s podem ser usadas dentro // deste mdulo int res; // processamento de dados res = n1 * n2; // sada de resultados System.out.println ("O produto de " + n1 + " com " + n2 + " " + res); } // fim do mdulo Vezes // mdulo funo Dividido que recebe dois valores inteiros e // retorna um valor real static double Dividido (int n1 , int n2) { // declarao de variveis que s podem ser usadas dentro // deste mdulo double res; // processamento de dados res = n1 / n2; // retorno do mdulo return res; } // fim do mdulo Dividido // mdulo principal public static void main (String args [ ]) { // declarao de variveis e/ou constantes que podem ser // usadas no algoritmo Calculo double d ; int oper, soma, num1, num2; // mensagem ao usurio e entrada de dados num1 = Integer.parseInt(JOptionPane.showInputDialog("Digite um nmero inteiro")); num2 = Integer.parseInt(JOptionPane.showInputDialog("Digite um nmero inteiro")); oper = Integer.parseInt(JOptionPane.showInputDialog("Digite a operao: \n1 para somar \n2 para subtrair \n3 para multiplicar \n4 para dividir")); // processamento de dados switch (oper) { case 1: // chamada do mdulo funo Mais, passando num1 e // num2 como parmetro e atribuindo o retorno do // mdulo na varivel soma soma = Mais(num1 , num2); // sada de resultados System.out.println ("A soma de " + num1 + " com " + break; num2 + " " + soma); 125

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

case 2: // chamada domdulo procedimento Menos, passando // num1 e num2 como parmetro Menos (num1 , num2); break; case 3: // chamada do mdulo procedimento vezes, passando // num1 e num2 como parmetro Vezes (num1 , num2); break; case 4: // chamada do mdulo funo Dividido, passando num1 // e num2 como parmetro e atribuindo o retorno do // mdulo na varivel d d = Dividido (num1 , num2); // sada de resultados System.out.println ("A diviso de " + num1 + " com " + num2 + " " + d); break; default: // sada de resultados System.out.println ("operao invlida"); } // fim do switch System.exit(0); } // fim do void main } // fim da classe 2. Desenvolva um algoritmo que mostre um menu de opes para: calcular a soma de trs nmeros fornecidos pelo usurio; verificar se um nmero fornecido pelo usurio par; e verificar se um nmero fornecido pelo usurio divisvel por 3. class Somador { // mdulo procedimento Menu public static void Menu() { System.out.println ("Digite 1 para System.out.println ("Digite 2 para par\n"); System.out.println ("Digite 3 para divisvel por System.out.println ("Digite 0 para } // Menu

somar trs nmeros\n"); verificar se um nmero verificar se um nmero 3\n"); sair do programa\n");

// mdulo funo SomaTudo que retorna um valor inteiro public static int SomaTudo () { // declarao de variveis que s podem ser usadas dentro // deste mdulo int s = 0, i; // processamento de dados i = Integer.parseInt(JOptionPane.showInputDialog ("Digite um nmero")); s = s + i; i = Integer.parseInt(JOptionPane.showInputDialog ("Digite um nmero")); s = s + i;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

126

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

i = Integer.parseInt(JOptionPane.showInputDialog ("Digite um nmero")); s = s + i; // retorno do mdulo return s; } // SomaTudo // mdulo procedimento Pares que recebe um valor inteiro public static void Pares (int par) { // processamento de dados if ((par % 2) == 0) { // sada de resultados System.out.println ("O nmero " + par + " par "); } else { // sada de resultados System.out.println ("O nmero " + par + " no par "); } } // Pares // mdulo funo Divisivel3 que recebe um valor inteiro e retorna // um valor booleano public static boolean Divisivel3 (int d) { // declarao de variveis que s podem ser usadas dentro // deste mdulo boolean res; // processamento de dados if ((d % 3) == 0) { res = true; } else { res = false; } // retorno da funo return res; } // Divisivel3 // mdulo principal public static void main (String arg []) { // declarao de variveis que s podem ser usadas dentro do // algoritmo principal int op, soma, num; boolean log; // processamento de dados // chamada do mdulo procedimento Menu, sem parametrizao Menu();
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

127

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

// entrada de dados op = Integer.parseInt(JOptionPane.showInputDialog("Digite uma opo")); switch (op) { case 1 : // chamada do mdulo funo SomaTudo, sem // parmetrizao e atribuindo o retorno do mdulo // na varivel soma soma = SomaTudo(); // sada de resultados System.out.println ("A somatria de trs nmeros fornecidos pelo usurio : " + soma); break; case 2 : // entrada de dados pelo usurio num = Integer.parseInt(JOptionPane.showInputDialog ("Digite um nmero")); // chamada do mdulo procedimento Pares, // passando o nmero num como parmetro Pares(num); break; case 3 : // entrada de dados pelo usurio num = Integer.parseInt(JOptionPane.showInputDialog ("Digite um nmero")); // chamada do mdulo funo Divisivel3, passando o // nmero num como parmetro e atribuindo o // retorno do mdulo na varivel log log = Divisivel3(num); // processamento de dados if (log == true) { // sada de resultados System.out.println ("O nmero " + num + " divisvel por 3 "); } else { // sada de resultados System.out.println ("O nmero " + num + " no divisvel por 3 "); } break; case 0 : System.out.println ("Saindo do programa!"); System.exit(0); default : System.out.println ("opo invlida, tente novamente"); } } // main } // classe Somador 3. Desenvolva um algoritmo modularizado que receba o nome e os dados para clculo da rea de uma figura geomtrica conforme tabela abaixo, e a partir da escolha do usurio por um menu de opes, calcule e mostre a rea da figura geomtrica: Figura geomtrica quadrado Frmula lado * lado
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

128

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

tringulo retngulo trapzio

(base * altura) / 2 base * altura ((Base maior + base menor) * altura) / 2

class CalculoArea { // mdulo procedimento Menu public static void Menu() { System.out.println ("Digite System.out.println ("Digite System.out.println ("Digite System.out.println ("Digite System.out.println ("Digite } // Menu

1 2 3 4 0

para para para para para

rea rea rea rea sair

do do do do do

quadrado\n"); tringulo\n"); retngulo\n"); trapzio\n"); programa\n");

// mdulo funo Quadrado que recebe um valor real e retorna um // valor real public static double Quadrado (double l) { // declarao de variveis que s podem ser usadas dentro // deste mdulo double res; // processamento de dados res = l * l; // retorno do mdulo return res; } // Quadrado // mdulo procedimento Triangulo que recebe dois valores reais public static void Triangulo (double b, double h) { // declarao de variveis que s podem ser usadas dentro // deste mdulo double res; // processamento de dados res = (b * h) / 2; // sada de resultados System.out.println ("A rea do tringulo de base " + b + " e altura " + h + " " + res); } // Triangulo // mdulo procedimento Retangulo que recebe dois valores reais public static void Retangulo (double b, double h) { // declarao de variveis que s podem ser usadas dentro // deste mdulo double res; // processamento de dados res = b * h; // sada de resultados System.out.println ("A rea do retngulo de base " + b + " e altura " + h + " " + res); Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 129

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

} // Retangulo // mdulo funo Trapezio que retorna um valor real public static double Trapezio ( ) { // declarao de variveis que s podem ser usadas dentro // deste mdulo double res, b1, b2, h; // entrada de dados b1 = Double.parseDouble(JOptionPane.showInputDialog("Digite a base menor")); b2 = Double.parseDouble(JOptionPane.showInputDialog("Digite a base maior")); h = Double.parseDouble(JOptionPane.showInputDialog("Digite a altura")); // processamento de dados res = ((b1 + b2) * h) / 2; // retorno do mdulo return res; } // Trapezio // mdulo principal public static void main (String arg []) { // declarao de variveis e/ou constantes que podem ser // usadas no algoritmo principal double retorno, lado, base, altura; int figura; // processamento de dados // chamada do mdulo procedimento Menu, sem parametrizao Menu(); // entrada de dados figura = Integer.parseInt(JOptionPane.showInputDialog ("Digite a opo da figura")); switch (figura) { case 1: // entrada de dados lado = Double.parseDouble (JOptionPane.showInputDialog ("Digite o lado")); // chamada do mdulo funo Quadrado, passando lado // como parmetro e atribuindo o retorno do mdulo // na varivel retorno retorno = Quadrado(lado); // sada de resultados System.out.println ("A rea do quadrado de lado " + lado + " " + retorno); break; case 2: // entrada de dados base = Double.parseDouble (JOptionPane.showInputDialog ("Digite a base")); altura = Double.parseDouble (JOptionPane.showInputDialog ("Digite a altura")); Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 130

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

} } } // class CalculoArea

// chamada do mdulo procedimento Triangulo, // passando base e altura como parmetro Triangulo (base, altura); break; case 3: // entrada de dados base = Double.parseDouble (JOptionPane.showInputDialog ("Digite a base")); altura = Double.parseDouble (JOptionPane.showInputDialog ("Digite a altura")); // chamada do mdulo procedimento Retangulo, // passando base e altura como parmetro Retangulo (base, altura); break;. case 4: // chamada do mdulo funo Trapezio e atribuindo // o retorno do mdulo na varivel retorno retorno = Trapezio ( ); // sada de resultados System.out.println ("A area do trapzio " + retorno); break; case 0: System.out.println ("Saindo do programa!"); System.exit(0); default: // sada de resultados System.out.println ("operao invlida");

9.10 Exerccios de modularizao 1. Desenvolva um mdulo procedimento que receba dois nmeros inteiros, calcule e mostre o resto da diviso entre os nmeros inteiros, sem utilizar o operador mod. 2. Desenvolva um mdulo funo que receba dois nmeros inteiros, calcule e retorne o quociente da diviso entre os nmeros inteiros, sem utilizar o operador div. 3. Desenvolva um mdulo funo que receba um nmero inteiro, calcule e retorne a raiz quadrada inteira desse nmero. 4. Desenvolva um mdulo procedimento que receba um nmero, verifique e mostre se esse nmero ou no divisvel por 5. 5. Desenvolva um mdulo procedimento que receba um nmero, verifique e mostre se esse nmero ou no primo. 6. Desenvolva um mdulo procedimento que receba um nmero, verifique e mostre se esse nmero ou no par. 7. Desenvolva um mdulo procedimento que receba um nmero inteiro e mostre todos os divisores desse nmero. 8. Desenvolva um mdulo funo que receba um nmero real, calcule e retorne o valor absoluto desse nmero.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

131

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

9. Desenvolva um mdulo funo que receba um nmero inteiro, calcule e retorne o fatorial desse nmero. 10. Desenvolva um mdulo principal com um menu de opes para a chamada dos mdulos desenvolvidos nos exerccios 1 at 9, mostrando os respectivos resultados dos mdulos funo. O usurio quem deve escolher o mdulo que ser executado. 11. Desenvolva um algoritmo modularizado que receba cinco valores inteiros e, a partir de um menu de opes, permita o usurio escolher entre: a. entrar e mostrar os valores a serem armazenados em cinco variveis; (procedimento sem parmetros); b. calcular e mostrar o valor da somatria dos valores das cinco variveis; (procedimento com parmetros) c. calcular e retornar a mdia aritmtica dos valores das cinco variveis; (funo sem parmetros) d. calcular e retornar a mdia ponderada dos valores das cinco variveis, sendo peso 2 para as duas primeiras entradas, peso 5 para as duas prximas entradas e peso 10 para a ltima entrada; (funo com parmetros) e. mostrar os cinco valores em ordem crescente. (procedimento com parmetros) Obs1.: aps a chamada das funes, mostrar o resultado. Obs2.: uma das opes do menu deve ser a de sair do programa. 12. Desenvolva um algoritmo modularizado que receba um valor inteiro e, a partir de um menu de opes, permita o usurio escolher entre: a. entrar e mostrar o valor a ser armazenado em uma varivel n; (procedimento sem parmetros) b. calcular e retornar o valor da somatria dos vinte primeiros termos da srie de Fibonnacci; (funo sem parmetros) c. verificar e mostrar se o nmero armazenado na varivel n divisvel por 7; (funo com parmetros) d. verificar e mostrar se o nmero armazenado na varivel n par ou mpar; (procedimento com parmetros) Obs1.: aps a chamada das funes, mostrar os resultados. Obs2.: uma das opes do menu deve ser a de sair do programa. 13. Desenvolva um algoritmo modularizado que receba o valor da compra de um produto e, a partir de um menu de opes, permita ao usurio escolher entre: a. calcular e retornar o pagamento a vista com 20% de desconto; (funo com parmetros) b. calcular e mostrar o pagamento em duas vezes com entrada e com 10% de desconto; (procedimento com parmetros) c. calcular e retornar o pagamento a vista no carto com 15% de desconto; (funo com parmetros) d. calcular e mostrar o pagamento em duas vezes no carto com 5% de desconto; (funo com parmetros) e. calcular e mostrar o pagamento a prazo em duas vezes sem entrada com acrscimo de 5%; (procedimento com parmetros) f.calcular e retornar o pagamento a prazo em trs vezes sem entrada com acrscimo de 10%. (funo com parmetros) Obs1.: aps a chamada das funes, mostrar o resultado. Obs2.: uma das opes do menu deve ser a de sair do programa.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

132

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

14. Desenvolva um algoritmo modularizado que receba o nome de um aluno, o registro desse aluno e quatro valores reais referentes s notas bimestrais desse aluno e, a partir de um menu de opes, permita ao usurio escolher entre: a. entrar e mostrar o nome e o registro do aluno bem como suas notas bimestrais; (procedimento sem parmetros) b. calcular e mostrar o valor da mdia desse aluno com a mensagem de aprovao (mdia >= 5.0) ou reprovao, bem como, seu nome e seu registro; (procedimento com parmetros) c. calcular e retornar o valor da mdia ponderada desse aluno com pesos 1, 2, 3 e 4, respectivamente para cada nota; (funo com parmetros) d. calcular a mdia aritmtica desse aluno e retornar a mensagem de aprovado ou reprovado. (funo com parmetros) Obs1.: aps a chamada das funes, mostrar o resultado. Obs2.: uma das opes do menu deve ser a de sair do programa. 15. Desenvolva um algoritmo modularizado que receba um ms e um dia da semana e a partir de um menu de opes, permita ao usurio escolher entre: a. entrar e mostrar o ms e o dia da semana; (procedimento sem parmetros) b. verificar e mostrar se no ms informado ele tem alguma avaliao; (procedimento com parmetros) c. verificar e retornar se no ms e dia da semana informados ele precisa ir para o IBTA; (funo com parmetros) d. verificar e retornar quantos meses por ano ele est de frias escolares (funo sem parmetros) Obs1.: aps a chamada das funes, mostrar o resultado. Obs2.: uma das opes do menu deve ser a de sair do programa. 16. Desenvolva um algoritmo modularizado que receba um valor inteiro positivo e, a partir de um menu de opes, permita ao usurio escolher entre: a. entrar e mostrar o valor inteiro armazenado numa varivel n; (procedimento sem parmetros) b. calcular e mostrar a somatria dos nmeros 100 e n ; (procedimento com parmetros) c. calcular e retornar o produto dos nmeros 20 e n; (funo com parmetros) d. verificar e retornar se n primo ou no (funo sem parmetros) Obs1.: aps a chamada das funes, mostrar o resultado. Obs2.: uma das opes do menu deve ser a de sair do programa. 17. Desenvolva um algoritmo modularizado que receba o nome e os dados para clculo da rea de uma figura geomtrica conforme tabela abaixo e, a partir de um menu de opes, permita ao usurio escolher entre calcular e mostrar a rea da figura geomtrica: Figura geomtrica Frmula quadrado lado * lado tringulo (base * altura) / 2 retngulo base * altura trapzio ((Base maior + base menor) * altura) / 2 Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 18. Desenvolva um algoritmo modularizado que receba dois valores reais e o cdigo do produto notvel conforme tabela abaixo e, a partir de um menu de opes, permita ao usurio escolher entre calcular e mostrar o valor do produto notvel:
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

133

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Cdigo Produto Notvel 1 quadrado da diferena de dois nmeros 2 quadrado da soma de dois nmeros 3 soma do quadrado de dois nmeros 4 diferena do quadrado de dois nmeros 5 produto da soma com a diferena de dois nmeros Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa.

Frmula (a b) * (a b) (a + b) * (a + b) a*a+b*b a*ab*b (a b) * (a + b)

19. Desenvolva um algoritmo modularizado que receba o nome de um lugar e, a partir de um menu de opes, permita ao usurio escolher entre mostrar para o usurio o que ele deve fazer nesse lugar, conforme tabela abaixo: Lugar O que fazer Escola Estudar Banco Pagar contar Farmcia Comprar remdios Casa Descansar Correio Remeter cartas Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 20. Desenvolva um algoritmo modularizado que receba o cdigo da condio de pagamento e o preo de um produto e, a partir de um menu de opes, permita ao usurio escolher entre calcular o que deve ser pago pelo produto e mostrar a condio de pagamento e o preo a ser pago, conforme a tabela abaixo: Cdigo Condio de pagamento A a vista em dinheiro ou cheque tem 20% de desconto B a vista em carto de crdito tem 10% de desconto C em 2 vezes, preo normal de etiqueta sem juros D em 3 vezes, preo normal de etiqueta mais juros de 15% Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 21. Desenvolva um algoritmo modularizado que receba o salrio de um funcionrio e, a partir de um menu de opes, permita ao usurio escolher entre calcular e mostrar o valor do aumento salarial e o salrio final a ser recebido pelo funcionrio, considerando que: a. se o funcionrio recebe menos que 500,00, ter reajuste de 100%; b. se o funcionrio recebe mais ou igual 500,00 e menos que 1.000,00, ter reajuste de 75%; c. se o funcionrio recebe mais ou igual a 1.000,00 e menos que 1.500,00, ter reajuste de 50%; d. se o funcionrio recebe mais ou igual a 1.500,00 e menos que 2.000,00, ter reajuste de 25%; e. se o funcionrio recebe mais ou igual a 2.000,00 e menos que 3.000,00, ter reajuste de 10%; f. se o funcionrio recebe mais ou igual a 3.000,00 e menos que 5.000,00, ter reajuste de 5%; g. se o funcionrio recebe mais ou igual a 5.000,00, ter reajuste de 2%. Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

134

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

22. Desenvolva um algoritmo modularizado que receba o tipo de investimento e o valor do investimento e, a partir de um menu de opes, permita ao usurio escolher entre calcular e mostrar o valor corrigido do investimento aps o perodo de 30 dias, considerando que o rendimento mensal para cada tipo de investimento varia conforme a tabela abaixo: Tipo de investimento Rendimento Poupana 3% Fundo de renda fixa 5% CDB 6% Aes 10% Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 23. Desenvolva um algoritmo modularizado que receba a data de nascimento de uma pessoa e a data atual e, a partir de um menu de opes, permita ao usurio escolher entre verificar e mostrar: a. em qual estao do ano (primavera, vero, outono ou inverno) essa pessoa nasceu; b. em qual sculo essa pessoa nasceu; c. se a pessoa nasceu em um ano bissexto; d. qual o signo dessa pessoa; e. quantos dias essa pessoa j viveu; f. quantos meses essa pessoa j viveu; g. quantos anos essa pessoa tem. Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 24. Desenvolva um algoritmo modularizado que receba trs valores numricos reais e um cdigo e, a partir de um menu de opes, permita ao usurio escolher entre calcular e mostrar dados conforme a tabela abaixo: cdigo Operao 1 os trs valores em ordem crescente 2 os trs valores em ordem decrescente 3 somente os valores pares 4 somente os valores mpares 5 somente os valores positivos 6 somente os valores negativos Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 25. Desenvolva um algoritmo modularizado que receba o preo atual e a venda mensal mdia de um produto e, a partir de um menu de opes, permita ao usurio calcular e mostrar o novo preo para um dos seguintes casos: a. se a venda mdia mensal for menor que 500 e o preo atual menor que 30,00, ento o produto sofrer um aumento de 10%; b. se a venda mdia mensal for maior ou igual a 500 e menor que 1000 e o preo atual maior ou igual a 30,00 e menor que 80,00, ento o produto sofrer um aumento de 15%; c. se a venda mensal mdia for maior ou igual a 1000 e o preo atual maior ou igual a 80,00, ento o produto sofrer uma diminuio de 5%. Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

135

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

26. Desenvolva um algoritmo modularizado que receba o raio de uma circunferncia e um cdigo e, a partir de um menu de opes, permita o usurio calcular e mostrar os dados da circunferncia, conforme a tabela abaixo: Cdigo Operao x calcula o comprimento: C = 2 . . raio y calcula a rea: A = . raio2 z calcula o volume: V = 4/3 . . raio3 Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 27. Desenvolva um algoritmo modularizado que receba um caracter alfanumrico e, a partir de um menu de opes, permita ao usurio verificar e mostrar se o caracter digitado uma vogal, uma consoante, ou qualquer outro caracter. 28. Desenvolva um algoritmo modularizado que receba a medida de um ngulo em graus, calcule e mostre o quadrante em que esse ngulo se localiza. Considere os quadrantes da trigonometria e para ngulos maiores que 360 graus ou menores que 360 graus, reduzi-los, mostrando tambm o nmero de voltas e o sentido da volta (horrio ou anti-horrio). 29. Desenvolva um algoritmo modularizado que receba uma senha de quatro nmeros, verifique a validade desta senha sabendo que a senha correta 1234 e mostre ao usurio uma mensagem dizendo se a senha digitada vlida ou no. 30. Desenvolva um algoritmo modularizado que receba o tipo de investimento (poupana ou fundo de renda fixa) e o valor do investimento, calcule e mostre o valor corrigido do investimento aps o perodo de 30 dias, considerando que o rendimento mensal da poupana de 3% e o do fundo de renda fixa de 5%.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

136

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Captulo 10 Estrutura de Dados Homognea Vetores


Quando desenvolvemos um algoritmo ou programa estruturado, muitas vezes, precisamos usar vrias informaes de um mesmo tipo de dado. Podemos fazer isso criando inmeras variveis, uma para cada informao, mas isso invivel, pois demasiado complexo desenvolvermos e manipularmos um algoritmo que utiliza inmeras variveis para vrias informaes de um mesmo tipo. Para solucionar este problema, podemos utilizar vetores e matrizes para armazenar essas informaes, isto , uma estrutura de dados homognea. Uma estrutura de dados homognea uma estrutura capaz de armazenar vrias informaes de um mesmo tipo de dado. Assim, com um nico nome declarado para esta estrutura, podemos manipular vrias informaes. Uma estrutura de dados homognea pode ser vista como qualquer outra varivel, podendo ser manipulada dentro de uma estrutura de deciso (seja ela simples, composta ou encadeada), dentro de uma estrutura de mltipla escolha, dentro das estruturas de repetio. Temos dois tipos de estrutura de dados homognea: vetores e matrizes. No captulo seguinte, veremos matrizes e a seguir veremos como e quando trabalhar com um vetor, bem como, declarar e manipular um vetor. 10.1 Definio de vetor Um vetor um conjunto de informaes de um mesmo tipo de dado. Note que vetor um nome particular dado matriz unidimensional. Por exemplo, considere uma fileira de 5 carteiras de uma sala de aula representando uma estrutura de dados e cada uma das carteiras representando parties dessa estrutura. Em outras palavras, a fileira de carteiras um vetor e cada carteira um elemento deste vetor. Podemos representar, graficamente, este vetor da seguinte forma: Vet 0 carteira1 1 carteira2 2 carteira3 3 carteira4 4 carteira5

Neste exemplo, possumos um vetor chamado Vet, com dimenso ou tamanho do vetor igual a 5 e com cinco posies: 0, 1, 2, 3 e 4. Na posio 0 do vetor Vet, temos a carteira1, na posio 1 do vetor Vet, temos a carteira2 e, assim por diante, at que na posio 4 do vetor Vet, temos a carteira5. 10.2 Declarao de vetor Quando declaramos um vetor, precisamos saber qual o tipo de dados das informaes que sero armazenadas no vetor e o nmero de elementos desse vetor. O nome atribudo para a declarao de vetor segue as mesmas regras da declarao de qualquer identificador. Pseudocdigo A declarao de um vetor em pseudocdigo ter a seguinte regra sinttica: Declarar <nome do vetor> [<nmero de elementos>] <tipo dos elementos do vetor>;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

137

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Por exemplo, Declarar Vet_exemplo [100] numrico_inteiro; Neste exemplo, declaramos um vetor chamado Vet_exemplo com 100 elementos do tipo inteiro. Java A declarao de um vetor em Java ter a seguinte regra sinttica: <tipo dos elementos> <nome vetor> [ ] = new <tipo elementos> [<nro. de elementos>]; ou <tipo dos elementos>[ ] <nome vetor> = new <tipo elementos> [<nro. de elementos>]; Por exemplo, int Vet_exemplo [ ] = new int [100]; ou int [ ] Vet_exemplo = new int [100]; Neste exemplo, declaramos um vetor chamado Vet_exemplo com 100 elementos do tipo inteiro. Podemos declarar um vetor em Java e depois determinar seu tamanho, seguindo a seguinte regra sinttica: <tipo dos elementos> <nome do vetor> [ ]; <nome do vetor> = new <tipo dos elementos> [<nro. de elementos>]; Por exemplo: int Vet_exemplo [ ]; Vet_exemplo = new int [100]; Neste exemplo, declaramos um vetor chamado Vet_exemplo do tipo inteiro e depois determinamos seu tamanho com 100 elementos do tipo inteiro. No Java, no momento da declarao do vetor, ele automaticamente inicializado com zeros em cada posio do vetor. 10.3 Exemplo de vetor Vamos exemplificar, graficamente, um vetor chamado notas, de 10 posies, contendo notas finais de 10 alunos. Como estamos considerando notas, ento determinamos que essas informaes so do tipo numrico_real. notas 0 1 2 3 4 5 6 7 8 9 138

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

9.5

10.0

8.5

7.5

8.5

- notas o nome do vetor; - o vetor notas possui dez informaes, por isso, tem tamanho 10, ou seja, 10 posies: de 0 at 9; - a posio 0 do vetor, notas[0], possui a nota 9.5; - a posio 1 do vetor, notas[1], possui a nota 10.0; - a posio 2 do vetor, notas[2], possui a nota 8.5; - a posio 3 do vetor, notas[3], possui a nota 5.0; - a posio 4 do vetor, notas[4], possui a nota 8.0; - a posio 5 do vetor, notas[5], possui a nota 7.5; - a posio 6 do vetor, notas[6], possui a nota 6.0; - a posio 7 do vetor, notas[7], possui a nota 9.0; - a posio 8 do vetor, notas[8], possui a nota 8.5; - a posio 9 do vetor, notas[9], possui a nota 7.0. 10.4 Atribuindo valores ao vetor Quando atribumos valores ao vetor, precisamos saber qual o tipo de dados das informaes que sero armazenadas no vetor e o nmero de elementos desse vetor. Os valores so atribudos a cada posio do vetor e a forma de atribuio a mesma de qualquer varivel ou constante. Pseudocdigo A atribuio de valores para cada posio do vetor em pseudocdigo ter a seguinte regra sinttica: <nome do vetor> [<posio>] <valor>; Por exemplo, notas [0] 9.5; Neste exemplo, a posio 0 do vetor notas recebe o valor 9.5. Podemos tambm atribuir valores no momento da declarao do vetor, conforme a seguinte regra sinttica: Declarar <nome vetor> [<nro dados>] {<vlr1> , <vlr2> , ... , <vlrn>} <tipo dados do vetor>; Por exemplo, Declarar notas [3] { 9.5 , 10.0 , 8.5} numrico_real; Neste exemplo, declaramos um vetor chamado notas de tamanho 3, de forma que a posio 0 do vetor possua o valor 9.5, a posio 1 do vetor possua o valor 10.0 e a ltima posio do vetor possua o valor 8.5. Java A atribuio de valores para cada posio do vetor em Java ter a seguinte regra sinttica: Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 139

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

<nome do vetor> [<posio>] = <valor>; Por exemplo, notas [0] = 9.5; Neste exemplo, a posio 0 do vetor notas recebe o valor 9.5. Podemos tambm atribuir valores no momento da declarao do vetor, conforme a seguinte regra sinttica: <tipo dos dados> <nome do vetor> [ ] = {<vlr1> , <vlr2> , ... , <vlrn>}; Por exemplo, double notas [ ] = { 9.5 , 10.0 , 8.5}; Neste exemplo, declaramos um vetor chamado notas de tamanho 3, de forma que a posio 0 do vetor possua o valor 9.5, a posio 1 do vetor possua o valor 10.0 e a ltima posio do vetor possua o valor 8.5. 10.5 Mostrando os elementos de um vetor Quando mostramos valores do vetor, precisamos saber qual o tipo de dados das informaes que foram armazenadas no vetor e o nmero de elementos desse vetor. Os valores so mostrados para cada posio do vetor e a forma de mostrar os elementos na tela a mesma de qualquer varivel ou constante. Pseudocdigo Para mostrar os valores de cada posio do vetor em pseudocdigo teremos a seguinte regra sinttica: escrever (<nome do vetor>[<posio>]); Por exemplo, escrever (notas [0]); Neste exemplo, o contedo da posio 0 do vetor notas ser mostrado ao usurio, ou seja, o valor 9.5 aparecer na tela do usurio. Note que a mensagem dentro do comando escrever pode vir concatenada com outros valores alfanumricos. Por exemplo: escrever ("A nota : " , notas[0]); Neste exemplo, a mensagem A nota 9.5 aparecer na tela do usurio. Java Para mostrar os valores de cada posio do vetor em Java teremos a seguinte regra sinttica:
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

140

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

System.out.println (<nome do vetor> [<posio>]); Por exemplo, System.out.println(notas [0]); Neste exemplo, o contedo da posio 0 do vetor notas ser mostrado ao usurio, ou seja, o valor 9.5 aparecer na tela do usurio. Note que a mensagem dentro do comando System.out.println pode vir concatenada com outras Strings. Por exemplo: System.out.println("A nota : " + notas[0]); Neste exemplo, a mensagem A nota 9.5 aparecer na tela do usurio. 10.6 Exemplos de vetores em pseudocdigo 1. Desenvolva um algoritmo que receba 25 valores numricos inteiros e mostre esses nmeros. Algoritmo Mostrar incio_algoritmo // declarao de variveis e/ou constantes Declarar Vet [25] , i numrico_inteiro; // processamento de dados para i de 0 at 24 passo + 1 faa // mensagem ao usurio escrever ("Digite um valor inteiro"); // entrada de dados ler (Vet[i]); // sada de resultados escrever (Vet[i]); fimpara; fim_algoritmo. 2. Desenvolva um algoritmo que receba 100 valores numricos inteiros e mostre a soma desses 100 nmeros. Algoritmo Somar incio_algoritmo // declarao de variveis e/ou constantes Declarar VetSoma [100] , i , soma 0 numrico_inteiro; // processamento de dados para i de 0 at 99 passo + 1 faa // mensagem ao usurio escrever ("Digite um valor inteiro"); // entrada de dados ler (VetSoma[i]);
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

141

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

soma soma + VetSoma[i]; fimpara; // sada de resultados escrever ("A soma dos 100 valores digitados : " , soma); fim_algoritmo. 3. Desenvolva um algoritmo que receba 50 notas bimestrais, calcule e mostre a mdia aritmtica destas 50 notas. Algoritmo MediaAritmetica incio_algoritmo // declarao de variveis e/ou constantes Declarar i numrico_inteiro; Notas [50] , media, soma 0 numrico_real; // processamento de dados para i de 0 at 49 passo + 1 faa // mensagem ao usurio escrever ("Digite uma nota"); // entrada de dados ler (Notas[i]); soma soma + Notas[i]; fimpara; // processamento de dados media soma/50; // sada de resultados escrever ("A mdia das 50 notas digitadas : " , media); fim_algoritmo. 4. Desenvolva um algoritmo modularizado que recebe 200 valores numricos reais e mostra esses valores e a soma dos nmeros pares. numrico_real FuncSoma (Vet[ ] numrico_real) incio Declarar //declarao de variveis e/ou constantes i numrico_inteiro; Vet [200] , soma numrico_real; // processamento de dados para i de 0 at 199 passo + 1 faa // mensagem ao usurio escrever ("Digite um nmero"); // entrada de dados ler (Vet[i]); se ((Vet[i] mod 2) = 0 ) ento soma soma + Vet[i]; fimse; // sada de resultados escrever ("O nmero digitado " , Vet[i]); fimpara; retornar soma; fimmdulo;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

142

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Algoritmo SomaPares incio_algoritmo Declarar // declarao de variveis e/ou constantes s 0 numrico_real; // processamento de dados s FuncSoma( ); // sada de resultados escrever ("A soma dos nmeros pares : " , s); fim_algoritmo. 10.7 Exemplos de vetores em Java 1. Desenvolva um algoritmo que receba 25 valores numricos inteiros e mostre esses nmeros. class Mostrar { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int Vet [ ] , i; Vet = new int [25]; // processamento de dados for ( i = 0 ; i < 25 ; i++ ) { // mensagem ao usurio e entrada de dados Vet[i] = Integer.parseInt(JOptionPane.showInputDialog ("Digite um valor inteiro")); // sada de resultados System.out.println (Vet[i]); } // for System.exit(0); } // void main } // classe Mostrar 2. Desenvolva um algoritmo que receba 100 valores numricos inteiros e mostre a soma destes 100 nmeros. class Somar { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int VetSoma [ ] , i , soma = 0; VetSoma = new int [100]; // processamento de dados for ( i = 0 ; i <= 99 ; i++ ) { // mensagem ao usurio e entrada de dados VetSoma[i] = Integer.parseInt(JOptionPane.showInputDialog ("Digite um valor inteiro"));
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

143

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

soma = soma + VetSoma[i]; } // for // sada de resultados System.out.println ("A soma dos 100 valores digitados : " + soma); System.exit(0); } // void main } // classe Somar 3. Desenvolva um algoritmo que receba 50 notas bimestrais, calcule e mostre a mdia aritmtica destas 50 notas. class MediaAritmetica { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int i ; double Notas[ ] , media , soma = 0; Notas = new double [50]; // processamento de dados for ( i = 0 ; i <= 49 ; i++ ) { // mensagem ao usurio e entrada de dados Notas[i] = Double.parseDouble(JOptionPane.showInputDialog ("Digite uma nota")); soma = soma + Notas[i]; } // for media = soma/50; // sada de resultados System.out.println ("A mdia das 50 notas digitadas : " + media); System.exit(0); } // void main } // classe MediaAritmetica 4. Desenvolva um algoritmo modularizado que recebe 200 valores numricos reais e mostra esses valores e a soma dos nmeros pares. class SomaPares { public static double FuncSoma ( ) { // declarao de variveis e/ou constantes int i ; double Vet[ ] , soma = 0; Vet = new double [200]; // processamento de dados for ( i = 0 ; i < 200 ; i++ ) { // mensagem ao usurio e entrada de dados Vet[i] = Double.parseDouble(JOptionPane.showInputDialog ("Digite um nmero")); if ((Vet[i] % 2) == 0)
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

144

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

{ soma = soma + Vet[i]; } // if // sada de resultados System.out.println("O nmero digitado " + Vet[i]); } // for return soma; } public static void main(String args [ ]) { // declarao de variveis e/ou contantes double s = 0; // processamento de dados s = FuncSoma( ); // sada de resultados System.out.println ("A soma dos nmeros pares : " + s); System.exit(0); } // void main } // classe SomaPares 10.8 Exerccios de vetores Para todos os exerccios abaixo, construir um algoritmo modularizado usando vetor. 1. Desenvolva um algoritmo que receba e mostre 120 valores alfanumricos. 2. Desenvolva um algoritmo que receba 20 valores numricos inteiros num vetor A e 20 valores numricos inteiros num vetor B. Construa um vetor C com 20 posies, onde cada posio possua a soma dos elementos dos vetores A e B em suas respectivas posies. Mostrar os elementos dos trs vetores. 3. Desenvolva um algoritmo que receba 50 valores numricos reais num vetor X e 30 valores numricos reais num vetor Y. Construa um vetor Z de 80 posies com a concatenao dos vetores X e Y, ou seja, os elementos das 50 primeiras posies so os mesmos elementos do vetor X e os elementos das 30 ltimas posies so os mesmos do vetor Y. Mostre os elementos dos trs vetores. 4. Desenvolva um algoritmo que receba 10 valores numricos inteiros num vetor Num, calcule e mostre os nmeros primos e suas respectivas posies. 5. Desenvolva um algoritmo que receba 50 valores numricos reais num vetor, calcule e armazene, num segundo vetor, os 50 valores do primeiro vetor multiplicados por 5. Mostre os valores dos dois vetores. 6. Desenvolva um algoritmo que receba 30 valores numricos inteiros num vetor, calcule e armazene, num segundo vetor, o quadrado dos 30 valores do primeiro vetor. Mostre os valores dos dois vetores. 7. Desenvolva um algoritmo que receba 45 valores numricos inteiros num vetor, calcule e armazene, num segundo vetor, o fatorial de cada elemento do primeiro vetor. Mostre os dois vetores.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

145

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

8. Desenvolva um algoritmo que receba 90 valores numricos inteiros positivos num vetor, calcule e armazene, num segundo vetor, o negativo de cada elemento do primeiro vetor. Mostre os dois vetores. 9. Desenvolva um algoritmo que receba 85 valores numricos reais num vetor, calcule e armazene, num segundo vetor, a metade de cada elemento do primeiro vetor. Mostre os dois vetores. 10. Desenvolva um algoritmo que calcule a tabuada de um nmero determinado pelo usurio e armazene, num vetor de 10 posies, o resultado da tabuada. Mostre os elementos do vetor. 11. Desenvolva um algoritmo que receba 15 valores referentes s temperaturas em graus Celsius e armazene num vetor de 15 posies. Calcule e armazene, num segundo vetor de 15 posies, os valores de cada temperatura em graus Celsius convertidos para graus Fahrenheit. Calcule e armazene, num terceiro vetor de 15 posies, os valores de cada temperatura em graus Celsius convertidos para graus Kelvin. Mostre os elementos dos trs vetores. 12. Desenvolva um algoritmo que receba 35 valores numricos inteiros num vetor, calcule e armazene o triplo dos valores divisveis por 3 num segundo vetor, armazenando inalterados os valores que no so divisveis por 3. Mostre os elementos dos dois vetores. 13. Desenvolva um algoritmo que receba 15 valores alfanumricos num vetor e armazene invertido esses elementos num segundo vetor de 15 posies. O primeiro elemento do primeiro vetor ser o ltimo elemento do segundo vetor, o segundo elemento do primeiro vetor ser o penltimo elemento do segundo vetor e assim por diante. Mostre os elementos dos dois vetores. 14. Desenvolva um algoritmo que receba 50 valores numricos inteiros e pares num vetor e receba 50 valores numricos inteiros e mpares num segundo vetor de forma que cada elemento recebido seja validado pelo programa e no pelo usurio. Armazene num terceiro vetor de 100 posies o resto da diviso de cada elemento do primeiro vetor por 3 e o quociente da diviso de cada elemento do segundo vetor por 3. Os 50 primeiros elementos do terceiro vetor so referentes ao primeiro vetor e os 50 ltimos elementos do terceiro vetor so referentes ao segundo vetor. Mostre os elementos dos trs vetores. 15. Desenvolva um algoritmo que receba 70 valores divisveis por 2 e por 3 e armazene num vetor de 70 posies. O algoritmo e no o usurio quem deve validar se um valor divisvel por 2 e por 3. Caso o valor digitado satisfaa a condio, ento ele ser armazenado no vetor, caso contrrio, outro valor ser recebido at que os 70 valores preencham o vetor. Mostre os elementos do vetor. 16. Desenvolva um algoritmo que receba 65 valores divisveis por 5 ou por 7 e armazene num vetor de 65 posies. O algoritmo e no o usurio quem deve validar se um valor divisvel por 5 ou 7. Caso o valor digitado satisfaa a condio, ento ele ser armazenado no vetor, caso contrrio, outro valor ser recebido at que os 65 valores preencham o vetor. Mostre os elementos do vetor. 17. Desenvolva um algoritmo que receba 40 valores numricos inteiros, calcule e mostre os nmeros primos e suas respectivas posies. 18. Desenvolva um algoritmo que receba 55 valores numricos reais num vetor, calcule e mostre a mdia aritmtica dos 55 valores.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

146

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

19. Desenvolva um algoritmo que receba 10 valores numricos inteiros num vetor, calcule e mostre a mdia ponderada dos 10 valores, considerando o peso de cada posio, sua prpria posio, ou seja, o peso do elemento da posio 1 1, o peso do elemento da posio 2 2 e assim por diante. 20. Desenvolva um algoritmo que receba 50 valores alfanumricos, verifique e mostre os elementos que comeam com uma vogal. Para facilitar, classifique em ordem crescente esse vetor. 21. Desenvolva um algoritmo que receba 45 valores numricos inteiros, calcule e mostre os nmeros pares, suas posies e a soma dos nmeros pares e os nmeros mpares, suas posies e a quantidade de nmeros mpares. 22. Desenvolva um algoritmo que receba 65 valores resultantes dos nmeros sorteados em um dado jogado 65 vezes. Mostre os nmeros sorteados e a freqncia com que apareceram. 23. Desenvolva um algoritmo que receba 100 valores alfanumricos entre vogais, calcule e mostre quantas vezes cada vogal aparece e sua porcentagem. 24. Desenvolva um algoritmo que receba 35 valores numricos reais e armazene cada elemento de forma ordenada. O primeiro valor digitado ser armazenado na primeira posio do vetor, o segundo valor digitado ser armazenado na segunda posio do vetor, se for maior que o primeiro elemento. Se for menor que o primeiro elemento, desloque esse valor para a segunda posio e armazene o segundo valor digitado na primeira posio. Continue essa regra at que todos os 35 valores sejam digitados e armazenados em ordem crescente no vetor de 35 posies. Mostre os elementos desse vetor. 25. Desenvolva um algoritmo que receba 15 valores numricos inteiros num vetor X, receba 15 valores numricos inteiros num vetor Y e concatene alternadamente os elementos dos vetores X e Y num terceiro vetor Z de 30 posies. Os elementos das posies mpares do vetor Z so os mesmos do vetor X e os elementos das posies pares do vetor Z so os mesmos do vetor Y. Mostrar os elementos dos trs vetores. 26. Desenvolva um algoritmo que receba 30 valores numricos reais num vetor A, receba 30 valores numricos reais num vetor B e concatene os elementos dos vetores A e B num terceiro vetor C de 60 posies. Os primeiros 30 elementos do vetor C so os mesmos do vetor A e os 30 ltimos elementos do vetor C so os mesmos do vetor B. Mostre os elementos dos trs vetores. 27. Desenvolva um algoritmo que receba 50 valores alfanumricos num vetor, armazene de forma invertida os elementos deste vetor num segundo vetor de 50 posies, ou seja, o primeiro elemento do primeiro vetor estar na ltima posio do segundo vetor, o segundo elemento do primeiro vetor estar na penltima posio do segundo vetor e assim por diante. Mostre os valores dos dois vetores. 28. Desenvolva um algoritmo que receba 75 valores alfanumricos num vetor, armazene estes valores num segundo vetor a partir do centro para as bordas e de modo alternado, ou seja, o primeiro elemento do primeiro vetor estar na posio do meio do segundo vetor, o segundo elemento do primeiro vetor estar na posio esquerda da posio do meio do segundo vetor, o terceiro elemento do primeiro vetor estar na posio direita da posio do meio do segundo vetor e assim por diante. Mostre os elementos dos dois vetores. 29. Desenvolva um algoritmo que receba 100 valores numricos inteiros num vetor. Armazene os restos das divises dos elementos das posies pares por suas posies, num Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 147

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

segundo vetor, e os quocientes das divises dos elementos das posies mpares por suas posies neste segundo vetor. Mostre os elementos dos dois vetores. 30. Desenvolva um algoritmo que receba 35 valores numricos reais num vetor e classifique em ordem crescente os elementos desse vetor, utilizando a seguinte regra: - selecione o menor elemento do vetor de 35 posies; - troque este elemento pelo primeiro elemento do vetor; - repita os dois primeiros itens, considerando agora os 34 elementos restantes do vetor, trocando o menor elemento com o segundo elemento do vetor; - repita os dois primeiros itens, considerando agora os 33 elementos restantes do vetor, trocando o menor elemento com o terceiro elemento do vetor; - continue at que se considere apenas o vetor com a ltima posio. Mostre os elementos ordenados do vetor.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

148

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Captulo 11 Estrutura de Dados Homognea Matrizes


Quando desenvolvemos um algoritmo ou programa estruturado, muitas vezes precisamos usar vrias informaes de um mesmo tipo de dado e de informaes diferentes, por exemplo, notas bimestrais, notas semestrais e mdia, todos do tipo numrico real. Podemos fazer isso criando diversas variveis, uma para cada informao, mas isso invivel, pois demasiado complexo desenvolvermos e manipularmos um algoritmo que utiliza diversas variveis para vrias informaes de um mesmo tipo. Para solucionar este problema, podemos utilizar matrizes para armazenar essas informaes, isto , uma estrutura de dados homognea. Uma estrutura de dados homognea, seja ela um vetor ou uma matriz, pode ser vista como qualquer outra varivel, podendo ser manipulada dentro de uma estrutura de deciso (seja ela simples, composta ou encadeada), dentro de uma estrutura de mltipla escolha, dentro das estruturas de repetio. A seguir veremos como e quando trabalhar com uma matriz, bem como declarar e manipular uma matriz. 11.1 Definio de matriz Uma matriz um conjunto de informaes de um mesmo tipo de dados, podendo conter informaes diferentes. Note que matriz um nome particular dado matriz multidimensional, seja ela de dimenso dois ou mais. Por exemplo, uma matriz bidimensional pode conter informaes dispostas em duas coordenadas x e y, ou seja, linha e coluna; uma matriz tridimensional pode conter informaes dispostas em trs coordenadas x, y e z, ou seja, linha, coluna e altura e assim por diante. Neste captulo, nos preocuparemos em estudar as matrizes bidimensionais. Para um exemplo de uma matriz bidimensional, considere dez fileiras de 5 carteiras de uma sala de aula representando uma estrutura de dados, cada uma das fileiras e cada uma das carteiras representando parties dessa estrutura, em outras palavras, as dez fileiras de 5 carteiras so uma matriz bidimensional e cada carteira um elemento desta matriz. Podemos representar, graficamente, esta matriz da seguinte forma: Mat 0 1 2 3 4 5 6 7 8 9 0 carteira1 carteira6 carteira11 carteira16 carteira21 carteira26 carteira31 carteira36 carteira41 carteira46 1 carteira2 carteira7 carteira12 carteira17 carteira22 carteira27 carteira32 carteira37 carteira42 carteira47 2 carteira3 carteira8 carteira13 carteira18 carteira23 carteira28 carteira33 carteira38 carteira43 carteira48 3 carteira4 carteira9 carteira14 carteira19 carteira24 carteira29 carteira34 carteira39 carteira44 carteira49 4 carteira5 carteira10 carteira15 carteira20 carteira25 carteira30 carteira35 carteira40 carteira45 carteira50

Neste exemplo, possumos uma matriz chamada Mat, com dimenso, ou tamanho da matriz, igual a 10 por 5, ou seja, 10 linhas e 5 colunas, com cinqenta posies: 0x0 , 0x1, 0x2, 0x3 , 0x4 , 1x0 , 1x1, 1x2, 1x3 , 1x4 , 2x0 , 2x1, 2x2, 2x3 , 2x4 , 3x0 , 3x1, 3x2, 3x3 , 3x4 , 4x0 , 4x1, 4x2, 4x3 , 4x4 , 5x0 , 5x1, 5x2, 5x3 , 5x4 , 6x0 , 6x1, 6x2, 6x3 , 6x4 , 7x0 , 7x1, 7x2, 7x3 , 7x4 , 8x0 , 8x1, 8x2, 8x3 , 8x4 , 9x0 , 9x1, 9x2, 9x3 e 9x4. Na posio 0x0 da
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

149

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

matriz Mat, temos a carteira1; na posio 0x1 da matriz Mat, temos a carteira2; at que na posio 9x4 da matriz Mat, temos a carteira50. 11.2 Declarao de matriz Quando declaramos uma matriz, precisamos saber qual o tipo de dados das informaes que sero armazenadas na matriz, quais as informaes, o nmero de elementos dessa matriz, bem como, o nmero de linhas e colunas. O nome atribudo para a declarao da matriz segue as mesmas regras da declarao de qualquer identificador. Pseudocdigo A declarao de uma matriz em pseudocdigo ter a seguinte regra sinttica: Declarar <nome da matriz> [<nro de linhas>] [<nro de colunas>] <tipo dos elementos matriz>; Por exemplo, Declarar Mat_exemplo [100][5] numrico_inteiro; Neste exemplo, declaramos uma matriz chamada Mat_exemplo com 100 linhas e 5 colunas totalizando 500 elementos do tipo inteiro. Java A declarao de uma matriz em Java ter a seguinte regra sinttica: <tipo elementos> <nome matriz> [ ][ ] = new <tipo elementos> [<nro lin>][<nro col>]; ou <tipo elementos>[ ][ ] <nome matriz> = new <tipo elementos> [<nro lin>][<nro col>]; ou <tipo elementos>[ ] <nome matriz> [ ] = new <tipo elementos> [<nro lin>][<nro col>]; Por exemplo, int Mat_exemplo [ ][ ] = new int [100][5]; ou int [ ][ ] Mat_exemplo ou int [ ] Mat_exemplo [ ] = new int [100][5]; Neste exemplo, declaramos uma matriz chamada Mat_exemplo com 100 linhas e 5 colunas totalizando 500 elementos do tipo inteiro.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

= new int [100][5];

150

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Podemos declarar uma matriz em Java e depois determinar seu tamanho, seguindo a seguinte regra sinttica: <tipo dos elementos> <nome da matriz> [ ][ ]; <nome da matriz> = new <tipo dos elementos> [<nro. de linhas>][<nro. de colunas>]; Por exemplo: int Mat_exemplo [ ][ ]; Mat_exemplo = new int [100][5]; Neste exemplo, declaramos uma matriz chamada Mat_exemplo do tipo inteiro e depois determinamos seu tamanho com 100 linhas e 5 colunas, totalizando 500 elementos do tipo inteiro. 11.3 Exemplo de matriz Vamos exemplificar, graficamente, uma matriz chamada notas, de 10 linhas e 5 colunas, ou seja, 50 posies, contendo na primeira coluna as notas do primeiro bimestre de 10 alunos, na segunda coluna as notas do segundo bimestre de 10 alunos, na terceira coluna as notas do terceiro bimestre de 10 alunos, na quarta coluna as notas do quarto bimestre de 10 alunos e na quinta coluna as mdias finais dos 10 alunos. Como estamos considerando notas, ento determinamos que essas informaes so do tipo numrico_real. notas posies Aluno 1 Aluno 2 Aluno 3 Aluno 4 Aluno 5 Aluno 6 Aluno 7 Aluno 8 Aluno 9 Aluno 10 0 1 2 3 4 5 6 7 8 9 1o Bim 0 9.0 5.0 7.5 5.0 8.0 9.0 8.0 8.5 9.5 5.0 2o Bim 1 8.0 6.0 7.5 9.0 6.0 8.0 8.0 6.0 8.5 6.5 3o Bim 2 8.5 7.0 7.5 3.0 6.0 9.0 8.0 7.5 8.5 7.0 4o Bim 3 9.0 8.0 7.5 7.0 7.0 10.0 8.0 6.0 9.5 7.5 Mdia Final 4 8.5 6.5 7.5 6.0 7.0 9.0 8.0 7.0 9.0 6.5

- notas o nome da matriz; - a matriz notas possui 10 linhas e 5 colunas, totalizando 50 informaes, por isso, tem tamanho 10x5, ou seja, 50 posies: de 0x0 at 9x4; - a posio 0x0 da matriz, notas[0], possui a nota 9.0; - a posio 0x1 da matriz, notas[1], possui a nota 8.0; - a posio 0x2 da matriz, notas[2], possui a nota 8.5; - a posio 0x3 da matriz, notas[3], possui a nota 9.0; - a posio 0x4 da matriz, notas[4], possui a nota 8.5; - a posio 1x0 da matriz, notas[0], possui a nota 5.0;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

151

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

- a posio 1x1 da matriz, - a posio 1x2 da matriz, - a posio 1x3 da matriz, - a posio 1x4 da matriz, - a posio 2x0 da matriz, - a posio 2x1 da matriz, - a posio 2x2 da matriz, - a posio 2x3 da matriz, - a posio 2x4 da matriz, - a posio 3x0 da matriz, - a posio 3x1 da matriz, - a posio 3x2 da matriz, - a posio 3x3 da matriz, - a posio 3x4 da matriz, - a posio 4x0 da matriz, - a posio 4x1 da matriz, - a posio 4x2 da matriz, - a posio 4x3 da matriz, - a posio 4x4 da matriz, - a posio 5x0 da matriz, - a posio 5x1 da matriz, - a posio 5x2 da matriz, - a posio 5x3 da matriz, - a posio 5x4 da matriz, - a posio 6x0 da matriz, - a posio 6x1 da matriz, - a posio 6x2 da matriz, - a posio 6x3 da matriz, - a posio 6x4 da matriz, - a posio 7x0 da matriz, - a posio 7x1 da matriz, - a posio 7x2 da matriz, - a posio 7x3 da matriz, - a posio 7x4 da matriz, - a posio 8x0 da matriz, - a posio 8x1 da matriz, - a posio 8x2 da matriz, - a posio 8x3 da matriz, - a posio 8x4 da matriz, - a posio 9x0 da matriz, - a posio 9x1 da matriz, - a posio 9x2 da matriz, - a posio 9x3 da matriz, - a posio 9x4 da matriz,

notas[1], possui a nota 6.0; notas[2], possui a nota 7.0; notas[3], possui a nota 8.0; notas[4], possui a nota 6.6; notas[0], possui a nota 7.5; notas[1], possui a nota 7.5; notas[2], possui a nota 7.5; notas[3], possui a nota 7.5; notas[4], possui a nota 7.5; notas[0], possui a nota 5.0; notas[1], possui a nota 9.0; notas[2], possui a nota 3.0; notas[3], possui a nota 7.0; notas[4], possui a nota 6.0; notas[0], possui a nota 8.0; notas[1], possui a nota 6.0; notas[2], possui a nota 6.0; notas[3], possui a nota 7.0; notas[4], possui a nota 7.0; notas[0], possui a nota 9.0; notas[1], possui a nota 8.0; notas[2], possui a nota 9.0; notas[3], possui a nota 10.0; notas[4], possui a nota 9.0; notas[0], possui a nota 8.0; notas[1], possui a nota 8.0; notas[2], possui a nota 8.0; notas[3], possui a nota 8.0; notas[4], possui a nota 8.0; notas[0], possui a nota 8.5; notas[1], possui a nota 6.0; notas[2], possui a nota 7.5; notas[3], possui a nota 6.0; notas[4], possui a nota 7.0; notas[0], possui a nota 9.5; notas[1], possui a nota 8.5; notas[2], possui a nota 8.5; notas[3], possui a nota 9.5; notas[4], possui a nota 9.0; notas[0], possui a nota 5.0; notas[1], possui a nota 6.5; notas[2], possui a nota 7.0; notas[3], possui a nota 7.5; notas[4], possui a nota 6.5.

11.4 Atribuindo valores matriz Quando atribumos valores matriz, precisamos saber qual o tipo de dados das informaes que sero armazenadas na matriz e o nmero de linhas e colunas dessa matriz, ou seja, o nmero de elementos dessa matriz. Os valores so atribudos a cada posio da matriz e a forma de atribuio a mesma de qualquer varivel ou constante.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

152

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Pseudocdigo A atribuio de valores para cada posio da matriz em pseudocdigo ter a seguinte regra sinttica: <nome da matriz> [<nro. da linha>] [<nro. da coluna>] <valor>; Por exemplo, notas [0][0] 9.0; Neste exemplo, a posio 0x0 da matriz notas recebe o valor 9.0. Podemos tambm atribuir valores no momento da declarao da matriz, conforme a seguinte regra sinttica: Declarar <nome da matriz> [<nro linhas>][<nro colunas>] {{<vlr11> , <vlr12> , ... , <vlr1n>} , {<vlr21> , <vlr22> , ... , <vlr2n>} , ... , {<vlrm1> , <vlrm2> , ... , <vlrmn>}} <tipo de dados da matriz>; Por exemplo, Declarar notas [2][3] {{ 9.0 , 10.0 , 8.5} , { 5.5 , 5.0 , 7.5}} numrico_real; Neste exemplo, declaramos uma matriz chamada notas de tamanho 2x3, ou seja, de 6 posies, de forma que a posio 0x0 da matriz possua o valor 9.0, a posio 0x1 da matriz possua o valor 10.0, a posio 0x2 da matriz possua o valor 8.5, a posio 1x0 da matriz possua o valor 5.5, a posio 1x1 da matriz possua o valor 5.0 e a posio 1x2 da matriz possua o valor 7.5. Java A atribuio de valores para cada posio da matriz em Java ter a seguinte regra sinttica: <nome da matriz> [<nro. da linha>] [<nro. da coluna>] = <valor>; Por exemplo, notas [0][0] = 9.0; Neste exemplo, a posio 0x0 da matriz notas recebe o valor 9.0. Podemos tambm atribuir valores no momento da declarao da matriz, conforme a seguinte regra sinttica: <tipo dos dados> <nome da matriz> [ ][ ] = {{<vlr11> , <vlr12> , ... , <vlr1n>} , {<vlr21> , <vlr22> , ... , <vlr2n>} , ... {<vlrm1> , <vlrm2> , ... , <vlrmn>}} <tipo dos dados da matriz>; Por exemplo, double notas [ ][ ] = {{ 9.0 , 10.0 , 8.5} , { 5.5 , 5.0 , 7.5}};
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

153

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Neste exemplo, declaramos uma matriz chamada notas de tamanho 2x3, ou seja, de 6 posies, de forma que a posio 0x0 da matriz possua o valor 9.0, a posio 0x1 da matriz possua o valor 10.0, a posio 0x2 da matriz possua o valor 8.5, a posio 1x0 da matriz possua o valor 5.5, a posio 1x1 da matriz possua o valor 5.0 e a posio 1x2 da matriz possua o valor 7.5. 11.5 Mostrando os elementos de uma matriz Quando mostramos valores da matriz, precisamos saber qual o tipo de dados das informaes que foram armazenadas na matriz e o nmero de elementos dessa matriz. Os valores so mostrados para cada posio da matriz e a forma de mostrar os elementos na tela a mesma de qualquer varivel ou constante. Pseudocdigo Para mostrar os valores de cada posio da matriz em pseudocdigo teremos a seguinte regra sinttica: escrever (<nome da matriz>[<nro. da linha>][<nro. da coluna>]); Por exemplo, escrever (notas [0][0]); Neste exemplo, o contedo da posio 0x0 da matriz notas ser mostrado ao usurio, ou seja, o valor 9.0 aparecer na tela do usurio. Note que a mensagem dentro do comando escrever pode vir concatenada com outros valores alfanumricos. Por exemplo: escrever ("A nota : " , notas[0][0]); Neste exemplo, a mensagem A nota 9.0 aparecer na tela do usurio. Java Para mostrar os valores de cada posio da matriz em Java, teremos a seguinte regra sinttica: System.out.println (<nome da matriz> [<nro. da linha>][<nro. da coluna>]); Por exemplo, System.out.println(notas [0][0]); Neste exemplo, o contedo da posio 0x0 da matriz notas ser mostrado ao usurio, ou seja, o valor 9.0 aparecer na tela do usurio. Note que a mensagem dentro do comando System.out.println pode vir concatenada com outras Strings. Por exemplo: System.out.println("A nota : " + notas[0][0]); Neste exemplo, a mensagem A nota 9.0 aparecer na tela do usurio.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

154

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

11.6 Exemplos de matrizes em pseudocdigo 1. Desenvolva um algoritmo que receba 25 valores numricos inteiros numa matriz 5x5 e mostre esses nmeros. Algoritmo Mostrar incio_algoritmo // declarao de variveis e/ou constantes Declarar Mat [5][5] , i , j numrico_inteiro; // processamento de dados para i de 0 at 4 passo + 1 faa para j de 0 at 4 passo + 1 faa // mensagem ao usurio escrever ("Digite um valor inteiro"); // entrada de dados ler (Mat[i][j]); // sada de resultados escrever (Mat[i][j]); fimpara; fimpara; fim_algoritmo. 2. Desenvolva um algoritmo que receba 120 valores numricos inteiros em uma matriz 10x12 e mostre a soma destes 120 nmeros. Algoritmo Somar incio_algoritmo // declarao de variveis e/ou constantes Declarar MatSoma [10][12] , a , b , soma 0 numrico_inteiro; // processamento de dados para a de 0 at 9 passo + 1 faa para b de 0 at 11 passo + 1 faa // mensagem ao usurio escrever ("Digite um valor inteiro"); // entrada de dados ler (MatSoma[a][b]); soma soma + MatSoma[a][b]; fimpara; fimpara; // sada de resultados escrever ("A soma dos 120 valores digitados : " , soma); fim_algoritmo. 3. Desenvolva um algoritmo que receba 50 notas bimestrais de 10 alunos de 5 turmas, calcule e mostre a mdia aritmtica destas 50 notas. Algoritmo MediaAritmetica incio_algoritmo // declarao de variveis e/ou constantes
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

155

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

Declarar i , j numrico_inteiro; Notas [10][5] , media, soma 0 numrico_real; // processamento de dados para i de 0 at 9 passo + 1 faa para j de 0 at 4 passo + 1 faa // mensagem ao usurio escrever ("Digite uma nota"); // entrada de dados ler (Notas[i][j]); soma soma + Notas[i][j]; fimpara; fimpara; // processamento de dados media soma/50; // sada de resultados escrever ("A mdia das 50 notas digitadas : " , media); fim_algoritmo. 4. Desenvolva um algoritmo modularizado que recebe 200 valores numricos reais numa matriz 20 x 10 e mostra esses valores e a soma dos nmeros pares. numrico_real FuncSoma ( ) incio Declarar // declarao de variveis e/ou constantes i , j numrico_inteiro; MatNum [20][10] , soma 0 numrico_real; // processamento de dados para i de 0 at 19 passo + 1 faa para j de 0 at 9 passo + 1 faa // mensagem ao usurio escrever ("Digite um nmero"); ler (MatNum[i][j]); // entrada de dados se ((MatNum[i][j] mod 2) = 0 ) ento soma soma + MatNum[i][j]; fimse; escrever ("O nmero digitado " , MatNum[i][j]); fimpara; fimpara; // sada de resultados retornar soma; fimmdulo. Algoritmo SomaPares incio_algoritmo Declarar // declarao de variveis e/ou constantes s 0 numrico_real; // processamento de dados s FuncSoma ( ); // sada de resultados
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

156

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

escrever ("A soma dos nmeros pares : " , s); fim_algoritmo. 11.7 Exemplos de matrizes em Java 1. Desenvolva um algoritmo que receba 25 valores numricos inteiros numa matriz 5x5 e mostre esses nmeros. class Mostrar { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int Mat [ ][ ] , i , j ; Mat = new int [5][5]; // processamento de dados for ( i = 0 ; i < 5 ; i++ ) { for ( j = 0 ; j < 5 ; j++) { // mensagem ao usurio e entrada de dados Mat[i][j] = Integer.parseInt(JOptionPane.showInputDialog ("Digite um valor inteiro")); // sada de resultados System.out.println (Mat[i][j]); } // for usando a varivel j } // for usando a varivel i System.exit(0); } // void main } // classe Mostrar 2. Desenvolva um algoritmo que receba 120 valores numricos inteiros numa matriz 10x12 e mostre a soma desses 120 nmeros. class Somar { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int MatS [ ][ ] , a , b , soma = 0; MatS = new int [10][12]; // processamento de dados for ( a = 0 ; a <= 9 ; a++ ) { for ( b = 0 ; b <= 11 ; b++ ) { // mensagem ao usurio e entrada de dados MatS[a][b]= Integer.parseInt(JOptionPane.showInputDialog soma = soma + MatS[a][b]; ("Digite um valor inteiro")); 157

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

} // for usando a varivel b } // for usando a varivel a // sada de resultados System.out.println ("A soma dos 120 valores digitados : " + soma); System.exit(0); } // void main } // classe Somar 3. Desenvolva um algoritmo que receba 50 notas bimestrais de 10 alunos de 5 turmas, calcule e mostre a mdia aritmtica dessas 50 notas. class MediaAritmetica { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int i , j ; double Notas[ ][ ] , media , soma = 0; Notas = new double [10][5]; // processamento de dados for ( i = 0 ; i <= 9 ; i++ ) { for ( j = 0 ; j <= 4 ; j++ ) { // mensagem ao usurio e entrada de dados Notas[i][j] = Double.parseDouble( JOptionPane.showInputDialog ("Digite uma nota")); soma = soma + Notas[i][j]; } // for usando varivel j } // for usando varivel i media = soma/50; // sada de resultados System.out.println ("A mdia das 50 notas digitadas : " + media); System.exit(0); } // void main } // classe MediaAritmetica 4. Desenvolva um algoritmo que recebe 200 valores numricos reais numa matriz 20x10 e mostra esses valores e a soma dos nmeros pares. class SomaPares { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int i , j ; double MatNum[ ][ ] , soma = 0; MatNum = new double [20][10]; // processamento de dados for ( i = 0 ; i < 20 ; i++ ) {
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

158

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

for ( j = 0 ; j < 10 ; j++ ) { // mensagem ao usurio e entrada de dados MatNum[i][j] = Double.parseDouble( JOptionPane.showInputDialog ("Digite um nmero")); if ((MatNum[i][j] % 2) == 0) { soma = soma + MatNum[i][j]; } // if // sada de resultados System.out.println("O nmero digitado " + MatNum[i][j]); } // for usando a varivel j } // for usando a varivel i // sada de resultados System.out.println ("A soma dos nmeros pares : " + soma); System.exit(0); } // void main } // classe SomaPares 11.8 Exerccios de matrizes Para todos os exerccios abaixo, construir um algoritmo modularizado usando matriz. 1. Desenvolva um algoritmo que receba e mostre 120 valores alfanumricos numa matriz 10x12. 2. Desenvolva um algoritmo que receba 20 valores numricos inteiros numa matriz A de dimenses 10x2 e 20 valores numricos inteiros numa matriz B de dimenses 10x2. Construa uma matriz C com dimenses 10x2, onde cada posio possua a soma dos elementos das matrizes A e B em suas respectivas posies. Mostre os elementos das trs matrizes. 3. Desenvolva um algoritmo que receba 50 valores numricos reais numa matriz X de dimenses 5x10 e 30 valores numricos reais numa matriz Y de dimenses 3x10. Construa uma matriz Z de dimenses 8x10 com a concatenao das matrizes X e Y, ou seja, os elementos das 5 primeiras linhas so os mesmos elementos da matriz X e os elementos das trs ltimas linhas so os mesmos da matriz Y. Mostre os elementos das trs matrizes. 4. Desenvolva um algoritmo que receba 10 valores numricos inteiros numa matriz Num de dimenses 5x2, calcule e mostre os nmeros primos e suas respectivas posies. 5. Desenvolva um algoritmo que receba 50 valores numricos reais numa matriz 10x5, calcule e armazene numa segunda matriz os 50 valores da primeira matriz multiplicados por 7. Mostre os valores das duas matrizes. 6. Desenvolva um algoritmo que receba 35 valores numricos inteiros numa matriz de dimenses 7x5, calcule e armazene numa segunda matriz o quadrado dos 35 valores da primeira matriz. Mostre os valores das duas matrizes. 7. Desenvolva um algoritmo que receba 45 valores numricos inteiros numa matriz de dimenses 5x9, calcule e armazene numa segunda matriz o fatorial de cada elemento da primeira matriz. Mostre as duas matrizes.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

159

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

8. Desenvolva um algoritmo que receba 90 valores numricos inteiros positivos numa matriz de dimenses 10x9, calcule e armazene numa segunda matriz o negativo de cada elemento da primeira matriz. Mostre as duas matrizes. 9. Desenvolva um algoritmo que receba 75 valores numricos reais numa matriz de dimenses 15x5, calcule e armazene numa segunda matriz a metade de cada elemento da primeira matriz. Mostre as duas matrizes. 10. Desenvolva um algoritmo que calcule a tabuada dos nmeros de 1 a 10 e armazene numa matriz de dimenses 10x10 o resultado da tabuada. Mostre os elementos da matriz. Na primeira coluna da matriz, armazene a tabuada da nmero 1, na segunda coluna da matriz, armazene a tabuada do nmero 2 e assim por diante, at a ltima coluna da matriz, armazene a tabuada do nmero 10. 11. Desenvolva um algoritmo que receba 15 valores referentes a temperaturas em graus Celsius e armazene na primeira linha de uma matriz de dimenses 3x15. Calcule e armazene na segunda linha desta matriz os valores de cada temperatura em graus Celsius convertidos para graus Fahrenheit. Calcule e armazene na terceira linha desta matriz cada temperatura em graus Celsius convertidos para graus Kelvin. Mostre os elementos da matriz. 12. Desenvolva um algoritmo que receba 49 valores numricos inteiros numa matriz de dimenses 7x7, calcule e armazene o triplo dos valores divisveis por 3 numa segunda matriz, armazenando inalterados os valores que no forem divisveis por 3. Mostre os elementos das duas matrizes. 13. Desenvolva um algoritmo que receba 15 valores alfanumricos numa matriz de dimenses 3x5 e armazene invertido esses elementos numa segunda matriz de dimenses 3x5. O primeiro elemento da primeira matriz ser o ltimo elemento da segunda matriz, o segundo elemento da primeira matriz ser o penltimo elemento da segunda matriz e assim por diante. Mostre os elementos das duas matrizes. 14. Desenvolva um algoritmo que receba 25 valores numricos inteiros e pares numa matriz de dimenses 5x5 e receba 25 valores numricos inteiros e mpares numa segunda matriz de dimenses 5x5 de forma que cada elemento recebido seja validado pelo programa e no pelo usurio. Armazene numa terceira matriz de 50 posies de dimenses 10x5 o resto da diviso de cada elemento da primeira matriz por 3 e o quociente da diviso de cada elemento da segunda matriz por 3. Os elementos das 5 primeiras linhas da terceira matriz so referentes primeira matriz e os elementos das 5 ltimas linhas da terceira matriz so referentes segunda matriz. Mostre os elementos das trs matrizes. 15. Desenvolva um algoritmo que receba 70 valores divisveis por 2 e por 3 e armazene numa matriz de dimenses 7x10. O algoritmo e no o usurio quem deve validar se um valor divisvel por 2 e por 3. Caso o valor digitado satisfaa a condio, ento ele ser armazenado na matriz, caso contrrio, outro valor ser recebido at que os 70 valores preencham a matriz. Mostre os elementos da matriz. 16. Desenvolva um algoritmo que receba 81 valores divisveis por 5 ou por 7 e armazene numa matriz de dimenses 9x9. O algoritmo e no o usurio quem deve validar se um valor divisvel por 5 ou 7. Caso o valor digitado satisfaa a condio, ento ele ser armazenado na matriz, caso contrrio, outra valor ser recebido at que os 81 valores preencham a matriz. Mostre os elementos da matriz. 17. Desenvolva um algoritmo que receba 40 valores numricos inteiros numa matriz de dimenses 10x4, calcule e mostre os nmeros primos e suas respectivas posies.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

160

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

18. Desenvolva um algoritmo que receba 55 valores numricos reais numa matriz de dimenses 5x11, calcule e mostre a mdia aritmtica dos 55 valores. 19. Desenvolva um algoritmo que receba 10 valores numricos inteiros numa matriz de dimenses 2x5, calcule e mostre a mdia ponderada dos 10 valores, considerando o peso de cada valor, o nmero correspondente da coluna em que se encontra mais um, ou seja, o peso do elemento da posio 0x0 1, o peso do elemento da posio 0x1 2 e assim por diante. 20. Desenvolva um algoritmo que receba 50 valores alfanumricos numa matriz de dimenses 10x5, verifique e mostre os elementos que comeam com uma vogal. Para facilitar, classifique em ordem crescente essa matriz. 21. Desenvolva um algoritmo que receba 49 valores numricos inteiros numa matriz de dimenses 7x7, calcule e mostre os nmeros pares, suas posies e a soma dos nmeros pares, bem como os nmeros mpares, suas posies e a quantidade de nmeros mpares. 22. Desenvolva um algoritmo que receba 65 valores resultantes dos nmeros sorteados em um dado jogado 65 vezes. Esses valores devem ser armazenados numa matriz 13x5. Mostre os nmeros sorteados e a freqncia com que apareceram. 23. Desenvolva um algoritmo que receba 100 valores alfanumricos entre vogais armazenadas numa matriz de dimenses 10x10, calcule e mostre quantas vezes cada vogal aparece e sua porcentagem. 24. Desenvolva um algoritmo que receba 35 valores numricos reais e armazene cada elemento de forma ordenada, numa matriz de dimenses 7x5. O primeiro valor digitado ser armazenado na primeira posio da matriz, ou seja, na posio 0x0; o segundo valor digitado ser armazenado na segunda posio da matriz, ou seja, na posio 0x1, se for maior que o primeiro elemento. Se for menor que o primeiro elemento, deslocar esse valor para a segunda posio e armazenar o segundo valor digitado na primeira posio. Continue com essa regra at que todos os 35 valores sejam digitados e armazenados em ordem crescente na matriz de 35 posies. Mostre os elementos dessa matriz. 25. Desenvolva um algoritmo que receba 15 valores numricos inteiros numa matriz X de dimenses 3x5, receba 15 valores numricos inteiros numa matriz Y de dimenses 3x5 e concatene alternadamente os elementos das matrizes X e Y numa terceira matriz Z de dimenses 3x10. Os elementos das colunas pares da matriz Z so os mesmos da matriz X e os elementos das colunas mpares da matriz Z so os mesmos da matriz Y. Mostre os elementos das trs matrizes. 26. Desenvolva um algoritmo que receba 30 valores numricos reais numa matriz A de dimenses 10x3, receba 30 valores numricos reais numa matriz B de dimenses 10x3 e concatene os elementos das matrizes A e B numa terceira matriz C de dimenses 20x3. Os primeiros 30 elementos da matriz C so os mesmos da matriz A e os 30 ltimos elementos da matriz C so os mesmos da matriz B. Mostre os elementos das trs matrizes. 27. Desenvolva um algoritmo que receba 64 valores alfanumricos numa matriz de dimenses 8x8, armazene de forma invertida os elementos desta matriz numa segunda matriz de dimenses 8x8, ou seja, o primeiro elemento da primeira matriz estar na ltima posio da segunda matriz, o segundo elemento da primeira matriz estar na penltima posio da segunda matriz e assim por diante. Mostre os valores das duas matrizes.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

161

IBTA 00
BD/Redes/ Web Lgica de Programao Mdulo II

28. Desenvolva um algoritmo que receba 75 valores alfanumricos numa matriz de dimenses 15x5, armazene estes valores numa segunda matriz de dimenses 15x5 a partir do centro para a primeira e a ltima posies e de modo alternado, ou seja, o primeiro elemento da primeira matriz estar na posio do meio da segunda matriz, o segundo elemento da primeira matriz estar na posio esquerda da posio do meio da segunda matriz, o terceiro elemento da primeira matriz estar na posio direita da posio do meio da segunda matriz e assim por diante. Mostre os elementos das duas matrizes. 29. Desenvolva um algoritmo que receba 100 valores numricos inteiros numa matriz de dimenses 10x10. Armazene os restos das divises dos elementos das posies pares pela soma da sua posio (linha + coluna) numa segunda matriz de dimenses 10x10 e os quocientes das divises dos elementos das posies mpares pela soma da sua posio (linha + coluna) na segunda matriz. Mostre os elementos das duas matrizes. 30. Desenvolva um algoritmo que receba 35 valores numricos reais numa matriz de dimenses 7x5 e classifique em ordem crescente os elementos dessa matriz, utilizando a seguinte regra: - selecione o menor elemento da matriz de 35 posies; - troque este elemento pelo primeiro elemento da matriz; - repita os dois primeiros itens, considerando agora os 34 elementos restantes da matriz, trocando o menor elemento com o segundo elemento da matriz; - repita os dois primeiros itens, considerando agora os 33 elementos restantes da matriz, trocando o menor elemento com o terceiro elemento da matriz; - continue at que se considere apenas a matriz com a ltima posio. Mostre os elementos ordenados da matriz.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

162