Explicação do programa:

Documentos relacionados
Linguagem C (Funções)

Algoritmos e Estruturas de Dados I Prof. Eduardo 1 1 MODULARIZAÇÃO

2ª Licenciatura AED1 e PC1 Prof. Eduardo 1 1 MODULARIZAÇÃO

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Disciplina: Introdução a Programação. IPRJ/UERJ Professora: Sílvia Mara da Costa Campos Victer. Índice: Aula1 - Introdução Programa Algoritmo

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

ALGORITMOS I. Procedimentos e Funções

Linguagem C Funções. André Tavares da Silva.

Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende

Programação: Vetores

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Modularidade - Fun ções e Procedimentos

As funções são blocos de instruções que facilitam o entendimento do código. Sua sintaxe é:

Linguagem C. André Tavares da Silva.

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

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

Introdução a Programação de Jogos

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

Computação 2. Diego Addan Aula 3. Funções

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Linguagem C: Introdução

ponteiros INF Programação I Prof. Roberto Azevedo

Programação C/C++ Slide 5 Nielsen Castelo Damasceno

Variáveis, Tipos de Dados e Operadores

Disciplina de Algoritmos e Programação

LP II Estrutura de Dados

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses

Introdução aos Algoritmos

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Programação Básica. Estrutura de um algoritmo

DAS5102 Fundamentos da Estrutura da Informação

Módulo 5 Vetores e Alocação Dinâmica

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Comandos de Entrada. Lógica de Programação. Prof. Kleber Rezende

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

LINGUAGEM C: ARRAY: VETORES E MATRIZES

Alocação Dinâmica em C

SUB-ROTINAS (PROCEDIMENTOS E FUNÇÕES)

Aula 03 - Linguagem C

Módulos ou Subrotinas: PARTE II. Criando seus próprios módulos

Vetores e Matrizes. Conceito. Conceito. Conceito. Conceito. Conceito. Variáveis Compostas Homogêneas. Matriz

4ª Lista de Exercícios de Programação I

CURSO BÁSICO DE PROGRAMAÇÃO AULA 19. Netbeans - Linguagem JAVA - Vetores - Matrizes - Métodos

Ponteiros de Variáveis

Parte I - Expressões lógicas e operadores

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Aula 9 Oficina de Programação Matrizes. Profa. Elaine Faria UFU

UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - CENTRO 06. Funções, variáveis, parâmetros formais

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

Estrutura de Programas e Tipos de Dados Simples

4ª Lista de Exercícios de Programação I

3ª Lista de Exercícios de Programação I

Funções em C. Lucas Ferrari de Oliveira Professor Adjunto. Linguagem de Programação Estruturada I. Universidade Federal do Paraná

INFORMÁTICA APLICADA AULA 03 LINGUAGEM DE PROGRAMAÇÃO C++

LISTA DE EXERCÍCIOS - ro. 04

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Aula 25: Funções com Arrays

Noções de algoritmos - Aula 1

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Aula 14: Funções Passagem de Parâmetros por Referência

CCO 016 / COM 110 Fundamentos de Programação

Fig. 1: Ilustração de um exemplo de Modularização de um guindaste em suas partes Fonte: Internet

12 - Dados Estruturados Vetores, Matrizes e Strings

Linguagem C. Programação Estruturada. Modularização (Funções) Prof. Luis Nícolas de Amorim Trigo

GEQ Prof. Paulo R. Coelho. Lista para prova

Linguagem C: funções e ponteiros. Prof. Críston Algoritmos e Programação

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

Transcrição:

Disciplina: Introdução à Programação. IPRJ/UERJ Professora: Sílvia Mara da Costa Campos Victer Índice: Aula10 Sub-rotina: Em algoritmos Em C Sub-rotinas subprograma - programação modularizada Definição: As sub-rotinas são blocos de instruções que realizam tarefas específicas. O código de um subprograma é carregado uma vez e executado várias vezes. O problema pode ser subdividido em pequenas tarefas, com isso os programas tendem a ficar menores e mais organizados. Os programas em geral são executados linearmente, uma linha após a outra, até o fim. Mas quando usamos sub-rotinas, é possível realizar desvios na execução dos programas. Estes desvios são efetuados quando uma função é chamada pelo programa principal. Exemplo: Explicação do programa: Objetivo desse algoritmo: receber o valor do salário de um funcionário e calcular o novo salário. Para resolver este problema, utilizou-se o programa principal (bloco de instruções entre as linha 1 e 7) e uma sub-rotina (bloco de instruções entre as linhas 8 e 13). 1

