Você está na página 1de 70

Algoritmo e Programao de Computadores

DISCIPLINA: Algoritmo e Programao de Computadores CURSOS: Sistema de Informao PROFESSOR: Cleyton Ferrari

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


SUMRIO

Introduo a Lgica de Programao................................................................................................... 5 1.1 1.2 1.3 1.4 1.5 1.6 Lgica ............................................................................................................................................. 5 Seqncia Lgica ........................................................................................................................... 5 Instrues....................................................................................................................................... 5 Algoritmo ....................................................................................................................................... 5 Programas ...................................................................................................................................... 6 Lista de Exerccios ......................................................................................................................... 6

Desenvolvendo Algoritmos ................................................................................................................... 7 2.1 Pseudocdigo ................................................................................................................................. 7 Regras para construo do algoritmo .......................................................................................... 7 Fases ............................................................................................................................................... 7 Exemplo de Algoritmo .................................................................................................................. 8 Teste de Mesa ................................................................................................................................ 9 Lista de Exerccios ......................................................................................................................... 9

FAAr Faculdades Associadas de Ariquemes

2.2 2.3 2.4 2.5 2.6 3

Diagrama de Bloco ............................................................................................................................... 10 3.1 3.2 3.3 O que um diagrama de bloco ................................................................................................... 10 Simbologia ................................................................................................................................... 10 Lista de Exerccios ........................................................................................................................ 11

Constantes, Variveis e Tipos de Dados ............................................................................................. 12 4.1 4.2 4.3 4.4 Constates ...................................................................................................................................... 12 Variveis ....................................................................................................................................... 12 Tipos de Variveis ....................................................................................................................... 13 Declarao de Variveis .............................................................................................................. 14

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


4.5 4.6 5

Atribuio..................................................................................................................................... 15 Lista de Exerccios ....................................................................................................................... 15

Expresses ............................................................................................................................................ 16 5.1 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.2 Aritmticas ................................................................................................................................... 16 Soma......................................................................................................................................... 16 Subtrao ................................................................................................................................. 16 Multiplicao ........................................................................................................................... 16 Diviso ..................................................................................................................................... 16 Exponenciao..........................................................................................................................17 Resto..........................................................................................................................................17 Diviso Inteira ..........................................................................................................................17 Relacional......................................................................................................................................17 Lgica ou Booleana ..................................................................................................................... 18 Tabela verdade do operador && (e) ....................................................................................... 19 Tabela verdade do operador || (ou) ....................................................................................... 19 Tabela verdade do operador ! (no) .......................................................................................20 Lista de Exerccios .......................................................................................................................20

FAAr Faculdades Associadas de Ariquemes

5.3 5.3.1 5.3.2 5.3.3 5.4 6

Funes................................................................................................................................................. 21 6.1 6.1.1 6.1.2 Biblioteca de Funes.................................................................................................................. 21 Funes Predefinidas .............................................................................................................. 21 Manipulando strings ............................................................................................................... 22

Comando de Sada e de Entrada ......................................................................................................... 26 7.1 7.2 7.3 7.4 Comando de Sada ....................................................................................................................... 26 Comando de Entrada .................................................................................................................. 31 S Reforando.............................................................................................................................. 33 Lista de Exerccios ....................................................................................................................... 33

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


8

Estruturas de Seleo .......................................................................................................................... 34 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.1.5 8.2 8.3 Conceitos ...................................................................................................................................... 34 Seleo Simples ....................................................................................................................... 36 Seleo Composta.................................................................................................................... 36 Analisando cada linha do IF ................................................................................................... 37 A execuo do comando IF ..................................................................................................... 38 Alguns exemplos...................................................................................................................... 39 IFs aninhados (encaixados) ........................................................................................................40 Lista de Exerccios ....................................................................................................................... 42

Alternativa de Mltiplas Escolhas ...................................................................................................... 43 9.1 Lista de Exerccios ....................................................................................................................... 45

10

Estruturas de repetio: for, while e do-while ................................................................................... 46 10.1 10.2 10.3 10.4 10.5 10.6 Estrutura do for ........................................................................................................................... 46 for dentro de for........................................................................................................................... 50 Lista de Exerccios ....................................................................................................................... 51 Estrutura do while ....................................................................................................................... 51 Estrutura do ... while ................................................................................................................... 55 Lista de Exerccios ....................................................................................................................... 59

FAAr Faculdades Associadas de Ariquemes

11

Estruturas homogneas: Vetores e Matrizes .....................................................................................60 11.1 11.2 11.3 Conceitos Gerais ..........................................................................................................................60 Ordenando Vetores ..................................................................................................................... 65 Lista de Exerccios ....................................................................................................................... 70

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

1 Introduo a Lgica de Programao


1.1 Lgica
A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a seqncia lgica para o desenvolvimento. Ento o que lgica? Lgica de programao a tcnica de encadear pensamentos para atingir determinado objetivo.

1.2 Seqncia Lgica


Estes pensamentos podem ser descritos como uma seqncia de instrues, que devem ser seguidas para se cumprir uma determinada tarefa. Seqncia Lgica so passos executados at atingir um objetivo ou soluo de um problema.

FAAr Faculdades Associadas de Ariquemes

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 ao 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 seqencial lgica. Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prtica uma srie de instrues: descascar as batatas, bater os ovos, fritar as batatas, etc... evidente que essas instrues tm que ser executadas em uma ordem adequada no se podem descascar as batatas depois de frit-las. 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 correta. Instrues um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, o que indica a um computador uma ao elementar a executar.

1.4 Algoritmo
Um algoritmo formalmente uma seqncia finita de passos que levam a execuo de uma tarefa. Podemos pensar em algoritmo como uma receita, uma seqncia de instrues que do cabo de

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

uma meta especfica. Estas tarefas no podem ser redundantes nem subjetivas na sua definio, devem ser claras e precisas. Como exemplos de algoritmos podem citar os algoritmos das operaes bsicas (adio, multiplicao, diviso e subtrao) de nmeros reais decimais. Outros exemplos seriam os manuais de aparelhos eletrnicos, como um videocassete, que explicam passo-a-passo como, por exemplo, gravar um evento. At mesmo as coisas mais simples, podem ser descritas por seqncias lgicas. Por exemplo: Chupar uma bala. Pegar a bala Retirar o Papel Chupar a bala Jogar o papel no lixo

Somar dois nmeros quaisquer. Escrever o primeiro nmero no retngulo A Escrever o segundo nmero no retngulo B Some o nmero do retngula A com nmero do retngulo B e coloque o resultado no retngulo C Retngulo A

FAAr Faculdades Associadas de Ariquemes

Retngulo B

Retngulo C

