quinta-feira, 2 de abril de 2009

Lista 04 - Matrizes

Lista de Exercícios 04 - Matriz

1 - Faça um algoritmo para:
a) Ler uma matriz de ordem MxN, onde M e N serão informados pelo usuário e em seguida imprima esta matriz.
b) Ler uma matriz e caso seja uma matriz quadrada imprimir os elementos da diagonal principal.
c) Ler uma matriz e inverter as suas linhas. Ex a última será a primeira, a primeira a última e assim por diante.
d) Ler duas matrizes e caso tenham a mesma ordem gerar uma terceira formada pela soma das matrizes lidas.
e) Ler uma matriz e dividir cada elemento de uma linha pelo elemento da diagonal principal dessa linha.
f) Ler uma matriz e imprimir os elementos abaixo da diagonal principal.
g) Ler uma matriz e imprimir os elementos acima da diagonal principal e a própria diagonal principal.
h) Ler uma matriz e imprimir para cada linha a soma de seus elementos.
i) Ler 3 notas de um conjunto de 60 alunos de uma turma armazenado-os numa matriz, onde os números das linha representam os números dos alunos e cada coluna uma unidade. E imprima o número de cada aluno com sua respectiva média, a média geral de cada período e a média geral da turma. Ex :
7- Faça um algoritmo para permitir que duas pessoas joguem o jogo da velha, onde cada jogada será informada através das coordenadas X e Y. O programa deverá obter o nome de cada jogador em solicitar a jogada de cada jogador, até o jogo acabe.
8 - Caça Palavras
Você arranjou um emprego numa editora especializada em revistas de desafios, tais como: caça-palavras, criptografia e palavras cruzadas. Sua primeira tarefa será implementar um programa para auxiliar na construção de caça-palavras. O programa deverá proceder da seguinte maneira:
· O desafio de caça-palavra consiste numa matriz de tamanho máximo 25x20, onde o editor irá informar o tamanho efetivo de cada um;
· Inicialmente o editor irá informar quantas palavras farão parte do desafio;
· Depois ele irá informar as palavras e para cada palavra serão fornecidas as seguintes informações: Linha e coluna inicial (lugar da primeira letra) e o sentido (veja a tabela abaixo) no qual a palavra deverá ser escrita;
· Observe que a inclusão de novas palavras deve respeitar o tamanho da matriz (toda a palavra deverá ficar dentro da matriz) e as palavras já incluídas, deixando sobre-escrever apenas se as letras coincidirem nas mesmas posições. Caso contrário à palavra deve ser lida novamente.
· Para finalizar, as posições que não tiverem sido escritas deverão receber, de forma aleatória, uma letra do nosso alfabeto.

Lista 03 - Vetor

Lista de Exercícios 03 - Vetor

1. Dar o número de elementos de cada um dos vetores dados abaixo:
a) VET : array[-5..5] of integer;
b) NOME: array[0..20] of string;
c) CONT: array['A'..'Z'] of integer;
d) NOTA: array[1..50] of real;

2. Dado o seguinte vetor:
qual será o seu conteúdo após a execução dos seguintes comandos:
for I:= 8 downto 5 do
begin
AUX := VET[I];
VET[I] := VET[8-I+1];
VET[8-I+1] := AUX;
end;

3. Dado dois vetores A e B contendo 20 elementos inteiros cada, gerar e exibir um vetor C do mesmo tamanho cujos elementos sejam a soma dos respectivos elementos de A e B.
Exemplo:

4. Dado um vetor A contendo 100 elementos inteiros, gerar e exibir um vetor B cujos elementos estão na ordem
inversa de A.
Exemplo:
5. Dado dois vetores A e B contendo 25 elementos inteiros cada, gerar e exibir um vetor C de 50 elementos, cujos elementos sejam a intercalação dos elementos de A e B.
Exemplo:

6. Um time de basquete possui 12 jogadores. Deseja-se um programa que, dado o nome e a altura dos jogadores,
determine:
a) o nome e a altura do jogador mais alto;
b) a média de altura do time;
c) a quantidade de jogadores com altura superior a média, listando o nome e a altura de cada um.

7. Fazer um programa em Pascal para corrigir provas de múltipla escolha. Cada prova tem 10 questões e cada questão vale 1 ponto. O primeiro conjunto de dados a ser lido será o gabarito para a correção da prova. Os outros dados serão os números dos alunos e suas respectivas respostas, e o último número, do aluno fictício, será 0 (zero). O programa deverá calcular e imprimir:
a) para cada aluno, o seu número e sua nota;
b) o percentual de aprovação, sabendo-se que a nota mínima de aprovação é 6.
c) a nota que teve maior freqüência absoluta, ou seja, a nota que apareceu maior número de vezes (supondo a
inexistência de empates).
A estrutura de dados para este programa de ser a seguinte:

8. Elabore um programa que leia dois vetores inteiros de 20 elementos cada, depois some seus elementos, gerando um terceiro vetor. Ao final, mostre o novo vetor gerado.

9. Considere um vetor VET com 30 elementos. Verificar se existe um elemento igual a K no vetor. Se existir mostrar a posição em que se encontra, senão imprimir "não encontrei K no vetor".

quinta-feira, 26 de março de 2009

Estruturas de Decisão

ESTRUTURAS DE DECISÃO
Imagine um programa que apresente a média escolar de um aluno. Até aqui, muito simples; mas além de calcular a média, o programa deve apresentar uma mensagem indicando se o aluno foi aprovado ou reprovado. Esta variável, que até então servia para cálculos, agora passa a ser uma variável de controle, onde partir dela poderemos tomar uma decisão sobre o status do aluno. Em Pascal existem duas instruções para efetuar tomadas de decisão e desvios de operações:
a instrução de decisão simples if...then; e
a instrução de decisão composta if...then...else.

