Você está na página 1de 33

1

COMPUTADORES

I.1 Histrico 3500 a.c. Final Sculo XVI 1642 1822/1833 ADA 1854 1885 1936 1937 1940 45 1944 baco: 1 instrumento automtico de clculo Bastes (estruturas) de Napier Blaise Pascal Mquina de Pascal (Soma e Subtrao) Charles Babbage Mquina de Diferenas/Mquina Analtica Ada Augusta (esposa de Babbage), considerada a 1 Programadora de Computadores George Boole: lgebra de Boole Avanos na Teoria de Circuitos Lgicos (Aritmtica Binria) Herman Hollerith Carto Perfurado Mquina de recenseamento Alan M. Turing Mquina de Turing Iniciou a Teoria Matemtica da Computao (compiladores). Howard H. Diken (IBM): 1 Computador Eletromecnico MARK-I/44 ENIAC (Electronic Numerical Integrator and Calculator) - Projeto do Exrcito Americano para Clculos de Balstica John Von Newmann Idias de Programa Armazenado EDVAC/52

I.2 Evoluo dos Computadores 1 GERAO (1938 1952): - Vlvulas e Rels Eletromagnticos - Linguagem de Mquina - Grandes e de Difcil Operao - Memria de Ferrite 2 GERAO (1952 1964): - Gerao do Transstor - Potncia/Confiabilidade Tamanho/Preo - Linguagens de Alto Nvel: Cobol, Algol e FORTRAN - Memria de Tambores e Fitas magnticas 3 GERAO (1964 1975): - Circuitos Integrados (CIs) de Mdio Porte - Surgem Minicomputadores - Idias de Programao Estruturada, Multiprogramao e Time Sharing - Programao em Tempo Real e Modo Interativo - Memrias de Semicondutores e Discos Magnticos 4 GERAO (1975 1981): - CIs de Grande Porte: Microprocessador inclui toda CPU Tecnologia LSI - Computadores Pessoais - Novas Linguagens de Programao como Pascal, C, Prolog, - Utilizao de Disquetes - Redes de Dados Para Interligar Computadores

5 GERAO (1981 - ????): - CIs de altssimo Porte:Tecnologia VLSI Very Large Scale Integrator - Inteligncia Artificial - Linguagens Naturais - Reconhecimento e Aceitao dos mtodos e ferramentas da ENGENHARIA DE SOFTWARE - Intranets nas empresas Busca por Sistemas Abertos: Indepentes de fornecedor (SW/HW) - Tecnologia de Objetos Anlise, Projeto e Implementao (C++, Eiffel, Java, Smalltalk, ...) - Performance SGBD: Eficientes para aplicaes Crticas (Tempo-Real) I.3 Tipos de Computadores

Lgica Predeterminada: O algoritmo est intrnsecamente implementado na fiao dos circuitos: - Calculadoras executam um determinado nmero de algoritmos matemticos predefinidos; - Computadores Analgicos utilizados principalmente para controle de processos e problemas de simulaes. Manipulam sinais eltricos analgicos. Lgica Programada: Computadores convencionais, digitais ou hbridos, que admitem a programao de algoritmos atravs de linguagens de programao; - 3 Tipos de Operaes: - aritmticas (soma e subtrao); - lgicas (comparaes); - Armazenamento/Recuperao de Informao

I.4 -

Arquitetura Bsica Modelo de VON NEWMAN (1950)

CPU Unidade de Controle

ULA Entrada (teclado) Memria Principal (RAM) Sada (impressora)

Memria Auxiliar

ULA RAM

Unidade de Lgica e Aritmtica Random Access Memory (Memria de Acesso Aleatrio)

I.5

Representao de Dados na Memria

I.5.1 - Sistema de Numerao Decimal o sistema de representao de dados utilizado em nossa aritmtica diria, composto de 10 (dez) dgitos, e, por isto mesmo, chamado de Sistema Decimal ou na Base 10. Sistema Decimal (Base 10) dgitos: { 0,1,2,3,4,5,6,7,8,9 } Exemplo_1 O Decimal 2562 pode ser representado por: 2* 1000 (103) + 5* 100 (102) + 6* 10 (101) + 2* 1 (100) = 2000 = 500 = 60 = 2 = 2562

Pergunta: Voc tem idia de como o computador reconhece que um nmero X maior que um nmero Y? ( a resposta est no quadro acima )

I.5.2 - Sistema de Numerao Binrio o sistema de representao de dados utilizado pelos computadores, composto pelos 02 (dois) dgitos binrios, e, por isto mesmo, chamado de Sistema Binrio ou na Base 2. Sistema Binrio (Base 2) dgitos { 0,1 } Exemplo_2 O Valor Binrio 110101, (que corresponde ao valor 53 no sistema decimal) pode ser representado por: 1* 25 + 32 + 1* 24 + 0* 23 + 1* 22 + 0* 21 + 1* 20 16 + 0 + 4 + 0 + 1

= 5310

I.5.3 Mudana da Base de Representao Exemplo_3 Seja o valor 1410, como represent-lo na Base 2: (14)10 ( ? )2 .
14 0 2 7 1

2 3 1

2 1 2 0 1

OBS: O computador utiliza o sistema binrio, da a necessidade da mudana de Base.

I.6

Linguagem de Mquina

Serve para expressar programas computacionais em cdigos executveis de mquina, mais conhecidos como cdigos binrios.

1.6.1 Caractersticas A memria dividida em endereos, ou posies, semelhante a um esquema de caixas postais; Cada endereo de memria possui tamanho nico, definido em bits; O Bit a menor unidade de informao possvel de ser manipulada pelos computadores; Cada endereo serve para armazenar algum valor de dado ou comando; Cada Comando dividido em duas partes: uma que diz qual operao ser realizada, e outra que informa o endereo de memria sobre o qual a operao ser executada.

EX: Suponha uma linguagem de mquina com uma palavra de memria de 8 bits:
Endereo de Memria

OP

Endereo

OP Cdigo da Operao a ser executada (3 primeiros bits) Endereo endereo do dado sobre o qual ser executada a operao (5 ltimos bits)

1.6.2 Exemplo de um Conjunto de Comandos (Instrues) de Mquina

Cdigo da Operao 001 010 011 100 101 110 111

Significado Carregue: copie no acumulador o contedo da palavra endereada Armazene: copie na palavra endereada o contedo do acumulador Some: substitua o contedo atual do acumulador pela soma do seu contedo com o contedo da palavra endereada Subtraia: substitua o contedo atual do acumulador pelo resultado obtido da subtrao entre este contedo e o contedo da palavra endereada Desvie: salte para a instruo indicada pela palavra endereada Desvie se Diferente de Zero: salte para a instruo na palavra endereada se o valor contido no acumulador for diferente de Zero Pare: encerre a execuo