Este exemplo mostra a utilização de uma sub-rotina que recebe um parâmetro (o valor atual do salário) e que, ao final, retorna um valor (aumento que será dado ao salário) para quem a chamou. Porém, as sub-rotinas podem não receber parâmetros nem retornar valor. Qual a diferença entre variáveis locais e globais? Variáveis locais: variáveis declaradas dentro das sub-rotinas. As variáveis locais recebem este nome porque podem ser utilizadas apenas dentro da sub-rotina. Quando a execução desta chega ao fim, essas variáveis são destruídas e seus conteúdos são perdidos. Variáveis globais: variáveis declaradas fora de qualquer sub-rotina. As variáveis globais recebem este nome porque qualquer ponto do programa, incluindo as sub-rotinas, pode utilizá-las. Elas são destruídas quando a execução do programa chega ao fim. Obs: não é aconselhável a utilização excessiva de variáveis globais, pois torna difícil a manutenção e a busca por erros nos programas. Sub-rotinas em C/C++ (funções) Modularização - Recurso das linguagens de programação particionar um programa em sub-rotinas bastante específicas. Um programa escrito na linguagem C/C++ tem, no mínimo, uma função chamada main, que indica o início da execução. Existe um série de outras funções predefinidas, por exemplo: clrscr(), gets(), strcpy(), printf(), scanf(), pow(), etc. Estas funções são adicionadas aos programas pela diretiva #include, no momento da linkedição. O usuário pode criar quantas funções quiser, dependendo do problema que estiver sendo resolvido pelo programa. As funções podem, quando houver necessidade, receber valores externos, chamados parâmetros, e também podem devolver algum valor produzido para o ambiente externo, denominado retorno. Os parâmetros são representados por uma lista de variáveis colocadas dentro de parênteses, logo após o nome da função. Caso haja retorno, a última linha da função deverá incluir o comando return, seguido do valor ou variável que será devolvido a quem chamou a função. O tipo do 2

valor retornado deverá ser exatamente igual ao tipo informado antes do nome da função. A palavra void deverá ser digitada caso a função não retorne valor. Tipos de funções 1- Funções sem passagem de parâmetro e sem retorno. Este é o tipo mais simples de função, pois não recebe nenhuma informação no momento de sua chamada e também não repassa nenhum valor para quem a chamou. Exemplo: Explicação do programa A execução sempre começa pela função main. A execução se inicia na linha 13. Na linha 15, existe uma chamada à função soma, onde o fluxo da execução é desviado para a linha 3. Depois são executada as linhas 4 até 11. Quando a execução atinge a linha 12, a marca de final da função é encontrada. Neste momento, o fluxo da execução retorna para a linha 16, exatamente abaixo de onde ocorreu o desvio para a função soma. Na linha 16 está a marca de finalização da função main, e o programa é concluído. OBS_1: no momento em que a função soma foi chamada, na linha 15, nenhum valor ou variável foi colocado entre parênteses, indicando que não houve passagem de parâmetros. OBS_2: dentro da função soma não foi utilizado o comando return, indicando que ela não retornou nenhum valor para quem a chamou, logo, o seu tipo é void. Fazer: Exercícios 1, 6. 3

2- Funções com passagem de parâmetros e sem retorno. Este tipo de função é representado por aquelas que recebem valores no momento em que são chamadas (parâmetros), mas que, no final, não devolvem valor para quem a chamou (retorno). Exemplo: Explicação do programa: A execução do programa sempre começa pela função main. A execução iniciou-se na linha 9. Em seguida, são executadas sequencialmente as linhas 10 até 14. Nas linha 12 e 14, dois valores são recebidos e armazenados nas variáveis n1 e n2. Serão executadas então as linhas 3 a 8, onde está a marca de encerramento da função. O fluxo de execução retorna à função main, na linha 16, imediatamente abaixo do ponto de chamada da função calcula_media. A execução do programa é concluída. OBS_1: no momento em que a função calcula_media foi chamada, na linha 15, duas variáveis foram colocadas entre parênteses, indicando que houve passagem de parâmetros. Os valores delas são copiados para as variáveis numero 1 e numero 2, descrita no cabeçalho da função, na linha 3. OBS_2: na função calcula_media, não foi utilizado o comando return, indicando que ela não retornou valor para quem a chamou. Logo, seu tipo foi definido como void. Fazer: Exercício 4 3- Funções sem passagem de parâmetros e com retorno Este tipo de função é representado por aquelas que não recebem valores no momento em que são chamadas (parâmetros), mas que, no final, devolvem um valor para quem as chamou (retorno). 4