Instrução if..then

A instrução if...then tem por finalidade tomar uma decisão e efetuar um desvio no processamento, dependendo, é claro, da condição atribuída ser verdadeira ou falsa.
Sendo a condição verdadeira, será executada a instrução que estiver escrita após a instrução if..then. Se a instrução for falsa, serão executadas as instruções que estejam após as instruções consideradas verdadeiras.
Sintaxe:

if then
;
;

Vejamos um exemplo de um trecho de programa com o uso da instrução

if...then:
...
if (x > 10) then
writeln(“O valor da variavel X e 10”);
...
Caso venha a existir mais de uma instrução verdadeira para uma determinada condição, estas deverão estar inseridas em um bloco. Um bloco é o conjunto de instruções estar entre begin e end.




Sintaxe:
if then
begin




end;

Observe que o end é finalizado com um ponto-e-vírgula ( ; ) e não apenas ponto. O uso de ponto ao final de um end ocorre somente na finalização de um programa.
Vejamos um exemplo de um trecho de programa com a utilização de um bloco de instruções:
...
if (x > 10) then
begin
writeln(“O valor da variavel X e 10”);
x : = x + 1;
writeln(“O valor da variavel X agora e11”);
end;
...
Vejamos um exemplo completo de um programa com o uso da instrução if...then.

“Ler dois valores inteiros e independentemente da ordem em que foram inseridos, estes deverão ser exibidos em ordem crescente, ou seja, se forem fornecidos 5 e 3 respectivamente, deverão ser apresentados 3 e 5. O programa em questão deverá efetuar a troca dos valores entre as duas variáveis”

Algoritmo
1. Ler dois valores inteiros (estabelecer variáveis A e B);
2. Verificar se o valor de A é maior que o valor de B:
a. se for verdadeiro, efetuar a troca de valores entre as variáveis;
b. se for falso, pedir para executar o que está estabelecido no passo 3;
3. Apresentar os valores das duas variáveis.

Programa em Pascal

program ORDENA;
var
X, A, B : integer;
begin
write (‘Informe uma valor para a variavel A: ‘);
readln(A);
write (‘Informe uma valor para a variavel B: ‘);
readln(B);
writeln;
if (A > B) then
begin
X := A;
A := B;
B := X;
end;
writeln(‘Os valores ordenados são: ‘);
write(A, ‘ ‘, B);
end.
Instrução if...then...else

Assim como a instrução if...then, a instrução if...then...else tem por finalidade tomar uma decisão e efetuar um desvio no processamento. Se a condição for verdadeira será executada a instrução logo abaixo do if. Sendo a condição falsa, será executada a instrução que estiver posicionada logo após a instrução else. O conceito de blocos de instruções vale também para esta instrução.

Sintaxe:

if then

else
;
Caso venha a existir mais de uma instrução verdadeira ou falsa para uma condição, estas deverão estar inseridas em um bloco.

Sintaxe:

if then
begin
;
;
end
else
begin
;
;
end;

Observe que nos dois casos abordados acima, qualquer instrução que antecede a instrução else está escrita sem o ponto-e-vírgula (;). Isto ocorre pelo fato de a instrução else ser uma extensão da instrução if...then, e sendo assim, o final da condição somente ocorre após o processamento da instrução else.
Vejamos um exemplo:
“Ler dois valores numéricos e efetuar a adição. Caso o valor somado seja maior ou igual a 10, este deverá ser apresentado somando-se a ele mais 5. Caso o valor somado não seja maior ou igual a 10, esta deverá ser apresentado subtraindo-se 7.”

Algoritmo
1. Ler dois valores (variáveis A e B);
2. Efetuar a soma dos valores A e B, atribuindo o resultado da soma a uma variável X;
3. Verificar se X é maior ou igual a 10:
a. se for verdadeiro, mostrar X+5;
b. se for falso, mostrar X-7.

Programa em Pascal

program ADICIONA_NUMEROS;
var
X, A, B : integer;
begin
write(‘Informe um valor para a variavel A: ‘);
readln(A);
write(‘Informe um valor para a variavel B: ‘);
readln(B);
writeln;
X := A + B;
write (‘O resultado equivale a: ‘);
If (X>=10) then
writeln(X+5)
else
writeln(X-5)
end.
Podemos trabalhar com o relacionamento de duas ou mais condições dentro da instrução if...then. Para estes casos, é necessário trabalhar com os operador lógicos, vistos anteriormente. Vejamos alguns exemplos:

Operador AND

program TESTA-LOGICA-AND;
var
NUMERO : integer;
begin
write(‘Informe um numero: ’);
readln(NUMERO);
writeln;
if (NUMERO >= 20) and (NUMERO <=90) then
writeln(‘O numero esta na faixa de 20 a 90’)
else writeln(‘O numero esta fora da faixa de 20 a 90’);
end.

Operador OR

program TESTA-LOGICA-OR;
var
A, B : integer;
begin
write(‘Informe um valor para a variavel A: ‘);
readln(A);
write(‘Informe um valor para a variavel B: ‘);
readln(B);
writeln;
if (A>0) or (B>0) then
writeln(‘Um dos numeros e positivo’);

Operador NOT

program TESTA-LOGICA-NOT;
var
A, B, C, X : integer;
begin
write(‘Informe um valor para a variavel A: ‘);
readln(A);
write(‘Informe um valor para a variavel B: ‘);
readln(B);
write(‘Informe um valor para a variavel X: ‘);
readln(X);
if not (X>5) then
C := (A + B) * X
else
C := (A - B) * X;
writeln(‘O resultado da variavel C corresponde a:’, C);
end.

Tipos de Dados em Pascal

