Você está na página 1de 47

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: hewerson@ufsj.edu.br

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

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

SUMRIO
I 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;

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.

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.

Notas de aula

Programao de Computadores

II Programao estruturada
II.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.

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]

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 utilizao


nome-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

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

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?

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/y
ARREDONDA(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 <= <= Menor ou igual que

11

Notas de aula

Programao de Computadores

II.9 Operadores lgicos

So conectivos utilizados para fazer estabelecer uma relao lgica entre dois valores (Tabela 2.8). Tabela 2.8 Operadores lgicos utilizados em Portugol, Matlab e C++. Operador Portugol Matlab C++ no ~ ! Operador de negao e & && Operador de conjuno ou | || Operador de disjuno

Observao: ordem de prioridade entre operadores: 1. 2. 3. 4. 5. aritmtico; relacional; no; e; ou.

II.10 Expresses literais

Uma expresso literal aquela formada por operadores literais e operandos que so constantes e/ou variveis do tipo literal. Um operador muito utilizado o de concatenao que conecta (junta) duas variveis ou constantes do tipo literal (Tabela 2.9). Em algumas linguagens, os literais so chamados de strings ou characters. Tabela 2.9 Exemplo de operador de concatenao em Portugol, Matlab e C++. Operador Exemplo
declare nome, espao, sobrenome, nome_completo literal; nome 'Joo'; espao ' '; 'Antnio'; sobrenome nome | espao | sobrenome nome_completo nome = 'Joo'; espao = ' '; sobrenome = 'Antnio'; nome_completo = [nome espao string string string string nome; espaco; sobrenome; nome_completo;

Portugol

Matlab

[ ]

sobrenome]

C++

nome = "Joo"; espaco = " "; sobrenome = "Antnio"; nome_completo = nome + espaco + sobrenome

Observao: o que caracteriza o contedo de uma varivel literal estar entre apostrofes (Portugol ou Matlab) ou entre aspas (C++).

12

Notas de aula

Programao de Computadores

II.11 Operador de atribuio

Permite que se fornea um valor a uma varivel ou constante onde a natureza desse valor tem que ser compatvel com o tipo bsico da varivel ou constante. Esses comandos j foram vistos na tabela 2.9. A sintaxe de atribuio mostrada na Tabela 2.10. Tabela 2.10 Sintaxe do comando de atribuio para Portugol, Matlab e C++. Portugol Matlab C++
= =

Exemplo:
K 1; Letra 'A'; Cor 'verde'; Teste falso; Mdia soma/n;

Exemplo:
K = 1; Letra = 'A'; Cor = 'verde'; Teste = 0; Mdia = soma/n;

Exemplo:
K = 1; Letra = 'A'; Cor = "verde"; Teste = false; Mdia = soma/n;

Observao: Em C++, no comando Letra = 'A'; significa que Letra uma varivel do tipo char. O apostrofe serve para indicar apenas um caractere. No comando Cor = "verde"; significa que Cor uma varivel string, ou um vetor de caracteres. Em C++ uma string um vetor de caracteres terminando com um caractere nulo (\0 ou NULL). A representao da varivel Cor feita da seguinte maneira:
Cor 'v' 'e' 'r' 'd' 'e' '\0'

Dessa forma, 't' diferente de "t", assim como 5 diferente de '5' que diferente de "5". Observao: no confunda:
comando de atribuio operador relacional Portugol Matlab/C++

= = ==

Observao: as seguintes expresses so validas em C++:


x = y = z = 3.14; x=(y=2,y+3); //atribuio mltipla //encadeamento de expresses com o operador ,

II.12 Comandos de entrada e sada

Esses comandos determinam o momento de entrada dos dados para o programa atravs do teclado e a sada dos resultados para o usurio no monitor. A sintaxe dos comandos de leitura e escrita mostrada na Tabela 2.11.

13

Notas de aula

Programao de Computadores

Tabela 2.11 Sintaxe dos comandos de entrada e sada em Portugol, Matlab e C++ Comando Entrada Sada Portugol leia lista-de-identificadores; escreva lista-deidentificadores;

Exemplo:
leia aluno, nota;

Exemplo:
escreva aluno, nota; disp

Matlab

input

Exemplo: C++
R=input('Entre com o nmero R'); C=input('Entre com um texto','s'); cin >>

Exemplo:
disp(aluno); disp(nota); cout <<

Exemplo:
cin >> aluno, nota;

Exemplo:
cout << aluno,nota;

Observaes: Nos comandos de leitura o valor digitado no teclado armazenado na varivel somente depois que a tecla Enter pressionada. Se houver mltiplas variveis no comando de entrada, os valores digitados so armazenados sequencialmente a cada toque no Enter (digita-se o valor e pressiona-se o Enter). Para se utilizar a funo input com caracteres (letras) necessrio o parmetro 's' no final do comando. Esse caractere a abreviao de string. Para se utilizar as funes cin e cout em C++, necessrio a incluso da biblioteca iostream.h e o ambiente de variveis padro namespace std, onde cin e cout esto definidos. Vide exemplo abaixo: Exemplo: interpretar a seqncia de comandos a seguir, considerando como entradas os dados 'M' e o valor 25:
Em Portugol:
Algoritmo {Programa para fixao de conceitos} declare N, P literal; declare X, A numrico; X 0; {inicializao} escreva 'Digite uma letra e um nmero: '; leia N,A; {entrada de dados} X X + A; P N; escreva P,X; {sada de dados} X X + A; escreva X; {sada de dados} X A; {sada de dados} escreva N,X,A; Fim algoritmo.

Em Matlab:
X = 0; N = input('Digite uma letra: ','s'); %inicializao %entrada de dados

14

Notas de aula

Programao de Computadores

A = input('Digite um nmero: '); X = X + A; P = N; disp(['P: ' P ' X: ' num2str(X)]); %sada de dados X = X + A; disp(['X: ' num2str(X)]); %sada de dados X = A; disp(['N: ' N ' X: ' num2str(X) ' A: ' num2str(A)]); %sada de dados

Para implementar este programa, abra o Matlab. O ambiente de execuo aparecer como mostrado na figura 2.2

Figura 2.2 Ambiente de execuo do Matlab. Na janela de comandos do ambiente de execuo do Matlab, digite o comando para chamarmos o editor do Matlab, como mostrado na figura 2.3. no editor do Matlab que digitaremos os programas.
edit

15

Notas de aula

Programao de Computadores

Figura 2.3 Acionando o editor do Matlab com o comando edit. No editor, digite o cdigo do nosso primeiro programa em Matlab e salve com o nome de teste01.m. Procure salvar na pasta corrente, ou seja C:\MATLAB6p5\work (figura 2.4).

Figura 2.4 Editando o programa em Matlab e salvando como teste01.m.

16

Notas de aula

Programao de Computadores

Se desejar, voc j pode fechar o editor ou simplesmente deix-lo aberto para correes ou melhorias (recomendo deixar o editor aberto). Para executarmos o programa, basta retornarmos para o ambiente de execuo e digitar o nome do programa sem a extenso, ou seja, teste01 (figura 2.5).

Figura 2.6 Chamando o programa para a execuo. Ao teclarmos Enter, o programa comea sua execuo, solicitando dados ao usurio (figura 2.7) e colocar o resultado na tela. Est pronto o nosso primeiro programa em Matlab.

Figura 2.7 Entrada de dados do programa e exibio do resultado. 17

Notas de aula

Programao de Computadores

Em C++:
#include <iostream> using namespace std; //para uso das funes cin e cout

main() { char N,P; float X,A; X = 0; cout << "Digite uma letra e um nmero: "; cin >> N >> A; //entrada de dados X = X + A; P = N; cout << "P: " << P << " X: " << X << "\n"; X = X + A; cout << "X: " << X << "\n"; X = A; cout << "N: "<< N << " X: "<< X << " A: "<< A; return(0); }

//declarao //inicializao //entrada de dados //sada de dados //sada de dados //sada de dados

Se voc tentar rodar este programa no C++, vai aparecer uma tela preta com a mensagem Digite um nmero: . S que no momento em que o nmero for digitado, ao apertar a teclar Enter, a tela desaparecer e no veremos o resultado do programa. Isso ocorre porque o programa est sendo rodado no Prompt do DOS (ou Prompt de comando). Para resolver este problema, utilizamos a funo getch() presente no arquivo cabealho conio.h. A funo getch() retorna o caractere pressionado. Assim, podemos aperfeioar o programa anterior da seguinte maneira:
#include <iostream> #include <conio.h> using namespace std; //para uso das funes cin e cout //para o uso da funo getch

main() { char N,P,ch; //declarao float X,A; X = 0; //inicializao cout << "Digite uma letra e um nmero: "; cin >> N >> A; //entrada de dados //entrada de dados X = X + A; P = N; cout << "P: " << P << " X: " << X << "\n"; //sada de dados X = X + A; cout << "X: " << X << "\n"; //sada de dados X = A; cout << "N: "<< N << " X: "<< X << " A: "<< A; //sada de dados cout << "\n" << "Pressione Enter para finalizar o programa"; ch=getch(); //tecle Enter para finalizar o programa return(0); }

Para implementar este programa, abra o DEV-C++. O ambiente de edio aparecer como mostrado na figura 2.8. V no menu Arquivo\Novo\Arquivo Fonte.

18

Notas de aula

Programao de Computadores

Figura 2.8 Ambiente de programao DEV-C++. Digite o cdigo do nosso primeiro programa em C++ e salve com o nome de teste01.cpp (figura 2.9).

Figura 2.9 Editando o programa em C++ e salvando como teste01.cpp. 19

Notas de aula

Programao de Computadores

Depois de salvar o programa, precisamos compilar, ou seja, gerar o arquivo executvel. Para isso pressione as teclas Ctrl + F9, ou v no menu Executar\Compilar ou clique no boto de compilao, conforme a figura 2.10.

Figura 2.10 Compilando o programa. Se no tiver erro algum no campo status da janela Compile Progress aparecer Done. O nmero de Errors (Erros) e de Warnings (Avisos) ser zero. Para executarmos, basta pressionarmos Ctrl + F10, ou ir no menu Executar\Executar ou clicar no boto de execuo (figura 2.11)

Figura 2.11 Executando o programa, entrando como os dados e exibindo o resultado na tela. 20

Notas de aula

Programao de Computadores

Observao: No programa em C++, a linha #include <iostream> diz ao compilador que ele deve incluir o arquivo-cabealho iostream. Neste arquivo existem declaraes de funes teis para entrada e sada de dados, como as funes cout e cin. O C++ possui diversos arquivos cabealho, como o stdio.h, conio.h, math.h, cmath.h, dos.h, time.h, string.h..., com vrias funes que sero vistas ao longo deste curso. O parmetro "\n" um parmetro de barra invertida e significa soltar uma linha na sada. Pode ser substitudo pela palavra-chave endl (end line). Outros parmetros de barra invertida para serem utilizados na sada de dados so mostrados na tabela abaixo. Tabela 2.12 Caracteres de barra invertida para uso com as funes de sada de dados. Cdigo Significado \b Retrocede um espao \f Alimentao de formulrio ("form feed") \n Nova linha ("new line") \r Retrocede para o incio da linha \t Tabulao horizontal ("tab") \" Aspas \' Apstrofo \0 Nulo (0 em decimal) \\ Barra invertida \v Tabulao vertical \a Sinal sonoro ("beep") \N Constante octal (N o valor da constante) \xN Constante hexadecimal (N o valor da constante)

Como alternativa funo cout, podemos utilizar a funo printf() que tem a seguinte sintaxe:
printf(string_de_controle,lista_de_argumentos);

A string de controle mostra no apenas os caracteres que devem ser colocados na tela, mas tambm quais as variveis e suas respectivas posies e formatos. Isto feito usando-se os cdigos de controle, que se iniciam com o caractere %. Na string de controle indicamos quais, de qual tipo e em que posio esto as variveis a serem apresentadas. Alguns exemplos de caracteres de controle so apresentados na tabela 2.13.

21

Notas de aula

Programao de Computadores

Tabela 2.13 Caracteres de controle para utilizao da funo printf(). Cdigo Significado %c Um caracter (char) %d Um nmero inteiro decimal (int) %i O mesmo que %d %e Nmero em notao cientfica com o "e" minsculo %E Nmero em notao cientfica com o "e" maisculo %f Ponto flutuante decimal %g Escolhe automaticamente o melhor entre %f e %e %G Escolhe automaticamente o melhor entre %f e %E %o Nmero octal %s String %u Decimal "unsigned" (sem sinal) %x Hexadecimal com letras minsculas %X Hexadecimal com letras maisculas %% Imprime um % %p Ponteiro Alguns exemplos so mostrados na tabela 2.14. Tabela 2.14 Exemplos de utilizao da funo printf(). Comando Resultado na tela
printf("Um ano tem %d dias",360); printf("pi = %f",3.14); printf("%c",'A'); printf("%s de em C++","Programao"); printf("Letra %c e um inteiro %d",'A',20); printf("%s%d%%c%s ","Inflao de",5,"ao ano"); Um ano tem 360 dias pi = 3.14 A Programao em C++ Letra A e um inteiro 20 Inflao de 5% ao ano

possvel tambm indicar o tamanho do campo, justificao e o nmero de casas decimais. Para isto utilizam-se cdigos colocados entre o % e a letra que indica o tipo de formato. Um inteiro indica o tamanho mnimo, em caracteres, que deve ser reservado para a sada. Se colocarmos ento %5d estamos indicando que o campo ter, no mnimo, cinco caracteres de comprimento. Se o inteiro precisar de mais de cinco caracteres para ser exibido ento o campo ter o comprimento necessrio para exibi-lo. Se o comprimento do inteiro for menor que cinco ento o campo ter cinco de comprimento e ser preenchido com espaos em branco. Se quisermos um preenchimento com zeros pode-se colocar um zero antes do nmero. Temos ento que %05d reservar cinco casas para o nmero e se este for menor ento se far o preenchimento com zeros. O alinhamento padro direita. Para se alinhar um nmero esquerda usa-se um sinal de - antes do nmero de casas. Ento %-5d ser um nmero inteiro com, no mnimo, cinco casas, s que justificado a esquerda. Pode-se indicar o nmero de casas decimais de um nmero de ponto flutuante. Por exemplo, a notao %10.4f indica um ponto flutuante de comprimento total dez e com 4 casas decimais. Entretanto, esta mesma notao, quando aplicada a tipos como inteiros e strings indica o nmero mnimo e mximo de casas. Ento %5.8d um inteiro com comprimento mnimo de cinco e mximo de oito. Veja o exemplo abaixo, onde o "pipe" ( | ) indica o incio e o fim do campo mas no so escritos na tela:

22

Notas de aula

Programao de Computadores

#include <stdio.h> #include <conio.h>

//para uso de printf //para uso de getch

main() { printf("\nImprimindo inteiros:"); printf("\n%5d",1); //imprimir | 1| printf("\n%5d",12); //imprimir | 12| printf("\n%5d",123); //imprimir | 123| printf("\n%5d",1234); //imprimir | 1234| printf("\n%5d",12345); //imprimir |12345| printf("\n%5d",123456); //imprimir |123456| printf("\n%5d",1234567); //imprimir |1234567| printf("\n\nImprimindo inteiros completando espaco em branco com zeros:"); printf("\n%05d",1); //imprimir |00001| printf("\n%05d",12); //imprimir |00012| printf("\n%05d",123); //imprimir |00123| printf("\n%05d",1234); //imprimir |01234| printf("\n%05d",12345); //imprimir |12345| printf("\n\nImprimindo reais:"); printf("\n%7.2f",1.0); //imprimir | 1.00| printf("\n%7.2f",1.1); //imprimir | 1.10| printf("\n%7.2f",1.123); //imprimir | 1.12| printf("\n%7.2f",1.123); //imprimir | 1.12| printf("\n%7.2f",1.126); //imprimir | 1.13| (arredondamento) printf("\n%-7.2f",1.126); //imprimir |1.13 | (alinha esquerda) printf("\n%7.2f",12.0); //imprimir | 12.00| printf("\n%7.2f",123.0); //imprimir | 123.00| printf("\n%7.2f",1234.0); //imprimir |1234.00| printf("\n%7.2f",12345.0); //imprimir |12345.00| printf("\n%7.2f",123456.0); //imprimir |123456.00| printf("\n\nImprimindo strings:"); printf("\n%10s","Ola"); //imprimir | printf("\n%-10s","Ola"); //imprimir |Ola printf("\n\nPressione Enter para finalizar"); getch(); return(0); Ola| |

Como alternativa funo cin, podemos utilizar a funo scanf() que tem a seguinte sintaxe:
scanf(string_de_controle,lista_de_argumentos);

Um detalhe da funo scanf(), que temos que acrescentar o caractere & antes de cada varivel da lista-de-argumentos. O motivo ser esclarecido mais tarde. Exemplos:
#include <stdio.h> #include <conio.h> main() { int num; //para o uso das funes printf e scanf //para uso de getch

// declarao de varivel numrica

printf("Digite um nmero: "); scanf("%d",&num); printf("O nmero digitado foi: %d",num); printf("\n\nPressione Enter para finalizar");

23

Notas de aula

Programao de Computadores

getch(); return(0);

II.13 Estrutura seqencial

Conjunto de declaraes e comandos que so executados em uma seqncia linear. A esta seqncia d-se o nome de estrutura seqencial. A sintaxe da estrutura seqencial mostrada na Tabela 2.15. Tabela 2.15 Sintaxe da estrutura seqncial em Portugol, Matlab e C++. Portugol Matlab C++
Algoritmo d1; d2; d3; M dn; M c1; c2; c3; M cn; Fim algoritmo. c1; c2; c3; M cn; #include <diretivas do pr-processador> dg1; dg2; dg3; M dgn; main() { dl1; dl2; dl3; M dln; M c1; c2; c3; M cn; return(0); }

Onde d representa declarao e c representa comando. dg representa declarao de varivel global e dl representa declarao de varivel local. A estrutura seqencial so os comandos um aps o outro. No caso da tabela 2.15, aproveitou-se esta estrutura para se mostrar o posicionamento dentro de um bloco de comandos. Exemplo:
Portugol
Algoritmo {Exemplo01} declare A,B,C numrico; escreva 'Digite dois nmeros A e B: '; leia A,B; C (A + B) * B; escreva A,B,C; Fim algoritmo.

Matlab
A = input('Entre com o valor de A: '); B = input('Entre com o valor de B: '); C = (A + B) * B; disp(['C = ' num2str(C)]); %a funo num2str converte nmero p/ string

24

Notas de aula

Programao de Computadores

C++
#include <iostream> #include <conio.h> using namespace std; main() { float A,B,C; //para uso das funes cin e cout //para o uso da funo getch

cout << "Entre com o valor de A: "; cin >> A; cout << "Entre com o valor de B: "; cin >> B; C = (A + B) * B; cout << "C = " << C << endl; cout << "Pressione Enter para finalizar o programa"; getch(); //tecle Enter para finalizar o programa return(0);

II.14 Estrutura condicional

A estrutura condicional determina qual conjunto de comandos ser executado quando determinadas condies, representadas por expresses relacionais (item II.8) ou lgicas (item II.9), so satisfeitas ou no. As sintaxes das estruturas condicionais simples e composta so mostradas nas Tabelas 2.16, 2.17 e 2.18. Tabela 2.16 Sintaxe da estrutura condicional simples em Portugol, Matlab e C++. Portugol Matlab C++
se(condio)ento if(condio) if(condio) { c1; c1; c1; c2; c2; c2; M M cn; cn; M fim se end cn; }

A condio do comando se uma expresso que ser avaliada. Se o resultado for zero (ou falso) a declarao no ser executada. Se o resultado for qualquer coisa diferente de zero (ou verdadeiro) a declarao ser executada. Observe que os comandos c1, c2 e c3 esto recuados em relao estrutura condicional. Esse recuo denominado identao (normalmente, 3 ou 4 espaos em branco para cada nvel de identao bastam). Apesar de no ter qualquer efeito sobre a execuo do programa, a identao um importante marcador visual que indica que aquele bloco de comandos funciona somente dentro de uma determinada estrutura. Isso importante para manter o algoritmo organizado e facilitar a verificao de erros (lembre-se: a programao muitas vezes um ato coletivo. Nunca devemos programar somente para ns mesmos). No caso da tabela 2.16, tem-se apenas um nvel de identao. O mesmo se observa na tabela 2.15. Exemplos:

25

Notas de aula

Programao de Computadores

Portugol
Algoritmo {Exemplo02} declare A,B,C numrico; escreva 'Digite trs nmeros A, B e C: '; leia A,B,C; se((A + B) < C)ento escreva A + B; escreva C maior do que A + B; fim se Fim algoritmo.

Matlab
A = input('Entre com o valor de A: '); B = input('Entre com o valor de B: '); C = input('Entre com o valor de C: '); if((A + B) < C) disp(A + B); disp('C maior do que A + B'); end

C++
#include <iostream> //para uso das funes cin e cout #include <conio.h> //para o uso da funo getch using namespace std; main() { float A,B,C; cout << "Entre com o valor de A: "; cin >> A; cout << "Entre com o valor de B: "; cin >> B; cout << "Entre com o valor de C: "; cin >> C; if((A + B) < C) { cout << (A + B); cout << "\nC maior do que A + B"; } cout << "Pressione Enter para finalizar o programa"; getch(); //tecle Enter para finalizar o programa return(0); }

Observao: Em C++, a expresso if(x!=0) equivalente if(x) Em C++, a expresso if(x==0) equivalente if(!x) Porque???

A estrutura condicional mostrada na Tabela 2.16 denominada estrutura condicional simples. No entanto, podemos ter uma estrutura condicional composta que delimita vrios conjuntos de comandos (Tabelas 2.17 e 2.18). Cada um desses conjuntos de comandos pode ser executado se, e somente se, a condio for satisfeita. 26

Notas de aula

Programao de Computadores

Tabela 2.17 Sintaxe da estrutura condicional composta em Portugol, Matlab e C++ com dois blocos de comando. Portugol Matlab C++
se(condio1)ento if(condio1) if(condio1) { c1; c1; c1; c2; c2; c2; M M cn; cn; M seno else cn; c1; c1; } else c2; c2; { M M c1; cn; cn; c2; fim se end M cn; }

Tabela 2.18 Sintaxe da estrutura condicional composta em Portugol, Matlab e C++ com mltiplos blocos de comando. Portugol Matlab C++
se(condio1)ento c1; c2; M cn; seno se(condio2)ento c1; c2; M cn; seno se(condio3)ento c1; c2; M cn; seno c1; c2; M cn; fim se if(condio1) c1; c2; M cn; elseif(condio2) c1; c2; M cn; elseif(condio3) c1; c2; M cn; else c1; c2; M cn; end if(condio1) { c1; c2; M cn; } else if(condio2) { c1; c2; M cn; } else if(condio3) { c1; c2; M cn; } else { c1; c2; M cn; }

27

Notas de aula

Programao de Computadores

Exemplos: Portugol
Algoritmo {definio do tipo das variveis} declare A,B,C,MENOR numrico; escreva 'Digite trs nmeros A, B e C: '; leia A,B,C; {leitura dos nmeros} {determinao do menor nmero} se((A < B) e (A < C))ento MENOR A; seno se(B < C)ento MENOR B; seno MENOR C; fim se escreva 'O menor nmero : ', MENOR; Fim algoritmo. {escrevendo o menor nmero}

Matlab
%leitura dos nmeros A = input('Entre com o valor de A '); B = input('Entre com o valor de B '); C = input('Entre com o valor de C '); %determinao do menor nmero if((A < B)&(A < C)) MENOR = A; elseif(B < C) MENOR = B; else MENOR = C; end %escrevendo o menor nmero disp(['O menor nmero : ' num2str(MENOR)]); %num2str converte um numero em uma string

C++
#include <iostream> #include <conio.h> using namespace std; main() { float A,B,C,MENOR; cout << "Entre cin >> A; cout << "Entre cin >> B; cout << "Entre cin >> C; if((A < B)&&(A { MENOR = A; } else if(B < C) { MENOR = B; //para uso das funes cin e cout //para o uso da funo getch

com o valor de A: "; com o valor de B: "; com o valor de C: "; < C))

28

Notas de aula

Programao de Computadores

} else { MENOR = C; } cout << "O menor nmero : " << MENOR; getch(); //tecle Enter para finalizar o programa return(0);

II.14.1 O operador ? em C++

O operador ? serve para montar condicionais de expresses simples. Sintaxe:


condio?expresso_1:expresso2;

Exemplo:
b=a>0?-150:150;

A expresso acima equivalente :


if(a>0) { b=-150; } else { b=150; }

II.15 Estruturas de repetio

A estrutura de repetio permite que uma seqncia de comandos seja executada repetidamente at que uma determinada condio seja satisfeita. As estruturas de repetio tambm so conhecidas como laos ou loops. Essas estruturas se resumem em 3 tipos:

estrutura enquanto-faa; estrutura repita-at; estrutura para-faa.

II.15.1 Estrutura enquanto-faa

A estrutura enquanto-faa realiza o teste de condio no incio do lao. A sintaxe dessa estrutura mostrada na Tabela 2.19

29

Notas de aula

Programao de Computadores

Tabela 2.19 Sintaxe da estrutura de repetio enquanto-faa em Portugol, Matlab e C++. Portugol Matlab C++
enquanto(condio)faa c1; c2; M cn; fim enquanto while(condio) c1; c2; M cn; end while(condio) { c1; c2; M cn; }

Exemplo: Algoritmo para calcular o fatorial de N


Portugol
Algoritmo {Calculando o fatorial de um nmero} declare N,Produto,Multiplicador numrico; escreva 'Entre com um nmero: '; leia N; Produto 1; Multiplicador N; enquanto(Multiplicador >= 1)faa Produto Produto * Multiplicador; Multiplicador Multiplicador 1; fim enquanto escreva 'Fatorial de ',N,' = ', Produto Fim Algoritmo.

Matlab
N = input('digite o valor de N : '); Produto = 1; Multiplicador = N; while(Multiplicador >= 1) Produto = Produto * Multiplicador; Multiplicador = Multiplicador - 1; end disp(['Fatorial de N = ' num2str(Produto)]);

C++
#include <iostream> //para uso das funes cin e cout #include <conio.h> //para o uso da funo getch using namespace std; main() { int Produto,Multiplicador,N; cout << "Digite o valor de N: "; cin >> N; Produto = 1; Multiplicador = N; while(Multiplicador >= 1) {

30

Notas de aula

Programao de Computadores

} cout << "Fatorial de N = " << Produto << endl; cout << "Pressione Enter para finalizar o programa"; getch(); //tecle Enter para finalizar o programa return(0);

Produto = Produto * Multiplicador; Multiplicador = Multiplicador - 1;

a) laos controlados por contador (conceito de varivel contadora): neste caso, uma varivel fornecida com o nmero de vezes que o lao ser repetido. Ex.:
Algoritmo declare Numero_de_Funcionrios,Contador numrico; declare Nome literal; leia Numero_de_Funcionrios; Contador 0; enquanto(Contador < Nmero_de_Funcionrios)faa leia Nome; M Contador Contador+1; fim enquanto Fim algoritmo.

OBSERVAO: INICIALIZADA.

TODA

VARIVEL

CONTADORA

TEM

QUE

SER

b) laos controlados por sentinela ou flag: ao final da entrada de dados, entrado um dado especial ou flag que sinaliza o fim do processamento. Ex.: Nome 'FIM' indicar o fim do processamento
Algoritmo declare Nome literal; declare Horas_Extras,Horas_Faltas numrico; leia Nome, Horas_Extras, Horas_Faltas; enquanto(Nome 'Fim')faa se Horas_Extras ... M fim se leia Nome, Horas_Extras, Horas_Faltas; fim enquanto Fim algoritmo.