1.5 Programas
Os programas de computadores nada mais so do que algoritmos escritos numa linguagem de computador (C, Pascal, C#, Java entre outras) e que so interpretados e executados por uma mquina, no caso um computador. Notem que dada esta interpretao rigorosa, um programa por natureza muito especfica e rgida em relao aos algoritmos da vida real.

1.6 Lista de Exerccios


Os exerccios seguem em anexo a apostila.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

2 Desenvolvendo Algoritmos
2.1 Pseudocdigo
Os algoritmos so descritos em uma linguagem chamada pseudocdigo. Este nome uma aluso posterior implementao em uma linguagem de programao, ou seja, quando for programar em uma linguagem, por exemplo, C# (C Sharp), estaremos gerando cdigo em C#. Por isso os algoritmos so independentes das linguagens de programao. Ao contrrio de uma linguagem de programao no existe um formalismo rgido de como deve ser escrito o algoritmo. O algoritmo deve ser fcil de interpretar e fcil de codificar. Ou seja, ele deve ser o intermedirio entre a linguagem falada e a linguagem de programao.

2.2 Regras para construo do algoritmo


Para escrever um algoritmo precisamos descrever a seqncia de instrues, de maneira simples e objetiva. Pra isso utilizaremos algumas tcnicas: Usar somente um verbo por frase Imaginar que voc est desenvolvendo um algoritmo para pessoas que no trabalham com informtica Usar frases curtas e simples Ser objetivo Procurar usar palavras que no tenham sentido impreciso

FAAr Faculdades Associadas de Ariquemes

2.3 Fases
J foi apresentado que algoritmo uma seqncia 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 O SALDO FINANCEIRO DE UM ESTOQUE Entretanto ao montar um algoritmo, precisamos primeiro dividir o problema apresentado em trs fases fundamentais. ENTRADA Onde Temos: Entrada: So os dados de entrada do algoritmo Processamento: So os procedimentos utilizados para chegar ao resultado Final

PROCESSAMENTO

SADA

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Sada: So os dados j processados Analogia com o homem
ENTRADA PROCESSAMENTO SADA

FAAr Faculdades Associadas de Ariquemes

2.4 Exemplo de Algoritmo


Imagina o seguinte problema: Calcular a mdia final dos alunos da 3 Srie. Os Alunos realizaro quatro provas: P1, P2, P3 e P4. Onde: Mdia Final = P1 + P2 + P3 + P4 4 Para montar o algoritmo proposto, faremos trs perguntas: a. Quais so os dados de entrada? R: Os dados de entrada so P1, P2, P3 e P4 b. Qual ser o processamento a ser utilizado? R: O procedimento ser somar todos os dados de entrada e dividi-los por 4 P1 + P2 + P3 + P4 4 c. Quais sero os dados de sada? R: O dado de sada ser a mdia final Algoritmo Receba a nota da prova1 Receba a nota da prova2

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Receba a nota da prova3 Receba a nota da prova4 Some todas as notas e divida o resultado por 4 Mostre o resultado da diviso

2.5 Teste de Mesa


Aps desenvolver um algoritmo ele dever sempre ser testado. Este teste chamado de teste de mesa, que significa seguir as instrues do algoritmo de maneira precisa para verificar se o procedimento utilizado est correto ou no. Veja o exemplo: Receba a nota da prova1 Receba a nota da prova2 Receba a nota da prova3 Receba a nota da prova4 Some todas as notas e divida o resultado por 4 Mostre o resultado da diviso Utilize a tabela abaixo:
P1 P2 P3 P4 Mdia

FAAr Faculdades Associadas de Ariquemes

2.6 Lista de Exerccios


Os exerccios seguem em anexo a apostila.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

10

3 Diagrama de Bloco
3.1 O que um diagrama de bloco
O diagrama de blocos uma forma padronizada e eficaz para representar os passos lgicos de um determinado processamento. Com o diagrama podemos definir uma seqncia 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 em um diagrama de bloco. No decorrer do curso apresentaremos os mais utilizados. Veja no quadro abaixo alguns dos smbolos que iremos utilizar:

Smbolo

Funo
Indica o Incio ou Fim de um processamento

FAAr Faculdades Associadas de Ariquemes

Terminal

Exemplo: Incio do Algoritmo

Processamento em geral Exemplo: Calculo de dois nmeros Processamento

Indica entrada de dados atravs do Teclado Exemplo: Digite a nota da prova 1 Entrada de Dados Manual

Mostra informaes ou resultados Exemplo: Mostre o resultado do clculo Exibir

Dentro do smbolo sempre ter algo escrito, pois somente os smbolos no nos dizem nada. Veja no exemplo a seguir: Exemplo de diagrama de Bloco

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

11

Chupar uma Bala

Calcular Mdia de 4 Notas

FAAr Faculdades Associadas de Ariquemes

Veja que no exemplo da bala seguimos uma seqncia lgica somente com informaes diretas, j no segundo exemplo da mdia utilizamos clculo e exibimos o resultado do mesmo.

3.3 Lista de Exerccios


Os exerccios seguem em anexo a apostila.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

12

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: inteiro, reais, caracteres, etc. As expresses combinam variveis e constantes para calcula novos valores.

4.1 Constates
Constantes um determinado valor fixo que no se modifica ao longo do tempo, durante a execuo de um programa. Conforme o seu tipo, a constante classificada como sendo numrica, lgica e literal. Exemplo de constantes:

FAAr Faculdades Associadas de Ariquemes

4.2 Variveis
Varivel a representao simblica dos elementos de certo conjunto. Cada varivel corresponde a uma posio de memria, cujo contedo pode ser 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. Exemplo de variveis:

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


4.3 Tipos de Variveis

13

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. o Inteira (int): Os nmeros inteiros so aqueles que no possuem componentes decimais ou fracionrios, podendo ser positivos ou negativos.
Como exemplos: 12 (nmero inteiro positivo) -12 (nmero inteiro negativo)

Real (double): Os nmeros reais so aqueles que podem possuir componentes decimais ou fracionrios, podendo tambm ser positivos ou negativos.
Como exemplos: 24.01 (nmero real positivo com duas casas decimais) 144 (nmero real positivo com zero casa decimal) -13.3 (nmero real negativo com uma casa decimal) 0.0 (nmero real com uma casa decimal)

FAAr Faculdades Associadas de Ariquemes

Alfanumricas (string): Tambm conhecida como caractere, alfanumrica ou literal. Esse tipo de varivel armazena dado que contm letras, dgitos e/ou smbolos especiais.
Como exemplos: Miely (string de comprimento 5) 123 (string de comprimento 3) A (string de comprimento 1)

Lgicas (bool): Tambm conhecido como booleano. representado no algoritmo pelos dois nicos valores lgicos possveis: verdadeiro ou falso. Porm, comum encontrar em outras referncias outros tipos de pares de valores lgicos como: sim/no, 1/0, true/false, verdadeiro/falso.
Como exemplos: true (valor lgico verdadeiro) false (valor lgico falso)

A seguinte tabela mostra os tipos de variveis e os valores possveis de se armazenar em cada uma delas.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

14

C# Type bool byte sbyte char decimal double float int uint long ulong object short

Valores possveis de armazenamento Verdadeiro ou Falso (Valores booleanos) 0 a 255 (8 bits) -128 a 127 (8 bits) Um caractere (16 bits) 1.0 x 10-28 a 7.9 x 1028 (128 bits) 5.0 x 10-324 a 1.7 x 10308 (64 bits) 1.5 x 10-45 a 3.4 x 1038 (32 bits) -2.147.483.648 a 2.147.483.647 (32 bits) 0 a 4.294.967.295 (32 bits) - 9.223.373.036.854.775.808 a 9.223.372.036.854.775.807 (64 bits) 0 a 18.446.744.073.709.551.615 (64 bits) Qualquer Tipo -32.768 a 32.767 (16 bits) 0 a 65.535 (16 bits) Seqncia de Caracteres (16 bits por caractere)

FAAr Faculdades Associadas de Ariquemes

ushort string

4.4 Declarao de Variveis


As variveis s podem armazenar valores de um mesmo tipo.

Tipo da varivel

nome da varivel

Quando formos dar nome s variveis, se faz necessrio seguirmos algumas regras. bom ressaltar que estas regras iro variar de acordo com a linguagem. As seguintes regras: O primeiro caractere uma letra. Se houver mais de um caractere, s podemos usar: letra ou algarismo. Nomes de variveis escritas com letras maisculas sero diferentes de letras minsculas. Lembre-se: mdia diferente de MDIA. Nenhuma palavra reservada poder ser nome de varivel.

Nomes Vlidos: Media, alt, a2, PESO Nomes No-Vlidos: 2w comea por algarismo. Media aluno o caractere espao no permitido.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

15

Um dos objetivos de se declarar uma varivel no incio do algoritmo para que seja alocada (reservada) uma rea na memria (endereo de memria) para a varivel. Outro objetivo da declarao de variveis que, aps a declarao, o algoritmo sabe os tipos de operaes que cada varivel pode realizar; explicando: algumas operaes s podem ser realizadas com variveis do tipo inteiro, outras s podem ser realizadas com variveis dos tipos inteiro ou real, outras s com variveis de caractere etc. Exemplos:

int x; bool opcao; string texto1;

4.5 Atribuio
a principal forma de se armazenar um dado em uma varivel. Esse comando permite que voc fornea um valor a uma varivel, onde o tipo desse valor tem de ser compatvel com a varivel. Uma Varivel nunca eternamente igual a um valor, seu contedo pode ser alterado a qualquer momento. Portanto para atribuir valores a variveis devemos usar o sinal de =.

Identificador
Legenda:

expresso ;

FAAr Faculdades Associadas de Ariquemes

Identificador

o nome da varivel qual est sendo atribudo um valor. o smbolo de atribuio, formado pelo =.

Expresso pode ser uma expresso aritmtica, uma expresso lgica ou literal cuja avaliao (resultado) atribuda ao identificador (varivel). ; Exemplo: finaliza o comando.

x = 10; //L se: a varivel x recebe o valor 10, ou, x recebe 10 opcao = false; texto1 = "Cleyton Ferrari";

4.6 Lista de Exerccios


Os exerccios seguem em anexo a apostila.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

16

5 Expresses
O conceito de expresses em termos computacionais est intimamente ligado ao conceito de expresso (ou frmulas) matemticas, onde um conjunto de variveis e constantes numricas relaciona-se por meio de operadores compondo uma frmula que, uma vez avaliada, resulta num valor. As expresses dividem-se em:

5.1 Aritmticas
Expresses aritmticas so aquelas cujo resultado da avaliao do tipo numrico, seja ele inteiro ou real. Somente o uso de operadores aritmticos e variveis numricas permitido em expresses deste tipo. Como exemplo: 5.1.1 Soma Na matemtica, representada pelo sinal + e, em expresses em termos computacionais, pelo mesmo sinal. A + B Expresso que simboliza a soma do valor de duas variveis. 2+3 Nessa expresso, o valor retornado a soma dos valores dados, isto , 5.

FAAr Faculdades Associadas de Ariquemes

5.1.2 Subtrao Na matemtica, representada pelo sinal e, em expresses em termos computacionais, pelo mesmo sinal. AB 3 -2 Expresso que simboliza a subtrao do valor de duas variveis. Nessa expresso, o valor retornado o resto, isto , 1.

5.1.3 Multiplicao Na matemtica, representada pelos sinais X ou . e, em expresses em termos computacionais, pelo sinal *. B*D 3*2 Expresso que simboliza a multiplicao do valor de duas variveis. Nessa expresso, o valor retornado o produto dos valores dados, isto , 6.

5.1.4 Diviso Na matemtica, representada pelo sinal e, em expresses computacionais, pelo sinal /. A / B Expresso que simboliza a diviso do valor de duas variveis. 6/2 5/2 Nessa expresso, o valor retornado a diviso dos valores dados, que, no caso, ser 3. Nessa expresso, o valor retornado a diviso dos valores dados, que, no caso, ser 2.5.

Dica: Normalmente, as linguagens de programao assumem que a diviso uma operao que retorna um valor REAL. Ateno especial, portanto, para variveis que recebero o resultado de uma diviso.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


5.1.5 Exponenciao

17

Na matemtica, representada pela base e por um expoente e em expresses em termos computacionais pela funo Math.Pow( ). Math.Pow(A, 2); Expresso que simboliza o valor da varivel ao quadrado. Math.Pow(3, 2); Nessa expresso, o valor retornado o resultado da exponenciao do valor 3 ao quadrado 2 que, no caso, ser equivalente a 9. Math.Pow(2, 3); Nessa expresso, o valor retornado o resultado da exponenciao do valor 2 ao cubo 3, que no caso ser equivalente a 8.00.

5.1.6 Resto usado em expresses em termos computacionais quando se deseja encontrar o resto da diviso de dois nmeros inteiros. Em termos computacionais pelo smbolo % K % Y Expresso que simboliza a inteno de achar o resto da diviso do valor da varivel K pelo valor da varivel Y. 5 % 2 Nessa expresso, o valor retornado o resto da diviso do primeiro pelo segundo nmero, que, no caso, ser equivalente a 1. 7 % 4 Nessa expresso, o valor retornado o resto da diviso do primeiro pelo segundo nmero, que, no caso, ser equivalente a 3.

FAAr Faculdades Associadas de Ariquemes

5.1.7 Diviso Inteira usado em expresses em termos computacionais quando se deseja encontrar o quociente da diviso de dois nmeros inteiros, alm de retornar tambm o resto da diviso. Math.DivRem(A, B, out C); Expresso que simboliza a inteno de achar o valor do divisor na diviso do valor da varivel A pelo valor da varivel B, e joga o resto da diviso na varivel C. Math.DivRem(20, 7, out X); Nessa expresso, o valor retornado o coeficiente da diviso do primeiro pelo segundo nmero, que, no caso, ser equivalente a 2, e o resto da diviso ser armazenada em X, que neste caso 6. Math.DivRem(8, 3, out X); Nessa expresso, o valor retornado o coeficiente da diviso do primeiro pelo segundo nmero, que, no caso, ser equivalente a 2, e o resto da diviso ser armazenada em X, que neste caso 2.

5.2 Relacional
Uma expresso relacional, ou simplesmente relao, uma comparao realizada entre dois valores de mesmo tipo bsico. Estes valores so representados na relao atravs de constantes, variveis ou expresses aritmticas. Como exemplos de operadores relacionais matematicamente conhecidos tm:

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

18

Operador Igual Diferente Maior Menor que Maior ou Igual a Menor ou Igual a

Matemtica

Usaremos em C#

= > <

== != > < >= <=

Como exemplos de expresses relacionais tm: A != B X == 1 7>6 8<9 1 <= Y 4 >= W A diferente de B X igual a 1 7 maior que 6 8 menor que 9 1 menor ou igual ao valor da varivel Y 4 maior ou igual ao valor da varivel W

FAAr Faculdades Associadas de Ariquemes

Smbolo

Funo

Indica uma deciso a ser tomada. No exemplo, ta comparando o campo Codigo com Codant, se forem iguais, o fluxo segue para a direita, se no forem iguais, o fluxo segue para baixo. Deciso

5.3 Lgica ou Booleana


Denomina-se expresso lgica a expresso cujos operadores so lgicos e cujos operandos so relaes, constantes e/ou variveis do tipo lgico. Como exemplos de operadores lgicos, matematicamente conhecidos tm:

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

19

Operador Conjuno Disjuno Negao

Matemtica

Usaremos em C#

Significa verdade se todas as condies forem verdadeiras. Verdadeira se pelo menos uma condio for verdadeira Inverte o valor da expresso ou condio, se verdadeira inverte para falsa e vice-versa.

e ou no

&& || !

5.3.1 Tabela verdade do operador && (e) Suponha duas perguntas feitas a quatro pessoas. Se a resposta do candidato for falsa, dever falar 0 (zero), caso contrrio, falar 1 (um). Suponha tambm que s ser chamado para entrevista o candidato que dominar as duas linguagens.

Voc Conhece a Linguagem C# ? 0

Voc conhece a linguagem PASCAL? 0 1 0 1

Sada 0 0 0 1

FAAr Faculdades Associadas de Ariquemes

0 1 1

Nesse exemplo, somente o quarto candidato seria chamado para a entrevista, pois o operador && (e) s considera a expresso como verdadeira se todas as expresses testadas forem verdadeiras.

5.3.2 Tabela verdade do operador || (ou) Suponha duas perguntas feitas a quatro pessoas. Se a resposta do candidato for falsa, dever falar 0 (zero), caso contrrio, falar 1 (um). Suponha tambm que ser chamado para entrevista o candidato que dominar pelo menos uma linguagem.

Voc conhece a linguagem C++ ? 0 0 1 1

Voc conhece a linguagem JAVA? 0 1 0 1

Sada 0 1 1 1

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

20

Nesse exemplo, somente o primeiro candidato no seria chamado para a entrevista, pois o operador || (ou) considera a expresso como verdadeira se pelo menos uma expresso testada for verdadeira. 5.3.3 Tabela verdade do operador ! (no) Observe a tabela a seguir e as afirmativas: Suponha que temos duas varveis, A = 5 e B = 3.

Camisa ! (A > B) ! (B < A) ! (B <> B) ! (A == B)

Sada Falso Falso Verdadeiro Verdadeiro

O operador ! (no) inverte a sada. Considerem a, b e c variveis numricas, e cor uma varivel string.

FAAr Faculdades Associadas de Ariquemes

a + b == 0 && c <> 1 Essa expresso verifica se o resultado da soma dos valores das variveis a e b igual a 0 (zero) e (&&) se o valor da varivel c diferente de 1. O resultado ser considerado verdadeiro se as duas expresses relacionais foram verdadeiras. Cor == azul || a * b > c Essa expresso verifica se o contedo armazenado na varivel cor azul ou (||) se o resultado do produto dos valores variveis a e b maior do que o valor armazenado na varivel c. O resultado ser considerado verdadeiro se, pelo menos uma das expresses relacionais for verdadeira. O resultado obtido de uma avaliao de uma expresso lgica sempre um valor lgico, isto , falso ou verdadeiro. Por esse motivo, pode-se considerar uma nica relao como sendo uma expresso lgica.

5.4 Lista de Exerccios


Os exerccios seguem em anexo a apostila.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

21

6 Funes
Uma funo um instrumento (Subalgoritmo) que tem como objetivo retornar um valor ou uma informao. A chamada de uma funo feita atravs da citao do seu nome seguido opcionalmente de seu argumento inicial entre parnteses. As funes podem ser predefinidas pela linguagem ou criadas pelo programador de acordo com o seu interesse. Exemplos:

FAAr Faculdades Associadas de Ariquemes

6.1 Biblioteca de Funes


Armazenam um conjunto de funes que podem ser usadas pelos programas.

6.1.1 Funes Predefinidas As funes abaixo so mais comuns e importantes para nosso desenvolvimento lgico, entretanto, cada linguagem possui suas funes prprias. As funes podem ser aritmticas, temporais, de texto e etc.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

22

Funo em C# Math.PI; Math.Sin(x); Math.Cos(x); Math.Tan(x); Math.Abs(x); Math.Exp(x); Math.Log(x); Math.Sqrt(x); (int)x; (double)x;

Descrio
Funo que resulta no valor 3.14159265. Sem Argumentos Funo que resulta no valor do seno de um ngulo qualquer em radianos. Funo que resulta no valor do co-seno de um de um ngulo qualquer em radianos. Funo que resulta no valor d tangente de um ngulo qualquer em radianos. Funo que resulta no valor absoluto de um nmero qualquer. Funo que resulta no valor do nmero e elevado a um nmero qualquer. Funo que resulta no valor do logaritmo neperiano de um nmero qualquer. Funo que resulta no valor da raiz quadrada de um nmero positivo. Funo que converte um nmero real em inteiro. Funo que converte um nmero inteiro em real.

FAAr Faculdades Associadas de Ariquemes

6.1.2 Manipulando strings A classe string possui uma srie de mtodos estticos e no estticos, que so utilizamos para formatao, concatenao, desmembramento, substring, etc. Vamos analisar alguns destes mtodos da classe string. 6.1.2.1 O mtodo Substring O mtodo substring um mtodo no esttico que permite pegarmos uma poro de uma string. Para utilizarmos o mtodo substring, basta chamar o mtodo a partir de uma varivel string ou mesmo de uma string literal, conforme o exemplo.

string nome = "Cleyton Ferrari"; string sobreNome = nome.Substring(8, 7);


O mtodo substring aceita como parmetro a posio inicial que queremos obter e quantos caracteres devem ser extrados. Caso no seja informado o nmero de caracteres a ser extrado, a funo retornar o restante da string a partir da posio inicial informada.

6.1.2.2 O mtodo IndexOf O mtodo IndexOf utilizado para localizar uma determinada palavra dentro da string. Este mtodo retornar a posio da string desejada. Caso a string no seja encontrada, ser retornado o valor -1.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


string nome = "Cleyton Ferrari - Programando em C#"; int pos = nome.IndexOf("Programando"); //A partir do ndice 5 int pos2 = nome.IndexOf("Ferrari", 5);

23

Conforme vimos no exemplo, possvel informar a posio inicial para busca como um parmetro adicional.

6.1.2.3 Funes ToUpper e ToLower As funes ToUpper e ToLower permitem colocar uma string em letra minsculas ou maisculas, conforme o exemplo a seguir.

string nome = "Cleyton Ferrari"; string min = ""; string mai = ""; min = nome.ToUpper(); mai = nome.ToLower();

6.1.2.4 Funes StartsWith e EndsWith

FAAr Faculdades Associadas de Ariquemes

As funes startswith e endswith verificam se a string comeo ou termina com uma determinada palavra ou caracter. Estas funes retornam um valor booleano (true ou false).

string arquivo = "comctl32.dll"; if (nome.StartsWith("com")) Console.WriteLine("Comea com COM!"); if (nome.EndsWith(".dll")) Console.WriteLine(" uma dll!");

6.1.2.5 Funes TrimStart, TrimEnd e Trim As funes de Trim servem para remover espaos em branco das strings. A funo TrimStart remove os espaos em branco do incio da string, j a funo TrimEnd remove os espaos em branco do final da string. A funo Trim remove os espaos em branco do inicio e do fim da string.

string nome = nome = nome =

nome = " MAURICIO "; nome.TrimEnd(); nome.TrimStart(); nome.Trim();

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


6.1.2.6 Funes PadLeft e PadRight

24

As funes PadLeft e PadRight servem para preencher uma string a esquerda ou a direita com um caracter especificado. Os exemplos a seguir mostra o uso das funes PadLeft e PadRight.

string nome = string codigo

nome = "Cleyton"; nome.PadRight(10, ' '); // "Cleyton " codigo = "123"; = codigo.PadLeft(6, '0'); // "000123"

6.1.2.7 Funes String.Join e String.Split A funo Split serve para quebrar uma string em um array de strings de acordo com um separador. Ao contrrio da funo split, a funo Join concatena um array de string inserindo um separador.

string linha = "Teste, 10, 20, 10/06/2007"; string[] campos = linha.Split(','); string linhaNova = String.Join(';', campos);

6.1.2.8 A Funo String.Format

FAAr Faculdades Associadas de Ariquemes

A funo String.Format uma das funes mais versteis da classe string. Esta funo permite a criao de uma string baseada em um padro. Podemos colocar dentro do padro da string de formatao alguns tokens que poderam ser substitudos por variveis passadas por parmetro no comando format. string teste = String.Format("Vou colocar o {0} aqui.", "parmetro");

No exemplo acima, o padro da string (primeiro parmetro) contm um token {0}. Este token indica que este valor deve ser substitudo pelo segundo parmetro passado para a funo (neste caso a palavra parmetro).

sTeste = String.Format("Formatao de string com {0} parmetro. ", "Agora so {1}. Valor numrico: {2}", 1, DateTime.Now, 15.5);
No exemplo acima, temos o padro da string com mais de um token, com nmeros de 0 2. A funo tambm recebe 3 parmetros adicionais que correspondem aos valores que sero substitudos na string. Alm de informarmos os tokens, podemos informar regras de formatao que sero utilizadas de acordo com o tipo de dado passado por parmetro, conforme o exemplo.
sTeste = String.Format("Custom Format: {0:d/M/yyy HH:mm:ss}", DateTime.Now); sTeste = String.Format("Formatao do nmero inteiro: {0:D}.", 32); sTeste = String.Format("Formatao do nmero inteiro: {0:D4}.", 21);

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


6.1.2.9 A classe StringBuilder

25

Apesar da versatilidade da classe string, operaes com string podem consumir muitos recursos e causar perda de desempenho. Isto ocorre porque a cada operao o framework cria um novo buffer para a string resultante da operao, ao invs de aproveitar o buffer que est sendo utilizado. Isto mais aparente em operaes de concatenao. Para no criar este tipo de problema, podemos utilizar a classe StringBuilder, do namespace System.Text. Esta classe permite a criao de strings aproveitando o buffer utilizado, o que torna o cdigo mais eficiente. No exemplo a seguir temos um trecho de cdigo com uma operao feita de forma ineficiente e outra mais eficiente usando o stringBuilder, veja a diferena.

FAAr Faculdades Associadas de Ariquemes

// Codigo ineficiente string sql; sql = "SELECT * FROM Products"; sql += " WHERE CategoryId=1 AND"; sql += " AND UnitPrice>10"; // Codigo Eficiente StringBuilder sb = new StringBuilder(); sb.Append("SELECT * FROM Products"); sb.Append(" WHERE CategoryId=1 AND"); sb.Append(" AND UnitPrice>10"); sql = sb.ToString();

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

26

7 Comando de Sada e de Entrada


7.1 Comando de Sada
o comando responsvel por enviar um resultado, uma informao ao usurio. O valor de cada varivel buscado na memria e inserido em um dispositivo de sada. Atravs desse comando o computador pode emitir os resultados e outras mensagens para o usurio atravs da tela do computador ou uma impressora.

Console.Write( imprima expresso ou varivel ou constantes );


Algoritmo 1

FAAr Faculdades Associadas de Ariquemes

using System; class Program { static void Main() { Console.Write("Aprendendo Algoritmos!!!"); } }


Vdeo:

Aprendendo Algoritmo!!!
Esse algoritmo faz com que seja exibida, na tela do computador, a mensagem: Aprendendo Algoritmo!!! Neste nosso algoritmo desenvolvido em C# possvel notar a semelhanas com as demais linguagens de programao a baixo:

Linguagem: Java

public class imp1 { public static void main(String args[]) { System.out.println("Aprenda Algoritmo!!!"); } }

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Linguagem: Pascal

27

program imp1; uses crt; begin writeln('Aprenda Algoritmo!!!'); end.


Linguagem: C

#include <stdio.h> #include <stdlib.h> int main() { printf("Aprenda Algoritmo!!!"); return(0); }


Agora que criamos o nosso primeiro algoritmo em C# possvel notar que o importante a nossa lgica e no a sintaxe da linguagem.

FAAr Faculdades Associadas de Ariquemes

Algoritmo 2

using System; class Program { static void Main() { Console.Write("Aprendendo algoritmos!!!"); Console.Write("Com Cleyton Ferrari"); } }
Vdeo:

Aprendendo algoritmo!!!Com Cleyton Ferrari


Embora tenhamos duas linhas de comandos, o que nos levaria a pensar que teramos duas linhas no vdeo, o interpretador s alimenta linha se assim especificarmos atravs do smbolo \n. Esse smbolo uma string e dever vir entre aspas.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Algoritmo 3

28

using System; class Program { static void Main() { Console.Write("Aprendendo algoritmos!!!"); Console.Write("\nCom Cleyton Ferrari"); } }
Vdeo:

Aprendendo algoritmo!!! Com Cleyton Ferrari


Algoritmo 4

FAAr Faculdades Associadas de Ariquemes

using System; class Program { static void Main() { Console.Write("Aprendendo algoritmos!!!\n"); Console.Write("Com Cleyton Ferrari"); } }
Vdeo:

Aprendendo algoritmo!!! Com Cleyton Ferrari

Observe que o smbolo \n poder ser colocado ao final da linha anterior ou no incio da prxima linha que produzir o mesmo efeito, mas, lembre-se, sempre entre aspas.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

29

Algoritmo 5

using System; class Program { static void Main() { Console.Write("Aprendendo algoritmo !!!\nCom Cleyton Ferrari\n\nFica muito mais fcil !!!"); //digite tudo na mesma linha } }
Vdeo:

Aprendendo algoritmo !!! Com Cleyton Ferrari Fica muito mais fcil !!!

FAAr Faculdades Associadas de Ariquemes

Observe que podemos, usando um nico comando Console.Write() e fazendo uso do smbolo \n, mostrar vrias mensagens em vrias linhas, inclusive deixando linha em branco quando colocamos \n\n. Ou simplesmente usar o comando Console.WriteLine(); que j quebra a linha automaticamente no final de cada frase.

using System; class Program { static void Main() { Console.WriteLine("Aprendendo algoritmo !!!"); Console.WriteLine("Com Cleyton Ferrari"); Console.WriteLine("Fica muito mais fcil !!!"); } }

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Algoritmo 6

30

using System; class Program { static void Main() { int x; x = 10; Console.Write(x); } }
Vdeo:

10
Esse trecho de muita importncia, pois x recebe o valor 10. Como j vimos, na memria do computador, existe uma varivel chamada x e o valor 10 seria armazenado dentro da varivel. Quando o comando Console.Write(x) executado, o valor de x, que est na memria do computador, exibido pelo comando no vdeo.

FAAr Faculdades Associadas de Ariquemes

Algoritmo 7

using System; class Program { static void Main() { int x; x = 10; Console.Write("Valor de x= {0}", x); } }
Vdeo:

Valor de x = 10
Esse trecho permite a exibio de uma mensagem e do contedo de uma varivel na tela do computador. Ao executar o comando Console.Write() o valor entre aspas {0} ser substitudo pelo valor do primeiro parmetro passado ao comando, no caso pelo valor da varivel x.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Algoritmo 8

31

using System; class Program { static void Main() { int x; x = 10; Console.Write("Valor de x= {0}", x+1); } }
Vdeo:

Valor de x = 11
Esse trecho bem parecido com o anterior. O contedo da varivel x copiado da memria e acrescido de um, sendo impresso, aps a string, no lugar de {0}, sem alterar o valor de x na memria.

FAAr Faculdades Associadas de Ariquemes

7.2 Comando de Entrada


o comando que permite que o usurio digite dados, possibilitando um dilogo com o computador. O dado digitado armazenado temporariamente em um registrador e, depois, copiado para a posio de memria indicada no comando. Lembre-se de que o nome de uma varivel representa uma posio na memria.

nome de uma varivel = Console.ReadLine();

Exemplo:

using System; class Program { static void Main() { string nome = ""; Console.Write("Digite seu Nome: "); nome = Console.ReadLine(); //L-se: leia um valor para a variavel nome Console.Write("Seu Nome : {0}",nome); } }

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


O que faz o computador?

32

O computador fica esperando o usurio digitar um dado; neste exemplo, um nome qualquer. A varivel nome, tendo sido declarada como string, recebe o valor informado pelo usurio. Observe o algoritmo a seguir que envolve a maioria das funes numricas: Algoritmo 9
using System; class Program { static void Main() { string c, c1, d, d1; Console.Write("\n Digite palavra 1: "); c = Console.ReadLine(); Console.Write("\n Digite palavra 2: "); c1 = Console.ReadLine(); Console.Write("\n tamanho da 1 palavra: {0}", c.Length); Console.Write("\n concatenando sem armazenar: {0}", c + c1); d = c; Console.Write("\n o contedo de d: {0}", d); d1 = c + c1; Console.Write("\n concatenao: {0}", d1); Console.Write("\n primeiro caractere: {0}", c.Substring(0, 1)); Console.Write("\n ltimo caractere: {0}", c1.Substring(c1.Length - 1, 1)); Console.Write("\n todos menos o primeiro: {0}", d1.Substring(1)); Console.Write("\n o terceiro elemento: {0}", c.Substring(3, 1));// 4 caracter Console.Write("\n os trs primeiros elementos: {0}", c.Substring(0, 3)); Console.Write("\n os trs ltimos elementos: {0}", c1.Substring(c1.Length - 3, 3)); } }

FAAr Faculdades Associadas de Ariquemes

Vdeo:

Digite palavra 1: TESTANDO Digite palavra 2: UAL tamanho da 1 palavra: 8 concatenando sem armazenar: TESTANDOUAL o contedo de d: TESTANDO concatenao: TESTANDOUAL primeiro caractere: T ltimo caractere: L todos menos o primeiro: ESTANDOUAL o terceiro elemento: T os trs primeiro elementos: TES os trs ltimos elementos: UAL

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

33

Observe que o usurio digitou TESTANDO para o valor da primeira palavra que foi armazenado na varivel c, depois foi solicitado que o usurio digita-se a segunda palavra, no caso, UAL, que foi armazenado na varivel c1, imprimiu na tela o tamanho da primeira palavra armazenada em c, concatenou c com c1 sem armazenar em nenhuma varivel e imprimiu na tela, copiou o contedo de c para a varivel d, imprimiu na tela o contedo de d, concatenou c e c1 e armazenou em d1, e imprimiu na tela o valor de d1, imprimiu o primeiro caractere da varivel c, o ltimo da c1, todos menos o primeiro da d1, o terceiro elemento da varivel c, que neste caso T, pois a funo Substring() comea a contar da posio zero, depois, imprimiu os trs primeiros elementos de c, os trs ltimos elementos de d1.

7.3 S Reforando
Todas as palavras reservadas so escritas com letras minsculas. O Operador de atribuio dever ser formado pelo sinal = Os identificadores (nome do algoritmo e das variveis devero comear por uma letra ou algarismo). Os comandos: Write(), ReadLine(), atribuio e as declarao de variveis terminam com ;

7.4 Lista de Exerccios


Os exerccios seguem em anexo a apostila.

FAAr Faculdades Associadas de Ariquemes

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

34

8 Estruturas de Seleo
8.1 Conceitos
Nossos algoritmos at agora seguiram um mesmo padro: entrava-se com dados, estes eram processados e alguma informao era mostrada na tela. Dessa forma, o computador mais parecia uma mquina de calcular. O aprendizado de novos conceitos, como a estrutura de seleo, nos dar uma viso maior da complexidade de tarefas que ele poder executar. Vamos refletir sobre a importncia dessa estrutura, lendo com ateno as afirmativas a seguir: A. Distribuio gratuita de cestas bsicas. B. Distribuio gratuita de cestas bsicas para famlias com 4 ou mais componentes. C. Distribuio gratuita de ingressos para o teatro, sendo dois para pessoas do sexo feminino e um para pessoas do sexo masculino. Se observarmos essas afirmativas pode concluir que: Na primeira, todas as pessoas recebem a cesta bsica, o que equivaleria a um comando seqencial. Na segunda, s recebem as cestas bsicas as famlias com pelo menos quatro integrantes. Na terceira, dependendo do sexo, recebe-se um ou dois ingressos.

FAAr Faculdades Associadas de Ariquemes

Assim, podemos avaliar a importncia do teste nas duas ltimas afirmativas, pois aes diferentes so executadas de acordo com o resultado. Vejamos alguns exemplos: Imaginemos que algumas pessoas no gostem de chupar bala de Morango, neste caso o algoritmo para chupar uma bala seria: CHUPAR UMA BALA Pegar a bala A bala de morango? o o Se sim, no chupe a bala Se no, continue com o algoritmo

Retirar o papel Chupar a bala Jogar o papel no lixo

Agora veremos como fica o Algoritmo CHUPAR BALA utilizando diagrama de blocos

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

35

Chupar Bala

FAAr Faculdades Associadas de Ariquemes

Outro exemplo do nosso dia-a-dia: Imagine-se diante de um caixa eletrnico e suponha que sua senha seja 1234.

Na tela aparece a mensagem: O cursor ( | ) fica piscando: Voc digita os algarismos da sua senha Neste momento, a Unidade Aritmtica e Lgica (um dos componentes da CPU) verifica se os nmeros que voc digitou so iguais a 1234. Caso tenha sido, aparece na tela a mensagem: VLIDA; mas se voc digitou algo diferente, aparece na tela a mensagem: INVLIDA.

Digite sua Senha: | 1234 VLIDA 1233 INVLIDA

Conceito: uma estrutura de controle de fluxo, executando um ou vrios comandos se a condio testada for verdadeira e, em alguns casos, executando um ou vrios comandos se for falsa.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Sintaxes 8.1.1 Seleo Simples

36

if (condio) { comando ; ou < seqncia de comandos separados por ; > }

A sintaxe acima representa afirmativa B, pois se a famlia tiver, no mnimo, quatro componentes, recebe a cesta bsica; mas se a famlia tiver menos que quatro componentes no recebem nada.

8.1.2 Seleo Composta

FAAr Faculdades Associadas de Ariquemes

if (condio) { comando ; ou < seqncia de comandos separados por ; > } else { comando ; ou < seqncia de comandos separados por ; > }
A sintaxe acima representa afirmativa C onde, dependendo do sexo, recebe-se um ou dois convites. Observaes Podemos constatar que esta estrutura faz parte do nosso cotidiano: o o o Se eu no tiver prova, vou festa; seno vou estudar. Se eu tiver aumento, troco de carro; seno espero o 13 Salrio. Se minha mdia for maior ou igual a sete, passo direto; seno vou prova final.

A nica coisa diferente a forma como iremos escrev-la, pois as chaves { e } so obrigatrias uma vez que delimitam os comandos que pertencem a cada bloco, assim como os parnteses ( e ) que delimitam a condio. Essa uma estrutura muito importante em algoritmos porque nos d a possibilidade de verificar o que foi digitado pelo usurio ou qual o contedo de uma varivel aps um processamento etc.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


8.1.3 Analisando cada linha do IF 1 linha: if (condio) Condio

37

A condio uma expresso lgica testa pela Unidade Aritmtica e Lgica, devolvendo como resposta: verdadeiro ou falso.

Convm aqui recordar os operadores relacionais e os operadores lgicos:

Operadores Relacionais Igual Diferente Maior Menor que Maior ou Igual a Menor ou Igual a

Usaremos

Operadores Lgicos Conjuno (e) Disjuno (ou) Negao (no) && || !

== != > < >= <=

FAAr Faculdades Associadas de Ariquemes

a) A condio pode ser uma simples expresso relacional formada de dois operandos do mesmo tipo e de um operador relacional ( >, <, >=, <=, == e !=). A>B A < 12 resp != S resp == BRASIL l-se: o contedo da varivel A maior que o contedo da varivel B? l-se: o contedo da varivel A menor do que 12? l-se: o contedo da varivel resp diferente da letra S. l-se: o contedo da varivel resp igual a BRASIL?

b) A condio pode ser uma expresso lgica formada de pelo menos duas expresses relacionais que precisaro ser unidas por um dos operadores lgicos (&& ou ||) A >= 1 && A < 9 menor que 0? resp == S || resp == s l-se: o contedo da varivel A maior ou igual a 1 e l-se: o contudo da varivel resp igual a S ou igual a s?

Voc deve estar perguntado: e os parnteses, no so necessrios? No, porque as operaes aritmticas tm maior prioridade, depois as relacionas e por ltimo as lgicas, mas, cuidado, nem todas as linguagens agem dessa maneira. Voc dever ter uma ateno especial quando unir vrios operadores lgicos para fazer seus testes. Veremos isso mais adiante. 2 linha: { Indica o incio do bloco caso a condio testada seja verdadeira.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


3 linha: comando ; ou <seqncia de comandos separados por ; >

38

Nesta parte, so relacionados os comandos que sero executados caso a condio seja verdadeira. 4 linha: } Indica o fim do bloco caso a condio testada seja verdadeira.

5 linha: else Este comando faz parte da estrutura do se e s dever ser usado quando pelo menos uma ao tiver de ser executada se a condio testada for falsa. 6 linha: { Indica o incio do bloco caso a condio testada seja falsa.

7 linha: comando ; ou <seqncia de comandos separados por ; > Nesta parte, so relacionados os comandos que sero executados caso a condio seja falsa. 3 linha: } Indica o fim do bloco caso a condio testada seja falsa.

FAAr Faculdades Associadas de Ariquemes

8.1.4 A execuo do comando IF 1. Primeiro, a condio avaliada pela Unidade Aritmtica e Lgica sendo a condio uma expresso que possa retornar um valor lgico (verdadeiro ou falso). 2. Se o valor retornado for verdadeiro, todos os comandos que se encontram entre o primeiro par de chaves sero executados; aps a execuo dos comandos, o fluxo do algoritmo passa para o primeiro comando depois do fechamento do bloco else, representado pelo smbolo } (se existir; caso contrrio, ser executado o primeiro comando depois de } do prprio bloco. 3. Se o valor retornado for falso, todos os comandos que se encontram entre o primeiro par de chaves sero ignorados e, se existir o comando else, sero executados os comandos que se encontrarem entre o segundo par de chaves; caso contrrio, nada acontecer e o fluxo do algoritmo seguir para o prximo comando.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


8.1.5 Alguns exemplos Ler um nmero e se ele for maior do que 20, ento imprimir a metade do nmero. Algoritmo 10

39

using System; class Program { static void Main(string[] args) { double numero = 0; Console.Write("Digite um nmero: "); numero = double.Parse(Console.ReadLine()); if (numero > 20) { Console.WriteLine("Metade: {0}", numero/2); } } }
Vdeo:

FAAr Faculdades Associadas de Ariquemes

Digite um nmero: 40 Metade: 20.0


Algoritmo 11

using System; class Program { static void Main(string[] args) { double numero = 0; Console.Write("Digite um nmero: "); numero = double.Parse(Console.ReadLine()); if (numero % 2 == 0) { Console.WriteLine("PAR"); } else { Console.WriteLine("IMPAR"); } } }

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Vdeo:

40

Digite um nmero: 24 PAR Digite um nmero: 25 IMPAR

8.2 IFs aninhados (encaixados)


Muitas vezes, em algumas aplicaes, sentiremos a necessidade de tomar outras decises dentro de uma das alternativas da estrutura do if; a isso chamamos de ifs aninhados. Vejamos um exemplo clssico de algoritmos: Algoritmo 12 Armazene e imprima na varivel max o maior nmero entre 3 informados.

FAAr Faculdades Associadas de Ariquemes

using System; class Program { static void Main(string[] args) { double a, b, c, max = 0; Console.Write("Digite primeiro nmero: "); a = double.Parse(Console.ReadLine()); Console.Write("Digite segundo nmero: "); b = double.Parse(Console.ReadLine()); Console.Write("Digite terceiro nmero: "); c = double.Parse(Console.ReadLine()); if ( a > b) { if (a > c) { max = a; } else { max = c; } } else { if (b > c) { max = b; } else { max = c; } } Console.WriteLine("O maior nmero : {0}", max); } }

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

41

Vdeo:

Digite primeiro nmero: 7 Digite segundo nmero: 9 Digite terceiro nmero: 3 O maior nmero : 9 Digite primeiro nmero: 4 Digite segundo nmero: 2 Digite terceiro nmero: 6 O maior nmero : 6

Algoritmo 13 Ler um nmero e imprimir se ele positivo, negativo ou nulo

FAAr Faculdades Associadas de Ariquemes

using System; class Program { static void Main(string[] args) { double num = 0; Console.Write("Digite um nmero: "); num = double.Parse(Console.ReadLine()); if ( num > 0) { Console.WriteLine("POSITIVO"); } else { if (num < 0) { Console.WriteLine("NEGATIVO"); } else { Console.WriteLine("NULO"); } } } }

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Vdeo:

42

Digite um nmero: -5 NEGATIVO Digite um nmero: 4 POSITIVO Digite um nmero: 0 NULO


Voc deve estar fazendo algumas perguntas: 1. Porque no se perguntou se o nmero era igual a zero? Resposta: Quando temos a possibilidade de trs respostas, s precisamos fazer duas perguntas, pois a segunda pergunta nos d as duas ltimas respostas. Veja bem: se descartarmos a possibilidade de o nmero ser maior do que 0, ficamos com duas possibilidades: o nmero ser igual 0 ou menor do que 0; dessa forma, uma pergunta satisfatria. 2. Mas se eu fizer estarei errado(a)? Resposta: No, mas no necessrio, e lembre-se de uma coisa em algoritmos existem muitas maneiras de resolver o mesmo problema! Cada pessoa tem a sua prpria lgica. 3. Por que a soluo no poderia ser como a seguir?

FAAr Faculdades Associadas de Ariquemes

using System; class Program { static void Main(string[] args) { double num = 0; Console.Write("Digite um nmero: "); num = double.Parse(Console.ReadLine()); if (num > 0) { Console.WriteLine("POSITIVO"); } if (num < 0) { Console.WriteLine("NEGATIVO"); } if (num == 0) { Console.WriteLine("NULO"); } } }
Resposta: Esta soluo, embora voc consiga atingir os objetivos do algoritmo, apresenta um grande inconveniente: sempre sero executados trs testes, mesmo quando j tivermos classificado o nmero. Entretanto, na 1 soluo, outro texto s ser executado se ainda no tivermos chegado a uma concluso sobre o nmero. Essa estrutura precisa de vrios ciclos para ser executada; portanto, evite us-la desnecessariamente.

8.3 Lista de Exerccios


Os exerccios seguem em anexo a apostila.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

43

9 Alternativa de Mltiplas Escolhas


uma alternativa para os ses aninhados, deixando o algoritmo com uma estrutura melhor. A estrutura de deciso de mltiplas escolhas utilizada para testar, na condio, uma nica expresso, que produz um resultado, ou, ento, o valor de uma varivel, em que est armazenado um determinado contedo. Compara-se, ento, o resultado obtido no teste com os valores fornecidos em cada clusula caso. Sintaxe:

FAAr Faculdades Associadas de Ariquemes

switch (expresso) { case < rtulo 1 >: comando1; break; case < rtulo 2 >: comando1; comando2; break; case < rtulo n >: comando1; comandoN; break; default: comando1; break; }
Consideraes: 1. A expresso avaliada e o valor ser comparado com um dos rtulos. 2. A opo default opcional. 3. O rtulo ser aqui definido com uma constante caracter ou uma constante numrica inteira, pode ser usada constante caracter com mais de um caracter. 4. A estrutura muito usada em algoritmos com menus, tornando-os mais claros do que quando usamos if aninhados. Algoritmo 14 Escrever um algoritmo que leia um peso na Terra e o nmero de um planeta e imprima o valor do seu peso neste planeta. A relao de planetas dada a seguir juntamente com o valor das gravidades relativas Terra: # 1 2 gravidade relativa 0,37 0,88 planeta Mercrio Vnus

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


3 4 5 6 0,38 2,64 1,15 1,17 Marte Jpiter Saturno Urano

44

Para calcular o peso no planeta use a frmula: Pplaneta * Pterra * gravidade 10


using System; class Program { static void Main(string[] args) { int op = 0; double pterra = 0; Console.WriteLine("Planetas que podem ser analisados: "); Console.WriteLine("1 Mercrio"); Console.WriteLine("2 Vnus"); Console.WriteLine("3 Marte"); Console.WriteLine("4 Jpiter"); Console.WriteLine("5 Saturno"); Console.WriteLine("6 Urano"); Console.Write("Escolha o planeta a ser analisado: "); op = int.Parse(Console.ReadLine()); Console.Write("Entre com o peso na Terra: "); pterra = double.Parse(Console.ReadLine()); switch (op) { case 1: Console.WriteLine("Peso em Mercrio : {0:0.00}", (pterra / 10) * 0.37); break; case 2: Console.WriteLine("Peso em Vnus : {0:0.00}", (pterra / 10) * 0.88); break; case 3: Console.WriteLine("Peso em Marte : {0:0.00}", (pterra / 10) * 0.38); break; case 4: Console.WriteLine("Peso em Jpiter : {0:0.00}", (pterra / 10) * 2.64); break; case 5: Console.WriteLine("Peso em Saturno : {0:0.00}", (pterra / 10) * 1.15); break; case 6: Console.WriteLine("Peso em Urano : {0:0.00}", (pterra / 10) * 1.17); break; default: Console.WriteLine("Este planeta no pode ser analisado"); break; } } }

FAAr Faculdades Associadas de Ariquemes

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Vdeo:

45

Planetas que podem ser analisados: 1 Mercrio 2 Vnus 3 Marte 4 Jpiter 5 Saturno 6 Urano Escolha o planeta a ser analisado: 5 Entre com o peso na Terra: 71 Peso em Saturno : 8.165
No exemplo do diagrama de blocos abaixo, recebido uma varivel Op e testado seu contedo, caso uma das condies seja satisfeita, atribudo para a varivel titulo a string Opo X, caso contrrio atribudo a string Opo Errada.

FAAr Faculdades Associadas de Ariquemes

9.1 Lista de Exerccios


Os exerccios seguem em anexo a apostila.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

46

10 Estruturas de repetio: for, while e do-while


10.1 Estrutura do for
Usada quando o nmero de repeties for conhecido durante a elaborao do algoritmo ou quando puder ser fornecido durante a execuo. Exemplo: Criar um algoritmo que possa entrar com o a nota de 20 alunos e imprimir a mdia da turma.

Smbolo

Funo
Permite o desvio para um ponto qualquer do programa.

Desvio

Exemplo:

FAAr Faculdades Associadas de Ariquemes

O teste da condio ser sempre realizado antes de qualquer operao. Enquanto a condio for verdadeira o processo se repete

Sintaxe

for ( valor inicial ; <condio> ; <valor do incremento> ) { Bloco de comandos; }

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Vamos analisar esta sintaxe: < valor inicial >; uma expresso do tipo:

47

<identificador = <valor inicial>;


Exemplos: a = 0; c = 100; x = a.Length -1; da varivel a menos 1. A varivel a recebe o valor inicial 0. A varivel c recebe o valor inicial 100. A varivel x recebe o valor inicial que igual ao nmero de caracteres

< condio >; uma expresso do tipo:

< identificador > <=, <, > ou >= <valor final >;
Exemplos: a <= 10; c >= 2; x >= 0; A varivel a poder receber valores enquanto forem menor ou igual a 10. A varivel c poder receber valores enquanto forem maiores ou iguais a 2. A varivel x poder receber valores enquanto forem maiores ou iguais a 0.

FAAr Faculdades Associadas de Ariquemes

< valor do incremento > uma expresso do tipo:

< identificador > = < identificador > + ou valor


Exemplos: a = a + 1; c = c 2; x = x 1; A varivel a incrementada de 1 (contador). A varivel c decrementada de 2. A varivel x decrementada de 1.

J vimos que os operadores ++ e - so equivalentes aos comandos de atribuio quando a varivel incrementada ou decrementada de 1; por isso, o primeiro e o terceiro exemplos poderiam ser escritos assim: a ++; x --; Observaes a. O identificador tem de ser do tipo int. b. Os valores iniciais e finais podero ser constantes numricas inteiras, funes que retornem nmeros inteiros ou expresses que retornem nmeros inteiros. c. O valor que incrementado ou decrementado da varivel poder ser constante ou outra varivel. A varivel a incrementada em 1. A varivel x decrementada de 1.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

48

d. O nmero de repeties do bloco de comandos ser igual ao nmero de termos da srie, portanto, na maioria das vezes, no importam os valores que a varivel que controla a repetio assumir. e. A varivel que controla a repetio dever ser declarada e poder ser impressa se precisarmos dela pra numerar uma lista, posicionar etc. f. A varivel que controla a repetio jamais aparecer num comando de leitura dentro do bloco de repetio.

Algoritmo 15 Criar um algoritmo que entre com cinco nmeros e imprimir o quadrado de cada nmero.

FAAr Faculdades Associadas de Ariquemes

using System; class Program { static void Main(string[] args) { int c = 0; int num = 0; for (c = 1; c <= 5; c++) { Console.Write("Digite o {0} nmero: ", c); num = int.Parse(Console.ReadLine()); Console.WriteLine("quadrado: {0}", num * num); } } }

Vdeo:

Digite 4 Digite 16 Digite 25 Digite 64 Digite 144


Vamos explicar:

o 1 nmero: 2 o 2 nmero: 4 o 3 nmero: 5 o 4 nmero: 8 o 5 nmero: 12

1. Aps serem reservadas posies na Memria Principal para as variveis c e num, executado o comando for. 2. O primeiro argumento c = 1 s executado uma vez antes do loop.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


3. Os comandos Write, ReadLine e WriteLine so executados pela primeira vez. 4. Aps }, o comando c++ executado.

49

5. O comando c = 5 executado e enquanto a varivel c estiver armazenado um valor menor ou igual a 5, o bloco se repete; mas, quando o valor ultrapassar 5, como no exemplo 6, o fluxo do algoritmo passa para o primeiro comando aps }. Algoritmo 16 Criar um algoritmo que imprima todos os nmeros pares no intervalo 1-10

using System; class Program { static void Main(string[] args) { int c = 0; for (c = 2; c <= 10; c = c + 2) { Console.WriteLine(c); } } }

FAAr Faculdades Associadas de Ariquemes

Vdeo:

2 4 6 8 10
Vamos explicar: 1. Aps ser reservada uma posio na Memria Principal para a varivel c, o comando for executado. 2. O primeiro argumento c = 2 s executado uma vez antes do loop. 3. O comando Console.WriteLine(c); executado pela primeira vez. 4. Aps }, o comando c = c + 2 executado. 5. O comando c <= 10 executado e enquanto a varivel c estiver armazenando um valor menor ou igual a 10, o bloco se repete; mas, quando o valor ultrapassar 10, o fluxo do algoritmo passa para o primeiro comando aps }. 6. Nenhuma srie tem entrada de dados no bloco de repetio.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