Exemplo: A execução do programa começa pela função main (sempre). A execução tem início na linha 12. Continua na linha 13. Na linha 14, o fluxo de execução é desviado para a função multiplicação, na linha 3. As linhas 3 a 10 são executadas. Ao chegar à linha 10, o comando return é encontrado. Isto significa que a execução da função chegou ao fim e que o conteúdo da variável produto será devolvido para quem a chamou. O fluxo de execução retorna à função main, na linha 14. O valor retornado é atribuído à variável resposta. As linhas 15,16 e 17 são executadas. Fim do programa. OBS_1: no momento em que a função multiplicação foi chamada, na linha 14, nenhum valor ou variável foi colocada entre parênteses, o que indica que não houve passagem de parâmetros. OBS_2: na função multiplicação foi utilizado o comando return produto, significa que o valor da variável produto foi devolvido a quem a chamou. Logo, o tipo da função é float, exatamente igual ao tipo do valor retornado. 4- Funções com passagem de parâmetro e com retorno Este tipo de função é representado por aquelas que recebem valores no momento em que são chamadas (parâmetros) e que, no final, devolvem um valor para quem a chamou (retorno). Exemplo: 5

Explicação do programa: 1- A execução do programa começa pela função main (sempre), na linha 9. 2- As linhas 10, 11,12,13,14 e 15 são executadas sequencialmente. 3- Nas linhas 13 e 15 dois valores são recebidos e armazenados nas variáveis n1 e n2, respectivamente. 4- Na linha 16, o fluxo de execução é desviado para a função divisão, com os valores das variáveis n1 e n2. 5- As linhas 3,4, e 5 são executadas. 6- Na linha 6, o comando return é encontrado. 7- A execução da função termina. 8- O conteúdo da variável q será devolvido para quem a chamou. 9- Na linha 16, o fluxo da execução retorna à função main e o valor retornado é atribuído à variável resposta. 10- As linhas 17, 18 e 19 são executadas. 11- Término do programa. OBS_1: quando a função divisão foi chamada, na linha 16, duas variáveis foram colocada entre parênteses, indicando que houve passagem de parâmetros. Assim, os valores destas variáveis são copiados, respectivamente, para a variáveis dividendo e divisor, descritas no cabeçalho da função, na linha 3. OBS_2: na função divisão foi utilizado o comando return q, indicando que o valor da variável q será devolvido a quem a chamou. Portanto, o tipo da função é, exatamente igual ao tipo do valor retornado. Fazer: Exercícios 2, 3, 5, 7. 6

Protótipo de função Em qualquer programa, podemos escrever funções antes ou depois da função main. Caso as funções sejam escritas abaixo da função main, devemos fazer uso dos protótipos de função. Definição: Protótipo de uma função é uma linha exatamente igual ao cabeçalho da função (terminando com um ponto-e-vírgula) que sempre deverá ser escrita antes da função main. Essa linha é responsável por informar ao compilador quais outras funções serão encontradas ao término da função main. Exemplo: 7

Passagem de parâmetros por valor Significa que a função trabalhará com cópia dos valores passados no momento de sua chamada. Exemplo: Representação gráfica: Explicação do programa Supor que os valores armazenados nas variáveis x e y, pela execução das linhas 7 e 9, sejam, respectivamente, 5 e 3. Quando a linha 10 é executada, esses valores são copiados para as variáveis a e b (pertencentes a função soma_dobro). Nas linhas 17 e 18 os valores de a e b são multiplicados por 2. Na linha 19 é feita a soma. O resultado dessa soma é devolvido à função main pela execução da linha 20, onde o valor calculado recai sobre a variável res (retorno à linha 10). Quando a função soma_dobro chega ao fim, as variáveis a, b e soma são destruídas e, portanto, as alterações realizadas pelas multiplicações por 2 são perdidas, ou seja, x continua valendo 5 e y continua valendo 3. 8

Passagem de parâmetros por referência Significa que os parâmetros passados para uma função correspondem a endereços de memória ocupados por variáveis. Toda vez que for necessário acessar determinado valor, isso será feito por meio de referência, ou seja, apontamento ao seu endereço. Representação gráfica: Explicação do programa Nas linhas 7 e 9 são lidos, respectivamente, os valores para as variáveis x e y (no exemplo, supor que x=5 e y=3). Quando a função soma_dobro é chamada, na linha 10, são passados como parâmetros para a função os endereços de memória ocupados pelas variáveis x e y 9

