Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Técnicas de Programação - Apostilas - Informática Part1, Notas de estudo de Informática

Apostilas de Informática sobre Técnicas de Programação, Variáveis Compostas Homogêneas, Tipos Definidos Pelo Usuário e Constantes, Passagem de Parâmetros, Alocação Dinâmica.

Tipologia: Notas de estudo

2013

Compartilhado em 27/08/2013

Garoto
Garoto 🇪🇸

4.6

(121)

1 / 19

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Silvoney Fernandes da Silva
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13

Pré-visualização parcial do texto

Baixe Técnicas de Programação - Apostilas - Informática Part1 e outras Notas de estudo em PDF para Informática, somente na Docsity!

Silvoney Fernandes da Silva

Índice

1. Variáveis Compostas Homogêneas

Vimos, no início deste curso, ser possível dar um Nome para uma posição de memória, sendo que a esta

será associado um valor qualquer. Pois bem, acontece que, muitas vezes, esta forma de definição, ou melhor

dizendo, de alocação de memória, não é suficiente para resolver certos problemas computacionais. Imagine por

Exemplo, como faríamos para construir um algoritmo, para ler o Nome de N Pessoas e que imprimisse um

relatório destes mesmos nomes, mas ordenados alfabeticamente? Não seria uma tarefa simples, haja visto não ser

possível determinar quantos nomes seriam lidos, mesmo que soubéssemos o número de pessoas, digamos 1. 000

pessoas, teríamos que definir 1. 000 variáveis do tipo STRING, como é mostrado abaixo:

ALGORITMO Loucura;

VARIÁVEIS

Nome1,

Nome2,

Nome3,

Nome999,

Nome1000: CADEIA

INICIO

FIM

Considere o tamanho do algoritmo, e o trabalho braçal necessário para construi-lo. Isto só com 1. 000

Nome, imagine agora 1. 000. 000 de pessoas. A construção deste algoritmo começaria a ficar inviável na pratica.

Para resolver problemas como este, e outros, foi criado um novo conceito para alocação de memória sendo, desta

forma, também criado uma nova maneira de definir variáveis, a qual foi denominada de variável indexada.

Uma variável indexada corresponde a uma seqüência de posições de memória, a qual daremos único

Nome, sendo que cada uma destas pode ser acessada através do que conhecemos por índice. O índice corresponde

a um valor numérico ( exceto REAL ), ou a um valor caracter ( exceto STRING ). Cada uma das posições de

memória de uma variável indexada pode receber valores no decorrer do algoritmo como se fosse uma variável

comum, a única diferença reside na Sintaxe de utilização desta variável.

1.1 Variáveis Indexadas Uni Dimensionais(Vetores)

Também conhecida por “Vetor”. Uma variável uni-dimencional, como o próprio Nome já indica, possui

apenas uma dimensão, sendo ser possível definir variáveis com quaisquer tipo de dados validos do Pascal.

a) Definição:

ALGORITMO Define

VARIÁVEIS

: VETOR [INICIOV : FIMV] DE

INICIO

FIM

Em pascal:

PROGRAM Define;

VAR

: ARRAY [INICIO..FIM] OF ;

BEGIN

;

END.

Obs.:

a) “ARRAY” é uma palavra reservada do Pascal

b) Os valores “INICIOV” e “FIMV” correspondem aos índices inicial e final

c) Uma variável indexada pode ser apenas de um tipo de dado

Exemplo Definir uma variável indexada como sendo do tipo REAL, sendo que a mesma deverá corresponder a 10

posições de memória.

ALGORITMO Exemplo

VARIÁVEIS

Vet : VETOR [1 : 10] OF REAL

INICIO

FIM

Em pascal:

PROGRAM Exemplo;

VAR

Vet: ARRAY [ 1 .. 10 ] OF REAL;

BEGIN

;

END.

No Exemplo acima, após a definição da variável, a memória estará como mostrado no esquema abaixo:

Vet

Os Valores numéricos apresentados acima correspondem aos índices da variável.

B) Atribuição

[<Índice>]  Valor;

LEIA ([<Índice>]);

Em pascal:

[<Índice>]: =Valor;

READ ([<Índice>]);

Exemplo: ALGORITMO Atribui VARIÁVEIS

Nomes : VETOR [1 : 20] DE CADEIA