10.2 for dentro de for

50

Imagine voc dando uma volta na Lagoa Rodrigo de Freitas (Rio de Janeiro): passa uma vez pelo Corte do Cantagalo, uma vez pelo Clube do Flamengo, uma vez pelo Clube Piraqu, uma vez pelos fundos do Clube Militar; esse trajeto representa seus algoritmos feitos at agora com os comandos aprendidos. Imagine que seu preparo fsico melhorou e agora voc consegue dar trs ou cinco voltas ou, quem sabe, at dez voltas na Lagoa; isso significa que voc passara dez vezes pelos mesmos lugares. Esse exemplo representa a estrutura do Para. Imagine agora que voc, orientado por um profissional especializado passou a dar trs voltas na Lagoa, mas, em frente ao Clube do Flamengo, voc far cinco abdominais. Se, em cada volta voc faz cinco abdominais, ao final, voc ter feito 15 abdominais e ter dado trs voltas na Lagoa. Isso representa um Para dentro de um PARA. Acompanhe: voltaLagoa 1 1 2 3 4 5
6

abdominais 1 volta na Lagoa 1 abdominal 2 abdominal 3 abdominal 4 abdominal 5 abdominal Quando ia contar o 6 abdominal, PAROU e voltou a correr 2 volta na Lagoa 1 abdominal 2 abdominal 3 abdominal 4 abdominal 5 abdominal Quando ia contar o 6 abdominal, PAROU e voltou a correr 3 volta na Lagoa 1 abdominal 2 abdominal 3 abdominal 4 abdominal 5 abdominal Quando ia contar o 6 abdominal, PAROU e voltou a correr Quando ia contar a 4 volta, PAROU e foi para casa