31

Notas de aula

Programao de Computadores

Exerccio: Rodando os algoritmos abaixo, qual ser o resultado escrito no monitor?


Algoritmo {Testando a estrutura enquanto-faa} declare n,contador numrico; n 5; contador 1;

enquanto(contador <= n)faa escreva contador; contador contador + 1; fim enquanto Fim algoritmo.

Algoritmo {Testando a estrutura enquanto-faa} declare n,m,contador1,contador2 numrico; m 3; n 5; contador1

1;

enquanto(contador1 <= m)faa contador2 1; enquanto(contador2 <= n)faa escreva contador1,contador2; contador2 contador2 + 1; fim enquanto contador1 contador1 + 1; fim enquanto Fim algoritmo.

32

Notas de aula

Programao de Computadores

II.15.2 Estrutura repita-at

A estrutura repita-at realiza o teste de condio no final do lao. Isso garante que o lao ser executado pelo menos uma vez. A sintaxe da estrutura repita-at mostrada na Tabela 2.20. Tabela 2.20 Sintaxe da estrutura de repetio repita-at em Portugol, Matlab e C++. Portugol Matlab C++
repita c1; c2; M cn; at(condio) do{ c1; c2; M cn; }while(condio);

Observao: o bloco de comando do-while o nico que utiliza ; no final do bloco. Exemplo:
Portugol
Algoritmo declare PAR,SOMA numrico; SOMA PAR 0; 0;

