Anda di halaman 1dari 188

Universidade do Sul de Santa Catarina

Programação Numérica
Disciplina na modalidade a distância

Palhoça
UnisulVirtual
2011
Créditos
Universidade do Sul de Santa Catarina – Campus UnisulVirtual – Educação Superior a Distância
Avenida dos Lagos, 41 – Cidade Universitária Pedra Branca | Palhoça – SC | 88137-900 | Fone/fax: (48) 3279-1242 e 3279-1271 | E-mail: cursovirtual@unisul.br | Site: www.unisul.br/unisulvirtual

Reitor Unisul Assistente e Auxiliar de Luana Borges da Silva Gerência de Desenho Jeferson Pandolfo
Ailton Nazareno Soares Coordenação Luana Tarsila Hellmann e Desenvolvimento de Karine Augusta Zanoni
Maria de Fátima Martins (Assistente) Luíza Koing  Zumblick Materiais Didáticos Marcia Luz de Oliveira
Vice-Reitor Fabiana Lange Patricio Maria José Rossetti Márcia Loch (Gerente)
Tânia Regina Goularte Waltemann Marilene de Fátima Capeleto Assuntos Jurídicos
Sebastião Salésio Heerdt Ana Denise Goularte de Souza Bruno Lucion Roso
Patricia A. Pereira de Carvalho Desenho Educacional
Chefe de Gabinete da Paulo Lisboa Cordeiro Cristina Klipp de Oliveira (Coord. Grad./DAD) Marketing Estratégico
Coordenadores Graduação Silvana Souza da Cruz (Coord. Pós/Ext.)
Reitoria Adriano Sérgio da Cunha Paulo Mauricio Silveira Bubalo Rafael Bavaresco Bongiolo
Rosângela Mara Siegel Aline Cassol Daga
Willian Máximo Aloísio José Rodrigues Ana Cláudia Taú Portal e Comunicação
Ana Luísa Mülbert Simone Torres de Oliveira
Vanessa Pereira Santos Metzker Carmelita Schulze Catia Melissa Silveira Rodrigues
Pró-Reitora Acadêmica Ana Paula R. Pacheco Carolina Hoeller da Silva Boeing Andreia Drewes
Arthur Beck Neto Vanilda Liordina Heerdt
Miriam de Fátima Bora Rosa Eloísa Machado Seemann Luiz Felipe Buchmann Figueiredo
Bernardino José da Silva Gestão Documental Flavia Lumi Matuzawa Marcelo Barcelos
Pró-Reitor de Administração Catia Melissa S. Rodrigues Lamuniê Souza (Coord.) Gislaine Martins Rafael Pessi
Fabian Martins de Castro Charles Cesconetto Clair Maria Cardoso Isabel Zoldan da Veiga Rambo
Diva Marília Flemming Daniel Lucas de Medeiros Jaqueline de Souza Tartari Gerência de Produção
Pró-Reitor de Ensino Fabiano Ceretta Eduardo Rodrigues João Marcos de Souza Alves Arthur Emmanuel F. Silveira (Gerente)
José Carlos da Silva Junior Guilherme Henrique Koerich Francini Ferreira Dias
Mauri Luiz Heerdt Horácio Dutra Mello Josiane Leal
Leandro Romanó Bamberg
Letícia Laurindo de Bonfim Design Visual
Itamar Pedro Bevilaqua Marília Locks Fernandes
Campus Universitário de Jairo Afonso Henkes
Lygia Pereira Pedro Paulo Alves Teixeira (Coord.)
Tubarão Lis Airê Fogolari Adriana Ferreira dos Santos
Janaína Baeta Neves Gerência Administrativa e Luiz Henrique Milani Queriquelli
Diretora Jardel Mendes Vieira Financeira Alex Sandro Xavier
Milene Pacheco Kindermann Marina Melhado Gomes da Silva Alice Demaria Silva
Joel Irineu Lohn Renato André Luz (Gerente) Marina Cabeda Egger Moellwald
Jorge Alexandre N. Cardoso Ana Luise Wehrle Anne Cristyne Pereira
Campus Universitário da Melina de La Barrera Ayres Cristiano Neri Gonçalves Ribeiro
José Carlos N. Oliveira Anderson Zandré Prudêncio Michele Antunes Corrêa
Grande Florianópolis José Gabriel da Silva Daniel Contessa Lisboa Daiana Ferreira Cassanego
Nágila Hinckel Diogo Rafael da Silva
Diretor José Humberto D. Toledo Naiara Jeremias da Rocha Pâmella Rocha Flores da Silva
Hércules Nunes de Araújo Joseane Borges de Miranda Rafael Bourdot Back Edison Rodrigo Valim
Rafael Araújo Saldanha Frederico Trilha
Luciana Manfroi Thais Helena Bonetti Roberta de Fátima Martins
Campus Universitário Luiz G. Buchmann Figueiredo Valmir Venício Inácio Higor Ghisi Luciano
Roseli Aparecida Rocha Moterle Jordana Paula Schulka
UnisulVirtual Marciel Evangelista Catâneo Sabrina Bleicher
Maria Cristina S. Veit Gerência de Ensino, Pesquisa Marcelo Neri da Silva
Diretora Sabrina Paula Soares Scaranto Nelson Rosa
Maria da Graça Poyer e Extensão Viviane Bastos
Jucimara Roesler Mauro Faccioni Filho Oberdan Porto Leal Piantino
Moacir Heerdt (Gerente) Patrícia Fragnani de Morais
Moacir Fogaça Aracelli Araldi Acessibilidade
Nélio Herzmann Vanessa de Andrade Manoel (Coord.) Multimídia
Equipe UnisulVirtual Onei Tadeu Dutra Elaboração de Projeto e Letícia Regiane Da Silva Tobal
Reconhecimento de Curso Sérgio Giron (Coord.)
Patrícia Fontanella Mariella Gloria Rodrigues Dandara Lemos Reynaldo
Diretora Adjunta Rogério Santos da Costa Diane Dal Mago
Patrícia Alberton Vanderlei Brasil Avaliação da aprendizagem Cleber Magri
Rosa Beatriz M. Pinheiro Fernando Gustav Soares Lima
Tatiana Lee Marques Francielle Arruda Rampelotte Geovania Japiassu Martins (Coord.)
Secretaria Executiva e Cerimonial Gabriella Araújo Souza Esteves
Jackson Schuelter Wiggers (Coord.) Valnei Carlos Denardin Extensão Conferência (e-OLA)
Roberto Iunskovski Jaqueline Cardozo Polla Carla Fabiana Feltrin Raimundo (Coord.)
Marcelo Fraiberg Machado Maria Cristina Veit (Coord.) Thayanny Aparecida B.da Conceição
Tenille Catarina Rose Clér Beche Bruno Augusto Zunino
Rodrigo Nunes Lunardelli Pesquisa
Assessoria de Assuntos Sergio Sell Daniela E. M. Will (Coord. PUIP, PUIC, PIBIC) Gerência de Logística Produção Industrial
Internacionais Mauro Faccioni Filho(Coord. Nuvem) Jeferson Cassiano A. da Costa (Gerente) Marcelo Bittencourt (Coord.)
Murilo Matos Mendonça Coordenadores Pós-Graduação
Aloisio Rodrigues Pós-Graduação Logísitca de Materiais Gerência Serviço de Atenção
Assessoria de Relação com Poder Bernardino José da Silva Anelise Leal Vieira Cubas (Coord.) Carlos Eduardo D. da Silva (Coord.)
Público e Forças Armadas Abraao do Nascimento Germano Integral ao Acadêmico
Carmen Maria Cipriani Pandini Maria Isabel Aragon (Gerente)
Adenir Siqueira Viana Daniela Ernani Monteiro Will Biblioteca Bruna Maciel
Walter Félix Cardoso Junior Salete Cecília e Souza (Coord.) Fernando Sardão da Silva André Luiz Portes
Giovani de Paula Carolina Dias Damasceno
Karla Leonora Nunes Paula Sanhudo da Silva Fylippy Margino dos Santos
Assessoria DAD - Disciplinas a Renan Felipe Cascaes Cleide Inácio Goulart Seeman
Distância Leticia Cristina Barbosa Guilherme Lentz
Marlon Eliseu Pereira Francielle Fernandes
Patrícia da Silva Meneghel (Coord.) Luiz Otávio Botelho Lento Holdrin Milet Brandão
Carlos Alberto Areias Rogério Santos da Costa Gestão Docente e Discente Pablo Varela da Silveira
Enzo de Oliveira Moreira (Coord.) Rubens Amorim Jenniffer Camargo
Cláudia Berh V. da Silva Roberto Iunskovski Juliana Cardoso da Silva
Conceição Aparecida Kindermann Thiago Coelho Soares Yslann David Melo Cordeiro
Capacitação e Assessoria ao Jonatas Collaço de Souza
Luiz Fernando Meneghel Vera Regina N. Schuhmacher Docente Avaliações Presenciais Juliana Elen Tizian
Renata Souza de A. Subtil Simone Zigunovas (Capacitação) Graciele M. Lindenmayr (Coord.) Kamilla Rosa
Gerência Administração Alessandra de Oliveira (Assessoria)
Assessoria de Inovação e Acadêmica Ana Paula de Andrade Maurício dos Santos Augusto
Qualidade de EAD Adriana Silveira Angelica Cristina Gollo Maycon de Sousa Candido
Angelita Marçal Flores (Gerente) Alexandre Wagner da Rocha
Denia Falcão de Bittencourt (Coord) Fernanda Farias Cristilaine Medeiros Monique Napoli Ribeiro
Andrea Ouriques Balbinot Elaine Cristiane Surian Daiana Cristina Bortolotti Nidia de Jesus Moraes
Carmen Maria Cipriani Pandini Secretaria de Ensino a Distância Juliana Cardoso Esmeraldino Delano Pinheiro Gomes Orivaldo Carli da Silva Junior
Iris de Sousa Barros Samara Josten Flores (Secretária de Ensino) Maria Lina Moratelli Prado Edson Martins Rosa Junior Priscilla Geovana Pagani
Giane dos Passos (Secretária Acadêmica) Fabiana Pereira Fernando Steimbach Sabrina Mari Kawano Gonçalves
Assessoria de Tecnologia Adenir Soares Júnior Fernando Oliveira Santos Scheila Cristina Martins
Osmar de Oliveira Braz Júnior (Coord.) Tutoria e Suporte
Alessandro Alves da Silva Claudia Noemi Nascimento (Líder) Lisdeise Nunes Felipe Taize Muller
Felipe Jacson de Freitas Andréa Luci Mandira Marcelo Ramos Tatiane Crestani Trentin
Jefferson Amorin Oliveira Anderson da Silveira (Líder)
Cristina Mara Schauffert Ednéia Araujo Alberto (Líder) Marcio Ventura Vanessa Trindade
Phelipe Luiz Winter da Silva Djeime Sammer Bortolotti Osni Jose Seidler Junior
Priscila da Silva Maria Eugênia F. Celeghin (Líder)
Douglas Silveira Andreza Talles Cascais Thais Bortolotti
Rodrigo Battistotti Pimpão Evilym Melo Livramento
Tamara Bruna Ferreira da Silva Daniela Cassol Peres
Fabiano Silva Michels Débora Cristina Silveira Gerência de Marketing
Fabricio Botelho Espíndola Francine Cardoso da Silva Fabiano Ceretta (Gerente)
Coordenação Cursos Felipe Wronski Henrique Joice de Castro Peres Relacionamento com o Mercado
Coordenadores de UNA Gisele Terezinha Cardoso Ferreira Karla F. Wisniewski Desengrini
Indyanara Ramos Eliza Bianchini Dallanhol Locks
Diva Marília Flemming Maria Aparecida Teixeira
Marciel Evangelista Catâneo Janaina Conceição Mayara de Oliveira Bastos Relacionamento com Polos
Roberto Iunskovski Jorge Luiz Vilhar Malaquias Patrícia de Souza Amorim Presenciais
Juliana Broering Martins Schenon Souza Preto Alex Fabiano Wehrle (Coord.)
Fernando Henrique Cardoso

Programação Numérica
Livro didático

Design instrucional
Ana Cláudia Taú

Palhoça
UnisulVirtual
2011
Copyright © UnisulVirtual 2011
Nenhuma parte desta publicação pode ser reproduzida por qualquer meio sem a prévia autorização desta instituição.

Edição – Livro Didático


Professor Conteudista
Fernando Henrique Cardoso

Design Instrucional
Ana Cláudia Taú

Projeto Gráfico e Capa


Equipe UnisulVirtual

Diagramação
Frederico Trilha

Revisão
Letra de Forma

005.12
C26 Cardoso, Fernando Henrique
Programação numérica : livro didático / Fernando Henrique Cardoso ;
design instrucional Ana Cláudia Taú ; assistente acadêmico [Pâmela Rocha
Flores da Silva]. – Palhoça : UnisulVirtual, 2011.
188 p. : il. ; 28 cm.

Inclui bibliografia.

1. Algoritmos. 2. Estruturas de dados (Computação). 3. Pascal


(Linguagem de programação de computador). 4. Equações lineares. 5.
Análise numérica – Processamento de dados. I. Taú, Ana Cláudia. II. Silva,
Pâmela Rocha Flores da. III. Título

Ficha catalográfica elaborada pela Biblioteca Universitária da Unisul


Sumário

Apresentação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Palavras do professor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

UNIDADE 1 - Introdução aos Sistemas Computacionais. . . . . . . . . . . . . . . . . 17


UNIDADE 2 - Lógica e Estrutura de Programação . . . . . . . . . . . . . . . . . . . . . . . 37
UNIDADE 3 - Implementar Algoritmos em Pascal. . . . . . . . . . . . . . . . . . . . . . . 89
UNIDADE 4 - Sistemas de equações lineares. . . . . . . . . . . . . . . . . . . . . . . . . . . 133
UNIDADE 5 - Ajustamento de curvas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

Para concluir o estudo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177


Referências. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Sobre o professor conteudista. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Respostas e comentários das
atividades de autoavaliação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Biblioteca Virtual. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Apresentação

Este livro didático corresponde à disciplina Programação


Numérica.

O material foi elaborado visando a uma aprendizagem autônoma


e aborda conteúdos especialmente selecionados e relacionados
à sua área de formação. Ao adotar uma linguagem didática
e dialógica, objetivamos facilitar seu estudo a distância,
proporcionando condições favoráveis às múltiplas interações e a
um aprendizado contextualizado e eficaz.

Lembre-se que sua caminhada, nesta disciplina, será


acompanhada e monitorada constantemente pelo Sistema
Tutorial da UnisulVirtual, por isso a “distância” fica
caracterizada somente na modalidade de ensino que você optou
para sua formação, pois na relação de aprendizagem professores
e instituição estarão sempre conectados com você.

Então, sempre que sentir necessidade entre em contato; você tem


à disposição diversas ferramentas e canais de acesso tais como:
telefone, e-mail e o Espaço Unisul Virtual de Aprendizagem,
que é o canal mais recomendado, pois tudo o que for enviado e
recebido fica registrado para seu maior controle e comodidade.
Nossa equipe técnica e pedagógica terá o maior prazer em lhe
atender, pois sua aprendizagem é o nosso principal objetivo.

Bom estudo e sucesso!


Equipe UnisulVirtual.

7
Palavras do professor

Certamente você já ouviu falar em microprocessador, teclado,


impressora, sistemas operacionais e até editores de texto,
mas pode não saber que todos fazem parte de um sistema
computacional e que se inter-relacionam para trabalhar de
forma mais integrada e transparente possível. As facilidades
que encontramos na utilização desses hardwares e softwares não
foram sempre assim, e muito estudo e dinheiro foram gastos
para possuirmos o que temos hoje.

Você já deve ter se perguntado como um banco de dados ou


até mesmo como aquele programa que utiliza para editar suas
fotos foram feitos, não é mesmo? Saiba que fazer aplicativos
não é um bicho de sete cabeças e que pessoas comuns podem
fazer isso, basta muita dedicação, estudo e persistência.

Aqueles problemas que envolviam várias incógnitas e algumas


fórmulas dentro de chaves você achava que apenas gênios
poderiam resolver, certo? Ledo engano, simples mortais, como
eu e você, também podem resolvê-los, se para isso souberem
aplicar umas das técnicas existentes.

Talvez você nunca tenha tido esse problema, mas alguns colegas
e amigos já se depararam com o desafio de encontrar a fórmula
de uma curva que passasse por diversos pontos obtidos como
resultado parcial de uma experiência realizada. Sim, também
existem técnicas e métodos para encontrar essas curvas.

São esses, portanto, os aspectos que serão desenvolvidos neste


livro didático. Esse assunto prenderá sua atenção, fazendo
com que você encontre a solução de problemas que antes você
arrastaria para debaixo do tapete. Seja bem-vindo ao curso
de Programação Numérica que, além de ajudá-lo a resolver
muitos problemas, o instigará para encontrar muitos outros.
Plano de estudo

O plano de estudos visa a orientá-lo no desenvolvimento da


disciplina. Ele possui elementos que o ajudarão a conhecer o
contexto da disciplina e a organizar o seu tempo de estudos.

O processo de ensino e aprendizagem na UnisulVirtual leva


em conta instrumentos que se articulam e se complementam,
portanto, a construção de competências se dá sobre a
articulação de metodologias e por meio das diversas formas de
ação/mediação.

São elementos desse processo:

„„ o livro didático;

„„ o Espaço UnisulVirtual de Aprendizagem (EVA);

„„ as atividades de avaliação (a distância, presenciais e de


autoavaliação);

„„ o Sistema Tutorial.

Ementa
Introdução aos sistemas computacionais. Lógica e estrutura
de programação. Implementação de algoritmos em uma
linguagem de programação. Sistemas de equações lineares.
Ajustamento de curvas. Aplicações típicas para engenharia.
Universidade do Sul de Santa Catarina

Objetivos

Gerais:
Aprender os conceitos dos sistemas computacionais, passando pelos
algoritmos e a linguagem de programação Pascal, finalizando com
sistemas de equações lineares e ajustamento de curvas.

Específicos:
„„ Conhecer os elementos fundamentais dos sistemas
computacionais.

„„ Compreender os conceitos de hardware, software,


informação, procedimento e tarefa.

„„ Introduzir as definições básicas de lógica e suas aplicações.

„„ Entender os tipos primitivos, variáveis, constantes,


expressões aritméticas, relacionais e lógicas e os comandos
de entrada e saída.

„„ Aprender como são as estruturas sequencial, de seleção,


repetição e de controle e fluxo de execução por meio da
exemplificação de sua utilização.

„„ Utilizar Pascal como ferramenta de desenvolvimento de


programas.

„„ Aprender a escrita de programas para resolver problemas


computacionais.

„„ Compreender os principais procedimentos e as funções do


Pascal.

„„ Identificar uma equação linear e seus diversos tipos.

„„ Entender os sistemas de equações lineares.

„„ Resolver os sistemas lineares utilizando alguns dos


métodos existentes.

„„ Compreender o que é Diagrama de Dispersão.

12
Programação Numérica

„„ Aprender as diversas técnicas para descobrir as curvas que


melhor se ajustam aos pontos do diagrama de dispersão.

„„ Entender como cada técnica é aplicada à distribuição dos


pontos no diagrama de dispersão.

Carga Horária
A carga horária total da disciplina é de 60 horas/aula.

Conteúdo programático/objetivos
Veja, a seguir, as unidades que compõem o livro didático desta
disciplina e os seus respectivos objetivos. Estes se referem aos
resultados que você deverá alcançar ao final de uma etapa de
estudo. Os objetivos de cada unidade definem o conjunto de
conhecimentos que você deverá possuir para o desenvolvimento
de habilidades e competências necessárias à sua formação.

Unidades de estudo: 5

Unidade 1 – Introdução aos Sistemas Computacionais


Nesta unidade você conhecerá a história dos sistemas
computacionais e seus componentes. Também verá que, para
executar diferentes tipos de softwares, os sistemas computacionais
necessitam de uma diversidade de hardware. Além disso,
verificará que a informação possibilitou o crescimento dos sistemas
computacionais e hoje é totalmente dependente deles.

Unidade 2 – Lógica e Estrutura de Programação


Com o estudo desta unidade, você verá que um computador
só executa as tarefas que necessitamos se dissermos o que deve
ser feito a ele. Você verá, porém, que isso não pode ser feito da
mesma forma com que nos comunicamos com os seres humanos.

13
Universidade do Sul de Santa Catarina

Devemos, para isso, utilizar algoritmos. É buscando essa


comunicação que você aprenderá a criar algoritmos e os diversos
tipos de comandos e estruturas disponíveis no mercado.

Unidade 3 – Implementar Algoritmos em Pascal


Nesta unidade você aprenderá a utilizar a Linguagem de
Programação Pascal, que é uma das linguagens mais indicadas
para o ensino da programação. Você aprenderá como traduzir os
algoritmos feitos em programas em Pascal. Para tanto, você estudará
os comandos, os procedimentos e as funções dessa linguagem.

Unidade 4 – Sistemas de Equações Lineares


Nesta unidade você aprenderá um pouco mais sobre os sistemas
lineares e suas equações. Entenderá qual é a sua aplicabilidade
em diversos campos que vão desde a matemática aplicada até a
economia. Também verá que os sistemas de equações lineares
podem ser classificados de acordo com a(s) sua(s) solução(ões) e
que podem não possuir um conjunto de soluções. Ao final, você
revisará as operações sobre matrizes para entender os métodos de
resolução de sistemas lineares.

Unidade 5 – Ajustamento de Curvas


Nesta unidade você verá que podemos ajustar as curvas de dispersão
em vez de interpolá-las. O intuito é você aprender como resultar
na melhor aproximação dos pontos do diagrama de dispersão, para
diminuir consideravelmente a margem de erro em programação de
modo a tomar as decisões mais acertadas a partir dessa informação.

14
Programação Numérica

Agenda de atividades/ Cronograma

„„ Verifique com atenção o EVA, organize-se para acessar


periodicamente a sala da disciplina. O sucesso nos seus
estudos depende da priorização do tempo para a leitura, da
realização de análises e sínteses do conteúdo e da interação
com os seus colegas e tutor.

„„ Não perca os prazos das atividades. Registre no espaço


a seguir as datas com base no cronograma da disciplina
disponibilizado no EVA.

„„ Use o quadro para agendar e programar as atividades relativas


ao desenvolvimento da disciplina.

Atividades obrigatórias

Demais atividades (registro pessoal)

15
1
unidade 1

Introdução aos Sistemas


Computacionais

Objetivos de aprendizagem
„„ Conhecer os elementos fundamentais dos sistemas
computacionais;
„„ Compreender os conceitos de hardware, software,
informação e procedimento e tarefa.

Seções de estudo
Seção 1 Sistemas computacionais

Seção 2 Elementos dos sistemas computacionais


Universidade do Sul de Santa Catarina

Para início de estudo


Na segunda metade do século XX, surgiu um novo elemento
econômico: a informação. Até então, a economia era formada
pelos pilares terra, trabalho e capital. O que possibilitou a
inserção da informação como esse novo e valioso elemento foi a
invenção do computador.

Nesta unidade abordaremos os elementos fundamentais dos


sistemas computacionais, visualizando de forma introdutória itens
como hardware, software, informação, procedimentos e tarefas.

Verificaremos alguns itens importantes do hardware do


computador, como processador, memória e periféricos.
Aprenderemos que existe muito mais em software do que apenas
os sistemas operacionais e processadores de texto. Discutiremos
um pouco sobre a informação, elemento essencial atualmente.
Enfim, abordaremos temas dos sistemas computacionais que
estão presente em nosso dia a dia e que muitas vezes não nos
damos conta de sua existência.

Seção 1 – Sistemas computacionais


Em seus primórdios, o computador era grande, desajeitado e
lento. Para se ter uma ideia, o Eletronic Numerical Integrator
and Computer (ENIAC), primeiro computador criado, custou
a bagatela de U$ 450.000, pesava 27 toneladas e possuía 2,60
metros de altura por 26 metros de comprimento, dimensões
necessárias para armazenar suas 17.468 válvulas.

18
Programação Numérica

Figura 1.1: Uma parte do ENIAC – ocupava vários andares de um edifício


Fonte:<www.on.br/revista_ed_anterior/maio_2004/conteudo/futuro/futuro.html>

Porém, foi somente com a invenção do transistor, do


circuito integrado e do microprocessador que surgiram o
microcomputador e os sistemas computacionais mais acessíveis,
possibilitando sua popularização e o início da Era da Informação.

Figura 1.2: Válvula eletrônica


Fonte: <www.laercio.com.br/artigos/HARDWARE/HARD-016/HARD-016.HTM>

Unidade 1 19
Universidade do Sul de Santa Catarina

Figura 1.3: Transistores


Fonte: <www.laercio.com.br/artigos/HARDWARE/HARD-016/HARD-016.HTM>

Figura 1.4: Microprocessador


Fonte: <www.laercio.com.br/artigos/HARDWARE/HARD-016/HARD-016.HTM>

Afinal, o que seriam os sistemas computacionais?

Podemos dizer que sistema computacional é o processamento


de determinadas informações comandadas por um programa
(software) com o auxílio de um conjunto de dispositivos
eletrônicos (hardware). Em outras palavras, ele permite a
automatização de atividades humanas por meio do processamento
de informações.

Os principais elementos de um sistema computacional são:

20
Programação Numérica

„„ hardware;

„„ software;

„„ informações;

„„ procedimentos;

„„ tarefas.

Os hardwares permitem a concepção e a existência de softwares


e o processamento de informações, como é o caso das CPU,
das memórias, dos componentes de rede, dos periféricos
etc. O hardware, portanto, é a parte física de um sistema
computacional, o software é a parte abstrata, criada com o auxílio
de uma linguagem de programação para processar e armazenar
informações na forma de dados codificados.

Pode-se dizer que a relação entre hardware e software


é de muitos para muitos, ou seja, um computador
pode armazenar diversos softwares e um software pode
necessitar de vários computadores para ser executado.

É importante observar que o aumento da produtividade, o auxílio


na tomada de decisões e a redução dos custos possibilitaram a
disseminação da utilização do computador nos últimos anos.

Seção 2 – Elementos de um sistema computacional


Como você viu, um sistema computacional é composto por
alguns elementos fundamentais: hardware, software, informação,
procedimento e tarefa. A seguir você poderá acompanhar
uma explicação sobre cada um desses elementos de forma a se
familiarizar com esses conceitos.

Unidade 1 21
Universidade do Sul de Santa Catarina

Hardware
Hardware é o conjunto de componentes físicos de um sistema de
computador. Ele compreende os equipamentos utilizados para
entrada, processamento, armazenamento e saída de dados. Os
principais componentes de hardware são: processador, memória
principal, memória secundária e dispositivos de entrada e saída.

Processador
Todo processador pode ser considerado o cérebro de um
computador, pois realiza as funções de cálculo e tomadas de
decisões dessas máquinas. Ele é a ferramenta que executa
as instruções em um sistema. Ao mesmo tempo realiza a
interação entre as memórias, os dispositivos de entrada e saída,
os controladores e os conversores digitais para colocar em
funcionamento um computador.

Figura 1.5: Microprocessador – arquitetura interna


Fonte: <http://1.bp.blogspot.com/__88UC4tgMXs/TJibHdNlWVI/AAAAAAAAAWs/j8bTzugqtwk/
s1600/fig0000005.png>