OBS: O acumulador pode ser visto como um endereo auxiliar. Exemplo: Suponha o programa abaixo carregado nas 10 palavras (endereos) iniciais da memria:

Endereo da Memria (binrio) 00000 00001 00010 00011 00100 00101 00110 00111 01000 01001

Cdigo de Operao 001 010 001 011 010 001 100 010 110 111

Operando (endereo) 01010 01100 01110 01011 01110 01100 01101 01100 00010 00000

Contedo Inicial da Memria e seus dados associados:


00000 00101010 00100 01001110 01000 11000010 01100 00000000 00001 01001100 00101 00101100 01001 11100000 01101 00000001 00010 00101110 00110 10001101 01010 00000011 01110 00000000 00011 01101011 00111 01001100 01011 00000100 01111 00000000

Exerccio para Casa: Qual o Contedo Final da Memria e seus dados associados?
00000 00001 00010 00011

00100

00101

00110

00111

01000

01001

01010

01011

01100

01101

01110

01111

II ALGORITMOS
II.I Definio: Algoritmo toda sequncia ordenada e sem ambiguidades, de aes simples (comandos) que levam soluo de um determinado problema. Exemplos: -

Receitas culinrias em geral; Problemas Cientficos; Correografias de ballet, etc...

II.2 Caractersticas dos Algoritmos 0 ou mais Entradas e 1 ou mais Sadas; COMPLITUDE todo algoritmo possui incio-meio-fim e deve proporcionar uma descrio completa do problema a ser resolvido; CORRETUDE fornecer sadas (respostas) corretas para as entradas certas; FINITUDE a execuo do algoritmo em algum momento encerrada (possui Fim); NO AMBIGUIDADES cada ao possui significado nico e inequvoco.

II.3 Representao dos Algoritmos Os algoritmos podem ser representados de diversas formas: Linguagem Natural (ex. receitas em geral); Fluxogramas diagramas de fluxo ou diagramas de blocos; Linguagem de Mquina; Pseudocdigos; Linguagem de Programao (FORTRAN, C++, etc...). ....

ALGORITMO

LINGUAGEM DE PROGRAMAO

PROGRAMA

II.4 Elementos Bsicos para Especificar Algoritmos

II.4.1 Caracteres Vlidos ALFABTICOS : A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z 0,1,2,3,4,5,6,7,8,9 !, ( , ), \ , vrgula, plicas

NUMRICOS: ESPECIAIS:

II.4.2 Tipos de Dados Primitivos Os tipos de dados primitivos so: INTEIRO REAL CARACTER LGICO qualquer valor do conjunto dos nmeros Inteiros; qualquer valor do conjunto dos nmeros Reais; valores que so uma sequncia de caracteres alfanumricos; valores do tipo lgico: Falso ou Verdadeiro.

II.4.3 Variveis Definio: Varivel um nome escolhido pelo programador para representar um endereo de memria (posio de memria) no qual ser armazenado algum valor de dado. Toda varivel deve comear com uma letra (literal) e os outros caracteres podem ser letras ou nmeros. O nmero de caracteres de uma varivel fator de projeto, e, portanto, pode variar de compilador para compilador. Em geral usa-se de 8 a 12 caracteres. Exemplo de nomes vlidos: Maria, soma, Y42bs, x1,x2, nota1, Nota2, media ... OBS: A linguagem FORTRAN livre de contexto, ou seja, letras maisculas ou minsculas tm a mesma representao, tal que, os nomes SOMA, soma ou Soma, representam a mesma varivel (mesmo endereo de memria).

II.4.4 Declarao de Variveis Toda varivel a ser utilizada no algoritmo deve ter seu tipo obrigatoriamente declarado no incio do programa. Varivel do tipo caracter A declarao deve especificar o nmero mximo de caracteres possveis de serem armazernados.

Exemplos: Pseudocdigo: REAL A, x1, peso, altura INTEIRO Soma, numero, K12x, Idade CARACTER nome, Profisso, sexo
FORTRAN:
REAL A, x1, peso, altura INTEGER Soma, numero, K12x, Idade CHARACTER Nome*20, Profisso*15, sexo*1

II.4.5 Operadores Aritmticos + * / Adio Subtrao Multiplicao Diviso

II.4.6 Expresses Aritmticas So as expresses formadas pelos operadores aritmticos e constantes ou variveis do tipo numrico declarado (Inteiro, Real). Na resoluo das expresses aritmticas as operaes obedecem a uma hierarquia de prioridade de execuo. Para operaes de mesma prioridade, a expresso resolvida da esquerda para direita, e, para se alterar a prioridade, utiliza-se parnteses, resolvendo-se primeiro os parnteses mais internos. Hierarquia de Execuo das Expresses: (Operaes de mesma prioridade: esq dir) Resolve-se primeiro os parnteses, dos mais internos para os mais externos; Potenciao e exponenciao * e / (multiplicao e diviso) + e - (adio e subtrao)

Exemplos de expresses aritmticas: 12343 * ( X 1) + 5/(Y + Z ) 20 * Y ( 4 * A + 5 * B ) / X X/N*N N*X/N

OBS - Em FORTRAN, a diviso de INTEIRO por INTEIRO fornece resultado INTEIRO, por exemplo: 7/2 = 3 21/4 = 5 14/3 = 4 Portanto: 7*2 7 2 ; 21* 4 21 4

II.4.7 Operadores Lgicos Relacionais So os operadores utilizados para comparar expresses do mesmo tipo primitivo, e servem para formar as expresses lgicas relacionais. Operadores = > < Igual a Maior que Maior ou Igual a Menor que Menor ou Igual a Diferente de FORTRAN .EQ. .GT. .GE. .LT. .LE. .NE. (EQual) (Greater Than) (Greater or Equal) (Less Than) (Less or Equal) (Not Equal)

II.4.8 Expresses Lgicas

So as expresses formadas pelos operadores lgicos relacionais e variveis ou constantes do tipo lgico ou relaes (comparao de expresses aritmticas por exemplo). O resultado da avaliao de uma expresso lgica sempre um valor do tipo lgico Verdadeiro (sim) ou Falso (no). Exemplos de expresses lgicas relacionais: 123A> B Mdia 5.00 3X + 3/y - 4 = Sin (x)

II.5 Funes Intrnsecas da Linguagem Fortran As funes intrnsecas ou predefinidas, so programas de utilizao frequente, fornecidos j prontos pela maioria dos compiladores. As funes mais comuns so: SIN(X) COS(X) ATAN(X) ALOG(X) LOG10(X) EXP(X) SQRT(X) ABS(X) IABS(K) IFIX(X) FLOAT(K) MOD (K,L) : Seno de um ngulo em radianos : Cosseno de um ngulo em radianos : Arco Tangente em radianos : Logaritmo Neperiano (Natural) : Logaritmo de X na base 10 : Exponencial de X : Raiz Quadrada de X : Valor absoluto para nmeros Reais : Valor absoluto para nmeros Inteiros : Converso de Real para Inteiro : Converso de Inteiro para Real : Resto inteiro da Diviso de K por L MOD(8,3) 2 e MOD(9,2) 1 Um exemplo de aplicao da funo MOD( ) muito usado neste curso, para testar se um nmero par ou mpar, ou seja, testar se um determinado nmero ou no divisvel por 2. Dado um nmero inteiro n, Se MOD(n,2) = 0, ento n divisvel por 2 ( o resto da diviso zero). Para as funes trigonomtricas, X expresso em radianos. Exemplo para converso de graus em radianos. Seja X=300 Como convert-lo para radianos? X(rds) X(graus) * /180

ONDE: X NMERO REAL K,L NMEROS INTEIROS

Portanto, X 30 * /180 X /6 rds

10

II.6 Lgica de Desenvolvimento de Algoritmos O objetivo desta seo introduzir os comandos bsicos e as estruturas de controle de fluxo para desenvolvimento de algoritmos, implementando os algoritmos desenvolvidos no ambiente FORTRAN Power Station. Em linhas gerais, o desenvolvimento de algoritmos envolve trs etapas distintas e interrelacionadas: Anlise, Projeto e Implementao. Anlise Etapa para compreenso do problema e elaborao de uma soluo possvel; Projeto Etapa que visa diminuir o nvel de abstrao da etapa de anlise e desenvolver um projeto de algoritmo para a soluo imaginada. Implementao Etapa que serve para codificar o algoritmo projetado em alguma linguagem de programao. Cada uma destas etapas utiliza recursos (metodologias) e ferramentas (aplicativos) distintas da Engenharia de Software, principalmente as ferramentas CASE. Neste curso, os algoritmos sero projetados em pseudocdigos e posteriormente codificados na Linguagem FORTRAN.

II.6.1 Comando de Atribuio de Dados Serve para armazenar um valor de dado em um endereo de memria. Sintaxe: Pseudocdico:

Ve

Fortran:

V=e

Semntica: Atribua varivel V o valor da expresso e Ao encontrar um comando de atribuio, o computador primeiro resolve a expresso e, e s depois atribui o resultado para a varivel V, a qual representa um endereo de memria. Considere o seguinte trecho de algoritmo: - Incio -A=5 (inicialmente o computador atribui para A o valor 5) - B = 13 ( atribudo o valor 13 para a varivel B) - A = 2 * B (o computador resolve a expresso 2*B e atribui para A o valor 26, destruindo o ...... valor 5 anteriormente armazenado em A) ******** O COMANDO DE ATRIBUIO DESTRUTIVO ******** II.6.2 Comando para Entrada de Dados - (Comando de LEITURA) O comando para entrada de dados serve para transferir dados do meio externo para serem armazenados na memria do computador.O comando para entrada de dados ser representado pelo comando de Leitura. Quando um comando de leitura encontrado no programa, o computador espera que o usurio digite os dados de entrada , e os armazena na memria, cada valor em um endereo.

11

Os dados de entrada de um algoritmo podem ser provenientes de teclado, arquivos de dados ou outros meios, como dados colhidos de equipamentos de medio. Estes dados podem ser digitados em um formato padro (default), ou em um formato especfico (entrada Formatada). A unidade de leitura default para PCs o Teclado. O comando de leitura deve especificar: - o local onde o valor de dado ser lido - o formato no qual o valor ser lido Sintaxe Geral: LER (u1,f1) v1, v2, v3,... onde: u1 unidade de leitura f1 especificador de formato vi variveis de entrada

Sintaxe para Leitura Padro (via teclado): Pseudocdigo: LER v1,v2,v3.... Fortran: READ *, v1,v2,v3...
O asterisco (*) representa o teclado

II.6.3 Comando para Sada de Dados (Comando de IMPRESSO) Os comandos de sada servem para transferir os valores de dados da memria e exib-los em algum dispositivo externo, como uma impressora, um terminal de vdeo, uma porta de comunicao etc. O dispositivo para sada de dados padro o monitor de vdeo. Os dados de sada de um algoritmo podem ser enviados para arquivos de dados, o monitor de vdeo, uma porta de comunicao, a impressora, etc. Estes dados podem ser apresentados em um formato padro (default), ou em um formato especfico (sada Formatada). A unidade de Impresso default para PCs o Monitor de vdeo. O comando de impresso deve especificar: - o local onde o valor de dado ser impresso - o formato no qual o dado ser apresentado Sintaxe Geral: IMPRIMIR (u1,f1) v1, v2, v3,...

onde: u1 unidade de impresso f1 especificador de formato vi variveis de entrada

Sintaxe para Impresso Padro (via monitor): Pseudocdigo: IMPRIMIR v1,v2,v3.... Fortran:

PRINT *, v1,v2,v3...
O asterisco (*) representa o monitor

12

Sintaxe: Ler x1, y2 Imprimir x1, y2

Semntica (Significado da execuo do comando): - Os valores de x1 e y2 so armazenados na memria. - Os valores de x1 e y2, armazenados na memria, so exibidos em algum dispositivo de sada.

Exemplos: Caso_1: Pseudocdigo: LER x1, y2 Fortran: READ *, x1, y2

....
IMPRIMIR x1, y2
......

.....
PRINT *, x1, y2
.....

OBS: Neste caso deve se digitar os dois valores de entrada, correspondentes a x1 e y2, na mesma linha. Os valores de sada, correspondentes aos valores armazenados de x1 e y2, sero impressos lado a lado na mesma linha.

Caso_2: Pseudocdigo: LER x1 LER y2

Fortran: READ *, x1 READ *, y2

.....
IMPRIMIR x1 IMPRIMIR y2
.....

.....
PRINT *, x1 PRINT *, y2
.....

OBS: Neste caso deve se digitar os dois valores de entrada correspondentes a x1 e y2 cada um em uma linha distinta. Os valores de sada, correspondentes aos valores armazenados de x1 e y2, sero impressos cada um em uma linha distinta. II.6.4 Notao de Fluxograma

- Incio/Fim de Programa

- Comando de Impresso

- Comando de Leitura

- Comando de Deciso

- Comando de Atribuio

13

Exemplo_1: Dado um valor inteiro positivo B=5, elabore um algoritmo para ler outro valor inteiro positivo qualquer e obter a soma destes valores. Fluxograma:
INICIO

Pseudocdigos: Incio Ler A B5 SOMA A + B Imprimir SOMA

A B5 SOMA A + B SOMA

FIM

Fim

Exemplo_2: Repetir o exemplo anterior, declarando as variveis A, B e SOMA. INCIO INTEIRO A, B, SOMA LER A B5 SOMA A + B IMPRIMIR SOMA FIM INTEGER A, B, SOMA READ * ,A B=5 SOMA = A + B PRINT *, A SOMA DE , A, + , B, = , SOMA END