Comentários
Comentários são textos escritos dentro do código-fonte para explicar ou descrever alguns aspectos relativos ao mesmo. Os comentários podem ser colocados em qualquer lugar do programa onde um espaço em branco possa existir.
Você pode colocar comentários de duas formas: ou envolvendo o texto entre chaves “{..}” ou entre “ (* .. *)”. Quando o compilador encontra o símbolo “{“ ele salta todos os caracteres até encontrar um “}”. Da mesma forma, todos os caracteres que seguem “(*” são pulados até ser detectado o símbolo ”*)”. Como resultado disso, qualquer uma das formas pode ficar dentro da outra; por exemplo {...(*...*)...} é um comentário.

Tipos de Dados
Os dados são representados pelas informações a serem processadas por um computado. Um tipo de dados especifica as características, ou seja os valores e operações possíveis de serem utilizados com um dado desse tipo. Toda variável e constante usada em um programa tem um tipo associado a ela. A linguagem Pascal fornece ao programador um conjunto de tipos de dados predefinidos.
Tipos de Dados Inteiros
São caracterizados tipos inteiros, os dados numéricos positivos ou negativos, excluindo-se qualquer número fracionário. Em Pascal, este tipo de dado pode ser referenciado por um dos seguintes identificadores:

Tipo de dado inteiro Faixa de abrangência Tamanho(bytes )
shortint de –128 até 127 1 byte
integer de –32.768 a 32.767 2 bytes
longint de –2.147.483.648 a 2.147.483.647 4 bytes
byte de 0 até 255 1 byte
Word de 0 até 65535 2 bytes

Vejamos um exemplo:

var
NumAlunos : integer;
Cont, cont1: integer;

Tipos de Dados Reais
O tipo de dado real permite trabalhar com números fracionários, tanto positivos como negativos, sendo sua capacidade de armazenamento maior que dos números inteiros. Vejamos os tipos:
Tipo de dado real Faixa de abrangência Tamanho(bytes )
real de 2.9 e -39 até 1.7 e 38 6 bytes
single de 1.5 e-45 até 3.4 e38 4 bytes
double de 5.0 e-324 até 1.7e308 8 bytes
extended de 3.4 e-4.932 até 1.1 e4.932 10 bytes
comp de –9.2 e18 até 9.2 e18 8 bytes

Vejamos um exemplo:

var
Nota : real;
Salario, media : real;

Tipos de Dados Caracteres
São considerados tipos caracteres, as seqüências contendo letras, números e símbolos especiais. Uma seqüência de caracteres, em Pascal, deve ser representada entre apóstrofos (‘’). Este tipo de dado é referenciado pelo identificador string, podendo armazenar de 1 até 255 caracteres. Podemos ainda especificar um tamanho menor do que os 255 caracteres permitidos. Vejamos a sintaxe para criarmos uma variável do tipo string com tamanho limitado.

Sintaxe:
variável : string[tamanho];

Vejamos um exemplo do uso de strings:

var
Frase : string;
Nome : string[45];

Existe ainda o tipo char, utilizado da mesma forma que o tipo string, porém com uma pequena diferença: é usado para strings de apenas um caracter. Vejamos um exemplo do tipo de dado char:

var
Sexo : char;
15

Tipos Lógicos
São caracterizados tipos lógicos, os dados com valores true (verdadeiro) e false (false). Este tipo de dado também e chamado de tipo boleano. Ele é representado pelo identificador boolean.
Vejamos um exemplo da utilização do tipo de dado boolean:

var
Aprovado : boolean;
Confirma : boolean;

Variáveis
Variável, no sentido de programação, é uma região previamente identificada, que tem por finalidade armazenar informações (dados) de um programa temporariamente. Uma variável armazena apenas um valor por vez. Sendo considerado como valor o conteúdo de uma variável, este valor está associado ao tipo de dado da variável.

Sintaxe:

var
identif [ , identif ]... : tipo-de-dado;
[identif [ , identif ]... : tipo-de-dado; ] ...

onde: tipo-de-dado é um dos tipos predefinidos ou um tipo definido pelo usuário:

Vejamos um exemplo:

var
Soma, Total, Salario : real;
Idade, Contador : integer;

Constantes
Uma constante é um valor que não pode ser alterado durante a execução do programa, sendo que seu tipo é definido por seu conteúdo.

Sintaxe:
const
identificador = expressão;
...
identificador = expressão;

Vejamos um exemplo:

program Area_Circulo;
{ Programa para calcular a área de um círculo. }
const
PI = 3.141519265;
var
Area, Comprimento, Raio : real;
begin
writeln( ´Digite o Raio : ´ );
readln( Raio );
Area := PI * Raio * Raio;
Comprimento := 2 * PI * Raio;
writeln( ´Área = ´, Area );
writeln( ´Comprimento da Circunferencia = ´, Comprimento );
end.

Lista de Exercícios 2

Lista de Exercícios 02 – Operadores e Desvios Condicionais

1) Dadas as variáveis A, B, C e D, numéricas, e os seguintes comandos de atribuição:
A <-- 10 B<--15 C <--8 D <-- 20
Avalie as expressões abaixo e descubra se são falsas ou verdadeiras.
A = (D / 2)
(B * 2) = (A + D)
B >= A
(A * ( C + 2 )) <> (D * 5)
(A + B + C + D) >= 43
2 ) Calcule o valor de K nas expressões lógicas abaixo de modo que sempre retornem Verdadeiro como resultado (leve em consideração o valor das outras variáveis, I e J, atribuídos da seguinte maneira):

I <--18 J<-- I / 2
(9 + K) = 17
K = (I + J)
(3 * K) = I
(K + J) = (I + 10)
(K / 2) = (I * 3) / ( J - 3 )

