Cursos de Informática Grátis www.megainforcursos.com

10 de agosto de 2012

Defini��o de tipos (Aula 8)

Defini��o de tipos
(Aula 8)
At� agora temos usado apenas os tipos de dados b�sicos definidos pela linguagem, tais como integer, real, char e boolean. Por�m a linguagem Pascal nos permite tamb�m definir nossos proprios tipos e usar na declara��o de vari�veis. Por exemplo, se o tipo string ainda n�o esta definido em alguns compiladores de Pascal nos poderiamos definir o tipo string como um vetor de caracteres da seguinte forma.
TYPE string = array[1..255] of char;
Neste caso, a palavra TYPE informa ao computador que neste campo ser�o definidos os tipos adicionais que ser�o usados no programa. Agora, se desejamos declarar uma vari�vel para armazenar por exemplo o nome de uma pessoa, podemos faz�-lo da seguinte forma:
VAR nome: string;
Neste caso o nome pode ter at� 255 caracteres. Agora imagine que desejamos armazenar num vetor o nome dos alunos da turma, tratado no problema da aula anterior. Neste caso, podemos declarar um vetor da seguinte forma:
Var nome_aluno: array [1..10] of string;
Ou seja, os tipos definidos por n�s podem ser usados como qualquer outro tipo definido pela linguagem Pascal. A vantagem de definir novos tipos � para simplificar a declara��o de vari�veis. Vejamos por exemplo, como seria a declara��o da vari�vel nome_aluno sem a defini��o do tipo string.
VAR nome_aluno: array[1..10] of array[1..255] of char;
A defini��o de tipos � principalmente �til quando trabalhamos com registros.
REGISTROS
Nas duas aula anteriores vimos como declarar uma vari�vel (usando arrays) para armazenar um conjunto de dados do mesmo tipo. Neste aula vamos aprender como agrupar v�rios conjuntos de dados inclusive de tipo diferentes. Em Pascal, utilizamos a paravra record (registro) para declarar uma vari�vel contendo v�rios conjuntos de dados. Por exemplo, vejamos a seguinte declara��o:
Var aluno: record
nome: string;
idade: integer;
sexo: char;
notas: array[1..5] of real;
end
Nesta declara��o podemos observar que em uma �nica vari�vel est�o armazenadas v�rios tipos de dados, inclusive temos um vetor que cont�m as notas do aluno em v�rias disciplinas. Se vamos utilizar a mesma declara��o para outras vari�veis, seria melhor declarar como um tipo, especialmente se pretendemos declarar um vetor de alunos, para guardar a informa��o de todos os alunos. A declara��o do tipoaluno seria a seguinte:
Type tipoaluno=record
nome: string;
idade: integer;
sexo: char;
notas: array[1..5] of real;
end
Para declarar um vetor de alunos utilizariamos o tipoaluno.
Var alunos: array[1..100] of tipoaluno;
Vejamos num exemplo como utilizar estes conceitos na solu��o de um problema.
Problema
Utilizando registros, escrever um programa que l� os dados de um aluno e imprime na tela do computador.
Programa
PROGRAM dadosaluno;
TYPE tipoaluno=RECORD
nome: string;
idade: integer;
notas: array[1..5] of real;
END;
VAR aluno: tipoaluno;
soma,media: real;
i: integer;
BEGIN
READLN(aluno.nome);
READLN(aluno.idade);
FOR i:=1 TO 5 DO BEGIN
READLN(aluno.notas[i]);
END;
soma:=0;
FOR i:=1 TO 5 DO BEGIN
soma:=soma+aluno.notas[i];
END;
media:=soma/5;
WRITELN(aluno.nome);
WRITELN(aluno.idade);
WRITELN(media);
END
Observando o programa vemos que para acessar aos campos de um registro utilizamos um ponto. Agora vejamos um outro exemplo interessante.
Problema: Estagio
Voc� conseguiu um est�gio para trabalhar como programador na secretaria da sua escola. Como primeira tarefa, Dona Vilma, a coordenadora, solicitou que voc� aprimore um programa que foi desenvolvido pelo estagi�rio anterior. Este programa tem como entrada uma lista de nomes e de m�dias finais dos alunos de uma turma, e determina o aluno com a maior m�dia na turma. Dona Vilma pretende utilizar o programa para premiar o melhor aluno de cada turma da escola. O programa feito pelo estagi�rio anterior � mostrado a seguir.
Programa
Program estagio;