(isso é feito pelo operador & que obtém o endereço de memória de uma variável), ou seja, do exemplo, os valores 800 (endereço ocupado por x) e 300 (endereço ocupado por y). Os valores que recaem sobre as variáveis a e b (da função) são, respectivamente, 800 e 300 (isto é correto, já que a e b são ponteiro do tipo int). Nas linhas 16 e 17, os valores 5 e 3 são multiplicados por 2. Neste momento ocorre a referência aos endereços de memória 800 e 300, para que sejam obtidos os valores iniciais e, após a realização das multiplicações, os valores sejam alterados. Dessa forma, no endereço 800 passamos a ter o valor 10, e no endereço 300 passamos a ter o valor 6. Na linha 18, é realizada a soma dos valores que estão nos endereços especificados por a e b (que já foram multiplicados por 2). Na linha 19, o resultado da soma é devolvido à função main, recaindo sobre a variável res (linha10) e encerrando a função soma_dobro. Quando a função soma_dobro chega ao fim, as variáveis a,b e soma são destruídas. Entretanto, as alterações decorrentes das multiplicações feitas são mantidas, pois cada alteração fez referência a endereços de memória que estavam fora da área destinada à função. Assim, após a função soma_dobro, o valor de x será 10 e o de y, 6. Observações: A linguagem C/C++ não permite que vetores e matrizes sejam passados na íntegra como parâmetro para uma função. Deve-se passar apenas o endereço da posição inicial do vetor ou da matriz. Esse endereço é obtido utilizando-se o nome do vetor (ou da matriz) sem o índice entre colchetes. É possível passar um vetor para uma função somente se essa passagem for por referência. Exemplo: 10

Fazer: Exercício 8 Perguntas: 1- O que são sub-rotinas? 2- O que significa modularização? 3- Para que serve o comando return? 4- O que são parâmetros de funções? como são representados? 5- O que significa o tipo void usado em funções? 6- Quais são os quatro tipos de funções existentes? Explique dois tipos. 7- O que significa modularização? 8- Explique cada algoritmo apresentado. 9- Qual a diferença entre variáveis locais e globais? 11

10- Para que serve o comando return? 11- Para que serve o comando void? 12- O que é protótipo de função? Quando devemos usá-lo? 13- O que significa passagem de parâmetros por valor? Dê um exemplo. 14- O que significa passagem de parâmetros por referência? Dê um exemplo. 15- Como é feita a passagem de um vetor para uma função? Exercícios: 1) Faça um programa contento uma sub-rotina que retorne 1 se o número digitado for positivo ou 0 se for negativo. 2) Faça um programa que receba dois números positivos por parâmetro e retorne a soma dos N números existentes entre eles. 12

3) Crie uma função que receba três números inteiros a,b e c, sendo a maior que 1. A função deverá somar todos os inteiros entre b e c que sejam divisíveis por a (inclusive b e c) e retornar o resultado para a função principal. 4) Faça uma função que receba como parâmetro um inteiro no intervalo de 1 a 9 e mostre a seguinte tabela de multiplicação (neste exemplo, n=9). 13

5) Elabore um programa contendo uma sub-rotina que receba as três notas de um aluno como parâmetros e uma letra. Se a letra for A, a sub-rotina deverá calcular a média aritmética das notas do aluno; se for P, deverá calcular a média ponderada, com pesos 5, 3 e 2. A média calculada deverá ser devolvida ao programa principal para, então, ser mostrada. 6) Faça uma sub-rotina que leia cinco valores inteiros, determine e mostre o maior e o menor deles. 14

7) Crie uma sub-rotina que receba como parâmetro um valor inteiro e positivo N e retorne o valor de S, obtido pelo seguinte cálculo: 8) Elabore uma sub-rotina que retorne ao programa principal um vetor com os três primeiros números perfeitos. Um número é perfeito quando é igual à soma de seus divisores (exceto ele mesmo). Exemplo: os divisores de 6 são: 1, 2 e 3, e 1+2+3=6. Logo, ele é perfeito. 15

16

9) Faça uma sub-rotina que receba um vetor A de dez elementos inteiros como parâmetro. Ao final dessa função, deverá ter sido gerado um vetor B contendo o fatorial de cada elemento de A. O vetor B deverá ser mostrado no programa principal. 10) Faça uma sub-rotina que receba como parâmetro um vetor A com cinco números reais e retorne esses números ordenados de forma crescente. 17

11) 18

12) 19

Outros exercícios propostos: 20

Livros: 1- Fundamentos da Programação. Ascencio, Ana/Campos, Edilene. http://wps.prenhall.com/br_ascencio_2/77/19865/5085520.cw/index.html 2- C completo e total. Herbert Schildt 3- Programando em C. Schaum McGraw-Hill 21