62 pág.

Pré-visualização | Página 11 de 12
8x2. Ambas as matrizes de tipo char. 5. Faça um algoritmo que leia uma matriz 6x6 e exiba a soma de sua diagonal principal. 6. Faça um algoritmo que leia uma matriz 6x6 e exiba a soma de sua diagonal secundária. 7. Faça um algoritmo que leia uma matriz 6x6 e exiba a soma dos seguintes valores da matriz. 8. Faça um algoritmo que preencha uma matriz 10x10 de forma automática com os valores de 1 a 100 de forma seqüencial. Obs.: Utilize apenas os contadores dos laços e a matriz propriamente dita. Não utilize uma contadora auxiliar. QI - Escola de Educação Profissional Apostila de Lógica de Programação Professor: Eduardo Reus Souza 53 Aula 22 Aula destinada à conclusão e correção dos exercícios. QI - Escola de Educação Profissional Apostila de Lógica de Programação Professor: Eduardo Reus Souza 54 Aula 23 Continuação e Correção de Exercícios 9. Faça um algoritmo que leia uma matriz 3x3 de tipo real e adicione seus valores a um vetor real de 9 posições. 10. Faça um algoritmo que ordene os valores de uma matriz 4x4 de forma decrescente. O procedimento a ser executado deverá ser: a) Ler a matriz b) Adicionar seus dados a um vetor c) Ordenar o vetor d) Devolver os dados para a matriz. 11. Faça um algoritmo que ordene de forma crescente apenas os valores pares de uma matriz inteira 5x5, sendo que os valores ímpares não devem ser deslocados. QI - Escola de Educação Profissional Apostila de Lógica de Programação Professor: Eduardo Reus Souza 55 Aula 24 Introdução a Programação Modular 10. Introdução O conceito de programação modular consiste no desenvolvimento de rotinas de tal forma que seja permitido o seu reaproveitamento. 10.1. Por que Utilizar Programação Modular? Um algoritmo que implementa programação modular possui inúmeras vantagens. Dentre as quais se destacam: O código fonte diminui drasticamente de tamanho A manutenção do código fonte fica simplificada Uma possível mudança de plataforma pode ser menos traumática (portabilidade) Exemplo Imagine que estamos desenvolvendo um software com uma gama de cálculos assombrosa. O que aconteceria se uma fórmula muito comum em todo o programa tenha sido passada errada para o programador? A resposta é simples, reescrever a fórmula em todos os lugares em que a mesma se encontra. Esse trabalho pode levar horas, dependendo do tamanho do código. Se utilizarmos o conceito de programação modular, a alteração precisará ser feita em apenas um lugar. Sendo que todo o programa irá se atualizar automaticamente. 10.2. Como Implementar Programação Modular? Programação modular dentro da linguagem C é feita utilizando o que chamamos de funções. 10.2.1. Funções Funções são blocos de algoritmo que devem possuir uma assinatura e que ao final de sua execução, devem retornar algum valor de resposta. 10.2.2. Assinatura Conjunto formado pelo nome, lista de argumentos (quando necessários) e tipo de dado de saída. 10.2.3. Argumento São todas as informações que devem ser enviadas pelo usuário da função, para que esta possa ser executada de forma correta. 10.2.4. Parâmetro São as informações que serão passadas para os argumentos das funções pelo programa principal (usuário). 10.3. Exemplo Prático Utilizando os conceitos de programação modular. Faremos um algoritmo que retorne o maior valor entre dois valores inteiros. QI - Escola de Educação Profissional Apostila de Lógica de Programação Professor: Eduardo Reus Souza 56 #include <stdio.h> //Criação da Função int encontra_maior(int a, int b) { if (a > b) { return a; } else { return b; } } //Programa Principal int main() { int v1, v2, maior; printf ("Digite o primeiro valor: "); scanf ("%d", &v1); printf ("Digite o segundo valor: "); scanf ("%d", &v2); maior = encontra_maior(v1,v2); printf ("O maior valor é: %d \n", maior); system("PAUSE"); return 0; } Explicando o código int encontra_maior(int a, int b) Assinatura da função. Está sendo informado que existe uma função chamada “encontra_maior” que recebe dois valores inteiros como argumentos (a e b) e devolve um valor inteiro no final Return É a instrução que fará com que a devolução do valor seja feita. No caso de “a” ser o maior valor será retornado “a”, caso contrário a função devolverá “b”. maior = encontra_maior(v1, v2) Chamada da função. É feita a chamada da função “encontra_maior” de modo que o conteúdo dos parâmetros “v1” e “v2” sejam enviados para os argumentos “a” e “b” e o retorno da função será depositado na variável “maior” Repare que em nenhum momento é feita a leitura dos valores dos argumentos dentro da função. A leitura dos dados deve ser feita nos parâmetros, de modo que a função se torne o mais independente possível. Exceto em funções específicas para captura de dados do usuário. Apesar de funcional, o exemplo acima poderia ser facilmente desenvolvido sem a utilização de programação modular. Sendo assim, sua utilidade nesta questão é posta em xeque. QI - Escola de Educação Profissional Apostila de Lógica de Programação Professor: Eduardo Reus Souza 57 Porém, este tipo de abordagem mostra seu verdadeiro valor com o decorrer do tempo. Se, por exemplo, fosse necessário agora que a leitura a ser feita seja de três valores inteiros. Qual seria sua solução? Reescrever a função de modo que encontre o maior valor entre três parâmetros?. Preste atenção no exemplo abaixo, ainda utilizando a função “encontra_maior”: int main() { int v1, v2, v3, maior; printf ("Digite o primeiro valor: "); scanf ("%d", &v1); printf ("Digite o segundo valor: "); scanf ("%d", &v2); printf ("Digite o terceiro valor: "); scanf ("%d", &v3); maior = encontra_maior(encontra_maior(v1,v2),v3); printf ("O maior valor é: %d \n", maior); system("PAUSE"); return 0; } Com este método, foi possível reaproveitar o código da função anterior de modo que encontramos o maior valor entre as variáveis “v1” e “v2” e comparamos este valor com “v3” em uma segunda chamada da função. Sendo assim, a função original não precisou sofrer nenhuma alteração na sua estrutura. Podemos achar o maior valor entre qualquer grupo de valores utilizando a função “encontra_maior” fazendo alterações apenas no programa principal. Nada impede também, que façamos mais de uma função dentro de um código. Inclusive de modo que uma função chame outra que esteja desenvolvida acima. 10.4. Escopo das Variáveis – Instanciamento de Variáveis Trabalhando com múltiplas funções em um código, é muito comum de termos em vários pontos do programa variáveis com utilizações totalmente diferentes porém com o mesmo nome. Variáveis declaradas dentro de uma função, possuem validade apenas dentro desta função. Permitindo assim que seu nome seja repetido em outras funções. Estas variáveis também são conhecidas como variáveis locais. Existem também, variáveis que podem ter validade dentro de todo o nosso projeto (sendo visualizadas por todas as funções). Estas são denominadas como variáveis Globais. Esta “área de validade” é o escopo de uma variável. QI - Escola de Educação Profissional Apostila de Lógica de Programação Professor: Eduardo Reus Souza 58 10.5. Exercícios