O processador é composto por vários elementos, cada um com


uma função específica:

22
Programação Numérica

„„ Unidade Lógica e Arimética (ULA): executa as


instruções lógicas, matemáticas, de desvio etc.;

„„ Unidade de Controle (UC): comanda todos os demais


componentes e controla as ações que serão realizadas
pelo computador.

„„ Registradores: responsável pelo armazenamento


dos valores e comandos utilizados no controle e
processamento de cada instrução dos programas
executados. Contador de programa (PC) e Registrador
de instruções (IR), são os principais registradores de um
computador.

„„ Unidade de Gerenciamento de Memória (MMU):


Administra a memória principal e transforma os
endereços virtuais em endereços físicos para acesso à
memória.

Figura 1.6: Diagrama de um microprocessador


Fonte: <http://informatica.hsw.uol.com.br/microprocessadores2.htm>

Atualmente, a Intel e a AMD são as principais fabricantes, e seus


microprocessadores estão presentes em praticamente todos os
microcomputadores e notebooks do mundo.

Unidade 1 23
Universidade do Sul de Santa Catarina

Memória principal
A memória principal é composta por dispositivos que possuem
comunicação direta com o processador e permitem armazenar
instruções, dados e resultados. O sistema de armazenamento
temporário da memória principal é conhecido como Random
Access Memory (RAM) e Cache, e o permanente como Read Only
Memory (ROM).

A memória principal é medida em byte e seus


múltiplos são Kbyte, Mbyte, Gbyte etc. A menor medida
de informação é o byte. Em um byte, por exemplo,
conseguimos armazenar uma letra ou um número
inteiro. Como a quantidade de informação armazenada
em um computador é muito grande, os múltiplos
do byte foram adotados para não ser necessário
expressar uma quantidade muito grande de números.
Imagine você ter de dizer que seu computador possui
1.073.741.824 bytes de memória RAM. Em vez disso, fica
bem mais fácil dizer que ele possui 1 Gbyte.

Veja, a seguir, um quadro com as equivalências dos múltiplos do byte.

1 Kbyte (Kilo) 210 byte 1024 bytes


1 Kbyte (Mega) 210 Kbyte 1.048.576 bytes
1 Kbyte (Giga) 210 Mbyte 1.073.741.824 bytes
1 Kbyte (Tera) 210 Gbyte 1.099.511.627.776 bytes
Quadro 1.1: Múltiplos do byte
Fonte: Elaborado pelo autor.

Como já visto, a memória principal pode ser classificada em:

„„ Cache;
„„ RAM;
„„ ROM.

CPU Cache RAM Memória Armazenamento


Virtual em disco

Figura 1.7: Gerenciamento de memória


Fonte: <http://informatica.hsw.uol.com.br/memoria-do-computador2.htm>.

24
Programação Numérica

Veja a seguir uma explicação mais detalhada sobre cada uma das
memórias.

1. Memória RAM
É um tipo de memória cujo tempo que o processador leva para
ler, escrever ou apagar os dados de qualquer um de seus endereços
é constante. Por esse motivo, é chamada de memória de acesso
aleatório, em inglês, Random Access Memory (RAM).

Seu conteúdo é volátil, ou seja, seu armazenamento é temporário.


Os dados ali presentes ficarão disponíveis enquanto o
computador estiver ligado. No momento em que é desligado, os
dados desse tipo de memória são perdidos.

É na memória principal que são carregados os programas e os


dados do usuário. Juntamente com a capacidade do processador, a
memória influencia diretamente no desempenho do computador.

Quanto mais dados a memória principal puder


armazenar, melhor será o desempenho da máquina.

2. Memória ROM
A memória ROM também armazena instruções, dados e
resultados, só que, diferentemente da memória RAM, não perde
as informações quando o computador é desligado. A memória
ROM não permite que o usuário altere o seu conteúdo, por esse
motivo rotinas de testes de dispositivos de hardware são utilizadas
para armazenar as instruções básicas de iniciação do computador.
Essa memória possui todas as instruções necessárias para que o
computador possa se comunicar corretamente com os dispositivos
de entrada e saída de dados.

De acordo com a sua aplicabilidade ou quantidade de vezes que


podem ser gravadas e regravadas ou até mesmo por quem pode
fazer essa gravação/regravação, as memórias ROM podem ser de
diversos tipos. Seus principais tipos são:

Unidade 1 25
Universidade do Sul de Santa Catarina

„„ Read Only Memory (ROM): gravada uma única vez na


fábrica;

„„ Programable Read Only Memory (PROM): gravada pelo


usuário uma única vez;

„„ Erasable Programable Read Only Memory (EPROM):


gravada e regravada diversas vezes por meio de aparelho
específico, sendo apagada iluminando o chip com luz
ultravioleta;

„„ Electrically Erasable Programable Read Only Memory


(EEPROM): gravada, apagada e regravada por meio de
aparelho que fornece as voltagens específicas em cada
pino.

3. Memória Cache
Como a velocidade do processador é muitas vezes maior que a
velocidade da memória RAM, o processador, após enviar grande
quantidade de dados, fica ocioso durante grande parte do tempo
aguardando que a memória RAM efetue a gravação e fique
disponível para acesso novamente. Para evitar essa ociosidade,
foi criada dentro do processador uma memória volátil, conhecida
como memória cache.

A memória Cache é diversas vezes mais rápida que


a RAM, por isso os dados são inicialmente lidos
na memória RAM e enviados imediatamente para
a memória Cache a fim de agilizar o acesso do
processador aos dados requisitados.

Existem dois níveis de memória Cache:

„„ Memória Cache L1: funciona quase na mesma


frequência do processador, porém ocupando um espaço
muito grande;

„„ Memória Cache L2: funciona em uma frequência


inferior, porém ocupa menos espaço, permitindo uma
quantidade maior disponível.

26
Programação Numérica

Memória secundária
Também conhecida como memória de massa, a memória
secundária é utilizada para armazenar grande quantidade de
informações permanentemente.

Disco rígidos, CD-ROM, DVD-ROM, disquetes e pen


drives são os tipos de memória secundária mais
conhecidos.

Figura 1.8: Disco rígido


Fonte: <www.blogtec.com.br/samsung-e-fujitsu-lancam-duas-novidades-em-discos-rigidos>

Figura 1.9: Pen drive


Fonte: < www.i9informatica.net/loja/components/com_virtuemart/shop_image/product/69dd711
74cb0d3ac685c831ff32996b4.jpg>

Unidade 1 27
Universidade do Sul de Santa Catarina

Figura 1.10: DVD-ROM


Fonte: <http://pt.wikipedia.org/wiki/Ficheiro:DVD-R_bottom-side.jpg>

Se por um lado o poder de armazenamento desse tipo de


memória é grande, por outro a velocidade com que esses
dados são acessados é baixa, pois o processador utiliza-se de
controladores de entrada/saída para acessar as informações
contidas nesses dispositivos. Para tentar suavizar esse problema,
cada dispositivo possui um buffer de leitura e escrita.

Você sabe o que é buffer?


Buffer de leitura e escrita é um espaço temporário na memória
utilizado para armazenar dados que foram lidos ou que serão
escritos em algum hardware periférico. Podemos citar como
exemplo de utilização de buffer de leitura, o buffer para o teclado.
Em algumas situações, as informações digitadas no teclado
não podem ser processadas instantaneamente, por diversos
motivos. Em vez de perder essas informações, o computador
armazena essas informações digitadas em um buffer e elas ficam
disponíveis até que o processador se desocupe da atividade
que estava executando e processe-as. Por esse motivo, às vezes
você digita várias letras e elas não aparecem na tela na hora,
mas depois de um pequeno tempo todas as letras digitadas
são exibidas como se você estivesse digitando muito rápido.
Como exemplo de buffer de escrita, pode-se citar a gravação
de um CD ou DVD. Como o processador consegue processar
as informações que serão gravadas bem mais rápido do que
o próprio dispositivo pode gravar, essas informações vão para
o buffer de escrita e, quando o gravador terminar de gravar os
dados anteriores, pode ir lá e pegar mais um remessa de dados.
Com isso, o processador realiza sua tarefa na sua velocidade, se

28
Programação Numérica

liberando para executar outras atividades e não ficando preso à


velocidade do gravador de CD ou DVD.
Os buffers são implementados em software (mais usado) ou hardware.
Normalmente são utilizados quando existe uma diferença entre a
taxa em que os dados são recebidos e a taxa em que eles podem ser
processados ou no caso em que essas taxas são variáveis.
Os buffers são mecanismos muito utilizados em aplicações
multimídia, em especial nas aplicações de streaming.

Dispositivos de entrada e saída


Dispositivos de entrada e saída são aqueles que permitem a
interação do processador com o usuário por meio da entrada e
saída de dados.

Existem três tipos de dispositivos:

„„ Dispositivo de entrada: transformam as informações de


entrada em dados para que possam ser processados pelo
sistema digital do computador, ou seja, permite que o
usuário envie informações para o computador. Exemplo:
teclado, microfone, scanner, joystick e mouse;

„„ Dispositivo de saída: transformam os dados de saída


em informações para que possam ser compreendidos
pelo usuário, isto é, permitem que o computador possa
enviar informações para o usuário. Exemplo: impressora,
caixas de som, sensores (movimento, temperatura etc.) e
monitor;

„„ Dispositivo de entrada e saída: funcionam tanto para


a entrada como para a saída de dados, ou seja, permite
a troca de informações entre o computador e o usuário.
Exemplo: modem e placa de rede.

Unidade 1 29
Universidade do Sul de Santa Catarina

Figura 1.11: Dispositivos de entrada e de saídaFonte: <http://1.bp.blogspot.com/_kij90uNIuyY/S-


SKaaFBSVI/AAAAAAAAABk/Z14-1dOcu8s/s1600/periferico%5B1%5D.png>

Software
O software é o componente lógico do sistema computacional, ou
seja, ele apresenta um conjunto de instruções necessárias para o
funcionamento do computador.

Existem dois grandes grupos de software: o básico e o aplicativo.


Veja a seguir a explicação mais detalhada sobre cada um deles:

„„ Software básico: são ferramentas para a criação e


execução de aplicações. Podem ser citados como
exemplos de softwares básicos os sistemas operacionais,
sistemas gerenciadores de banco de dados e linguagens
de programação.

„„ Software aplicativo: são programas utilizados


para solucionar um problema particular ou uma
determinada tarefa, como editar textos, ler e enviar
e-mails e escutar música.

30
Programação Numérica

Os softwares podem ser classificados também quanto a sua


natureza:

„„ Software customizado: são aqueles que atendem uma


demanda bem específica. Geralmente são construídos
por programadores contratados devido a uma demanda.

„„ Software comercial: São softwares genéricos que buscam


atender a uma determinada necessidade do mercado,
podendo ser adquirido em lojas ou em sites.

Informações
Entende-se por informação todo dado que sofreu processamento,
manipulação e organização de maneira que foi modificado,
quantitativa ou qualificativamente. É tudo aquilo que possibilita
a aquisição de qualquer tipo de conhecimento, ou seja, sempre
existirá informação quando algo veio a conhecimento que até
então se desconhecia.

Um jornal é composto basicamente por informações, mas não é


apenas na forma escrita que se armazena informação. Ela pode
estar contida também em uma música ou em qualquer coisa que
um ser humano consegue guardar em sua memória.

Claude Shannon, por meio de uma análise mais rigorosa da


transmissão da informação, criou a Teoria de Informação.
Para ele, os seguintes elementos sempre estão envolvidos na
transmissão de uma informação:

„„ Transmissor: quem envia a informação;

„„ Sinal: forma com que a informação é transmitida;

„„ Canal: meio utilizado no envio do sinal;

„„ Mensagem: conteúdo da informação;

„„ Ruído: dado que chega ao receptor além do que foi


intencionalmente enviado;

„„ Receptor: quem recebe a informação.

Unidade 1 31
Universidade do Sul de Santa Catarina

Segundo Shannon, quando uma pessoa está se comunicando, ela


(transmissor) emite ondas sonoras (sinal) por meio do ar (canal).
O ouvinte (receptor) recebe essas ondas sonoras que contêm as
frases (mensagem), podendo entender exatamente o que foi a
pessoa quis dizer, mas também pode entender diferente ou além
da mensagem (ruído).

Por meio do processamento e armazenamento das informações é


que os sistemas computacionais conseguem automatizar ou apoiar
atividades humanas.

Procedimentos ou tarefas
Todas as atividades que os sistemas computacionais realizam
ou permitem realizar são consideradas tarefas. Essas tarefas são
funcionalidades do sistema que são utilizadas pelos usuários para
satisfazer suas necessidades e metas.

Toda vez que mencionamos o termo tarefa, nos vem


imediatamente à mente a definição de um objetivo e um
conjunto de etapas que devemos percorrer para atingi-lo. Para
que uma tarefa seja completada ou cumprida, essas etapas ou
procedimentos devem ser concluídos de maneira sequencial para
que, ao final, consigamos atingir a meta.

A execução de uma tarefa pode ser realizada a partir de vários


procedimentos diferentes, dos quais cabe destacar:

„„ Procedimento previsto: procedimento padrão ou o


recomendado. Geralmente é o que surge e é reconhecido
espontaneamente por quem idealiza-o;

„„ Procedimento efetivo: procedimento que realmente é o


executado;

„„ Procedimento mínimo: sequência mínima de operações


necessárias para que a tarefa possa ser atendida.

Para uma mesma tarefa, existem um procedimento mínimo,


um procedimento previsto e vários efetivos, sendo que os
procedimentos previstos sempre devem ser compatíveis com o
procedimento mínimo.

32
Programação Numérica

Com isso, podemos verificar a complexidade de um computador


com todos os seus componentes, informações e procedimentos.
Se por um lado a informação propiciou a criação e o
desenvolvimento do computador, hoje podemos afirmar que
sem os sistemas computacionais a informação não teria evoluído
tanto nem teria a importância que possui hoje em dia no mundo
moderno.

Síntese

Nesta unidade você pode aprender um pouco sobre os sistemas


computacionais, sua história e seus componentes. Você viu
que ele surgiu na metade do século passado e que evoluiu
demasiadamente para chegar ao que é hoje em dia. Verificou
também que para executar diferentes tipos de software, ele
necessita de uma diversidade de hardwares que se comunicam
entre si para trabalharem de forma precisa e unificada.

Você pode notar que a informação foi a principal beneficiada


da evolução tecnológica e, se hoje o mundo não vive sem a
informação, ela mesma não vive sem os sistemas computacionais.
Por fim, você pode verificar que o computador trabalha na forma
de cumprimento de tarefas e, para que elas sejam concluídas, uma
série de procedimentos devem ser executados.

Unidade 1 33
Universidade do Sul de Santa Catarina

Atividades de autoavaliação

Ao final de cada unidade, você realizará atividades de autoavaliação. O


gabarito está disponível no final do livro didático. Esforce-se para resolver
as atividades sem ajuda do gabarito, pois assim você estará promovendo
(estimulando) a sua aprendizagem.

1) Microprocessador Intel Core 2 Duo, Conectiva Linux, Microsoft Word e


Multifuncional Lexmark Impact S308 são, respectivamente, exemplos
de:
a) Software, hardware, hardware e software.
b) Hardware, hardware, hardware e software.
c) Hardware, software, software e hardware.
d) Hardware, hardware, software e hardware.
e) Software, hardware, software e hardware.
2) Classifique os seguintes tipos de memória, levando em conta a
velocidade de acesso aos seus dados. Considere 1 como o tipo de
memória mais rápida.
( ) Memória RAM.
( ) Memória CACHE.
( ) Disco Rígido (HD).
3) Qual dos componentes seguintes é considerado o cérebro de um
microcomputador?
a) Unidade Lógica e Aritmética (ULA).
b) Registradores.
c) Memória ROM.
d) Unidade Central de Processamento (CPU).
e) Memória RAM.

34
Programação Numérica

Saiba mais

Se você desejar, aprofunde os conteúdos estudados nesta unidade


ao consultar as seguintes referências:

SILBERSCHATZ, A. et al. Sistemas Operacionais: conceitos e


aplicações. Campus, 2001.

TANENBAUM, A. Organização estruturada de


computadores. 4. ed. Editora: LTC.

Unidade 1 35
2
unidade 2

Lógica e Estrutura de
Programação

Objetivos de aprendizagem
„„ Introduzir as definições básicas de lógica e suas
aplicações, utilizando situações cotidianas.
„„ Apresentar os tipos primitivos, variáveis, constantes,
expressões aritméticas, relacionais e lógicas e os
comandos de entrada e saída.
„„ Definir estruturas sequencial, de seleção, repetição
e de controle e fluxo de execução por meio da
exemplificação de sua utilização.

Seções de estudo
Seção 1 A lógica e suas aplicações

Seção 2 Elementos essenciais dos algoritmos

Seção 3 Estruturas de controle de fluxo

Seção 4 Procedimentos e funções


Universidade do Sul de Santa Catarina

Para início de estudo


Atualmente utilizamos a palavra lógica de forma corriqueira e
sempre ligada à coerência e à racionalidade. Temos o hábito de
associar lógica diretamente à matemática, porém não notamos
sua utilização e associação com as demais ciências.

Podemos dizer que a lógica é o ramo da filosofia responsável


pelas regras do pensar bem, tornando-se, assim, um instrumento
do pensar. Aprender lógica significa treinar nosso raciocínio
para que ele, por meio de argumentos, produza pensamentos
verdadeiros.

Vamos lá!

Seção 1 – A lógica e suas aplicações


As técnicas de formalização, dedução e análise possibilitam a
validação de argumentos. Uma das técnicas para validação de
argumentos como verdadeiros ou não são os silogismos.

Observe:

I. Todo automóvel possui rodas.


Todo carro é um automóvel.
Portanto, todo carro possui rodas.

II. Todo metal possui massa.


Todo ferro é metal.
Portanto, todo ferro possui massa.

III. O amor é cego.


Deus é amor.
Stevie Wonder é cego.
Logo, Stevie Wonder é Deus.

38
Programação Numérica

Nos exemplos citados, observe que os dois primeiros (I e II) são


argumentos verdadeiros e o último (III) não. Isso comprova que,
apesar do aparente encadeamento lógico de um silogismo, nem
sempre sua estrutura é válida.

Podemos não nos dar conta, mas a lógica está presente em


nosso dia a dia. Toda vez que falamos, pensamos, escrevemos
ou agimos, procuramos fazer da forma correta, sendo necessário
organizar o pensamento, ou seja, usar a lógica. Os exemplos a
seguir demonstram que, mesmo sem dar-nos conta, utilizamos a
lógica para situações corriqueiras de nosso cotidiano.

I. A roupa está dentro do armário.


O armário está fechado.
Logo, para pegarmos a roupa teremos de abrir o armário.

II. Para comer é necessário comprar comida.


Para comprar comida é preciso ter dinheiro.
Para ter dinheiro é preciso trabalhar.
Portanto, temos de trabalhar para podermos comer.

O homem possui a habilidade de exteriorizar o


raciocínio por meio da palavra escrita ou falada, isto
é, ele consegue transformar algo abstrato e intangível
em algo compreensível. Esse raciocínio é expresso no
idioma de seu autor, porém pode ser traduzido para
qualquer outra língua que o seu conteúdo e significado
permanecem inalterados.

Da mesma forma, isso acontece com a lógica de programação.


Ela é criada por alguém especialista, porém pode ser escrita em
qualquer uma das linguagens existentes. A fim de não atrelar
o raciocínio original a nenhuma linguagem e seus detalhes
computacionais específicos, utiliza-se algoritmos.

Algoritmos
De maneira geral, podemos definir algoritmo como uma “receita’
para realizar determinada tarefa ou procedimento. Essa receita
precisa oferecer instruções bem definidas e não ambíguas,

Unidade 2 39
Universidade do Sul de Santa Catarina

de forma que seja possível executá-la mecanicamente em um


determinado período de tempo, ou seja, a partir de um estado
inicial, aplicamos uma sequência de ações claras e precisas e
produzimos um estado final previsível e bem definido.

É importante você compreender que um algoritmo


deverá gerar sempre o mesmo resultado final quando
executado sob as mesmas condições.

Nem sempre a implementação de um algoritmo será realizado


por um computador. Ele pode ser realizado por um autômato ou
por um ser humano.

Nem sempre também teremos para a resolução de um problema


apenas um algoritmo possível. Algoritmos diferentes podem
resolver o mesmo problema, podendo variar esforço, espaço,
tempo etc.

Exemplo disso é a forma com que limpamos uma sala.


Podemos retirar os tapetes, limpar a sala e recolocá-
los em seus lugares ou limpar a sala levantando parte
dos tapetes na medida em que vamos avançando.
Nitidamente verificamos que o primeiro é mais simples
de executar que o segundo, porém os dois realizam a
mesma tarefa e produzem o mesmo resultado.

Como você pôde ver, os algoritmos são utilizados para


representar o raciocínio original da solução, abstraindo os
detalhes computacionais de determinada linguagem de
programação. Após a criação algorítmica da solução, é realizado
o processo de codificação que nada mais é do que implementar
na linguagem escolhida a solução encontrada e utilizar suas
funcionalidades específicas.

Para escrevermos o primeiro exemplo de algoritmo, utilizando o


português coloquial, imaginem os passos necessários para trocar
a resistência de um chuveiro. Um problema bastante corriqueiro e
que fazemos sem nos dar conta dos detalhes que realizamos para
resolvê-lo.

40
Programação Numérica

Exemplo:

ƒƒ pegar uma escada;


ƒƒ posicionar a escada embaixo do chuveiro;
ƒƒ buscar uma resistência nova;
ƒƒ subir na escada;
ƒƒ abrir o chuveiro;
ƒƒ retirar a resistência queimada;
ƒƒ colocar a nova resistência;
ƒƒ fechar o chuveiro.

Perceba que, involuntariamente, realizamos uma sequência de


ações as quais qualquer outra pessoa ao trocar uma resistência
de chuveiro executaria. Com o intuito de determinar qual
será a primeira ação a ser executada e qual será a seguinte, foi
convencionado utilizar a sequenciação linear.

Na sequenciação linear as instruções são lidas de cima


para baixo, da esquerda para a direita, forma com que
já estamos acostumados quando lemos um texto.

Analisando o algoritmo citado, verificamos claramente que


o objetivo é trocar a resistência de um chuveiro, no entanto
podemos incluir uma outra informação importante no problema:
a resistência não está queimada. De acordo com o algoritmo
escrito anteriormente, ela seria trocada de qualquer jeito, mesmo
sem a necessidade. Então, para resolver esse problema, podemos
realizar um teste antes de executar a troca. Veja um novo exemplo
contemplando essa possibilidade:

Unidade 2 41
Universidade do Sul de Santa Catarina

Exemplo

ƒƒ pegar uma escada;


ƒƒ posicionar a escada embaixo do chuveiro;
ƒƒ buscar uma resistência nova;
ƒƒ ligar o chuveiro;
ƒƒ se a água não esquentar, então:
àà subir na escada;

àà abrir o chuveiro;

àà retirar a resistência queimada;

àà colocar a nova resistência;

àà fechar o chuveiro.

Observe no exemplo anterior que esse algoritmo resolve o


problema da troca desnecessária, pois vincula a execução de
alguns passos à condição de a água não esquentar. Caso a água
esquente, ou seja, o teste for falso, as ações para a troca da
resistência não serão executadas e a resistência não será trocada.

Apesar de atingir seu objetivo, em uma segunda análise, podemos


perceber que esse algoritmo ainda pode ser melhorado, uma vez
que é buscada a escada e uma resistência nova sem antes saber se
serão ou não necessárias. Para que isso não ocorra, basta deslocar
para cima o comando do teste. Segue exemplo otimizado:

Exemplo

ƒƒ ligar o chuveiro;
ƒƒ se a água não esquentar, então:
àà pegar uma escada;

àà posicionar a escada embaixo do


chuveiro;

àà buscar uma resistência nova;

àà subir na escada;

42
Programação Numérica

àà abrir o chuveiro;

àà retirar a resistência queimada;

àà colocar a nova resistência;

àà fechar o chuveiro.

Perceba que com a verificação deslocada para o início do algoritmo,


conseguimos evitar o esforço desnecessário, pegando a escada
e a nova resistência, apenas se a água não esquentar. É claro
que existem diversas maneiras para resolver esse problema e os
apresentados foram apenas alguns deles.

O que você deve ter em mente é que o objetivo


principal na solução desse tipo de problema é sempre
buscar uma forma de resolver um problema com
menos esforço e maior objetividade.

Voltando à solução do nosso problema: note que ele não prevê a


possibilidade de a resistência nova não funcionar e, com isso, não
conseguir atingir o objetivo. Uma nova alteração se faz necessária
para que uma nova resistência seja colocada até que o chuveiro
volte a esquentar a água.

Exemplo

ƒƒ ligar o chuveiro;
ƒƒ se a água não esquentar, então:
àà pegar uma escada;

àà posicionar a escada embaixo do


chuveiro;

àà buscar uma resistência nova;

àà subir na escada;

àà abrir o chuveiro;

Unidade 2 43
Universidade do Sul de Santa Catarina

àà retirar a resistência queimada;

àà colocar a nova resistência;

àà fechar o chuveiro;

àà ligar o chuveiro;

àà se a água não esquentar, então:

àà buscar uma nova resistência;

àà subir na escada;

àà abrir o chuveiro;

àà retirar a resistência queimada;

àà colocar a nova resistência;

àà fechar o chuveiro;

àà ligar o chuveiro;

àà se a água não esquentar, então:

àà buscar uma nova resistência;

àà subir na escada;

àà abrir o chuveiro;

àà retirar a resistência
queimada;

àà colocar a nova resistência;

àà fechar o chuveiro;

Conseguimos verificar que nosso algoritmo nunca terá fim, pois


não existem garantias de que após um determinado número de
trocas a água esquentará. Com isso, ficaremos realizando os
testes indefinidamente. Estamos muito perto do nosso objetivo,
porém temos o inconveniente de não saber o número exato de
testes da resistência.

44
Programação Numérica

Observando o algoritmo conseguimos notar que a resistência é


trocada por meio do mesmo conjunto de instruções:

ƒƒ se a água não esquentar, então:


àà abrir o chuveiro;

àà retirar a resistência queimada;

àà colocar a nova resistência;

àà fechar o chuveiro.

Então, em vez de repetir as instruções indefinidamente, podemos


alterar o fluxo de execução para que toda vez que for trocada a
resistência o teste de verificação seja executado, repetindo até que
a água esquente e não seja mais necessário trocar a resistência.
Porém, mesmo que o fluxo seja alterado, seria necessário repetir
as instruções indefinidamente. Para que isso não seja necessário,
utilizaremos uma estrutura de repetição com uma condição de
parada. Um exemplo de solução pode ser visualizado a seguir:

ƒƒ enquanto a água não esquentar, faça:


àà abrir o chuveiro;

àà retirar a resistência queimada;

àà colocar a nova resistência;

àà fechar o chuveiro.

Note que não é possível definir a quantidade de repetições,


porém é possível saber que solução do algoritmo possui um fim e
que esse fim está atrelado ao atendimento da condição definida.
Reescrevendo o algoritmo temos:

Unidade 2 45
Universidade do Sul de Santa Catarina

Exemplo

ƒƒ ligar o chuveiro;
ƒƒ se a água não esquentar, então:
àà pegar uma escada;

