Академический Документы
Профессиональный Документы
Культура Документы
Lógica de Programação 2
Módulo 1
2011
Professor Diógenes Furlan Lógica de Programação 2 2
1) Ler um vetor W de 10 elementos, depois ler um valor V. Contar e escrever quantas vezes o valor V
ocorre no vetor W e escrever também em que posições (índices) do vetor W o valor V aparece. Caso o
valor V não ocorra nenhuma vez no vetor W, escrever uma mensagem informando isto.
2) Ler um vetor D de 10 elementos. Criar um vetor E, com todos os elementos de D na ordem inversa, ou
seja, o último elemento passará a ser o primeiro, o penúltimo será o segundo e assim por diante.
Escrever todo o vetor D e todo o vetor E.
4) Ler um vetor de 10 elementos inteiros. Após isto, imprimir na tela os 10 valores lidos e o usuário poderá
escolher um destes valores para ser excluído do vetor. Ler o valor escolhido e eliminá-lo do vetor. No
momento da exclusão todos os valores posteriores ao valor escolhido deverão ser reorganizados
(movidos uma posição para esquerda) a fim de que o vetor resultante não fique com um espaço em
branco. Imprimir o novo vetor.
5) Escrever um algoritmo que leia um vetor K (15) e o escreva. Criar, a seguir, um vetor P que contenha
todos os números primos de K. Escrever o vetor P.
6) Fazer um algoritmo que leia 100 números inteiros, distribua os números lidos em dois vetores, sendo um
para pares e outro para ímpares, e escreva os vetores.
7) Fazer um algoritmo que leia um conjunto de 30 valores numéricos inteiros e distribua-os entre dois
vetores, separando os números positivos dos negativos. Os vetores devem ter 30 posições cada. Mostrar
os vetores ao final do processamento.
8) Fazer um algoritmo que leia uma matriz 5 x 5 de números reais, encontre o maior valor da matriz e, a
seguir, multiplique cada elemento da diagonal principal pelo maior valor. Mostrar a matriz após as
multiplicações.
9) Fazer um algoritmo que leia uma matriz 5 x 5 de números reais e, a seguir, multiplique cada linha pelo
elemento da diagonal principal daquela linha. Mostrar a matriz após as multiplicações.
10) Fazer um algoritmo que leia uma matriz 5 x 5 de números inteiros, calcule a média dos elementos do
triângulo inferior e mostre o resultado.
11) Na teoria dos sistemas, define-se como elemento minimax de uma matriz o menor elemento da linha
onde se encontra o maior elemento da matriz. Escrever um algoritmo que leia uma matriz 10x10 de
inteiros e encontre seu elemento minimax, mostrando também sua posição.
Professor Diógenes Furlan Lógica de Programação 2 3
Módulos
Vantagens:
Desvantagens:
Resumo:
Blocos
Um bloco possui um conjunto de comandos, com a finalidade de criar um contexto para eles. Este
contexto é chamado de escopo. Podemos ter diversos blocos dentro de um algoritmo, inclusive uns
dentro de outros.
Sintaxe:
<declaração de variáveis>;
<lista de comandos>;
Exemplos:
Bloco simples
{
var a;
a = 10;
}
Blocos aninhados
{
{
...
}
...
{
...
{
...
}
...
}
}
Professor Diógenes Furlan Lógica de Programação 2 6
Escopo
Uma variável começa a existir quando o bloco onde ela está contida inicia, e deixa de existir quando
este bloco termina. Isto define uma variável local (ao bloco).
Entretanto, quando temos blocos aninhados, as variáveis declaradas nos blocos exteriores
podem ser acessadas pelos blocos interiores. Isto define uma variável global.
Quando existe um bloco dentro de outro, as variáveis do bloco externo são locais para ele e
globais para os blocos internos. Já as variáveis do bloco interno são locais a ele e são desconhecidas
pelo bloco externo.
Quando existe conflito de nomes (duas variáveis com mesmo nome, sendo uma local e
outra global), vale a definição local, e a global deixa de poder ser acessada (embora continue
existindo).
Exemplo:
{ //[1]
var a
{ //[2]
var b
a = 10; // var global ao bloco [2]
b = 20; // var local ao bloco [2]
}
a = 20;
// b é variável inexistente aqui
}
Professor Diógenes Furlan Lógica de Programação 2 7
Procedimentos
É um bloco com nome, com isto, poderemos chamá-lo em qualquer ponto do algoritmo.
Sintaxe:
Sintaxe:
<nome> ( <lista_de_parâmetros_reais> );
No cabeçalho do procedimento, temos uma série de variáveis, que podem ser de entrada e de
saída. Chamamos estas variáveis de parâmetros FORMAIS. Já as variáveis usadas quando o
procedimento é efetivamente chamado são denominados parâmetros REAIS.
Exemplo:
float a,b,r;
void Entrada ( )
{
printf( “\nDigite A e B:”);
scanf (“%f%f”, &A,&B);
}
void Saida ( )
{
printf(“\nO resultado de %f com %f eh = %f “, A,B,R);
}
void main()
{
Entrada();
r = a+b;
Saida();
}
Professor Diógenes Furlan Lógica de Programação 2 8
Exercícios .
int main()
{
int i, A[10], B[10], C[10];
getch();
}
Professor Diógenes Furlan Lógica de Programação 2 9
Passagem de Parâmetros
Os parâmetros são canais pelos quais se estabelece uma comunicação bidirecional entre um subalgoritmo e o
algoritmo chamador (o algoritmo principal ou outro subalgoritmo). Dados são passados pelo algoritmo chamador
ao módulo, ou retornados por este ao primeiro por meio de parâmetros.
Exemplo:
void main()
{
int x, y, w, t; // variáveis locais ao algoritmo principal
Escreva (“Digite dois valores”);
Leia (x, y);
calcsoma(x, y); // parâmetros reais
Escreva (“Digite dois valores novamente”);
Leia (w,t);
calcsoma(w, t); // parâmetros reais
calcsoma(8, 2); // parâmetros reais
}
A passagem de parâmetro ocorre quando é feita uma substituição dos parâmetros formais pelos reais no
momento da execução do módulo. Esses parâmetros são passados por variáveis de duas formas: por valor e por
referência.
Passagem de Parâmetros por Valor - na passagem de parâmetros por valor (ou por cópia) o parâmetro
real é calculado e uma cópia de seu valor é fornecida ao parâmetro formal, no ato da invocação do módulo. A
execução do módulo prossegue normalmente e todas as modificações feitas no parâmetro formal não afetam o
parâmetro real, pois trabalha-se com uma cópia do mesmo.
Por isso parâmetros reais, passados por cópia, podem ser qualquer tipo de expressão.
Exemplo:
int X;
Professor Diógenes Furlan Lógica de Programação 2 10
void main()
{
X = 1;
Escreva (“Antes X = “, X);
proc (X) // X é parâmetro real
Escreva (“Depois X = “, X);
}
Este tipo de ação é possível porque, neste mecanismo de passagem de parâmetros, é feita
uma reserva de espaço em memória para os parâmetros formais, para que neles seja armazenada
uma cópia dos parâmetros reais.
Por isso parâmetros reais, passados por referência, devem ser variáveis.
Exemplo:
void proc (int &Y) // Y é parâmetro formal passado por referencia
{
Y = Y + 1;
Escreva (“Durante Y = “, Y);
}
O mesmo algoritmo acima, com o uso de referência, fornece o seguinte resultado:
Antes X = 1
Durante Y = 2
Depois X = 2
Professor Diógenes Furlan Lógica de Programação 2 11
Exercícios .
1) Fazer uma função que troca o valor de duas variáveis inteiras. Então a use para ordenar um
vetor de inteiros.
2) Suponha que a tela seja dividida em regiões de N x P pixels, chamadas de células. Faça uma
função que receba a coordenada atual do mouse por parâmetro e retorne o numero da
célula (linha x coluna) em que o mouse se encontra.
3) Suponha que existe uma variável global que armazena um ponto da tela (coordenada de
linha e coluna). Faça uma função que receba a coordenada atual do mouse por parâmetro e
retorne a distância do mouse a esse ponto.
Retorno de Valores
Uma função é um bloco que tem um nome e que devolve um resultado. Em outras palavras,
quando não houver retorno de um resultado temos um procedimento, e quando houver, temos
uma função.
Sintaxe:
Toda função usada dentro de um programa deve ter sido definida antes de ser chamada.
Sintaxe:
void main()
{
W1,W2,RESP: real;
leia (W1,W2):
RESP ← PITAG (W1,W2);
imprima (RESP);
}
Exercícios .
1)
a. Fazer uma função que calcule o quadrado de um número real, recebido por parâmetro
(usando return para devolver o valor).
b. Fazer um programa que mostra o quadrado dos números entre 1 e 50, de 0.5 em 0.5, usando
a função anterior para fazer o calculo.
Professor Diógenes Furlan Lógica de Programação 2 13
2)
a. Fazer uma função que calcule a potência de xn, usando apenas multiplicação, para expoente
natural, inteiro e real (sem utilizar funções ou operadores de potência prontos).
b. Fazer uma função que calcule o fatorial de um número natural fornecido. Se o número não
for natural, devolva um valor padrão de erro.
c. Fazer uma função que calcule o valor de ex através da serie:
x x0 x1 x2 x3
e = + + + + ...
0! 1! 2! 3!
A sua função deve usar as funções potência e fatorial, feitas anteriormente. Como
argumento deve ser passado o número de termos que devem ser considerados.
d. Faça um programa que utilize a função da letra c.
4)
a. Implementar a função:
f(x,y) = x2 + 3x + y2 .
xy - 5y - 3x + 15
b. Fazer um programa para tabular a função anterior para x variando de 1 a 10 e y variando de 1 a 7.
5)
a. Faca uma função toupper que receba um caracter e se for letra, devolva o seu respectivo
caso maiúsculo.
b. Faca uma função tolower que receba um caracter e se for letra, devolva o seu respectivo
caso minúsculo.
c. Faça um programa que peça uma string para o usuário e mostra-a toda em maiúsculo e
minúsculo usando as funções toupper e tolower feitas anteriormente.
6)
a. Fazer uma função divisível ( a , d ), que retorna verdadeiro se a é divisível por d, ou seja, o
resto da sua divisão inteira é 0.
b. Fazer uma função que calcule o mdc (máximo divisor comum) de dois números fornecidos,
usando a função anterior.
c. Fazer uma função que calcule o mmc de dois números fornecidos, sendo:
mmc(a,b) = (a*b)/mdc(a,b)
8) As notas de uma turma de N alunos são lidas e armazenadas em um vetor. N também é lido.
Fazer um algoritmo contendo funções para:
a) receber o valor de N, ler as N notas, armazenando-as em um vetor (este deve ser
variável global).
b) receber o valor de N, calcular a média da turma, devolvendo seu valor à função
principal.
c) receber o valor de N, achar a maior nota, devolvendo seu valor à função principal.
9) Seja um vetor contendo N inteiros e de tamanho máximo TAM (n <= TAM). N deve ser lido do
teclado pela função principal. Considere o vetor como variável global. Fazer um algoritmo
contendo as seguintes funções:
a) leitura: recebe o valor de N e lê os N elementos do vetor.
b) menor: recebe o valor de N e devolve o menor elemento do vetor.
c) imaior: recebe o valor de N e devolve o índice do maior elemento do vetor.
d) par: recebe o valor de N e devolve o número de elementos pares do vetor
e) media: recebe o valor de N e devolve a média aritmética dos elementos do vetor.
f) acimamed: recebe o valor de N e o valor da média calculada pela função anterior e
devolve a porcentagem de elementos acima da média.
Todos os valores devolvidos devem ser impressos através da função principal.
10) Faça uma função que receba um caractere e retorne 0 se o mesmo for letra e 1 caso contrário.
11) Seja um vetor de tamanho TAM, declarado como variável global. Fazer um algoritmo contendo
as seguintes funções:
a) leitura: lê os elementos do vetor.
b) maiorsoma: devolve a maior soma entre dois elementos consecutivos do vetor.
Professor Diógenes Furlan Lógica de Programação 2 15
12) Seja uma string contendo um nome de pessoa e um caractere qualquer. Fazer um algoritmo
contendo as seguintes funções:
a) leitura: lê a string e o caractere devolvendo (retornando) o tamanho da string lida.
b) tamanho: retorna o tamanho (número de caracteres) string
c) n_ocor_car: recebe o caractere e o tamanho da string como argumento, devolvendo o
número de ocorrências do mesmo na string
d) p_ocor_car: recebe o caractere e o tamanho da string como argumento, devolvendo o
índice da primeira ocorrência do mesmo na string . Caso não haja ocorrência, devolve
valor -1.
e) npalavras: recebe o tamanho da string como argumento e devolve número de palavras
da string (considere que cada palavra está separada por um espaço).
f) imprime_inv: Imprime a string invertida. Todos os valores retornados devem ser
impressos. A função principal é responsável por isso.
13) Faça uma função que recebe a idade de uma pessoa em anos, meses e dias e retorna essa
idade expressa em dias.
14) Faça uma função que recebe um valor inteiro e positivo e retorna o número de divisores desse
valor.
15) Fazer uma função que recebe um caractere e devolve o número de ocorrências desse caractere
em uma frase. Considere que a frase e o caractere são lidos na função principal. Escrever o
algoritmo completo.
17) Seja um vetor de inteiros (global) de tamanho TAM. Faça um algoritmo com as seguintes
funções:
a) leitura: lê os elementos do vetor.
b) imaior: retorna o índice do maior elemento do vetor.
c) media: retorna a média aritmética dos elementos do vetor.
d) troca: recebe dois valores x e y e substitui x por y no vetor. Ex.: supor x = 3 e y = 9. Se o vetor
inicialmente lido fosse {2, 5, 3, 7, -5, 3, 2, 9}, depois da troca ele ficaria: {2, 5, 9, 7, -5, 9, 2, 9}
e) imprime: imprime o vetor.
Professor Diógenes Furlan Lógica de Programação 2 16
Recursividade
A existência de solução para o caso mais simples é necessária para que as equações de
definição recursiva possam ser resolvidas.
1) Fatorial (0) = 1
2) Fatorial (N) = N * Fatorial (N-1)
Exemplos:
• Fatorial
• Série de Fibonacci
• Sucessor
Na maioria dos casos não é preciso utilizar recursividade, pois de um modo geral todo
algoritmo recursivo pode ser escrito em forma não-recursivo; no entanto, em algumas situações
ela é realmente oportuna.
Os principais critérios a serem utilizados para decidir se a recursividade deve ou não ser
utilizada é a clareza do algoritmo e o desempenho esperado pelo algoritmo.
Exercícios .
1) Defina funções recursivas para gerar as seguintes séries:
1 2 3 4 5 6 7 ...
2 4 6 8 10 ...
1 2 4 8 16 32 ...
2 1 ½ ¼ 1/8 1/16 ...
1 2 4 7 11 16 22 ...
0 1 3 7 15 31 ...
2) Escreva uma definição recursiva de a+b, onde a e b são inteiros não negativos,
em termos da função sucessora succ definida como:
succ(int x)
{
return x+1;
}
b) f(n) = 2, se n == 1
2*f(n-1), caso contrário
c) f(n) = 0, se n == 0
1, se n == 1
f(n-1)+f(n-2), caso contrário
No main, imprimir os 10 primeiros valores de cada uma.