repita SOMA SOMA + PAR; PAR PAR + 2; at(PAR > 10) escreva SOMA; Fim algoritmo.

C++
#include <iostream> #include <conio.h> using namespace std; main() { int PAR=0,SOMA=0; //para uso das funes cin e cout //para o uso da funo getch

do{ SOMA = SOMA + PAR; PAR = PAR + 2; }while(PAR > 10); cout << "O valor de SOMA " << SOMA << endl; cout << "Pressione Enter para finalizar o programa"; getch(); //tecle Enter para finalizar o programa return(0);

33

Notas de aula

Programao de Computadores

Exerccio: Rodando os algoritmos abaixo, qual ser o resultado escrito no monitor?


Algoritmo {Testando a estrutura repita} declare n,contador numrico; n 5; contador 1;

repita escreva contador; contador contador + 1; at(contador > n) Fim algoritmo.

Algoritmo {Testando a estrutura repita-at} declare n,m,contador1,contador2 numrico; m 3; n 5; contador1

1;

repita contador2 1; repita escreva contador1,contador2; contador2 contador2 + 1; at(contador2 > n) contador1 contador1 + 1; at(contador1 < m) Fim algoritmo.

34

Notas de aula

Programao de Computadores

II.15.3 Estrutura para-faa

Na estrutura para-faa, o lao executado um nmero fixo de vezes, utilizando uma varivel para controle do lao (varivel contadora). A sintaxe da estrutura para-faa mostrada na Tabela 2.21. Tabela 2.21 Sintaxe da estrutura de repetio para-faa em Portugol, Matlab e C++. Portugol Matlab C++
para i valor1 at valor2 faa for i=valor1:valor2 for(i=valor1;i<=valor2;i++) { c1; c1; c1; c2; c2; c2; M M cn; M cn; end cn; fim para }