àà posicionar a escada embaixo do


chuveiro;

àà buscar uma resistência nova;

àà subir na escada;

àà abrir o chuveiro;

àà retirar a resistência queimada;

àà colocar a nova resistência;

àà fechar o chuveiro;

àà ligar o chuveiro;

àà enquanto a água não esquentar, faça:

àà abrir o chuveiro;

àà retirar a resistência queimada;

àà colocar a nova resistência;

àà fechar o chuveiro;

àà ligar o chuveiro.

Com essa solução, conseguimos garantir que um chuveiro sempre


será consertado e que fornecerá água quente.

E se tivéssemos, em vez de um, cinco chuveiros?

Em um primeiro momento, seria repetir o algoritmo para todos


os cincos chuveiros, como exemplificado:

46
Programação Numérica

Exemplo

ƒƒ ligar o chuveiro 1;
ƒƒ se a água não esquentar, então:
àà pegar uma escada;

àà posicionar a escada embaixo do


chuveiro;

àà buscar uma resistência nova;

àà subir na escada;

àà abrir o chuveiro;

àà retirar a resistência queimada;

àà colocar a nova resistência;

àà fechar o chuveiro;

àà ligar o chuveiro;

àà enquanto a água não esquentar, faça:

àà abrir o chuveiro;

àà retirar a resistência queimada;

àà colocar a nova resistência;

àà fechar o chuveiro;

àà ligar o chuvei ro;

ƒƒ ligar o chuveiro 2;
ƒƒ se a água não esquentar, então:
àà pegar uma escada;

àà posicionar a escada embaixo do


chuveiro;

àà buscar uma resistência nova;

àà subir na escada;

ƒƒ ligar o chuveiro 3;
ƒƒ se a água não esquentar, então:
àà pegar uma escada;

àà ligar o chuveiro 5;

Unidade 2 47
Universidade do Sul de Santa Catarina

No entanto, em vez de repetirmos o algoritmo cinco vezes,


podemos colocá-lo dentro de uma estrutura de repetição
controlada. Assim, poderíamos repetir quantas vezes desejássemos
e sem a necessidade de escrever o mesmo algoritmo muitas vezes.
Veja a seguir como ficaria a nova versão do algoritmo:

Exemplo

ƒƒ ir até o chuveiro 1;
ƒƒ enquanto a quantidade de chuveiros
testados for menor que 5, faça
àà ligar o chuveiro;

àà se a água não esquentar, então:

àà pegar uma escada;

àà posicionar a escada embaixo do


chuveiro;

àà buscar uma resistência nova;

àà subir na escada;

àà abrir o chuveiro;

àà retirar a resistência queimada;

àà colocar a nova resistência;

àà fechar o chuveiro;

àà ligar o chuveiro;

àà enquanto a água não esquentar,


faça:

àà abrir o chuveiro;

àà retirar a resistência
queimada;

àà colocar a nova resistência;

àà fechar o chuveiro;

àà ligar o chuveiro;

àà ir até o próximo chuveiro;

48
Programação Numérica

Enquanto a quantidade de chuveiros testados for menor que


cinco, é garantido que as instruções para realizar o teste e a troca
caso a resistência esteja queimada sejam executadas. Assim,
quando a condição de parada for falsa, isto é, todos os cinco
chuveiros já foram testados, nada mais será executado.

Ao chegarmos até aqui, conseguimos verificar que até mesmo


uma simples tarefa de trocar a resistência de um chuveiro pode
possuir variâncias e obstáculos, tornando-a complexa, porém não
impossível de realizar. É claro que qualquer pessoa ao se deparar
com as dificuldades encontradas pelo caminho é capaz de resolver
e atingir o objetivo final. Todavia, um programa de computador
tradicional não adquire experiências nem possui conhecimentos
prévios, o que significa dizer que todas as ações devem ser
previstas e detalhadas de tal maneira que o computador saiba o
que fazer quando determinado obstáculo aparece.

A pessoa responsável por instruir o computador


a realizar as ações detalhadas é denominado
programador.

Como você pôde notar, a linguagem utilizada para escrever os


algoritmos foi o português, porém correu-se um grande risco
quando se utilizou todas as formas e palavras contidas na língua.

Para evitar a ambiguidade na interpretação das


sentenças, o melhor é utilizar um conjunto de regras
com o objetivo de restringir e estruturar o uso da
linguagem. Esse português mais estruturado é uma
linguagem muito próxima da forma com que são
escritos os programas nas diversas linguagens de
programação.

O algoritmo pode ser representado de duas formas:

„„ textual: é aquela em que as instruções são escritas em


uma linguagem de fácil compreensão. Por esse motivo,
ela tem a vantagem de não exigir da pessoa que lerá o
algoritmo qualquer conhecimento prévio, uma vez que a
linguagem utilizada é a do cotidiano. Diversos exemplos
foram apresentados na seção anterior.

Unidade 2 49
Universidade do Sul de Santa Catarina

„„ gráfica: são formas mais puras, pois possibilitam expressar


em algumas figuras convencionadas, o que levaria enorme
quantidade de palavras para descrever. Demonstrando,
assim, uma visão mais fiel ao raciocínio original.

Ambas possuem vantagens e desvantagens e tanto


uma como a outra conseguem demonstrar com
bastante clareza o fluxo de execução de um algoritmo.

Apresentação gráfica de um algoritmo pode ser feita por meio de um


fluxograma. Para estabelecer um comparativo entre as duas formas
de representação de algoritmo, veja a seguir o fluxograma equivalente
ao exemplo anterior, em que se criou um algoritmo para verificar e
trocar as resistências de cinco chuveiros. Acompanhe:

50
Programação Numérica

Figura 2.1: Fluxograma


Fonte: Elaborado pelo autor

Unidade 2 51
Universidade do Sul de Santa Catarina

Estrutura de um algoritmo
Assim como existem diferentes formas de construir um algoritmo
para resolver determinado problema, também é possível adotar
diferentes estruturas para se escrever um algoritmo. Como
forma metodológica, a partir de agora para padronizar a forma
de apresentação do próximo exemplo de algoritmos a seguinte
estrutura será adotada:
Alguns conceitos informados na
1. Nome do algoritmo;
estrutura ainda são desconhecidos
até o momento, mas serão
esclarecidos em seguida. 2. Declaração das constantes e variáveis globais;

3. Criação dos procedimentos e das funções;

4. Indicador do início do algoritmo;

5. Código principal;

6. Indicação do final do algoritmo.

Atenção! Toda vez que você for estudar um algoritmo


aqui ele se apresentará nesse padrão. Itens como
“Declaração das variáveis globais” e “Criação dos
procedimentos e das funções” nem sempre estarão
presentes, mas os itens restantes sempre aparecerão
na ordem com que foram apresentados na estrutura
anterior.

Acompanhe a seguir a explicação da construção de um algoritmo


seguindo cada um dos itens da estrutura da anterior. Acompanhe:

1. Para a definição do nome do algoritmo, será sempre


utilizada a palavra reservada Algoritmo seguida do seu
identificador, como pode ser visualizado:

Algoritmo exemplo1;
...

52
Programação Numérica

Tal identificador deve ser único durante todo o algoritmo, ou


seja, nenhuma constante, variável, procedimento ou função
poderá ter o mesmo nome. O identificador poderá iniciar apenas
com letras e ser seguido de letras, números e sobrelinha (“_”). De
forma alguma, é permitida a inclusão de caracteres especiais ($,
%, á, - etc.). Essas regras também são válidas para a formação dos
identificadores das constantes e variáveis.

Podemos citar media, cateto, velocidade,


programa1 e algoritmo _ 2 como exemplos válidos
de identificadores, pois todos começam com letra e são
seguidos de letras, números ou sobrelinha.

Já 1valor, u$ e prova 1, não são considerados válidos, pois o


primeiro começa com número, o segundo possui caractere
especial e o último possui espaço em branco.

2. Sempre que aparecer a palavra reservada Const, significa


que a partir daquele ponto serão declaradas todas as
constantes globais do algoritmo. Para declarar uma
constante, é necessário criar um identificador, seguido
do igual (“=”) e do valor que tal constante terá durante
todo o algoritmo. Em seguida podemos visualizar a
declaração de constantes de um determinado algoritmo:

...
Const
valor1 = 10;
letraA = ‘A’;
...

3. As variáveis são precedidas pela palavra reserva Var. Toda


variável declarada deve possuir um identificador seguido
de dois pontos (”:”) e seu respectivo tipo.
Mais adiante falaremos
mais sobre os tipos das
variáveis.

Unidade 2 53
Universidade do Sul de Santa Catarina

...
Var
nota1 : real;
contador : inteiro;
possuiFilho : lógico;
...

4. Os procedimentos e as funções serão definidos e


explicados mais adiante.

5. O código principal será formado por uma ou mais


sentenças e estará compreendido entre os indicadores
de início e fim do algoritmo, palavras reservadas Início e
Fim, respectivamente. Aqui localizam-se as instruções
que solucionarão o problema que motivou a criação
do algoritmo. Essas instruções poderão ser chamadas
dos procedimentos e funções criados anteriormente ou
até mesmo comandos que, executados na sequência,
permitirão ao algoritmo resolver o problema gerador.

6. Toda sentença deverá terminar por ponto e vírgula (“;”).

Seção 2 – Elementos essenciais dos algoritmos


A partir de agora, conhecendo a estrutura adotada, você poderá
acompanhar melhor a explicação da construção dos algoritmos na
aplicação prática dada pelos exemplos a seguir.

Tipos primitivos
Como você viu, quando é necessário declarar uma variável,
precisa-se informar qual será o seu tipo, ou seja, qual o conjunto
de informações possíveis ela manipulará e armazenará.

54
Programação Numérica

Um computador manipula quatro conjuntos básicos de


informações denominados como tipos básicos ou primitivos. Os
quatro tipos primitivos são:

1. Inteiro: refere-se a qualquer dado pertencente ao


subconjunto dos números inteiros. Levando-se em
conta que na matemática o conjunto dos inteiros é um
conjunto infinito de valores e que isso é impossível de
ser representado em um computador, o tipo inteiro
restringe-se a um bloco definido de números.
Exemplos

a) Quantidade de ovos em uma dúzia: 12;


b) O carro possui 4 rodas;
c) O dia tem 24 horas;
d) Minha mãe possui 2 cães.

2. Real: é qualquer dado pertencente ao subconjunto dos


números reais. Da mesma forma que o tipo inteiro, o tipo
real restringe-se a um bloco de números, porém, por ser
um tipo não discreto, ou seja, não é possível determinar
qual o próximo valor de um número qualquer, o tipo
real perderá precisão, na medida em que a quantidade de
números dentro do intervalo for aumentando.
Exemplos

a) Minha tia pesa 65,300 kg;


b) A distância entre a minha casa e a faculdade é 1,375 km;
c) O valor do condomínio deste mês é R$203,45;
d) Faltam 23,5 anos para eu me aposentar;

3. Caractere: refere-se a qualquer dado pertencente ao


conjunto de caracteres alfanuméricos: numéricos (0..9),
alfabéticos (A..Z, a..z) e especiais (?, $, :, \ etc.).
Exemplos

a) O tipo sanguíneo dele é O;


b) O nome dela começa com a letra K;

Unidade 2 55
Universidade do Sul de Santa Catarina

c) A letra A aparece sete vezes nesta frase;


d) A opção escolhida no menu foi a de letra F.

Atenção! Existe outro tipo não primitivo de dados


chamado String. Uma string nada mais é do que uma
cadeia de caracteres. Diferentemente do caractere que
possui tamanho sempre igual a 1, a string pode variar
seu tamanho a partir de 0 posições.

4. Lógico: também conhecido como booleano, o tipo


primitivo lógico é o mais simples, pois apresenta apenas
Essa é forma que se convencionou
chamar as variáveis lógicas, pois
dois valores possíveis. A forma com que esses dois valores
elas foram inspiradas na Álgebra são chamados pode variar, porém sempre expressarão o
Booleana de George Boole. mesmo significado: um é o oposto do outro.
Exemplos

a) O quarto pode estar escuro ou claro;


b) O carro pode estar parado ou em movimento;
c) A tevê pode estar ligada ou desligada;
d) A janela pode estar aberta ou fechada.

Constantes
Toda vez que uma determinada informação não sofrer nenhuma
alteração durante toda a execução do algoritmo, podemos afirmar
que essa informação é constante e será declarada como tal.

O lado em que se posiciona o motorista de automóvel


no Brasil é uma constante, pois ele estará sempre no
lado esquerdo do veículo.

Variáveis
Toda vez que existir a possibilidade que determinado dado sofra
alteração durante a execução um programa, podemos afirmar que
esse dado é uma variável.

56
Programação Numérica

Quando uma variável é declarada, o sistema operacional reserva


um espaço na memória e referencia esse espaço ao nome da
variável. Então toda vez que uma variável é utilizada em um
programa, o sistema operacional sabe onde buscar ou guardar a
informação da variável.
Como o espaço na memória referenciado pela variável é único, para
que um valor entre o que estava anteriormente tem de sair, ou seja,
toda vez que se atribui um valor a uma variável, o valor que ela
possuía anteriormente é perdido.
O tamanho do espaço na memória reservado pelo sistema operacional
varia de acordo com o tipo da variável. Cada tipo ocupa um espaço
determinado, logo uma variável do tipo inteiro que ocupa 2 bytes
não poderia receber um valor real que ocupa 4 bytes, assim como não
podemos estacionar um carro em uma vaga para moto.

A nota dos alunos de uma determinada disciplina é uma


variável, pois ela não será a mesma para todos os alunos.

Uma forma de demonstrar a diferença entre constante e variável


seria construir um algoritmo para calcular o perímetro de um
círculo a partir do valor do raio informado. É de conhecimento de
todos que a fórmula utilizada para obter o perímetro de um círculo
é πr2, π possui valor constante de 3,1415... e r é o valor do raio do
círculo. Acompanhe.

Algoritmo perimetro;
Const
pi = 3.1415;
Var
r : real;
p : real;
Início
Imprimir(“Informe o valor do raio do
círculo: “);
Ler(r);
p = pi * r * r;
Imprimir(“O perímetro do círculo informado
é: “, p);
Fim.

Unidade 2 57
Universidade do Sul de Santa Catarina

Perceba na construção desse algoritmo que para esse cálculo tem-


se o valor de π como uma constante, pois seu valor será o mesmo
independentemente do círculo lido e r como uma variável, pois o
valor do raio dependerá diretamente do círculo lido.

Expressões aritméticas
Toda vez que existir uma expressão formada apenas por valores
inteiros ou reais e operadores aritméticos, podemos afirmar que
essa é uma expressão aritmética.

As operações básicas (adição, subtração, multiplicação e divisão)


da matemática representadas por um conjunto de símbolos (+, -,
*, /) são chamadas operadores aritméticos.

Exemplos

a) 5 + 10

b) 4 – 1

c) 9 * 2

d) 15 / 3

Incluem-se ainda nos operadores aritméticos as operações de


potenciação, radiciação, quociente e resto da divisão inteira,
respectivamente representados pelas palavras-chave pot, rad,
div e mod.

Exemplos

a) pot(2,5) = 32 – 2 elevado na 5a potência

b) rad(16) = 4 – raiz quadrada de 16

c) 15 div 2 = 7 – quociente da divisão inteira de 15 por 2

d) 15 mod 2 = 1 – resto da divisão inteira de 15 por 2

58
Programação Numérica

Uma operação aritmética pode ser simples, formada apenas por


dois valores e uma operação ou pode ser composta, formada por
diversos valores e operações, como podemos verificar no seguinte
exemplo:

Exemplos:

a) simples: 15 + 98

b) composta: 25 + 45 / (15 – 10) * 4 +


pot(3,3)

Resolver o primeiro exemplo é simples, mas como


podemos resolver o segundo, onde existem diversas
operações?

Assim como acontece na matemática, em algoritmos também


existem prioridades entre operadores, ou seja, determinadas
operações são realizadas antes das outras:

1. Inicialmente devem ser resolvidos os parênteses mais


internos.

2. Em seguida a potenciação e a radiciação (pot e rad).

3. Depois a multiplicação, divisão, quociente e resto da


divisão inteira (*, /, div e mod).

4. E só então a soma e a subtração (+ e –).

Caso as operações tenham a mesma prioridade,


devemos resolver da esquerda para a direita.

Acompanhe:

Unidade 2 59
Universidade do Sul de Santa Catarina

Exemplo

25 + 45 / (15 – 10) * 4 + pot(3,3)


25 + 45 / 5 * 4 + pot(3,3)
25 + 45 / 5 * 4 + 27
25 + 9 * 4 + 27
25 + 36 + 27
61 + 27
88

Expressões lógicas
Expressão lógica é toda expressão formada por operadores lógicos
ou relacionais e operandos do tipo lógico e seu resultado é sempre
um valor lógico. Têm-se operadores relacionais (ou lógicos)
quando se deseja comparar dois valores do mesmo tipo.

Em programação, os operadores lógicos são representados por:


igual (=), maior (>), menor (<), maior ou igual (>=), menor ou
igual (<=) e diferente (<>).

Exemplos

a) 5 + 4 = 45/5
9 = 9
V
b) 9 – (33/11) - rad(36) <> 0
9 – 3 - rad(36) <> 0
9 – 3 - 6 <> 0
6 - 6 <> 0
0 <> 0
F
c) pot(9,2) – 100 div 9 > 15 * 4
81 – 100 div 9 > 15 * 4
81 – 11 > 15 * 4
81 – 11 > 60
70 > 60
V

60
Programação Numérica

d) 99 – 66/3 <= 50 + 10 mod 7 * 9


99 – 22 <= 50 + 10 mod 7 * 9
99 – 22 <= 50 + 3 * 9
99 – 22 <= 50 + 27
77 <= 50 + 27
77 <= 77
V

Diferentemente dos operadores relacionais que tratam


de valores de qualquer tipo, os operadores lógicos
lidam somente com valores lógicos.

Na linguagem de programação, a comparação entre os valores


lógicos são representados pelo seguinte comando : OPERADOR
E e OPERADOR OU . No caso de modificação usa-se:
OPERADOR NÃO.

Com o objetivo de verificar todas as possibilidades de


combinações entre os valores lógicos e seus operadores, adota-se a
tabela verdade de cada um dos operadores. Veja a seguir como se
dá essa tabela:

Operação NÃO
a NÃO a
V F
F V

Operação E
a b aEb
V V V
V F F
F V F
F F F

Unidade 2 61
Universidade do Sul de Santa Catarina

Operação OU
a b a OU b
V V V
V F V
F V V
F F F

Acompanhe a seguir exemplos de aplicação da tabela verdade:

Exemplos

a) Se minha mãe deixar E eu tiver dinheiro, sairei com


meus amigos.
Tenho dinheiro, porém minha mãe não deixou eu sair. E
agora?

„„ Como podemos observar na tabela verdade do E, para


uma proposição ser verdadeira, as duas condições devem ser
verdadeiras. Como nesse caso apenas a segunda é verdadeira,
logo o resultado é falso. Com isso, eu não sairei com meus
amigos.

b) Se minha mãe deixar OU eu tiver dinheiro, sairei com


meus amigos.
Tenho dinheiro, porém minha mãe não deixou eu sair. E
agora?

„„ Como o operador lógico mudou, passei a ter mais possibilidade


de sair, uma vez que a tabela verdade do OU, indica que
apenas umas das condições precisam ser verdadeiras para que
a proposição seja verdadeira, logo eu sairei com meus amigos.

c) NÃO F OU 5 + 3 < 10
NÃO F OU 8 < 10
NÃO F OU V
V OU V
V

Quando existe em uma só expressão, operadores lógicos,


relacionais e aritméticos, a ordem de prioridade que deve ser
seguida é a seguinte: 1o operadores aritméticos, 2o operadores
relacionais e 3o operadores lógicos.

62
Programação Numérica

Atribuição
A utilização de variáveis não teria utilidade se não
conseguíssemos fazer com que valores fossem armazenados.
Para esse propósito, temos o comando de atribuição que permite
atribuir um valor a uma variável, porém seus tipos devem ser
compatíveis, ou seja, se temos uma variável inteira, apenas
poderemos atribuir valores inteiros a ela.

O símbolo utilizado para representar a atribuição é a seta para a


esquerda (<-) e estará entre a variável e o valor a ser atribuído.

Atenção! Cabe salientar que é obrigatória a existência


de uma variável no lado esquerdo, enquanto que
no lado direito teremos o valor a ser atribuído a essa
variável.
Esse valor poderá ser obtido de outra variável, de uma
constante ou uma expressão que resulte um valor de
um tipo compatível com a variável do lado esquerdo da
atribuição.

Exemplos

Var
nota1, nota2, media : real;
aprovado : lógico;
...
nota1 <- 7.5;
nota2 <- 6.8;
media <- (nota1 + nota2)/2;
aprovado <- media >= 7;
...

No trecho anterior do algoritmo que calcula a média de um


aluno e define se ele está aprovado ou não, podemos verificar
que as variáveis reais nota1 e nota2 recebem valores constantes
compatíveis com os seus respectivos tipos. Em seguida, à variável
real media é atribuída uma expressão cujo resultado também é
do tipo real. E, no último comando, a variável aprovado recebe o
resultado de uma comparação, ambos do tipo lógico.

Unidade 2 63
Universidade do Sul de Santa Catarina

Entrada de dados
Outra forma de permitir que uma variável armazene um valor
é a partir de dados fornecidos pelo usuário. Esse fornecimento
de informações pelo usuário chama-se entrada de dados e é
representada no algoritmo pela palavra reservada ler seguida de
uma variável entre parênteses.

Exemplos

Var
nota1, nota2, media : real;
aprovado : lógico;
...
ler(nota1);
ler(nota2);
media <- (nota1 + nota2)/2;
aprovado <- media >= 7;
...

No exemplo anterior, as notas eram informadas diretamente


no código, ou seja, toda vez que for necessário calcular a média
de determinado aluno e verificar se ele está aprovado ou não, é
necessário alterar os valores das notas diretamente no algoritmo,
tornando o processo pouco produtivo e prático. O ideal é que se
obtenha do usuário as notas e, com isso, calcula-se a média e se
foram suficientes para obter a aprovação.

Com o comando LER, utilizado no exemplo anterior,


conseguimos obter do usuário, as notas do aluno. Toda vez que
o algoritmo for executado, o aluno deverá informar a primeira
e segunda nota das provas para que o algoritmo possa calcular
a média e verificar se ele está aprovado. Com isso, ganhou-se
em interatividade e praticidade, tornando o algoritmo útil para
diversos usuários sem a necessidade de alteração.

64
Programação Numérica

Saída de dados
Assim como é importante receber dados do usuário, é essencial
que seja possível fornecer informações para ele também.

Um algoritmo que recebe dados, processa-os e no


final não exibe nenhum resultado ao usuário, não tem
muita utilidade. Por essa razão, a saída de dados é
um dos comandos mais utilizados quando se cria um
algoritmo.

O comando que indica a saída de dados é a palavra reserva


imprimir seguida das informações entre parênteses. Essas
informações podem ser valores constantes como números e
strings ou variáveis ou ainda a junção dos dois. Neste caso,
quando tivermos valores constante e variáveis, deveremos separá-
los por vírgula.

Exemplos

Var
nota1, nota2, media : real;
aprovado : lógico;
...
ler(nota1);
ler(nota2);
media <- (nota1 + nota2)/2;
aprovado <- media >= 7;
imprimir(“A média das provas é: “, media);
imprimir(“Aluno aprovado?”, aprovado);
...

Observe que no primeiro comando IMPRIMIR do algoritmo


anterior, temos a string (cadeia ou sequência de caracteres
bastante utilizada em algoritmos para representar uma frase ou
palavra) constante “A média das provas é: “ seguida da variável
media. O que acontece nesse caso é que a string mostrada assim
como ela foi informada gera o valor contido na variável media.
A mesma coisa acontece com o segundo comando. Será exibida
a string e, em seguida, o valor da variável aprovado.

Unidade 2 65
Universidade do Sul de Santa Catarina

Portanto, o que possibilita o informe ao usuário sobre


sua média é a utilização da saída de dados.

O comando IMPRIMIR não serve só para exibir informações


calculadas e obtidas. Ele serve também para informar ao
usuário o tipo de informação que o algoritmo está esperando
quando o comando de entrada de dados LER for executado.
No exemplo anterior, quando executado o algoritmo, ele ficará
aguardando que o usuário informe a nota da primeira prova,
porém o usuário não sabe disso, pois não foi informado. Uma
maneira simples de resolver esse problema seria utilizar o
comando IMPRIMIR para informar que o valor da primeira
prova deve ser inserido. Da mesma maneira, após o usuário
inserir a primeira prova, o algoritmo informará que agora é
necessário informar a nota da segunda prova. Veja a seguir
como fica o algoritmo modificado:

Exemplos

Var
nota1, nota2, media : real;
aprovado : lógico;
...
imprimir(“Informe a nota da Prova 1: “);
ler(nota1);
imprimir(“Informe a nota da Prova 2: “);
ler(nota2);
media <- (nota1 + nota2)/2;
aprovado <- media >= 7;
imprimir(“A média das provas é: “, media);
imprimir(“Aluno aprovado?”, aprovado);
...

Como você pôde ver, o algoritmo pode manipular dados do


tipo inteiro, real, caractere, string e lógico, armazenando-os em
variáveis ou constantes que devem ser previamente declaradas e
identificadas.

66
Programação Numérica

Seção 3 – Estruturas de controle de fluxo


Nesta seção você aprenderá a criar algoritmos mais complexos
que envolvem desvio do fluxo principal, sendo esse desvio
realizado por meio de uma decisão ou para a repetição de
instruções. Acompanhe.

Blocos
Uma das definições na linguagem de programação para bloco é
identificá-lo como um conjunto de comando que busca realizar
determinada função. Assim, sempre que for necessário agrupar
determinadas ações, utiliza-se bloco. As palavras reservadas Início
e Fim delimitam o começo e o final de cada bloco.

Assim, um algoritmo na sua forma mais simples pode


ser considerado um bloco e toda variável declarada
num bloco, tem validade somente dentro dele.

Acompanhe sua aplicação:

Exemplo

Algoritmo calculaMedia;
Var
nota1, nota2, media : real;
aprovado : lógico;
...
Início
...
imprimir(“Informe a nota da Prova 1: “);
ler(nota1);
imprimir(“Informe a nota da Prova 2: “);
ler(nota2);
media <- (nota1 + nota2)/2;
aprovado <- media >= 7;
imprimir(“A média das provas é: “, media);
imprimir(“Aluno aprovado?”, aprovado);
...
Fim.

Unidade 2 67
Universidade do Sul de Santa Catarina

Estrutura de decisão
Até agora vimos algoritmos que seguem uma linha única de
execução: o algoritmo começa a executar a partir de Início e segue
executando linha a linha até encontrar Fim. Agora pense na
situação a seguir.

E se necessitássemos que um determinado conjunto


de instruções fosse executado apenas se atendesse
uma condição específica? E se no exemplo do
algoritmo sobre a média do aluno quiséssemos emitir
uma mensagem de congratulação quando houvesse
aprovação? Como seria possível, já que o algoritmo
segue um fluxo sequencial de execução?

Para casos como esses, existem o que chamamos de estrutura