i : INTEIRO

BEGIN

Nomes[ 1 ]  ‘João da Silva’

PARA i  2 ATE 20, PASSO 1, FACA

LEIA(Nomes[i])

FIM PARA

FIM

Em pascal:

PROGRAM Atribui;

VAR

Nomes : ARRAY[ 1 .. 20 ]OF STRING;

i : INTEGER;

BEGIN

Nomes[ 1 ]: =‘João da Silva’;

FOR i: = 2 TO 20 DO

  1. Dado uma ralação de N nomes, faça um algoritmo que verifique se uma determinada pessoa está neste vetor. O Nome da pessoa a ser pesquisada deverá ser lido, bem como os nomes a serem colocados no vetor.

20 Dado uma frase, faça um algoritmo que determine qual a consoante mais utilizada.

  1. Faça um algoritmo que leia N letras e armazene cada uma em uma posição de memória. Coloque no vetor, após a última letra lida, o caracter “$”, indicando final dos caracteres

  2. Faça um algoritmo que: a) Leia um vetor com N elementos formado por valores do tipo inteiro. b) Após a leitura, modifique o vetor de forma que o mesmo contenha na parte superior somente valores pares, e na parte inferior os valores impares. c) Ordene crescentemente os números pares, e decrescentemente os números impares.

  3. Dado um conjunto de n registros, cada registro contendo o nome e a idade dessa pessoa faça um algoritmo que: a) Guarde todos os dados na memória; b) Escreva o nome das pessoas que tem idade maior que a idade da primeira; c) Listar os nomes das pessoas que tem a idade maior que a média; d) Listar o nome da pessoa de maior e menor idade

  4. Dado que para cada aluno de uma turma de “N” alunos se tenha, o seu nome, e as notas das 8 avaliações. Faça um algoritmo que: Imprima o nome a média de cada aluno; a) Calcule a Percentagem de alunos cujo o nome comece com a letra “A”; b) Para cada aluno imprima uma mensagem dizendo se o aluno tem ou não notas repetidas; c) Determine quantos alunos tem pelo menos duas notas acima de 7;

  5. Dado um verto X de n elementos faça um algoritmo que: a) Crie outro vetor Y contendo os elementos de x que estão na faixa entre 10 e 40; b) Crie outro vetor W contendo os números que estão nas posições pares; c) Pesquise a existência de um determinado elemento Z no vetor X; d) Escreva o menor e maior elemento do vetor X;

  6. Em uma cidade do interior, sabe-se que, de janeiro a abril de 1976 (121 dias), não ocorreu temperatura inferior a 15o^ C nem superior a 40o^ C. As temperatura verificadas em cada dia estão disponíveis em uma unidade de entrada de dados. Fazer um algoritmo que calcule e escreva: a) a menor temperatura ocorrida; b) a maior temperatura ocorrida; c) a temperatura média d) o número de dias nos quais a temperatura foi inferior a média à temperatura média.

  7. Fazer um algoritmo que: a) leia o valor de n (n <= 1000) e os n valores de um variável indexada A de valores inteiros ordenados de forma crescente; b) determine e escreva, para cada número que se repete no conjunto, a quantidade de vezes em que ele aparece repetido; c) elimine os elementos repetidos, formando um novo conjunto; d) escreva o conjunto obtido no item c;

  8. Um armazém trabalha com 100 mercadorias diferentes identificadas pelos números inteiros de 1 a 100. O dono do armazém anota a quantidade de cada mercadoria vendida durante o mês. Ele tem uma tabela que indica, para cada mercadoria, o preço de venda. Escreva um algoritmo para calcular o faturamento mensal do armazém. A tabela de preços é fornecida seguida pelos números das mercadorias e as quantidades vendidas. Quando uma mercadoria não tiver nenhuma venda, é informado o valor zero no lugar da quantidade.

  9. Uma grande firma deseja saber quais os três empregados mais recentes. Fazer um algoritmo para ler um número indeterminado de informações (máximo de 300) contendo o número do empregado e o número de meses de trabalho deste empregado e escrever os três mais recentes. Observações: A última informação contém os dois números iguais a zero. Não existem dois empregados admitidos no mesmo mês. Exemplo:

EMPREGADOS

MESES