FAAr Faculdades Associadas de Ariquemes

2 1 2 3 4 5 6 3 1 2 3 4 5 6 6

3 4

Vejamos como poderamos representar em algoritmo: Algoritmo 17

using System; class Program { static void Main(string[] args) {

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


int voltaLagoa = 0; int abdominais = 0; for (voltaLagoa = 1; voltaLagoa <= 3; voltaLagoa++) { Console.WriteLine("{0} volta na Lagoa", voltaLagoa); for (abdominais = 1; abdominais <= 5; abdominais++) { Console.WriteLine("{0} abdominal", abdominais); } } } }
Vdeo:

51

FAAr Faculdades Associadas de Ariquemes

1 1 2 3 4 5 2 1 2 3 4 5 3 1 2 3 4 5

volta na Lagoa abdominal abdominal abdominal abdominal abdominal volta na Lagoa abdominal abdominal abdominal abdominal abdominal volta na Lagoa abdominal abdominal abdominal abdominal abdominal

Voc pode observar que, cada vez que chegava em frente ao Clube do Flamengo, comeava a conta a partir do 1 seus abdominais e s parava quando sua prxima contagem fosse 6.

10.3 Lista de Exerccios


Os exerccios seguem em anexo a apostila.

10.4 Estrutura do while


Estrutura recomendada quando o nmero de repeties for desconhecido, sendo necessria uma chave (um teste) para interromper a repetio. uma estrutura que testa a condio no incio, e s repete se a condio for verdadeira.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Chave, teste ou flag. O que isto?