3) Faça um algoritmo para ler um número inteiro e informar se este é maior que 10.
4) Faça um algoritmo para ler dois números inteiros e informar se estes números são iguais ou diferentes.
5) Faça um algoritmo para ler um número inteiro e informar se o número é par ou ímpar.
6) Faça um algoritmo para ler dois números inteiros A e B e informar se A é divisível por B.
7) Faça um algoritmo para ler dois números inteiros e escrever o maior.
8) Faça um algoritmo para ler dois números inteiros e escrevê-los em ordem crescente.
9) Faça um algoritmo para ler duas variáveis inteiras A e B e garantir que A e B fiquem em ordem
crescente, ou seja, a variável deverá armazenar o menor valor fornecido e a variável B o maior.
10) Faça um algoritmo para ler os coeficiente de uma equação do segundo grau e escrever as suas raízes.
11) Faça um algoritmo para ler três valores reais e informar se estes podem ou não formar os lados de um triângulo. Para que três valores possam formar os lados de um triângulo cada lado deve ser menor que a soma dos outros dois.
12) Faça um algoritmo para ler três valores reais e informar se estes podem ou não formar os lados de um triângulo e qual tipo de triângulo seria: Equilátero, isósceles ou Escaleno.
13) Faça um algoritmo para ler três números positivos e escrevê-los em ordem crescente.
14) Faça um algoritmo para ler o nome, as três notas e o número de faltas de um aluno e escrever qual a sua situação final: Aprovado, Reprovado por Falta ou Reprovado por Média. A média para aprovação é 5,0 e o limite de faltas é 27. A reprovação por falta sobrepõe a reprovação por Média.
15) Faça um algoritmo para ler um salário e atualizá-lo de acordo com a tabela abaixo.

FAIXA
SALARIAL AUMENTO

Até 500,00 50%

1000,01 a 2.000,00 30%

2000,01 a 2.5000,00 20%

Acima de 2.500,00 10%



16) Faça um algoritmo para escrever os números entre 1 e 1000
17) Faça um algoritmo para escrever os números pares entre 1 e 1000
18) Faça um algoritmo para ler dois números inteiros representando um intervalo e escrever em ordem crescente todos os números ímpares do intervalo.
19) Faça um algoritmo para ler 100 números inteiros e escrever a soma e a média dos números lidos.
20) Faça um algoritmo para ler um valor N e em seguida ler N números inteiros e escrever o maior número lido.
21) Faça um algoritmo para ler números inteiros, onde o Flag será o valor 0 e em seguida escrever o menor valor lido e quantas vezes este ocorreu nos números lidos.
22) Faça um algoritmo para ler salários, onde o Flag será um Salário igual a 0 e escreva quais os três maiores valores dos salários lidos.
23) Faça um algoritmo para ler o nome, sexo ("M" =Masculino e "F"=Feminino), três notas e o número de faltas dos alunos de uma turma, onde o Flag será um nome igual a "fim" e escrever:
a. A média e a situação final de cada aluno;
b. A média das notas dos homens e a média das notas das mulheres;
c. O percentual de homem e o percentual de mulheres reprovados;
d. O percentual geral de reprovação da turma.
24) Faça algoritmo para escrever a série de Fibonacci = (0,1,1,2,3,5,8,13,21,34,…) enquanto o termo a ser impresso for menor que 5000.
25) Faça um algoritmo para ler um número inteiro positivo e escrever o seu fatorial.
26) Faça um algoritmo para ler um número inteiros positivo e informar se este número é primo ou não.
27) Faça um algoritmo para ler um valor inteiro N e escrever os N primeiros números primos.
28) Faça um algoritmo para ler um número inteiro e gerar outro número inteiro formado pelos dígitos invertidos do número lido. Ex: NúmeroLido = 12345; NúmeroGerado = 54321. Dica: Observe os resultados das funções Quociente e Resto de um número por 10.
29) Faça um algoritmo para ler o código, descrição, estoque mínimo e estoque das mercadorias de um supermercado, onde o Flag será um código igual a 0. Escreva o código e a descrição das mercadorias como estoque abaixo do mínimo.
30) Faça um algoritmo para apurar o resultado do segundo turno da eleição para prefeito de uma
cidade. O algoritmo deverá ler o nome dos dois candidatos, em seguida todas as zonas (flag zona = 0), onde o Flag será o valor 0 e para cada zona todas as suas secções (flag secção = 0) e para cada secção serão lidos os nomes de cada candidato e seu número de votos. O algoritmo deverá escrever o nome e o percentual de votos de cada candidato.
31) Faça um programa que receba o valor do salário de uma pessoa e o valor de um financiamento pretendido. Caso o financiamento seja menor ou igual a 5 vezes o salário da pessoa, o programa deverá escrevar "Financiamento Concedido"; senão, escreverá "Financiamento Negado". Independente de conceder ou não o financiamento, o programa escreverá depois a frase "Obrigado por nos consultar."
32) Em uma escola, o aluno faz duas provas por período, com as notas variando de 0 a 10. Caso a média aritmética das duas notas seja 5 ou mais, ele passa de ano; senão, ele é reprovado. Faça um programa que receba as duas notas de um aluno e escreva se ele passou ou não de ano.
33) Dois carros percorreram diferentes distâncias em diferentes tempos. Sabendo que a velocidade média é a razão entre a distância percorrida e o tempo levado para percorrê-la, faça um programa que leias as distâncias que cada carro percorreu e o tempo que cada um levou, e indique o carro que teve maior velocidade média.

Lista de Exercícios 1