Empregado mais recente: 4631.

  1. Fazer um algoritmo que: a) leia uma variável indexada A com 30 valores reais; b) leia uma outra variável indexada B com 30 valores reais; c) leia o valor de uma variável X; d) verifique qual o elemento de A é igual a X; e) escreva o elemento de B de posição correspondente à do elemento A igual a X;

  2. Fazer um programa que: a) leia o valor de M (M<=30) e os valores de uma variável indexada A; b) leia o valor de N (N<=20) e os valores de uma variável indexada B; c) determine o conjunto C = A  B (união de A com B), onde C não deverá conter elementos repetidos (A e B não contém elementos repetidos); d) escreva os elementos contidos em A, B e C;

  3. Intercalação é o processo utilizado para construir uma tabela ordenada, de tamanho n +m, a partir de duas tabelas já ordenadas de tamanhos n e m. Por exemplo, a partir das tabelas:

A= 1 3 6 7

e B= 2 4 5

construímos a tabela

C= 1 2 3 4 5 6 7

Fazer um algoritmo que: a) leia NA, número de elementos do conjunto A (NA<=100); b) leia, em seguida, os elementos do conjunto A; c) leia, logo após o valor de NB, número de elementos do conjunto B (NB<=100); d) leia, finalmente, os elementos do conjunto B; e) crie e imprima um conjunto C, ordenado, de tamanho NA+NB, a partir dos conjuntos originais A e B.

Observação:

  1. Considerar os elementos de A e B como inteiros.
  1. Para cada nota de compra , tem-se o Nome do produto comprado, o valor e o imposto. Faça um algoritmo que escreva Nome, valor e imposto de cada produto. Bem como o valor total bruto, o imposto total cobrado e o valor total líquido de todas as notas. Considere 500 notas

  2. Uma empresa deseja fazer um levantamento do seu estoque. Para isto possui para cada tipo de produto, o seu Nome, o valor unitário e a sua quantidade em estoque. A empresa deseja emitir um relatório contendo, o Nome, quantidade, valor, unitário e o saldo ( valor total ) em estoque de cada tipo de produto. Ao final deseja-se saber quantos tipos de produtos existem em estoque e o saldo de todos os produtos.

  3. Faça um algoritmo para ler um vetor X de tamanho N de números inteiro. Após a leitura classifique os números, colocando em um vetor P somente os números pares e em um vetor I os impares. Após isso liste os três vetores.

LEIA ([<Índice>,<Índice>]);

Em pascal:

[<Índice>,<Índice>]: =Valor;

READ ([<Índice>,<Índice>]);

Exemplo: ALGORITMO Atribui VARIÁVEIS Nomes : VETOR [1:4,1:4] DE CADEIA I,J : INTEIRO BEGIN PARA I  1 ATE 4, PASSO 1, FACA PARA J  1 ATE 4, PASSO 1, FACA LEIA (Nomes [ I , J] ) FIM PARA FIM PARA FIM Em pascal: PROGRAM Atribui; VAR Nomes : ARRAY[1..4,1..4] OF STRING; I,J : INTEGER; BEGIN FOR I: = 1 TO 4 DO FOR := J := 1 TO 4 DO READ (Nomes[ I,J] ); END.

1.2.1 Exercícios 11:

  1. Faça um algoritmo para ler e imprimir uma matriz 2x4 de números inteiros.

  2. Dado uma matriz de ordem 3x3 faça um algoritmo que: a) Calcule a soma dos elementos da primeira coluna; b) Calcule o produto dos elementos da primeira linha; c) Calcule a soma de todos os elementos da matriz; d) Calcule a soma do diagonal principal; e) Soma da diagonal secundária;

  3. Dado uma matriz de ordem NxN faça um algoritmo que verifique se a matriz é simétrica (aij=aji).

  4. Dado uma matriz NxM de valores reais faça um algoritmo que faça a leitura destes valores e ao final da leitura de todos, imprimir o seguintes relatório: a) Qual a Soma dos valores de cada coluna da matriz; b) Listar os valores que são menores que a média dos valores; c) Qual a soma dos elementos da diagonal secundária;

  5. Dado uma matriz NxM de valores inteiros faca um algoritmo que faça a leitura destes valores e ao final coloque os elementos ordenados primeiro pela linha e depois pela coluna.

  6. Dado duas matrizes A e B de ordem NxN faca um algoritmo que some as duas e gere a matriz C. Os elementos da matriz C são a soma dos respectivos elementos de A e B.

  7. Dado uma matriz NxM de valores inteiros determine a sua matriz transposta e imprima.

  8. Fazer um algoritmo que efetue um produto matricial. Seja A(m x n) e B (n x m) as matrizes fatores, sendo m<= e n<=70. Deverão ser impressas as matrizes A, B e a matriz-produto obtida.

  9. Escrever um algoritmo que leia uma matrix N x N multiplique os elementos da diagonal principal por uma variável K, também linda, e escreva a matriz resultante.

  10. Dado uma matriz N x M elementos, calcular a soma de cada linha e a soma de todos os elementos.