Const MAX_ALUNOS = 1000;
Type aluno = record
codigo, media: integer;
end;
Var i, indice_melhor, n: integer;
turma: integer;
alunos: array [1..MAX_ALUNOS] of aluno;

Begin
readln(n);
turma:=1;
while n > 0 do begin
{ le dados dos alunos }
for i := 1 to n do
readln(alunos[i].codigo, alunos[i].media)
{ procura aluno de maior media }
indice_melhor = 1;
for i := 2 to n do
if alunos[i].media > alunos[indice_melhor].media then
indice_melhor = i;
turma:=turma+1;
{ escreve resposta }
writeln('Turma ', turma);
writeln(alunos[indice_melhor].codigo);
{ le numero de alunos da proxima turma }
readln(n);
end;
End.
Como voc� pode verificar, o programa na forma atual tem uma imperfei��o: em caso de haver alunos empatados com a melhor m�dia na turma, ele imprime apenas o primeiro aluno que aparece na lista.
Tarefa
Dona Vilma deseja que voc� altere o programa para que ele produza uma lista com todos os alunos da turma que obtiveram a maior m�dia, e n�o apenas um deles. Voc� consegue ajud�-la nesta tarefa?
Entrada
A entrada � constitu�da da seguinde v�rios conjuntos de teste, representando v�rias turmas. A primeira linha de um conjunto de testes cont�m um n�mero inteiro N (1 ≤ N ≤ 1000) que indica o total de alunos na turma. As N linhas seguintes cont�m, cada uma, um par de n�meros inteiros C (1 ≤ C ≤ 20000) e M (0 ≤ M ≤ 100), indicando respectivamente o c�digo e a m�dia de um aluno. O final da entrada � indicado por uma turma com N = 0.
Exemplo de Entrada
3
1 85
2 91
3 73
5
12300 81
12601 99
98012 76
10111 99
212 99
Sa�da
Para cada turma da entrada seu programa deve produzir tr�s linhas na sa�da. A primeira linha deve conter um identificador do conjunto de teste, no formato "Turma n", onde n � numerado a partir de 1. A segunda linha deve conter os c�digos dos alunos que obtiveram a maior m�dia da turma, separados por um espa�o em branco. Os c�digos dos alunos devem aparecer na mesma ordem da entrada, e cada um deve ser seguido de um espa�o em branco. A terceira linha deve ser deixada em branco. O formato mostrado no exemplo de sa�da abaixo deve ser seguido rigorosamente.
Exemplo de Sa�da

Turma 1
2

Turma 2
12601 10111 212

(esta sa�da corresponde ao exemplo de entrada acima)
Restri��es
0 ≤ N ≤ 1000 (N = 0 apenas para indicar o fim da entrada)
1 ≤ C ≤ 20000
0 ≤ M ≤ 100
Solu��o
Em primeiro lugar vamos esclarecer um novo termo que aparece na segunda linha do programa. Quando queremos definir vari�veis constantes utilizamos a palabra const. Neste caso o valor da vari�vel n�o pode ser alterado no programa. As constantes s�o �teis por exemplo, para limitar as dimens�es dos arrays. No programa MAX_ALUNOS define o n�mero maximo de alunos.
Para determinar todos os alunos que tem a maior nota, vamos achar em primeiro lugar o valor da maior nota. Logo depois comparamos a nota dos alunos com a maior nota. Para todos os alunos que tiverem a nota igual � maior nota vamos mostrar o seu codigo na tela do computador.
Programa
Program estagio;

Const MAX_ALUNOS = 1000;
Type aluno = record
codigo, media: integer;
end;
Var i, indice_melhor, n: integer;
turma: integer;
alunos: array [1..MAX_ALUNOS] of aluno;
max: integer;