Lista de Exercícios 01 - Algoritmos
1) Faça um programa que leia dois números, e calcule e exiba a sua soma.
2) Faça um programa que leia dois valores numéricos, e calcule e exiba a sua média aritmética.
3) Reescreva o programa-solução do Exercício 1 mas sem usar a variável Media. Lembre-se que o comando Escreva aceita imprimir o resultado de uma expressão...
4) Fazer um algoritmo que dadas as dimensões de um triângulo, calcule a sua área e escreva na tela.
5) Faça um programa que calcule o perímetro de um quadrado.
6) Faça um programa que leia três valores numéricos, e calcule e exiba a sua média aritmética.
7) Faça um programa que leia o nome de um piloto, uma distância percorrida em km e o tempo que o piloto levou para percorrê-la (em horas). O programa deve calcular a velocidade média em km/h, e exibir a seguinte frase:
A velocidade média de XX foi YY km/h.
Onde XX é o nome do piloto, e YY é sua velocidade média.
8) Em um rally foram percorridos dois trechos. Faça um programa que leia o nome de um piloto, a quilometragem de cada um dos trechos em km, e depois o tempo total para percorrê-los, em horas. Calcule e imprima a velocidade média geral do piloto.
9) Realizarei uma viagem de vários dias em meu automóvel, e gostaria de saber a quilometragem média por litro de gasolina. Para isto, anotarei a quilometragem no velocímetro ao sair de viagem, e depois ao chegar; também vou somar toda a gasolina que comprar para o carro. Você poderia fazer um programa que me desse, com estes dados, quantos km fiz, em média, por litro de gasolina?
10) Em uma pizzaria, cada tulipa de chopp custa R$0,80 e uma pizza mista grande custa R$10,00 mais R$1,50 por tipo de cobertura pedida (queijo, presunto, banana, etc.). Uma turma vai à pizzaria e pede uma determinada quantidade de "chopps" e uma pizza grande com uma determinada quantidade de coberturas. Faça um programa que calcule a conta e, sabendo quantas pessoas estão à mesa, quanto que cada um deve pagar (não esqueça os 10% do garçon)...
11) Faça um algoritmo para ler uma temperatura em graus Celsius e transformá-la em farenheit. Utilize
a seguinte fórmula: F=180 (C+32).
100
12) Faça um algoritmo para ler duas variáveis inteiras e trocar o seu conteúdo.

13) Faça um algoritmo para ler o horário de entrada e saída de um cliente na fila de um banco e seguida calcular o tempo de permanência do cliente na fila. Cada horário será lido em duas variáveis inteiras representando a hora e os minutos.

14) Construa um programa em Pascal para calcular as raízes reais de uma equação do 2º grau (Ax2 + Bx + C), sendo que os valores de A, B e C são fornecidos pelo usuário.
ESTRUTURA DE UM PROGRAMA EM PASCAL
Todo programa escrito em Pascal é subdividido em três áreas distintas: cabeçalho do programa, área de declarações e corpo do programa.

Cabeçalho do Programa
Esta área é utilizada para se fazer a identificação do programa com um nome. O cabeçalho de um programa é atribuído pela instrução program seguida de um nome. Ao final do nome deve-se colocar o símbolo ponto-e-vírgula ( ; ). Não pode existir nenhuma variável no programa que tenha o mesmo nome dado ao programa.
Vejamos um exemplo:
program CALCULA_AREA;

Caso você tenha atribuído ao programa o nome Soma e também tenha atribuído este nome a uma variável no programa, quando for executado apresentará uma mensagem de erro.

Área de Declarações
Esta área é utilizada para validar o uso de qualquer tipo de identificador que não seja predefinido, estando subdividida em sete sub-áreas: uses, label, const, type, var, procedure e function.
Inicialmente, vamos estudar apenas a sub-área var. As demais serão estudadas em capítulos posteriores. A sub-área var é utilizada na declaração das variáveis que serão utilizadas durante a execução de um programa, bem como, também o seu tipo.
Desta forma, a linguagem Pascal efetua a reserva de espaço na memória para que as variáveis sejam utilizadas.
A declaração das variáveis é atribuída pela instrução var seguida da relação de variáveis. Após os nomes de cada variável deverá ser utilizado o símbolo dois-pontos
( : ), e após estes é mencionado o tipo de dado que a variável irá receber, seguido de ponto-e-vírgula.
Vejamos um exemplo:
var
NOME : string;
IDADE : integer;
ALTURA : real;

Caso as variáveis sejam de mesmo tipo, estas poderão ser relacionadas separadas
por vírgula. Vejamos um exemplo:

A, B, C : integer;

Corpo do Programa
O programa propriamente dito em Pascal está escrito na área denominada corpo do programa. Esta área tem início com a instrução begin e é finalizada pela instrução end seguida do símbolo ponto ( . ). O uso destas instruções caracteriza o que é chamado de bloco, como indicado abaixo:

begin
instruções;
(...)

end.

Na área denominada corpo do programa, poderão existir, dependendo da necessidade, vários blocos.
Exemplo de um Programa em Pascal
Para se colocar em prática o que foi explicado até este momento, considere o seguinte exemplo de um problema:
“Desenvolver um programa que efetue a leitura de dois valores numéricos. Faça a operação de adição entre os dois valores e apresente o resultado obtido.”
Note que sempre estaremos diante de um problema, e que este deverá ser resolvido primeiro por nós, para que depois seja resolvido por um computador. Primeiramente, você deve entender bem o problema, para depois buscar a sua solução dentro de um computador, ou seja, você deverá “ensinar” a máquina a resolver seu problema, através de um programa. Desta forma, o segredo de uma boa lógica está na compreensão adequada do problema a ser solucionado. Vejamos nosso problema citado acima:
Algoritmo:
1. Ler um valor para a variável A;
2. Ler outro valor para a variável B;
3. Efetuar a soma das variáveis A e B, colocando o resultado na variável X;
4. Apresentar o valor da variável X após a operação de soma dos dois valores fornecidos.
Completada a fase de interpretação do problema e da definição das variáveis a serem utilizadas passa-se para a fase de codificação de nosso programa para a linguagem Pascal.


program ADICIONA_NUMEROS;
var
X : integer;
A : integer;
B : integer;
begin
readln(A);
readln(B);
X := A + B;
writeln(X);