de decisão. Com a utilização de estruturas de decisão, podemos
escolher qual bloco de ações queremos executar de acordo com
uma condição definida. Tais condições serão sempre expressões
lógicas ou relacionais.
Para atender o problema proposto anteriormente, utilizaremos
estrutura de decisão. Essas estruturas podem ser do tipo simples
ou composto e a que mais se adéqua a resolução desse problema
é a estrutura de decisão simples, onde determinado conjunto de
instruções será executado se, e somente se, a condição definida
for satisfeita, caso contrário o algoritmo segue adiante.
A sintaxe da estrutura de decisão simples é exibida a seguir:

Se <condição>
Então
<comando>;
FimSe;

O comando condição – é uma expressão lógica que sempre


gerará um resultado lógico, ou seja, verdadeiro ou falso. Se
<condição> for verdadeira, o próximo comando a ser executado
é o comando que sucede o Então. Se for falsa, então o comando
do Então não é executado o fluxo segue a partir do próximo
comando após FimSe.

68
Programação Numérica

O único problema nessa estrutura de decisão, conforme


mostrado, é que só se consegue executar um comando caso a
condição do Se for verdadeira.

Mas como fazer para colocar mais de uma ação?

Isso será possível por meio da inclusão de um bloco no local do


comando. Assim, pode-se colocar quantos comandos desejar
entre Início e Fim. Acompanhe.

Se <condição>
Então
Início
<comando1>;
<comando2>;
...
<comandoN>;
Fim;
FimSe;

O exemplo a seguir mostra uma das formas de resolver o


problema de exibir a mensagem de congratulação ao aluno apenas
se ele estiver passado.

Exemplo

Algoritmo calculaMedia;
Var
nota1, nota2, media : real;
...
Início
...
imprimir(“Informe a nota da Prova 1: “);
ler(nota1);
imprimir(“Informe a nota da Prova 2: “);
ler(nota2);
media <- (nota1 + nota2)/2;

Unidade 2 69
Universidade do Sul de Santa Catarina

aprovado <- media >= 7;


imprimir(“A média das provas é: “, media);
Se (media > = 7)
Então
Imprimir(“Parabéns!!! Você está
aprovado.“);
FimSe;
...
Fim.

Caso fosse necessário, além de parabenizar o aluno aprovado,


solicitar a nota de recuperação de quem não conseguiu média seria
possível incluir o comando Se que testaria a média quando inferior
a 7. Tudo bem, funcionaria, mas não ficaria um código elegante e
estaríamos desperdiçando recursos de máquina, pois faríamos dois
testes seguidos, sendo que o segundo é a negação do primeiro.

Para resolver problemas, o correto seria utilizar a estrutura de


decisão composta. Nessa estrutura, além de termos a cláusula Então
que é executada quando a condição é verdadeira, temos também a
cláusula Senão, executada quando a condição é considerada falsa.

Veja aplicação dessa estrutura no exemplo a seguir:

Se <condição>
Então
<comando>;
Senão
<comando>;
FimSe;

Da mesma forma que acontece com o Então, também podemos


ter blocos de comandos no Senão. Cabe ressaltar que a estrutura
de bloco será utilizada apenas quando for necessário incluir mais
de um comando. Veja a seguir a sintaxe com os blocos:

70
Programação Numérica

Se <condição>
Então
Início
<comando1>;
<comando2>;
...
<comandoN>;
Fim;
Senão
Início
<comando1>;
<comando2>;
...
<comandoN>;
Fim;
FimSe;

Utilizando essa nova estrutura de decisão, escreveremos a seguir


o algoritmo que atende a necessidade de congratular o aluno que
passou direto e solicitar a nota da prova de recuperação do aluno
que não atingiu média:

Exemplo

Algoritmo calculaMedia;
Var
nota1, nota2, notarec, media : real;
...
Início
...
imprimir(“Informe a nota da Prova 1: “);
ler(nota1);
imprimir(“Informe a nota da Prova 2: “);
ler(nota2);
media <- (nota1 + nota2)/2;
aprovado <- media >= 7;
imprimir(“A média das provas é: “, media);
Se (media > = 7)

Unidade 2 71
Universidade do Sul de Santa Catarina

Então
imprimir(“Parabéns!!! Você está
aprovado.“);
Senão
Início
imprimir(“Informar a nota da prova de
recuperação:“);
ler(notarec);
Fim;
FimSe;
...
Fim.

Agora vamos imaginar que, além de fazer tudo o que fizemos


até agora, quisermos emitir uma mensagem diferenciada para
aqueles alunos que obtiveram nota acima de 9 e, além disso,
não permitir que alunos com média inferior a 3 faça prova de
recuperação. Para esse caso, devemos exibir que infelizmente o
aluno já está reprovado por média. Para isso, poderíamos tentar
fazer de novo um algoritmo com vários Se testando cada uma
das possibilidades, mas, como falado anteriormente, não é uma
solução elegante nem objetiva.

Existe em algoritmos a possibilidade de encadear vários Se e esse


tipo de ação é denominada estrutura de decisão encadeada, cuja
sintaxe você pode ver a seguir:

Se <condição>
Então
Se <condição>
Então
<comando>;
Senão
<comando>;
FimSe;
Senão
Se <condição>
Então
<comando>;

72
Programação Numérica

Senão
<comando>;
FimSe;
FimSe;

Da mesma forma que ocorreu nas estruturas de decisão


anteriores, é possível substituir o comando por um bloco.
Também é possível incluir outros Se dentro dos Se internos.
Uma das soluções de algoritmo para resolver o problema citado
anteriormente é descrito a seguir:

Exemplo

Algoritmo calculaMedia;
Var
nota1, nota2, notarec, media : real;
...
Início
...
imprimir(“Informe a nota da Prova 1: “);
ler(nota1);
imprimir(“Informe a nota da Prova 2: “);
ler(nota2);
media <- (nota1 + nota2)/2;
aprovado <- media >= 7;
imprimir(“A média das provas é: “, media);
Se (media > = 7)
Então
Se (media > = 9)
Então
imprimir(“Muito bem!!! Você foi muito
bem nesta disciplina!“);
Senão
imprimir(“Parabéns!!! Você está
aprovado.“);
FimSe;
Senão
Se (media > = 3)

Unidade 2 73
Universidade do Sul de Santa Catarina

Então
Início
imprimir(“Informar a nota da prova
de recuperação:“);
ler(notarec);
Fim;
Senão
imprimir(“Você não atingiu a média
mínima e está reprovado.“);
FimSe;
FimSe;
...
Fim.

Estrutura de repetição
Com a utilização das estruturas de decisão, conseguimos resolver
o problema de execução condicional que acontece com muita
frequência no nosso cotidiano e não teria como ser diferente em
algoritmos. Afinal, os algoritmos vieram para automatizar muitas
tarefas do nosso dia a dia.

E se agora, além de necessitarmos executar


determinados comandos de acordo com uma condição
estabelecida, fosse necessário também repetir diversas
vezes a execução de determinado conjunto de
instruções? Como procederíamos?

Imagine que no nosso algoritmo fosse necessário calcular a média


não só de um aluno, mas de todos os 35 alunos da turma. Como
proceder para atender esse requisito que agora nos foi imposto?

Novamente, a forma mais simples e nada elegante, seria


repetir a leitura das notas, o cálculo da média e a verificação da
aprovação. Mas com certeza deve existir um jeito mais correto e
menos trabalhoso do que essa solução. E tem: as estruturas de
repetição. Existem diversos tipos de estrutura de repetição. Mais
adiante você poderá visualizar cada uma delas:

74
Programação Numérica

1. Estrutura de repetição com variável de controle: para essa


estrutura utiliza-se a palavra reservada Para. Podemos utilizar
essa estrutura quando é conhecida quantas vezes será necessário
repetir determinado conjunto de instruções. Veja a seguir a
sintaxe da estrutura de repetição para:

Para Var de vi até vf passo p faça


<comando1>;
<comando2>;
...
<comandoN>;
FimPara;
...
Fim.

Onde:

Var é a variável de controle;

vi é o valor inicial da variável de controle;

vf é o valor final da variável de controle, isto é, o limite


que a variável deverá chegar para que a repetição seja
encerrada;

p é o valor de incremento da variável V.

Podemos entender por incremento como o ato de


somar um valor constante a uma variável. Geralmente o
valor do incremento é 1, mas nada impede que assuma
outros valores inteiros.

A estrutura de repetição com variável de controle é exatamente


o que necessitamos para resolver o problema de ler as notas
dos 35 alunos da turma e calcular sua média, informando ao
final se foram aprovados ou não, como você pode verificar no
exemplo a seguir:

Unidade 2 75
Universidade do Sul de Santa Catarina

Exemplo

Algoritmo calculaMedia;
Var
nota1, nota2, notarec, media : real;
...
Início
...
Para i de 1 até 35 passo 1 faça
imprimir(“Informe a nota da Prova 1: “);
ler(nota1);
imprimir(“Informe a nota da Prova 2: “);
ler(nota2);
media <- (nota1 + nota2)/2;
aprovado <- media >= 7;
imprimir(“A média das provas é: “, media);
Se (media > = 7)
Então
Se (media > = 9)
Então
imprimir(“Muito bem!!! Você foi
muito bem nesta disciplina!”);
Senão
imprimir(“Parabéns!!! Você está
aprovado.”);
FimSe;
Senão
Se (media > = 3)
Então
Início
imprimir(“Informar a nota da prova
de recuperação: “);
ler(notarec);
Fim;
Senão
imprimir(“Você não atingiu a média
mínima e está reprovado.”);
FimSe;
FimSe;
FimPara;
...
Fim.

76
Programação Numérica

Se fosse solicitado um algoritmo para calcular a média


de todos os alunos de qualquer uma disciplina do
curso?

Antes, quando foi solicitada a média de apenas uma turma,


sabíamos quantos alunos a turma possuía, mas agora essa
quantidade é desconhecida. Neste caso, utilizar a estrutura de
repetição Para já não é mais possível, pois ela trabalha com uma
quantidade de repetição conhecida. Repetir o código para ler
cada aluno também já não é mais possível, pois novamente não
sabemos o número de alunos da turma, portanto não teríamos
como repetir o mesmo código dentro do algoritmo. Poderíamos
pensar até em estimar um número total de alunos e utilizar
a estrutura de repetição Para, mas podemos cair no erro de
estimarmos a mais. Ou, pior, estimarmos a menos. Se isso
ocorrer, alguns alunos ficarão sem ter sua média calculada, por
causa do algoritmo mal elaborado.

Como foi informado anteriormente, existem algumas estruturas


de repetição e a Para é apenas uma delas. As outras duas
estruturas possuem um controle de fluxo de execução, ou seja,
possuem uma condição para que possam repetir o conjunto de
instruções. Essas duas outras estruturas diferem entre si pelo
momento em que verificam tal condição. Acompanhe:

2. Estrutura de repetição com controle de fluxo de execução no


início: esta estrutura é utilizada quando o teste de repetição do
conjunto de instruções é realizado no início cuja palavra reservada
para o comando no algoritmo é Enquanto. Veja sua aplicação:

Enquanto <condição> faça


comando1;
comando2;
...
FimEnquanto;

Os comandos dentro do Enquanto serão executados enquanto a


condição for verdadeira. No momento em que ela for falsa, sai da
repetição e continua o fluxo de execução a partir da instrução
seguinte ao FimEnquanto.

Unidade 2 77
Universidade do Sul de Santa Catarina

Pode acontecer de na primeira vez que a condição for testada


resultar em falso e o bloco de comandos não ser executada uma
única vez.

Repita
comando1;
comando2;
...
até <condição>;

3. Estrutura de repetição com controle de fluxo de execução


no fim: esta estrutura é utilizada quando o teste de repetição do
conjunto de instruções é realizado no fim e a palavra reservada
para o comando no algoritmo é Repita.

Os comandos dentro do Repita serão executados até que a


condição seja verdadeira. Isto é, enquanto a condição for falsa, os
comandos serão executados. No momento em que a condição
tornar-se verdadeira, a repetição é interrompida.

Diferentemente do Enquanto, os comandos do Repita


serão executados pelo menos uma vez, já que o teste
para saída da repetição está ao final da estrutura.

Agora que conhecemos mais essas duas estruturas de repetição,


poderemos resolver nosso problema. Agora o que se deve pensar
é em qual estrutura de repetição escolher. Como as duas possuem
praticamente a mesma função, fica a critério do programador
escolher qual estrutura de repetição escolher. Por essa razão, serão
exibidas as soluções utilizando a estrutura Enquanto e também a
Repita, deixando a seu critério a escolha por qual utilizar.

Exemplo Enquanto

Algoritmo calculaMedia;
Var
nota1, nota2, notarec, media : real;
existeAluno : caracter;
...

78
Programação Numérica

Início
...
existeAluno <- “S”;
Enquanto (existeAluno = “S”) faça
imprimir(“Informe a nota da Prova 1: “);
ler(nota1);
imprimir(“Informe a nota da Prova 2: “);
ler(nota2);
media <- (nota1 + nota2)/2;
aprovado <- media >= 7;
imprimir(“A média das provas é: “, media);
Se (media > = 7)
Então
Se (media > = 9)
Então
imprimir(“Muito bem!!! Você foi
muito bem nesta disciplina!”);
Senão
imprimir(“Parabéns!!! Você está
aprovado.”);
FimSe;
Senão
Se (media > = 3)
Então
Início
imprimir(“Informar a nota da prova
de recuperação: “);
ler(notarec);
Fim;
Senão
imprimir(“Você não atingiu a
média mínima e está reprovado.”);
FimSe;
FimSe;
imprimir(“Existem mais alunos para
calcular a média?“);
ler(existeAluno);
FimEnquanto;
...
Fim.

Unidade 2 79
Universidade do Sul de Santa Catarina

Exemplo Repita

Algoritmo calculaMedia;
Var
nota1, nota2, notarec, media : real;
existeAluno : caracter;
...
Início
...
Repita
imprimir(“Informe a nota da Prova 1: “);
ler(nota1);
imprimir(“Informe a nota da Prova 2: “);
ler(nota2);
media <- (nota1 + nota2)/2;
aprovado <- media >= 7;
imprimir(“A média das provas é: “, media);
Se (media > = 7)
Então
Se (media > = 9)
Então
imprimir(“Muito bem!!! Você foi
muito bem nesta disciplina!”);
Senão
imprimir(“Parabéns!!! Você está
aprovado.”);
FimSe;
Senão
Se (media > = 3)
Então
Início
imprimir(“Informar a nota da prova
de recuperação: “);
ler(notarec);
Fim;
Senão
imprimir(“Você não atingiu a
média mínima e está reprovado.”);
FimSe;
FimSe;
imprimir(“Existem mais alunos para
calcular a média?“);

80
Programação Numérica

ler(existeAluno);
Até (existeAluno <> “S”);
...
Fim.

Como podemos verificar, tanto em um exemplo como no outro,


o algoritmo pergunta ao usuário se existe mais algum aluno para
calcular a média. Como no Enquanto o teste é feito no início,
a variável existeAluno teve que ser iniciada com um valor válido
para passar na primeira vez. Já no Repita, o teste será feito após a
indagação ao usuário, por esse motivo não foi necessário iniciar a
variável. Outro detalhe que podemos notar é que a condição no
Repita é a condição do Enquanto negada.

Essa foi a forma utilizada para resolver o problema do


desconhecimento da quantidade de alunos da turma. É evidente
que existem outras soluções, como perguntar no início do
algoritmo quantos alunos a turma possui e fazer a repetição
tantas vezes quantas forem a quantidade de alunos.

Claro que todas as três estruturas de repetição trabalham com


uma quantidade de repetição finita. Não é computacionalmente
aceitável criar uma estrutura de repetição que não tenha um final
definido. Isso faria com quem a execução do algoritmo nunca
saísse da repetição, sem falar que tomaria conta do computador
gerando problemas na execução dos demais programas e
fatalmente acarretaria na aniquilação do processo que estivesse
rodando nosso algoritmo.

Apesar do fluxo principal de um algoritmo seguir uma sequência,


podemos alterá-la de forma a permitir que decisões sejam
tomadas para verificar qual desvio seguir ou até mesmo retornar a
um ponto do algoritmo, repetindo determinado trecho dele, sem
a necessidade de escrevê-lo diversas vezes.

Unidade 2 81
Universidade do Sul de Santa Catarina

Seção 4 – Procedimentos e funções


Quando existe um problema de grande complexidade, a melhor
forma de resolvê-lo é decompondo-o em vários pequenos problemas,
assim a complexidade de cada um deles individualmente é reduzida
e a solução do problema como um todo é facilitada pela resolução
de todos os problemas menores em que foi decomposto. Caso
algum ou alguns dos pequenos problemas ainda forem de grande
complexidade, este deverá novamente ser decomposto para que
se torne vários problemas menores e assim facilite sua resolução.
E continua sendo feito isso enquanto os problemas gerados pela
decomposição não percam sua dificuldade. A isso damos o nome de
refinamentos sucessivos.

Para cada pequeno problema decomposto,


construiremos um subalgoritmo, também chamado de
módulo.

Com a modularização, encontramos alguns benefícios, como a


possibilidade de testar cada um dos módulos individualmente,
facilitando a busca por erros, caso eles existam. Se encontrados erros,
a correção é facilitada, uma vez que trabalhando em uma pequena
parte do algoritmo reduziremos os riscos de efeitos colaterais no
código. E, por último, tal módulo pode ser reutilizado no mesmo
algoritmo ou em outros que possuírem esse problema. Isso se chama
reaproveitamento de algoritmo e é muito utilizado atualmente.

Utilizando o exemplo de cálculo de média dos alunos,


poderíamos decompô-lo em quatro problemas:

1. O primeiro passo seria obter as notas dos alunos.


2. Em seguida, seria preciso calcular a média das notas.
3. Seria preciso então verificar a aprovação do aluno.
4. Por fim obteríamos a nota da recuperação.
Para que seja possível implementar a modularização, utilizaremos
os comandos procedimentos e funções. O que difere entre eles é a
possibilidade de retorno de informações.

82
Programação Numérica

Enquanto a função efetua tal retorno, o procedimento


apenas processa as instruções, não retornando
nenhum valor para o módulo chamador.

A seguir, veja como se dá a sintaxe de ambos:

Procedimento <identificador> (<parâmetros>)


<variáveis>
Início
<comando1>;
<comando2>;
...
<comando>;
Fim;

Onde:

identificador– nome que o procedimento será conhecido


e invocado em todo o algoritmo;
parâmetros – forma com que valores serão passados ao
procedimento. Todo valor externo que for necessário para
o funcionamento do procedimento será informado por
meio dos parâmetros. Poderão existir procedimentos que
não necessitarão de parâmetros.

Função <identificador> (<parâmetros>) :


<tipoDoRetorno>
<variáveis>
Início
<comando1>;
<comando2>;
...
<comando>;
retornar <valor>;
Fim;

Unidade 2 83
Universidade do Sul de Santa Catarina

Onde:

identificador – nome que a função será conhecida e


invocada em todo o algoritmo;
parâmetros – forma com que valores serão passados à
função. Todo valor externo que for necessário para o
funcionamento da função será informado por meio dos
parâmetros. Poderão existir funções que não necessitarão
de parâmetros;
tipoDoRetorno – no momento em que a função estiver
sendo criada, é necessário informar qual tipo será o
retorno da função;
retornar <valor> – toda função deverá possuir esse
comando que indica o final da execução dentro do
módulo com a volta para o módulo chamador com
o valor informado. Tal valor deverá ser do tipo do
tipoDoRetorno.

Ao analisar os quatros problemas do algoritmo de cálculo de média,


poderíamos deixar a solução do primeiro no corpo do algoritmo
principal, o segundo e o terceiro seriam funções, uma vez que
retornariam alguma informação, e o quarto seria um procedimento,
já que não retornará nenhuma informação e todo o procedimento será
autocontido, ou seja, a obtenção da nota da recuperação e a verificação
da aprovação ficarão dentro do procedimento.

A seguir, criaremos as funções e os procedimentos que solucionarão o


segundo, terceiro e quarto problema, respectivamente:

Função mediaProvas(n1: real, n2: real) : real;


Var
m : real;
Início
m <- (n1 + n2)/2;
retornar m;
Fim;

Função verificaAprovacao(mediaFinal: real) :


lógico;

84
Programação Numérica

Var
aprov : lógico;
Início
aprov <- mediaFinal >= 7;
retornar aprov;
Fim;

Procedimento recuperacao;
Var
nota: real;
Início
imprimir(“Informar a nota da prova de
recuperação: “);
ler(nota);
Fim;

Podemos verificar que nos procedimentos e nas funções


anteriores, variáveis foram declaradas e utilizadas. Porém, cabe
salientar que elas terão validade apenas enquanto os módulos
existirem. No momento em que for atingido o fim, as variáveis
serão extintas e não mais conhecidas.

Para que os módulos sejam executados, devem ser


invocados no local onde devem iniciar sua execução.
Se possuírem parâmetros, eles devem ser passados
respeitando o seu tipo. Poderão ser passados valores
constantes ou variáveis e expressões do tipo do
parâmetro.

Veja a seguir como ficará o algoritmo do Exemplo Enquanto com


a modularização:

Exemplo Enquanto

Algoritmo calculaMedia;
Var
nota1, nota2, notarec, media : real;
existeAluno : caracter;
...

Unidade 2 85
Universidade do Sul de Santa Catarina

Início
...
existeAluno <- “S”;
Enquanto (existeAluno = “S”) faça
imprimir(“Informe a nota da Prova 1: “);
ler(nota1);
imprimir(“Informe a nota da Prova 2: “);
ler(nota2);
media <- mediaProvas(nota1, nota2);
aprovado <- verificaAprovacao(media);
imprimir(“A média das provas é: “, media);
Se (aprovado)
Então
Se (media > = 9)
Então
imprimir(“Muito bem!!! Você foi
muito bem nesta disciplina!”);
Senão
imprimir(“Parabéns!!! Você está
aprovado.”);
FimSe;
Senão
Se (media > = 3)
Então
Início
recuperacao();
Fim;
Senão
imprimir(“Você não atingiu a
média mínima e está reprovado.”);
FimSe;
FimSe;
imprimir(“Existem mais alunos para
calcular a média?“);
ler(existeAluno);
FimEnquanto;
...
Fim.

86
Programação Numérica

Síntese

Nesta unidade você pode aprender que é possível utilizar o


computador para realizar tarefas trabalhosas, maçantes ou até
mesmo praticamente impossíveis. Você viu que a forma com que
instruímos o computador do que ele deve fazer para cumprir tais
tarefas é por meio da criação de algoritmos.

Neste sentido, você viu que algoritmos nada mais são do que
receitas ou instruções passo a passo muito detalhadas para a
execução de determinada tarefa. Você verificou também que os
diversos comandos e estruturas nos permitem criar as instruções
para que o computador, por meio dos algoritmos, realizem o que
foi informado.

Atividades de autoavaliação

Ao final de cada unidade, você realizará atividades de autoavaliação. O


gabarito está disponível no final do livro didático. Esforce-se para resolver
as atividades sem ajuda do gabarito, pois assim você estará promovendo
(estimulando) a sua aprendizagem.

1) Toda vez que eu descrever a execução de uma atividade nos mínimos


detalhes, de forma a permitir que qualquer um possa executar essa
atividade apenas seguindo esses passos descritos estarei escrevendo
um algoritmo. Esta afirmação é:
a) ( ) Verdadeira.
b) ( ) Falsa.

Unidade 2 87
Universidade do Sul de Santa Catarina

2) Elabore um algoritmo que simule o funcionamento da opção Saque


de um caixa eletrônico. Toda vez que o usuário informar o valor que
desejar sacar, o algoritmo retornar a quantidade de notas de cada valor
que será disponibilizado. Considere que existem notas ilimitadas de 1,
2, 5 e 10.

Saiba mais
Se você desejar, aprofunde os conteúdos estudados nesta unidade
ao consultar a seguinte referência:

FORBELLONE, André Luiz V.; EBERSPÄCHER, Henri


Frederico. Lógica de programação: a construção de algoritmos
e estruturas de dados. 3. ed.. São Paulo: Pearson Prentice Hall,
2005.

88
3
unidade 3

Implementar Algoritmos em
Pascal

Objetivos de aprendizagem
„„ Conhecer as definições básicas de Lógica de Programação;

„„ Aprender o uso do algoritmo em Pascal como ferramenta


de desenvolvimento de programas;.
„„ Escrever programas para resolver qualquer problema
que por ventura apareça ou seja proposto;
„„ Compreender os principais procedimentos e funções do
programa Pascal.

Seções de estudo
Seção 1 Introdução à linguagem de programação

Seção 2 Desenvolvendo linguagem de programação no


Pascal
Seção 3 Procedimentos e funções do programa Pascal
Universidade do Sul de Santa Catarina

Para início de estudo


É por meio dos algoritmos que instruímos o computador a fazer
o que desejamos, porém, para que o computador entenda essas
coordenadas, é preciso que esses algoritmos sejam escritos em
alguma linguagem de programação existente no mercado.

Nesta unidade você aprenderá a utilizar a linguagem de


programação Pascal, considerada por muitos como uma
das melhores linguagens a ser utilizada para o ensino de
programação. Você verá que, diferentemente dos algoritmos
(escritos na língua portuguesa), praticamente todos os comandos
do Pascal são equivalentes a palavras em inglês.

Ao aprender essa linguagem de programação, você verá como é


a estrutura de um programa Pascal, entendendo como declarar
variáveis e criar programas. Você também verificará que existem
estruturas de decisão e de repetição no Pascal e aprenderá a criar
procedimentos e funções nessa linguagem.

Seção 1 – Introdução à linguagem de programação


Imagine um funcionário que faça tudo o que foi pedido, sem
reclamar e na hora em que foi solicitado, sem se importar em
trabalhar à noite e aos finais de semana, sem cobrar horas extras
ou tirar férias. O único porém é que ele não pensa e tudo o que
for necessário fazer deve ser explicado nos mínimos detalhes e
na língua que ele entende. Esse funcionário é o computador e a
única coisa que ele consegue entender são sequências de zero (0) e
um (1).

Fornecer todas as instruções necessárias para o computador executar


determinada tarefa seria muito penoso para o ser humano, uma vez
que a máquina entende apenas zero e um. Um programador teria
de decorar milhares de páginas de códigos binários apenas para
conhecer as instruções de um determinado processador.

90
Programação Numérica

Certamente, se nada fosse feito para melhorar a forma com


que os computadores são programados, não existiriam mais
programadores ou os que existissem seriam escassos e não dariam
vazão à demanda. Com isso, o uso dos computadores não teriam se
difundido tanto, uma vez que a quantidade de programas seriam
mínimos, atendendo apenas àqueles que pudessem pagar por isso.

Como hoje em dia o computador faz parte da vida de todos,


podemos deduzir que algo foi criado para melhorar a forma
com que as instruções são passadas e assim melhoraram a
produtividade dos programadores. A grande inovação foi o
desenvolvimento das linguagens de programação.

Uma linguagem de programação nada mais é do que


um conjunto de palavras e regras que expressam
as instruções que devem ser executadas pelo
computador.

Um conjunto de palavras formadas de acordo com as regras de


uma determinada linguagem de programação forma o código-
fonte de um software. Esse código-fonte é transformado em
código de máquina que é executado pelo computador.