52

Sendo redundante, para sermos bem claros, toda estrutura de repetio repete um conjunto de comandos vrias vezes. A estrutura do for tem uma varivel para controlar o nmero de repeties, mas a estrutura do while no agrega nenhuma varivel contadora e, desta forma, a repetio no pararia nunca ( quando dizemos: entrou em loop). Para impedir que isto acontea, montada uma expresso condicional, igual que voc utilizou na estrutura do if, para interromper a repetio. Um nmero, um caractere ou uma palavra dever ser utilizado na expresso e passado para o usurio para que ele possa digitar quando desejar parar. Simula, com facilidade, a estrutura do do while desde que usemos um comando de atribuio e a estrutura do for desde que criemos uma varivel que ter seu valor incrementado dentro da estrutura de repetio. a mais poderosa estrutura de repetio. A varivel ou variveis do teste devero ter seu valor atribudo atravs de um comando de leitura ou de atribuio, antes da estrutura, e dentro da estrutura, na maioria das vezes, como ltimo comando antes do }. Sintaxe:

while (condio) { < bloco de comando > }


Nos exemplos a seguir, mostraremos a importncia da chave e da inicializao da varivel que faz parte da expresso que controla a repetio. Algoritmo 18

FAAr Faculdades Associadas de Ariquemes