Supondo que o valor digitado para A seja 13, este algoritmo vai fornecer o seguinte resultado: A SOMA DE 13 + 5 = 18 II.6.5 Documentao de Algoritmos O recurso comumente utilizado pelos diversos ambientes de programao para documentao de algoritmos a insero de comentrios ao longo do programa. Em Fortran, comentrios podem ser inseridos em qualquer parte de uma linha do programa. Quando um compilador encontra o smbolo de comentrio, representado pelo ponto de exclamao (!), ele ignora o restante da linha aps o smbolo. O Comentrio no traduzido em cdigo executvel de mquina, um recurso para auxiliar o programador a documentar o programa. Exemplo:
! Este programa l um valor Inteiro A, e imprime a soma A+5 INTEGER A, B, SOMA READ * ,A B=5 SOMA = A + B ! Impresso do Resultado PRINT *, A SOMA DE , A, + , B, = , SOMA END

14

II.7 Estruturas de Controle de Fluxo So estruturas utilizadas para estabelecer o sentido do fluxo de informao no algoritmo:

II.7.1 Sequncia Simples de Instruo Os comandos devem ser escritos na sequncia em que sero executados. Exemplo: inicio; A= 21; Imprimir A; Ler B; Imprimir B; A A*B; Imprimir A FIM.

II.7.2 Estruturas de Seleo (ou de deciso) So estruturas utilizadas para decidirem sobre o fluxo de execuo em determinadas partes de um algoritmo, selecionando o grupo de comandos a ser executado. Um grupo de comandos pode ser definido como qualquer conjunto, no vazio, de comandos, e, a seleo dos comandos a serem executados condicionada a avaliao de uma expresso lgica relacional. As estruturas de seleo podem ser SIMPLES ou COMPOSTAS

II.7.2.1 Estrutura de Seleo Simples Esta estrutura avalia uma expresso lgica relacional, e, se o valor do resultado for Verdadeiro (SIM), um grupo de comandos ser executado. Caso a resposta tenha valor lgico Falso (No), este grupo de comandos no ser executado, e o fluxo do algoritmo prosseguir para o prximo comando aps a estrutura de seleo. Sintaxe: SE ( expresso) ENTO
Grupo de comandos expresso ? No Sim FLUXOGRAMA:

FIM SE

comando 1 comando 2 ..... comando n

15

Em FORTRAN, esta estrutura assume a seguinte sintaxe: IF ( expresso ) THEN Comando_1 Comando_ 2 ... Comando_n END IF

Exerccio 1.

Dados dois valores A e B quaisquer, elabore um algoritmo que imprima esses valores e identifique qual deles o maior. FORTRAN: REAL A, B PRINT * , DIGITE DOIS VALORES A e B READ *, A, B PRINT *, Valor A = , A PRINT *, Valor B = , B IF (A .EQ. B) THEN
PRINT *, VALOR A = B END IF

INCIO REAL A, B IMPRIMIR Digite dois valores A e B LER A, B IMPRIMIR ( Valor A = , A) IMPRIMIR ( Valor B = , B) SE (A=B) ENTO - IMPRIMIR VALOR A = B FIM SE SE ( A > B) ENTO - IMPRIMIR ( Maior Valor : A = , A) FIM SE SE ( A < B ) ENTO - IMPRIMIR ( Maior Valor : B = , B) FIM SE FIM ALGORITMO

IF ( A .GT. B) THEN PRINT *, Maior Valor: A= , A END IF IF ( A .LT. B) THEN PRINT *, Maior Valor: B= , B END IF END

II.7.2.2 Estrutura de Seleo Composta Esta estrutura avalia uma expresso lgica relacional e se o valor lgico do resultado for Verdadeiro, um grupo de comandos ser executado (grupo de comandos_1). Caso a resposta tenha valor lgico Falso, outro grupo de comandos que ser executado (grupo de comandos_2). Terminada a execuo do grupo de comandos pertinente, o fluxo de controle do algoritmo prossegue com o prximo comando logo aps a estutura. Sintaxe: SE ( expresso) ENTO
Grupo de Comandos_1 No expresso ? Sim

SENO
Grupo de Comandos_2

Grupo de Comandos_2

Grupo de Comandos_1

FIM SE

16

Em FORTRAN, esta estrutura assume a seguinte sintaxe: IF ( expresso ) THEN Comando_1 Comando_2 ... Comando_n ELSE Comando_1 Comando_2 ... Comando_n END IF

GRUPO DE COMANDOS_1

GRUPO DE COMANDOS_2

Exerccio 2. -

Repetir o exerccio 1, utilizando a estrutura de deciso composta.


FORTRAN REAL A, B PRINT * , DIGITE DOIS VALORES A e B READ *, A, B PRINT *, Valor A = , A PRINT *, Valor B = , B

INCIO IMPRIMIR Digite dois valores A e B LER A, B IMPRIMIR Valor A = , A IMPRIMIR Valor B = , B SE (A = B) ENTO IMPRIMIR VALOR A = B FIM SE SE ( A > B) ENTO IMPRIMIR Maior Valor : A = , A SENO IMPRIMIR Maior Valor : B = , B FIM SE Fim Algoritmo

IF (A .EQ. B) THEN PRINT *, VALOR A = B END IF IF ( A .GT. B) THEN PRINT *, Maior Valor: A= , A ELSE PRINT *, Maior Valor: B= , B END IF

II.7.3 Estruturas de Repetio So estruturas utilizadas quando se deseja que um grupo de comandos seja executado repetidas vezes. O nmero de repeties pode ser conhecido priori ou pode ser indeterminado, porm, ser sempre Finito.

II.7.3.1 Repetio com Avaliao Priori Neste tipo de estrutura, o nmero de repeties desconhecido priori, e a repetio de determinado trecho (grupo de comandos) do algoritmo est condicionada a avaliao de uma expresso lgica relacional. Enquanto o resultado lgico for verdade (Sim), a estrutura ser ativada e os comandos sero executados repetidamente, at que o resultado seja falso (No), e, neste caso, a estrutura ser ignorada e o algoritmo prosseguir com o comando imediatamente aps a estrutura.

17

Sintaxe: Enquanto ( expresso ) Faa


Expresso ? Grupo de Comandos Sim Grupo de Comandos No

Fim do Enquanto

OBS: Observe que se da primeira vez a expresso j fornecer resultado Falso, a estrutura no ser executada. Em FORTRAN, esta estrutura assume a seguinte forma: DO WHILE ( expresso) Comando_1 Comando_2 .... Comando_n END DO

Exerccio 3.

Elabore um algoritmo para ler uma quantidade desconhecida de valores inteiros positivos e imprimir todos os valores lidos. Parar o processamento caso o valor lido seja negativo ou Zero. FORTRAN: INTEGER valor READ *, valor DO WHILE ( valor .gt. 0) PRINT *, Valor Lido =, valor READ *, valor END DO END

Inicio Ler Valor Enquanto ( Valor > 0 ) Faa - Imprimir Valor - Ler Valor Fim do Enquanto Fim do Algoritmo

II.7.3.2 Repetio com Varivel de Controle Neste tipo de estrutura, o nmero de vezes que um determinado trecho (comandos) do algoritmo ser repetido conhecido a priori. O processo repetitivo controlado por uma varivel de controle, que possui valores inicial e final fixados.

18

Sintaxe: Para VC = vi, vf, inc Faa


VC = vi Grupo de Comandos VC : vf VC = VC+inc >

Fim do Para

Onde: VC - Varivel de Controle vi - Valor Inicial de VC vf - Valor Final de VC inc - Incremento/Decremento

Grupo de Comandos

Exerccio 4. Elabore um algoritmo que imprima todos os nmeros inteiros de 1 at 20. Soluo: Neste caso, a varivel de controle possui valor inicial fixado em 1 (hum) e valor final fixado em 20 (vinte). O incremento ser de 1 (hum). INICIO Para k = 1,20,1 Faa Imprimir K Fim_Para Fim_Algoritmo
Codificao FORTRAN INTEGER k

DO K = 1 , 20 , 1
Print *, k

END DO
END

Da primeira vez atribudo para a varivel k o valor inicial fixado (vi=1); como este valor menor que o valor final fixado ( vf=20), os comandos dentro da estrutura sero repetidos e aps a repetio a varivel de controle incrementada de 1; O valor de K atualizado (j incrementado), comparado novamente com o valor final e o processo se repete at que a varivel de controle assuma um valor maior que o valor final.

Exerccio 5. Elabore um algoritmo para ler 15 valores inteiros positivos, e imprimir somente os valores pares. INICIO Para x = 1,15 Faa LER N Se ( mod(n,2) = 0) Ento Imprimir N =, N, E numero Par Fim_Se Fim_Para End
CODIFICAO FORTRAN INTEGER X, N DO X=1,15 READ *, N IF (MOD(N,2) .EQ.0) THEN PRINT*, N=, N, E NUMERO PAR END IF END DO END

19

Sugesto de Exerccios para Casa: Refaa os algoritmos para calculo do fatorial, da potncia, e nmeros Primos, utilizando-se da estrutura PARA_FAA.

II.8 Entrada/Sada de Dados Formatada At agora foi utilizado o formato padro para entrada e sada de dados, ou seja, os dados so representados em uma forma padro, para a qual a mquina est programada de fbrica. possvel alterar esta forma padro atravs de comandos especificadores de formato. Dentre as facilidades proporcionadas pelos recursos de formatao possvel especificar: - o formato no qual os dados devem ser lidos ou impressos; - o espaamento que deve ser mantido entre os valores lidos ou impressos; - inserir comentrios sobre os valores impressos; - controlar o espaamento entre linhas impressas. FORMATO PADRO: READ *, v1,v2,v3.... ! L as variveis listadas no formato padro, via unidade ! padro de Leitura o Teclado PRINT *, v1,v2,v3... ! Imprime as variveis listadas no formato padro, via ! unidade padro de sada o Monitor de Vdeo ESPECIFICADORES PARA FORMATAO DE DADOS: Os especificadores de Formato permitem especificar a quantidade de dgitos a ser usada na leitura ou impresso dos dados. Estes especificadores de formatos so: - In : Especificao de valores Inteiros; n - representa o total de dgitos a ser usado para representar o valor de dado

- Fw.d : Especificao de valores Reais; w representa o total de dgitos a ser usado para representar o valor de dado considerando, inclusive, o ponto decimal; d representa o total de dgitos decimais (nmero de dgitos aps a vrgula) - An : Especificao de valores Character; n o nmero total de caracteres a ser utilizado.

EX:

Formato I8 Para Ler/Imprimir valores Inteiros com at 8 dgitos; Formato I5 Para Ler/Imprimir valores Inteiros com at 5 dgitos; Formato F7.2 Para Ler/Imprimir valores Reais com at 7 dgitos, sendo 2 dgitos aps o ponto decimal. O ponto decimal ocupa o espao de um dgito. Formato F9.4 Para Ler/Imprimir valores Reais com at 9 dgitos, sendo 4 dgitos aps o ponto decimal. O ponto decimal ocupa o espao de um dgito. Formato A15 Para Ler/Imprimir valores do tipo CHARACTER com at 15 caracteres.

20

Recursos de Formatao nX Saltar n espaos em branco para a direita. / - Pular para a prxima linha // - Pular 2 linhas em branco OBS: Para se usar os recursos de formatao, utiliza-se o comando WRITE. Exemplo: Ler 3 valores, um Inteiro, um Real e um Character, e imprim-los nos formatos I8, F9.5 e A15. FORMATAO #1 (Padro): INTEGER Y REAL X CHARACTER NOME*15 PRINT *, DIGITE: UM VALOR REAL, UM INTEIRO E UM CHARACTER READ *, X, Y, NOME PRINT *, X, Y, NOME END Neste caso no preciso definir os especificadores de formato. Os valores sero lidos e impressos no formato padro configurado pelo fabricante no compilador, exceto a varivel character NOME, cujo formato foi definido quando da sua declarao (NOME*15). FORMATAO #2: INTEGER Y REAL X CHARACTER NOME*15 PRINT *, DIGITE: UM VALOR REAL, UM INTEIRO E UM CHARACTER READ ( *,( F9.5, I8, A15 ) ) X, Y, NOME WRITE ( *, (3X, F9.5,2X, I8,2X, A15 ) ) X, Y, NOME END Neste caso, o comando write vai imprimir X,Y e NOME segundo os especificadores de formatos entre Plicas ( ). Os trs valores sero impressos em uma mesma linha. FORMATAO #3: INTEGER Y REAL X CHARACTER NOME*15 READ (*,10) X,Y,NOME 10 FORMAT(F9.5,I8,A15) WRITE( *,11) X,Y,NOME 11 FORMAT ( 3X,'X=',F9.5,/,3X,'Y=',I8,/,3X,'NOME=',A15) WRITE( *,12) X,Y,NOME 12 FORMAT (F9.5,I8,A15) END

21

Neste caso, o comando write vai imprimir X,Y e NOME segundo os especificadores estabelecidos no Formato 11. Cada valor ser impresso em uma nova linha, com uma margem de 3 espaos em branco. Neste formato possvel utilizar todos os recursos de formatao. X = ---.----Y = -------NOME = ---------------

III ESTRUTURAS DE DADOS HOMOGNEAS Por definio, um tipo de dado estruturado consiste de uma composio de tipos primitivos. O que caracteriza este tipo de dado a estrutura que define como o mesmo organizado. Dentre os tipos estruturados, as estruturas mais comuns so os Arrays. Array um nome Ingls genrico para definir um vetor de qualquer dimenso.

III.1 Arrays Unidimensionais Vetores So estruturas de dados homogneas, ou seja, formadas por elementos do mesmo tipo primitivo; Todos os elementos so igualmente acessveis, quer dizer, o tempo e o tipo de procedimento para acessar qualquer um dos elementos do vetor so iguais; Cada elemento do vetor possui nome prprio, que o nome do vetor seguido do ndice que identifica a posio do elemento no vetor. Todo vetor deve ser OBRIGATORIAMENTE declarado no incio do programa, com a especificao do tipo e do nmero mximo de elementos previstos para o vetor .

A declarao do vetor serve para o compilador reservar posies suficientes para carreg-los na memria, quando da execuo do programa. Seja o vetor VET de 10 elementos:
VET(1) VET(2) VET(3)

...

VET(8)

VET(9)

VET(10)

Cada elemento deste vetor pode ser completamente identificado dado o nome do vetor e a posio do elemento no vetor:
Nome do vetor ndice do elemento

VET ( 7 )

O ndice de um elemento do vetor pode ser: Constante Inteira; Varivel Inteira; Expresso do tipo Inteira.

22

Exerccio 6. Elabore um algoritmo para ler 10 valores Inteiros positivos, armazen-los em um vetor e imprimir o vetor. SOLUO #1 INICIO Inteiro V(10), N,K,J PARA K=1,10 FAA Ler N V(K) = N FIM_PARA PARA J=1,10 FAA IMPRIMIR V(J) FIM_PARA FIM_ALGORITMO
Codificao FORTRAN INTEGER V(10), N, K, J DO K = 1, 10 READ *, N V(K) = N END DO DO J = 1, 10 PRINT *, V(J) END DO END

Neste caso, digitar os valores de entrada, um por linha. Cada elemento do vetor ser impresso em uma linha distinta.

SOLUO #2 INICIO Inteiro V(10), N,K,J PARA K=1,10 FAA Ler V(K) FIM_PARA IMPRIMIR (V(J), j=1,10) FIM_ALGORITMO Neste caso, digitar os valores de entrada, um por linha. Os 10 elementos do vetor sero impressos em uma nica linha.
Codificao FORTRAN INTEGER V(10), N, K, J DO K = 1, 10 READ *, V(K) END DO PRINT *, ( V(J) , j = 1, 10) END

SOLUO #3 INICIO Inteiro V(10), N,K,J Ler (V(K), k=1,10) IMPRIMIR (V(J), j=1,10) FIM_ALGORITMO

Codificao FORTRAN INTEGER V(10), N, K, J READ *, ( V(K) , k =1,10) PRINT *, ( V(J) , j = 1,10) END

Neste caso, digitar os 10 valores de entrada em uma nica linha, separados por vrgula ou espao em branco. Os 10 elementos do vetor sero impressos em uma nica linha.

23

SOLUO #4: Formatao de Vetores


Codificao FORTRAN

INICIO Inteiro V(10), N,K,J Ler (V(K), k=1,10) IMPRIMIR (V(J), j=1,10) FIM_ALGORITMO

INTEGER V(10), K, J READ *, ( V(K) , k =1,10) WRITE ( *, 5) ( V(J) , j = 1,10) 5 FORMAT (3(/),15X, ' VETOR LIDO ', 2(/), 2X, 10(I4,2X)) END

III.2.1 Array do Tipo Character


Neste tipo de estrutura de dados, os elementos do array representam sequncias de caracteres. So estruturas utilizadas, geralmente, para armazenar dados como nomes de pessoas, profisses, etc. Como qualquer vetor, possui declarao obrigatria no incio do programa, com a especificao do nmero mximo de elementos que o vetor poder conter. Sintaxe de Declarao: CHARACTER VAR1* 10 (5) , VAR2 * 9 (15)

Esta declarao reserva na memria do computador 5 posies distintas (endereos de memria) para a VAR1, onde cada posio representa um elemento do vetor, com at 10 caracteres no mximo; De maneira semelhante, sero reservados 15 elementos para o vetor VAR2, onde cada elemento poder conter at 9 caracteres no mximo; A declarao acima poderia tambm ser da seguinte forma:

CHARACTER VAR1 (5) * 10 , VAR2 (15) * 9

Exerccio 7. Elabore um algoritmo para ler e armazenar em vetores, os nomes dos 25 alunos de ICC, as duas notas de provas obtidas por cada aluno, e calcular a mdia. Imprimir uma listagem com estes dados e informando a situao do aluno: Aprovado (mdia >= 5.00) ou Reprovado (mdia < 5.00).

Requisitos para especificao do Algoritmo: Definir 3 vetores do tipo real, cada um com 25 elementos, para armazenar respectivamente as duas notas e a mdia de cada aluno; Definir 2 vetores do tipo character, cada um com 25 elementos, para armazenar respectivamente o nome e a situao de cada aluno;

24

Cada Nome de aluno poder ser representado por at 15 caracteres; Cada elemento do vetor character representando a situao do aluno, dever ser declarado, com no mnimo 9 caracteres, para poder armazenar a sequncia de caracteres reprovado, ou aprovado.
Real nota1(25), nota2(25),media(25) Integer j Character nome*15(25), situacao(25)*10 Do j=1,25 Read *, nome(j), nota1(j), nota2(j) Media(j) = (nota1(j) + nota2(j)) / 2 IF (media(j) . GE. 5.00 ) then Situacao = APROVADO ELSE Situacao = REPROVADO End If End do do J=1,25 Print *,nome(j),nota1(j),nota2(j),media(j), situao(j) End do END

SOLUO: INICIO REAL nota1(25), nota2(25), media(25) INTEIRO j CHARACTER nome(25) * 15, situacao(25) * 10 PARA j=1,25 FAA Ler nome( j ), nota1( j ), nota2( j ) media( j ) = ( nota1 ( j ) + nota2 ( j ) ) / 2 SE ( media ( j ) 5.00 ) ENTO situao ( j ) = APROVADO SENO situao ( j ) = REPROVADO FIM_SE FIM_PARA

PARA J=1,25 FAA IMPRIMIR nome ( j ), nota1( j ), nota2( j ), media( j ), situao( j ) FIM_PARA FIM_ALGORITMO

Exemplo da impresso do resultado, dados os nomes dos alunos abaixo e suas respectivas notas (nesse caso, o valor final da estrutura Para_Faa deve ser alterado de 25 para 4):

Antnio Jos Abel Mauro

5.00 4.00 10.00 8.00

6.00 3.50 10.00 9.00

5.5 3.75 10.00 8.50

APROVADO REPROVADO APROVADO APROVADO

III.2 Arrays Bidimensionais - Matrizes


Matrizes so estruturas de dados homogneas, que para a identificao completa de cada um dos seus elementos, necessita que seja especificado: o nome da matriz seguido dos dois ndices que identificam o elemento na matriz. Por exemplo, dada a matriz M(5,4) : M(2,3) refere-se ao elemento da matriz M, da linha 2 e coluna 3 M(5,1) refere-se ao elemento da matriz M, da linha 5 e coluna 1

25

M(1,1) M(5,4) = M(2,1) M(3,1) M(4,1) M(5,1)

M(1,2) M(2,2) M(3,2) M(4,2) M(5,2)

M(1,3) M(2,3) M(3,3) M(4,3) M(5,3)

M(1,4) M(2,4) M(3,4) M(4,4) M(5,4)

III.2.1 MATRIZES ENTRADA/SADA DE DADOS


Uma matriz pode ser lida ou impressa de vrias formas: III.2.1.1 LEITURA/IMPRESSO de matrizes por linha Neste tipo de Leitura/Impresso, deve-se entrar com os dados digitando-se os elementos da matriz conforme apresenta a matriz M(5,4). A impresso fornecer como resultado uma matriz na forma da matriz M(5,4). Exemplo: Elabore um algoritmo para ler 16 valores inteiros positivos e armazen-los em uma matriz MAT(4,4), por linha. Imprimir a matriz. Inicio PARA i=1,4 FAA Ler (MAT(i,j),j=1,4) FIM_PARA PARA i=1,4 FAA Imprimir (MAT(i,j),j=1,4) FIM_PARA FIM
Para cada linha representada pelo contador i, espera-se que o usurio digite 4 valores de dados, correspondentes s 4 colunas desta linha (representadas por j)

Leitura de MAT: Digite 0s 4 valores da 1a linha, separados por vrgulas ou espaos em branco e tecle enter; Exemplo: 1,2,3,4 (enter) Digite 0s 4 valores da 2a linha, separados por vrgulas ou espaos em branco e tecle enter; Exemplo: 5,6,7,8 (enter) Digite 0s 4 valores da 3a linha, separados por vrgulas ou espaos em branco e tecle enter; Exemplo: 9,10,11,12 (enter) Digite 0s 4 valores da 4a linha, separados por vrgulas ou espaos em branco e tecle enter; Exemplo: 13,14,15,16 (enter) Feito isso, a matriz j estar armazenada na memria, e, uma vez que a impresso segue a mesma lgica da leitura, a matriz ser impressa em forma de matriz: 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16

26

PARTE II SUBPROGRAMAO

27

SUBPROGRAMAO MODULARIZAO DE PROGRAMAS A Subprogramao um mtodo que consiste na diviso de programas grandes em mdulos menores chamados de subprogramas. Um destes subprogramas, por onde comea a execuo do problema, recebe o nome de programa principal ou programa solicitante e os outros so os subprogramas propriamente ditos, os quais sero executados sempre que forem chamados, atravs de comandos especiais. Aps a execuo de um subprograma, o controle da execuo retorna para o mdulo que o solicitou, que pode ser o programa principal ou outro subprograma. O principal objetivo da subprogramao permitir gerenciar a complexidade no desenvolvimento de algoritmos de grande porte. Vantagens da subprogramao: - Um Subprograma pode ser solicitado vrias vezes para valores diferentes de seus parmetros; - Diferentes programadores podem trabalhar simultaneamente na soluo de um mesmo problema, codificando, compilando e testando separadamente os subprogramas. Tipos de Subprogramas: - Funo Predefinida ( Sin(x); Mod(k,l); ....); - Funo Declarao; - Tipo Function; - Tipo Subroutine.

Os Subprogramas do tipo Funo Predefinida so fornecidos pelos fabricantes das linguagens computacionais, inseridos internamente nas Bibliotecas de Subprogramas da maioria dos compiladores. Estes podem ser utilizados pelos programadores atravs de instrues que os solicitam, quando necessrios, referenciando seus respectivos nomes; Cada tipo de Subprograma possui regras prprias para ser referenciado, e, cada linguagem de programao define suas prprias regras quanto a utilizao e implementao de subprogramas.
SUBPROGRAMA DO TIPO FUNO DECLARAO Deseja-se elaborar um algoritmo possvel para calcular o valor de uma funo, dados diferentes valores de seus parmetros. A funo dada por: F(X,A,B,C) = A.X2 + B.X + C Podemos, neste caso, usar um subprograma do tipo FUNO DECLARAO REAL F,G,H,L,N ,Z INTEGER I F(X,A,B,C)=A*X**2+B*X+C PRINT *,'DIGITE 4 VALORES QUAISQUER' DO I=1,3 READ*,N,G,H,L Z = F(N,G,H,L) PRINT *, 'O VALOR DA FUNCAO =',Z END DO END

28

SUBPROGRAMA DO TIPO FUNCTION S retorna um valor, do mesmo tipo primitivo da funo; O Tipo da Funo deve ser declarado obrigatoriamente; O comando RETURN promove o retorno ao programa principal; Deve ser feita pelo menos uma atribuio ao nome da funo.

EX. Calcular o fatorial de uma quantidade desconhecida de valores inteiros positivos. INTEGER NUM,X,FAT PRINT *,'DIGITE UM VALOR INTEIRO POSITIVO' READ *,NUM DO WHILE (NUM>=0) X=FAT(NUM) PRINT *,'O NUMERO E=',NUM,' O FATORIAL E',X PRINT *,'DIGITE UM VALOR INTEIRO POSITIVO' READ *,NUM END DO END FUNCTION FAT(N) INTEGER k,n,fat FAT=1 DO K=1,N FAT = FAT*K END DO RETURN END

Elabore um algoritmo que leia um valor inteiro positivo e: Se o valor for mpar, calcula o fatorial do mesmo; Se o valor for par, calcula Valor5. INTEGER NUM, X, FAT, POT PRINT *,'DIGITE UM VALOR INTEIRO POSITIVO' READ *,NUM DO WHILE (NUM>=0) IF (MOD(NUM,2) ==0) THEN X=FAT(NUM) PRINT *,'O NUMERO E=',NUM,' O FATORIAL E',X PRINT *,'DIGITE UM VALOR INTEIRO POSITIVO' ELSE Y=POT(NUM) PRINT *,'O NUMERO ',NUM,' ELEVADO A CINCO =',Y PRINT *,'DIGITE UM VALOR INTEIRO POSITIVO' END IF

29

END DO END FUNCTION FAT(N) INTEGER k,n,fat FAT=1 DO K=1,N FAT = FAT*K END DO RETURN END FUNCTION POT(N) INTEGER k,n,pot POT=1 DO K=1,N POT = POT*N END DO RETURN END

SUBPROGRAMA DO TIPO SUBROUTINE