Inicialmente as linguagens eram de baixo nível, ou seja, suas


instruções eram uma representação direta do código de máquina
a ser gerado, substituindo a sequência de zero e um, por um
conjunto de instruções que lidas por um leigo nada significam.
Um exemplo clássico é a linguagem Assembly. Veja:

Linguagem Assembly:

MOV r0, #0C ;load base address of string into r0


LOAD: MOV r1,(r0) ;load contents into r1
CALL PRINT ; call a print routine to print the
character in r1
INC r0 ;point to next character
JMP LOAD ;load next character

Unidade 3 91
Universidade do Sul de Santa Catarina

Em seguida, surgiram as linguagens de alto nível, que


procuraram deixar a programação mais perto da língua humana
do que da máquina. Desta forma, uma pessoa leiga podia,
dependendo do grau de complexidade do programa, entender o
que estava escrito em um determinado código-fonte.

Exemplos desse tipo de linguagem são: Pascal, Java,


PHP e C#.

Veja a seguir um exemplo de código escrito em PHP:

Linguagem PHP

print (“Bem vindos visitantes do InfoEscola!”);


print (“ Vamos contar até 50:”);
for($x=1;$x<=50;$x++) {
print $x;
print “ “;
}

if(4 == 2) {
print (“Fim do mundo! 4 é igual a 2!”);
} else {
print (“Ufa! 4 é diferente de 2”);
}
?>

Todo programa escrito em uma linguagem de programação


deve ser traduzido para a língua entendida pela máquina e esse
processo é realizado pelo compilador. Um compilador é um
programa que pega um código-fonte escrito em uma determinada
linguagem de programação e o transforma em código de
máquina, gerando assim um software executável (extensão ‘.exe’
no Windows). Para fazer essa transformação, o código passa por
algumas fases dentro do compilador, acompanhe:

92
Programação Numérica

1. A primeira é a análise léxica do que foi escrito, ou seja,


verificar se todas as palavras utilizadas no código-fonte
estão dentro do conjunto de palavras reconhecidas da
linguagem.

2. A segunda é a análise sintática. Nesta fase é verificado


se a sequência de palavras escritas no programa se
encaixam dentro da gramática da linguagem.

3. A próxima fase é a análise semântica do que foi escrito,


ou seja, verificar se o que foi escrito faz sentido na
linguagem de programação escolhida.

É importante você compreender que não basta escrever um


programa com palavras pertencentes ao conjunto de termos
existentes dentro de uma linguagem de programação, esse
programa deve fazer sentido.

Fazendo uma analogia à língua portuguesa, temos a seguinte


situação:

a) Pense na frase A casa é magra.

b) Observe que nela se utilizam palavras da língua


portuguesa (análise léxica) e respeita-se a gramática da
língua (análise sintática), uma vez que a frase é formada
por sujeito (A casa), verbo (é) e predicado (magra).

c) Porém, ela não faz sentido (análise semântica), pois a


casa pode ter vários adjetivos, mas com certeza ela não
pode ser qualificada como magra ou gorda. Ela pode ser
bonita ou feia, grande ou pequena, clara ou escura, mas
nunca ser magra.

Portanto, um código-fonte só poderá ser traduzido


para a linguagem de máquina e consequentemente
se transformar em um programa de computador se
passar pelas três fases descritas (análise léxica, sintática
semântica).

No mercado, atualmente, existem dezenas ou até centenas de


linguagens de programação e cada uma tem o seu propósito e

Unidade 3 93
Universidade do Sul de Santa Catarina

razão de existir. Uma linguagem que é a melhor para a situação


A, às vezes, pode ser uma das piores na situação B. Portanto,
seria incorreto definir a linguagem A ou B como a melhor
linguagem do mercado, pois ela pode ser boa em uma situação e
péssima em outra.

Outros itens podem ser analisados quando se trata de linguagem


de programação, porém esse não é o objetivo principal desta
disciplina. Você poderá consultar as indicações no final desta
unidade ou estender essa busca na internet que possui uma vasta
bibliografia disponível. Por motivos didáticos, vamos nos ater
a explicar como funciona a Linguagem de Programação pela
estrutura Pascal. Acompanhe.

Seção 2 – Desenvolvendo linguagem de programação


no Pascal
Para o ensino de programação, uma das linguagens mais
indicadas é a Pascal que possui uma estrutura mais rígida com o
intuito de estimular disciplina e maior organização.

Criada em 1970 por Niklaus Wirth, com o objetivo de fomentar a


utilização das linguagens estruturadas, Pascal é uma linguagem que
recebeu esse nome em homenagem ao matemático Blaise Pascal.

Comercialmente, a linguagem Pascal foi sucedida


pela Object Pascal e está presente nas IDEs (Integrated
Development Enviroment ou, em português, Ambiente
Integrado para Desenvolvimento de software) de
desenvolvimento Delphi, Kylix e Lazarus.

Pascal não é case sensitive, ou seja, não possui diferenciação entre


letras maiúsculas e minúsculas. Portanto, uma variável declarada
como Nome pode ser acessada por nome, NOME, nomE etc.
Porém, uma boa prática a ser adotada é utilizar sempre letra
minúscula durante toda a programação.

94
Programação Numérica

Estrutura de um programa Pascal


Um programa Pascal está dividido em quatro partes. São elas:

1. Cabeçalho: definição do nome do programa e


importação das bibliotecas dos procedimentos e das
funções que serão utilizados;

2. Declaração de variáveis: declaração das constantes e


variáveis que serão utilizadas durante o programa. No
Pascal, uma variável deve ser declarada antes de ser
utilizada;

3. Definição de procedimentos e funções: definição dos


procedimentos e das funções que serão utilizadas durante o
programa. Lembre-se sempre que o Pascal possui inúmeros
procedimentos e funções predefinidos, portanto, verifique
se não existe a função ou o procedimento antes de criá-lo;

4. Corpo do programa: local onde se encontra a lógica


do programa, especificadas, por meio dos comandos da
linguagem, as ações do programa.

Veja a seguir um exemplo da linguagem de programação Pascal:

program exemplo1;
uses crt
var
p1, p2, media : real;

function calculaMedia(n1, n2: real) :


real;begin
calculaMedia := (n1 + n2) / 2;
end;
begin
clrscr;
writeln(‘Informe a nota da P1: ’);
readln(p1);
writeln(‘Informe a nota da P2: ’);
readln(p2);
media := calculaMedia(p1,p2);
writeln(‘A média final foi: ’, media);
end.

Unidade 3 95
Universidade do Sul de Santa Catarina

Assim como toda linguagem de programação, Pascal possui um


conjunto de palavras reservadas que são de utilização exclusiva da
linguagem. Em outras palavras, nenhum programa, constante,
variável, procedimento ou função poderá ter nome igual a uma
dessas palavras reservadas. Veja a seguir algumas das palavras
reservadas:

ABSOLUTE AND ARRAY BEGIN CASE


CONST DIV DO DOWTO ELSE
EXTERNAL FILE FOR FORWARD FUNCTION
GOTO IF IMPLEMENTATION IN INTERFACE
INTERRUPT LABEL MOD NIL NIT
OF OR PACKED PROGRAM RECORD
REPEAT SET SHL SHR STRING
THEN TO UNIT UNTIL USES
VAR WHILE WITH XOR
Quadro 3.1: Comandos do Pascal
Fonte: Elaborado pelo autor

É importante você saber que todo comando na


linguagem Pascal deverá ser finalizado pelo ponto
e vírgula “;”, com exceção da palavra reservada end,
que indica o final do programa. Neste caso, ele será
sucedido pelo ponto-final “.”.

Veja a seguir a explicação de cada parte de uma estrutura de um


programa em Pascal.

a) Variáveis
Variáveis são utilizadas para armazenar valores que serão
utilizados posteriormente pelo programa.

Simplificando, podemos afirmar que Pascal trabalha com cinco


tipos predefinidos de dados. São eles:

1. Inteiro: utilizado para armazenar valores inteiros. A


palavra reservada INTEGER é usada para declarar
variáveis desse tipo.
Exemplo:
idade, diasUteis : integer;

96
Programação Numérica

2. Real: utilizado para armazenar valores reais. A palavra


reservada REAL é usada para declarar variáveis desse
tipo.
Exemplo:
preco, media : real;

3. Caractere: utilizado para armazenar um caractere. A


palavra reservada CHAR é usada para declarar variáveis
desse tipo.
Exemplo:
sexo, tipoLeite : char;

4. String: utilizado para armazenar uma sequência de


caracteres. A palavra reservada STRING é usada para
declarar variáveis deste tipo e deve ser sucedida pelo
tamanho da string entre colchetes.
Exemplo:
nome : string[50];
endereco : string[122];

5. Lógico: utilizado para armazenar valores lógicos


(verdadeiro ou falso). A palavra reservada BOOLEAN
é usada para declarar variáveis desse tipo, e TRUE e
FALSE são os únicos valores que esse tipo aceita receber.
Exemplo:
aprovado, diaUtil : boolean;

Todas as variáveis utilizadas pelo programa deverão ser


declaradas no bloco reservado para tal finalidade. Ele localiza-se
logo após o cabeçalho do programa e a palavra reservada VAR
marca seu início. Observe:

Exemplo:

program exemplo2;
uses crt
var
idade, diasUteis : integer;
preco, media : real;
sexo, tipoLeite : char;

Unidade 3 97
Universidade do Sul de Santa Catarina

nome : string[50];
endereco : string[122];
aprovado, diaUtil: boolean;
...

Para definir o nome de uma variável, algumas regras devem ser


observadas:

„„ toda variável deve iniciar sempre com uma letra;


„„ também deve ser seguida de letra, número ou sobrelinha “_”;
„„ não deve possuir espaço em branco e caracteres especiais,
como letras acentuadas e demais símbolos, como à, ê, í, õ,
ü, $, #, *, ( etc.
„„ Não pode ser uma palavra reservada;
„„ O tamanho não pode ultrapassar 127 caracteres.
Exemplos:

Nomes válidos Nomes inválidos


ObtemMediaGeral Obtem Média Geral
Funcao_2 2_Funcao
AvisaGeral AvisaGeral!

Quadro 3.2: Exemplos de nomes válidos e inválidos


Fonte: Elaborado pelo autor

b) Atribuição
Embora a maioria das linguagens de programação utiliza o sinal de
igual “=” para representar a atribuição de valores a variáveis, no Pascal
o símbolo usado é o dois-pontos seguido do sinal de igual “:=”.

Exemplo:

program exemplo3;
uses crt

98
Programação Numérica

var
idade, diasUteis : integer;
preco, media : real;
sexo, tipoLeite : char;
nome : string[50];
endereco : string[122];
aprovado, diaUtil: boolean;
begin
idade := 15;
preco := 1.99;
sexo := ‘M’;
nome := “Fulano“;
aprovado := true;
diaUtil := false;
...

c) Saída de dados
Para exibir o valor de alguma variável ou alguma mensagem na
tela do computador, o Pascal disponibiliza os comandos WRITE
e WRITELN. Enquanto o comando WRITE imprime na
tela e o cursor permanece no final da mensagem exibida, o
WRITELN exibe a mensagem na tela e posiciona o cursor na
próxima linha.

Caso seja necessário colocar dentro do mesmo comando


WRITE/WRITELN strings constantes e valores de variáveis, é
necessário separá-los por vírgula. Você pode verificar no exemplo
a seguir que a constante “A idade calculada é de: “ e valor
da variável idade pertencem ao mesmo comando WRITELN,
apenas foram separados pela vírgula “,”.

Exemplo 1:

...
var
idade: integer;
begin
idade := 15;

Unidade 3 99
Universidade do Sul de Santa Catarina

writeln(“A idade calculada é de: “, idade, “


anos.“);
...

Tela
A idade calculada é de 15 anos.

Exemplo 2:

...
begin
write (“Esta mensagem “);
writeln (“e esta mensagem, aparecerão na
mesma linha.“);
writeln(“Enquanto esta mensagem será exibida
na próxima linha.“);
...

Tela
Esta mensagem e esta mensagem, aparecerão
na mesma linha.
Enquanto esta mensagem será exibida na
próxima linha.

d) Entrada de dados
O Pascal utiliza READ e READLN para fazer a entrada
de dados via teclado nos programas. Tanto READ quanto
READLN armazenam o valor digitado via teclado na respectiva
variável. Quando o programa executa o comando de entrada
de dados (READ ou READLN), ele fica aguardando que a
informação seja fornecida pelo usuário. Para isso, o cursor ficará
piscando na tela e toda vez que o usuário pressionar uma tecla ela
será ecoada na tela.

O programa repetirá esse procedimento até que a tecla ENTER


seja pressionada, neste momento, o valor informado é colocado
dentro da variável em memória e o programa segue adiante.

100
Programação Numérica

A diferença entre o READ e o READLN está exatamente


neste instante. Enquanto que no primeiro o cursor
permanece no mesmo local, no segundo, o cursor é
posicionado na linha seguinte.

Veja a aplicação desses comandos nos exemplos a seguir:

Exemplo 1:

program calculaMedia;
uses crt
var
p1, p2, media : real;
begin
clrscr;
write(“Digite a nota da P1: ”);
readln(p1);
write(“Digite a nota da P2: ”);
readln(p2);
media = (p1 + p2) / 2;
writeln(“A média geral é: “, media);
end.

Exemplo 2:

program calculaAreaCirculo;
uses crt
var
raio, area : real;
begin
clrscr;
write(“Digite o raio do círculo: ”);
readln(raio);
area = PI * sqr(raio);
writeln(“A área do círculo informado é: “,
area);
end.

Unidade 3 101
Universidade do Sul de Santa Catarina

e) Compilação de um programa Pascal


Toda vez que um programa Pascal é escrito, ele precisa ser
compilado e linkado para então gerar um arquivo executável
no sistema operacional. Como você viu, a compilação submete
o arquivo fonte a várias análises. Se ele passar por todas
elas, é então gerado um código objeto e então linkado, que
permite a criação de um arquivo executável. Esse arquivo será
executável apenas no sistema operacional em que foi compilado
e linkado, ou seja, se um arquivo fonte foi compilado e linkado
no Windows, apenas poderá ser executado nesse sistema
operacional. Caso tenha sido no Linux, apenas no Linux é que
poderá se executá-lo. O mesmo vale para os demais sistemas
operacionais.

Existem diversos compiladores Pascal no mercado, como: Turbo


Pascal da Borland e Free Pascal. Para compilar e testar o exemplo
de programa aqui sugerido, será utilizado a seguir o Free Pascal.
Acompanhe o passo a passo sobre a utilização do Free Paschal:
Para efetuar o download e a
instalação do Free Pascal, acesse o
site <www.freepascal.org> e siga 1. Para a criação de um programa no Free Pascal, inicialmente
as instruções lá contidas. O endereço deve-se criar um novo arquivo selecionando na opção FILE >
do site está disponível também no NEW no menu de opções como indicado na figura a seguir:
EVA da disciplina.

Figura 3.1: Criando um novo programa Pascal


Fonte: Free Pascal (2010)

102
Programação Numérica

Figura 3.2: Novo programa Pascal criado


Fonte: Free Pascal (2010)

2. A partir deste momento, você já pode começar a escrever o


programa desejado.

3. Ao terminar ou a qualquer momento, você pode salvar o


programa. Para isso, selecione a opção FILE > SAVE AS... e
informe o nome do arquivo em que será salvo.

Figura 3.3: Salvando o programa


Fonte: Free Pascal (2010)

Unidade 3 103
Universidade do Sul de Santa Catarina

Figura 3.4: Nomeando o programa


Fonte: Free Pascal (2010)

4. Depois que o programa estiver pronto, você deve compilá-


lo, selecionando a opção COMPILE > COMPILE no menu ou
pressionando as teclas Alt + F9.

Figura 3.5: Compilando programa


Fonte: Free Pascal (2010)

Se o programa possuir erros, a mensagem FAILED TO


COMPILE... será exibida na janela de compilação, juntamente
com a quantidade de erros encontrados. Uma melhor descrição
aparecerá em uma janela inferior ao editor de programas.

104
Programação Numérica

Figura 3.6: Falha na compilação do programa


Fonte: Free Pascal (2010)

Observe que, no caso do programa escrito


anteriormente, o erro apontado foi a utilização de
aspas em vez de apóstrofos para delimitar as strings.

5. Corrigidos os erros, deve-se compilar novamente o programa.


Caso não exista mais nenhum problema nele, a mensagem
DONE. será exibida.

Figura 3.7: Programa compilado


Fonte: Free Pascal (2010)

Unidade 3 105
Universidade do Sul de Santa Catarina

6. Após a compilação, é necessário realizar o MAKE para que


seja criado o executável. Para tanto, selecione a opção COMPILE
> MAKE. Se tudo ocorrer conforme o esperado, a mensagem
DONE. será exibida.

Figura 3.8: Criando o executável


Fonte: Free Pascal (2010)

7. Depois do programa escrito, compilado e executável gerado, é


preciso executar o programa. É possível ver isso a partir do Free
Pascal. Para tanto, basta acessar a opção RUN > RUN no menu
principal ou pressionar as teclas Ctrl + F9. Veja:

Figura 3.9: Executando o Programa


Fonte: Free Pascal (2010)

106
Programação Numérica

8. A partir deste momento, as instruções contidas no programa


serão executadas.

Figura 3.10 e 3.11: Adicionando informações ao programa


Fonte: Free Pascal (2010)

9. Quando o programa chegar ao final ou caso ocorra algum erro


não previsto, a tela de edição do programa voltará a ser exibida.
Veja:

Unidade 3 107
Universidade do Sul de Santa Catarina

Figura 3.12: Tela de edição do programa


Fonte: Free Pascal (2010)

É claro que o Free Pascal possui inúmeras


funcionalidades que não foram descritas aqui, mas
você pode e deve explorar seus recursos no próprio
programa ou até mesmo no site Free Pascal (www.
freepascal.org) para que eles possam ajudá-lo a
desenvolver seus programas.

Nas linguagens de programação, existe a possibilidade de


escrever comentários para explicar o funcionamento de
determinado trecho de código ou justificar a criação de uma ou
mais variáveis. No Pascal, existem duas formas de criar-se um
comentário:

1. a primeira é envolver o comentário com chaves {...};

2. a segunda, envolver com parênteses seguido de asterisco e


asterisco seguido de parênteses(*...*).

Toda vez que o compilador encontrar um abre chaves


({) ele passará a desprezar todos os caracteres até
encontrar um fecha chaves (}). O mesmo ocorrerá para
o (*...*).

108
Programação Numérica

É importante salientar a necessidade de que para cada


comentário iniciado deve haver um final, pois caso contrário
corre-se o risco de não compilar o programa.

Dica! Muitos editores de programas alteram a cor da


letra e até mesmo a fonte quando um comentário é
inserido. Isso possibilita ao programador verificar o que
é comentário e o que é código-fonte normal.

Toda variável no programa deve possuir um comentário


informando qual o seu propósito. Também cada função e
procedimento deverão ter um comentário no início, descrevendo
sua utilidade e o que significa cada parâmetro, se existir. Veja no
exemplo:

Exemplo:

program exemplo1;
uses crt
var
p1, { variável utilizada para armazenar a
nota da primeira prova }
p2, { variável utilizada para armazenar a
nota da segunda prova }
media : real;{ variável utilizada para
armazenar a média das provas }

(*************************************************
************************
* Função responsável por calcular a média de
duas notas. *
* n1: valor da nota da primeira prova.
*
* n2: valor da nota da segunda prova.
*
* retorno média aritmética das duas notas
*
************************************************
*************************)
function calculaMedia(n1, n2: real) : real;
begin

Unidade 3 109
Universidade do Sul de Santa Catarina

calculaMedia := (n1 + n2) / 2;


end;

begin
clrscr;
writeln(‘Informe a nota da P1: ’);
readln(p1);
writeln(‘Informe a nota da P2: ’);
readln(p2);
media := calculaMedia(p1,p2);
writeln(‘A média final foi: ’, media);
end.

f) Expressões
Expressão é uma combinação de operandos, operadores e
símbolos gráficos com o objetivo de obter um resultado de um
problema proposto.

Os símbolos gráficos dentro das expressões são representados


pelos parênteses que servem para indicar as prioridades das
operações na expressão.

Os operandos podem ser constantes ou variáveis. Já os operadores


são operações que serão aplicadas sobre os operandos de acordo
com o tipo de dado. Podem ser classificados em Unários e
Binários, de acordo com o número de operandos: nos Unários a
quantidade de operandos é um e nos Binários, dois.

As expressões necessitam de uma ordem de execução para


casos em que existam várias operações definidas. Essa ordem
de execução é chamada de Prioridade das Operações e devem
respeitar os seguintes critérios:

1. Parênteses
2. Operadores Unários @ not

3. Operadores Multiplicativos * / div mod

4. Operadores Aditivos + - and or xor shl shr

5. Operadores Relacionais = <> < > <= >= in

110
Programação Numérica

No Pascal, existem três tipos básico de expressões:

„„ Expressões Numéricas: todos os operandos e o resultado


são números. Ex.: 21*5+7;

„„ Expressões Literais: todos os operandos e o resultado


são dados do tipo STRINGS, ou seja, possui uma
variável. Ex.: “Minha casa” + “ é azul.”;

„„ Expressões Lógicas: o resultado é lógico, ou seja, só


pode ser verdadeiro ou falso. Refere-se aos dados do tipo
BOOLEAN em Pascal. Apesar de possuir um resultado
lógico, seus operandos podem ser qualquer tipo de dados.
Ex.: (5 + 3) >= (450 / 190).

Os operadores podem ser:

„„ De Atribuição : =
Utilizado para atribuir um valor a uma variável. Os dois
lados da atribuição devem ser do mesmo tipo, ou seja,
se existir uma variável inteira recebendo uma expressão,
essa expressão deve resultar em um valor inteiro.

„„ De Concatenação: +
Utilizado para unir duas strings.

„„ Operadores Aritméticos
Utilizados em operações aritméticas com números reais e
inteiros.

+ Adição
- Subtração
* Multiplicação
/ Divisão real
div Divisão inteira
mod Resto da divisão inteira

Quadro 3.3: Operadores aritméticos


Fonte: Elaborado pelo autor

„„ Operadores Relacionais
Utilizados para comparar dados do mesmo tipo, sempre
resultando um valor lógico, TRUE ou FALSE.

Unidade 3 111
Universidade do Sul de Santa Catarina

> Maior
< Menor
>= Maior ou igual
<= Menor ou igual
= Igual
<> Diferente

Quadro 3.4: Operadores relacionais


Fonte: Elaborado pelo autor

„„ Operadores Lógicos
Utilizados para comparar duas expressões lógicas, sempre
resultando um valor lógico, TRUE ou FALSE.

and E
or OU
not NÃO ou NEGADO

Quadro 3.5: Operadores lógicos


Fonte: Elaborado pelo autor

Exemplo:

program verificaAprovacao;
var
nome : String[50]; { Nome do aluno }
p1, { Nota da primeira prova
}
p2, { Nota da segunda prova }
media: real; { Média das duas
provas }
aprovado : boolean; { Indica se o aluno
está aprovado ou não }
begin
write(“Nome do aluno: “);
readln(nome);
nome := nome + “ - Escola Primeiro Degrau”;
write(“Nota da P1: “);
readln(p1);
write(“Nota da P2: “);
readln(p2);

112
Programação Numérica

media := (p1 + p2) / 2; { Verifiquem que o


resultado do cálculo da
média será um número real, portanto,
media
tem que ser do tipo real }

aprovado := media >= 7; { notem que o


resultado da verificação do
valor contido em media é maior ou igual a
7, resultará num valor lógico, portanto,
aprovado deve ser do tipo boolean }
end.

g) Estrutura de decisão
No Pascal, existe uma estrutura de decisão para efetuarmos um
desvio na lógica do programa de acordo com uma determinada
condição testada. Essa estrutura é o comando IF e ele pode ser
escrito das duas formas que veremos a seguir:

Forma simples

if <condição> then
begin
comando(s);
end;

Onde:

condição: a expressão lógica a ser testada;

comando(s): instrução ou sequência de instruções que


serão executadas, caso a condição testada for verdadeira
(TRUE).

Unidade 3 113
Universidade do Sul de Santa Catarina

Exemplo:

program verificaAprovacao;
var
nome : String[50]; { Nome do aluno }
p1, { Nota da primeira prova }
p2, { Nota da segunda prova }
media: real; { Média das duas provas }
begin
write(“Nome do aluno: “);
readln(nome);
write(“Nota da P1: “);
readln(p1);
write(“Nota da P2: “);
readln(p2);
media := (p1 + p2) / 2;

if (media >= 7) then


begin
writeln(“O aluno “ + nome + “ está aprovado com
média “ + media);
end;
end.

Forma composta

if <condição> then
begin
comando(s)Then;
end
else
begin
comando(s)Else;
end;

Onde:

condição: a expressão lógica a ser testada;

comando(s)Then: instrução ou sequência de instruções


que serão executadas, caso a condição testada for
verdadeira (TRUE);

114
Programação Numérica

comando(s)Else: instrução ou sequência de instruções


que serão executadas, caso a condição testada for falsa
(FALSE).

Note que na forma composta o END do THEN não


possui mais ponto e vírgula. Isso se deve ao fato de o
comando prosseguir e só terminar no END do ELSE.
Este, sim, possui ponto e vírgula.

Exemplo:

program verificaAprovacao;
var
nome : String[50]; { Nome do aluno }
p1, { Nota da primeira prova }
p2, { Nota da segunda prova }
media: real; { Média das duas provas }
begin
write(“Nome do aluno: “);
readln(nome);
write(“Nota da P1: “);
readln(p1);
write(“Nota da P2: “);
readln(p2);
media := (p1 + p2) / 2;

if (media >= 7) then


begin
writeln(“O aluno “ + nome + “ está aprovado com
média “ + media);
end
else
begin
writeln(“O aluno “ + nome + “ NÃO está aprovado
e sua média foi “ + media);
end;
end.

Unidade 3 115
Universidade do Sul de Santa Catarina

h) Estrutura de repetição
Estruturas de repetição são utilizadas toda vez que necessitamos
executar um ou mais comandos diversas vezes. Existem três tipos
diferentes de estruturas, conforme poderemos ver a seguir:

1. Comando While: executa um ou mais comandos


enquanto a expressão de controle for verdadeira (TRUE).
Veja como é sua sintaxe:

while <expressão> do
begin
comando(s);
end;

Onde:

expressão: expressão lógica que controla o laço e


será testada antes da execução do(s) comando(s). Só os
executará se a expressão for verdadeira (TRUE);

comando(s): instrução ou sequência de instruções que


serão executadas no laço.

Exemplo:

program verificaAprovacao;
var
nome : String[50]; { Nome do aluno }
p1, { Nota da primeira prova }
p2, { Nota da segunda prova }
media : real; { Média das duas provas }
alunos, { Quantidade de alunos da
turma }
cont : integer; { variável contadora }
begin
cont := 0;

write(“Quantidade de alunos da turma: “);


realn(alunos);

116
Programação Numérica

while (cont < alunos) do


begin
write(“Nome do aluno: “);
readln(nome);
write(“Nota da P1: “);
readln(p1);
write(“Nota da P2: “);
readln(p2);
media := (p1 + p2) / 2;

if (media >= 7) then