No caso da Tabela 2.19, a varivel contadora do lao i, mas poderia ter outro nome (ex.: contador, a, x, count...). Essa varivel assume valor1. Em seguida, os comandos c1, c2, ..., cn so executados. Ao final da primeira execuo, a varivel controle i, ento, assume valor1 + 1, ou seja, incrementada em uma unidade. Os comandos c1, c2, ..., cn so executados novamente. Esse ciclo se repete at que a varivel i atinja o valor2. Exemplo: Algoritmo para calcular o fatorial de N Portugol:
Algoritmo {Clculo do fatorial de um nmero} declare Fatorial,N,i numrico; Fatorial 1; escreva 'Entre com um nmero: '; leia N; para i 1 at N faa Fatorial Fatorial * i; fim para escreva fatorial; Fim algoritmo.

Matlab:
Fatorial = 1; N = input('Entre com o valor de N: '); for i = 1:N Fatorial = Fatorial * i; end disp(['O fatorial do nmero : ' num2str(Fatorial)]);

35

Notas de aula

Programao de Computadores

C++
#include <iostream> #include <conio.h> using namespace std; main() { int Fatorial,N,i; //para uso das funes cin e cout //para o uso da funo getch

cout << "Digite o valor de N: "; cin >> N; Fatorial = 1; for(i = 1;i<=N;i++) { Fatorial = Fatorial * i; } cout << "Fatorial de N = " << Fatorial << endl; cout << "Pressione Enter para finalizar o programa"; getch(); //tecle Enter para finalizar o programa return(0);