end.

Estrutura de Dados

Estruturas de Dados

Um aspecto fundamental na construção de algoritmos computacionais são as estruturas de dados, que representam as informações do problema a ser resolvido.
Tais estruturas estão organizadas em tipos distintos de informações. Dentro do escopo das estruturas de dados, definimos os termos CONSTANTE, VARIÁVEL e IDENTIFICADOR.
􀂉 Tipos Primitivos de Dados
São os grupos de informações que o computador manipula. Podem ser:
1. Numéricos

a) inteiros Ex: 1 -4 100 0 -905 ...
b) reais Ex: 1,3 816,97 3,0 -0,0055 ...
1. Não-numéricos

a) alfanuméricos Ex: “CASA” “livro” “18” ‘R$ 55,36’ ....
b) lógicos ou booleanos Ex: Falso, Verdadeiro (ou False, True)
Obs: O delimitador usado para alfanuméricos pode ser : “ ” ou ‘ ’

􀂉 Constantes
Representam valores constantes, ou seja, que não variam no decorrer do algoritmo.
Ex: 148, “Opção:”, -8.69, “Tecle algo para continuar”, Falso ...
􀂉 Variáveis

Representam informações cujos valores são modificados ao longo do tempo (Ex. Genérico: a idade de um indivíduo). Podemos definir variáveis também como um local onde um determinado valor (de um dos tipos definidos) é armazenado. Assim, a variável é composta de dois elementos básicos:
􀀹 conteúdo - valor atual da variável
􀀹 identificador - nome dado à variável para possibilitar sua manipulação

O conceito de variável, na verdade, corresponde a “posições de memória RAM”, onde serão armazenados os dados manipulados pelo programa quando este for implementado.

􀂉 Identificador
Nome de um local onde se pode colocar qualquer valor do conjunto de valores possíveis de um tipo básico associado. Usado para manipular todos os dados variáveis do algoritmo. Pode também ser usado para rotular valores constantes (ex: uso do identificador PI para representar o valor constante 3,14).
Regras para Definição de Identificadores em Pseudolinguagem (Portugol):
􀀹 devem começar por um caracter alfabético (uma letra);
􀀹 pode ser seguido de letras e/ou dígitos;
􀀹 é permitido o uso do caracter especial “_” situado entre letras e/ou dígitos.

Ex. de identificadores válidos: Operador, Nome, X, y, ENDEREÇO, Aluno_01

􀂉 Declaração de Variáveis
É a criação (ou definição) de locais na memória rotulados com o identificador da variável (ou constante) que será utilizada no algoritmo para a manipulação de um determinado tipo de informação.
Sintaxe Geral em Portugol:
Lista de Variáveis : Tipo ;
O Tipo pode ser inteiro, real, caracter (alfanumérico) ou booleano.
Ex: NUM, X : inteiro;
parcela : real;
resposta : booleano;
PI : real; { definição de uma constante real }
NOME, ENDEREÇO : caracter;
􀀻 Neste momento, as variáveis ainda não contém nenhum valor associado a elas.
􀀻 A declaração de variáveis deve ser feita antes da definição das ações do algoritmo.
􀀻 Os comentários representam qualquer texto que explique uma ação ou um dado usado no algoritmo. Eles podem ser colocados em qualquer ponto do algoritmo, utilizando { } ou * * como delimitadores.
3.4 Operações Básicas
􀂉 Comando de Atribuição

Serve para atribuir (ou associar) um valor a uma variável ou constante.
Sintaxe Geral em Pseudolinguagem:
identificador 􀃅 expressão ;
onde expressão pode ser um(a): Constante, Variável, Expressão matemática, Função matemática, Expressão booleana, etc.
Ex: NOMEß’Fulano de Tal’
PIß 3.14
Erroß Verdadeiro
Mediaß(P1+P2)/2

􀂉 Funções Matemáticas
nome da função (argumento)
􀀻 O argumento é a informação que é dada à função para que ela possa ser efetuada adequadamente. Pode ser uma constante ou uma variável.
Exemplos de Funções Matemáticas que utilizaremos:
Sin (X) - Função que calcula o seno da variável X
SQRT (y) - Função que calcula a raiz quadrada de y
int (z) - Função que retorna a parte inteira da variável z
(que deve ser do tipo real)

O que são Operadores?
Os operadores são meios pelos quais são efetuados incrementos, decrementos,
comparações e avaliações de dados dentro do computador. Pode-se destacar três tipos
de operadores:
Operadores Aritméticos;
● Operadores Relacionais;
● Operadores Lógicos.
􀂉 Operadores Aritméticos
Os operadores aritméticos são os utilizados para obter resultados numéricos. Além da
adição, subtração, multiplicação e divisão, pode-se utilizar outros operadores
aritméticos (cujo suporte depende da linguagem de programação escolhida), como o
operador para exponenciação por exemplo. Os símbolos para os operadores
aritméticos são: Os operadores aritméticos são os utilizados para obter resultados numéricos. Além da
adição, subtração, multiplicação e divisão, pode-se utilizar outros operadores
aritméticos (cujo suporte depende da linguagem de programação escolhida), como o
operador para exponenciação por exemplo. Os símbolos para os operadores
aritméticos são:

+ - Unários
** exponenciação
* multiplicação
/ divisão
+ - soma e subtração (binários)
div divisão truncada (ou inteira) (ex: x div y)
mod resto da divisão inteira

Qual a hierarquia de precedência das Operações Aritméticas?
1º) ( ) Parênteses
2º) Exponenciação
3º) Multiplicação, divisão (o que aparecer primeiro)
4º) + ou – (o que aparecer primeiro)