begin
writeln(“O aluno “ + nome + “ está aprovado
com média “ + media);
end
else
begin
writeln(“O aluno “ + nome + “ NÃO está
aprovado e sua média foi “ + media);
end;

cont := cont + 1;
end;
end.

2. Comando Repeat: executa um ou mais comandos


enquanto a expressão de controle for falsa (FALSE).
Como o teste é realizado no final do laço, o comando ou
a sequência de comandos serão executados pelo menos
uma vez. Veja como é sua sintaxe:

repeat
comando(s);
until <expressão>;

Onde:

expressão: expressão lógica que controla o laço e será


testada após a execução do(s) comando(s). Só os executará
se a expressão for falsa (FALSE);

Unidade 3 117
Universidade do Sul de Santa Catarina

comando(s): instrução ou sequência de instruções que


serão executadas no laço;

Exemplo:

program verificaAprovacao;
var
nome : String[50]; { Nome do aluno }
p1, { Nota da primeira prova }
p2, { Nota da segunda prova }
media : real; { Média das duas provas }
alunos, { Quantidade de alunos da turma
}
cont : integer; { variável contadora }
begin
cont := 0;

write(“Quantidade de alunos da turma: “);


realn(alunos);

repeat
write(“Nome do aluno: “);
readln(nome);
write(“Nota da P1: “);
readln(p1);
write(“Nota da P2: “);
readln(p2);
media := (p1 + p2) / 2;

if (media >= 7) then


begin
writeln(“O aluno “ + nome + “ está aprovado
com média “ + media);
end
else
begin
writeln(“O aluno “ + nome + “ NÃO está
aprovado e sua média foi “ + media);
end;

cont := cont + 1;
until (cont > alunos);
end.

118
Programação Numérica

3. Comando For: executa um ou mais comandos enquanto


a variável de controle não atinge o valor predefinido
no início do laço. Existe o laço de for incremental e
decremental. No primeiro caso, a variável de controle
recebe um valor e esse valor é incrementado até atingir
o valor limite. Enquanto no segundo caso a variável de
controle é decrementada até atingir o limite também.

Veja como é a sintaxe do FOR incremental:

for <variável> := <expressão1> to <expressão2>


do
begin
comando(s);
end;

Exemplo :

program verificaAprovacao;
var
nome : String[50]; { Nome do aluno }
p1, { Nota da primeira prova }
p2, { Nota da segunda prova }
media : real; { Média das duas provas }
alunos, { Quantidade de alunos da turma
}
i : integer; { variável de controle }
begin
write(“Quantidade de alunos da turma: “);
realn(alunos);

for i:= 1 to alunos do


begin
write(“Nome do aluno: “);
readln(nome);
write(“Nota da P1: “);
readln(p1);
write(“Nota da P2: “);
readln(p2);
media := (p1 + p2) / 2;
if (media >= 7) then

Unidade 3 119
Universidade do Sul de Santa Catarina

begin
writeln(“O aluno “ + nome + “ está aprovado
com média “ + media);
end
else
begin
writeln(“O aluno “ + nome + “ NÃO está
aprovado e sua média foi “ + media);
end;
end;
end.

Agora veja a sintaxe do FOR decremental:

for <variável> := <expressão1> downto


<expressão2> do
begin
comando(s);
end;

Onde:

variável: variável de controle que receberá inicialmente


o valor de <expressão1> e será incrementado (for
incremental) ou decrementado (for decremental) em
uma unidade até atingir o limite estabelecido em
<expressão2>. Seu tipo deverá ser qualquer um dos
tipos discretos do Pascal. Usualmente utiliza-se o tipo
inteiro (int);

expressão1: valor inicial da variável de controle;

expressão2: valor limite da variável de controle;

comando(s): instrução ou sequência de instruções que


serão executadas no laço.

120
Programação Numérica

Exemplo:

program verificaAprovacao;
var
nome : String[50]; { Nome do aluno }
p1, { Nota da primeira prova }
p2, { Nota da segunda prova }
media : real; { Média das duas provas }
alunos, { Quantidade de alunos da turma
}
i : integer; { variável de controle }
begin
write(“Quantidade de alunos da turma: “);
realn(alunos);

for i:= alunos downto 1 do


begin
write(“Nome do aluno: “);
readln(nome);
write(“Nota da P1: “);
readln(p1);
write(“Nota da P2: “);
readln(p2);
media := (p1 + p2) / 2;

if (media >= 7) then


begin
writeln(“O aluno “ + nome + “ está aprovado
com média “ + media);
end
else
begin
writeln(“O aluno “ + nome + “ NÃO está
aprovado e sua média foi “ + media);
end;
end;
end.

É importante você observar que a estrutura de Pascal deve ser


sempre respeitada para que outros programadores – que, por
ventura, tiverem de corrigir algum erro ou até mesmo consultá-lo
– possam encontrar um programa bem-feito e compreensível.

Unidade 3 121
Universidade do Sul de Santa Catarina

Seção 3 – Procedimentos e funções do programa Pascal


Como você viu até este momento, os exemplos de algoritmos utilizam
um programa para resolver um problema, porém em programação é
normal dividir esse problema em várias partes menores.

À técnica de dividir um programa em partes menores


dá-se o nome de programação modular.

O uso da programação modular é amplamente divulgado e


incentivado, pois ela facilita significativamente a resolução de um
problema complexo. Além da programação modular dividir um
problema maior em pequenos problemas mais simples, também
possibilita o reaproveitamento de código. Isso é bem interessante,
pois alguns problemas complexos podem ter partes em comum.
A programação modular também permite a utilização de
um mesmo método várias vezes dentro do mesmo programa,
evitando, assim, repetição de código.

Em Pascal, utiliza-se procedures (procedimentos) e functions


(funções) para implementar a programação modular. Ambos
possuirão um nome pelo qual serão invocados dentro de outro
módulo ou programa principal e uma sequência de comandos que
resolverão o problema para o qual foram criados. A diferença está na
possibilidade de retornar algum valor (function) ou não (procedure).

Procedure (Procedimento)
Uma procedure é praticamente igual a um programa principal,
com variáveis e instruções, com a única diferença de poder conter
parâmetros.

Para que uma procedure seja chamada em um módulo


ou no programa principal, deve-se escrever o seu nome
seguido dos parâmetros, caso existam.

122
Programação Numérica

Neste momento, o fluxo do programa sai do local onde a


procedure é chamada e vai para o início do corpo principal dessa
procedure. Após a execução do procedimento, o fluxo volta para o
local de onde saiu e segue executando normalmente.

Veja a seguir a sintaxe de uma procedure:

procedure <nomeDaProcedure>
(<listaDeParâmetros>);
<variáveis>
begin
comando(s);
end;

Onde:

nomeDaProcedure: nome com que o procedimento


será conhecido em todo o programa. Deve ser único e
obedecer às regras de formação de identificadores;

listaDeParâmetros: valores externos que o


procedimento necessitará para a sua execução. Pode
existir nenhum ou vários parâmetros;

comando(s): instruções que serão executadas toda vez


que o procedimento for chamado e que servirão para
resolver o problema a que se propôs.

Toda vez que uma procedure necessita de algum valor externo para
funcionar, esse valor é passado por meio de um parâmetro.

Parâmetros são espaços de memória que permitem a


comunicação com o “mundo externo” da procedure.

Imaginemos que necessitamos de uma procedure para informar se


determinado aluno está aprovado ou não. Para ser aprovado, o aluno
necessita possuir uma média superior ou igual a 7. A média não será
obtida pela procedure, mas ela deve existir para que a procedure consiga
fazer essa verificação. Então, média seria o parâmetro para essa
procedure, conforme podemos verificar no exemplo a seguir:

Unidade 3 123
Universidade do Sul de Santa Catarina

Exemplo:

program exemplo5;
var
m, p1, p2: real;
procedure informaAprovacao(media: real);
begin
if (media >= 7) then
begin
writeln(“O aluno está aprovado com média “ +
media);
end
else
begin
writeln(“O aluno NÃO está aprovado e sua média
foi “ + media);
end;
end;
begin
write(“Nota da P1: “);
readln(p1);
write(“Nota da P2: “);
readln(p2);

m := (p1 + p2) / 2;
informaAprovacao(m);
end.
Os parâmetros poderão ser passados por valor ou por referência.
Veja a explicação de cada um deles a seguir:

„„ Na passagem de parâmetro por valor, será apenas


copiado o valor passado pelo módulo chamado para o
parâmetro e toda alteração realizada no parâmetro não
será passado para o módulo chamador. Para que você
possa visualizar melhor esse tipo de passagem, volte no
exemplo anterior. Observe que o valor da média é apenas
copiado para verificar a aprovação, assim conclui-se que a
passagem de parâmetro foi por valor.

„„ Na passagem de parâmetro por referência, a variável


que foi passada pelo módulo chamador será vinculada
ao parâmetro e toda alteração realizada no parâmetro
será repercutida na variável do módulo chamador.

124
Programação Numérica

Para entender a passagem de parâmetro por referência,


imagine a necessidade de uma procedure que faça a
leitura das notas. Com certeza, os valores lidos dentro
dessa procedure deverão ser repassados para o módulo
chamador, pois, caso contrário, de nada serviria o
procedimento.

A seguir veja um exemplo de passagem de parâmetro por referência:

program exemplo5;
var
m, p1, p2: real;

procedure leNotas(var n1, n2: real);


begin
write(“Nota da P1: “);
readln(n1);
write(“Nota da P2: “);
readln(n2);
end;

procedure informaAprovacao(media: real);


begin
if (media >= 7) then
begin
writeln(“O aluno está aprovado com média
“ + media);
end
else
begin
writeln(“O aluno NÃO está aprovado e sua
média foi “ + media);
end;
end;
begin
leNotas(p1, p2);
m := (p1 + p2) / 2;
informaAprovacao(m);
end.

Unidade 3 125
Universidade do Sul de Santa Catarina

Note que, diferentemente da passagem de parâmetros por valor,


na passagem de parâmetros por referência existe a palavra
reservada VAR, e é exatamente essa palavra que diferenciará os
dois tipos de passagem de parâmetros.

Function (Função)
Conforme informado, as funções são muito parecidas com
os procedimentos, diferenciando apenas pelo fato de sempre
retornar um valor. Elas possuem praticamente a mesma sintaxe
e funcionamento, ou seja, pode possuir parâmetros e variáveis e
possui nome e corpo principal. Toda vez que ela for chamada de
outro módulo, o fluxo é desviado para o início da função e, ao final,
retorna para o local onde foi invocada. Neste momento, ao contrário
do procedimento, a função volta para o local onde foi chamada
com o valor de seu retorno. Esse valor poderá ser atribuído a uma
variável ou utilizada para algum cálculo ou verificação.

A forma com que é definido o valor a ser retornado


pela function é por meio da atribuição de um valor
a uma “variável” com o mesmo nome da function.
Esse valor deverá ser do mesmo tipo declarado no
cabeçalho da função.

A passagem de parâmetros na function é igual à procedure, ou seja,


existem passagem de parâmetros por valor e por referência e seu
funcionamento é exatamente igual. Veja a seguir a sintaxe da function:

function <nomeDaFunction>
(<listaDeParâmetros>) : <tipoRetorno>;
<variáveis>
begin
comando(s);
end;

126
Programação Numérica

Onde:

nomeDaFunction: nome com que o procedimento


será conhecido em todo o programa. Deve ser único e
obedecer às regras de formação de identificadores;

listaDeParâmetros: valores externos que o


procedimento necessitará para a sua execução. Pode
existir nenhum ou vários parâmetros;

comando(s): instruções que serão executadas toda vez


que o procedimento for chamado e que servirão para
resolver o problema a que se propôs;

tipoRetorno: tipo do valor a ser retornado pela função.

Cabe salientar que toda variável declarada dentro dos


procedimentos e das funções existem apenas quando eles
existirem. No momento em que chega ao fim o procedimento ou
a função, a variável é deslocada da memória e seu valor é perdido.

A variável que só existe na memória enquanto os


procedimentos e as funções existem se denomina
de variável local. Já as variáveis do programa, são
chamadas de variáveis globais e existem durante toda
a duração do programa.

Para entender a utilização de funções, veja a seguir como se


modulariza o cálculo da média pelo exemplo anterior.

Exemplo:

program exemplo6;
var
m, p1, p2: real;

procedure leNotas(var n1, n2: real);


begin
write(“Nota da P1: “);
readln(n1);
write(“Nota da P2: “);
readln(n2);
end;

Unidade 3 127
Universidade do Sul de Santa Catarina

procedure informaAprovacao(media: real);


begin
if (media >= 7) then
begin
writeln(“O aluno está aprovado com média “ +
media);
end
else
begin
writeln(“O aluno NÃO está aprovado e sua média
foi “ + media);
end;
end;

function calculaMedia(n1, n2: real) : real;


begin
calculaMedia := (n1 + n2) / 2;
end;

begin
leNotas(p1, p2);
m := calculaMedia(p1, p2);
informaAprovacao(m);
end.

Note que este módulo não poderia ser uma


procedure, pois ela não retorna valor. Portanto, será
obrigatoriamente uma function.

No exemplo anterior, você verificou também que um programa


que possuía toda a sua lógica dentro do seu corpo principal foi
modularizado e passou a ter módulos os quais resolvem pequenos
problemas. No final, todos esses módulos são invocados dentro
do programa principal e resolvem o problema como um todo. Se
fosse necessário calcular a média em outra parte do programa,
não seria preciso escrever o código, pois para isso bastaria chamar
a função responsável por tal ação. O mesmo vale para a leitura
das notas e também para a informação de aprovação ou não do
aluno.

128
Programação Numérica

Dica! Caso em outra oportunidade seja necessário


resolver um problema que envolva em alguma parte
um dos módulos criados nesse programa, basta utilizá-
los sem a necessidade de reescrita.

Como você pôde ver, ganha-se tempo e objetividade com


organização e reutilização de código, sem falar que se algum erro
for encontrado, basta corrigi-lo no módulo que todos os locais
que utilizam tal módulo receberão essa correção.

Funções utilitárias
O Pascal possui uma série de funções e procedimento em
bibliotecas que variam de fabricante para fabricante, mas
geralmente os nomes são os mesmos ou muito parecidos.

A seguir serão listados alguns desses procedimentos/funções e


uma breve explicação de sua utilidade. Porém, isso não impede
que você busque novos procedimentos/funções no próprio Pascal
ou até mesmo em biblioteca de terceiros disponibilizados na
internet. Também existe a possibilidade de você organizar a sua
própria biblioteca de procedimento/funções, sempre pensando em
reaproveitamento de código. Acompanhe:

Tipo Nome Descrição


Matemática abs(x) Calcula o valor absoluto de x.
Matemática cos(x) Calcula o coseno de x.
Matemática exp(x) Calcula e elevado na x.
Matemática ln(x) Calcula o logaritmo natural de x.
Matemática sin(x) Calcula o seno de x.
Matemática sqr(x) Calcula o quadrado de x.
Matemática sqrt(x) Calcula a raiz quadrada de x.
Literal length(x) Retorna a quantidade de caracteres de x.
Literal upcase(x) Retorna todos os caracteres da string x maiúsculos.
Conversão trunc(x) Retorna a parte inteira de x.
Conversão round(x) Arredonda o valor de x.
Tela clrscr Limpa a tela.
Tela gotoxy(x,y) Move o cursor para a linha x e coluna y.
Quadro 3.6: Funções utilitárias
Fonte: Elaborado pelo autor

Unidade 3 129
Universidade do Sul de Santa Catarina

Como você viu, ao quebrar um problema maior em diversos


problemas menores, algumas dessas partes menores tornam-
se iguais a outras já resolvidas anteriormente. Isso promove o
reaproveitamento do código já utilizado anteriormente, o que
minimiza esforços fazendo ganhar tempo por meio do reuso.

Síntese

Nesta unidade você viu como devemos criar um programa na


linguagem de programação Pascal. Neste sentido, viu como
declarar variáveis, criar estruturas de decisão, estruturas de
repetição, obter e fornecer informações ao usuário.

Com isso você pôde notar que, apesar de estar programando


em uma linguagem específica, todos os passos a serem seguidos
para a resolução de um problema serão sempre os mesmos, o que
possibilita passar um algoritmo para qualquer linguagem. Por
esse motivo que você sempre ouvirá dizer no meio de informática
que, se alguém sabe programar em uma linguagem, aprender
outra linguagem é extremamente fácil.

Atividades de autoavaliação

Ao final de cada unidade, você realizará atividades de autoavaliação. O


gabarito está disponível no final do livro didático. Esforce-se para resolver
as atividades sem ajuda do gabarito, pois assim você estará promovendo
(estimulando) a sua aprendizagem.

1) Leia a seguinte afirmação:


Toda vez que um programa Pascal é desenvolvido, seu código-fonte
deve ser compilado para que seja realizada todas as validações
(léxica, sintática e semântica) a fim de garantir que ele não possui
erros. Após a compilação, ele deve ser linkado, gerando assim um
programa executável.

130
Programação Numérica

Essa afirmação é:
a) ( ) Verdadeira.
b) ( ) Falsa.
2. Construa um programa Pascal que leia a base e a altura de um
retângulo e informe sua área e seu perímetro.

3. Altere o programa criado no exercício anterior, de maneira a permitir a


existência de uma função para o cálculo da área, outra para o cálculo
do perímetro e um procedimento que informe os valores da área e
perímetro do retângulo.

Unidade 3 131
Universidade do Sul de Santa Catarina

Saiba mais

Se você desejar, aprofunde os conteúdos estudados nesta unidade


ao consultar as seguintes referências:

SANTOS JÚNIOR, José Maria Rodrigues. Pascal.

FARRER, Harry; et al. Pascal estruturado. 3. ed. Rio de


Janeiro: LTC, 1999.

FORBELLONE, André Luiz V.; EBERSPÄCHER, Henri


Frederico. Lógica de programacão: a construção de algoritmos
e estruturas de dados.. 3. ed. São Paulo: Pearson Prentice Hall,
2005.

132
4
unidade 4

Sistemas de equações lineares

Objetivos de aprendizagem
„„ Entender o que é uma equação linear;

„„ Compreender como um sistema de equações lineares é


formado;.
„„ Conhecer quais os métodos existentes para a resolução
de equações lineares..

Seções de estudo
Seção 1 Introdução ao sistema de equações linear

Seção 2 Equações lineares

Seção 3 Solução de um sistema de equações lineares

Seção 4 Operações sobre sistemas lineares

Seção 5 Métodos para a resolução de sistemas lineares


Universidade do Sul de Santa Catarina

Para início de estudo


Nesta unidade você aprenderá a identificar uma equação linear,
estudando cada um dos seus componentes. Verá que a união de
duas ou mais equações formarão os sistemas de equações lineares.

Você estudará também os diferentes tipos de sistemas lineares e


as diversas formas de resolvê-los. Para isso, será necessário revisar
algumas operações sobre matrizes que lhe capacitará a aplicar os
diversos métodos de resolução dos sistemas lineares.

Seção 1 – Introdução ao sistema de equações linear


É muito comum na modelagem matemática de um fenômeno físico
surgir equações lineares com uma ou mais incógnitas. Encontrar um
conjunto de valores que resolvam todas as equações simultaneamente
é o desafio dos sistemas de equações lineares. Também nesse processo
surgem equações não lineares, para resolvê-las é preciso transformá-
las em equações lineares e, assim, conseguir obter o conjunto solução.

Há 250 a.C., os chineses formularam aquilo que se entende como o


primeiro sistema de equações lineares:

Três fardos de um boa colheita, dois fardos de uma colheita medíocre e um


fardo de uma colheita ruim foram vendidos por 39 dou. Dois fardos de
uma boa, três da medíocre e um da ruim foram vendidos a 34 dou; e um
da boa, dois da medíocre e três da ruim foram vendidos por 26 dou. Qual
o preço recebido pela venda de cada fardo associado à boa colheita, à colheita
medíocre e à colheita ruim?

Na época o sistema era resolvido com a utilização de pedaços


de bambu de cores diferentes para representar as incógnitas da
equação, e a solução era obtida por meio da manipulação desses
bambus. Séculos depois, o livro que continha esse problema foi
encontrado na Europa e o matemático alemão Carl Friedrich Gauss
resolveu-o utilizando o método de eliminação de Gauss, como ficou
posteriormente conhecido.

134
Programação Numérica

Seção 2 - Equações lineares


Equações lineares são equações em que existem apenas somas e
produtos de constantes e variáveis de primeiro grau.

Não pode existir em uma equação linear a multiplicação


de variáveis ou potências dessas mesmas variáveis, porém a
existência de muitas variáveis em uma equação linear pode
acontecer.

Exemplo de equações lineares:

„„ 7x + 4y = 9

„„ 9x - 8y + 7z = -6

„„ 2x1 + 5x2 - 4x3 = 3 + 3x2

5
„„ k + 3 35 j + m = 7 4
6

Veja alguns exemplos de equações que não podemos considerar


como lineares :

„„
2 x + 4 y = 9 : não é equação linear, pois existe potenciação
de variável;

„„ 3x - 2yz + 4xy + z = 100: não é equação linear, pois existe


produto de variáveis;

„„ 4x2 + 5x +3y -9 = 0: não é equação linear, pois existe


potenciação de variável.

Unidade 4 135
Universidade do Sul de Santa Catarina

Componentes de uma equação linear


Qualquer linha reta no plano xy pode ser representada
algebricamente por uma equação da forma:

a1 . x + a2 . y = b

Onde:

a1, a2: coeficientes reais não nulos


b: termo real independente
x, y: variáveis
Equações que seguem essa forma são chamadas equações
lineares nas variáveis x e y. Se estendermos essa equação nas
inúmeras variáveis x1, x 2, ..., xm, podemos expressar as equações
lineares da seguinte forma:

a1 . x1 + a2 . x2 ... am . xm = b

Onde:

a1, a2, am: coeficientes reais não nulos


b: termo real independente
x1, x2, xm: variáveis
Os termos a1, a2, am e b são número conhecidos e as variáveis x1,
x2, xm são as incógnitas.

Os valores reais das variáveis que satisfazem a equação e


constituem sua solução são chamados de raízes das equações
lineares.

Solução de uma equação linear


A sequência de números reais (r1, r2, r3, r4, r5) será a solução da
equação linear a1 . x1 + a2 . x2 + a3 . x3 + a4 . x4 + a5 . x5 = b se, e
somente se, a troca de xi por ri tornar o membro da esquerda da
equação igual ao membro da direita, ou seja,
a1 . r1 + a2 . r2 + a3 . r3 + a4 . r4 + a5 . r5 = b

136
Programação Numérica

A sequência (9, 8, 7, 6) é a solução da equação


x - 9y + 2z + 5k = - 19, pois substituindo x por 9, y
por 8, z por 7 e k por 6 na equação, teremos
9 - 9.8 + 2.7 + 5.6 = - 19.

Sistema de equações lineares


Todo conjunto formado por duas ou mais equações lineares é
chamado de sistema de equações lineares, ou sistema linear, e é
representado da seguinte forma:

a11 ⋅ x1 + a12 ⋅ x2  a1m ⋅ xm = b1


a ⋅ x + a ⋅ x  a ⋅ x = b
 21 1 22 2 2m m 2

 
an1 ⋅ x1 + an 2 ⋅ x2  anm ⋅ xm = bn

Onde:

aij: coeficientes reais não nulos


bi: termo real independente
xi: variáveis ou incógnitas do sistema
Podemos utilizar a notação de somatório ∑ para uma equação
genérica i da seguinte forma:

∑a x
j =0
ij j = bi

Para representar todas as equações, basta estender da seguinte forma:

∑a x
j =0
ij j = bi para i = 1,2,..., m

Para solucionar a equação anterior, temos de reescrever o sistema


utilizando a notação matricial, que nada mais é que a forma com
que representamos o sistema de equações lineares em matrizes, onde
teremos uma matriz para os coeficientes de cada incógnita e outra
matriz para os termos independentes, conforme você pode ver a seguir:

Unidade 4 137
Universidade do Sul de Santa Catarina

 a11   a12   a1m  b1 


a  a  a   
 21  x +  22  x +  +  2 m  x = b2 
   1    2    m  
       
 an1   an 2   anm  bn 

Assim, se isolarmos os vetores, teremos:

 a11   a12   a1m  b1 


a  a  a   
A1 =  21  A =  22  A =  2 m  b = b2 
   2    m     
       
 an1   an 2   anm  bn 

O sistema de equações pode então ser reescrito da seguinte forma:

A1 . x1 + A2 . x2 + ... + Am . xm = b

Se unirmos os vetores A em uma matriz e criarmos um vetor


com as incógnitas x, teremos:

 a11 a12 … a1m   x1 


a 
a22  a2 m  x 
A =  21 x= 2
    
   
 an1 an 2  anm   xm 

Podendo-se representar o sistema como: A . x = b , ou seja,

 a11 a12  a1m   x1  b1 


a     
 21 a22  a2 m  .  x2  = b2 
       
     
an1 an 2  anm   xm  bn 
  
A x b

A matriz de coeficientes
x matriz das variáveis
b matriz dos termos independentes
Acompanhe a sua aplicação nos exemplos a seguir:

138
Programação Numérica

Exemplo – Considerando o sistema de equações lineares

7 ⋅ x1 + 4 ⋅ x2 + 3 ⋅ x3 = 9
 x + 2 ⋅ x + 3 ⋅ x = −4
 1 2 3

 x1 + 7 ⋅ x2 = 2
 8 ⋅ x2 + 2 ⋅ x3 = 0

com 4 equações e 3 incógnitas, teremos a forma matricial a


seguir:

 7 4 3 9 
1 2 3   x1   −4 
  ⋅  x2  =  
1 7 0     2 
   x3   
 0 8 2  0 
 x 
A b

Podemos obter a Matriz Aumentada, ou seja, a matriz de


incógnitas (A), unida com o vetor de termos independentes (b),
conforme é demonstrado a seguir:

 a11 a12  a1m  b1 


a
 a22  a2 m  b2 
[ A  b ] 
= 21



 
 an1 an 2  anm  bn 

Exemplo – Considerando o sistema de equações lineares

7 ⋅ x1 + 4 ⋅ x2 + 3 ⋅ x3 = 9
 x + 2 ⋅ x + 3 ⋅ x = −4
 1 2 3

 x1 + 7 ⋅ x2 = 2
 8 ⋅ x2 + 2 ⋅ x3 = 0

com 4 equações e 3 incógnitas, teremos a forma matricial a


seguir:

 7 4 3 9 
1 2 3   x   
 ⋅  x2  =  −4 
1

1 7 0     2 
    x3   
  x

0 8 2 0 

A b

Unidade 4 139
Universidade do Sul de Santa Catarina

e a Matriz Aumentada obtida pela adjunção de b com A será:

7 4 3 9 
1
 2 3 − 4 
1 7 0 2 
 
0 8 2 0 

Ao acompanhar a resoluções dos exemplos anteriores, você pode


observar que só foi possível encontrar um conjunto solução baseada
em operações ao transformarmos as equações lineares em matrizes.

Seção 3 – Solução de um sistema de equações lineares


Um sistema de equações lineares ou um sistema linear possuirá
solução quando existir um conjunto de valores para x1, x2, ..., xm
que satisfaçam, simultaneamente, todas as equações lineares do
sistema. Acompanhe.

Exemplo – Para o sistema de equações lineares a seguir:

2 ⋅ x + y = 7