A fim de ilustrar este problema, pode-se considerar o seguinte esquema:

Mat Somalinha 1 2 3 6 4 5 6 15

Total 21

É possível atribuir o conteúdo de uma variável RECORD para outra variável, de mesmo tipo, da mesma forma que é feito como as outras variáveis do Pascal.

Exemplo: Caso duas variáveis, digamos A e B sejam definidas como sendo RECORDs, e caso seja desejado passar o conteúdo, isto é os valores existentes nos campos, a variável A para a variável B, bastará realizar a seguinte atribuição:

Algoritmo

AB

Pascal A: =B

2.1.1 Exercícios 1 :

  1. Definir um RECORD tendo os seguintes campos: Nome, Semestre, Sala, Curso, Notas(total de seis)
  2. Faça um algoritmo para ler as informações, descritas acima
  3. Ampliar a definição anterior, acrescentando a definição de um outro campo(Endereço) que será também um RECORD, o qual terá os seguintes campos: Rua, Bairro, Cidade, Estado, CEP
  4. Faça um algoritmo para ler as informações de um aluno, junto com o endereço descrito acima
  5. Defina um ARRAY de alunos, os campos serão os mesmos descritos nos itens anteriores
  6. Faça um algoritmo para ler as informações de n alunos
  7. Ordene crescentemente pelo Nome, os alunos

3. Tipos Definidos Pelo Usuário e Constantes

3.1 Tipos Definidos Pelo Usuário

O Pascal possui vários tipos pré-definidos, como INTEGER, WORD, REAL etc, mas além destes tipos básicos, existe a possibilidade de o usuário definir seus próprios tipos de dados. Para isto, é necessário o uso da palavra reservada TYPE, a qual indica que um novo tipo será criado.

Exemplo : Imagine que seja desejado criar um tipo matriz 4X4, sendo que logo em seguida este novo tipo será usado para definir uma variável como sendo deste tipo. P ara isto deverá ser usada a seguinte definição:

TYPE

Matriz = ARRAY[1..4,1..4] OF INTEGER VAR Mat : Matriz

O Pascal permite a definição de tipos usando qualquer um dos tipos pré-definidos, ou até mesmo utilizando tipos definidos pelo usuário

3.1.1 Exercícios 2 :

  1. Usando a definição para aluno apresentada no exercício da secção anterior, crie um tipo de dado para alunos e em seguida defina uma variável como sendo um ARRAY deste tipo. A título de ilustração, defina o RECORD do campo endereço, como sendo também um tipo
  2. Defina um tipo de dado chamado funcionário, o qual deverá ter o seguinte layout:

Nome Endereço: Rua Número Bairro Cidade Estado CEP Profissão: Cargo: Departamento Função Salário: Bruto Desconto(percentual) Salário Família(Somente para filhos de 18 anos) Dependentes: Número Descrição(Uma para cada dependente): Nome Idade Se é filho ou não

  1. Dado a definição acima, faça um algoritmo para:  Ler as informações de n funcionários  Ordenar crescentemente os nomes dos Funcionários  Emitir um relatório com o salário líquido de cada funcionário, onde deverá ser impresso somente o Nome do funcionário e seu salário.  Emitir um relatório dos funcionários que trabalhem na contabilidade e que tenham mais de dois filhos menores de 18 anos