Begin
readln(n);
turma:=1;
while n > 0 do begin
{ le dados dos alunos }
for i := 1 to n do
readln(alunos[i].codigo, alunos[i].media)
{ procura a maior media }
max:=0;
for i := 1 to n do begin
if alunos[i].media > max then
max=alunos[i].media;
end
turma:=turma+1;
{ escreve resposta }
writeln('Turma ', turma);
{procura alunos com a maior m�dia}
for i:=1 to n do begin
if(alunos[i].media=max then
write(alunos[i].codigo);
end
writeln;
{ le numero de alunos da proxima turma }
readln(n);
end;
End.
Exerc�cios
Biblioteca
A diretora da escola quer agora informatizar a biblioteca. Para come�ar ela quer que todos os livros que est�o nos estandes sejam cadastrados no computador. Depois de uma consulta como um especialista em banco de dados, ela decideu que as seguintes informa��es de cada livro deveram ser armazenadas no computador:
codigo, titulo, autor, ano de edi��o e quantidade. O codigo � um identificador un�co de cada livro e consta de 5 carateres.
Tarefa
Foi dado para voce a tarefa de montar a estrutura de dados e fazer um programa que testa se um livro ja esta armazenado no computador.
Entrada
Como entrada o programa recebe o n�mero de livros para armazenar, depois em cada linha entram o titulo, autor e ano de edi��o. Em seguida encontrase a entrada de consulta: um n�mero indicando o quantidade de consultas e a continua��o os codigos de livros que precisam ser consultados
Exemplo de Entrada
4
140DR
programando em Pascal
Douglas Riddle
1991
132NW
Algorithms + Data Structures = Programs
Niklaus Wirth
1975
182YP
Matematica Recreativa
Yakov Perelman
1938
183YP
Fisica Recreativa
Yakov Perelman
1938
2
182YP
143NW
Sa�da
Na sa�da o programa deve imprimir se os livros consultados ja est�o cadastrados ou n�o no compurador.
Exemplo de sa�da
Cadastrado
N�o cadastrado
Lista Ordenada
No final de anho, para selecionar os primeiros 3 alunos que tiveram a melhor media na turma, a diretora pede para voce fazer uma lista ordenada de todos os alunos segundo o valor da media em ordem decrecente. Essa ordena��o � importante, ja que o premio para os primeiros 3 alunos � uma viagem de ferias com tudo pago.
Tarefa
Sua tarefa � fazer um programa que ordene a lista de acordo com a nota media em forma descrecente. A lista tem o formato similar ao problema do estagio, porem em vez de codigo, fue substituido pelo nome, ja que n�o tem nomes repetidos na turma. Portanto o tipo aluno pode ser definido da seguinte forma:
type aluno = record
nome: string;
media: real;
end;
Voce j� aprendeu como determinar o valor m�ximo de um vetor. Como voce pode resolver este problema aproveitando seus conhecimentos adquiridos sobre programa��o?.
Entrada
A primeira entrada � o numero de alunos da turma, nas seguintes linhas s�o fornecidos os nomes e as medias de todos os alunos em forma sequencial.
Exemplo de entrada
10
Jo�nzinho
8.5
Pedrino
8.4
Pablito
10
Ritza
9.5
Jorginho
7.5
Julinho
6.5
verushka
7.0
Gisele
9.3
Paulinho
8.2
Robertinho
6.0
Sa�da
Na sa�da o programa deve imprimir a lista ordenada
Exemplo de sa�da
Pablito
Ritza
Gisele
Jo�nzinho
Pedrinho
Paulinho
Jorginho
Verushka
Julinho
Robertinho
Escaner
O aparelho para escanear imagenes em branco e preto funciona da seguinte forma. Os 4 sensores presentes no escaner barren a imagem em varios passos sucessivos. O primeiro escanea horizontalmente linea por linea, o segundo diagonalmente para direita, o terceiro verticalmente e o quarto em forma diagonal para a esquerda, como mostra a figura abaixo. Em cada barredura os sensores contam os quadradinhos (celulas) que contem algum peda�o da figura.


Tarefa
Fa�a um programa que dado as informa��es lidas pelos sensores, imprima na tela a figura escaneada. O tamanho do escaner � 10 pontos de largura e 15 de comprimento.
Entrada
A entrada contem 4 lineas com 10, 24, 15 e 24 n�meros inteiros represetando os dados dos 4 sensores coletados em cada barredura.
Exemplo de entrada
11 14 12 8 8 8 8 13 14 12
4 10 10 10 10 10 4 7 8 19 19 6 6 6 5 2
1 2 2 3 4 5 5 4 8 9 9 9 9 8 5 4 2 3 3 3 3 3 2 0
1 2 2 3 4 5 5 4 8 9 9 9 9 9 6 5 3 3 3 3 4 2 0 0
Sa�da
O programa deve imprimir uma matriz de 10x15 celulas. Para indicar que uma celula representa parte do objeto imprimir o caractere (#) por celula e para indicar que a celula n�o representa parte do objeto, impirmir o ponto (.)
Exemplo de Sa�da
######..#####..
######.#######.
.####..#######.
.####.####.....
.####.####.....
.####.####.....
.####.####.....
.####.#########
######.########
######..######.

as solu��es voce encontra aqui

0 comentários:

Postar um comentário

 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes