apostilaprogramacao2010_1

Upload: pedro-fernandes

Post on 08-Jul-2015

482 views

Category:

Documents


0 download

TRANSCRIPT

Universidade Federal de So Joo del-Rei

Departamento de Engenharia Biossistemas

Notas de aula

Programao de Computadores

Responsvel: Prof. Hewerson Zansvio Teixeira Departamento de Engenharia de Biossistemas DEPEB

Atualizado em Fevereiro de 2010 Contato: [email protected]

Notas de aula

Programao de Computadores

Notas de Aula Programao de Computadores Ementa: 1. Programas e algoritmos 2. Programao estruturada 3. Constantes, variveis e comentrios 4. Expresses aritmticas, lgicas e literais 5. Comandos de atribuio e de entrada/sada 6. Estrutura seqencial 7. Estrutura condicional 8. Estrutura de repetio 9. Estrutura de dados 10. Modularizao 11. Arquivos 12. Programao em Matlab e em C/C++

Objetivos: Capacitar o aluno na programao de microcomputadores, visando o desenvolvimento de softwares para aplicao em Engenharia.

Bibliografia: CHAPMAN, S. J., Programao em MATLAB para Engenheiros, So Paulo, Editora Thomson, 2003. HANSELMAN, D. & LITTLEFIELD, B., MATLAB 6 Curso Completo, So Paulo: Prentice Hall, 2003. SCHILDT, H., C Completo e Total, 3 ed., So Paulo: Pearson Education, 1997. FARRER, H. et al. Programao Estruturada de Computadores: Algoritmos Estruturados, 3 ed., Rio de Janeiro: Editora LTC, 1999. CARVALHO, D. B., MAGALHES, A. L. C. C., OLIVEIRA, E. S., Curso de Linguagem C da UFMG, disponvel gratuitamente para download em: http://www.ead.cpdee.ufmg.br/cursos/C/Programa_C.pdf Compilador Dev-C++ 5.0 beta 9.2 (4.9.9.2) disponvel gratuitamente para download em: http://prdownloads.sourceforge.net/dev-cpp/devcpp-4.9.9.2_setup.exe. Compilador C++ Builder 2010 disponvel para download (Verso de teste - 30 dias) em:http://altd.embarcadero.com/download/RADStudio2010/c++builder_2010_3615_win_esd.zip

Portal Didtico da UFSJ em www.portaldidatico.ufsj.edu.br

i

Notas de aula

Programao de Computadores

Os textos e diagramas apresentados nesta apostila dependem de explicaes complementares em sala de aula, no devendo, por isso, serem reproduzidos sem o consentimento do autor. As explicaes complementares devero ser anotadas pelo aluno na prpria apostila. Todos os exerccios demonstrados ao longo da apostila foram testados e executados com sucesso no Matlab v. 6.5 e no compilador DEV-C++ 5.0 beta 9.2 (4.9.9.2).

ii

Notas de aula

Programao de Computadores

SUMRIOI Programas e algoritmos........................................................................................................................1 I.1 Programa ........................................................................................................................................1 I.1.1 Sistemas operacionais..............................................................................................................1 I.1.2 Programas aplicativos..............................................................................................................1 I.1.3 Linguagens de programao ....................................................................................................2 I.2 Conceito de algoritmo e as estruturas bsicas de controle.............................................................2 II Programao estruturada...................................................................................................................5 II.1 Introduo......................................................................................................................................5 II.2 Estrutura bsica de um algoritmo..................................................................................................6 II.3 Tipos bsicos de dados ..................................................................................................................7 II.4 Declarao de variveis e constantes............................................................................................8 II.5 Comentrios...................................................................................................................................9 II.6 Operadores aritmticos (por ordem de prioridade).......................................................................9 II.7 Funes elementares....................................................................................................................11 II.8 Operadores relacionais................................................................................................................11 II.9 Operadores lgicos ......................................................................................................................12 II.10 Expresses literais .....................................................................................................................12 II.11 Operador de atribuio..............................................................................................................13 II.12 Comandos de entrada e sada ....................................................................................................13 II.13 Estrutura seqencial ..................................................................................................................24 II.14 Estrutura condicional ................................................................................................................25 II.14.1 O operador ? em C++ .........................................................................................................29 II.15 Estruturas de repetio ..............................................................................................................29 II.15.1 Estrutura enquanto-faa......................................................................................................29 II.15.2 Estrutura repita-at .............................................................................................................33 II.15.3 Estrutura para-faa .............................................................................................................35 II.15.4 Comando interrompa..........................................................................................................37 II.15.5 Comando continue..............................................................................................................38 II.16 Resumo.......................................................................................................................................40 II.16.1 Estruturas em Portugol ...........................................................................................................40 II.16.2 Estruturas em Matlab..............................................................................................................41 II.16.3 Estruturas em C++ .................................................................................................................42 III Estruturas de dados .........................................................................................................................43 III.1 Variveis compostas homogneas ..............................................................................................43 III.1.1 Variveis compostas unidimensionais ................................................................................43 III.1.2 Variveis compostas multidimensionais .............................................................................47 III.1.3 Inicializao de matrizes em Matlab e em C++ ..................................................................51 III.2 Variveis compostas heterogneas .............................................................................................51 III.2.1 Registro...............................................................................................................................51 III.2.2 Conjunto de registros ..........................................................................................................54

iii

Notas de aula

Programao de Computadores

IV Ponteiros em C++.............................................................................................................................59 IV.1 Ponteiros de variveis simples....................................................................................................59 IV.2 Ponteiros e vetores......................................................................................................................61 IV.2.1 Endereo de elementos de vetores ......................................................................................62 IV.2.2 Vetores de ponteiros ...........................................................................................................63 IV.2.3 Ponteiros para ponteiros......................................................................................................63 IV.2.4 Alocao dinmica de memria..........................................................................................64 V Modularizao ...................................................................................................................................66 V.1 Funes ........................................................................................................................................67 V.2 Passagem de parmetros..............................................................................................................72 V.3 Escopo de variveis......................................................................................................................74 V.4 Observaes sobre funes em C++: ..........................................................................................76 V.4.1 Sintaxe moderna e clssica...................................................................................................77 V.4.2 O comando return.................................................................................................................77 VI Arquivos............................................................................................................................................79 VI.1 Abertura de arquivo....................................................................................................................79 VI.2 Fechamento de arquivo...............................................................................................................80 VI.3 Operaes de leitura e escrita de um arquivo ............................................................................81 VI.4 Exemplos de leitura e escrita de arquivos em MATLAB.............................................................83 VI.5 Exemplos de leitura e escrita de arquivos em C++....................................................................85

iv

Notas de aula

Programao de Computadores

I Programas e algoritmos

I.1 Programa O programa, ou software, um conjunto de instrues que auxilia na iterao entre o hardware e o usurio. Existe uma categoria infinita de programas. Dentre essas categorias, pode-se destacar: I.1.1 Sistemas operacionais Um sistema operacional um programa que gerencia os recursos do hardware. ele o responsvel em realizar a comunicao entre os demais softwares que so executados no computador. As principais funes de um sistema operacional so:

gerenciar a execuo de um programa; cuidar da comunicao do usurio; gerenciar recursos de E/S.

Dentre os principais sistemas operacionais, podemos citar: Windons (7, Vista, XP, 2000, 98, NT) GNU/Linux (Debian, Red Hat, Suse, Mandriva, Fedora, Slackware, Ubuntu) UNIX Mac OS Chrome OS

I.1.2 Programas aplicativos

Editores de texto: Microsoft Word, Word Perfect, Latex; Planilhas eletrnicas: Microsoft Excel; Banco de dados: Access, Visual Basic, SQL; Editores grficos: Paint, CorelDraw, Adobe Photoshop, AutoCad; Players: Windows Media Player, Real One, Quick Time; Navegadores: Internet Explorer, Firefox, Google Chrome; Anti-virus: Norton, VirusScan, AVG, Avast; Compactadores: Winzip, WinRar; CD-Burners: Nero, Easy CD Creator; Gerenciadores de Download: Download Accelerator Plus, Get Right; Programas maliciosos: vrus, spy, trojans; Tratamento de som: Sound Forge, Sonnar, CakeWalk;

1

Notas de aula

Programao de Computadores

I.1.3 Linguagens de programao

Nvel Linguagem Baixo nvel Assembly Nvel intermedirio C/C++ FORTRAN / PASCAL / BASIC COBOL / CLIPPER Visuais VISUAL C DELPHI VISUAL BASIC Alto nvel Matlab, SciLab, Mapple Grficas Simulink (componente do Matlab), Labview Paralelas HPF OPEN MP MPI Ateno: a classificao das linguagens nos nveis acima meramente didtica. I.2 Conceito de algoritmo e as estruturas bsicas de controle Programar basicamente construir algoritmos. Programas podem ser entendidos como formulaes concretas de algoritmos abstratos, baseados em representaes e estruturas especficas de dados. A formulao de um algoritmo geralmente consiste em um texto contendo comandos (instrues) que devem ser executados em uma ordem prescrita. Assim,

algoritmo a descrio de um padro de comportamento, expressado em termos de um repertrio bem definido e finito de aes primitivas, das quais damos por certo que podem ser executadas.Exemplo: Escrever os termos da seqncia de Fibonacci inferiores a L (valor numrico). Obs.: a seqncia de Fibonacci se define como tendo os dois primeiros termos iguais a 1 e cada termo seguinte igual soma dos dois termos imediatamente anteriores. Neste momento, aproveitaremos para introduzir a tcnica de refinamentos sucessivos, onde os comandos so escritos de forma mais genrica e so sucessivamente refinados, ou seja, decompostos em comandos mais detalhados, at que se alcance a lgica necessria para sua execuo em um computador. Ao mesmo tempo, daremos uma prvia do que consiste a programao, apresentando algumas estruturas de programao. Essas estruturas sero detalhadas mais frente no curso. 2

Notas de aula

Programao de Computadores

Soluo:Algoritmo Escreva os termos da srie de Fibonacci inferiores a L; Fim algoritmo.

Em um algoritmo, um comando que no for do entendimento do destinatrio ter de ser desdobrado em novos comandos que constituiro um refinamento do comando inicial. Ento, desdobrando-se o comando Escreva os termos da srie de Fibonacci inferiores a L; teremos:Ref. {Escrevendo os termos da srie de Fibonacci inferiores a L} Receba o valor de L; Processe os dois primeiros termos; Processe os termos restantes; Fim ref.

A disposio de comandos sucessivos em um algoritmo forma a primeira estrutura de programao denominada estrutura seqencial (comandos separados por ponto e vrgula). Se um comando de um refinamento ainda for vago, ele dever ser desdobrado em novos comandos e assim sucessivamente, at que possa ser interpretado pelo destinatrio. Assim, desdobrando-se o comando Processe os dois primeiros termos; teremos:Ref. {Processando os 2 primeiros termos} atribua o valor 1 ao primeiro termo; se(ele for menor ou igual do que L)ento escreva-o; fim se atribua o valor 1 ao segundo termo; se(ele for menor ou igual do que L)ento escreva-o; fim se Fim ref.

Neste refinamento aparece uma segunda estrutura de programao ou controle denominada estrutura condicional, cuja sintaxe mostrada abaixo:se(condio)ento comando 1; comando 2; ... comando n; fim se

Uma terceira estrutura de controle, a estrutura de repetio, ser necessria ao se desdobrar o comando Processe os termos restantes;, atravs de um novo refinamento:Ref. {Processando os termos restantes} enquanto(novo termo for menor ou igual a L)faa Calcule o novo termo somando os 2 anteriores; escreva o termo; fim enquanto Fim ref.

3

Notas de aula

Programao de Computadores

A sintaxe da estrutura de repetio enquanto faa mostrada abaixo:enquanto(condio)faa comando 1; comando 2; ... comando n; fim enquanto

Substituindo-se, retroativamente, os comandos por seus refinamentos, teremos:Algoritmo {escrita dos termos de Fibonacci inferiores a L} leia o valor L; {Processamento dos dois primeiros termos} Atribua o valor 1 ao primeiro termo; se(ele for menor do que L)ento escreva-o; fim se Atribua o valor 1 ao segundo termo; se(ele for menor do que L)ento escreva-o; fim se {Processamento dos termos restantes} enquanto(novo termo for menor ou igual a L)faa Calcule o novo termo somando os 2 anteriores; escreva o termo; fim enquanto Fim algoritmo.

Aps as substituies, o nvel de refinamento do algoritmo pode ser considerado adequado para sua implementao em uma linguagem de programao qualquer.

Observao: no se aprende programao copiando algoritmos ou estudando algoritmos prontos. A programao aprendida construindo-se os prprios algoritmos modificando-os e testando-os.

4

Notas de aula

Programao de Computadores

II Programao estruturadaII.1 Introduo Computador uma mquina capaz de seguir um conjunto bem determinado de instrues ou comandos, denominado algoritmo, que constitui um programa. O computador possui memria capaz de armazenar dados, e uma unidade aritmtica que capaz de causar mudanas nesses dados. Alm disso, capaz de comunicar-se com o mundo exterior atravs de operaes de entrada e sada. Para facilitar a comunicao entre o programador e a mquina existem vrios tipos de linguagem de programao. Essas linguagens so responsveis por compilar ou interpretar o desejo do programador em comandos executveis. Para isso, existem compiladores e interpretadores de linguagem que so programas capazes de traduzir um algoritmo para a linguagem da mquina. Ento, uma linguagem de programao uma tcnica de notao para programar com a inteno de servir de veculo para: a) expresso do raciocnio atravs do algoritmo; b) execuo automtica de um algoritmo por um computador. Para facilitar o desenvolvimento dos algoritmos, utilizamos uma linguagem de programao fictcia denominada Portugol (combinao de Portugus com ALGOL, uma antiga linguagem de programao). Essa linguagem no existe de fato. Trata-se apenas de um artifcio didtico para facilitar o desenvolvimento de um algoritmo. Uma vez que o algoritmo escrito em Portugol, ele pode ser traduzido para qualquer linguagem de programao. Neste curso, as linguagens de programao adotadas sero o MATLAB (que interpretado) e o C++ (que compilado). Portanto, o Portugol adotado aqui procurar, na medida do possvel, se aproximar das estruturas de programao destas linguagens. Para a implementao dos programas ser utilizado o programa Matlab 6.5 e o Compilador DEV-C++ v. 4.9.9.2, disponvel gratuitamente para download em: http://prdownloads.sourceforge.net/dev-cpp/devcpp4.9.9.2_setup.exe. Os programas sero desenvolvidos aplicando-se tcnicas de algoritmos estruturados, que consiste em uma metodologia de projeto visando:

facilitar o desenvolvimento dos algoritmos; facilitar o entendimento dos algoritmos; facilitar a manuteno e modificao dos programas; permitir que seu desenvolvimento possa ser feito simultaneamente por uma equipe de pessoas. Para tanto, deve-se:

desenvolver o algoritmo em diferentes fases por refinamentos sucessivos (desenvolvimento top-down); decomposio do algoritmo total em mdulos funcionais organizados de preferncia em um sistema hierrquico; utilizar dentro de cada mdulo um nmero mnimo de estruturas bsicas de fluxo de controle. 5

Notas de aula

Programao de Computadores

II.2 Estrutura bsica de um algoritmo Um algoritmo tpico tem a estrutura bsica mostrada na figura abaixo:

Declarao de variveis/constantes

Inicializao de variveis/constantes

Entrada de dados

Seqncia de comandos

Sada de dados

Finalizao do algoritmo

Figura 2.1 Estrutura tpica de um algoritmo. Esta figura dever ser completada em sala de aula.

6

Notas de aula

Programao de Computadores

II.3 Tipos bsicos de dados Em programao, os dados podem ser representados em 3 tipos bsicos:

numrico (inteiro ou real); literal (para conjunto de caracteres, tambm chamados de strings); lgico (verdadeiro ou falso).

Na Tabela 2.1 tem-se os tipos de acordo com as linguagens Portugol, Matlab e C++. Tabela 2.1 Tipos bsicos de dados em Portugol, Matlab e C++. Portugol Matlab C++int8, uint8 numrico int16, uint16 (inteiro) int32, uint32 int64, uint64 numrico double (real) char literal Lgico logical int float double char string bool void

Observao: existe, ainda, o tipo complexo que no ser abordado neste curso. O C++ apresenta, ainda, o tipo void, que o tipo vazio e de utilizao mais especfica. Em Matlab e em C++, os tipos numricos inteiros e reais ainda dividem-se em subtipos, conforme o domnio que so capazes de representar (Tabela 2.2). Tabela 2.2 Intervalo de representao dos tipos numricos em linguagem Matlab e C++. Formato Tipo em Tipo em de leitura bits Intervalo de representao Matlab C++ em C++char int8 uint8 int16 uint16 int16 int16 uint16 int16 int32 int32 uint32 int64 uint64 single double 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 %c %c %c %i %u %i %hi %hu %hi %li %li %lu %f %lf %Lf 8 8 8 8 8 16 16 16 16 16 16 32 32 32 64 64 32 64 80 [-128, 127] [0, 255] [-128, 127] [-127, 128] [0, 255] [-32768, 32767] [0, 65535] [-32.768 , 32.767] [-32.768, 32767] [0, 65535] [-32768, 32767] [-2E-9, 2E+9] [-2E-9, 2E+9] [0, 4E+9] [9E-18, 9E18] [0, 1.8E19] [3.4E-38, 3.4E+38] [1.7E-308, 1.7E+308] [3.4E-4932, 3.4E+4932]

7

Notas de aula

Programao de Computadores

As palavras-chaves signed, unsigned, long e short so denominadas de modificadores de tipo da linguagem C++. A letra E entre dois nmeros representa 10 elevado a este nmero (2E9 = 2 10+9). importante ressaltar que os tipos float, double e long double esto indicados em faixa de expoente, mas os nmeros podem assumir valores tanto positivos quanto negativos. II.4 Declarao de variveis e constantes Varivel um endereo reservado de memria cujo contedo pode variar durante a execuo de um programa. Constante um endereo reservado de memria cujo contedo no varia durante a execuo de um programa. A declarao de variveis ou constantes no corpo do programa necessria para informar ao computador que a varivel ou constante declarada EXISTE, de um TIPO determinado (conforme visto no item II.3) e precisa de um ENDEREO na memria para seu armazenamento. A sintaxe para declarao de variveis e constantes mostrada na Tabela 2.3: Tabela 2.3 Sintaxe da declarao de variveis em Portugol, Matlab e C++. Portugol declare lista-de-identificadores nome-do-tipo; Exemplo:declare nota, codigo, x5 numrico; declare teste, sim lgico; declare nome, arquivo1, arquivo2 literal;

Matlab C++

no preciso declarar, pois estas so criadas no momento de sua utilizaonome-do-tipo lista-de-identificadores;

Exemplo://inteiros int mat1,mat2,mat3,mat4; unsigned long int num_total_mat; //matrcula dos alunos //n total de matriculas

//reais float nota1,nota2,nota3,nota4; //nota dos alunos double media_nota=0; //mdia da turma inicializada em 0 //lgicos bool aprovado,reprovado; //literal char nome1[9],nome2[5],nome3[4]; //nome dos alunos

Observao: No C++, a declarao de constantes identificada pela palavrachave const e segue o padro dos exemplos abaixo:const int cte1=100,cte2=200; const float pi=3.14159;

A declarao de constantes tambm pode ser feita pela diretiva #define e segue o padro dos exemplos abaixo:#define cte 100 #define pi 3.14159

8

Notas de aula

Programao de Computadores

Nesta tabela, lista-de-identificadores nada mais do que o nome das variveis separadas por vrgulas. O nome de uma varivel deve comear sempre por uma letra ou sublinhado ( _ ). Nunca utilize caracteres especiais como # { } [ ] ( ) . , ; : ! ? % / + - * =. Procure dar nomes pequenos e que faa algum tipo de associao com o valor que est sendo armazenado (por exemplo, se for velocidade, a varivel pode se chamar V). Observe ainda, na declarao de variveis em Portugol que a palavras declare, numrico, lgico e literal esto grifadas. Isso porque se tratam de palavras-chave e, em Portugol toda palavra-chave deve ser grifada. Alm disso, essas palavras no podem ser utilizadas como nome de variveis, pois j esto reservadas para outras funes. O mesmo vale para o Matlab e o C++. Outra observao que, tanto no Matlab quanto no C++, existe diferenciao das variveis no uso de letras maisculas ou minsculas. Dessa forma, uma varivel chamada dados diferente da varivel DADOS que diferente de Dados, e assim por diante. II.5 Comentrios A clareza de um algoritmo deve ser uma preocupao constante do programador. Um instrumento importante para ajudar no entendimento do algoritmo o comentrio. O comentrio em programao nada mais do que um texto escrito no corpo do programa, delimitado por caracteres especiais (tambm denominados caracteres de comentrios variam conforme a linguagem) e que so ignorados pelo computador. Sendo assim, os comentrios no constituem comandos. Eles apenas orientam o programador informando o que um determinado conjunto de comandos faz. A sintaxe para o uso do comentrio mostrada na Tabela 2.4. Tabela 2.4 Sintaxe para o uso de comentrios em Portugol, Matlab e C++. Portugol Matab C++{} % //

Desta forma, o texto que estiver entre {} em Portugol ou depois de % em Matlab ou depois de // em C++ numa mesma linha, no ser interpretado pelo computador. Veremos alguns exemplos do uso de comentrios durante o curso. Outra aplicao que podemos dar aos comentrios a de tirar, temporariamente, a validade de uma parte do cdigo de um programa quando estamos fazendo experincias. II.6 Operadores aritmticos (por ordem de prioridade) As nicas operaes matemticas que o computador realiza so mostradas na Tabela 2.5 e por ordem de prioridade. Tabela 2.5 Operaes matemticas bsicas realizadas pelos computadores segundo a ordem de prioridade. Tipo Portugol Matlab C++ x^2, sqrt(x) pow(x,y), sqrt(x) potenciao/radiciao x^2, x *, / *, / *, / multiplicao/diviso + , adio/subtrao +, +,Observao: A funo pow exige a incluso do arquivo de cabealho math.h

9

Notas de aula

Programao de Computadores

Observao: como o computador s possui as operaes bsicas mostradas na Tabela 2.5, como que se faz para calcular o seno de um ngulo? Esse problema contornado aproximando-se a funo por meio de uma srie numrica. No caso do seno, temos:

x x x sen( x ) = x + +K 3! 5! 7! Como traduzir essa srie em uma expresso utilizando o somatrio? Quais os padres?

3

5

7

10

Notas de aula

Programao de Computadores

II.7 Funes elementares

Alm das operaes bsicas, as linguagens de programao dispem de um gama de funes de uso comum na matemtica. Essas funes so algoritmos j implementados na biblioteca de funes de cada linguagem. Alguns exemplos so mostrados na Tabela 2.6. Tabela 2.6 Exemplos de funes disponveis em Portugol, Matlab e C++. Funo Portugol Matlab C++ LOG(x); log10(x); log10(x); logaritmo base 10 log(x); log(x); logaritmo nepteriano LN(x); x EXP(x); exp(x); exp(x); e abs(x); abs p/int valor absoluto ABS(x); abs(x); labs(x); abs para long int (mdulo) fabs(x); abs para float TRUNCA(x); fix(x); truncamento arredondamento sinal de x resto de x/yARREDONDA(x); SINAL(x); RESTO(X,Y);

round(x); sign(x); rem(x,y);

ceil(x); arredonda para + floor(x); arredonda para - fmod(x,y); ou x % y; para inteiros sin(x); cos(x); tan(x);

QUOCIENTE(X,Y); quociente de x/y SEN(x); sin(x); seno de x COS(x); cos(x); cosseno de x TG(x); tan(x); tangente de x Observao: para uma lista completa de funes, consulte o manual da linguagem de programao. Para utilizar essas funes em C++, necessrio incluir o arquivocabealho math.h ou cmath.h no incio do algoritmo. Essa incluso ser mostrada mais frente.

II.8 Operadores relacionais

Os operadores relacionais so utilizados para comparar dois valores de um mesmo tipo bsico. A relao de operadores relacionais mostrada na Tabela 2.7. Tabela 2.7 Operadores relacionais utilizados em Portugol, Matlab e C++. Expresso Portugol Matlab C++ == == Igual a = ~= != Diferente de > > Maior que > < < Menor que < >= >= Maior ou igual que

Exemplo:disp(aluno); disp(nota); cout > aluno, nota;

Exemplo:cout N >> A; //entrada de dados X = X + A; P = N; cout