









Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Sub-rotina, preferêncial que aplique na linguagel Pascal ou Delph que é semelhante
Tipologia: Notas de estudo
1 / 15
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Um matemático uma vez disse que um grande problema se resolve dividindo-o em pequenas partes e resolvendo tais partes em separado. Estes dizeres servem também para a construção de programas. Portanto, para facilitar a construção de grandes programas, utiliza-se o método de modularização, que consiste na divisão do programa em pequenas etapas, que são os módulos ou subprogramas. O primeiro módulo ou subprograma, por onde começa a execução do programa recebe o nome de programa principal, e as outras são os subprogramas, que são executados sempre que ocorre uma chamada dos mesmos, através da especificação dos seus nomes. A divisão de um programa em subprogramas é particularmente vantajosa quando uma mesma seqüência de comandos deve ser repetida várias vezes no programa, o que permite a confecção de um único subprograma, que pode ser freqüentemente solicitado e executado para valores diferentes de seus parâmetros. Outra importância da modularização é que ela permite que diferentes programadores trabalhem simultaneamente na solução de um mesmo problema, através da codificação separada dos diferentes módulos. Podemos dar um conceito simples de Sub-rotina dizendo ser um pedaço de código computacional que executa uma Função bem definida, sendo que esta sub-rotina pode ser utilizada várias vezes no algoritmo. Na linguagem Pascal temos dois tipos de subprogramas: PROCEDURE e FUNCTION..
Um procedimento (PROCEDURE) é um tipo de subprograma que se assemelha em muito com um programa em Pascal. Possui um cabeçalho de identificação com o nome do procedimento, uma lista opcional de parâmetros de comunicação, um bloco de declarações e um bloco de comandos. Um procedimento é na realidade um programa com vida própria, com suas variáveis locais, mas que, para ser processado, tem que ser solicitado pelo programa principal ou por outro procedimento. Sintaxe :
Faça um algoritmo para ler as informações de N alunos, tais como: Nome, idade e sexo. Após construa sub-Rotina para: a - Emitir um relatório ordenado crescentemente pelo Nome; b - Emitir um relatório ordenado decrescentemente pela idade; c - Informar qual o percentual de alunos do sexo feminino. Faça uma PROCEDURE para desenhar uma moldura no vídeo (Tela Padrão);
Variáveis Globais e Locais
Damos o Nome de variáveis globais para aquelas variáveis que são definidas logo após o comando VAR do programa principal, sendo desta forma visíveis em qualquer parte do programa. Exemplo :
Pascal program teste; uses crt; var nome : string[80]; (variável global) { Sub-rotina que faz a leitura de um nome } procedure setanome; begin write(‘Digite o nome.: ‘); readln(nome); end; {Programa Principal} Begin clrscr; setanome; writeln(nome); readkey; end.
No Exemplo acima, a variável “Nome”, por ser definida como global, pode ser manipulada dentro de qualquer ponto do programa, sendo que qualquer mudança no seu conteúdo, será visível nas demais partes da Rotina. Damos o Nome de variáveis locais às variáveis que são declaradas dentro de uma sub- Rotina, sendo que as mesmas só podem ser manipuladas dentro da sub-Rotina que as declarou, não sendo visíveis em nenhuma outra parte do programa. Exemplo : program teste;
uses crt; { Sub-rotina que lê e escreve um valor na tela } procedure escrevenovídeo; var numero : integer; {Variável Local} n : integer; {Variável Local} begin clrscr; write(‘Digite um numero.: ‘); readln(n); for numero : = 1 to n do begin writeln(número); end; end; { Programa Principal } begin escrevenovídeo; writeln(numero); readkey; end.
Obs: É possível definir variáveis globais e locais com o mesmo Nome, sendo qualquer mudança no conteúdo da variável local não afetará o conteúdo da variável global.
Exemplo :
program teste; uses crt; var nome : string; procedure setanome; begin write read(nome); end; procedure mudança;
Até agora vimos que para ativar uma sub-Rotina bastaria colocar o seu Nome em alguma parte do programa. Mas isto nem sempre significa que o trabalho de escrever o programa irá diminuir. Com o que vimos até agora, dependendo da tarefa a ser realizada pela sub-Rotina, o trabalho de um programador pode até ser bem complicado. Por Exemplo, como faríamos para ler 5 vetores, todos com tamanhos diferentes? Poderíamos, por Exemplo, criar 5 sub-rotinas, uma para cada vetor a ser lido. Isto sem dúvida resolveria esta situação, mas, e se fossem 100 vetores?, ou 1000? Seria realmente uma tarefa muito trabalhosa ter de escrever 100, ou 1000 sub-rotinas, isto só para ler os vetores, imagine se tivéssemos também que ordená-los, ou realizar outro processo qualquer. Com toda esta dificuldade, o uso das sub-rotinas deveria ser considerado. Como já foi dito, as sub-rotinas foram criadas para serem genéricas o bastante para se adaptarem a qualquer situação, visando justamente a possibilidade de reutilização do código. Para realizar esta “mágica”, foi criado o conceito de passagem de parâmetros, ou seja, passar informações para serem tratadas dentro da Sub-Rotina. Sintaxe : Pascal PROCEDURE
Obs: Variável do mesmo tipo são separadas por vírgulas (,). Variáveis de tipos diferentes são separadas por ponto e vírgula (;).
Exemplo : program teste; uses crt; var número : integer;
funcionário : string; procedure escrevenome(n : integer; nome : string); var i : integer; begin for i : = 1 to n do begin write(nome); end; end; begin clrscr; write(‘Digite um numero.: ‘); readln(numero); write(‘Digite o nome do funcionário.: ‘); readln( funcionário); escrevenome(numero, funcionario); readkey; end.
Obs: Os números dados aos parâmetros não necessitam serem iguais as variáveis passadas para sub-rotina. No Exemplo acima, o valor contida em “Número” será passado para o parâmetro “N”, da mesma forma que o valor contido na variável “Funcionário” será passada para o parâmetro “Nome”. Note que os nomes são diferentes.
Exercícios 6 : 1 - Faça um algoritmo para calcular N! 2 - Faça um algoritmo para calcular Ab 3 - Faça um algoritmo para calcular a seguinte expressão até o n-ésimo:
c) O problema dos tipos na definição de parâmetros O Pascal, a princípio, aceita somente que sejam definidos parâmetros com os seguintes tipos : INTEGER, REAL, BYTE, WORD, BOOLEAN, CHAR, STRING e os outros tipos ditos simples. Desta forma, tipos como ARRAY, RECORD e STRING com tamanho definido pelo usuário, não são aceitos. Acontece que existe uma forma de fazer o Pascal aceitar qualquer tipo de dados na definição de parâmetros, através da definição de tipos pelo usuário, ou seja, criar tipos através do comando TYPE. Exemplo : program teste; const máximo = 50 type vetor = array[1..máximo] of integer; registro =record descrição : string; cor : string; quant : byte; end; var vet : vetor; reg : registro; procedure leinfo(var v: vetor; var r : registro); var i : integer; begin write(‘digite os elementos do vetor: ’); for i : = 1 to máximo do read(v[i]); write(‘digite os elementos do registro’); read(r.descrição, r.cor, r.quant); end; begin leinfo(vetor, reg); end.
Exemplo : C[1] : = A[1]; C[2] : = B[1]; C[3] : = A[2]; C[4] : = B[2];
Obs.: Nenhum tipo de ARRAY poderá ser utilizado além dos ARRAY’s A, B e C.
Obs: Nenhum outro tipo de ARRAY poderá ser utilizados além dos tipos A, B e C. Caso os elementos de um dos vetores (A ou B) termine um antes do outro, as posições restantes do vetor C, deverão ser preenchidas com os elementos restantes do Vetor ( A ou B ) que ainda possui elementos.
num1 : integer; num2 : integer; {Sub-rotina que faz a soma dos Valores } function soma (v1, v2 : integer) : integer; begin soma : = v1 + v2; end;
{ Programa Principal } begin clrscr; write(‘Digite primeiro numero.: ‘); readln(num1); write(‘Digite segundo numero.: ‘); readln(num2); k : = soma(num1,num2); write(k); readkey; end.
Exemplo 2: Utilização de array ou vetor program teste; uses crt; type vetor = array[1..5] of integer; var numero : vetor; x : integer; k : integer; {Sub-rotina que faz a soma dos Valores } function soma (tabela : vetor ) : integer; var result : integer; begin result : = 0; for x:=1 to 5 do begin result := result + tabela[x]; end; soma := result; end; { Programa Principal } begin clrscr; for x:= 1 to 5 do begin write(‘Digite primeiro numero.: ‘); readln(numero[x]); end; k : = soma(numero); write(k); readkey; end.
d) Calcular: