Você está na página 1de 50

ESCOLA SECUNDRIA D.

AFONSO SANCHES
Vila do Conde

Curso Profissional de Tcnico de Gesto e Programao de Sistemas Informticos

Disciplina de Programao e Sistemas de Informao

Mdulo 01 Introduo Programao e Algoritmia

2010/2011 - Graciano Torro Bruno Borges

ndice de contedos

1 Introduo Lgica de Programao.................................................................................3 1.1 Lgica..............................................................................................................................................3 1.2 Sequncia Lgica............................................................................................................................3 1.3 Instrues........................................................................................................................................3 1.4 Algoritmo........................................................................................................................................4 1.5 Programas........................................................................................................................................4 1.6 Exerccios........................................................................................................................................4 2 Desenvolvimento de Algoritmos.........................................................................................5 2.1 Pseudocdigo..................................................................................................................................5 2.2 Regras e fases de construo de um Algoritmo..............................................................................5 2.3 Exemplo de Algoritmo....................................................................................................................6 2.4 Exerccios........................................................................................................................................7 3 Fluxogramas..........................................................................................................................8 3.1 O que um fluxograma?.................................................................................................................8 3.2 Simbologia......................................................................................................................................8 3.3 Exerccios......................................................................................................................................10 4 Constantes, Variveis e Tipos de Dados..........................................................................10 4.1 Constantes.....................................................................................................................................10 4.2 Variveis........................................................................................................................................10 4.3 Tipos de Variveis/Constantes......................................................................................................11 4.4 Declarao de Variveis................................................................................................................11 4.5 A instruo de afectao/atribuio..............................................................................................11 4.6 Exerccios......................................................................................................................................12 5 Operadores..........................................................................................................................13 5.1 Operadores Aritmticos.................................................................................................................13 5.2 Exerccios......................................................................................................................................14 5.3 Operadores Relacionais.................................................................................................................14 5.4 Exerccios......................................................................................................................................15 5.5 Operadores Lgicos.......................................................................................................................16 5.6 Exerccios......................................................................................................................................17 5.7 Funes Pr-Definidas..................................................................................................................17 6 Uma notao Algortmica...................................................................................................18 6.1 Exemplo de uma notao..............................................................................................................18 6.1 Notao que vamos utilizar...........................................................................................................20 6.2 Entrada e sada de dados...............................................................................................................20 6.3 Exerccios......................................................................................................................................20 6.4 Teste e Correco de Erros ( Traagens)......................................................................................21 6.5 Exerccios......................................................................................................................................21 7 Linguagem C Os primeiros programas.........................................................................23 7.1 Breve Histria da linguagem C.....................................................................................................24 7.2 Software necessrio para escrever e executar os primeiros programas........................................24 7.3 Ciclo de Desenvolvimento de uma Aplicao..............................................................................25 7.4 Tipos de dados em Linguagem C..................................................................................................26 7.5 Primeiros programas (sem comentrios).......................................................................................27 7.6 Um programa simples ..................................................................................................................29 7.7 Variveis, constantes, expresses e atribuio .............................................................................29 7.8 O comando printf .........................................................................................................................30 7.9 Entrada de Dados .........................................................................................................................30 7.10 Um exemplo: Clculo do peso ideal ..........................................................................................31 8 Nota final..............................................................................................................................32 9 Anotaes/ Resoluo dos exerccios propostos...........................................................33

1 Introduo Lgica de Programao


1.1 Lgica
A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas. Ento o que lgica?

Lgica de programao a tcnica de encadear pensamentos para atingir determinado objectivo.

1.2 Sequncia Lgica


Estes pensamentos, podem ser descritos como uma sequncia de instrues, que devem ser seguidas para se cumprir uma determinada tarefa.

Sequncia Lgica so passos executados at atingir um objectivo ou soluo de um problema.

1.3 Instrues
Na linguagem comum, entende-se por instrues um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, porm, instruo a informao que indica a um computador uma aco elementar a executar. Convm ressaltar que uma ordem isolada no permite realizar o processo completo, para isso necessrio um conjunto de instrues colocadas em ordem sequencial lgica. Por exemplo, se quisermos fazer um ovo estrelado, precisaremos colocar em prtica uma srie de instrues: 1. colocar o azeite na frigideira; 2. aquecer o azeite; 3. colocar o ovo no azeite; 4. temperar com sal; 5. quando o ovo estiver pronto, retir-lo da frigideira. evidente que essas instrues tm que ser executadas por uma ordem adequada no se pode colocar o ovo na frigideira sem antes ter colocado o azeite. Dessa maneira, uma instruo tomada em separado no tem muito sentido. Para obtermos o resultado, precisamos colocar em prtica o conjunto de todas as instrues, na ordem correcta.

Instrues so um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, o que indica a um computador uma aco elementar a executar.

1.4 Algoritmo
Um algoritmo formalmente uma sequncia finita de passos que levam a execuo de uma tarefa. Podemos pensar em algoritmo como uma receita, uma sequncia de instrues que permitem atingir uma meta especfica. Estas tarefas no podem ser redundantes nem subjectivas na sua definio, devem ser claras e precisas. Como exemplos de algoritmos podemos citar os algoritmos das operaes bsicas (adio, multiplicao, diviso e subtraco) de nmeros reais decimais. Outros exemplos seriam os manuais de aparelhos electrnicos, como um leitor de DVD, que explicam passo-a-passo como, por exemplo, reproduzir um filme.

Um algoritmo formalmente uma sequncia finita de passos que levam a execuo de uma tarefa. At mesmo as coisas mais simples, podem ser descritas por sequncias lgicas. Por exemplo: Fazer pipocas na panela. verter o leo na panela aquecer o leo colocar o milho na panela aguardar at o milho comear a estourar retirar as pipocas da panela

1.5 Programas
Os programas de computadores nada mais so do que algoritmos escritos numa linguagem de computador (Pascal, C, Cobol, Fortran, Visual Basic entre outras) e que so interpretados e executados por uma mquina, no caso um computador. importante notar que, dada esta interpretao rigorosa, um programa por natureza muito especfico e rgido em relao aos algoritmos da vida real. A figura seguinte ilustra a relao existente entre as fases de criao do algoritmo e de criao do programa.

PROBLEMA

ANLISE

Soluo na forma de um ALGORITMO

Soluo na forma de um PROGRAMA INFORMTICO

IMPLEMENTAO

1.6 Exerccios
1) Crie uma sequncia lgica para tomar banho. 2) Descreva, com detalhes, a sequncia lgica para trocar um pneu de um carro. 3) Escreva um algoritmo para trocar uma lmpada. Descreva com detalhes as operaes necessrias execuo desta tarefa.

2 Desenvolvimento de Algoritmos
2.1 Pseudocdigo
Fonte: Wikipdia, a enciclopdia livre. (http://pt.wikipedia.org ) Pseudocdigo uma forma genrica de escrever um algoritmo, utilizando uma linguagem simples (nativa a quem o escreve, de forma a ser entendido por qualquer pessoa) sem necessidade de conhecer a sintaxe de nenhuma linguagem de programao. , como o nome indica, um pseudocdigo e, portanto, no pode ser executado num sistema real (computador) - de outra forma deixaria de ser pseudo. Os livros sobre a cincia de computao utilizam frequentemente o pseudocdigo para ilustrar os seus exemplos, de forma que todos os programadores possam entend-los (independentemente da linguagem que utilizem). Embora no caso da lngua portuguesa existam alguns interpretadores de pseudocdigo, nenhum tem a projeco das linguagens Pascal ou BASIC, que no caso da lngua inglesa se assemelham bastante a pseudocdigo (em ingls, claro). O algoritmo deve ser fcil de se interpretar e fcil de codificar. Ou seja, ele deve ser o intermedirio entre a linguagem falada e a linguagem de programao.

2.2 Regras e fases de construo de um Algoritmo


Para escrever um algoritmo precisamos descrever a sequncia de instrues, de maneira simples e objectiva. Para isso utilizaremos algumas tcnicas: Usar somente um verbo por frase. Imaginar que est a desenvolver um algoritmo para pessoas que no trabalham com informtica. Usar frases curtas e simples. Ser objectivo. Procurar usar palavras que no tenham sentido dbio.

J vimos que um ALGORITMO uma sequncia lgica de instrues que podem ser executadas. importante ressaltar que qualquer tarefa que siga determinado padro pode ser descrita por um algoritmo, como por exemplo: COMO FAZER ARROZ DOCE ou ento CALCULAR A CLASSIFICAO NO FINAL DO ANO LECTIVO Entretanto ao montar um algoritmo, precisamos primeiro dividir o problema apresentado em trs fases fundamentais. Onde temos:

ENTRADA: So os dados de entrada do algoritmo. PROCESSAMENTO: So os procedimentos utilizados para chegar ao resultado final. SADA: So os dados j processados, ou seja, o resultado final. Analogia com o homem

Analogia com o homem utilizando outro ponto de vista

2.3 Exemplo de Algoritmo


Imagine o seguinte problema: Calcular a mdia final de uma disciplina composta por quatro Mdulos. Os resultados de cada mdulo sero representados por M1, M2, M3 e M4. A mdia final calculada pela expresso:

MdiaFinal =

M1+ M 2 + M 3 + M 4 4

Para montar o algoritmo proposto, faremos trs perguntas: a) Quais so os dados de entrada? R: Os dados de entrada so M1, M2, M3 e M4. b) Qual ser o processamento a ser utilizado? R: O procedimento ser somar todos os dados de entrada e dividi-los por 4. ( separar estas duas aces). c) Qual ser o resultado de sada? R: O dado de sada ser a mdia dos quatro mdulos. Algoritmo (Narrativa) Receba a nota do mdulo 1. Receba a nota do mdulo 2. Receba a nota do mdulo 3. Receba a nota do mdulo 4. Some todas as notas Divida o resultado por 4. Mostre o resultado da diviso.

2.4 Exerccios
1) Identifique os dados de entrada, processamento e sada no algoritmo abaixo: Receba cdigo da pea Receba valor da pea Receba Quantidade de peas Calcule o valor total da pea (Quantidade * Valor da pea) Mostre o cdigo da pea e seu valor total 2) Escreva um algoritmo para Calcular o stock mdio de uma pea, atendendo seguinte expresso: STOCKMDIO = (QUANTIDADE MNIMA + QUANTIDADE MXIMA) /2 3) Faa um algoritmo para converter uma quantia dada em Euros para Escudos, sabendo que 1 = 200,482 Esc.

3 Fluxogramas
3.1 O que um fluxograma?
Fonte: Wikipdia, a enciclopdia livre. (http://pt.wikipedia.org ) Fluxograma, pode ser entendido como uma representao esquemtica de um processo, muitas vezes feita atravs de grficos que ilustram de forma descomplicada a transio de informaes entre os elementos que o compem. Podemos entend-lo, na prtica, como a documentao dos passos necessrios para a execuo de um processo qualquer. O fluxograma uma forma padronizada e eficaz para representar os passos lgicos de um determinado processamento. Com este tipo de diagrama podemos definir uma sequncia de smbolos, com significado bem definido, portanto, sua principal funo

a de facilitar a visualizao dos passos de um processamento.

3.2 Simbologia
Existem diversos smbolos que podem ser utilizados na elaborao de um fluxograma. Para darmos incio ao trabalho nesta rea

so necessrios apenas os seguintes:

Smbolo

Significado Incio/Fim

Entrada/Sada

Processamento

Deciso*

* No vamos exemplificar a utilizao deste smbolo no modulo 1 para evitar qualquer tipo de confuso. Pegando

no exemplo de algoritmo apresentado no ponto 2.4, o fluxograma correspondente seria o

seguinte:

incio

Receba a nota do mdulo 1

Receba a nota do mdulo 2

Receba a nota do mdulo 3

Receba a nota do mdulo 4

Some todas as notas

Divida o resultado por 4

Mostre o resultado da diviso

fim

Outra forma igualmente correcta e mais simples de representar graficamente o mesmo algoritmo.

incio

Receba a nota do mdulo 1 Receba a nota do mdulo 2 Receba a nota do mdulo 3 Receba a nota do mdulo 4

Some todas as notas Divida o resultado por 4

Mostre o resultado da diviso

fim

3.3 Exerccios
1) Construa um fluxograma que : Leia a cotao do dlar Leia um valor em dlares Converta esse valor para Real Mostre o resultado

2) Desenvolva um fluxograma que: Leia 4 (quatro) nmeros Calcule o quadrado para cada um Somem todos e Mostre o resultado

3) Construa um algoritmo (na forma de fluxograma) para pagamento de comisso de vendedores de peas, levando-se em considerao que a sua comisso ser de 5% do total da venda e que possui os seguintes dados: Identificao do vendedor Cdigo da pea Preo unitrio da pea Quantidade vendida

4 Constantes, Variveis e Tipos de Dados


Variveis e constantes so os elementos bsicos que um programa manipula. Uma varivel um espao reservado na memria do computador para armazenar um tipo de dado determinado. Variveis devem receber nomes para poderem ser referenciadas e modificadas quando necessrio. Um programa deve conter declaraes que especificam de que tipo so as variveis que ele utilizar e s vezes um valor inicial. Tipos podem ser por exemplo: inteiros, reais, caracteres, etc. As expresses combinam variveis e constantes para calcular novos valores.

4.1 Constantes
Constante um determinado valor fixo que no se modifica ao longo do tempo, durante a execuo de um programa.

4.2 Variveis
Varivel a representao simblica dos elementos de um certo conjunto. Cada varivel corresponde a uma posio de memria, cujo contedo pode se alterado ao longo do tempo durante a execuo de um programa. Embora uma varivel possa assumir diferentes valores, ela s pode armazenar um valor a cada instante.

10

Exemplos de variveis

4.3 Tipos de Variveis/Constantes


As variveis e as constantes podem ser basicamente de quatro tipos: Numricas, caracteres, Alfanumricas ou lgicas. Numricas: Especficas para armazenamento de nmeros, que posteriormente podero ser utilizados para clculos. Podem ser ainda classificadas como Inteiras ou Reais. As variveis do tipo inteiro so para armazenamento de nmeros inteiros e as Reais so para o armazenamento de nmeros que possuam casas decimais. Caracteres: Especficas para armazenamento de conjunto de caracteres que no contenham nmeros. Alfanumricas: Especficas para dados que contenham letras e/ou nmeros. Pode em determinados momentos conter somente dados numricos ou somente literais. Se usado somente para armazenamento de nmeros, no poder ser utilizada para operaes matemticas. Lgicas: Armazenam somente dados lgicos que podem ser Verdadeiro ou Falso.

4.4 Declarao de Variveis


Regra geral, as variveis s podem armazenar valores de um mesmo tipo. Isto significa que se uma varivel for declarada para receber nmeros inteiros no po der armazenar

outro tipo de dados.

4.5 A instruo de afectao/atribuio


Quando se pretende armazenar um valor numa constante/varivel a representao em Pseudocdigo que iremos utilizar ser a seguinte:

X5
sequncia

( A varivel X recebe o valor 5 )

Note que atrs foi dito que em cada momento uma varivel s pode conter um nico valor, por isso a

X5 X2 X1
faz com que o valor final da varivel X seja o correspondente ao ltimo valor atribudo.

11

4.6 Exerccios
1. Indique o valor final das variveis A, B e C, aps a execuo das seguintes sequncias de comandos: 1.1. A 3 AA+1 CA-1 BA+C 1.2. C5 BC*3 B(B+5)/2 1.3. A3 A2 A1+1 A32 1.9. 1.4. C3 AA+3 B5 B33 AB+1 CA+B 2. Actividade/ trabalho em grupo Cada formando/aluno ir propor uma sequncia semelhante s do exerccio anterior e escolhe um colega para procurar a soluo. Todos os enunciados e respectivas resolues sero analisados pelos alunos e supervisionados pelo professor. A gesto deste momento dever ser entregue aos alunos. 1.8. XX+1 X2 Y1 C3+3 CC CC1 1.7. 1.6. C3 AC BA X1 X2 X7 X 33 X0

1.5.

1.10. X0 X X + 1 X X 1 X X + 1

12

5 Operadores
Os operadores so utilizados na avaliao/clculo de expresses matemticas pelo computador. Temos trs tipos de operadores: Operadores Aritmticos Operadores Relacionais Operadores Lgicos

5.1 Operadores Aritmticos


Os operadores aritmticos so os utilizados para obter resultados numricos. Alm da adio, subtraco, multiplicao e diviso, podem utilizar tambm o operador para exponenciao. Os smbolos para os operadores aritmticos so:

Hierarquia das Operaes Aritmticas 1 ( ) Parnteses 2 Exponenciao 3 Multiplicao, diviso (o que aparecer primeiro) 4 + ou (o que aparecer primeiro) Escrita de expresses matemticas no formato do computador Antes de comearmos a lidar com expresses matemticas nos nossos algoritmos, vamos treinar a escrita de expresses matemticas no formato utilizado pelo computador.

13

A tabela seguinte mostra alguns exemplos de como uma mesma expresso pode ser representada matematicamente e no computador:

Matemtica

Computador X/2

X 2
2A

2*A Y2

Y2 X +Y 2 5.2 Exerccios

(X+Y)/2

1. Escreva as seguintes expresses matemticas no formato computacional.

a)

2 x+ y

d)

1+

x b +1
2

b)

a2 b +1 a x 1 4 b +1

e)

( x 1) 2
a3 2 b2 +1

c)

f)

Actividade/ trabalho em grupo Cada formando/aluno ir propor uma expresso semelhante s do exerccio anterior e escolhe um colega para procurar a soluo. Todos os enunciados e respectivas resolues sero analisados pelos alunos e supervisionados pelo professor. A gesto deste momento dever ser entregue aos alunos.

5.3 Operadores Relacionais


Os operadores relacionais so utilizados para comparar cadeias de caracteres (texto) e nmeros. Estes operadores devolvem sempre valores lgicos (verdadeiro ou falso/ True ou False). Para estabelecer prioridades no que diz respeito a qual operao executar primeiro, utilize os parnteses.

14

Os operadores relacionais so:

Exemplo: Tendo duas variveis A5 B3

Os resultados das expresses seriam:

5.4 Exerccios
Considere as seguintes variveis: X1 Y3 Z -1 W0 Complete o quadro seguinte: Expresso X=3 X <= Z Z>Y W>0 Y<Z Z = -1 X <> 3 3=4 3 1 = Y -1 X + Y <> 4 ( X +Y ) < 5 X 1 = Y +1 Z <> X +1 W<6 X+Y+Z=W Z <> 1 + 1 Resultado

15

5.5 Operadores Lgicos


Os operadores lgicos servem para combinar resultados de expresses, retornando se o resultado final verdadeiro ou falso. Os operadores lgicos so:

E / AND : OU / OR :

Uma expresso AND (E) verdadeira se todas as condies forem verdadeiras. Uma expresso OR (OU) verdadeira se pelo menos uma condio for verdadeira.

NO / NOT : Um expresso NOT (NO) inverte o valor da expresso ou condio, se verdadeira inverte para falsa e vice-versa. A tabela abaixo mostra todos os valores possveis criados pelos trs operadores lgicos.

Exemplos: Suponha que temos trs variveis A 5, B 8 e C 1 Os resultados das expresses seriam:

16

5.6 Exerccios
1) Tendo as variveis SALARIO, IR e SALLIQ, e considerando os valores abaixo, avalie o valor lgico das seguintes expresses.

2) Sabendo que A 3, B 7 e C 4, indique se as expresses abaixo so verdadeiras ou falsas. a) (A+C) > B ( ) b) B >= (A + 2) ( ) c) C = (B A) ( ) d) (B + A) <= C ( ) e) (C+A) > B ( ) 3) Sabendo que A 5, B 4 e C 3 e D 6, indique se as expresses abaixo so verdadeiras ou falsas. a) (A > C) AND (C <= D) ( ) b) (A+B) > 10 OR (A+B) = (C+D) ( ) c) (A>=C) AND (D >= C) ( )

5.7 Funes Pr-Definidas


No contexto informtico, uma funo (F) utiliza os valores associados a um conjunto de argumentos (A, B, C, ) para calcular um determinado valor. F( A, B, C, ) = A + 2B C + Como todo o estudante se apercebeu a determinada altura, o clculo da raiz quadrada de um nmero pode por vezes tornar-se complicado. Para contornar esta e outras situaes existem em programao as designada funes pr-definidas, que para serem utilizadas dispensam o conhecimento de como o clculo realizado, ficando este a cargo da funo utilizada. Por exemplo: Matemtica Computador Sqr ( 9 )

17

6 Uma notao Algortmica


Na escrita de algoritmos na forma de pseudocdigo existem inmeras metodologias, cada uma com as suas variantes, mas todas tm uma base comum que a utilizao da linguagem humana. Assim sendo, e tratando-se esta de uma disciplina de introduo programao, convm desde j definirmos um conjunto de notaes que nos permitam criar uma base comum de trabalho. Esta ser baseada na obra Introduction to Computer Science An Algorithmic Aproach, dos autores JeanPaul Tremblay e Richard B. Bunt, com as adaptaes que penso facilitarem a abordagem deste tema ao nvel de ensino secundrio.

6.1 Exemplo de uma notao


(Introduction to Computer Science An Algorithmic Aproach, dos autores Jean-Paul Tremblay e Richard B. Bunt)

Ttulo Descrio Lista de Variveis

Algoritmo permetro. Este algoritmo permite calcular o permetro de um tringulo dados os comprimentos dos seus lados. Nome lado1 lado2 lado3 permetro Tipo real real real real Descrio Comprimento do primeiro tringulo. Comprimento do segundo tringulo. Comprimento do terceiro tringulo. Permetro do tringulo.

lado lado lado

do do do

Pseudocdigo comentado

1. [Ler o comprimento dos lados do tringulo] ler (lado1, lado2, lado3) 2. [Calcular o permetro do tringulo] permetro lado1 + lado2 + lado3 3. [Mostrar o valor do permetro do tringulo] escrever (permetro) 4. [Terminar] Fim

O algoritmo que acabamos de escrever composto de vrias parte:

Ttulo: indicado um nome para o algoritmo, devendo escolher-se nomes curtos e que ajudem a identificar a tarefa realizada pelo mesmo. Descrio: Breve descrio do que o algoritmo faz. Lista de variveis: Contm uma lista das variveis utilizadas no algoritmo, o tipo de dados que armazenam e uma breve descrio do seu contedo. Pseudocdigo: Esta a parte mais importante do algoritmo, pois nesta fase que so escritas as instrues que iro ser executadas. A numerao dos passos serve simplesmente como referncia e o texto compreendido entre parntesis rectos corresponde a comentrios, que servem apenas para documentar o algoritmo.

18

A este algoritmo corresponde a seguinte verso simplificada: Algoritmo permetro. ler (lado1, lado2, lado3) permetro lado1 + lado2 + lado3 escrever (permetro) Fim A representao do algoritmo na forma de fluxograma a seguinte: incio

ler (lado1, lado2, lado3)

permetro lado1 + lado2 + lado3

escrever (permetro) fim

19

6.1 Notao que vamos utilizar


A forma de representao do pseudocdigo apresentada no ponto anterior, apesar de bastante robusta, torna a leitura dos algoritmos de alguma forma pesada, principalmente medida que vai aumentando o grau de complexidade dos mesmos. Assim sendo vamos escrever o mesmo algoritmo, mas de acordo com a nova notao.

Nome:permetrodotringulo Entrada:lado1,lado2,lado3 Sada:permetro incio #leroscomprimentosdoslados P1 ler (lado1, lado2, lado3) P2 P3 # calcular o permetro permetro lado1 + lado2 + lado3 # mostrar o valor do permetro escrever (permetro) fim

6.2 Entrada e sada de dados


Note que este tipo de escrita de algoritmos apenas veio organizar uma srie de aspectos estudados nos pontos anteriores. No que diz respeito entrada e sada de dados foram introduzidas duas instrues. Entrada/Input Para pedir ao utilizador a entrada de dados, normalmente realizada a partir do teclado, utilizaremos a instruo:

ler (varivel1, varivel2, varivel3, ).


Sada/Output Para mostrar resultados de processamento no ecr do computador iremos utilizar a instruo:

escrever (varivel1, varivel2, varivel3, ).


6.3 Exerccios
Para cada um dos problemas apresentados apresente: o algoritmo; uma traagem com dados significativos, e cujo resultado consiga prever; o fluxograma; a implementao em linguagem C. 1. Mdia das classificaes de dois testes. 2. A rea de um quadrado. 3. Dada uma quantia em euros e uma taxa, indicar o valor acrescido da taxa.

20

6.4 Teste e Correco de Erros ( Traagens)


A traagem consiste em testar um algoritmo para um conjunto de valores de entrada, observando o comportamento interno do algoritmo para esses valores e ao longo dos vrios passos que compem o algoritmo. Assim, a primeira fase consiste em numerar/etiquetar os passos do algoritmo. De seguida necessrio construir uma tabela colocando na primeira linha as entidades que queremos estudar ao longo dos passos do algoritmo, a saber, variveis e condies, pois so as nicas entidades cujo valor pode variar. A ltima fase consiste em executar o algoritmo passo-a-passo. Considere o problema que consiste em calcular a soma de dois nmeros. Eis o respectivo algoritmo. Nome:somadedoisnmeros Entrada:valor1,valor2 Sada:soma incio #lerosdoisvalores P1 ler (valor1, valor2) P2 # calcular a soma soma valor1 + valor2