x + 3⋅ y = 6
x + 5⋅ y = 8

O par ordenado (3,1) é a solução, pois satisfaz, simultaneamente, as


três equações lineares do sistema, conforme comprovado a seguir:

2 ⋅ 3 + 1  7

3 + 3 ⋅1  6
3 + 5 ⋅1  8

6 + 1 = 7

3 + 3 = 6
3 + 5 = 8

140
Programação Numérica

Um sistema de equações lineares pode ser classificado quanto à


existência de solução, como:

1 – Sistema Impossível: quando não existir nenhuma solução


para o sistema.

Exemplo – A seguir, temos as equações lineares que representam


duas retas paralelas no plano cartesiano, por esse motivo não
possuem pontos que pertençam a ambas as retas:

2 ⋅ x + 3 ⋅ y = 10

2 ⋅ x + 3 ⋅ y = 7

2 – Sistema Possível: quando existir ao menos uma solução


para o sistema. Um Sistema Possível pode ser dividido em dois
conjuntos. Assim, tem-se:

„„ Sistema Possível e Determinado: quando existir uma


única solução para o sistema.

Exemplo – A seguir, temos as equações lineares que representam


duas retas no plano cartesiano e possuem intersecção no ponto (2,2):

4 ⋅ x + 5 ⋅ y = 18

3 ⋅ x + 4 ⋅ y = 14

„„ Sistema Possível e Indeterminado: quando existir


infinitas soluções para o sistema.

Exemplo – A seguir, temos as equações lineares que representam


duas retas paralelas sobrepostas no plano cartesiano, por esse
motivo possuem infinitos pontos que satisfaçam as equações:

x + 5⋅ y = 2

3 ⋅ x + 15 ⋅ y = 6

Um sistema de equações lineares será homogêneo, se, e somente


se, a matriz B do sistema é nula, ou seja, bj = 0 para qualquer j.
Veja:

Unidade 4 141
Universidade do Sul de Santa Catarina

a11 ⋅ x1 + a12 ⋅ x2  a1m ⋅ xm = 0


a ⋅ x + a ⋅ x  a ⋅ x = 0
 21 1 22 2 2m m

 
an1 ⋅ x1 + an 2 ⋅ x2  anm ⋅ xm = 0

Se existir um bj ≠ 0, então o sistema será não homogêneo.

Um sistema linear homogêneo sempre possuirá ao


menos uma solução, uma vez que tem sempre
x1 = 0, x2 = 0, ... xn = 0 como uma das soluções.
A essa solução é dada o nome de solução trivial, ou
solução nula. Caso existam outras soluções, essas se
chamarão soluções não triviais.

Por ter sempre ao menos uma solução, o sistema linear


homogêneo nunca será um Sistema Impossível. Ele será sempre
um Sistema Possível. Se possuir apenas a solução trivial, será um
Sistema Possível Determinado. Se possuir infinitas soluções ele
será então um Sistema Possível Indeterminado.

Sempre que um sistema de equações lineares homogêneos possuir


mais incógnitas do que equações, esse sistema será um Sistema
Possível Indeterminado.

Veja a seguir exemplos de sistema não homogêneo:

Exemplo –

5 x − 3 y = 0

x + 2 y = 0
−2 x + 7 y = 2

Exemplo –

x + y = 9

3 x + 4 y = 2
2 x − 4 y = 5

Veja a seguir exemplos de sistema homogêneo com apenas a


solução trivial:

142
Programação Numérica

Exemplo –

2 x − y + 3z = 0

4 x + 2 y − z = 0
x − y + 2z = 0

Exemplo –

x + y = 0

x + z = 0
x + y − z = 0

Veja a seguir exemplos de sistema homogêneo com infinitas


soluções:

Exemplo –

x + y + z + k = 0

x + y + k = 0
2 x + 3 y + k = 0

Exemplo –

x + y + z = 0

9 x − z = 0

Perceba que você pôde classificar os sistemas lineares de acordo com


o tipo de solução. Em sistemas homogêneos, sempre teremos uma
solução trivial. De acordo com a relação entre o número de incógnitas
e o número de equações, podem existir infinitas soluções.

Seção 4 – Operações sobre sistemas lineares


Para que possamos resolver os Sistemas de Equações Lineares,
é necessário visualizar as operações que poderemos aplicar para
encontrar uma solução. Acompanhe.

Unidade 4 143
Universidade do Sul de Santa Catarina

Operações elementares
A forma mais simples de resolver um sistema linear é substituir
o sistema dado por um novo sistema que possua o mesmo
conjunto-solução, porém sua resolução é mais simples. Para
obter esse novo sistema, devemos aplicar sobre a matriz
aumentada uma sucessão de passos aplicando os três tipos de
operações elementares sobre linhas para eliminar as incógnitas.
Acompanhe:

1. Multiplicar uma linha inteira por uma constante.


Li = k . Li , com k ≠ 0.

2 4 6 2 4 6
1 2 3  ⇒ L = 2 • L ⇒  2 4 6 
  2 2  
3 6 3  3 6 9 

2. Trocar duas linhas entre si. Li ↔ Lj

2 4 6 2 4 6
1 2 3  ⇒ L ↔ L ⇒ 3 6 9 
  2 2  
3 6 3  1 2 3 

3. Somar o múltiplo de uma linha à outra linha.


Li = Li + k . Lj , com k ≠ 0.

2 4 6  4 8 12 
1 2 3  ⇒ L = L + 2 ⋅ L ⇒ 1 2 3 
  1 1 2  
3 6 3  1 2 3 

Matriz escalonada
Uma matriz está na forma escalonada reduzida se:

1. Todas as linhas nulas ocorrem abaixo das linhas não nulas;

2. O primeiro elemento não nulo de cada linha não nula é


igual a 1, também conhecido como pivô;

144
Programação Numérica

3. O pivô da linha i + 1 ocorre à direita do pivô da linha i,


para i = 1, ..., m - 1;

4. Se uma coluna contém um pivô, então todos os seus


outros elementos são iguais a zero.

Se uma matriz satisfaz os itens (1), (2) e (3), mas não


necessariamente o item (4), essa matriz é uma matriz
escalonada.

1. Exemplos de matrizes escalonadas:

Matrizes escalonadas: A e C.

Matrizes escalonadas reduzidas: B e C.

1 2 0 4  1 0 0 
0 0 
A = 0 1 0 7  B= 
 C = 0 1 0 

 0 0 
0 0 1 1  0 0 1

2. Exemplos de matrizes que não estão na forma escalonada


reduzida:

1 0 0 4  1 0 0 
1 0 
A = 0 0 0 7  B=  C = 0 0 0 
0 0 1 1  0 2  0 0 1 

Seção 5 – Métodos para a resolução de sistemas lineares


A seguir você poderá acompanhar a explicação dos métodos
utilizados para a resolução de sistemas lineares:

Unidade 4 145
Universidade do Sul de Santa Catarina

1 – Método de eliminação
O método de eliminação consiste em transformar uma matriz
aumentada do sistema linear Ax = B em uma forma escalonada
por linhas pela aplicação e repetindo as operações elementares.
Cabe salientar que essas operações não alteram a solução,
conforme visto. Acompanhe:

Exemplo – Considere que A possui todas submatrizes principais


não singulares.

Descrição do algoritmo

Considerando o sistema seguinte:

a11 ⋅ x1 + a12 ⋅ x2  a1m ⋅ xm = b1


a ⋅ x + a ⋅ x  a ⋅ x = b
 21 1 22 2 2m m 2

 
an1 ⋅ x1 + an 2 ⋅ x2  anm ⋅ xm = bn

cuja matriz aumentada chamaremos de A(1), montamos a tabela:

 a11(1) a12(1)  a1(m1) b1(1) 


 (1) 
 a21 a22  a2(1m) b2(1) 
(1)

  
 
 an(11) a(1)
n2  anm
(1)
bn(1) 

onde aij = aij e bij = bij para i, j = 1, 2..., n


(1) (1)

Por hipótese, temos que a11(1) =/ 0 , pois det(A) ≠ 0.

Passo 1: Encontre a coluna mais à esquerda que não seja


constituída apenas de zeros.

Passo 2: Caso a coluna encontrada no Passo 1 possua um


elemento nulo, troque a primeira linha por uma linha que possua
um elemento não nulo nessa coluna.

Passo 3: Considerando a o elemento do topo da coluna


encontrada no Passo 2, multiplique a linha inteira por 1α para
introduzir um pivô.

146
Programação Numérica

Passo 4: Com o intuito de obter zeros em todos os elementos


abaixo do pivô, adicione múltiplos da primeira linha às linhas
inferiores. Para tanto:

Subtraímos da 2a equação a 1a equação multiplicada por a21(1) .


(1)
„„
a11

Subtraímos da 3a equação a 1a equação multiplicada por a21(1) .


(1)
„„
a11

Subtraímos da na equação a 1a equação multiplicada por an1(1) .


(1)
„„
a11

„„ Com isso, obtemos a seguinte matriz:

 a11(1) a12(1)  a1(m1) b1(1) 


 
0 a22  a2 m b2 
( 2) ( 2) ( 2)

  
 
0 an( 22)  anm ( 2)
bn( 2 ) 

Onde

ai(11)
a ( 2)
ij =a (1)
ij − a ⋅ (1)
(1)
1j
a11

ai(11)
bi
( 2)
=b
i
(1)
− b ⋅ (1)
(1)

a11
1

para i, j = 1, 2, ..., n.

Por hipótese, temos que a22( 2 ) =/ 0 , pois det(A) ≠ 0.

Passo 5: Escondendo a primeira linha da matriz, recomece


aplicando o Passo 1 na submatriz resultante, continuando até que
toda a matriz esteja na forma escalonada. Para tanto:
a32
( 2)
„„ Subtraímos da 3a equação a 1a equação multiplicada por .
a22
( 2)

Subtraímos da na equação a 1a equação multiplicada por an2


( 2)
„„ .
a22
( 2)

Com isso, obtemos a seguinte matriz:

Unidade 4 147
Universidade do Sul de Santa Catarina

 a11(1) a12(1)  a1(m1) b1(1) 


 
0 a22  a2 m b2 
( 2) ( 2) ( 2)

  
 
0 0  anm ( 3)
bn(3) 

Onde

ai(11)
aij(3) = aij( 2 ) − a2( 2j) ⋅
a11(1)

ai(22 )
bi(3) = bi( 2 ) − b2( 2 ) ⋅
a22
( 2)

para i, j = 1, 2, ..., n.

Por hipótese, temos que a33(3) =/ 0 , pois det(A) ≠ 0.

Assim sucessivamente até chegarmos ao:

Por hipótese, temos que an( n−−1,1n)−1 =/ 0 , pois det(A) ≠ 0.

Subtraímos da na equação a (n - 1)a equação multiplicada por


an( n,n−−11)
.
an( n−−1,1n)−1

Obtendo, assim, a tabela:

 a11(1) a12(1) a13( )  a1(,1n)−1 a1(n) b1(1) 


1 1

 
0 a12(1) a12( )  a2( 2,n)−1 a2( 2n) b2( ) 
1 2

 
0 a12( )  a3( ,n)−1 a33n b3( ) 
1 3 3
0
 
0 0 0     
0 0 0  an( n−−1,1n)−1 ( n −1)
an −1,n bn −1 ( n −1) 

0 0 0  0 an( ,n) bn( ) 
n n

148
Programação Numérica

Onde

ai(,nn−−11)
aij( n ) = aij( n −1) − an( n−−1,1j) ⋅
an( n−−1,1n)−1

(n) ( n −1) ( n −1) ai(,nn−−11)


bi =b i −b n −1 ⋅
an( n−−1,1n)−1

para i, j = 1, 2, ..., n.

Assim, obtemos o sistema triangular a seguir, que é equivalente


ao original:

 a11(1) ⋅ x1 + a12(1) ⋅ x2 + a13(1) ⋅ x3 +  + a1(,1n)−1 ⋅ xn −1 + a1(1n) ⋅ xn = b1(1) 


 
 a12( ) ⋅ x2 + a12(1) ⋅ x3 +  a2( 2,n)−1 ⋅ xn −1 + a22n ⋅ xn = b2( 2 ) 
1

 
 a12( ) ⋅ x3 +  a3(3,n)−1 ⋅ xn −1 + a33n ⋅ xn = b3(3) 
1

 
     
 ( n −1) ( n −1) ( n −1)
 an −1,n −1 ⋅ xn −1 + an −1,n ⋅ xn = bn −1 
 
  ann,n ⋅ xn = bn( )
n 
 

Passo 6: A fim de introduzir zeros acima do pivô, a partir da


última linha não nula e trabalhando para cima, some múltiplos
convenientes de cada linha às linhas superiores. Com isso,
obtemos a tabela a seguir:

 a11(1) 0 0  0 0 b1(1) 
 ( 2) 
0 a12 0  0 0 b2 
(1)

 (1) ( 3) 
0 0 a12  0 0 b3 
0 0 0     
 
0 0 0  an( n−−1,1n)−1 0bn( n−1−1) 
 
0 an( ,n) bn( ) 
n n
0 0 0 

Assim, obtemos o sistema triangular a seguir, que é equivalente


ao original:

Unidade 4 149
Universidade do Sul de Santa Catarina

 a11(1) 0 0  0 0 b1(1) 
 ( 2) 
0 a12 0  0 0 b2 
(1)

 (1) ( 3) 
0 0 a12  0 0 b3 
0 0 0     
 
0 0 0  an( n−−1,1n)−1 0bn( n−1−1) 
 
0 an( ,n) bn( ) 
n n
0 0 0 

É importante você observar que até o Passo 5 o


método tem o nome de Eliminação Gaussiana. Se
utilizar todos os passos, ou seja, até o Passo 6, passa-se
a chamar Eliminação Gauss-Jordan.

Exemplo 2 - Resolver o sistema seguinte, utilizando o método de


Eliminação Gaussiana.

Seja o sistema:

6 ⋅ x1 + 2 ⋅ x2 − x3 = 7

2 ⋅ x1 + 4 ⋅ x2 + x3 = 7
3 ⋅ x + 2 ⋅ x + 8 • x = 13
 1 2 3

Matricialmente temos (Passo 1):


6 2 − 1  x1  7 
 2 4 1  ⋅  x  = 7 
   2  
3 2 8   x3  13

Matriz aumentada (Passo 2):


6 2 − 1 7 
2 4 1 7 
 
3 2 8 13 

Multiplicando por 1α (Passo 3):


1 1 −1 7 
 3 6 6
2 4 1 7 
 
3 2 8 13 

150
Programação Numérica

Adicionando múltiplos (Passo 4):


1 1 −1 7 
 3 6 6 
0 10 4 14 
 3 3 3
0 1 17 19 
 3 2 
Matriz na forma escalonada (Passo 5):
1 2 −1  7 
 6   x1   6 
1 10 4  ⋅  x  = 14 
 30 3 3   2  3 
0 0 81   x3  81 
 10   10 

Com isso, temos:


∴ 81 ⋅ x3 = 81 ⇒ x3 = 1
10 10
10 ⋅ x + 4 ⋅ x = 14 ⇒ x = 1
3 2 3 3 3 2

6. x1 + 2 . x2 - x3 = 7 ⇒ x1 = 1

Exemplo 3 - A seguir, será demonstrada a resolução de um


sistema linear utilizando somente operações elementares sobre
as equações lineares.

Seja o sistema:
2 ⋅ x1 + 2 ⋅ x2 + 4 ⋅ x3 = 10

 x1 + x2 + 3 ⋅ x3 = 9
 x + 3 ⋅ x + 4 • x = 17
 1 2 3

Matricialmente, temos:
 2 2 4   x1  10 
1 1 3  ⋅  x  = 9 
   2  
1 3 4   x3  17 

Matriz aumentada:
 2 2 4 10 
1 1 3 9 
 
1 3 4 17 

Unidade 4 151
Universidade do Sul de Santa Catarina

Os próximos passos serão executados utilizando apenas operações


elementares:

Passo 1: L2 = L1 - 2 . L2
 2 2 4 10  2 2 4 10 
1 1 3 9  ⇒ L = L − 2 • L ⇒ 0 0 − 2 − 8 
  2 1 2  
1 3 4 17  1 3 4 17 

Passo 2: Trocar a segunda linha pela terceira.


2 2 4 10  2 2 4 10 
0 0 − 2 − 8  ⇒  L2 = L3 ⇒ 1 3 17 
  L = L  4
1 3 4 17   3 2
0 0 −2 − 8

Passo 3: L2 = L1 - 2 . L2
 2 2 4 10  2 2 4 10 
1 3 4 17  ⇒ L = L − 2 • L ⇒ 0 − 4 − 4 − 24 
  2 1 2  
0 0 − 2 − 8 0 0 − 2 − 8 

Passo 4: Dividir a segunda linha por -4 e a terceira por -2.

2 2 4 10   L2 = L2 2 2 4 10 
 −4 
0 − 4 − 4


− 24  ⇒  ⇒ 0 1 1 6 
 L3
0 0 −2 − 8  L = 0 0 1 4 
 3 −2

Passo 5: L2 = L2 - L3
 2 2 4 10  2 2 4 10 
0 1 1 6  ⇒ L = L − L ⇒ 0 1 0 2 
  2 2 3 
0 0 1 4  0 0 1 4 

Passo 6: L1 = L1 - 4 . L3
 2 2 4 10  2 2 0 − 6
0 1 0 2  ⇒ L = L − 4 • L ⇒ 0 1 0 2 
  1 1 3  
0 0 1 4  0 0 1 4 
L
Passo 7: L1 = 1 − L2
2
2 2 0 − 6 1 0 0 − 5
0 1 0 2  ⇒ L = L1 − L ⇒ 0 1 0 2 
  1
2
2  
0 0 1 4  0 0 1 4 

152
Programação Numérica

E a solução para o sistema encontrada é


 x1 = −5

 x2 = 2
x = 4
 3

2 – Método por Inversão de Matriz


Se multiplicarmos o sistema linear Ax = B à esquerda por A-1,
teremos A-1 Ax = A-1B.

E, se considerarmos que A-1 A = 1, podemos concluir que x = A-1 B


que é a solução do sistema linear.

Exemplo:

Seja o sistema:
2 ⋅ x1 + 2 ⋅ x2 + 4 ⋅ x3 = 8

 x1 + x2 + 3 ⋅ x3 = 5
 x + 3⋅ x + 4 • x = 8
 1 2 3

Matricialmente, temos:
 2 2 4   x1  8 
1 1 3  ⋅  x  = 5
   2  
1 3 4   x3  8 

Considerando
5 −1 −1 
 4 2
A = 1
−1
−1 1 
 4 2 
 −1 1 0 
 2 
Temos

5 − 1 −1 
 4 2  8  1
x = 1 −1  
1  ⋅ 5 ⇒ x = 1
 4 2   
 −1 1  8  1
2  
0
 b
A−1

Unidade 4 153
Universidade do Sul de Santa Catarina

3. Método geométrico
Quando o sistema linear for formado por duas equações com
duas incógnitas, significa dizer que a solução será equivalente a
descobrir a intersecção de duas retas.
a ⋅ x + b ⋅ y = c

d ⋅ x + e ⋅ y = f
Sendo que a e b não podem ser simultaneamente nulos nem d e e.

Existem três casos possíveis geometricamente e para cada caso


um tipo de solução. São eles:

Caso 1: As retas são concorrentes e se interceptam em um ponto


– Sistema Possível Determinado, ou seja, o sistema possui uma
única solução.

154
Programação Numérica

Caso 2: As retas são paralelas e não se interceptam – Sistema


Impossível, ou seja, não possui solução.

Caso 3: As retas são coincidentes e possuem todos os pontos em


comum – Sistema Possível Indeterminado, ou seja, o sistema
possui infinitas soluções.

Você conheceu nesta seção as diferentes formas de resolver os


sistemas lineares. Tais formas são aplicadas em uma determinada
situação e caberá a você identificar essa situação para aplicar o
método mais adequado.

Unidade 4 155
Universidade do Sul de Santa Catarina

Síntese

Nesta unidade você aprendeu um pouco mais sobre os sistemas


lineares e suas equações. Neste sentido, você verificou que sua
aplicabilidade se dá em diversos campos abrangendo desde a
matemática aplicada até a economia.

Você também viu que os sistemas de equações lineares podem


ser classificados de acordo com a(s) sua(s) solução(ões) e que pode
não possuir um conjunto de soluções.

Ao final, você acompanhou a revisão das operações sobre


matrizes para em seguida aprender os métodos de resolução de
sistemas lineares.

Atividades de autoavaliação

Ao final de cada unidade, você realizará atividades de autoavaliação. O


gabarito está disponível no final do livro didático. Esforce-se para resolver
as atividades sem ajuda do gabarito, pois, assim, você estará estimulando a
sua aprendizagem.

1) Assinale os tipos de solução existentes de sistemas lineares existentes:


a) Sistema Impossível Indeterminado.
b) Sistema Inexistente.
c) Sistema Impossível.
d) Sistema Possível Determinado.
e) Sistema Indeterminado.

156
Programação Numérica

2) Para cada uma das afirmações seguintes, assinale V para verdadeira e F


para falsa.

( ) A equação y = tan x + 3y é uma equação linear, pois possui


coeficientes reais não nulos, termo real independente e variáveis.

( ) Na equação 3x - 2y = 11, podemos afirmar que x e y são as


variáveis, 11 é o termo independente e 3 e 2 são os coeficientes.
( ) Todo conjunto formado por uma ou mais equações lineares recebe o
nome de Sistema de Equações Lineares.
( ) Matriz Aumentada é a matriz proveniente da junção da Matriz de
Coeficientes com a Matriz das Variáveis.
3) Encontre os valores das variáveis que satisfaça o sistema de equações
lineares seguinte.
9 ⋅ x1 − 8 ⋅ x2 + 7 ⋅ x3 = 21

 2 ⋅ x1 + x2 − x3 = 0
 x + 5 ⋅ x + 3 • x = 23
 1 2 3

Unidade 4 157
Universidade do Sul de Santa Catarina

4) Dado o sistema linear a seguir, resolva-o utilizando o Método por


Inversão de Matriz:
 x1 − x2 + x3 = 5

 x1 + x2 − x3 = 1
 − x + x + x = 11
 1 2 3

Saiba mais

Se você desejar, aprofunde os conteúdos estudados nesta unidade


ao consultar as seguintes referências:

LAY, D. C. Álgebra linear e suas aplicações. 2a ed. Rio de


Janeiro: LTC, 1999 KOLMANM B. Introdução à álgebra linear
com aplicações. 6. ed. Rio de Janeiro: LTC, 1998. .

BOLDRINI, J. L.; COSTA, S. I. R.; FIGUEIREDO, V. L.,


WETZLER, H. G.; Álgebra linear. 3. ed. São Paulo: Harbra, 1980.

158
5
unidade 5

Ajustamento de curvas

Objetivos de aprendizagem
„„ Entender o que é Diagrama de Dispersão;

„„ Aprender as diversas técnicas para descobrir as curvas que


melhor se ajustam aos pontos do diagrama de dispersão;
„„ Entender como cada técnica é aplicada à distribuição dos
pontos no diagrama de dispersão..

Seções de estudo
Seção 1 Introdução

Seção 2 Ajuste linear simples

Seção 3 Ajuste linear múltiplo

Seção 4 Ajuste polinomial

Seção 5 Casos não lineares


Universidade do Sul de Santa Catarina

Para início de estudo


Nesta unidade você estudará o problema de descobrir qual curva se
aproxima de um determinado conjunto de pontos de um diagrama
de dispersão. Por meio do estudo dessa questão, você verá que não é
possível encontrar uma curva que se adéque exatamente a todos os
pontos, porém existem técnicas que permitirão encontrar a que mais
se aproxima de tais pontos.

Neste sentido, você verá que é possível prever o comportamento


desses pontos através da curva de dispersão. Você aprenderá então
algumas técnicas existentes para encontrar tais curvas vendo assim
quando e como deveremos aplicá-las.

Seção 1 – Introdução
A engenharia normalmente utiliza os testes de laboratório para
validar os sistemas reais. Os pontos obtidos como resultados desses
testes demonstram a relação entre uma variável independente ou
explicativa com uma ou mais variáveis dependentes ou respostas.

Para entendermos melhor o que seriam variáveis independentes


ou explicativas e dependentes ou respostas, podemos observar a
seguinte equação:

y = β0 + β1x
y é a variável dependente, pois depende do valor de x;
x é a variável independente, pois não depende de nenhuma outra
variável.
A partir desses pontos, é formado um gráfico denominado
Diagrama de Dispersão, sendo praticamente impossível encontrar
uma curva que passe por todos esses pontos descrevendo com todas
as propriedades o sistema observado em laboratório. Isso se deve às
possíveis alterações de algumas variáveis durante o experimento e os
erros dos dados experimentais obtidos. Observe:

160
Programação Numérica

Figura 5.1 e 5.2 – Gráficos Diagrama de Dispersão


Fonte: http://www.estv.ipv.pt/PaginasPessoais/nconceicao/20042005_2/reg.pdf

Unidade 5 161
Universidade do Sul de Santa Catarina

Em razão disso, para encontrar uma função que


descreva o sistema real, em vez de interpolar os pontos,
devemos procurar por uma curva que melhor se
adapte a eles, sempre levando em conta os erros que,
na maioria das vezes, não se consegue prever.

A abordagem a seguir é válida para os casos discretos, pois o


sistema da experiência é descrito por um conjunto de pontos.

1. A partir de uma tabela de pontos (x1, y1), (x2, y2), ..., (xn, yn), com
xi pertencentes ao intervalo [a,b] e das m + 1 funções
g0(x), g1(x), ..., gm(x), contínuas em [a,b], devemos encontrar m + 1
coeficientes β0, β1, ..., βm, de tal forma que
f(x) = β0g0(x) + β1g1(x) + ... + βmgm(x) se aproxime de y(x),
fornecedora dos valores y0, y, ..., yn dos pontos da tabela.

Para resolver o problema de escolher as funções que mais se


adéquam, pode-se visualizar o diagrama de dispersão ou basear-
se nos fundamentos teóricos do experimento.

2. Tornando o desvio ou erro di = yi - f(xi)mínimo para todo


i = 1, 2, ..., n, pode-se conseguir com que f(x) se ajuste aos pontos
de yi, somando-se esses desvios elevados ao quadrado, teremos:

D(β0, β1, ..., βm) = ∑ di2


i =1

n
= ∑  yi − f ( xi ) 
2

i =1

n
= ∑  yi − β 0 g 0 ( x ) − β1 g1 ( x ) −  − β m g m ( x ) 
2

i =1

Como devemos encontrar os βi’s para que o desvio


D(.) seja mínimo e D(.), é definido como uma soma de
quadrados. Nomeou-se esse método de Método dos
Mínimos Quadrados.

162
Programação Numérica

Para que possamos encontrar o valor mínimo de uma função,


devemos derivar parcialmente essa em relação às variáveis
independentes ou explicativas, assim:

∂D n
= 2 ⋅ ∑  yi − β 0 g 0 ( xi ) − β1 g1 ( xi ) −  − β m g m ( xi )  ⋅ g 0 ( xi )
∂β 0 i =1

∂D n
= 2 ⋅ ∑  yi − β 0 g 0 ( xi ) − β1 g1 ( xi ) −  − β m g m ( xi )  ⋅ g1 ( xi )
∂β1 i =1