Mais abrangentes do que o tipo Function, o qual s pode retornar um valor ao programa principal, os subprogramas do tipo SUBROUTINE podem retornar muitos valores e at mesmo funcionar de modo independente sem retornar nenhum resultado. Uma Subroutine pode executar funes e chamar outras Subroutine, mas no pode chamar a si prpria No h Recursividade. Por ser compilada separadamente do programa principal, pode-se utilizar os mesmos nomes de variveis usadas por outros subprogramas e tambm repetir nmeros de comandos.

CARACTERSTICAS DO TIPO SUBROUTINE A primeira linha de cdigo de uma Subroutine deve conter uma declarao com uma sintaxe de uma das formas: SUBROUTINE NOME ou SUBROUTINE NOME (a1, a2, a3 ......a n ) Onde: - NOME o nome escolhido pelo programador para identificar a subroutine; - (a1, a2, a3 ......a n ) so os parmetros formais. A grosso modo podemos v-los como os valores de retorno so os valores visveis por outros subprogramas. A subroutine deve conter o comando RETURN para voltar o controle da execuo ao mdulo que a chamou;

30

A Sintaxe de declarao para invocar uma Subroutine deve ser de uma das formas:

CALL NOME ou CALL NOME (b1, b2, b3 ......bn ) Onde: - NOME o nome utilizado para identificar a subroutine; - (b1, b2, b3 ......bn ) so os argumentos ou valores que so passados para a subroutine quando esta invocada. so os valores que um mdulo torna visvel aos outros mdulos. Os parmetros formais (a1, a2, a3 ......a n ) e os argumentos (b1, b2, b3 ......bn ) podem ser constantes, variveis simples, variveis indexadas, nomes de conjuntos, expresses, nomes de funes ou subprogramas; Os argumentos (b1, b2, b3 ......bn ) listados em uma chamada CALL devem coincidir em nmero, ordem e tipo com os parmetros listados na declarao da subroutine ; A troca de valores entre os subprogramas pode ser feita atravs do uso dos parmtros formais declarados pela subroutine, ou atravs de comandos especiais que permitem especificar estes valores.

SUBROUTINE SEM PARMETRO A subroutine sem parmetro faz uso do comando COMMON para permitir a troca de valores entre os subprogramas; O COMMON permite que a mesma rea de memria seja usada por variveis de programas ou subprogramas distintos; As variveis listadas no COMMON devem coincidir em nmero, ordem e tipo, e as correspondentes podem ter o mesmo nome ou no.

Considere um algoritmo para ler um vetor e classific-lo em ordem crescente e em ordem decrescente dos valores de seus elementos. A classificao ser feita atravs de duas subroutine, uma para ordem_ crescente e outra para ordem_decrescente. PROGRAM ORDENAR INTEGER V,I,N COMMON V(10),N PRINT *,' DIGITE A ORDEM DO VETOR N=' READ *,N PRINT *,' DIGITE OS', N, ' ELEMENTOS INTEIROS DO VETOR' READ *,(V(I),I=1,N) WRITE(*,1) (V(I),I=1,N) 1 FORMAT(//,5x, 'O VETOR ORIGINAL ' ,/,5X,10I4,/) CALL ORDEM_CRESCENTE CALL ORDEM_DECRESCENTE END

31

SUBROUTINE ORDEM_CRESCENTE INTEGER VET,M,I,J COMMON VET(10),M WRITE(*,1) (VET(I),I=1,M) 1 FORMAT( //,5X,'VETOR RECEBIDO DO PROGRAMA PRINCIPAL',/,5X,10I4,//) DO I=1,M - 1 DO J=I,M IF (VET(I) > VET(J)) THEN AUX=VET(I) VET(I)=VET(J) VET(J)=AUX ENDIF END DO END DO PRINT *,' O VETOR EM ORDEM CRESCENTE'

WRITE(*,2) (VET(I),I=1,M) 2 FORMAT( 5X,10I4,/) RETURN END

SUBROUTINE ORDEM_DECRESCENTE INTEGER VET,M,I,J COMMON VET(10),M WRITE(*,1) (VET(I),I=1,M) 1 FORMAT( //,5X,' VETOR RECEBIDO DO PROGRAMA PRINCIPAL',/,5X,10I4,///) DO I=1,M - 1 DO J=I,M IF (VET(I) < VET(J)) THEN AUX=VET(I) VET(I)=VET(J) VET(J)=AUX ENDIF END DO END DO PRINT *,' O VETOR EM ORDEM DECRESCENTE'

WRITE(*,2) (VET(I),I=1,M) 2 FORMAT( 5X,10I4,/) RETURN END

32

PROGRAM ORDENAR INTEGER V,I,N DIMENSION V(10) PRINT *,' DIGITE A ORDEM DO VETOR N=' READ *,N PRINT *,' DIGITE OS', N, ' ELEMENTOS INTEIROS DO VETOR' READ *,(V(I),I=1,N) PRINT * PRINT *, ' WRITE(*,1) (V(I),I=1,N) 1 FORMAT(//,5x,'O VETOR ORIGINAL,/, 5X,10I4) CALL ORDEM_CRESCENTE (V,N) CALL ORDEM_DECRESCENTE (V,N) END SUBROUTINE ORDEM_CRESCENTE (VET,M) INTEGER VET,M,I,J DIMENSION VET(10) WRITE(*,1) (VET(I),I=1,M) 1 FORMAT( //,5X,'VETOR RECEBIDO DO PROGRAMA PRINCIPAL',/,5X,10I4,//) I=1,M - 1 DO J=I,M IF (VET(I) > VET(J)) THEN AUX=VET(I) VET(I)=VET(J) VET(J)=AUX ENDIF END DO END DO PRINT *,' O VETOR EM ORDEM CRESCENTE' DO

WRITE(*,2) (VET(I),I=1,M) 2 FORMAT( 5X,10I4,/) RETURN END SUBROUTINE ORDEM_DECRESCENTE (VET,M) INTEGER VET,M,I,J DIMENSION VET(10) WRITE(*,1) (VET(I),I=1,M)

33

1 FORMAT( //,5X,' VETOR RECEBIDO DO PROGRAMA PRINCIPAL',/,5X,10I4,///)

I=1,M - 1 DO J=I,M IF (VET(I) < VET(J)) THEN AUX=VET(I) VET(I)=VET(J) VET(J)=AUX ENDIF END DO END DO PRINT *,' O VETOR EM ORDEM DECRESCENTE'

DO

WRITE(*,2) (VET(I),I=1,M) 2 FORMAT( 5X,10I4,/) RETURN END

INICIALIZAES LEITURA V ROTINA PARA SEPARAR V EM V1 E V2

ROTINA PARA ORDENAR V1 EM ORDEM CRESCENTE

ROTINA PARA ORDENAR V2 EM ORDEM DECRESCENTE

ROTINA PARA IMPRIMIR V V1 E V2 ORIGINAIS, V1 E V2 ORDENADOS

Você também pode gostar