# mostrar o valor da soma escrever (soma) P3 fim A tabela seguinte permite representar os vrios passos de execuo do algoritmo, de forma a permitir entender os valores que as variveis vo assumindo. Os valores utilizados para testar o algoritmo so: 2, 5.

Passo P1 P2 P3
6.5 Exerccios

valor1 2

valor2 soma 5 7

Output

Utilize a seguinte sequncia de dados de input ( dados digitados no teclado do computador ) para indicar os valores finais das variveis X, Y e Z: Dados: 1, 5, -2, 10, 11, 3, -1 (cada alnea reinicia o input a partir do primeiro elemento) Indique tambm qual o output produzido no ecr do computador. 1) Incio

LER ( X, Y, Z ) WX+Y+Z ESCREVER ( W )

fim 2) incio LER ( X ) YX ZX WX+Y+Z ESCREVER ( W = , W )

fim

21

3) incio X3 LER ( X ) LER ( X ) LER ( Y, Z, W ) WW+1 ESCREVER ( O valor de X , X ) ESCREVER ( O valor de Y , Y ) ESCREVER ( O valor de Z , Z ) ESCREVER ( O valor de W , W )

fim 4) incio

fim

LER ( X, Y ) X3 ZX+Y WX ESCREVER ( X, Y, Z, W) ESCREVER ( J estou a comear a entender isto! ) ESCREVER ( fim)

22

7 Linguagem C Os primeiros programas


A aprendizagem de tcnicas de programao levanta sempre da parte dos alunos uma questo: Quando que vamos para os computadores? Na resposta a esta questo inicialmente pedida alguma pacincia, pois so necessrios alguns exerccios longe dos teclados para que se entender como um algoritmo funciona. No entanto julgo no ser muito conveniente avanar no grau de complexidade dos algoritmos abordados sem antes proporcionar aos alunos a oportunidade de verem os seus algoritmos a funcionarem na realidade, ou seja, transformados em programas e a solicitarem entradas no teclado do computador, realizarem clculos e mostrarem o resultado no ecr do computador. A linguagem de programao que iremos utilizar inicialmente o C.

A linguagem C, desenvolvida em paralelo com o UNIX, actualmente uma das linguagens de programao mais utilizadas. As suas principais caractersticas so: Simples e de aprendizagem fcil. Uso amplamente difundido. Baseada em construes simples, que usam os recursos da mquina de forma eficiente. Oferece recursos de modularizao necessrios ao desenvolvimento de aplicaes de grande porte. Disponvel em vrias plataformas. uma linguagem general purpose.

23

7.1 Breve Histria da linguagem C