∂D n
= 2 ⋅ ∑  yi − β 0 g 0 ( xi ) − β1 g1 ( xi ) −  − β m g m ( xi )  ⋅ g 2 ( xi )
∂β 2 i =1

∂D n
= 2 ⋅ ∑  yi − β 0 g 0 ( xi ) − β1 g1 ( xi ) −  − β m g m ( xi )  ⋅ g m ( xi )
∂β m i =1

n
Para simplificar, substituiremos ∑ por ∑, rearranjando as
i =1

equações e as igualando a zero teremos:


( ∑ g ( x ) ) β + ( ∑ g ( x ) g ( x  i ) β +  + ( ∑ g ( x ) g ( x  i ) β = ∑ y g ( x )
0 i
2
0 1 i 0 1 0 i m m i 0 i

( ∑ g ( x ) g ( x  i ) ) β + ( ∑ g ( x ) ) β +  + ( ∑ g ( x ) g ( x  i ) ) β = ∑ y g ( x )
0 i 1 0 1 i
2
1 1 i m m i 1 i

( ∑ g ( x ) g ( x  i ) ) β + ( ∑ g ( x )g ( x  i ) ) β +  + ( ∑ g ( x ) ) β = ∑ y g ( x )
0 i m 0 1 i m 1 m i
2
m i m i

O sistema mostrado anteriormente é um sistema linear com


equações normais e pode ser solucionado com qualquer método
apresentado no capítulo anterior (Método de Eliminação,
Método por Inversão de Matriz ou Método Geométrico). É
importante salientar que a matriz de coeficientes desse sistema
possui a parte triangular inferior igual à parte triangular superior.

Unidade 5 163
Universidade do Sul de Santa Catarina

Seção 2 – Ajuste linear simples


No caso de os pontos do diagrama de dispersão assumirem o
formato de uma reta, podemos deduzir que a variável independente
ou explicativa x é relacionada com a variável dependente ou
resposta y por meio de um modelo linear f(x) = β0 + β1x. Observe:

Figura 5.3 – Gráfico Interpolação X Ajuste Linear Simples.


Fonte: http://www.estv.ipv.pt/PaginasPessoais/nconceicao/20042005_2/reg.pdf

O desafio é encontrar valores β0 e β1, sabendo-se que valores


diferentes desses coeficientes gerarão diferentes retas que se
ajustam aos pontos do diagrama de dispersão. Com isso, para
minimizar as medidas, podemos utilizar o Método dos Mínimos
Quadrados. Acompanhe:
n
D ( β 0 , β1 ) = ∑ [ yi − β 0 − β1 xi ]
2

i =1

Simplificando:
n ∑ x  ⋅  β
i   ∑ yi 
 = 
0

 ∑ xi ∑ x   β 1  ∑ yi xi 
2
i

164
Programação Numérica

Resolvendo:
n ⋅ ∑ yi xi − ∑ xi ⋅ ∑ yi
β1 =
n ⋅ ∑ xi2 − ( ∑ xi )
2

∑ yi − ( ∑ xi ) β1
β0 =
n

Exemplo:

Passo 1 – Ajuste os dados da tabela a seguir a uma reta de modo


que D(β0, β1,) seja o menor possível.

i xi yi
1 1.3 2.0
2 3.4 5.2
3 5.1 3.8
4 6.8 6.1
5 8.0 5.8

∑x
i =1
i = 1.3 + 3.4 + 5.1 + 6.8 + 8.0 = 24.6

∑x
i =1
2
i = 1.32 + 3.42 + 5.12 + 6.82 + 8.02 = 149.5

∑y
i =1
i = 2.0 + 5.2 + 3.8 + 6.1 + 5.8 = 22.9

∑ x y = (1.3 + 2.0 ) + ( 3.4 + 5.2 ) + ( 5.1 + 3.8) + ( 6.8 + 6.1) + (8.0 + 5.8) = 127.54
i=1
i i

Passo 2 – Substituindo os valores nos somatórios da equação,


temos:
5 ⋅127.54 − 24.6 ⋅ 22.9
β1 = = 0.522
5 ⋅149.5 − 24.52
22.9 − 24.6 ⋅ 0.522
β0 = = 2.01
5
Com isso, obtemos a reta f(x) = 2.01 + 0.522x.

Passo 3 – Aplicando a equação obtida nos valores de x iniciais,


teremos:

Unidade 5 165
Universidade do Sul de Santa Catarina

i xi yi
1 1.3 2.69
2 3.4 3.78
3 5.1 4.67
4 6.8 5.56
5 8.0 6.19

No gráfico a seguir você verifica os pontos do diagrama de


dispersão e a reta encontrada:

Figura 5.4 – Resultado do exemplo representado pelo gráfico


Fonte: Elaboração do autor

Seção 3 – Ajuste linear múltiplo


Podem existir experimentos onde a variável resposta depende
de duas ou mais variáveis explicativas, porém o diagrama de
dispersão ainda apresenta um comportamento linear. Nestes
casos, deve-se aplicar o ajuste linear múltiplo.

Se g0(x) = 1, g1(x) = x1, g2(x) = x2, ..., gm(x) = xm, onde xi, com
i = 1, 2, ..., m, são variáveis distintas, podemos deduzir a seguinte
equação:

166
Programação Numérica

f(x) = β0 + β1x1 + β2x2 + ... + βmxm

Fazendo analogia ao sistema linear simples, temos:

β0 @ β1

A solução do problema será encontrada a partir da obtenção dos


valores de βj.

Exemplo:

Passo 1 – Ajuste os dados da tabela a seguir a uma reta de modo


que D(β0, β1, β2) seja o menor possível.

i x1i x2i yi
1 -1 -2 13
2 0 -1 11
3 1 0 9
4 2 1 4
5 4 1 11
6 5 2 9
7 5 3 1
8 6 4 -1

Passo 2 – Para este caso, teremos a equação f(x) = β0 + β1x1 + β2x2 e


o sistema ficará da seguinte forma:
n

∑x 1i ∑x 2i   β   ∑ yi 
  0  
 ∑ x1i ∑x ∑x x 1i  ⋅  β1  =  ∑ yi x1i 
2
1i 2i
  β   
 ∑ x2i ∑x x ∑x   2   ∑ yi x2i 
2
1i 2 i 2i

Passo 3 – Calculando os somatórios:


8

∑x
i =1
1i = −1 + 0 + 1 + 2 + 4 + 5 + 5 + 6 = 22

∑x
i =1
2i = −2 + ( −1) + 0 + 1 + 1 + 2 + 3 + 4 = 8

∑ x = ( −1) + 02 + 12 + 22 + 52 + 52 + 62 = 108
2 2
1i
i =1

∑x = ( −2 ) + ( −1) + 02 + 12 + 12 + 22 + 32 + 42 = 36
2 2 2
2i
i =1

Unidade 5 167
Universidade do Sul de Santa Catarina

∑x
i =1
x = ( −1) ⋅ ( −2 ) + 0 ⋅ ( −1) + 1 ⋅ 0 + 2 ⋅1 + 4 ⋅1 + 5 ⋅ 2 + 5 ⋅ 5 + 6 ⋅ 4 = 57
1i 2 i

∑y
i =1
i = 13 + 11 + 9 + 4 + 11 + 9 + 1 + ( −1) = 57

∑yx
i =1
i 1i = 13 ⋅ ( −1) + 11 ⋅ 0 + 9 ⋅1 + 4 ⋅ 2 + 11⋅ 4 + 9 ⋅ 5 + 1⋅ 5 + ( −1) ⋅ 6 = 92

∑yx
i =1
i 2i = 13 ⋅ ( −2 ) + 11 ⋅ ( −1) + 9 ⋅ 0 + 4 ⋅1 + 11 ⋅1 + 9 ⋅ 2 + 1 ⋅ 3 + ( −1) ⋅ 4 = −5

Passo 4 – Substituindo os somatórios encontrados na fórmula,


teremos:
8 22 8   β 0  57 
 22
 108 57  ⋅  β1  = 92 
8 57 36   β 2   −5

Passo 5 – Utilizando o Método de Gauss para resolver o sistema,


encontramos a solução a seguir:

β0 = 4.239 β0 = 3.4 β0 = - 6.464

Passo 6 – Substituindo os coeficientes encontrados, teremos a


seguinte equação solução:

f(x) = 4.239 + 3.4x1 - 6.464x2

Seção 4 – Ajuste polinomial


Quando os pontos do diagrama de dispersão não apresentam
características lineares vistas nos outros tipos de ajustes, podemos
realizar o ajuste polinomial usando as seguintes funções gi(x):
g0(x) = 1
g1(x) = x
g2(x) = x2

gm(x) = xm

168
Programação Numérica

Desta forma, obtemos a seguinte equação f(x) de grau m

f(x) = β0 + β1x + β2x2 + ... + βmxm

Conforme poderemos notar a seguir, o ajuste polinomial de


curvas é um caso particular do ajuste linear múltiplo, tendo
apenas uma variável independente:

n

∑x i ∑x 2
i 

∑x
 β0  ∑ i 
m
i  y 
 ∑ xi ∑x ∑x ∑x
  β1   ∑ yi xi 
m +1
2
i
3
i  i
  
 m+2  2 
 ∑ xi ∑x ∑x  ⋅∑x
  β 2  =  ∑ yi xi 
2 3 4
i i i
 
           
   
 ∑ xim β   y xm 
 ∑x m +1
i ∑i
x m+2
 ∑i 
x 2m
  m 
∑ i i 
Exemplo:

Passo 1 – Ajuste os dados da tabela a seguir a uma curva de


modo que D(β0, β1, β2) seja o menor possível.
i xi yi
1 -2.0 -30.5
2 -1.5 -20.2
3 0.0 -3.3
4 1.0 8.9
5 2.2 16.8
6 3.1 21.4

Passo 2 – Para este caso, teremos a equação f(x) = β0 + β1x + β2x2 e


o sistema ficará da seguinte forma:
n

∑x i ∑x 2
i
  β   ∑ yi 
  0  
 ∑ xi ∑x ∑x  ⋅  β1  =  ∑ yi xi 
2 3
i i
  β   2
 ∑ xi ∑x ∑x   2   ∑ yi xi 
2 3 4
i i

Passo 3 – Calculando os somatórios:


6

∑x
i =1
i = −2 + ( −1.5 ) + 0 + 1 + 2.2 + 3.1 = 2.8

∑ x = ( −2 ) + ( −1.5) + 02 + 12 + 2.22 + 3.12 = 21.7


2 2 2
i
i =1

Unidade 5 169
Universidade do Sul de Santa Catarina

∑ x = ( −2 ) + ( −1.5) + 03 + 13 + 2.23 + 3.13 = 30.064


3 3 3
i
i =1

∑ x = ( −2 ) + ( −1.5) + 04 + 14 + 2.24 + 3.14 = 137.8402


4 4 4
i
i =1

∑y
i =1
i = −30.5 + ( −20.5 ) + ( −3.3) + 8.9 + 16.8 + 21.4 = −6.9

∑ x y = ( −2 ) ⋅ ( −30.5) + ⋅ ( −20.5) ⋅ ( −1.5) + ( −3.3) ⋅ 0 + 8.9 ⋅1 + 16.8 ⋅ 2.2 + 21.4 ⋅ 3.1 = 203.5
i =1
i i

∑ x x = ( −2 ) ⋅ ( −30.5) + ⋅ ( −20.5 ) ⋅ ( −1.5 ) + ( −3.3) ⋅ 02 + 8.9 ⋅12 + 16.8 ⋅ 2.22 + 21.4 ⋅ 3.12 = 128.416
2 2 2
i i
i =1

Passo 4 – Substituindo os somatórios encontrados na fórmula,


teremos:
6 2.8 21.7   β 0   −6.9 
 2.8 21.7 30.064  ⋅  β  =  203.5 
   1  
 21.7 30.064 137.8402   β 2  128.416 

Passo 5 – Utilizando o Método de Gauss para resolver o sistema,


encontramos a solução a seguir:

β0 = - 2.018 β0 = 11.33 β0 = - 1.222

Passo 6 – Substituindo os coeficientes encontrados, teremos a


seguinte equação solução:

f(x) = - 2.018 + 11.33 - 1.222x2

Passo 7 – No gráfico a seguir, podemos verificar os pontos do


diagrama de dispersão e a curva encontrada:

170
Programação Numérica

Figura 5.5 – Resultado do exemplo representado pelo gráfico


Fonte: Elaboração do autor

Seção 5 – Casos não lineares


Devemos utilizar métodos de resolução para casos não lineares.
Toda vez que analisamos os pontos no diagrama de dispersão,
observamos um modelo alternativo ao linear e polinomial, como
no diagrama de dispersão seguinte, que, aparentemente, ajusta-se
melhor a uma função exponencial do tipo y ( x ) = β1 ⋅ e β x , com β0
1

e β1 positivos. Observe:

Unidade 5 171
Universidade do Sul de Santa Catarina

Figura 5.6 – Diagrama de Dispersão


Fonte: http://www.estv.ipv.pt/PaginasPessoais/nconceicao/20042005_2/reg.pdf

Se efetuarmos uma linearização, poderemos aplicar o método de


mínimos quadrados, assim como fizemos nos casos anteriores:

Se y ( x ) = β1 ⋅ e β x então z = lny(x) ≅ lnβ0 - β1x


1

Se α0 = lnβ0 e α0 = - β1, então lny(x) ≅ f(x) = α0 - α1x, tornando-se,


assim, um problema linear e, com isso, podemos aplicar o método
de mínimos quadrados para resolvê-lo.

Exemplo:

Passo1 – Ajuste os dados da tabela a seguir a equação


y ( x ) = β1 ⋅ e β1x

i xi yi
1 0.1 5.9
2 1.5 8.8
3 3.3 12.0
4 4.5 19.8
5 5.0 21.5

172
Programação Numérica

Passo 2 – Aplicando o logaritmo nesperiano aos dois lados da


equação teremos:

lny =ln (β0 . e −β1x )

lny = lnβ0 + β1x


lny = α0 + α1x

Passo 3 – Com z = lny, teremos:


i xi yi
1 0.1 1.77
2 1.5 2.17
3 3.3 2.48
4 4.5 2.99
5 5.0 3.07

Passo 4 – Como o sistema obtido é um sistema linearizado 2x2,


podemos aplicar diretamente a solução dada pelas equações e
encontrar α0 = 1.734 e α1 = 0.2646. A curva linearizada seria:

Figura 5.7 –Curva obtida do exemplo representado pelo gráfico


Fonte: Elaboração do autor

Passo 5 – Como α0 = lnβ0 e α1 = - β1, então obtemos β0 = 5.663


e β1 = - 0.2646, resultando na função y(x) = 5.663 . e-0.2646 e no
gráfico a seguir:

Unidade 5 173
Universidade do Sul de Santa Catarina

Figura 5.8 –Curva obtida do exemplo representado pelo gráfico


Fonte: Elaboração do autor

Síntese

Nesta unidade você verificou que podemos ajustar as curvas


em vez de interpolá-las, pois isso nos dá uma melhor
aproximação dos pontos do diagrama de dispersão, diminuindo
consideravelmente a margem de erro e permitindo que decisões
mais acertadas sejam tomadas a partir dessa informação.

Cabe salientar que outras técnicas de ajustamento de curvas


existem e que podem ser aplicadas para seus casos específicos,
caberá a você pesquisar e se aprofundar melhor neste assunto tão
interessante e instigante.

174
Programação Numérica

Atividades de autoavaliação

Ao final de cada unidade, você realizará atividades de autoavaliação. O


gabarito está disponível no final do livro didático. Esforce-se para resolver
as atividades sem ajuda do gabarito, pois, assim, você estará promovendo
a sua aprendizagem.

1) Leia a seguinte afirmação:


Diagrama de Dispersão é o gráfico dos pontos resultantes dos testes
de laboratório para a validação de sistemas reais formados pelo
relacionamento de uma variável independente ou explicativa com uma ou
mais variáveis dependente ou resposta.
Essa afirmação é:
a) ( ) Verdadeira.
b) ( ) Falsa.

2) Os valores mostrados na tabela a seguir são medidas de uma


quantidade T(t) emºC que varia no tempo. Escolha o conjunto de
funções para encontrar uma aproximação para T(t) que ajuste, por
mínimos quadrados, os seguintes dados:
t T(t)
0.3 1.8
2.7 1.9
4.5 3.1
5.9 3.3
7.8 3.3

Unidade 5 175
Universidade do Sul de Santa Catarina

3) O ajuste polinomial é um caso especial de ajuste linear, pois


x1 = x, x2 = x2, x3 = x3, ..., xn = xn. A afirmação está:
a) ( ) Correta.
b) ( ) Incorreta.

Saiba mais

Se você desejar, aprofunde os conteúdos estudados nesta unidade


ao consultar as seguintes referências:

PEDROSA, Diogo Pinheiro Fernandes. Ajuste de curvas.

BARROSO, Leônidas C.; et al. Cálculo numérico (Com


Aplicações).2ª.ed. São Paulo: Harbra, 1987.

SPERANDIO, Décio; MENDES, João T.; MONKEN,


Luiz H. Cálculo numérico: características matemáticas e
computacionais dos métodos numérios. Prentice-Hall, 2003.

176
Para concluir o estudo

Ao final do estudo desta disciplina, você já está apto a criar


algoritmos para resolver muitos problemas de programação
numérica, sabendo transcrevê-los para a linguagem de
programação Pascal. Nesse sentido, você provavelmente
aprendeu a identificar e resolver sistemas de equações
lineares, aplicando algumas das técnicas apresentadas
aqui. No que se refere a varias técnicas de resolução
apresentadas neste conteúdo você teve a oportunidade
também de aprender a encontrar a curva que passa por um
conjunto de pontos de um diagrama de dispersão.

Mesmo que você não pretenda desenvolver sistemas


computacionais, você certamente, durante sua vida
profissional, terá de se relacionar com empresas de
software ou até mesmo programadores e entender toda
linguagem técnica que envolve a sua área atuação,
podendo, assim, dialogar com eles sem a necessidade de
algum técnico para ajudá-lo. Você saberá expressar de
maneira mais clara e precisa toda a sua necessidade para
o sistema ou procedimento que deseja implementar.

Ou seja, de uma maneira ou de outra, ao aprender a


programação numérica, você estará agregando ao seu
currículo profissional uma capacidade de lidar com as
questões tecnológicas que se impõe na nossa sociedade hoje.
Referências

BARROSO, Leônidas C.; et al. Cálculo numérico (Com


Aplicações).2ª.ed. São Paulo: Harbra, 1987.
BOLDRINI, J. L.; COSTA, S. I. R.; FIGUEIREDO, V. L., WETZLER, H. G.;
Álgebra linear. 3. ed. São Paulo: Harbra, 1980 .
CARVALHO, Flávia Pereira de. Apostila da disciplina de
PROGRAMAÇÃO I- Linguagem Pascal. Faculdade de Informática
de Taquara. In: http://fit.faccat.br/~fpereira/apostilas/apostila_prog1_
ago2006.pdf. Acesso em: 14 fev 2011.

FARRER, Harry; et al. Pascal estruturado. 3. ed. Rio de Janeiro:


LTC, 1999.
FORBELLONE, André Luiz V.; EBERSPÄCHER, Henri Frederico.
Lógica de programação: a construção de algoritmos e
estruturas de dados. 3. ed.. São Paulo: Pearson Prentice Hall, 2005.
KOLMANM B. Introdução à álgebra linear com aplicações. 6.
ed. Rio de Janeiro: LTC, 1998. .
LAY, D. C. Álgebra linear e suas aplicações. 2a ed. Rio de
Janeiro: LTC, 1999.
LUNA, Gustavo Henrique Silva Alencar. Introdução ao Estudo
de Sistemas Lineares. In: http://www.tutorbrasil.com.br/forum/
gustavo_hsal/Introducao_ao_Estudo_de_Sistemas_Lineares_-_
Gustavo_Henrique_S._A._Luna.pdf. Acesso em: 14 fev 2011.
PEDROSA, Diogo Pinheiro Fernandes. Ajuste de Curvas.
RIZZI, Rogério Luís. Capítulo 5: Ajuste de curvas pelo método
dos mínimos quadrado. 1. Diagrama de dispersão. Disponível
em: http://www.inf.unioeste.br/~rogerio/MQM8.pdf. Acesso em: 14
fev 2011.
SANTOS JÚNIOR, José Maria Rodrigues. Pascal.
SILBERSCHATZ, A. et al. Sistemas Operacionais: conceitos e
aplicações. Campus, 2001.
SPERANDIO, Décio; MENDES, João T.; MONKEN, Luiz H. Cálculo
numérico: características matemáticas e computacionais dos
métodos numérios. Prentice-Hall, 2003.
Universidade do Sul de Santa Catarina

SPERANDIO, Décio; MENDES, João T.; MONKEN, Luiz H. Cálculo numérico:


características matemáticas e computacionais dos métodos numérios.
Prentice-Hall, 2003.
TANENBAUM, A. Organização estruturada de computadores. 4. ed. LTC.
Disponível em: <http://ufpa.br/dicas/mic/mic-e-s.htm>. Acesso em: 14
fev 2011.
Disponível em: <www.htmlstaff.org/ver.php?id=15153>. Acesso em: 14
fev 2011.
Disponível em: <www.laercio.com.br/artigos/HARDWARE/HARD-016/
HARD-016.HTM>. Acesso em: 14 fev 2011.
Disponível em: <http://informatica.hsw.uol.com.br/microprocessadores.
htm>. Acesso em: 14 fev 2011.
Disponível em: <http://informatica.hsw.uol.com.br/memoria-do-
computador.htm>. Acesso em: 14 fev 2011.
Disponível em: <www.prof2000.pt/users/afaria2004/memoria.htm>.
Acesso em: 14 fev 2011.
Disponível em: <www.gliffy.com/gliffy/#>. Acesso em: 14 fev 2011.
Disponível em: <http://katsualgoritmos.web44.net/estrutura.htm>. Acesso
em: 14 fev 2011.
Disponível em: < http://www.hardware.com.br/artigos/linguagens//>.
Acesso em: 14 fev 2011.
Disponível em: <http://pessoal.sercomtel.com.br/matematica/medio/
matrizes/sistemas.htm>. Acesso em: 14 fev 2011.
Disponível em: <http://miltonborba.org/Alg_Lin/Selas.htm>. Acesso
em: 14 fev 2011.

180
Sobre o professor conteudista

Fernando Henrique Cardoso é arquiteto de software


na Companhia Zaffari e professor universitário na
FTEC de Porto Alegre. Bacharel em informática pela
Pontifícia Universidade Católica do Rio Grande do Sul
(PUC-RS) e mestre em informática pela Universidade
Federal do Rio Grande do Sul (UFRGS). Iniciou suas
atividades profissionais como programador Delphi no
Serviço Nacional de Aprendizagem Industrial do Rio
Grande do Sul (SENAI/RS) desenvolvendo simuladores
educacionais. Foi software designer na Hewlett Packard
(HP), Analista de Sistemas na Gerdau, coordenador
de infraestrutura de software no Sicredi, Analista de
Sistemas na Dígitro e Analista de Negócios na Softplan.
Na vida acadêmica foi bolsista em alguns projetos na
PUC-RS, instrutor técnico na Escola SENAI/Visconde
de Mauá e professor universitário na FTEC de Porto
Alegre e Unisul de Palhoça.
Respostas e comentários das
atividades de autoavaliação

Unidade 1
1) c)
2) 2, 1, 3
3) d)

Unidade 2
1) a) Verdadeira
2)
Algoritmo Exerc3;

Var
valor : real;
n1, n2, n5, n10: inteiro;
Início
Imprimir(“Informe o valor: “);
Ler(valor);

Se (valor > 0) então


Início
n1 <- 0;
n2 <- 0;
n5 <- 0;
n10 <- 0;

n10 <- valor div 10;


valor <- valor mod 10;

n5 <- valor div 5;


valor <- valor mod 5;

n2 <- valor div 2;


Universidade do Sul de Santa Catarina

n1 <- valor mod 2;

Imprimir(“A quantidade de notas são: “);


Imprimir(“10: “, n10);
Imprimir(“5: “, n5);
Imprimir(“2: “, n2);
Imprimir(“1: “, n1);
Fim;
Senão
Imprimir(“O valor informado deve ser maior que
0!“);
Fim.

Unidade 3
1) a) Verdadeira
2)
program exerc3;

var
l, h, area, perimetro: real;
begin
write(‘Informe o lado do retângulo: ‘);
readln(l);
write(‘Informe a altura do retângulo: ‘);
readln(h);

area = b * h;
perimetro = 2 * b + 2 * h;

writeln(‘A área do retângulo informado é: ‘, area);


writeln(‘O perímetro do retângulo informado é: ‘,
perimetro);
end.
3)
program exerc3;

var
l, h, area, perimetro: real;

function calculaArea(base, altura: real) : real;


begin
calculaArea = base * altura;
end;

184
Programação Numérica

function calculaPerimetro(base, altura: real) : real;


begin
calculaPerimetro = 2 * base + 2 * altura;
end;

procedure informa(a, p: real);


begin
writeln(‘A área do retângulo informado é: ‘, a);
writeln(‘O perímetro do retângulo informado é: ‘,
p);
end;

begin
write(‘Informe o lado do retângulo: ‘);
readln(l);
write(‘Informe a altura do retângulo: ‘);
readln(h);

area = calculaArea(b, h);


perimetro = calculaPerimetro(b, h);
informa(area, perimetro);
end.

Unidade 4
1) c ) e d ).
2) F, V, F, F
3)

x1 - 1; x2 - 2; x3 - 4

4)

x1 - 3; x2 - 5; x3 - 7

Unidade 5
1) a) Verdadeira

185
Universidade do Sul de Santa Catarina

2)
5

∑x
i=1
i = 21.2
5

∑x
i =1
2
i = 123.28
5

∑y
i=1
i = 14.0
5

∑x y
i=1
i i = 68.37

21.2 ⋅14.0 − 5 ⋅ 68.37


β1 = = 0.2698
21.22 − 5 ⋅123.28
14.0 − 0.2698 ⋅ 21.2
β0 = = 1.656
5

f(x) = 1.656 + 0.2698x

3) Incorreta. O ajuste polinomial é um caso particular de ajuste linear


múltiplo.

186
Biblioteca Virtual

Veja a seguir os serviços oferecidos pela Biblioteca Virtual aos


alunos a distância:

„„ Pesquisa a publicações online


www.unisul.br/textocompleto
„„ Acesso a bases de dados assinadas
www. unisul.br/bdassinadas
„„ Acesso a bases de dados gratuitas selecionadas
www.unisul.br/bdgratuitas
„„ Acesso a jornais e revistas on-line
www. unisul.br/periodicos
„„ Empréstimo de livros
www. unisul.br/emprestimos
„„ Escaneamento de parte de obra*

Acesse a página da Biblioteca Virtual da Unisul, disponível no EVA


e explore seus recursos digitais.
Qualquer dúvida escreva para bv@unisul.br

* Se você optar por escaneamento de parte do livro, será lhe enviado o


sumário da obra para que você possa escolher quais capítulos deseja solicitar
a reprodução. Lembrando que para não ferir a Lei dos direitos autorais (Lei
9610/98) pode-se reproduzir até 10% do total de páginas do livro.

Anda mungkin juga menyukai