􀂉 Operadores Relacionais
Os operadores relacionais são utilizados para comparar valores de tipos de dados
semelhantes, sejam constantes ou variáveis de um mesmo tipo. Estes operadores
sempre retornam valores lógicos (verdadeiro ou falso/ True ou False). Parênteses
podem ser usados para se definir prioridades na avaliação de expressões relacionais.
< <= > >= = < > (diferente)
Exemplo:
Tendo duas variáveis A = 5 e B = 3, os resultados das expressões seriam:
Expressão Resultado
A == B Falso
A <> B Verdadeiro
A > B Verdadeiro
A < B Falso
A >= B Verdadeiro
A <= B Falso
􀂉 Operadores Lógicos
Os operadores lógicos servem para combinar resultados de expressões relacionais,
retornando se o resultado final é verdadeiro ou falso. Os operadores lógicos são:
● AND (E) - Uma expressão AND (E) é verdadeira se todas as condições forem
verdadeiras;
● OR (OU) - Uma expressão OR (OU) é verdadeira se pelo menos uma
condição for verdadeira
● NOT (NÃO) - Um expressão NOT (NÃO) inverte o valor da expressão ou
condição, se verdadeira inverte para falsa e vice-versa.
** Podemos usar parênteses para alterar ordem de prioridade das operações.

􀂉 Comandos de Entrada e Saída de Dados
Representam as ações básicas de algoritmos para recebimento e apresentação de dados, respectivamente.
Entrada de Dados: informações que são fornecidas ao programa pelo “usuário” durante a resolução do problema.
Representação em Portugol:
leia (identificador, identificador, ...) ;
Ex: leia (altura, idade, sexo);
Saída de Dados: informações que são mostradas ao usuário como resposta ao problema.
Representação em Pseudolinguagem:
Escreva (expressão, expressão, ...) ;
Ex: escreva (‘ Seu peso ideal eh : ’ , peso_ideal) ;
escreva (‘ Media final = ’, (P1 + P2)/2) ;
􀂉 Esquema Genérico de Algoritmos em PseudoLinguagem

Declaração de Variáveis / Constantes
INICIO
inicialização de variáveis / constantes
{comentários}
bloco de comandos de entrada de dados
{comentários}
bloco de comandos de cálculo
{comentários}
bloco de comandos de saída de dados
FIM
Exemplo: Algoritmo em pseudolingugem para o problema do cálculo da média final dos alunos da 6ª Série.
* declaração de variáveis
Real: P1, P2, P3, P4, Media;
Inicio
* comandos de entrada de dados
Leia (p1);
Leia (p2);
Leia (p3);
Leia (p4);
* processamento- Calculo da media
Media 􀃅 (P1 + P2 + P3 + P4)/4;
* saída de dados
Escreva (‘ Media final = ’, Media);
Fim

quarta-feira, 18 de fevereiro de 2009

Algoritmos

INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO

ALGORITMOS
Definimos Algoritmo como a seqüência de passos que visam atingir um objetivo bem definido.
Os algoritmos são utilizados no dia-a-dia para a solução dos mais diversos problemas.
Alguns exemplos genéricos de algoritmos usados no nosso cotidiano são: uma coreografia, um manual de instruções, uma receita de bolo, a solução de uma equação do 2º grau, uma pesquisa na lista telefônica, etc.
Assim, outra definição para algoritmos poderia ser:

Algoritmo é a descrição de um conjunto de ações que, obedecidas, resultam numa sucessão finita de passos, atingindo um objetivo esperado.
vSão propriedades de algoritmos:
• ações simples e bem definidas (não ambíguas);
• seqüência ordenada de ações;
• seqüência finita de passos.
Construindo um Algoritmo

RESOLUÇÃO DE PROBLEMAS ATRAVÉS DE COMPUTADORES

Os computadores podem ser usados de forma eficiente na solução de certos tipos de problemas. Os problemas que suportam tratamento por computador, em geral, envolvem grandes quantidades de dados ou são problemas de natureza complexa, exigindo a execução de um grande número de passos para alcançar a solução. Basicamente são problemas na área de processamento de dados e na área científica.
O Computador é uma ferramenta que permite a realização do processamento automático (ou eletrônico) de dados.

Dados de Entrada--------Dados de Saída-------Processamento(transformação)

Define-se por Processamento de Dados qualquer atividade que, utilizando informações (ou dados), efetua transformações para obter novas informações (ou dados) como resultado.
Porém, a tarefa desempenhada pelos computadores é apenas parte do processo de solução de problemas.
As etapas na solução de problemas são:
i) Entendimento do problema;
ii) Criação de uma seqüência de operações (ou ações) que, quando executadas, produzem a solução para o problema;

iii) Execução desta seqüência de operações.

iv) Verificação da adequação da solução.

As etapas de entendimento do problema, criação de seqüência de ações e verificação da adequação da solução são tarefas desempenhadas por pessoas. Já a execução das operações pode ser desempenhada por computadores.
Os computadores têm a capacidade de executar processos complicados e com grande quantidade de informações com rapidez e confiabilidade.
Os dados existem nas mais variadas formas, tanto no mundo real quanto nos computadores, mas para este curso usaremos três tipos, que serão suficientes embora não representem toda a gama possível. Estes tipos são:


Dados Numéricos - são quantidades como o peso de uma pessoa, o número de alunos em uma sala de aula, o preço de uma mercadoria, uma temperatura, etc. Nos algoritmos são representados como na escrita corrente, com a exceção de que se usa o ponto e não a vírgula para se separar a parte decimal, e não se separam as casas de milhares, milhões, etc.
Exemplos: 1.23 -3 45657 0.66 -897.06 etc.
Nos nossos exemplos daremos a todas as variáveis que armazenam valores numéricos o tipo numérico (assim mesmo, sem acento).