using System; class Program { static void Main(string[] args) { int num; while (num > 0) { Console.Write("Digite um nmero: "); num = int.Parse(Console.ReadLine()); Console.WriteLine("Dobro do Nmero: {0}", num * 2); } } }
Vdeo:

Fail: Use of unassigned local variable 'num'


Explicando: A primeira tendncia quando aprendemos a estrutura do while tentar montar o corpo da repetio da mesma forma que fazamos com o for.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

53

Mas tendo em vista que assumiremos que as variveis no so inicializadas automaticamente, teremos problema com a estrutura do while. Como fazer um teste com uma varivel que no tem nenhum valor? Algoritmo 19

using System; class Program { static void Main(string[] args) { int num; Console.Write("Digite um nmero: "); num = int.Parse(Console.ReadLine()); while (num > 0) { Console.WriteLine("Dobro do Nmero: {0}", num * 2); } } }

FAAr Faculdades Associadas de Ariquemes

Vdeo:

Digite um nmero: 8 Dobro do Nmero: 16 Dobro do Nmero: 16 Dobro do Nmero: 16 Dobro do Nmero: 16 Dobro do Nmero: 16 Dobro do Nmero: 16 Dobro do Nmero: 16 Dobro do Nmero: 16 Dobro do Nmero: 16 Dobro do Nmero: 16 ... Observao: O algoritmo entra em loop

Explicando: Tendo em vista que nossa experincia anterior falhou, nossa segunda tendncia deslocar a leitura para fora da estrutura. Mas, desta vez, teremos outro problema: o algoritmo entra em loop, pois nunca mais atribumos valor varivel num. preciso interromper pressionando < ctrl >+< c >.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Algoritmo 20

54

using System; class Program { static void Main(string[] args) { int num; Console.Write("Digite um nmero: "); num = int.Parse(Console.ReadLine()); while (num > 0) { Console.WriteLine("Dobro do Nmero: {0}", num * 2); Console.Write("Digite um nmero: "); num = int.Parse(Console.ReadLine()); } } }
Vdeo:

FAAr Faculdades Associadas de Ariquemes

Digite um nmero: 8 Dobro do nmero: 16 Digite um nmero: 45 Dobro do nmero: 90 Digite um nmero: 0

Explicando: Depois de vrias tentativas, percebemos que precisaramos de um comando de leitura para poder entrar na estrutura do while e um para poder sair.

LEMA: Um comando ReadLine() ( ou de atribuio ) antes do while para entrar na repetio e um comando ReadLine() ( ou de atribuio ) antes do }, para sair da repetio.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Algoritmo 21

55

using System; class Program { static void Main(string[] args) { int a; a = 1; while ( a <= 5 ) { Console.WriteLine(a); a++; } } }
Vdeo:

FAAr Faculdades Associadas de Ariquemes

1 2 3 4 5

10.5 Estrutura do ... while


Estrutura recomendada quando o nmero de repeties for desconhecido, sendo necessria uma chave (um teste) para interromper a repetio. Sua diferena em relao ao while que ela testa ao final, significando que ela executa o trecho pelo menos uma vez. Essa estrutura tambm precisa de uma chave para interromper a repetio. Muitas pessoas no entendem por que existe essa estrutura se a estrutura do while pode fazer o que ela faz. Na verdade, tem muito programador que nem faz uso dela e, quando faz, em programas que usam menus:

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

56

Exemplo:

Neste caso primeiro so executados os comandos, e somente depois realizado o teste da condio.

Sintaxe:

FAAr Faculdades Associadas de Ariquemes

do { < bloco de comandos > } while(condio);


Algoritmo 22

using System; class Program { static void Main(string[] args) { int a; a = 1; do { Console.WriteLine(a); a++; } while (a <= 5); } }

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

57

Vdeo:

1 2 3 4 5

Agora veremos com criar um algoritmo que funcione atravs do menu a seguir: Algoritmo 23
using System; class Program { static void Main(string[] args) { string op, menor, p1, p2, p3, np = ""; int n = 0; double num = 0; do { Console.Clear(); Console.WriteLine("MENU um pouco de tudo"); Console.WriteLine("A Armazena na varivel menor e imprime o nome que tiver o menor nmero de caracteres entre trs"); Console.WriteLine("B Gera e imprime uma nova palavra"); Console.WriteLine("C Calcula e imprime o dobro de um nmero"); Console.WriteLine("F - Finalizar"); Console.Write("OPO: "); op = Console.ReadLine(); if (op == "A" || op == "a") { Console.Write("Digite 1 palavra: "); p1 = Console.ReadLine(); Console.Write("Digite 2 palavra: "); p2 = Console.ReadLine(); Console.Write("Digite 3 palavra: "); p3 = Console.ReadLine(); if (p1.Length < p2.Length) menor = p1; else menor = p2; if (p3.Length < menor.Length) menor = p3; Console.WriteLine(menor); } else { if (op == "B" || op == "b") { Console.Write("Digite uma palavra: ");

FAAr Faculdades Associadas de Ariquemes

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


p1 = Console.ReadLine(); if (p1.Length > 5) { n = p1.Length - 1; p2 = p1.Substring(0, 1); p3 = p1.Substring(1, n); np = p3 + p2; Console.WriteLine(np); } else Console.WriteLine("UUU" + p1 + "UUU"); } else { if (op == "C" || op == "c") { Console.Write("Digite um nmero: "); num = double.Parse(Console.ReadLine()); if (num > 0) Console.WriteLine("Dobro do nmero: {0}", num * 2); else Console.WriteLine("NoPode!"); } else { if (op == "F" || op == "f") Console.WriteLine("Programa Finalizado"); else Console.WriteLine("Opo Invalida!"); } } } Console.ReadLine(); } while (op != "F" && op != "f"); } }

58

FAAr Faculdades Associadas de Ariquemes

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Vdeo:

59

MENU um pouco de tudo A Armazena na varivel menor e imprime o nome que tiver o menor nmero de caracteres entre trs B Gera e imprime uma nova palavra C Calcula e imprime o dobro de um nmero F Finaliza OPO: A Digite 1 palavra: Cleyton Digite 2 palavra: Miely Digite 3 palavra: Ferrari Miely MENU um pouco de tudo A Armazena na varivel menor e imprime o nome que tiver o menor nmero de caracteres entre trs B Gera e imprime uma nova palavra C Calcula e imprime o dobro de um nmero F Finaliza OPO: F Programa Finalizado

FAAr Faculdades Associadas de Ariquemes

Dicas: 1. No use enquanto no lugar do para, s se no tiver alternativa. 2. Na dvida entre enquanto e faca ... enquanto, use enquanto. 3. Para simular a estrutura do faca ... enquanto, usando a estrutura do enquanto, basta inicializar a varivel da condio com qualquer valor vlido.

10.6 Lista de Exerccios


Os exerccios seguem em anexo a apostila.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

60

11 Estruturas homogneas: Vetores e Matrizes


11.1 Conceitos Gerais
Apesar de voc ter feito uso das estruturas de repetio que lhe permitiram a entrada vrios dados, ainda no foi possvel o armazenamento de todos esses dados, de uma vez s, ou no, pois lhe faltava conhecer a estrutura do vetor. Um vetor um arranjo de elementos armazenados na Memria Principal, um aps o outro, todos com o mesmo nome. A idia a mesma de uma matriz linha da matemticas, isto , vrias colunas e uma linha. Assumiremos que a primeira posio do vetor 0 (zero).

2 0 A[ 2

4 1 4

5 2 5

8 3 8

12 4 12

3 5 3

56 6 56

34 7 34 ]

FAAr Faculdades Associadas de Ariquemes

Esse um vetor de 8 elementos, isto , tem 8 variveis, todas com o mesmo nome e diferentes por sua posio dentro do arranjo que indicada por um ndice. Quando se tem somente uma linha, podemos omiti-la e colocar somente a coluna.

A0=2 A1=4 A2=5 A3=8 A4=12 A5=3 A6=56 A7=34


Em algoritmos, representamos da seguinte forma:

A[0]=2 A[1]=4 A[2]=5 A[3]=8 A[4]=12 A[5]=3 A[6]=56 A[7]=34


Para dimensionar um vetor, usamos o seguinte comando na declarao de variveis:

tipo[] nome = new tipo[ dimenso ]

Onde dimenso, na prtica, o nmero de elementos:

[5] 5 elementos ( de 0 a 4 )

tipo
nome

Poder ser: int, double ou string Ser o que voc dar ao vetor dentro das regras para nomear uma varivel

No exemplo acima seria:

int[] numero = new int[5]

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

61

Um algoritmo com vetor implica vrios trechos para que possa funcionar corretamente. Esses trechos so independentes. TRECHOS DE DIMENSIONAMENTO j visto anteriormente. TRECHO DE ENTRADA DE DADOS o o o Normalmente, uma estrutura de repetio. Se for a estrutura do for, dever ter o valor final igual ltima posio do vetor -1. Se for a estrutura do while ou do while, dever ter uma varivel que ser incrementada e nunca poder assumir um valor igual ou maior do que a ltima posio do vetor.

for (L = 0; L <= < tamanho vetor - 1 >; L++) { Console.Write("Digite o {0} nome: ", L+1); nomes[L] = Console.ReadLine(); }
o o o O trecho anterior poder ser incrementado com outros comandos; Nunca dever ter um comando Write ou WriteLine tendo como argumento o nomedovetor [L]. Poder ter: estrutura de seleo, atribuio, outro for etc.

TRECHO DE SADA o o o Normalmente, uma estrutura de repetio. Se for a estrutura do for, dever ter o valor final igual penltima posio do vetor. Se for a estrutura do while ou do while, dever ter uma varivel que ser incrementada e nunca poder assumir um valor igual ou maior do que a ltima posio do vetor.

FAAr Faculdades Associadas de Ariquemes

for (L = 0; L <= < tamanho vetor - 1 >; L++) { Console.WriteLine(nomes[L]); }


o o O trecho acima poder ser incrementado de outro comandos; Poder ter: estrutura de seleo, atribuio, outro for etc.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Algoritmo 24

62

Criar um algoritmo que entre com cinco nomes e imprima uma listagem contendo todos os nomes.