Rodando os algoritmos abaixo, qual ser o resultado escrito no monitor?


Algoritmo {Testando a estrutura para-faa} declare n,contador numrico; n 5;

para contador 1 at n faa escreva contador; fim para Fim algoritmo.

Algoritmo {Testando a estrutura para-faa} declare n,m,contador1,contador2 numrico; m n 3; 5;

para contador1 1 at m faa para contador2 1 at n faa escreva contador1,contador2; fim para fim para Fim algoritmo.

36

Notas de aula

Programao de Computadores

Veja este outro exemplo abaixo em C++ de um contador de porcentagem utilizando o lao para-faa. Implemente este algoritmo e veja o que acontecer:
#include <stdio.h> //para uso de printf #include <conio.h> //para uso de getch e de system #include <stdlib.h> //para uso de _sleep main() { int i; printf("\nOla! Seja bem vindo"); printf("\nPressione qualquer tecla para iniciar o processamento\n"); getch(); system("cls"); //limpando a tela for(i=0;i<=100;i++) { printf("\r%3d%% Concluido!",i); //retrocesso(\r) _sleep(100); //aguarda 100 ms } printf("\nPROCESSAMENTO CONCLUIDO!\a"); printf("\n\nPressione Enter para finalizar"); getch(); return(0); }

II.15.4 Comando interrompa

A execuo dos laos definidos por estruturas de repetio pode ser interrompida pela incluso de uma estrutura condicional simples combinada com um comando de interrupo com mostrada na Tabela 2.22. Tabela 2.22 Sintaxe da estrutura de interrupo de lao em Portugol, Matlab e C++. Portugol Matlab C++
se(condio)ento if(condio) if(condio) { break; interrompa; break; end fim se }

Exemplo: Portugol
Algoritmo declare i,n numrico; n 0; para i 1 at 15 faa se(n > 5)ento interrompa; fim se n n + 1; fim para Fim algoritmo.

37

Notas de aula

Programao de Computadores

Matlab
n = 0; for i=1:15 if(n > 5) break; end n = n + 1; end

C++
#include <iostream> //para uso das funes cin e cout #include <conio.h> //para o uso da funo getch using namespace std; main() { int i,n=0; for(i=1;i<=15;i++) { if(n > 5) { break; } n = n + 1; } cout << "Pressione Enter para finalizar o programa"; getch(); //tecle Enter para finalizar o programa return(0); }

II.15.5 Comando continue

O comando continue pode ser visto como sendo o oposto do interrompa. Ele s funciona dentro de um lao. Quando o comando continue encontrado, o lao pula para a prxima iterao, sem o abandono do lao, ao contrrio do que acontecia no comando interrompa (Tabela 2.23). Tabela 2.23 Sintaxe da estrutura de continuao de lao em Portugol, Matlab e C++. Portugol Matlab C++
se(condio)ento if(condio) if(condio) continue; { continue; continue; end fim se }

Exemplo: Portugol
Algoritmo declare i,n numrico; n 0; para i 1 at 15 faa se(n > 5)ento continue; fim se n n + 1; fim para Fim algoritmo.

38

Notas de aula

Programao de Computadores

Matlab
n = 0; for i=1:15 if(n > 5) continue; end n = n + 1; end

C++
#include <iostream> //para uso das funes cin e cout #include <conio.h> //para o uso da funo getch using namespace std; main() { int i,n=0; for(i=1;i<=15;i++) { if(n > 5) { continue; } n = n + 1; } cout << "Pressione Enter para finalizar o programa"; getch(); //tecle Enter para finalizar o programa return(0); }

39

Notas de aula

Programao de Computadores

II.16 Resumo II.16.1 Estruturas em Portugol


Declarao de variveis declare nota numrico; declare teste, sim lgico; declare arq1, arq2 literal; Concatenao | Estrutura Seqencial Atribuio Comentrios { } Expresses aritmticas + , Operadores relacionais = , >,< , Escrita escreva aluno,nota; Estrutura Condicional Composta se(condio1)ento c1; M cn; seno se(condio2)ento c1; M cn; seno se(condio3)ento c1; M cn; seno c1; M cn; fim se Estrutura para-faa para i 1 at N faa c1; c2; M cn; fim para Portugol LOG(x) LN(x) EXP(x) ABS(x) TRUNCA(x) ARREDONDA(x) SINAL(x) RESTO(x,y) QUOCIENTE(x,y) SEN(x) COS(x) TG(x) Operadores lgicos no e ou

x^2 , x * , / Leitura

leia aluno,nota; Estrutura Condicional Simples

Algoritmo d1; d2; d3; M dn; M c1; c2; c3; M cn; Fim algoritmo.

se(condio)ento c1; c2; M cn; fim se

Estrutura enquanto-faa enquanto(condio)faa c1; c2; M cn; fim enquanto Interrupo/continuao de laos

Estutura repita-at repita c1; c2; M cn; at(condio) Funo logaritmo base 10 logaritmo nepteriano ex valor absoluto (mdulo) truncamento arredondamento sinal de x resto da diviso x/y quociente da diviso x/y seno de x cosseno de x tangente de x

se(condio)ento interrompa; fim se se(condio)ento continue; fim se

40

Notas de aula

Programao de Computadores

II.16.2 Estruturas em Matlab


Declarao de variveis No necessrio Comentrios % Concatenao [ ] Atribuio = Expresses aritmticas + , x^2 ,sqrt(x) * , / Leitura Operadores Operadores relacionais lgicos ~ == , ~= & >,< | >= , <= Escrita disp(aluno); disp(nota);

R=input('Entre com o valor de R'); Estrutura Condicional Simples

Estrutura Seqencial

Estrutura Condicional Composta if(condio1) c1; M cn; elseif(condio2) c1; M cn; elseif(condio3) c1; M cn; else c1; M cn; end Estrutura para-faa for i=1:N c1; c2; M cn; end Matlab log10(x) log(x) exp(x) abs(x) fix(x) round(x) sign(x) rem(x,y) sin(x) cos(x) tan(x)

c1; c2; c3;

if(condio) c1; c2; M cn; end

Estrutura enquanto-faa while(condio) c1; c2; M cn; end Interrupo/Continuao de laos if(condio) break; end if(condio) continue; end

Estutura repita-at

No h

Funo logaritmo base 10 logaritmo nepteriano ex valor absoluto (mdulo) truncamento arredondamento sinal de x resto da diviso x/y quociente da diviso x/y seno de x cosseno de x tangente de x

41

Notas de aula

Programao de Computadores

II.16.3 Estruturas em C++


Declarao de Operadores Operadores Comentrios Expresses aritmticas variveis relacionais lgicos int nota; pow(x,y), sqrt(x) ! == , != bool teste, sim; *, / && // >,< char arq1, arq2; || >= , <= +, string nome01; Concatenao Atribuio Leitura Escrita + = cin >> cout << Estrutura Condicional Estrutura Seqencial Estrutura Condicional Composta Simples if(condio1) #include <diretivas do { pr-processador> c1; declarao_global_1; M declarao_global_2; cn; declarao_global_3; } else if(condio2) M { declarao_global_n; main() c1; if(condio) { M { declarao_local_1; cn; c1; declarao_local_2; } c2; declarao_local_3; else if(condio3) M { M cn; declarao_local_n; c1; } M M c1; cn; } c2; c3; else { M c1; cn; return(0); M } cn; } Estrutura enquanto-faa Estutura repita-at Estrutura para-faa while(condio) for(i=valor1;i<=valor2;i++) do{ { { c1; c1; c1; M M M cn; cn; cn; }while(condio); } } Interrupo/Continuao de laos Funo C++ log10(x) logaritmo base 10 log(x) logaritmo nepteriano exp(x) ex if(condio) abs(x),labs(x),fabs(x) { valor absoluto (mdulo) break; truncamento } ceil(x)arredonda para + arredondamento
floor(x)arredonda para -

if(condio) { continue; }

sinal de x resto da diviso x/y quociente da diviso x/y seno de x cosseno de x tangente de x

fmod(x,y)ou x % y sin(x) cos(x) tan(x)

42

Você também pode gostar