Fonte: Wikipdia, a enciclopdia livre. (http://pt.wikipedia.org )

O desenvolvimento inicial da linguagem C ocorreu nos laboratrios Bell da AT&T entre 1969 e 1973. Segundo Ritchie, o periodo mais criativo ocorreu em 1972. Deu-se o nome "C" linguagem porque muitas das suas caractersticas derivaram de uma linguagem de programao anterior chamada "B". H vrios relatos que se referem origem do nome "B": Ken Thompson d crdito linguagem de programao BCPL mas ele tambm criou uma outra linguagem de programao chamada 'Bon, em honra da sua mulher Bonnie. Por volta de 1973, a linguagem C tinha se tornado suficientemente poderosa para que grande parte do ncleo de UNIX, originalmente escrito na linguagem de programao PDP-11/20 assembly, fosse reescrito em C. Este foi um dos primeiros ncleos de sistema operativo que foi implementado numa linguagem sem ser o assembly, sendo exemplos anteriores o sistema Multics (escrito em PL/I) e TRIPOS (escrito em BCPL).

Kenneth Thompson ( esquerda) e Dennis Ritchie ( direita), os Criadores da linguagem C

7.2 Software necessrio para escrever e executar os primeiros programas


Atendendo ao baixo grau de complexidade dos primeiros algoritmos vamos comear por utilizar, em ambiente Debian GNU/Linux, algumas ferramentas muito elementares. Editor de texto O editor de texto poder ser o Gedit, que se encontra no menu Aplicaes > Acessrios > Editor de Texto.

Consola (linha de comandos) Todo o processo de compilao e execuo ir realizar-se a partir da consola.

24

A linha de comandos utilizada para compilar o programa a seguinte: cc -Wall hello.c -o hello A linha utilizada para executar (correr) o programa a seguinte: ./hello O compilador utilizado o cc, da famlia GCC. (digitar cc help para aprofundar a sua utilizao)

7.3 Ciclo de Desenvolvimento de uma Aplicao


O desenvolvimento de um programa(aplicao) atravessa vrias fases.

comum dividir este processo nas quatro fases seguinte: 1. Edio do cdigo fonte O programador escreve o cdigo-fonte, que armazena em ficheiro com extenso .c (ex: hello.c) . 2. Compilao do programa Mediante um processo designado de compilao, o compilador verifica se o programa est correctamente escrito. Neste fase o programador pode conter uma listagem dos erros que o seu programa contm, devendo corrigir o cdigo-fonte at estes estarem todos eliminados. Tambm possvel obter avisos (warnings) acerca de situaes que, apesar de poderem estar correctas, levantam alguma suspeita.

Caso o compilador consiga realizar a sua tarefa com sucesso, criado um ficheiro objecto com extenso .o(em Linux). 3. Linkagem dos objectos Se na fase anterior o programa que estava a ser executado era o compiler, agora trata-se do linker. Nesta fase criado o ficheiro executvel, a partir do ficheiro objecto obtido no processo de compilao, bem como de livrarias que contm funes pr-compiladas da linguagem C (p.e: printf, scanf ...). Este processo que d origem ao executvel.

25

Regra geral, quando se compila um programa na linha de comando, o compilador encarrega-se de proceder compilao e linkagem, obtendo-se, tam como j tnhamos visto, directamente o ficheiro executvel .

Note-se que, no sendo indicados outros parmetros ao compilador para alm do nome do ficheiro que contm o cdigo-fonte, o executvel armazenado em a.out. 4. Execuo do programa Pro fim, e depois de obtido o executvel. necessrio dar a ordem de incio de execuo do programa. No ambiente em que vamos fazer a iniciao, basta proceder com mostra a imagem.

7.4 Tipos de dados em Linguagem C


http://equipe.nce.ufrj.br/adriano/c/apostila/tipos.htm

Em linguagem C existem os seguintes tipos de dados bsicos:

char: Caracter: O valor armazenado um caractere. Caracateres geralmente so armazenados em


cdigos (usualmente o cdigo ASCII).

int: Nmero inteiro o tipo padro e o tamanho do conjunto que pode ser representado normalmente
depende da mquina em que o programa est rodando. reais.

float: Nmero em ponto flutuante de preciso simples. So conhecidos normalmente como nmeros double: Nmero em ponto flutuante de preciso dupla void: Este tipo serve para indicar que um resultado no tem um tipo definido. Uma das aplicaes
deste tipo em C criar um tipo vazio que pode posteriormente ser modificado para um dos tipos anteriores.

26

Modificadores dos Tipos Bsicos:


Modificadores podem ser aplicados a estes tipos. Estes modificadores so palavras que alteram o tamanho do conjunto de valores que o tipo pode representar. Por exemplo, um modificador permite que possam ser armazenados nmeros inteiros maiores. Um outro modificador obriga que s nmeros sem sinal possam ser armazenados pela varivel. Deste modo no necessrio guardar o bit de sinal do nmero e somente nmeros positivos so armazenados. O resultado prtico que o conjunto praticamente dobra de tamanho. A Tabela abaixo mostra todos os tipos bsicos definidos no padro ANSI.

Tipo char unsigned char signed char int unsigned int signed int short int unsigned short int signed short int long int signed long int unsigned long int float double long double

Tamanho em Bytes 1 1 1 4 4 4 2 2 2 4 4 4 4 8 10

Faixa Mnima -127 a 127 0 a 255 -127 a 127 -2.147.483.648 a 2.147.483.647 0 a 4.294.967.295 -2.147.483.648 a 2.147.483.647 -32.768 a 32.767 0 a 65.535 -32.768 a 32.767 -2.147.483.648 a 2.147.483.647 -2.147.483.648 a 2.147.483.647 0 a 4.294.967.295 Seis digitos de preciso Dez digitos de preciso Dez digitos de preciso

Tabela: Todos os Tipos de dados definidos pelo Padro ANSI C, seus tamanhos em bytes e suas faixa de valores.

Na fase de implementao de um algoritmo, o tipo de dados associado a cada varivel dever ser seleccionado de acordo com a natureza do valor a armazenar.

7.5 Primeiros programas (sem comentrios)


Um programa uma sequncia de cdigo, organizada de tal forma que permita resolver um determinado problema. Em linguagem C, existe uma funo em que so colocadas todas as instrues que queremos que sejam executadas (main). O conjunto de cdigo existente entre chavetas chama-se Bloco. Sem mais demoras, vamos escrever os nossos primeiros programas. prog01.c int main() { return 0; }

27

prog02.c #include <stdio.h> int main() { printf("Hello World!"); return 0; } prog03.c #include <stdio.h> main() { printf(Hello); printf( ); printf(World!); } prog04.c #include <stdio.h> int main Hello);printf(

);

){ printf( printf(World!); return 0;}

prog05.c #include <stdio.h> int main(){ printf(Hello World!\n); return 0; } prog06.c #include <stdio.h> int main(){ printf(Hello\n\nWor\nld!\n); return 0; } prog07.c (contm erros de compilao) #include <stdio.h> int main() { printf(Hoje est um LINDO dia!!!\n); return 0; } prog08.c #include <stdio.h> int main() { printf("Olha que linda est a \"nossa\" Maria!\n"); return 0; }

28

7.6 Um programa simples


O programa abaixo o clssico "Hello, world", usado na maioria dos textos introdutrios para descrever a estrutura de um programa em C: prog08.c #include <stdio.h> int main() { printf(Hello World); return 0; } O que este programa faz basicamente escrever na sada padro a string "Hello world". Alguns detalhes deve ser explicados: #include <stdio.h> int main() { ...} printf(...) "Hello world\n" return 0 indica que este programa deve utilizar as definies feitas no arquivo stdio.h corresponde ao "corpo" do programa. a partir dele que a execuo se inicia. comando que indica "escreva o texto entre parntesis atravs de um dispositivo de sada(neste caso, a sada padro). cadeia de caracteres (string). Os caracteres "\n" representam o caracter newline. O programa devolve o calor 0, o que significa que foi executado e terminou de forma normal.

7.7 Variveis, constantes, expresses e atribuio


O exemplo a seguir ilustra alguns conceitos importantes em C: prog10.c #include <stdio.h> int main() { int a,b,c,soma; a = 1; b = 2; c = 3; soma = a + b + c; printf("soma = %d\n",soma); return 0; } Neste exemplo, o comando int a, b, c, soma; declara a, b, c e soma como variveis do tipo inteiro. Uma varivel do tipo inteiro pode receber qualquer valor inteiro permitido na mquina. Os comandos a = 1; a = 2; c = 3; so comandos de atribuio. Um comando de atribuio indica que uma varivel assume o valor de uma expresso. Nos comandos acima, as expresses so definidas pelas constantes inteiras 1, 2 e 3. Esses comandos so executados na ordem em que aparecem. Ao atribuir um valor a uma varivel, o valor anterior da mesma simplesmente perdido (uma varivel sempre tem um nico valor).

29

7.8 O comando printf


O comando printf utilizado para escrever dados em forma de texto na sada padro ou num ficheiro. Por enquanto, estamos utilizando a forma mais simples desse comando: printf(< sequncia de caracteres entre aspas > , varivel1, varivel2, ...);

Nessa forma, os caracteres da sequncia so escritos na sada padro. Ao serem escritos, alguns
caracteres tm um significado especial. Por exemplo o caracter '%' usado para indicar que o caracter seguinte um especificador de formato, e ambos devem ser substitudos pelo valor de uma varivel da lista de variveis. Por exemplo, no comando printf("o valor de a : %d", a); par de caracteres '%d' ser substitudo pelo valor da varivel a. O caracter 'd' indica que esse valor deve ser escrito como um nmero inteiro decimal. Outro exemplo(completo): prog0011.c #include <stdio.h> int main(){ int a,b,c; a = 1; b = 2; c = 3; printf("valor de a:%d valor de b: %d valor de c:%d \n ",a,b,c); return 0; } Neste exemplo, a primeira ocorrncia de "%d" refere-se primeira varivel da lista (a), a segunda segunda varivel (b) e assim sucessivamente. O par "\n" est sendo utilizado para representar o caracter newline que causa a mudana de linha na sada padro. O resultado da execuo desse programa dever ser: valor de a:1 valor de b:2 valor de c:3

7.9 Entrada de Dados


No exemplo abaixo, o comando scanf est sendo usado para entrada de dados. Seu uso semelhante ao uso do printf: o primeiro argumento uma cadeia de caracteres na qual o par "%d" indica um valor inteiro decimal. Os valores lidos so associados s variveis que aparecem a seguir. Os nomes das variveis aparecem precedidos de '&'. prog0012.c #include int main(){ int a,b,c; scanf("%d %d %d", &a,&b,&c); printf("a:%d b:%d c:%d \n",a,b,c); return 0; }

30

Os 'comandos' scanf e printf na verdade so funes definidas na biblioteca stdio.h que, internamente, chamam funes da biblioteca padro que por sua vez se utilizam dos servios oferecidos pelo sistema operativo para realizar as operaes de leitura e escrita. As funes scanf e printf trabalham basicamente com sequncias de caracteres. Elas tm a capacidade de converter caracteres para outros tipos de dados e vice-versa. Essa converso indicada na sequncia de caracteres atravs de "especificadores de formato", sempre precedidos de '%'. Nos exemplos apresentados at aqui, utilizamos apenas "%d" para indicar a converso de caracteres para inteiros (no caso de scanf) ou de inteiros para caracteres (no caso de printf). O caracter '&' antes do nome de cada varivel a ser lida indica referncia ou endereo da varivel. atravs dessa referncia ou endereo que o valor da mesma ser actualizado aps a leitura do dado correspondente.

7.10 Um exemplo: Clculo do peso ideal


O programa abaixo calcula o "peso ideal" de uma pessoa a partir da sua altura, segundo uma frmula. Note que se trata apenas de um exemplo de programao e no deve ser utilizado para orientar uma dieta. prog0013.c #include <stdio.h> /* Determina o "peso ideal" de uma pessoa a partir da sua altura. Trata-se apenas de um exemplo de programao - no segue nenhuma orientao mdica. */ int main() { int altura; int peso; printf("Altura em centmetros(entre 120 e 200):"); scanf("%d",&altura); peso = (altura-119)*5/8+45; printf("Peso ideal: %d \n",peso); return 0; }

31

8 Nota final
Agora ser necessrio praticar, escrevendo muitos programas em linguagem C. Cada aluno dever utilizar os algoritmos j criados ao longo desta unidade e proceder sua implementao em linguagem C. Sero distribudos vrios manuais da linguagem em formato digital, os quais devero ser utilizados para resolver os problemas que entretanto forem surgindo. Lembrem-se que, em caso de dvida, devem sempre criar o hbito de recorrer aos manuais da linguagem em primeiro lugar. Bom Trabalho!

32

9 Anotaes/ Resoluo dos exerccios propostos


As pginas seguintes destinam-se resoluo dos exerccios propostos, bem como s anotaes que o alunos considere pertinentes.

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50