Um outro uso muito útil de constantes é o de definir o tamanho de um ARRAY (VETOR) e o escopo dos laços de repetição, como FOR DO (PARA FAÇA0 , WHILE DO (ENQUANTO FAÇA) e REPEAT UNTIL (REPITA ATÉ).

Algoritmo ALGORITMO Teste CONSTATE TotalLinhas = 10 TotalColunas = 20 TIPO matriz = VETOR[ 1..totallinhas, 1..totalcolunas] DE INTEIRO VARIAVEIS Mat : matriz; lin,col : BYTE; INICIO PARA lin DE 1 ATE totallinhas FAÇA PARA col DE 1 ATE totalcolunas FAÇA LEIA(Mat[lin,col]) FIM PARA FIM PARA FIM

Pascal PROGRAM Teste; CONST TotalLinhas = 10; TotalColunas = 20; TYPE matriz = ARRAY[ 1..totallinhas, 1 ..totalcolunas] OF INTEGER;

VAR

Mat : matriz; lin,col : BYTE; BEGIN FOR lin : = 1 TO totallinhas DO BEGIN FOR col: = 1 TO totalcolunas DO BEGIN READ(mat[lin,col]); END; END; END.

3.2.1 Exercícios 3 :

  1. Faça um algoritmo para definir constantes representando os códigos das teclas como HOME, END, ESC etc do teclado do PC.
  2. Faça um algoritmo para declarar constantes que representem as seqüências de caracteres necessários para programar uma impressora de modo a imprimir diversas qualidades como expandido, qualidade carta , condensado, etc. Para isto será necessário o uso do manual de sua impressora , na parte relacionada a programação de impressora.
  3. Faça um programa para definir constantes que representem as diversas cores/tonalidades que o vídeo do PC possa operar em modo texto, tanto para cor de fundo(bakcground) , como para cor das letras(foreground).
  4. Faça um algoritmo que defina constantes para construção de molduras. Uma moldura é uma área retangular cercada por caracteres específicos da tabela ASCII. As molduras podem ser por Exemplo, simples , duplas, sombreadas, etc. A tabela ASCII tem uma boa variedade de caracteres específicos para este fim, só depende da imaginação de cada um.

4. Sub-Rotinas

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. Os profissionais de informática quando necessitam construir um grande sistema, o fazem, dividindo tal programa em partes, sendo então desenvolvido cada parte em separado, mais tarde, tais partes serão acopladas para formar o sistema. Estas partes são conhecidas por vários nomes. Nós adotaremos uma destas nomenclaturas: sub-Rotinas. 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 utilizadas várias vezes no algoritmo. Neste curso iremos tratar de dois tipos de sub-Rotinas: PROCEDURE e FUNCTION.

4.1 Procedure

Sintaxe :

Algoritmo PROCEDURE [(parâmetros)] <definições> INICIO FIM

Pascal PROCEDURE [(parâmetros)] <definições> BEGIN ; END;

Uma “PROCEDURE”, é um tipo de sub-Rotina que é ativada através da colocação de seu Nome em alguma parte do programa. Desta forma, assim que o Nome de uma “PROCEDURE”é encontrado, ocorre um desvio no programa, para que os comandos da sub-Rotina sejam executados. Ao término da sub-Rotina, a execução retornará ao ponto subsequente a chamada da “Pocedure”. Exemplo :

Algoritmo ALGORITMO Teste VARIAVEIS Número, N : BYTE

PROCEDURE EscreveNoVideo INICIO PARA Número DE 1 ATE N FACA ESCREVA (Número) FIM PARA FIM

INICIO

LEIA(N)

EscreveNoVideo ESCREVA (‘fim’) FIM

Pascal

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 :

Algoritmo ALGORITMO Teste PROCEDURE EscreveNoVídeo VARIAVEIS Número, N : INTEIRO INICIO LEIA (N) PARA número DE 1 ATE N FACA ESCREVA (Número) FIM PARA FIM

INICIO

EscreveNoVídeo FIM

Pascal PROGRAM Teste; PROCEDURE EscreveNoVídeo; VAR Número, N : INTEGER; BEGIN READ(N); FOR número : = 1 TO N DO BEGIN WRITE(Número); END; END;

BEGIN

EscreveNoVídeo; 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 :

Algoritmo ALGORITMO Teste VARIAVEL Nome : STRING

PROCEDURE Setanome INICIO LEIA (Nome) FIM

PROCEDURE Mudança VARIAVEIS Nome : STRING INICIO LEIA (Nome) FIM