FAAr Faculdades Associadas de Ariquemes

using System; class Program { static void Main(string[] args) { int L = 0; string[] nomes = new string[5]; //trecho de entrada for (L = 0; L <= 4; L++) { Console.Write("Digite o {0} nome: ", L+1); nomes[L] = Console.ReadLine(); } //fim do trecho de entrada //trecho de sada for (L = 0; L <= 4; L++) { Console.WriteLine(nomes[L]); } //fim do trecho de sada } }
Vdeo:

Digite o Digite o Digite o Digite o Digite o Cleyton Miely Anderson Luciana Juliana

1 2 3 4 5

nome: nome: nome: nome: nome:

Cleyton Miely Anderson Luciana Juliana

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

63

Algoritmo 25 Criar um algoritmo que armazene nome e duas notas de 5 alunos e imprima uma listagem contendo nome, as duas notas e a mdia de cada aluno.

FAAr Faculdades Associadas de Ariquemes

using System; class Program { static void Main(string[] args) { int L = 0; string[] nomes = new string[5]; double[] pr1 = new double[5]; double[] pr2 = new double[5]; double[] media = new double[5]; //trecho de entrada for (L = 0; L <= nomes.Length - 1; L++) { Console.Write("Digite o {0} nome: ", L + 1); nomes[L] = Console.ReadLine(); Console.Write(">>Digite a 1 nota: "); pr1[L] = double.Parse(Console.ReadLine()); Console.Write(">>Digite a 2 nota: "); pr2[L] = double.Parse(Console.ReadLine()); media[L] = (pr1[L] + pr2[L]) / 2; } //fim do trecho de entrada //trecho de sada for (L = 0; L <= nomes.Length - 1; L++) { Console.WriteLine("{0} - {1}", L + 1, nomes[L]); Console.WriteLine("{0:0.00} - {1:0.00} - Mdia: {2:0.00}", pr1[L], pr2[L], media[L]); } //fim do trecho de sada } }

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Vdeo:

64

FAAr Faculdades Associadas de Ariquemes

Digite o 1 nome: Cleyton >>Digite a 1 nota: 9.0 >>Digite a 2 nota: 10.0 Digite o 2 nome: Miely >>Digite a 1 nota: 7.0 >>Digite a 2 nota: 8.0 Digite o 3 nome: Anderson >>Digite a 1 nota: 8.0 >>Digite a 2 nota: 9.0 Digite o 4 nome: Juliana >>Digite a 1 nota: 7.5 >>Digite a 2 nota: 8.5 Digite o 5 nome: Neto >>Digite a 1 nota: 9.0 >>Digite a 2 nota: 8.0 1 - Cleyton 9.0 10.0 - Mdia: 9.5 2 - Miely 7.0 8.0 - Mdia: 7.5 3 - Anderson 8.0 9.0 - Mdia: 8.5 4 - Juliana 7.5 8.5 - Mdia: 8.0 5 - Neto 9.0 8.0 - Mdia: 8.5

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


11.2 Ordenando Vetores

65

Compare o elemento que est na 1 posio com todos os seguintes a ele. Quando for necessrio, troque-o de lugar, fazendo uso da varivel aux. Repita essa operao at que tenha feito todas as comparaes.

1 Fase 1 passo: Se o nome da posio 0 na ordem alfabtica vier depois do nome na posio 1, ento inverta-os. Como isso no acontece tudo fica igual. ANTES NOMES 0 1 2 3 4 JOAO RUI IVO BIA ANA AUX 0 1 2 3 4 JOAO RUI IVO BIA ANA DEPOIS NOMES

FAAr Faculdades Associadas de Ariquemes

2 passo: Se o nome da posio 0 na ordem alfabtica vier depois do nome na posio 2, ento inverta-os. ANTES NOMES 0 1 2 3 4 JOAO RUI IVO BIA ANA AUX JOAO DEPOIS NOMES 0 1 2 3 4 IVO RUI JOAO BIA ANA

3 passo: Se o nome da posio 0 na ordem alfabtica vier depois do nome na posio 3, ento inverta-os. ANTES NOMES 0 1 2 3 4 IVO RUI JOAO BIA ANA AUX IVO DEPOIS NOMES 0 1 2 3 4 BIA RUI JOAO IVO ANA

4 passo: Se o nome da posio 0 na ordem alfabtica vier depois do nome na posio 4, ento inverta-os.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

66

ANTES NOMES 0 1 2 3 4 BIA RUI JOAO IVO ANA AUX BIA

DEPOIS NOMES 0 1 2 3 4 ANA RUI JOAO IVO BIA

Aps essas comparaes e trocas, conseguimos colocar na posio 0 o nome ANA. Partiremos para a busca do segundo nome da lista. No mais nos preocuparemos com a posio 0.

2 Fase 1 passo: Se o nome da posio 1 na ordem alfabtica vier depois do nome na posio 2, ento inverta-os. ANTES NOMES 0 1 2 3 4 ANA RUI JOAO IVO BIA AUX RUI DEPOIS NOMES 0 1 2 3 4 ANA JOAO RUI IVO BIA

FAAr Faculdades Associadas de Ariquemes

2 passo: Se o nome da posio 1 na ordem alfabtica vier depois do nome na posio 3, ento inverta-os. ANTES NOMES 0 1 2 3 4 ANA JOAO RUI IVO BIA AUX JOAO DEPOIS NOMES 0 1 2 3 4 ANA IVO RUI JOAO BIA

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

67

3 passo: Se o nome da posio 1 na ordem alfabtica vier depois do nome na posio 4, ento inverta-os. ANTES NOMES 0 1 2 3 4 ANA IVO RUI JOAO BIA AUX IVO DEPOIS NOMES 0 1 2 3 4 ANA BIA RUI JOAO IVO

Aps essas comparaes e trocas, conseguimos colocar na posio 1 o nome BIA. Partiremos para a busca do terceiro nome da lista. No mais nos preocuparemos com as posies 0 e 1.

3 Fase 1 passo: Se o nome da posio 2 na ordem alfabtica vier depois do nome na posio 3, ento inverta-os. ANTES NOMES 0 1 2 3 4 ANA BIA RUI JOAO IVO AUX RUI DEPOIS NOMES 0 1 2 3 4 ANA BIA JOAO RUI IVO

FAAr Faculdades Associadas de Ariquemes

2 passo: Se o nome da posio 2 na ordem alfabtica vier depois do nome na posio 4, ento inverta-os. ANTES NOMES 0 1 2 3 4 ANA BIA JOAO RUI IVO AUX JOAO DEPOIS NOMES 0 1 2 3 4 ANA BIA IVO RUI JOAO

Aps essas comparaes e trocas, conseguimos colocar na posio 2 o nome IVO. Partiremos para a busca do quarto nome da lista. No mais nos preocuparemos com as posies 0, 1 e 2.

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


4 Fase

68

1 passo: Se o nome da posio 3 na ordem alfabtica vier depois do nome na posio 4, ento inverta-os. ANTES NOMES 0 1 2 3 4 ANA BIA IVO RUI JOAO AUX RUI DEPOIS NOMES 0 1 2 3 4 ANA BIA IVO JOAO RUI

Concluses Apesar de termos cinco nomes s tiveram quatro fazes, pois quando comparamos o penltimo com o ltimo foi diminudo em cada fase. Isso se explica porque o nmero de combinao tambm estava diminudo, uma vez que diminua o nmero de nomes abaixo do que estava em evidncia. Vamos tentar montar o trecho de ordenao:

FAAr Faculdades Associadas de Ariquemes

1 Linha:

for ( L = 0; L <= 4; L++)

Por que de 0 at < 4? Porque as fases envolveram as buscas das posies 0, 1, 2 e 3. Inicia o bloco do para. Por que de L + 1 at <= 4? Porque, em cada fase, comparvamos a posio em evidncia com todas as outras posies at a ltima. Inicia o bloco do para. Pense no L como sendo a fase e, em c como sendo uma das etapas da fase.

2 Linha:

{
3 Linha:

for ( c = L + 1; c <= 4; c++)

4 Linha:

{
5 Linha: if ( string.CompareOrdinal(nomes[L], nomes[c]) > 0) 6 Linha:

{
7 Linha / 8 Linha / 9 Linha:

Inicia o bloco do se. Este trecho permite a troca entre as duas variveis.

aux = nomes[L]; nomes[L] = nomes[c]; nomes[c] = aux;

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores

69

10 Linha:

}
11 Linha:

Finaliza o bloco do se. Finaliza o bloco para. Finaliza o bloco do para.

}
12 Linha:

}
Programa de Ordenao

FAAr Faculdades Associadas de Ariquemes

using System; class Program { static void Main(string[] args) { int L = 0; int c = 0; string[] nomes = new string[5]; string aux = ""; //trecho de entrada for (L = 0; L <= nomes.Length - 1; L++) { Console.Write("Digite o {0} nome: ", L + 1); nomes[L] = Console.ReadLine(); } //fim do trecho de entrada //trecho de processamento/ORDENAO for ( L = 0; L <= 4; L++) { for ( c = L + 1; c <= 4; c++) { if ( string.CompareOrdinal(nomes[L], nomes[c]) > 0) { aux = nomes[L]; nomes[L] = nomes[c]; nomes[c] = aux; } } } //fim do trecho de processamento //trecho de sada for (L = 0; L <= nomes.Length - 1; L++) { Console.WriteLine("{0} - {1}", L + 1, nomes[L]); } //fim do trecho de sada } }

Prof. Cleyton Ferrari cleytonferrari@hotmail.com (69) 9975-0504

Algoritmo e Programao de Computadores


Algoritmo 26

70

Criar um algoritmo que armazene cinco nomes em um vetor e depois possa ser digitado um nmero que corresponde a uma pessoa imprimir esse nome.

FAAr Faculdades Associadas de Ariquemes

using System; class Program { static void Main(string[] args) { int L = 0; int num = 0; string[] nomes = new string[5]; for (L = 0; L <= nomes.Length - 1; L++) { Console.Write("Digite o {0} nome: ", L + 1); nomes[L] = Console.ReadLine(); } Console.Write("Digite o nmero da pessoa: "); num = int.Parse(Console.ReadLine()); while (num < 1 || num > 5) { Console.WriteLine("Nmero fora do intervalo"); Console.Write("Digite o nmero da pessoa: "); num = int.Parse(Console.ReadLine()); } Console.WriteLine("Nome: {0}", nomes[num - 1]); } }
Vdeo:

Digite o 1 nome: Cleyton Digite o 2 nome: Miely Digite o 3 nome: Amauri Digite o 4 nome: Renato Digite o 5 nome: Juliana Digite o nmero da pessoa: 9 Nmero fora do intervalo Digite o nmero da pessoa: 4 Nome: Renato

11.3 Lista de Exerccios


Os exerccios seguem em anexo a apostila.

Você também pode gostar