Dados Literais - são letras, nomes, sinais de pontuação, etc. Outros nomes comuns para este tipo de dados são caracteres e strings (por causa do inglês). Nos algoritmos são representados por letras, números, espaços e sinais entre aspas.
Exemplos: "Rio de Janeiro" "Computador" "A" "?" "Fora!" "1234"
Nos nossos exemplos daremos a todas as variáveis que armazenam valores literais o tipo caracter.


Dados Lógicos - podem assumir apenas dois valores: Falso ou Verdadeiro. Também são chamados de dados booleanos. Vamos estudar com mais profundidade este tipo à frente no curso. Ele é importante porque dá a "inteligência" ao computador, mas neste momento podemos ficar só com esta pequena explicação.
Nos nossos exemplos daremos a todas as variáveis que armazenam valores lógicos o tipo logico (assim mesmo, sem acento).
E como os dados estão representados nos algoritmos? De duas maneiras: como constantes, ou seja, o dado escrito como ele é, como nos exemplos acima, e armazenados em variáveis.

Variáveis são locais de armazenamento temporário para os dados. É um conceito parecido com os famosos x, y e z que usamos na Álgebra. Elas têm três características:

Nome: é como nos referimos às variáveis. Os nomes geralmente descrevem a função das variáveis no programa; por exemplo, se você tem um programa para calcular a média aritmética de dois valores, teria as variáveis PrimeiroValor, SegundoValor, e Media; já em um outro, poderia ter a variável Salario, para armazenar o salário de um funcionário, etc.

Regras para a formação de nomes de variáveis
Toda linguagem de programação tem regras para a formação de nomes de variáveis, e nós também teremos: neste curso, os nomes de variáveis deverão começar com uma letra, e depois poderão ter qualquer combinação de letras, números e sublinhado ("_"). Não pode haver espaços no interior dos nomes, e não haverá diferenciação entre maiúsculas e minúsculas (ou seja, os nomes "Salario", "SALARIO", e "salario" se referem à mesma variável. Exemplos: Nomes Válidos: Valor1, Valor2, Nota_do_Aluno, Salario Nomes Inválidos: 1Valor, 2Valor, _Salario, Nota.do.Aluno, Media-Aritmetica

Tipo: indica o tipo de dado que aquela variável armazena. Assim, uma variável pode ser do tipo numérico, literal ou lógico. Quando se define uma variável para uso no programa (os programadores dizem "declarar uma variável"), temos que indicar ao computador não só o seu nome, mas também o tipo de dados que ela vai armazenar.


Conteúdo: É o valor armazenado na variável em determinado momento. Podemos fazer duas coisas com o conteúdo de uma variável: examiná-lo, ou seja "ver o que ela contém, para usar ou não", e modificá-lo. Quando criamos uma variável em um programa, ela está "vazia", ou seja, seu conteúdo é indeterminado. Para que ela tenha utilidade, devemos dar-lhe valores que tenham a ver com o problema em questão (os programadores usam a expressão "atribuir valores a ela").

http://www.4shared.com/file/39138333/b3c7fdff/Pzim50.html

Segue o link para o Pascal, a ferramenta de programação que utilizaremos em nossas aulas.
É só copiar o link e colar na barra de endereços.

segunda-feira, 16 de fevereiro de 2009

Diretrizes para elaboração de um algoritmo

Diretrizes para a Elaboração de Algoritmos

As diretrizes apresentadas abaixo são genéricas e podem ser usadas ou adaptadas na organização dos passos que comporão a solução de um determinado problema (ou seja, na criação de um algoritmo para atingir um objetivo determinado).

1. Identificação do problema: determinar o que se quer resolver ou qual objetivo a ser atingido.

2. Identificação das “entradas de dados”: informações fornecidas, a partir das quais se desenvolverão os cálculos.

3. Identificação das “saídas de dados”: as informações a serem geradas como resultado.

4. Identificação das regras e limitações do problema ou das limitações do agente executante (ex: se o agente fosse uma calculadora não-científica, iriam existir limitações no cálculo de funções, por exemplo).

5. Determinação do que deve ser feito para transformar as “entradas” em “saídas”. Neste ponto deve ser determinada a seqüência de ações que leve à solução do problema. Para isto é preciso:

5.1. observar as regras e limitações já identificadas;

5.2. determinar ações possíveis de serem realizadas pelo agente.

6. Construção do Algoritmo, utilizando uma das formas de representação de algoritmos.

7. Teste da solução - execução de todas as ações do algoritmo, seguindo o fluxo estabelecido para verificar se ele está realmente gerando os resultados esperados ou detectar possíveis erros em sua descrição.

Exemplo:
Imagine o seguinte problema: Calcular a média final dos alunos da 6ª Série. Os alunos realizarão quatro provas: P1, P2, P3 e P4. A Média Final é calculada por:
(P1 + P2 + P3 + P4) / 4.
Para montar o algoritmo proposto, faremos três perguntas:
a) Quais são os dados de entrada?
R: Os dados de entrada são P1, P2, P3 e P4
b) Qual será o processamento a ser utilizado?
R: O procedimento será somar todos os dados de entrada e dividi-los por 4 (quatro)
(P1 + P2 + P3 + P4)/4
c) Quais serão os dados de saída?
R: O dado de saída será a média final

Diagrama de Blocos Diagramas de Blocos

• Os diagramas de blocos devem ser feitos e quebrados em níveis.
• Para o desenvolvimento correto de um diagrama, ele deve ser iniciado de cima para baixo.
• É incorreto e “proibido” ocorrer o cruzamento de linhas de fluxo de dados entre os símbolos.

segunda-feira, 9 de fevereiro de 2009

Referências

  • LOPES, Anita; GARCIA, Guto. Introdução à Programação 500 Algoritmos Resolvido.
  • FORBELLONE, André L.V., EBERSPACHER, Henri. F. Lógica de Programação: A Construção de Algoritmos e Estrutura de Dados.