Você está na página 1de 79

DEPARTAMENTO DE INFORMTICA

ALGORITMOS e PROGRAMAO

otas de Aula
Prof . Beatriz Lux Prof. Joo Carlos Furtado
Reviso: Profa. Daniela Saccol Peranconi (2009/01)

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

1. I TRODUO
Imagine a seguinte situao: o gerente de uma pequena fbrica de parafusos necessita que seja realizada uma alterao nos preos dos produtos que a fbrica vende, em funo de novos valores adotados pelo Governo para imposto sobre circulao de mercadorias. As diversas mercadorias esto catalogadas com seus preos de produo e preos de venda em um fichrio e caber a um funcionrio novo e inexperiente fazer as alteraes. Para auxiliar o trabalho do funcionrio e garantir que o resultado seja correto, o gerente resolve passar-lhe as orientaes por escrito e elabora o seguinte roteiro: Instrues para clculo dos novos preos das mercadorias: 1- Pegue a ficha da mercadoria no fichrio; 2- Leia o preo de produo da mercadoria; 3- Considere o percentual de lucro igual a 0.80; 4- Calcule o preo de venda conforme a frmula: preo de venda = preo de produo x (1.15 + percentual de lucro); 5- Escreva na ficha o novo preo de venda. Qualquer pessoa que siga a seqncia de passos acima dever concluir a tarefa satisfatoriamente, bastando, para isso, que possua os seguintes conhecimentos prvios: 1- Saber onde est o fichrio com as fichas; 2- Saber ler e escrever; 3- Ser capaz de efetuar as operaes de soma e multiplicao com nmeros fracionrios. As instrues acima constituem um algoritmo que, em sntese, nada mais do que a descrio de um conjunto de passos ou aes que visam atingir um objetivo determinado.

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exemplo de um algoritmo cujo objetivo usar um telefone pblico: Incio 1. Tirar o fone do gancho; 2. Ouvir o sinal de linha; 3. Introduzir o carto; 4. Teclar o nmero desejado; 5. Se der o sinal de chamar 5.1 Conversar; 5.2 Desligar; 5.3 Retirar o carto; 6. Seno 6.1 Repetir; Fim. Uma definio completa e que salienta as caractersticas principais de um algoritmo a que segue: Um algoritmo uma seqncia finita de instrues, bem definidas e no ambguas, cada uma das quais podendo ser executada mecanicamente num perodo de tempo finito e com uma quantidade de esforo finito. Trata-se de uma seqncia finita de instrues: as informaes apresentam-se em uma ordem, uma aps a outra e so em nmero limitado; As instrues so bem definidas e no ambguas, ou seja, so claras, no permitindo variadas interpretaes; As instrues podem ser executadas mecanicamente, o que significa que no necessitamos de imaginao para execut-las;

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

A execuo das instrues encontra um trmino e despende uma quantidade determinada de esforo.

Como exerccio escreva um algoritmo que apresente os passos necessrios para trocar o pneu de um carro. Considere que esto disponveis no porta-malas um macaco, uma chave de roda e um pneu reserva em boas condies. Com o desenvolvimento de computadores cada vez mais rpidos e baratos e a possibilidade de passar para eles a resoluo de tarefas que possam ser resolvidas utilizando uma seqncia finita de instrues, evoluram grandemente as pesquisas em algoritmos e linguagens de programao. Para que o computador execute as tarefas necessrio que estejam descritas em uma linguagem apropriada (que possui suas prprias regras) e, tambm, que nossas instrues possuam uma lgica que, sem dvida nenhuma, leve ao resultado esperado. A Lgica surgiu na Grcia Antiga, numa poca em que era necessrio, com urgncia, colocar ordem no raciocnio humano. Naquela poca havia uma prtica chamada Sofismo, atravs da qual pessoas bem treinadas utilizavam o raciocnio para comprovar em juzo fatos que beneficiariam aos interesses de alguns, sem nenhum compromisso com a verdade. Para exemplificar, conta-se a histria que envolveu um conhecido sofista, Protgoras: Protgoras era um mestre na arte do sofismo e certa vez foi procurado por um jovem que queria receber um treinamento que o capacitasse a atuar como sofista. Foi aceito e assinou um contrato pelo qual pagaria durante as aulas metade do valor total do curso e o restante quando vencesse sua primeira causa. Passado um tempo aps o trmino das aulas, como o discpulo no se animasse a defender nenhuma causa, Protgoras encaminhou reclamao de pagamento Justia com o seguinte argumento: Se meu discpulo perder, paga-me por deciso da Corte, se ganhar, pagame por fora do contrato entre ns acertado. O discpulo, que havia se dedicado com afinco s aulas, argumentou em sua defesa: Se eu vencer, no pago, por deciso da Corte, mas se perder, no pago pelo estabelecido em nosso contrato. Com quem estaria a verdade? Para se contrapor a esta forma de conduzir o raciocnio e permitir a obteno de concluses verdadeiras, surgiu a Lgica, que pode ser resumidamente conceituada como a arte de pensar corretamente. Seu fundador e primeiro sintetizador foi o filsofo grego Aristteles, que criou determinadas regras lgicas, que conduzem a concluses acertadas, quase como se fossem um clculo. Tais regras constituem o Silogismo, cujo exemplo clssico : Todo homem mortal, Scrates homem, Logo, Scrates mortal.

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

O silogismo caracteriza-se por iniciar com uma sentena que afirme uma propriedade de uma classe, que uma verdade maior (Todo homem mortal). A sentena seguinte apresenta um indivduo pertencente classe (Scrates homem) e a terceira sentena conclui que o indivduo possui a propriedade da classe (Logo, Scrates mortal). Outro exemplo: Todos os metais so bons condutores de eletricidade, O mercrio um metal, Logo, o mercrio conduz bem a eletricidade. Foi a Matemtica, dentre todas as cincias, aquela que mais se aproximou da Lgica, por ser baseada no raciocnio dedutivo. Vejamos como exemplo, as duas proposies abaixo e a deduo que lhes segue: 3 + 1 = 4; 2 + 2 = 4; Logo, 3 + 1 = 2 + 2 Do silogismo de Aristteles, a Lgica evoluiu posteriormente para a teoria clssica dos juzos que, ao invs de perguntar o que a verdade?, preocupa-se em avaliar quando uma proposio ou juzo verdadeiro. Tomemos como exemplo a afirmao Carlos estudante, que exprime um estado mental (juzo) que ser verdadeiro se estiver de acordo com o fato externo de Carlos estudar. Um juzo falso se exprime ou une mentalmente o que na realidade est separado. Utilizando, ento, a Lgica, poderamos escrever as instrues para o cobrador de entradas em um cinema: Se Carlos estudante Ento cobre meia entrada Seno cobre entrada inteira. A finalidade da disciplina de Algoritmos, fundamental em todos os cursos de Ensino Superior que preparam profissionais para atuar na rea das Cincias Exatas, fornecer os fundamentos tericos bsicos para o desenvolvimento do raciocnio lgico necessrio na resoluo de problemas computacionais. Mas, o que so problemas computacionais?

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Este assunto ser visto no prximo captulo, onde tambm so abordados conceitos bsicos sobre processamento de dados, organizao de um computador, memria e tipos de dados, identificadores, estrutura de um algoritmo e programao. No terceiro captulo veremos expresses aritmticas, operadores aritmticos, funes matemticas, expresses lgicas, operadores relacionais, operadores lgicos, tabelas verdade e prioridades entre operadores. O quarto captulo dedicado a comandos de atribuio, de entrada e de sada. J, o quinto captulo apresenta os comandos de seleo e no sexto captulo so estudados os comandos de repetio. No captulo sete so vistos os tipos estruturados homogneos (vetores e matrizes) e o oitavo captulo aborda conhecimentos bsicos da linguagem C.

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

2. CO CEITOS BSICOS
2.1 PROBLEMAS COMPUTACIO AIS Problemas computacionais so aqueles que esto relacionados com a manipulao de informaes. Um computador , basicamente, uma mquina que recebe informaes, as processa e fornece o resultado deste processamento, que so, novamente, informaes.

INFORMAO

PROCESSAMENTO

INFORMAO

Entrada de Dados

CPU, MEMRIA

Sada de Dados

O processamento das informaes pelo computador envolve sua parte central que formada pela memria do computador, onde ficam armazenados o sistema operacional da mquina, o programa e as informaes ou dados, e pela Unidade Central de

Processamento (CPU) que ficar encarregada de executar as instrues e operaes necessrias para obter o resultado esperado. Os dados que entram no computador chegam atravs de dispositivos de entrada (como o teclado ou o driver de disco) e so armazenados na memria RAM do computador. Os dados produzidos pelo processamento so, tambm, armazenados na memria RAM e chegam ao usurio atravs de dispositivos de sada (como o vdeo, o driver de disco ou a impressora). 2.2 TIPOS DE DADOS Os dados com que um computador trabalha podem ser de trs tipos: numricos, alfanumricos (caracteres) ou lgicos (booleanos). Dependendo do tipo do dado, a ele estar associado um tamanho necessrio em memria para armazen-lo e as operaes que o tipo suporta. Faz-se, ento, distino entre os diversos dados quanto a seu tipo, para que o

computador esteja preparado para oper-los e armazen-los. Os dados tambm devem ser diferenciados quanto a serem constantes ou variveis: 1. Constante a informao dita constante quando no existe a possibilidade de que sofra nenhuma variao no decorrer do tempo em que executado o algoritmo. Exemplo: no clculo da rea de um crculo qualquer, o valor de Pi ser sempre o mesmo, no importando qual seja o crculo, o que o caracteriza como constante.

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

2. Varivel a informao dita varivel, quando se admite que seu valor possa sofrer alteraes durante a execuo do algoritmo, ou que ela possa assumir diferentes valores a cada nova execuo do algoritmo. Exemplo: no clculo da rea de um crculo qualquer, o raio do crculo uma informao varivel, dependendo do crculo para o qual se deseja calcular a rea. 2.3 TIPOS PRIMITIVOS DE DADOS Como vimos anteriormente, os dados ou informaes que so processados por um computador devero ter seu tipo declarado, o que pode ser entendido como classificar a informao quanto ao seu tipo e solicitar um espao que comporte seu valor, para armazenagem na memria RAM do computador. So quatro os tipos primitivos: 1. Inteiro - declaramos como sendo do tipo inteiro qualquer informao que assuma valores numricos pertencentes ao conjunto dos nmeros inteiros (por exemplo, -34, 90, 0). Exemplo: inteiro quantidade; inteiro idade; 2. Real - serve para declararmos variveis que podero assumir valores numricos pertencentes ao conjunto dos nmeros reais (por exemplo, 23.56, -34.00, 0.0). Exemplo: real preco; real notas; 3. Caractere - quando declaramos uma varivel como sendo do tipo caractere ela poder assumir qualquer dos caracteres do teclado, tanto alfanumricos como especiais (por exemplo, aula, 5 de fevereiro, 178, 0.55). Exemplo: caractere nome_aluno; caractere profissao; 4. Lgico - declaramos como sendo do tipo lgico (ou booleano) qualquer informao que possa assumir apenas os valores verdadeiro ou falso. Exemplo: lgico ligado; lgico aprovado; 2.4 FORMAO DE IDE TIFICADORES Identificadores so os nomes que criamos e associamos as variveis e constantes de um algoritmo e que devem observar as regras abaixo:

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

1. Devem ser formados por um ou mais caracteres, sendo que o primeiro dever ser uma letra; 2. Caracteres especiais no so vlidos (por exemplo: % * + ; : @ ` ?) 3. No podem conter espao; 4. O caractere de sublinha (_) considerado vlido.

Exemplo: Mdia Aritmtica no pode ser usado como identificador por utilizar o acento agudo que um caractere especial e por conter espao. Para tornar-se vlido, deveria ser escrito: Media_Aritmetica ou MediaAritmetica. Vamos, tambm, considerar diferenas quanto aos caracteres maisculos e minsculos, de tal forma que os identificadores Aluno, aLuno e aluno correspondem a diferentes variveis ou constantes. Com isso, estaremos seguindo as regras da linguagem C, porm h outras linguagens que no fazem esta diferena. Deve-se observar que no permitido utilizar o mesmo identificador para nomear diferentes variveis e/ou constantes ou nomear o algoritmo. 2.5 PROGRAMAO OBJETOS ESTRUTURADA E PROGRAMAO ORIE TADA A

Os problemas computacionais, para que possam ser resolvidos por um computador, devero estar escritos em uma linguagem computacional. Isto significa que, aps ser elaborado o algoritmo que resolve o problema, este dever ser traduzido para uma linguagem conhecida pelo computador. A linguagem que utilizaremos para testar nossos algoritmos no computador chama-se C. Esta linguagem foi criada em 1972 por Dennis M. Ritchie e Ken Thompson e tem sido muito usada desde ento. Foi projetada para a construo de sistemas computacionais, sendo o sistema operacional UNIX, por exemplo, desenvolcido em C. uma linguagem poderosa, porttil e flexvel, que permite planejar programas estruturados. Existem em programao vrios paradigmas, como: Programao Estruturada, Programao Orientada a Objetos, Programao Lgica. Trataremos aqui das caractersticas dos dois primeiros. A Programao Estruturada caracterstica de linguagens como Pascal, C e Fortran. Baseia-se, como o nome diz, na estruturao dos programas, o que consiste em subdividir o problema a ser resolvido em tarefas, que vo constituir pequenos blocos, independentes entre si

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

e acion-los a partir de um bloco principal. Tal caracterstica torna mais fcil a tarefa de testar programas, uma vez que os blocos podem ser testados em separado, e, tambm, auxilia na manuteno dos cdigos. Quando analisamos um problema sob este paradigma, nossa primeira preocupao compreender e definir muito bem a ao que proporcionar o resultado a atingir e, depois, definimos os dados que estaro envolvidos na tarefa. J a Programao Orientada a Objetos, que vem tendo uso crescente nos ltimos anos, preocupa-se com o objeto, que basicamente possui caractersticas (atributos ou dados) e propriedades (mtodos ou ao). Exemplos de linguagens orientadas a objeto so: Delphi, C++ e Java. Para melhor exemplificar as diferenas bsicas entre as duas, analisemos o problema de calcular a mdia aritmtica de um aluno, sendo dados de entrada suas duas notas e como sada queremos a sua mdia aritmtica. Ao resolvermos este problema utilizando o raciocnio da programao estruturada, vamos nos preocupar em conhecer bem e depois descrever a ao de calcular a mdia aritmtica (m = (nota1 + nota2)/2) e vamos nos utilizar (de forma secundria) de dados para executar a ao, ou seja, necessitaremos de espao em memria para armazenar as duas notas e o resultado do clculo e, todas so do tipo numrico real. J pelo paradigma da programao orientada a objetos, vamos, primeiramente, nos preocupar com o objeto mdia que possui caractersticas prprias e que vamos descrever apontando seus atributos e seus comportamentos. Os atributos (ou dados) sero as notas e os comportamentos ou mtodos sero, neste caso, a frmula para clculo da mdia aritmtica. Este modelo de programao, como vincula a um objeto seus dados e mtodos, trouxe um novo conceito programao de computadores, que a possibilidade de agruparmos objetos com as mesmas caractersticas e com eles formarmos o que se chama classes. Criamos classes de objetos para no repetirmos a definio de propriedades iguais para objetos diversos que as possuem. Tomemos como exemplo o problema mesa e vamos analis-lo sob o paradigma da orientao a objetos. Existem mesas de diversos tipos, formas e materiais, porm todas tm: atributos (um tampo e pernas de sustentao) e mtodos (sustentar outros objetos sobre o tampo). Com esta definio, criamos a classe mesa e dela podem derivar vrios objetos: mesa com tampo redondo e quatro pernas; mesa fixa na parede com duas pernas e tampo retangular de madeira e outras tantas mais. Uma boa definio para classe :

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Uma classe um agrupamento de objetos que revelam profundas semelhanas entre si, no aspecto estrutural e funcional. Os objetos pertencentes a uma classe, dela herdaro os atributos e mtodos e acrescentaro aqueles que necessitam pela suas particularidades. Quando, dentro deste paradigma, chegamos no nvel de resoluo dos mtodos dos objetos, voltamos a utilizar o paradigma da programao estruturada, preocupando-nos com a ao. Podemos, portanto, dizer que a Programao Orientada a Objetos inclui os conhecimentos bsicos da Programao Estruturada. Em nossa disciplina vamos nos preocupar em aprender esta forma estruturada de programar que envolve o aprendizado de regras bsicas, instrues e comandos da lgica de desenvolvimento de algoritmos e em disciplinas posteriores os alunos iro utiliz-la novamente, tanto nas disciplinas de programao estruturada como nas que utilizam orientao a objetos. 2.6 ESTRUTURA DE UM ALGORITMO Ao elaborarmos um algoritmo na forma estruturada de programao, devemos observar as seguintes subdivises: (a) Cabealho do algoritmo: Serve para nomear o algoritmo. Deve iniciar pela palavra algoritmo (ou programa) e ser seguido pelo identificador do algoritmo (nome) e o sinal ; (ponto e vrgula). O sinal de ponto e vrgula utilizado ao longo de todo o algoritmo como separador de instrues.

Exemplos:

algoritmo area_do_circulo; algoritmo raizquadrada;

(b) Zona de declaraes: Nesta parte do algoritmo so definidas as constantes e declaradas as variveis necessrias ao seu processamento. - Definio de Constantes A declarao de cada constante deve ser precedida pela palavra const e a seguir colocado o identificador da constante, o sinal de igualdade (=) e o valor que possui, finalizando com o separador ; (ponto e vrgula).

10

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exemplos:

algoritmo area_do_circulo; const Pi = 3.1416; const Nome = Jose;

- Declarao de Variveis Declaram-se variveis para reservar uma quantidade de memria apropriada para armazenar um dado e indicar que seu contedo ser referenciado pelo nome que foi escolhido.

Exemplo:

inteiro idade;

Com a declarao do exemplo acima estaremos reservando um espao em memria, chamado idade, com tamanho suficiente para guardar um nmero do tipo inteiro e toda vez que usarmos a palavra idade nas instrues do algoritmo, estaremos nos referindo ao valor numrico que est armazenado neste espao da memria do computador.

Exemplo:

real area, raio;

Pelo exemplo, pode-se ver que, havendo mais de uma varivel do mesmo tipo, elas podem ser declaradas na mesma linha, separadas por vrgula. (c) Corpo do algoritmo Faz parte do corpo do algoritmo toda a seqncia de instrues que conduz resoluo do problema. O corpo do algoritmo tem seu comeo determinado pela palavra inicio, seguida por todas as instrues separadas por ; (ponto e vrgula) e termina com a palavra fim. Exemplo: algoritmo area_do_circulo; real area, raio; const Pi = 3.1416; inicio instruo 1; instruo 2; instruo n; fim.

11

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

***************************************************************************** 2.7 EXERCCIOS PROPOSTOS 1) Dentre os identificadores abaixo, indique quais so corretos (C) e quais so incorretos (I). Para os indicados como incorretos, justifique sua resposta: a) X1YZ b) A9PQ c) GF,3W d) 123casa e) Lpis_cor f) Aula hoje g) inteiro 2) Escreva o tipo de dado ideal para se representar cada uma das seguintes informaes: a) O nmero de telefone b) Nmero de estudantes da universidade c) Se uma pessoa gosta de bala ou no d) O valor de uma casa e) A cor de um carro f) Resultado de uma diviso 3) Identificar os tipos dos seguintes dados: a) 13 de agosto b) 0.8 c) ? d) 27 e) -27

12

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

3. EXPRESSES, OPERADORES E FU ES
Neste captulo abordaremos os diversos operadores e funes que sero utilizados na construo de algoritmos. 3.1 EXPRESSES ARITMTICAS So aquelas cujos operadores so aritmticos e cujos operandos so constantes e/ou variveis do tipo numrico (inteiro e/ou real). Exemplos: a = b * 5; y = n * (b +c);

3.1.1 OPERADORES ARITMTICOS


+ * / % Adio Subtrao Multiplicao Diviso Resto inteiro da diviso entre inteiros

Observao: o resultado da diviso entre dois inteiros ser tambm um inteiro. Porm, basta que um dos valores envolvidos na operao de diviso seja real, para que o resultado seja um real. 3.1.2 FU ES MATEMTICAS Sempre retornam um valor (resultado), cujo tipo depende do que est definido para cada funo; Dependem sempre dos parmetros (argumentos), que so colocados dentro dos parnteses, separados por vrgula, se houver necessidade de mais de um.

13

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Resultado Logaritmo neperiano Logaritmo base 10 e elevado potencia x Valor absoluto de x fabs(-2.5) = 2.5 abs(-5) = 5 Decompe um real x em duas partes: y recebe a parte fracionria e a funo devolve a parte inteira, ambas como real. Arredonda o valor de x para cima Arredonda o valor de x para baixo Retorna x elevado a potncia y Raiz quadrada de x Retorna o resto da diviso de x por y Seno de x Cosseno de x Arco-tangente de x ceil(5.4) = 6.0 floor(5.4) = 5.0 pow(2,2) = 4 sqrt(36) = 6 fmod (25.55 , 2) = 1.55

Funo log(x) log10(x) exp(x) fabs(x) abs(x)

Tipo do argumento real real real real, int int, real (trunca o real) real, real real real real real real, real real real real

Tipo do resultado real Real Real Real Int

modf(x,y) ceil (x) floor(x) pow(x,y) sqrt(x ) fmod(x,y) sin(x ) cos( x) atan( x)

Real Real Real Real real real Real Real Real

e = constante de Euler = 2.718 3.1.3 PRIORIDADES AS EXPRESSES ARITMTICAS 1) Parnteses mais internos 2) - (menos unrio) 3) Funes matemticas 4) * 5) + / %

os casos de operadores com a mesma prioridade, a expresso ser executada observando a seqncia de operadores da esquerda para a direita.

14

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

3.2 EXPRESSES LGICAS So expresses onde os operandos so relaes e/ou variveis do tipo lgico e os operadores so relacionais ou lgicos.

Exemplos:

A>B
(X = Y) OU (X = Z)

3.2.1 OPERADORES RELACIO AIS Uma relao uma comparao realizada entre valores do mesmo tipo, que podem ser constantes, variveis ou expresses. O resultado de uma operao relacional ser sempre lgico (verdadeiro ou falso). So os seguintes os operadores relacionais:
= > < <> <= >= Igualdade Maior Menor Diferente Menor ou igual Maior ou igual

3.2.2 OPERADORES LGICOS So os seguintes os operadores lgicos: Operador E: utilizado quando necessitamos estabelecer que todos os relacionamentos lgicos de uma sentena devem ser verdadeiros. Exemplo: Se (Media_aluno >= 7) E (Presena_aluno >= 0.75) Ento considere o aluno aprovado Tabela verdade do operador E: apresenta o resultado obtido de todas as combinaes possveis do operador:
Condio 1 V V F F Condio 2 V F V F Condio 1 E Condio 2 V F F F

15

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Operador OU: utilizado quando necessitamos estabelecer que basta que uma das relaes lgicas de uma sentena seja verdadeira. tambm conhecido como OU INCLUSIVO. Exemplo: Se (Media_aluno < 7) OU (Presenca_aluno < 0.75) Ento considere o aluno reprovado Tabela verdade do operador OU:
Condio 1 V V F F Condio 2 V F V F Condio 1 OU Condio 2 V V V F

Operador XOU: utilizado quando necessitamos estabelecer que apenas uma das relaes lgicas de uma sentena pode ser verdadeira. tambm conhecido como OU EXCLUSIVO. Tabela verdade do operador XOU:
Condio 1 V V F F Condio 2 V F V F Condio 1 XOU Condio 2 F V V F

Operador

O: utilizado quando necessrio estabelecer o valor contrrio de uma

determinada condio. Exemplo: Se NO(Media_aluno) >= 7 Ento considere aluno reprovado Tabela verdade do operador O:
Condio V F O Condio F V

16

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

3.2.3 PRIORIDADE E TRE OS OPERADORES LGICOS: 1) NO 2) E 3) OU 4) XOU 3.3 PRIORIDADE E TRE TODOS OS OPERADORES: 1) Parnteses mais internos 2) (menos unrio) 3) Funes matemticas 4) Operadores aritmticos: 5) Operadores relacionais 6) Operadores lgicos
6.1 NO 6.2 E 6.3 OU 6.4 XOU 4.2 4.3 * / % + -

os casos de operadores com a mesma prioridade, ser observada a ordem de execuo da esquerda para a direita. ***************************************************************************** EXERCCIOS RESOLVIDOS:

17

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

***************************************************************************** 3.4 EXERCCIOS PROPOSTOS 1) Considerando X 1, Y 2 e Z 5, desenvolva: a) (Z % Y/Y) b) X + Y + Z/3 c) (sqrt(Z/Y + X * Y)) d) Z abs(X sqrt(Y * Y)) 2) Sendo A = VERDADEIRO e B = FALSO, qual o resultado das expresses abaixo? a) NO A E B OU A E NO B b) NO(NO(A OU B) E (A OU B)) c) A OU B E NO A OU NO B d) (A OU B) E (NO A OU NO B)

18

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

3) Resolva as relaes abaixo: a) Falso OU 20 % 18/3 <> 18/3 % 20 b) 2 + 8 % 7 >= 3 * 6 - 15 E 3 * 5/4 <= pow(2, 3)/0.5 c) ceil(20/3) > sqrt(36) OU floor(18/4) >= pow(2, 2) d) NO(5 <> 10/2 OU Verdadeiro E 2 - 5 > 5 - 2 XOU Verdadeiro) e) Verdadeiro E 40/4 + 3 < 150/3 f) Z 12.55 ceil(Z)/2 + 50 % 5 <> abs(-20/3) g) fabs(-50/2) 20 > pow(2, 4) XOU (13/2) < sqrt(36) h) X 7 X = sqrt(45 + 4) OU NO (6 + 2 <> floor(8.25)) E 9 < 9 % 1 i) A 8 abs(pow(A, 2) + 0.1 * (-1)) > fmod(25.5 * 2, 2) XOU FALSO

19

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

4. COMA DO DE ATRIBUIO, BLOCOS E COMA DOS DE E TRADA E SADA DE DADOS


4.1 COMA DO DE ATRIBUIO O comando de atribuio utilizado para atribuir valor a uma varivel, que dever ser do mesmo tipo da varivel. Utiliza-se para simbolizar a atribuio o sinal e l-se recebe. Sintaxe do comando atribuio: Identificador valor; Exemplo: algoritmo Area_doCirculo; /* Algoritmo que, dado o raio de um crculo, calcula a sua rea */ const Pi = 3.1416; real area, raio; inicio raio 5; --------------------; fim.

No algoritmo acima, a instruo raio 5.0; estabelece que a varivel raio recebe o valor 5.0, o que, em termos de programao, significa que a varivel raio armazenar na memria do computador o valor 5. Exemplo: algoritmo Area_doCirculo; /* Algoritmo que, dado o raio de um crculo, calcula a sua rea*/ const Pi = 3.1416; real area, raio; inicio raio 5; --------------------; --------------------; raio 20.78 fim.

No algoritmo acima, a primeira instruo de atribuio varivel raio armazena em memria o valor real 5, mas, seguindo as instruoes seqencialmente, o computador encontra outra atribuio para raio, onde ele armazena 20.78. Com isto, o valor anterior (5) substituido pelo novo valor, 20.78. O valor 5 que havia sido anteriormente armazenado perdido.

20

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

4.2 COMA DO DE E TRADA DE DADOS Sintaxe do comando de entrada de dados: leia(identificador_da_variavel); Exemplo: algoritmo Area_doCirculo; /* Algoritmo que, dado o raio de um crculo, calcula a sua rea*/ const Pi = 3.1416; real area, raio; inicio leia(raio); area Pi * pow(raio,2); fim.

No exemplo acima, a instruo leia(raio) permite que seja fornecido um valor vlido para a varivel raio. Desta forma, aps executada a instruo, a varivel armazenar na memria do computador o valor que foi lido, se este for do mesmo tipo da varivel. A seguir, ser executada a prxima instruo que atribui varivel area o resultado da expresso Pi*pow(raio,2). 4.3 COMA DO DE SADA DE DADOS Sintaxe do comando de sada de dados: escreva(texto, identificador_da_variavel); Exemplo: algoritmo Area_do_Circulo; // Algoritmo que, dado o raio de um crculo, calcula a sua rea const Pi = 3.1416; real area, raio; inicio leia(raio); area Pi * pow(raio); escreva(A rea do crculo de raio , raio, , area, , onde considerou-se o valor de Pi = , Pi); fim.

O comando escreva poder fornecer apenas o contedo de uma varivel, ou, se quisermos, poderemos adicionar um texto, como no exemplo acima. Todos os caracteres que configurarem um texto devero estar entre apstrofes ou aspas duplas (inclusive o espao) e deveremos separar com vrgula o texto das variveis (ou constantes) dentro do comando escreva. Se, ao executarmos o algoritmo acima, fornecssemos o valor 2 para raio, a instruo escreva iria fornecer como sada:

21

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

A rea do crculo de raio 2 12.5664, onde considerou-se o valor de Pi = 3.1416 ***************************************************************************** 4.4 EXERCCIOS PROPOSTOS (Exerccios identificados com (*) esto resolvidos ao final do captulo) 1. Se x possui o valor 15 e forem executadas as seguintes instrues: X X + 3; X X - 6; X 3 * X; qual ser o valor armazenado em X? 2. (*) Escreva um algoritmo que tenha como entrada o nome de um funcionrio, o nmero de horas que trabalhou e o nmero de filhos com menos de 18 anos que possui. O algoritmo dever fornecer como sada o salrio que este funcionrio ir receber, considerando: Um valor igual a R$ 10.00 por hora trabalhada; Um acrscimo de R$50.00 por filho; Um desconto de 9% como contribuio ao INSS, sobre o total de ganhos. 3. Escreva um algoritmo que recebe como entrada trs valores numricos reais (X, Y e Z), calcula e informa: A rea do tringulo que tem X por base e Y por altura; O comprimento da circunferncia de raio Z; A rea do trapzio que tem X e Z por bases e Y por altura; A rea do retngulo de lados Y e Z; A rea da superfcie de um cubo que tem X por aresta. 4. (*) Escreva um algoritmo que leia dois valores numricos inteiros, armazenando-os em duas variveis (A e B). O algoritmo dever trocar o valor das duas variveis, de tal forma que em A fique armazenado o valor de B e vice-versa. Ao final, o algoritmo dever escrever os valores de A e B. 5. Faa um algoritmo para calcular a rea da figura hachurada a seguir, sabendo que o dimetro do crculo menor igual ao raio do crculo maior. Calcule, tambm, a percentagem da rea do crculo menor sobre a rea do crculo maior.

6. (*) Escreva um algoritmo para calcular e informar o valor de converso para graus centgrados de uma temperatura em graus Farenheit, sabendo que C = (5 * (F - 32))/9.

22

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

7. Escreva um algoritmo para calcular o consumo mdio de combustvel de um automvel em Km/l. Considere como dados de entrada: quilometragem inicial, quilometragem final, volume de combustvel consumido. 8. Escreva um algoritmo que leia dois valores numricos do tipo inteiro e escreva o resultado da soma dos quadrados destes nmeros e o resultado da diviso dos dois valores. 9. Faa um algoritmo para calcular o valor de Y como funo de X segundo a funo Y= (5X + 2)2/X2, considerando um domnio real. 10. Faa um algoritmo para calcular e escrever a tabuada at 10 de um nmero lido. 11. Construa um algoritmo que, tendo como dados de entrada dois pontos quaisquer no plano, P(x1,y1) e P(x2,y2), escreva a distncia entre eles. A frmula que efetua tal clculo :

12. (*) Escreva um algoritmo que leia trs nmeros inteiros e positivos (A, B, C) e calcule a seguinte expresso:

sendo 13. Faa um algoritmo que leia a idade de uma pessoa expressa em anos, meses e dias e mostre-a expressa apenas em dias. 14. Ler um valor inteiro e escrever seu antecessor e seu sucessor. 15. Faa um algoritmo para calcular o valor total em metros quadrados necessrios para revestir as paredes de um banheiro. 16. Faa um algoritmo que leia o nmero de votos brancos, nulos e vlidos de uma eleio e escreva o percentual que cada um representa em relao ao total de votantes. 17. Uma loja de brinquedos oferece descontos de 15% sobre o preo de venda de todo o seu estoque. Escreva um algoritmo que leia o preo de um brinquedo antes da promoo e calcule quanto deve ser o novo preo. 18. Escreva um algoritmo que calcule e escreva o fatorial de 5. 19. O custo ao consumidor de um carro novo a soma do custo de fbrica mais a percentagem do distribuir e o percentual de impostos. Faa um algoritmo que leia estas informaes e fornea o valor a ser pago por um automvel.

23

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

20. Escrever um algoritmo que l o pblico possvel em um estdio de futebol e o total de pessoas conforme o lugar ocupado no estdio (arquibancada ou cadeiras) em um determinado jogo de futebol. O algoritmo dever informar a renda do jogo, considerando valor de cada lugar nas arquibancadas igual a R$8.00 e valor de cada lugar nas cadeiras igual a R$12.00. Informe, tambm, o percentual de pblico presente ao jogo. ***************************************************************************** 4.5 EXERCCIOS RESOLVIDOS Exerccio 2:
Algoritmo algoritmo salario_func; caractere inteiro real inicio leia(nome, nfilhos, horas); salario(horas*10+50*nfilhos); salariosalario*0.91; escreva(salario); fim. nome; horas, nfilhos; salario; void main(void) { printf("\n Digite o nome do funcionario\n"); scanf("%s", &nome); printf("\n Digite o no. filhos com menos de 18 anos\n"); scanf("%d", &nfilhos); printf("\n Digite o total de horas trabalhadas\n"); scanf("%d", &horas); salario = (horas*10+50*nfilhos); salario = salario*0.91; printf("\nSalario a receber: %5.2f\n", salario); return 0; } C #include <stdio.h> char nome[15]; int horas, nfilhos; float salario;

Exerccio 4:
Algoritmo algoritmo troca; inteiro a, b, aux; inicio leia(a, b); aux a; a b; b aux; escreva(a, b); fim. C #include <stdio.h> int a,b,aux; void main(void) { scanf("%i%i", &a, &b); aux = a; a = b; b = aux; printf("\n%i\n%i", a, b); return 0; }

24

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exerccio 6: Algoritmo
algoritmo temperatura; real gc, gf;

C
#include <stdio.h> float gf, gc; void main(void) { printf("Digite a temperatura farenheidt\n"); scanf("%f", &gf); gc = (5 * (gf - 32))/9; printf("\nTempertura Celsius: %5.2f", gc); }

inicio leia(gf); gc (5 * (gf - 32))/9; escreva(gc); fim.

Exerccio 12: Algoritmo


algoritmo Ex_12; int a, b, c; float d, r, s; inicio leia(a, b, c); r pow((a + b), 2); s pow((b + c), 2); d (r + s)/2; escreva(d); fim.

C
#include <stdio.h> #include <math.h> int a,b,c; float d,r,s; void main(void) { printf("Digite os valores de a, b e c\n"); scanf("%d%d%d", &a, &b, &c); r = pow((a + b), 2); s = pow((b + c), 2); d = (r + s)/2; printf ( "\n Diviso dos valores: %5.2f\n", r, d); return 0; }

25

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

5. COMA DOS CO DICIO AIS


Os comandos condicionais permitem que sejam determinadas as instrues a serem executadas em funo do resultado de expresses lgicas (condies). 5.1 COMA DO CO DICIO AL SE 5.1.1 SI TAXE: se (condio) ento Comando1; seno Comando2; Onde: se, seno e ento so palavras reservadas do comando; condio uma expresso lgica.

O comando se determina que, caso o resultado lgico de condio seja verdadeiro, dever ser executado Comando1, em caso contrrio dever ser executado Comando2. Comando1 e Comando2 simbolizam aqui, tanto um comando apenas, como uma seqncia de comandos. Quando tivermos mais de um comando para serem executados, em funo da deciso de uma condio, devemos demarc-los com um bloco, que fica delimitado pelos comandos inicio e fim. Observe bem!!!: demarcando um bloco de comandos estaremos garantindo que aqueles comandos devero ser executados conjuntamente, na seqncia em que esto escritos. No caso de no demarcarmos os comandos por um bloco, o comando se ir considerar apenas o primeiro de todos os comandos que lhe seguem como sendo dependente do seu resultado lgico. Podemos, ento, ampliar a sintaxe do comando se para a situao de termos mais de um bloco de comandos a serem executados conforme o resultado da expresso lgica: se (condio) ento inicio Comando; Comando; Comando; fim; seno inicio Comando;

26

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Comando; fim; O comando se pode ser, tambm, utilizado na sua forma simples, onde no aparece o seno: se condio ento Comando ou bloco; 5.1.2 SELEO E CADEADA SI TAXE: se condio1 ento se condio2 ento Comando ou Bloco1; seno Comando ou Bloco2; seno se condio3 ento Comando ou Bloco3; seno Comando ou Bloco4; No caso de condio1 ser verdadeira, ser testada condio2 que, se for verdadeira, levar execuo do Bloco1. Se condio2, porm, for falsa, ser executado o comando seno que conduz a execuo do Bloco2. Se condio1 for falsa, levar direto para o seno do primeiro se onde ser avaliada a condio3. Podemos encadear quantos comandos se forem necessrios. A necessidade ou no de delimitar blocos depender do nmero de comandos dependentes. 5.1.3 EXEMPLO: Faa um algoritmo cuja finalidade calcular o salrio final de um funcionrio em funo de abono concedido pela empresa. O algoritmo dever ler o salrio base e considerar os seguintes limites para o abono: salrio menor que 300.00 dever receber um abono de 30%; salrio entre os limites 300.00 (inclusive) e 1000.00 (exclusive) dever receber abono de 20%; salrio com valor igual ou superior a 1000.00 dever receber abono de 10%. algoritmo Salario; real sal_base, sal_final;

27

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

inicio leia(sal_base); se sal_base < 300 ento sal_final sal_base * 1.30; seno se sal_base >= 300 e sal_base < 1000 ento sal_final sal_base * 1.20; seno sal_final sal_base * 1.1; escreva(O salrio com abono R$ , sal_final); fim. No exemplo acima, no houve necessidade de demarcar blocos, j que cada comando tinha sempre um nico comando na sua dependncia. 5.2 COMA DO CO DICIO AL ESCOLHA O comando escolha tambm conhecido como comando de seleo de mltipla escolha. 5.2.1 SI TAXE: escolha seletor Caso1: comando ou bloco; Caso2: comando ou bloco; Cason: comando ou bloco; seno Comando ou Bloco; fim; Onde: escolha, seno e fim so palavras reservadas do comando; seletor uma varivel ou expresso de tipo escalar (exceto real); Caso1,...Cason so os valores esperados para seletor. O comando determina que em funo do valor contido em seletor seja executado o comando ou bloco pertencente ao caso que se identifica com o seletor. Caso poder ser um ou mais escalares ou um intervalo de escalares. escolha N1 0 .. 10: Comando ou bloco; 11 .. 20: Comando ou bloco; seno Comando ou bloco; fim;

28

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

escolha Letra A,a: Comando ou bloco; B, b: Comando ou bloco; C .. F: Comando ou bloco; seno Comando ou bloco; fim; 5.2.2 EXEMPLO: Faa um algoritmo que leia dois nmero reais (N1 e N2) e um caractere. Conforme o valor lido para o caractere, o algoritmo dever calcular e informar: Se caractere for +, dever ser calculada a soma de N1 e N2; Se caractere for -, dever ser calculada a diferena entre os dois valores; Se caractere for *, dever ser calculado o produto de N1 e N2; Se caractere for /, dever ser calculada a diviso de N1 por N2. algoritmo calculadora; real n1,n2; caractere operador; inicio leia(n1,n2); leia(operador); escolha operador +: inicio escreva(O resultado da soma entre n1 e n2 : ); escreva(n1+n2); fim; -: inicio escreva(O resultado da diferena entre n1 e n2 : ); escreva(n1-n2); fim; *: inicio escreva(O resultado da multiplicao entre n1 e n2 : ); escreva(n1*n2); fim; /: inicio escreva(O resultado da diviso entre n1 e n2 : ); escreva(n1/n2); fim; seno escreva(Operador invlido!); fim; fim.

29

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Observe no exemplo acima que os caracteres so sempre escritos entre apstrofes e que eles so do mesmo tipo da varivel operador. Observe, ainda, que o comando escolha permite que apenas um dentre os vrios valores apresentados para a varivel seletora seja escolhido. Caso nenhum valor seja adequado, ser executado o comando seno. Identicamente ao comando se, tambm o comando escolha poder ser utilizado sem o seno. Seria escrito, ento, com a seguinte sintaxe: escolha seletor Caso1: Comando ou bloco; Caso2: Comando ou bloco; Cason: Comando ou bloco fim; ***************************************************************************** 5.3 EXERCCIOS PROPOSTOS: (Exerccios identificados com (*) esto resolvidos ao final do captulo) 1. (*) Faa um algoritmo para calcular a mensalidade a ser paga pelos alunos de uma academia de ginstica que pratica os seguintes descontos: Mulheres com idade igual ou inferior a 15 anos tero desconto de 15%; Mulheres com idade superior a 15 anos tero desconto de 10%; Homens com idade inferior a 22 anos no tero desconto; Homens com idade igual ou superior a 22 anos tero desconto de 20%. Considerar a mensalidade bsica como R$45.00. 2. Faa um algoritmo para calcular o resultado de um aluno aps trs provas, considerando a seguinte tabela: Mdia igual ou superior a 7 aluno aprovado; Mdia igual ou superior a 5 e inferior a 7 aluno em exame; Mdia inferior a 5 aluno reprovado. A mdia do aluno obtida atravs do clculo de mdia ponderada, considerando peso = 3 para a Nota 1, peso = 2 para a Nota 2 e peso = 5 para a Nota 3. 3. Faa um algoritmo para determinar se um nmero inteiro lido par. 4. (*) Faa um algoritmo que l um cdigo (1, 2, 3 ou 4) e dois valores do tipo inteiro, calcula e fornece: A adio dos nmeros para cdigo = 1 A subtrao dos nmeros para cdigo = 2 A multiplicao dos nmeros para cdigo = 3 A diviso dos nmeros para cdigo = 4.

30

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

5. Faa um algoritmo que calcula as razes de uma equao do 2 Grau, considerando que no possvel a diviso por zero (informar caso ocorra) e considerando tambm invivel o clculo de razes imaginrias (informar caso ocorra). 6. Faa um algoritmo que l dois valores numricos e informa se so mltiplos entre si. 7. Faa um algoritmo para ler trs valores numricos e escrever o maior entre eles. Considere que no haver valores iguais. 8. Dados trs valores, A, B e C, verificar se eles podem ser lados de um tringulo. Caso sejam, dever informar sua rea e se compem um tringulo issceles, escaleno ou equiltero.

A = s * ( s a)( s b)( s c)
Frmula de Heron para a rea de um tringulo qualquer, onde s o semi-permetro do tringulo (s = (a+b+c)/2). Para que trs valores possam ser lados de um tringulo, cada um deles dever ser inferior a soma dos outros dois. 9. Faa um algoritmo para ler trs valores inteiros e escrev-los em ordem crescente (suponha nmeros diferentes). 10. Escreva um algoritmo que leia um valor referente a dinheiro (por exemplo R$540.00) e calcula qual o menor nmero possvel de notas de 50.00, 10.00, 5.00 e 1.00 reais em que o valor lido pode ser decomposto. O algoritmo dever fornecer o valor lido e a relao de notas necessrias. 11. (*) Escreva um algoritmo que l a hora de incio e fim de um jogo (considere apenas horas inteiras) e calcula a durao do jogo, sabendo-se que o tempo mximo de durao do jogo inferior a 24 horas e que o jogo pode iniciar em um dia e terminar no seguinte. 12. Elabore o mesmo algoritmo acima descrito, porm considerando agora a possibilidade de ler minutos. 13. Faa um programa que l 2 valores, o primeiro servindo de indicador de operao e o segundo correspondendo ao raio de uma circunferncia. Se o valor for 1, calcular e imprimir a rea da circunferncia. Se o valor lido for 2, calcular e imprimir o permetro da circunferncia, e se o valor lido for diferente destes dois valores, imprimir uma mensagem dizendo que o indicador de operao foi mal fornecido. 14. Faa um programa que l quatro valores, I, A, B e C, onde I um nmero inteiro e positivo e A, B e C so quaisquer valores reais. O programa deve escrever os valores lidos e: se I = 1, escrever os trs valores A, B e C em ordem crescente; se I = 2, escrever os trs valores A, B e C em ordem decrescente; se I = 3, escrever os trs valores A, B e C de forma que o maior valor fique entre os outros dois; se I no for um dos trs valores acima, escrever uma mensagem indicando isto.

31

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

15. Uma loja fornece 5% de desconto para funcionrios e 10% de desconto para clientes especiais. Faa um programa que calcule o valor total a ser pago por uma pessoa. O programa dever ler o valor total da compra efetuada e um cdigo que identifique o tipo de cliente. 16. A partir do preo vista de um determinado produto, calcular o preo total a pagar e o valor da prestao mensal, referentes ao pagamento parcelado. Se o pagamento for parcelado em trs vezes dever ser dado um acrscimo de 10% no total a pagar. Se for parcelado em 5 vezes, o acrscimo de 20%. 17. O cardpio de uma lanchonete o seguinte: Cdigo 100 101 102 103 104 Especificao Cachorro quente Bauru simples Bauru c/ovo Hamburger Cheeseburger Preo unitrio R$3,50 R$4,00 R$4,50 R$4,00 R$3,00

Escrever um algoritmo que leia o cdigo do item pedido e a quantidade e calcule o valor a ser pago por aquele lanche. Considere que a cada execuo somente ser calculado um item. 18. Uma empresa conceder um aumento de salrio aos seus funcionrios, varivel de acordo com o cargo, conforme a tabela abaixo. Faa um algoritmo que leia o salrio e o cargo de um funcionrio e calcule o novo salrio. Se o cargo do funcionrio no estiver na tabela, ele dever, ento, receber 40% de aumento. Ao final, mostre o salrio antigo, o novo salrio e a diferena entre o antigo e o novo salrios. Cdigo 101 102 103 Cargo Gerente Engenheiro Tcnico Percentual 10% 20% 30%

19. Ler um valor e escrever se positivo, negativo ou zero. 20. As mas custam R$0.50 cada se forem compradas menos do que uma dzia, recebem 5% de desconto se for comprada uma dzia e 10% de desconto se forem compradas duas dzias ou mais. J as peras, custam R$0.65 cada se for comprada menos do que uma dzia, recebem 4% de desconto se for comprada uma dzia e 8% de desconto se forem compradas trs dzias ou mais. Escreva um algoritmo que leia a quantidade comprada de cada fruta, calcule e escreva o custo total da compra. 21. Faa um programa para ler o nome e o nmero de votos de quatro candidatos em uma eleio. Ao final dever ser escrito o nome do vencedor. 22. Um posto est vendendo combustvel com a seguinte tabela de descontos: lcool: at 30 litros, desconto de 3% por litro; acima de 30 e at 40 litros 5% de desconto; acima de 40 litros, desconto de 7% por litro. Gasolina: at 20 litros, desconto de 4% por litro; acima de 20 litros e at 30, desconto de 6% por litro; acima de 30 litros desconto de 8% por litro.

32

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Escreva um algoritmo que leia o nmero de litros vendidos, o tipo de combustvel (codificado da seguinte forma: A lcool, G - gasolina), calcule e imprima o valor a ser pago pelo cliente sabendo que o preo da gasolina de R$ 2,63 o litro e do lcool R$ 1,56. 23. O departamento que controla o ndice de poluio do meio ambiente mantm controle sobre 3 grupos de indstrias que so altamente poluidoras. Faa um algoritmo que, aps ler o tipo da empresa e o nvel de poluio do ar, emite uma notificao adequada conforme os ndices da tabela abaixo: Grupo 1 2 3 Nvel aceitvel <0.35 <0.3 <025 Ajustar produo 0.35 - 0.45 0.30 - 0.4 0.25 0.35 Paralisar produo Acima de 0.45 Acima de 0.4 Acima de 0.35

24. Escrever um algoritmo que leia a idade de dois homens e duas mulheres (considere que a idade dos homens ser sempre diferente, assim como a das mulheres). Calcule e escreva a soma das idades do homem mais velho com a mulher mais nova e o produto das idades do homem mais novo com a mulher mais velha. 25. Faa um algoritmo que leia uma data (dia, ms e ano), verifique e informe se ela vlida. ***************************************************************************** 5.4 EXERCCIOS RESOLVIDOS: Exerccio 1: Algoritmo
algoritmo mensalidade; const mens = 45; const mens = 45; inteiro idade; caractere sexo; real total; inicio total mens; leia(sexo, idade); se sexo = f ento se idade <= 15 ento total mens * 0.85; seno total mens * 0.9; seno se idade >= 22 ento total mens * 0.8; escreva(total); fim. int idade; char sexo; float total; void main(void){ total = mens; printf("Digite sexo e idade\n"); scanf("%c%d", &sexo, &idade); if (sexo == 'F' || sexo == 'f') if (idade <= 15) total = mens * 0.85; else total = mens * 0.9; else if (idade >= 22) total = mens * 0.8; printf("\nMensalidade: %.2f\n", total); return (EXIT_SUCCESS); }

C
#include <stdio.h> #include <stdlib.h>

33

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exerccio 4: Algoritmo
algoritmo operacoes; inteiro n1, n2, codigo; real r; inicio leia(codigo, n1,n2); escolha codigo 1: r n1 + n2; 2 r n1 - n2; 3 r n1 * n2; 4: r n1/n2; seno escreva('Cdigo invlido!'); fim; escreva('Resultado: ', r); fim.

C
#include <stdio.h> #include <stdlib.h> int n1, n2, codigo; float r; void main(void){ printf("1 - adicao 2 - subtracao 3 - multiplicacao 4 - divisao\n"); printf("Digite a opcao\n"); scanf("%i", &codigo); printf("Digite os dois valores inteiros\n"); scanf("%i%i", &n1, &n2); switch (codigo){ case 1: r = n1 + n2; break; case 2: r = n1 - n2; break; case 3: r = n1 * n2; break; case 4: r = n1/n2; break; default: printf("\nOpcao invalida!\n"); } printf("Resulatdo: %.2f\n", r); return 0; }

Exerccio 11: Algoritmo


algoritmo jogo; inteiro hi, hf, dh; inicio leia(hi, hf); se hi < hf ento dh hf - hi seno dh 24 hi + hf; escreva(dh,' horas.'); fim.

C
#include <stdio.h> int hi, hf, dh; void main(void){ printf("Digite hora inicial e final (meia noite = 0)\n"); scanf("%i%i", &hi, &hf); if (hi < hf) dh = hf - hi; else dh = 24 hi + hf; printf("%i horas.\n",dh); return 0; }

34

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

6. COMA DOS DE REPETIO


Um de nossos exemplos anteriores previa o clculo da mdia de um aluno e que fosse fornecido seu resultado final (aprovado, reprovado) em funo desta mdia. Normalmente este clculo necessrio no s para um aluno, mas para toda uma turma, que poderia, digamos, ser composta por 45 alunos. Neste caso, deveramos declarar 45 vezes mais variveis, considerando um conjunto bsico de variveis para cada aluno. Imaginem o tamanho que este algoritmo teria e tudo isto porque iremos repetir um bloco bsico de instrues, alterando apenas as variveis. Felizmente isto pode ser feito de forma muito mais gil e automtica (e j era de esperar porque em programao buscamos conciso, agilidade, menor tempo e menor esforo). Existem comandos apropriados para determinar a repetio de um bloco de instrues. Tais comandos so trs: comando para, comando enquanto e comando repita. Eles se diferenciam tanto por utilizarem ou no uma expresso lgica para testar a repetio, quanto por testarem a realizao da repetio antes ou depois da execuo do bloco de instrues. Vamos estud-los. 6.1 COMA DO PARA 6.1.1 SI TAXE: para var_de_controle valor_inicial at valor_final faa Comando ou bloco de comandos; Onde: para, at e faa so palavras reservadas do comando; var_de_controle uma varivel ou expresso pertencente ao tipo escalar (exceto real); valor_inicial e valor_final so do mesmo tipo de var_de_controle e delimitam a repetio do comando ou bloco de comandos. 6.1.2 EXEMPLO: Faa um algoritmo para calcular o resultado final de 45 alunos de uma turma, considerando que cada aluno tem duas notas e que ser considerado aprovado aquele aluno cuja mdia aritmtica das notas for igual ou superior a 7. Considere como dados de entrada o nome do aluno e suas notas. Dever ser fornecido, ao final, o nome do aluno, sua mdia e resultado (aprovado ou reprovado).

35

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

algoritmo resultado_final; caractere nome; real n1, n2, m ; inteiro x; inicio para x 1 at 45 faa inicio leia(nome); leia(n1, n2); m (n1+n2)/2; se m >= 7 ento escreva(nome, est aprovado com mdia , m) seno escreva(nome, foi reprovado e sua mdia , m); fim; fim. Analisemos o exemplo: A varivel de controle do comando para inicia a varivel x com o valor 1 e x ter seu valor incrementado em uma unidade at que ultrapasse o valor limite estabelecido em 45. A cada novo valor desta varivel de controle, que ainda no superou o valor limite, ser executado o bloco de instrues que lhe segue, onde so lidos os dados para cada aluno e determinado o seu resultado. A repetio dos comandos ser executada, portanto, at que a varivel x atinja o valor 46, que ultrapassa o limite superior de x. O acrscimo dado a varivel de controle do comando para denominado passo. Caso o problema exija, possvel determinar um acrscimo na varivel de controle maior do que a unidade, o que seria escrito na seguinte sintaxe: para var_de_controle valor_inicial at valor_final passo n faa O comando para executa a repetio de um bloco de comandos por um nmero fixo de vezes, que fica bem claro e determinado no cabealho do comando e o teste para determinar ou no a repetio executado antes da execuo do bloco de comandos. Observe: no dever haver, dentro do bloco de comandos a serem repetidos, nenhuma instruo que altere o valor da varivel de controle do comando para. A varivel de controle dever ter sua incrementao efetuada e controlada pelo comando para exclusivamente, de forma automtica, como se fosse um contador.

36

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Vejamos ento o que um contador. 6.2 CO TADORES E ACUMULADORES 6.2.1 CO TADORES Muitas vezes, dentro da lgica para resoluo de uma tarefa, necessitamos que uma varivel seja encarregada de armazenar o nmero de vezes que determinada condio foi satisfeita. EXEMPLO: Faa um algoritmo para ler 20 valores inteiros e informar quantos destes so pares. A resoluo do algoritmo vai envolver a repetio por 20 vezes de: Leitura de um valor inteiro; Testar o valor para verificar se par e caso for, acrescentar uma unidade varivel encarregada de contar os valores pares. algoritmo pares; inteiro numero, contador, x; inicio contador 0; para x 1 at 20 faa inicio leia(numero); se numero % 2 = 0 ento contador contador + 1; fim; escreva(Foram lidos , contador, valores pares.); fim. Observe a necessidade de atribuir zero inicialmente ao contador, para garantir que a cada nova execuo do programa, no permaneam valores anteriores na varivel, o que iria fornecer um resultado errado. Uma varivel contador uma varivel que recebe um valor inicial (normalmente zero) e incrementada posteriormente de algum valor constante (geralmente a unidade).

37

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

6.2.2 ACUMULADORES Outra situao frequente em algoritmos a necessidade de realizar o somatrio de determinados valores. Por exemplo, para calcular a mdia das notas finais de uma turma de 45 alunos, seria necessrio ir acumulando a mdia de cada aluno e aps, dividir a soma das mdias pelo nmero de alunos. A varivel encarregada de armazenar este somatrio conhecida em programao como acumulador. algoritmo media_da_turma; caractere nome; real n1, n2, m, acumulador; inteiro x; inicio acumulador 0; para x 1 at 45 faa incio leia(nome); leia(n1, n2); m (n1+n2)/2; acumulador acumulador + m; se m >= 7 ento escreva(nome, est aprovado com mdia , m) seno escreva(nome, foi reprovado e sua mdia , m); fim; escreva(A mdia da turma , acumulador/45); fim. Uma varivel utilizada como acumulador uma varivel que recebe um valor inicial (geralmente zero) e incrementada posteriormente de um valor varivel. 6.3 COMA DO E QUA TO 6.3.1 SI TAXE: enquanto condio faa Comando ou bloco de comandos; Onde: enquanto e faa so palavras reservadas do comando; condio uma expresso lgica.

38

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

O comando enquanto serve para estabelecermos que um comando ou um bloco de comandos deve ser executado repetidamente enquanto uma determinada condio for verdadeira. O fato de utilizar uma expresso lgica para controlar a repetio amplia bastante a utilizao do comando enquanto se comparado ao comando para, pois poderemos utiliz-lo para um nmero previamente conhecido de repeties e tambm para a situao em que o nmero de repeties a executar desconhecido. 6.3.2 EXEMPLOS Exemplo 1: Faa um algoritmo para calcular o resultado final de 45 alunos de uma turma, considerando que cada aluno tem duas notas e que ser considerado aprovado aquele aluno cuja mdia aritmtica das notas for igual ou superior a 7. Considere como dados de entrada, o nome do aluno e suas notas. Dever ser fornecido o nome do aluno, sua mdia e resultado. algoritmo resultado_final2; caractere nome; real n1, n2, m; inteiro x; inicio x 0; enquanto x < 45 faa inicio leia(nome); leia(n1, n2); m (n1+n2)/2; se m >= 7 ento escreva(nome, est aprovado com mdia , m); seno escreva(nome, foi reprovado e sua mdia , m); x x + 1; fim; fim. Como o comando enquanto controla a repetio atravs de uma condio e temos um nmero conhecido (45) de repeties a executar, necessitamos de uma varivel para fazer o papel de contador de repeties e sobre o seu valor estabelecermos o teste. Foi escolhida para contador a varivel x, que inicia com um valor igual a zero e incrementada aps cada repetio em uma unidade. Pense no que seria necessrio alterar no algoritmo acima se a varivel contador iniciasse com o valor 1.

39

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exemplo 2: Faa um algoritmo que dever calcular e informar a mdia de n nmeros inteiros lidos, encerrando a leitura destes nmeros com a entrada de um valor negativo. algoritmo media_de_valores; inteiro cont, valor; real acum, media; inicio cont 0; acum 0; leia(valor); enquanto valor >= 0 faa inico acum acum + valor; cont cont + 1; leia(valor); fim; se cont > 0 ento inicio media acum/cont; escreva(A mdia entre os valores lidos : , media); fim; fim. Observe: para que seja possvel a realizao do primeiro teste no comando enquanto necessria a leitura prvia de valor e a varivel valor dever ser lida novamente antes do final do bloco de repetio, para permitir novo teste no comando enquanto. 6.4 COMA DO REPITA 6.4.1 SI TAXE: repita Comando(s); at condio; Onde: repita e at so palavras reservadas do comando; condio uma expresso lgica.

O comando repita serve para estabelecermos que um ou vrios comandos sejam executados repetidamente at que uma determinada condio seja verdadeira.

40

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

O comando repita diferencia-se dos dois comandos de repetio anteriores por realizar o teste da condio de repetio aps a execuo de todos os comandos e por no necessitar da forma de bloco para delimitar os comandos que lhe so dependentes. 6.4.2 EXEMPLOS: Exemplo 1: Faa um algoritmo para calcular o resultado final de 45 alunos de uma turma, considerando que cada aluno tem duas notas e que ser considerado aprovado aquele aluno cuja mdia aritmtica das notas for igual ou superior a 7. Considere como dados de entrada, o nome do aluno e suas notas. Dever ser fornecido o nome do aluno, sua mdia e resultado. algoritmo resultado_final3; caractere nome; real n1, n2, m; inteiro x; inicio x 0; repita leia(nome); leia(n1, n2); m (n1+n2)/2; se m >= 7 ento escreva(nome, est aprovado com mdia , m) seno escreva(nome, foi reprovado e sua mdia , m); x x + 1; at x = 45; fim. Como o comando repita tambm controla a repetio atravs de uma condio e temos um nmero conhecido (45) de repeties a executar, necessitamos de uma varivel para servir como contador de repeties e sobre o seu valor estabelecermos o teste. Foi escolhida para contador a varivel x, que inicia com um valor igual a zero e incrementada aps cada repetio em uma unidade. Exemplo 2: Faa um algoritmo que dever calcular e informar a mdia de n nmeros inteiros lidos, encerrando a leitura destes nmeros com a entrada de um valor negativo. algoritmo media_de_valores; inteiro cont, valor; real acum, media;

41

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

inicio cont 0; acum 0; repita leia(valor); se valor >= 0 ento inicio acum acum + valor; cont cont + 1; fim; at valor < 0; se cont > 0 ento inicio media acum/cont; escreva(A mdia entre os valores lidos : , media); fim; fim. Observe: na resoluo do segundo exemplo foi necessrio introduzir mais um teste para impedir de acrescentar ao acumulador um valor negativo e para que o mesmo no fosse contado como valor vlido. Isto mostra que, devido a sua caracterstica de testar a condio depois de executar os comandos da repetio, no ser sempre o comando repita uma boa escolha. Neste exemplo o comando enquanto proporciona uma soluo melhor construda. ***************************************************************************** 6.5 EXERCCIOS PROPOSTOS (Exerccios identificados com (*) esto resolvidos ao final do captulo) 1. (*) Faa um algoritmo que leia cinco valores inteiros, calcule e escreva: a soma dos nmeros pares; o menor entre os valores lidos. 2. Faa um programa que calcule o fatorial de um nmero lido (n) por repetidas vezes. Encerra com n menor que zero. 3. Faa um algoritmo que apresente a srie de Fibonacci, at o dcimo quinto termo. A srie de Fibonacci formada pela seqncia: 1, 1, 2, 3, 5, 8, 13, 21, 34 (esta srie se caracteriza por iniciar com dois valores determinados que formam o primeiro e segundo termos (t1 = 1 e t2 = 1) e, a partir destes, cada termo obtido atravs da soma dos seus dois termos anteriores (t3 = t1+ t2) . 4. Faa um programa que l um nmero e informa se ele primo. (Os nmeros primos so divisveis por um e por si mesmos somente)

42

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

5. Duas tartarugas possuem 3,1 e 4,5 cm respectivamente. A menor tartaruga cresce 0,21 cm ao ano e a maior 0,16 cm ao ano. Faa um algoritmo que calcule o nmero de anos necessrios para que a tartaruga menor fique maior que a maior. 6. Faa um algoritmo que l um nmero indeterminado de valores, todos inteiros, um de cada vez, finalizando a leitura com o nmero zero e fornea como sada: a soma dos nmeros que esto no intervalo 10 (inclusive) a 20(inclusive); a mdia dos nmeros que esto no intervalo de 1 (inclusive) a 10 (exclusive); o menor entre os valores lidos. 7. Faa um algoritmo que leia um nmero inteiro repetidas vezes, paralisando a leitura com nmero <= zero e escreva, para cada valor lido, a soma de todos os nmeros menores e no submltiplos do nmero lido. 8. (*) Faa um programa que l duas notas de alunos e calcula suas mdias individuais e a mdia geral da turma. Finaliza com 5 alunos ou quando a mdia geral for menor ou igual a cinco. 9. Faa um programa que l nmeros inteiros e finaliza quando a soma destes atinge um valor superior a 30. 10. Faa um algoritmo para ler as notas (N1 e N2) de alunos (para um total de 5 alunos) e calcular suas mdias individuais, escrevendo, para cada um: "aprovado" - se mdia superior ou igual a sete, "reprovado" - se inferior a sete. O programa tambm dever informar a mdia geral da turma e o percentual de alunos aprovados. 11. Faa um algoritmo que calcule a mdia aritmtica de todos os nmeros pares que forem fornecidos pelo usurio. O valor de finalizao deve ser a entrada do nmero zero. O usurio pode entrar com nmeros mpares, mas estes no sero acumulados. 12. Faa um algoritmo para apresentar os quadrados dos nmeros inteiros mltiplos de 5 no intervalo de 15 a 100. 13. Construa um algoritmo que permita fazer um levantamento do estoque de vinhos de uma adega, tendo como dados de entrada tipos de vinho (branco, tinto e ros). Especifique a porcentagem de cada tipo sobre o total geral de vinhos. Considere que a quantidade de vinhos desconhecida (usar como finalizador da leitura a constante fim). 14. (*) Faa um algoritmo que escreve a tabuada at 10 dos dez primeiros nmeros inteiros positivos permitindo a repetio do clculo para novo nmero aps ler Sou Ncomo resposta para: Escrever nova tabuada(S/N)?. 15. Faa um algoritmo que calcule o imposto de renda de um grupo de contribuintes considerando que os dados de cada contribuinte, nmero do CPF, nmero de dependentes e renda mensal so valores fornecidos pelo usurio. Para cada contribuinte ser dado um desconto de 5% de salrio mnimo por dependente. Os valores da alquota para calculo do imposto so: At 2 salrios mnimos (exclusive) 2 (inclusive) .. 3 (inclusive) 3 (exclusive) .. 5 (inclusive) isento 5% 10%

43

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

5 (exclusive) .. 7 (inclusive) Acima de 7 salrios mnimos

15% 20%

O ltimo valor (para encerrar o programa), que no ser considerado, ter CPF igual a zero. Deve ser lido o valor atual do salrio mnimo. 16. Construa um algoritmo que, dado um conjunto de valores inteiros e positivos, determine qual o menor e o maior valor do conjunto. O final do conjunto de valores conhecido atravs do 0 (zero), que no deve ser considerado. 17. A converso de graus Farenheidt para centgrados obtida pela frmula C = (5*(f-32))/9. Escreva um algoritmo que calcule e escreva uma tabela de graus centgrados em funo de graus Farenheidt que varie de 50 a 150, de 1 em 1. 18. Elabore um algoritmo que calcule o valor de H, sendo que ele determinado pela srie: H = 1/1 + 3/2 + 5/3 + 7/4 + ... + 99/50 19. Elabore um algoritmo que efetue a soma de todos os nmeros mpares que so mltiplos de trs e que se encontram no conjunto dos nmeros de 1 at 500. 20. Considerando a altura dos N alunos de uma turma, faa um algoritmo para calcular a mdia das alturas e determinar a quantidade de alunos com altura > 1.60 e < 1.75 m. Encerrar leitura com altura <= 0. 21. Um banco utiliza recursos computacionais para efetuar suas transaes e uma das necessidades bancrias saber o total de dinheiro que o banco girou durante o dia. Para tanto, a cada dbito ou crdito que o caixa executa, digitado o respectivo valor, sendo que o dbito sempre precedido do sinal negativo. Faa um algoritmo para calcular o total de crditos e dbitos e o total global (movimento do dia) em valor absoluto. Encerrar entradas com zero. 22. Faa um algoritmo que escreva os 30 primeiros termos da seguinte srie: 0, 1, 2, 5, 12, 29. 23. Foi realizada uma pesquisa em um edifcio para otimizar a utilizao dos elevadores, para um nmero indeterminado de usurios. O edifcio possui quatro elevadores (a, b, c, d) que so usados livremente. Os usurios responderam as seguintes questes: qual o elevador utilizado(a,b,c,d); qual o turno, seguindo os cdigos: manh, tarde e noite (m, t, n). O algoritmo deve fornecer o elevador mais utilizado e qual o turno em que os elevadores so mais utilizados. Encerrar com um tipo invlido para elevador. 24. Faa um algoritmo que leia dia, ms e ano respectivamente, ou seja, uma data qualquer, e faa consistncia desta data (avaliar se valida ou no). O algoritmo dever prever teste para ano bissexto. Faa o algoritmo para ler datas repetidamente, finalizando leitura com dia = 0. 25. Faa um programa para verificar se um valor lido nmero perfeito. Para que um valor seja considerado nmero perfeito, a soma dos seus divisores deve resultar num valor igual a ele mesmo. (Ex: os divisores de 6 so: 1, 2, 3 que somados totalizam 6 6 quadrado perfeito).

44

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

26. Faa um programa que receba os nomes de 5 produtos de uma loja e o preo unitrio de cada um deles (em reais). O programa dever informar, com mensagens explicativas: o nome dos produtos cujo preo superior a 20 reais; o nome e o preo correspondente dos produtos cujo preo inferior a 10 reais; o preo mdio dos produtos; 27. Escrever um algoritmo que leia um nmero inteiro e positivo n por um nmero indeterminado de vezes. Se n for par, verificar e informar quantos divisores possui. Se n for mpar e menor que 8, escrever seu fatorial. Se n for mpar e maior ou igual a 8, escrever a soma dos inteiros de 1 a n. Finalizar com n <= 0. 28. Escreva um algoritmo que l um nmero no determinado de pares de valores a, b (com a < b) todos inteiros e positivos, um par de cada vez, calcula e escreve a soma dos n inteiros consecutivos a partir de a inclusive at b. Encerrar com valor = 0. 29. Escrever um algoritmo que l n, inteiro e positivo, calcula e escreve o termo de ordem n da sucesso abaixo: ordem: termo 1 -1 2 0 3 5 4 6 5 11 6 12 7 17 8 18 9 23 10 24

30. Fez-se uma pesquisa entre os 2500 habitantes de uma regio para coletar os seguintes dados: sexo, idade e altura. Escreva um algoritmo que l estas informaes e informa: A mdia da idade do grupo; A mdia da altura das mulheres com mais de 21 anos; A maior altura entre os homens; O percentual de pessoas com idade entre 18 e 30 anos. 31. Foi feita uma pesquisa nas 20 principais cidades do estado para coletar dados sobre acidentes de trnsito. Foram obtidos os seguintes dados: Cdigo da cidade (1 a 20); Nmero de veculos de passeio do ano 2001; Nmero de acidentes com vtimas do ano 2001. Escreva um algoritmo que l um conjunto de dados, conforme acima descrito, para cada cidade, um de cada vez, calcula e escreve: Qual o maior e o menor nmero de acidentes e a que cidade pertencem; Qual a mdia de veculos das cidades pesquisadas; Qual a mdia de acidentes entre as cidades pesquisadas. 32. Foi realizada uma pesquisa de algumas caractersticas fsicas da populao de uma certa regio. Foram entrevistadas 500 pessoas e coletados os seguintes dados: sexo: M (masculino) e F (feminino); cor dos olhos: A (azuis), V (verdes) e C (castanhos); cor dos cabelos: L (loiros), C (castanhos) e P (pretos); idade.

45

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Deseja-se saber: a maior idade do grupo; a quantidade de indivduos do sexo feminino, cuja idade est entre 18 e 35 anos e que tenham olhos verdes e cabelos loiros. 33. Faa um algoritmo que leia o nome e a idade dos nadadores de uma competio e classifique-os nas categorias abaixo: 5 a 7 anos : Infantil A; 8 a 11 anos: Infantil B; 12 a 14 anos: Juvenil A; 15 a 17 anos: Juvenil B. O algoritmo termina quando for lida idade = 0, devendo, ento, ser informado: quantos nadadores participaram em cada categoria; qual o percentual da cada categoria sobre o total de nadadores. 34. Foi realizada uma pesquisa em Santa Cruz, com um grupo de 1000 pessoas. De cada entrevistado foram colhidos os seguintes dados: clube de preferncia (G- Grmio; I Internacional; O Outros); cidade de origem (S Santa Cruz; O- Outras). Deseja-se saber: Nmero total de torcedores do Grmio e do Internacional; Nmero de pessoas nascidas em Santa Cruz e que no torcem nem pelo Grmio e nem pelo Inter. 35. A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando dados sobre o salrio e nmero de filhos. A prefeitura deseja saber: mdia do salrio da populao; mdia do nmero de filhos; maior salrio; percentual de pessoas com salrio at R$200,00. Encerrar a leitura dos dados com salrio negativo. 36. Em uma eleio presidencial existem quatro candidatos. Os votos so informados atravs de cdigos. Os dados utilizados para a contagem dos votos obedecem seguinte codificao: 1,2,3,4 = voto para os respectivos candidatos; 5 = voto nulo; 6 = voto em branco; 0 = encerrar leitura. Elabore um algoritmo que leia o cdigo do candidato e um voto. Calcule e escreva: total de votos para cada candidato; total de votos nulos. 37. Escrever um algoritmo que leia uma quantidade desconhecida de nmeros e conte quantos deles esto nos seguintes intervalos: [0, 25], [26, 50], [51, 75] e [76, 100]. A entrada de dados deve terminar quando for lido um nmero negativo.

46

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

38. Escreva um algoritmo que gere os nmeros de 1000 a 1999 e escreva aqueles que divididos por 11 do resto igual a 5. 39. Escrever um algoritmo que leia 5 conjuntos de 2 valores, o primeiro representando o nmero de um aluno, e o segundo representando a sua altura em centmetros. Encontre o aluno mais alto e o mais baixo. Mostre o nmero do aluno mais alto e do mais baixo, junto com suas alturas. 40. Escrever um algoritmo que calcule e escreva o produto dos nmeros primos entre 92 e 1478. ***************************************************************************** 6.6 EXERCCIOS RESOLVIDOS: Exerccio 1 resolvido com o comando para: Algoritmo C
algoritmo valores; inteiro v, s, me, x; inicio s 0; para x1 at 5 faa inicio leia(v); se x = 1 ento me v; seno se v < me ento me v; se v % 2 = 0 ento s s + v; fim; escreva(menor valor: , me); escreva('soma dos pares: , s); fim. #include <stdio.h> int v, s, me, x; void main(void){ s = 0; printf("Digite 5 valores inteiros\n"); for (x = 1; x <= 5; x++){ scanf("%i", &v); if (x == 1) me = v; else if (v < me) me = v; if (v % 2 == 0) s = s + v; } printf("Menor valor: %i", me); printf("\nSoma dos pares: %i\n", s); }

Exerccio 1 resolvido com o comando enquanto: Algoritmo C


programa valores; inteiro v, s, me, x; inicio x 1; enquanto x <= 5 faa inicio leia(v); se x = 1 ento me v; seno se v < me ento me v; se v % 2 = 0 ento #include <stdio.h> int v, s, me, x; void main(void){ printf("Digite 5 valores inteiros\n"); x = 1; s = 0; while (x <= 5){ scanf("\n%i", &v); if (x == 1) me = v; else if (v < me) me = v;

47

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

s s + v; if (v % 2 == 0) x x + 1; s = s + v; fim; x++; escreva(O menor entre os valores lidos } : , me); printf("\nMenor Valor %i", me); escreva(A soma dos nmeros pares : , printf("\nSoma dos pares: %i\n", s); s); } fim.

Exerccio 1 resolvido com repita: Algoritmo


algoritmo valores; inteiro v, s, me, x;

C
#include <stdio.h> int v, s, me, x;

inicio void main(void){ printf("Digite 5 valores inteiros\n"); x 1; x = 1; repita do{ leia(v); se x = 1 ento scanf("\n%i", &v); if (x == 1) me v me = v; seno else se v < me ento me v; if (v < me) me = v; se v % 2 = 0 ento if (v % 2 == 0) s s + v; s = s + v; x x + 1; at x = 6; x++; escreva(O menor entre os valores lidos : }while (x <= 5); printf("\nMenor Valor %i", me); , me); escreva(A soma dos nmeros pares : , printf("\nSoma dos pares:%i\n", s); s); } fim.

Exerccio 8: Algoritmo
algoritmo ex_8; real nota1, acummedial; inteiro a; nota2, mediaa,

C
#include <stdio.h> mediag, float nota1, nota2, mediaa, mediag, acummedia; int a; void main(void){ a = 1; acummedia = 0; mediag = 10; while (a <= 5 && mediag > 5){ printf("Digite as 2 notas do aluno %i\n", a); mediaa = 0; scanf("\n%f%f", &nota1, &nota2); mediaa = (nota1 + nota2)/2; acummedia = acummedia + mediaa; printf("\nMediaaluno:%.2f\n", mediaa); mediag = acummedia/a;

inicio a 1; acummedia 0; mediag 10; enquanto ((a <= 5) e (mediag > 5)) faa inicio mediaa 0; leia(nota1, nota2); mediaa (nota1 + nota2)/2; acummedia acummedia + mediaa; mediag acummedia/a;

48

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

a a + 1; escreva(Mdia aluno: , mediaa); fim; escreva(Mdia geral: , mediag); fim.

a = a + 1; } printf("\nMedia geral: %.2f\n", mediag); }

Exerccio 14: Algoritmo


algoritmo tabuada; caractere op; inteiro num, c; inicio repita escreva(Digite um nmero:); leia(num); para c1 at 10 faa escreva(c, x , num, = , c*num); escreva(Escrever a tabuada?(s/n):); leia(op); at (op = N) ou (op = n); fim.

C
#include <stdio.h> #include <conio.h> int op; int num, c; void main(void){ printf("\nEscrever a tabuada(s/n)?\n"); op = getch(); while (op == s || op == S){ printf("\nDigite o numero\n"); scanf("%i", &num); for (c = 1; c <= 10; c++) printf("\n%i x %i = %i", c, num, c*num); printf("\nEscrever a tabuada(s/n)?\n"); op = getch(); } return 0; }

49

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

7. TIPO ESTRUTURADO HOMOG EO: VETORES E MATRIZES


7.1 VETORES Um vetor um tipo de dados que permite que armazenemos na memria do computador um nmero determinado de dados, todos do mesmo tipo, que ficam organizados de forma bem estruturada. A declarao de uma varivel do tipo vetor tem a seguinte sintaxe: tipo_base identificador[tamanho]; Onde: Exemplo: inteiro v1[5]; Podemos desenhar a estrutura de v1 da seguinte forma:
v1 =

identificador o nome escolhido para a varivel; tamanho identifica o tamanho do vetor ou quantidade de elementos; tipo_base o tipo que tm os elementos do vetor.

Aps a leitura dos dados que sero armazenados em v1 teramos, por exemplo:
v1 =

10

21

Cada elemento de v1 tem uma posio bem definida, de tal forma que podemos afirmar que v1[2] = 5, ou seja, esta estrutura atribui um ndice a cada um dos seus elementos que identifica a posio do elemento na estrutura. Estes ndices sero sempre valores inteiros, consecutivos e a primeira posio do vetor sempre indicada pelo ndice 0 (zero). O acesso a qualquer dos elementos se dar atravs do seu ndice. Se fizermos as atribuies v1[1] 25 e v1[4] 30, teremos:
V1 =

25

30

Dadas estas caractersticas, conclumos que a leitura dos elementos de um vetor deve ser feita utilizando um comando de repetio, onde o teste de repetio se dar sobre uma varivel

50

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

do tipo inteiro, que iniciar com o valor 1 e ser incrementada at atingir o valor que define o tamanho do vetor. Adotando o vetor v1, acima declarado, mais uma varivel x do tipo inteiro, teramos: para x 0 at 4 faa leia(v1[x]); Da mesma forma, seria feita a apresentao dos elementos do vetor: para x 0 at 4 faa escreva(v1[x]); Exemplo: Faa um algoritmo para ler os elementos de um vetor (A) com 10 elementos inteiros e construir um segundo vetor (B) de mesma dimenso e cujos elementos sero os elementos de A multiplicados por 5. algoritmo vetor1; inteiro a[10], b[10], x; inicio para x 0 at 9 faa inicio leia(a[x]); b[x] a[x] * 5; fim; fim. 7.2 MATRIZES Como os vetores, as matrizes tambm permitem que armazenemos na memria do computador um nmero determinado de dados, todos do mesmo tipo, que ficam organizados de forma bem estruturada, porm cada elemento ter sua posio definida atravs de dois ndices. A declarao de uma varivel do tipo matriz tem a seguinte sintaxe: tipo_base identificador[m][n]; Onde: identificador o nome escolhido para a varivel; m identifica o nmero de linhas da matriz e n identifica o nmero de colunas; tipo_base o tipo que tm os elementos da matriz.

51

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exemplo: inteiro m1[2][3]; Podemos desenhar a estrutura de m1 da seguinte forma:


m1 =

Aps a leitura dos dados que sero armazenados em m1 teramos, por exemplo:
m1 =

30 11

5 42

22 13

Cada elemento de m1 tem uma posio bem definida, de tal forma que podemos afirmar que m1[1][2] = 13, ou seja, esta estrutura atribui dois ndices a cada um dos seus elementos que identificam a posio do elemento na estrutura. O primeiro ndice indica a linha e o segundo a coluna da matriz. Se fizermos as atribuies m1[0][1] 25 e m1[1][1] 10, 30 11 25 10 22 13 teremos:

m1 =

Dadas estas caractersticas, conclumos que a leitura dos elementos de uma matriz deve ser feita utilizando dois comandos de repetio aninhados. Adotando a matriz m1, acima declarada, mais duas variveis x e y, do tipo inteiro, teramos: para x 0 at 1 faa para y 0 at 2 faa leia(m1[x][y]); Da mesma forma, seria feita a apresentao dos elementos da matriz: para x 0 at 1 faa para y 0 at 2 faa escreva(m1[x][y]); Exemplo: Faa um algoritmo para ler os elementos de uma matriz (A) com 10 x 5 elementos inteiros e construir uma segunda matriz (B) de mesma dimenso e cujos elementos sero os elementos de A multiplicados por 5. algoritmo matriz1; inteiro a[10][5], b[10][5], x, y;

52

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

inicio para x 0 at 9 faa para y 0 at 4 faa inicio leia(a[x][y]); b[x][y] a[x][y] * 5; fim; fim. ***************************************************************************** 7.3 EXERCCIOS PROPOSTOS 1. Faa um algoritmo que leia, via teclado, 200 valores do tipo inteiro e armazene-os em um vetor. A seguir o algoritmo dever informar: todos os nmeros pares que existem no vetor; o menor e o maior valor existente no vetor; quantos dos valores do vetor so maiores que a mdia desses valores. 2. Crie um algoritmo para ler 100 nomes e imprimir o nome caso este seja 'Ado', informando tambm sua posio no vetor. 3. (*) Crie um algoritmo para ler 30 nmeros reais e imprimir os nmeros que esto nas posies pares do vetor. 4. Crie um algoritmo para ler 38 nmeros e imprimir a quantidade de nmeros primos existentes neste vetor. 5. Faa um algoritmo para localizar os nomes iguais existentes entre dois vetores, A com n elementos e B com m elementos, imprimindo o resultado para o usurio. Considere n = 20 e m = 25. Considere que no haver repetio de nomes no vetor A e nem no vetor B. 6. Fazer um algoritmo para ler 100 nmeros e imprimir um vetor resultante onde os elementos sero o dobro dos elementos lidos. 7. Escrever um algoritmo para ler um vetor com 100 elementos reais e inverter a posio destes elementos, de tal modo que o primeiro elemento venha a ser o ltimo depois da inverso. 8. Dado que para cada aluno de uma turma de 35 alunos se tenha, o seu nome e as notas de 3 avaliaes, faa um algoritmo que: Imprima o nome e a mdia de cada aluno; Calcule a percentagem de alunos com mdia acima da mdia da turma; Para cada aluno imprima uma mensagem dizendo se o aluno tem ou no notas repetidas; Determine quantos alunos tem pelo menos duas notas acima de 7; 9. Faa um algoritmo que leia nome, idade e sexo de 50 pessoas. Aps a leitura faa: Imprima o nome, idade e sexo das pessoas cuja idade seja maior que a idade da primeira pessoa. Imprima o nome e idade de todas as mulheres. Imprima o nome dos homens menores de 21 anos.
53

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

10. Faa um algoritmo para ler 2 nmeros, n1 e n2 . A soma destes no deve ultrapassar 10, se ultrapassar, os nmeros devero ser lidos novamente. A seguir, ler um vetor de 10 posies, de modo que contenha n1 valores mpares e n2 pares, obrigatoriamente. 11. Faa um algoritmo que leia o nome e trs notas de N alunos de um colgio. O usurio informar qual o valor de N, sendo possvel, porm, um mximo de 50 alunos. Aps a leitura faa: Imprima o nome e a mdia de cada aluno aprovado (Mdia >= 7.0); Imprima o nome e a mdia dos alunos reprovados (Mdia < 5.0); Imprima o percentual de alunos aprovados. 12. Dado nome, tempo de servio em anos e salrio de 30 funcionrios faa: Imprima o nome e o salrio dos funcionrios que ganham mais de R$ 500,00; Para os funcionrios que ganham menos de R$ 200,00 conceda um aumento de 20%; Para os funcionrios que trabalham a mais de 3 anos na empresa, fornea um aumento de R$100,00; Imprima nome e o novo salrio destes funcionrios aumentados. 13. Faa um algoritmo para ler 50 valores inteiros. Aps imprima tais valores ordenados crescentemente. 14. Faa um algoritmo que leia 25 valores numricos inteiros em um vetor e trs valores inteiros, nas variveis A, B e C. Aps a leitura, emita um relatrio com cada valor diferente de A, B e C e o nmero de vezes que o mesmo apareceu no vetor. 15. Faa um algoritmo que: Leia um vetor A com 10 elementos e um vetor B com 15 elementos do tipo real. Intercale estes vetores A e B, formando um outro vetor C da seguinte forma. C[1] A[1] C[2] B[1] C[3] A[2] C[4] B[2] Como A tem menos elementos que B, o vetor C dever ser preenchido ao final com os elementos restantes do vetor B. 16. Elaborar um algoritmo que l um conjunto de 30 valores e os coloca em 2 vetores conforme forem pares ou mpares. O tamanho de cada vetor de 5 posies. Se algum vetor estiver cheio, escrev-lo. Terminada a leitura, escrever o contedo dos dois vetores. Cada vetor pode ser preenchido tantas vezes quantas forem necessrias. 17. Dado um vetor V de 100 elementos inteiros faa um algoritmo que: Crie outro vetor W contendo os valores de V que esto no intervalo 10 (inclusive) a 40 (inclusive); Crie outro vetor Z contendo os valores de V que esto em posies mltiplas de 3 ou de 5. 18. Fazer um algoritmo que:

54

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

leia um vetor A com 30 valores inteiros; leia um outro vetor B com 30 valores inteiros; leia o valor de uma varivel X; fornea quais os elementos de A que so mltiplos de X e suas posies no vetor; informe o vetor soma de A e B.

19. Escreva um algoritmo que leia um vetor de inteiros com 20 posies e a seguir altere esse vetor de modo que os valores mpares apaream intercalados. 20. Faa um algoritmo que leia nome, idade e sexo de 50 pessoas. Aps a leitura faa: Imprima o nome, idade e sexo das pessoas cuja idade seja maior que a idade da primeira pessoa; Imprima o Nome e idade de todas as mulheres; Imprima o Nome dos homens menores de 21 anos. Todos os dados devem ser armazenados em vetores. 21. Escrever um algoritmo para ler uma matriz 5 X 5 de elementos inteiros, aps somar em um acumulador todos os elementos das linhas pares e em outro acumulador os elementos das linhas mpares 22. Faa um algoritmo para ler os valores inteiros de uma matriz com dimenso 4 x 6 e calcular quantos destes elementos so valores primos. 23. Faa um algoritmo que leia uma matriz 10 X 50 de valores inteiros e acumule somente os elementos que esto posicionados onde ambos os ndices sejam mltiplos de 3 ou de 5. 24. Faa um algoritmo para ler os valores de uma matriz com 4 linhas e 4 colunas e fornecer: A soma dos elementos da diagonal secundria; Os valores pares que compem a diagonal principal. 25. Faa um algoritmo que leia os valores reais de uma matriz 10 x 15 e fornea a soma dos elementos que se encontram em posies cuja soma dos ndices seja um nmero mpar. 26. Faa um programa que leia os elementos de uma matriz 5 x 7 de valores inteiros e fornea o maior e o menor elementos desta matriz e a posio em que esto dentro da estrutura. 27. Faa um algoritmo para ler as notas de uma turma com 30 alunos considerando trs notas por alunos. Utilize uma matriz para armazenar estes valores considerando que em cada linha da matriz estaro as trs notas de cada aluno. O algoritmo dever calcular a mdia aritmtica de cada aluno e a mdia geral da turma. 28. Escreva um algoritmo que leia uma matriz 5 X 6 de valores reais, a seguir divida cada um dos nmeros de cada linha pelo maior nmero da linha, criando assim uma nova matriz. Escreva a matriz original e a nova matriz. 29. Ler um vetor de 25 elementos inteiros e a partir desse vetor, criar uma matriz 5 X 5 preenchendo-a da seguinte forma: os cinco primeiros elementos do vetor formaro a primeira linha, os prximos 5 elementos formaro a segunda linha e assim por diante. Imprimir o vetor e a matriz no final.
55

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

30. Escreva um algoritmo que l uma matriz M (5 x 5) e troque a seguir, conforme abaixo indicado: A linha 2 com a linha 5; A coluna 1 com a coluna 4; A diagonal principal com a diagonal secundria. 31. Escreva um algoritmo que l uma matriz M (5 x 5) e cria dois vetores SL e SC que contenham, respectivamente, as somas das linhas e das colunas de M. Escrever os vetores. 32. Ler um vetor de 5 elementos inteiros e preencher cada linha de uma matriz de 3 X 5 com esse vetor. 33. Escrever um algoritmo que l uma matriz A(15 x 5) e a escreva. Verifique, a seguir, quais os elementos de A que esto repetidos e quantas vezes cada um est repetido. Escrever cada elemento repetido com uma mensagem dizendo que o elemento aparece X vezes em A. 34. Ler um nmero no determinado de valores inteiros at que o nmero lido seja 0 e, para cada nmero lido, verificar se ele pertence a uma matriz 8x8, cujos valores, tambm inteiros, j haviam sido lidos anteriormente. Em caso afirmativo, escreva o valor, e a posio em que foi encontrado, caso contrrio, escreva o valor e a mensagem No encontrado. 35. Escreva um algoritmo que leia uma matriz M (5 x 5) e determine o elemento minimax desta matriz, escrevendo o seu valor e a posio em que se encontra na matriz. O elemento minimax de uma matriz o menor elemento da linha em que se encontra o maior elemento da matriz. 36. Escrever um algoritmo que l um vetor G com 13 elementos inteiros que o gabarito de um teste da loteria esportiva. Neste vetor sero lidos os valores 1 (para coluna 1), 2 (para coluna 2) e 3 (para coluna do meio). Ler, a seguir, para cada 50 apostadores, o nmero de seu carto e um vetor R, com 13 elementos, onde estaro as suas apostas e cujos valores tambm sero 1, 2 ou 3. Aps: verificar para cada apostador o nmero de acertos e escrever o nmero de seu carto e seu nmero de acertos; para cada jogador que tiver 13 acertos, acrescentar a mensagem: "GANHADOR"; no final escrever quantos apostadores conseguiram 13 pontos e quantos no acertaram nenhum ponto. 37. Escrever um algoritmo que l uma matriz M (5 x 5) e um valor A, inteiro e multiplica cada elemento de M pelo valor A e coloca estes resultados em um vetor com 25 elementos. O algoritmo dever escrever os valores do vetor. 38. Faa um algoritmo que leia uma matriz 4 x 2 de elementos inteiros e calcule a sua transposta, sabendo que a transposta de uma matriz m uma outra matriz n obtida da seguinte forma: as linhas de m passam a ser as colunas de n. Ex: sendo m uma matriz 3x3 e n a sua transposta

56

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

1 2 3 m=4 5 6 7 8 9

1 4 7 n =2 5 8 3 6 9

39. Deseja-se fazer uma pesquisa a respeito do consumo de energia eltrica em uma determinada cidade. Para isso deve ser lido um vetor com 12 elementos reais, onde cada elemento representa o consumo em KWH de um ms do ano. Calcular e escrever os seguintes resultados para cada habitante: o menor e o maior consumo residencial e o ms que ocorreu; a mdia do consumo residencial nos meses de vero (1,2,12) e nos meses de inverno (6,7,8). Considere um total de 100 moradores para a pesquisa. 40. Faa um programa que leia uma matriz A 2 x 3 com elementos inteiros e uma matriz B 3 x 2 tambm com elementos inteiros, calcule e informe a matriz C, que o resultado da multiplicao de A por B. 41. Faa um algoritmo que calcule a multiplicao de duas matrizes A e B, sendo inicialmente lidos os valores que correspondem ao nmero de linhas e colunas destas matrizes. Dever, ento, ser feito o teste para verificar se pode ocorrer multiplicao entre A e B e caso seja possvel, o algoritmo dever ler as duas matrizes e informar a sua multiplicao. 42. Faa um algoritmo que utiliza uma matriz 4 x 3 para ler os preos de trs produtos da cesta bsica (colunas) em quatro supermercados (linhas). O algoritmo dever calcular e informar: a posio (linha e coluna) do maior preo; a soma dos produtos por supermercado; a mdia dos preos de cada produto. 43. Faa um programa que leia uma matriz 8x8 de inteiros e informe a mdia dos valores que se encontram acima da diagonal principal. 44. Faa um programa que leia uma matriz 12x12 e calcule e escreva a soma da rea hachurada na letra a e o maior elemento da rea hachurada na letra b abaixo:

45. Faa um programa que leia os valores inteiros de uma matriz 3 x 3 e crie a partir destes um vetor cujos elementos sejam o fatorial dos elementos da matriz lida

57

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

***************************************************************************** 7.4 EXERCCIOS RESOLVIDOS Faa um algoritmo para ler os valores (inteiros) de um vetor com 10 posies, sendo que o valor lido somente ser aceito se for mltiplo do ndice correspondente. Algoritmo C
algoritmo multiplo; inteiro n, i, vet[10] ; inicio escreva('forneca os valores do vetor'); para i 0 at 9 faa inicio leia(n); se i > 0 ento enquanto (n <= i) ou (n % i <> 0) faa leian(n); vet[i] n; fim; para i 0 at 9 faa escreva(vet[i]); fim. #include<stdio.h> int n, i, vet[10]; void main(void){ printf("Forneca os valores do vetor\n"); for (i = 0; i <= 9; i++){ scanf("%i", &n); if(i > 0) while ((n<=i) || (n%i!=0)){ printf("\nInvalido\n"); scanf("%i",&n); } vet[i]=n; } for (i = 0; i <= 9;i++) printf("\nposicao %i valor = %i ",i,vet[i]); return 0; }

Faa um programa que leia um vetor com 30 elementos do tipo real e informe os que se encontram em posies pares do vetor. Algoritmo C
algoritmo vetor_pares; real vetor[30] ; inteiro x; inicio para x0 at 30 faa leia(vetor[x]); para x0 at 29 faa se x % 2 = 0 ento escreva(vetor[x]); fim. #include <stdio.h> float vetor[30]; int x; void main(void){ printf("Digite os valores do vetor\n"); for (x=0; x<=29; x++) scanf("%f", &vetor[x]); printf("\nEstes sao os valores das posicoes pares:\n"); for (x=0; x<=29; x++) if (x%2==0) printf("%.2f ",vetor[x]); return 0; }

58

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Escreva um algoritmo que leia duas matrizes M1(2x3) e M2(2x3) de elementos inteiros e cria: uma matriz M3 que seja a soma de M1 e M2 e uma matriz M4 que seja a diferena de M1 e M2; Algoritmo C
algoritmo matriz; #include <stdio.h> #include <conio.h> inteiro m1[2][3], m2[2][3], m3[2][3], m4[2][3]; int m1[2][3], m2[2][3],m3[2][3],m4[2][3],x,y; inteiro x,y; void main(void) inicio { para x0 at 1 faa printf("Digite os valores de m1 e depois de m2"); para y0 at 2 faa for (x=0;x<2;x++) inicio for (y=0;y<3;y++){ leia(m1[x][y]); move((x+1)*2,(y+1)*5); leia(m2[x][y]); scanw("%i",&m1[x][y]); fim; } para x0 at 1 faa for (x=0;x<2;x++) para y0 at 2 faa for (y=0;y<3;y++){ inicio move((x+1)*2,(y+1)*5+30); m3[x][y]m1[x][y]+m2[x][y]; scanw("%i",&m2[x][y]); m4[x][y]m1[x][y]-m2[x][y]; } fim; for (x=0;x<2;x++) para x0 at 1 faa for (y=0;y<3;y++){ para y0 at 2 faa m3[x][y]=m1[x][y]+m2[x][y]; escreva(m3[x][y]); m4[x][y]=m1[x][y]-m2[x][y]; para x0 at 1 faa } para y0 at 2faa move((x+1)*2,(y+1*5)); escreva(m4[x][y]); printw("\nResultados:"); fim. for (x=0;x<2;x++) for (y=0;y<3;y++) { move((x+5)*2,(y+1)*5); printw("%i",m3[x][y]); move((x+5)*2,(y+1)*5+30); printw("%i",m4[x][y]); } getch(); endwin(); return 0; }

59

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

8. COMA DOS BSICOS DA LI GUAGEM C


Este captulo dedicado a apresentar os comandos bsicos da linguagem C para possibilitar a execuo em computador dos algoritmos estudados. A traduo dos algoritmos para C no tarefa obrigatria da disciplina, mas recomendada como facilitadora do aprendizado. Este material foi baseado no compilador Turbo C/C++ da Borland para sistema operacional DOS, que ser utilizado nas aulas prticas e encontra-se instalado nos laboratrios de programao da UNISC. 8.1 ESTRUTURA BSICA DE UM PROGRAMA C Um programa em C constitudo de uma ou mais funes. Uma destas funes dever ser, necessariamente denominada main esta funo em um programa C ser sempre aquela que executada primeiro (por isso chamada de principal). O contedo da disciplina no envolve a teoria de diviso da tarefa de um algoritmo em subprogramas, assim, teremos sempre apenas uma funo, a funo main. Tipicamente, nossos programas em C tero a seguinte estrutura: #include <nome da bibblioteca> void main (void) { comando; comando; ------------; ------------; } A primeira linha, que inicia com #include serve para identificar as bibliotecas que sero necessrias na execuo do programa porque o compilador far uso de comandos (funes), que esto implementados nestas bibliotecas. J a segunda linha o cabealho da funo principal. Funes so blocos de comandos que sempre retornam um valor e por isso necessrio declararmos um tipo para cada funo criada. Porm a funo principal no retorna nenhum valor e especificamos isso atravs da declarao void. O tipo void especifica que uma varivel ou funo no possui valor. Da mesma forma, declaramos void dentro dos parnteses para indicar que main no possui parmetros. O smbolo de abertura de chaves ( { ) da terceira linha identifica o incio do bloco de comandos da funo que deve ser encerrado com o smbolo de fechar chaves ( } ).

60

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Existe uma tradio entre os profissionais da rea de Computao que consiste em escrever o primeiro programa em determinada linguagem apresentando-se ao mundo: #include <stdio.h> /*acesso a biblioteca stdio.h que contm (entre outras) as funes pritf() e getch() usadas no programa*/ int main(void) { /*inicio do bloco de comandos da funo*/ printf("Ola Mundo!"); /* esta funo faz a sada de dados na tela*/ return (0); /* main sempre retorna 0 (zero) */ } /*fim do bloco de comandos da funo*/

8.2 TIPOS DE DADOS A tabela abaixo apresenta alguns tipos bsicos em C , seu consumo de memria em Bytes, a escala dos valores que poden armazenar e sua correspondncia em portugol. Tipos em C char int float double void Bytes 1 2 4 8 0 Escala -128 a 127 -32768 a 32767 3.4 E -38 a 3.4 E 38 1.7E-308 a 1.7E+308 sem valor Tipos em portugol Caractere Inteiro real preciso simples real preciso dupla No existe

C no possui o tipo booleano, ou lgico, e considera resultado falso em testes quando uma varivel ou expresso equivale a 0 (zero). Os demais valores (1, 67, a, -1) so considerados resultado verdadeiro. Para declararmos uma varivel que comporte uma cadeia de caracteres devemos declarar um vetor de char. As variveis do tipo char devero receber valores entre aspas simples ( ).

Os nomes escolhidos para variveis e constantes deve seguir as mesmas regras vistas para algoritmos em pseudocdigo (portugol) mas o nome de uma varivel no pode ser igual a uma palavra reservada, nem igual ao nome de uma funo declarada pelo programador, ou pelas bibliotecas do C. Variveis de at 32 caracteres so aceitas. O C "case sensitive" e, portanto, deve-se prestar ateno s maisculas e minsculas. Costuma-se

61

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

usar letras minsculas para nomes de variveis e maisculas para nomes de constantes. Isto facilita na hora da leitura do cdigo. Dica: se escolhermos nomes em portugus, estaremos evitando utilizar palavras da linguagem, que so todas em ingls. Abaixo um a tabela com as palavras reservadas da linguagem. Auto break Case Char continue Default Do Double Else Entry Extern Float For Goto if int long register return sizeof short static struct switch typedef union unsigned while

8.3 DECLARAO DE VARIVEIS E CO STA TES, COMA DO DE ATRIBUIO Declarao de Variveis As variveis no C devem ser declaradas antes de serem usadas. A declarao feita

escrevendo o tipo da varivel, a seguir seu identificador e o sinal de ; (ponto e vrgula). tipo_da_varivel lista_de_variveis; Ex: int idade; float valor, salario; char letra, opo

Definio de Constantes As constantes referem-se a valores fixos que o programa no pode alterar e podem ser de

qualquer um dos tipos bsicos de dados. Sua definio iniciado pela declarao const seguida pelo identificador da constante o sinal de igualdade, o valor da constante e o sinal de ponto e vrgula. Ex: const PI = 3.15; Atribuio de Valor O sinal de igualdade utilizado para atribuies de valor, para constantes e variveis.

62

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

#include <stdio.h> const V=3; int a; int main(void) { a=V*2; printf(" %d",a); } Os valores literais (alfanumricos) que so impressos na tela atravs do comando de sada, devem ser considerados como constantes. Conforme o tipo da constante, ser sua representao. Constantes de caractere so envolvidas por aspas simples (); Ex; a Constantes formadas por cadeia de caracteres so envolvidas por aspas duplas; Ex: Tecle algo para sair do programa Constantes com valor inteiro so representadas por um nmero inteiro; Ex: 10, -100 Constantes com valor real (float) devem apresentar o ponto decimal seguido da parte fracionria do nmero; Ex: 19.55

8.4 OPERADORES E FU ES Operadores aritmticos Operador + * / % -++ Ao Soma (inteira e ponto flutuante) Subtrao ou Troca de sinal (inteira e ponto flutuante) Multiplicao (inteira e ponto flutuante) Diviso (inteira e ponto flutuante) Resto de diviso (de inteiros) Decremento Incremento

63

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

O operador / (diviso) quando aplicado a variveis inteiras, fornece o resultado da diviso inteira; quando aplicado a variveis em ponto flutuante fornece o resultado da diviso "real". O operador % fornece o resto da diviso de dois inteiros. Observe o trecho de cdigo a seguir, int float { a=17; b=3; z=17.0 x = a / b; y = a % b; z1 = z / b; z2 = a/b; } ao final da execuo destas linhas, os valores calculados seriam x = 5, y = 2, z1 = 5.666666 e z2 = 5.0 . Note que, na linha correspondente a z2, primeiramente feita uma diviso inteira (pois os dois operandos so inteiros). Somente aps efetuada a diviso que o resultado atribudo a uma varivel float. 8.5 FU ES PARA CLCULOS MATEMTICOS So funes implementadas na biblioteca math.h. Na tabela a seguir so apresentadas algumas funes matemticas em C
Resultado Logaritmo neperiano Logaritmo base 10 e elevado potencia x Valor absoluto de x funo log(x) log10(x) exp(x) fabs(x) abs(x) Decompe um real x em duas partes: y recebe a parte fracionaria e a funo devolve a parte inteira, ambas como real Arredonda o valor de x para cima Arredonda o valor de x para baixo modf(x,y) tipo do tipo do argumento resultado Real real Real Real Real Int Real, real real real real int real

a ,b, x, y; z , z1, z2;

ceil (x) floor(x)

Real Real

real real

64

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Retorna x elevado a potncia y Raiz quadrada de x Retorna o resto da diviso de x por y Ex: fmod (25.55 , 2) = 1.55 Seno de x Cosseno de x Arco-tangente de x

pow(x,y) sqrt(x ) fmod(x,y) sin(x ) cos( x) atan( x)

Real Real Real, real Real Real Real

real real real real real real

8.6 OPERADORES RELACIO AIS

Operador > >= < <= == != 8.7 OPERADORES LGICOS

Ao Maior do que Maior ou igual a Menor do que Menor ou igual a Igual a Diferente de

Operador && || !

Ao E OU NO

8.8 FU ES DE E TRADA E SADA DE DADOS 8.8.1 FU ES DE SADA DE DADOS Forma Geral: printf (expresso de controle, lista de argumentos); Esta funo permite escrever na tela um comando da biblioteca stdio.h A expresso de controle pode conter caracteres que sero exibidos na tela e os cdigos de formatao (ou controle) que indicam o formato em que os argumentos devero ser impressos. Cada argumento deve ser separado por vrgula. Os cdigos de controle usam a notao % para formatar variveis e \ para formatar a disposio na tela (quebra d linha, tabulao, etc). Para cada formatao de varivel na expresso de controle deve haver uma varivel na lista de argumentos.

65

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

printf("O MDC entre %d e %d eh: %d\n",m,n,x); Cdigos de controle para formatar variveis: Cdigo %d %f %c %s %% Significado Inteiro Float Caractere String Coloca na tela um %

Cdigos de controle para disposio na tela Cdigo \b \f \n \t \" \' \0 \\ \v \a \N \xN Significado Retrocesso ("back") Alimentao de formulrio ("form feed") Nova linha ("new line") Tabulao horizontal ("tab") Aspas Apstrofo Nulo (0 em decimal) Barra invertida Tabulao vertical Sinal sonoro ("beep") Constante octal (N o valor da constante) Constante hexadecimal (N o valor da constante)

Na lista de argumentos pode haver variveis e/ou constantes, sempre separadas por vrgula, veja o exemplo do trecho de programa abaixo: int p p= 65487 * 236597 ; printf("O Produto entre %d e %d eh: %d\n",65487, 236597 ,p); A funo printf(): Imprime a partir do ltimo caracter impresso. No muda de linha at que a linha acabe ou que encontre um \n.

66

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Alguns exemplos de printf() e o que eles exibem:

printf ("Teste %% %%") -> "Teste % %" printf ("%f",40.345) -> "40.345" printf ("Um caractere %c e um inteiro %d",'D',120) -> "Um caractere D e um inteiro 120" printf ("%s e um exemplo","Este") -> "Este e um exemplo" printf ("%s%d%%","Juros de ",10) -> "Juros de 10%" 8.8.2 FU ES DE E TRADA DE DADOS Permitem ler dados pelo teclado. Sua sintaxe semelhante ao printf: Forma Geral: scanf(expresso de controle, lista de argumentos); A expresso de controle pode conter cdigos de formatao, precedidos por %. A lista de argumentos: Depende da String de Formato. Separados por ,. Sempre variveis. As variveis devem ser precedidas por &

int mat; float media; int main (void) { printf(Entre com a matrcula do aluno e sua media: "); scanf(%d %f, &mat, &media); -------; --------; } %* indica que ser lido um valor do tipo especificado, mas no ser atribudo a nenhuma varivel (sem parmetro na lista de argumentos). A lista de argumentos consiste ento no endereo das variveis. C oferece um operador para tipos bsicos chamado operador de endereo &, que retorna o endereo do operando. Exemplo para o operador de endereos:

67

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

int main( void ){ int num; num = 2; printf (Valor %d, endereo = %u, num, &num); } O programa acima imprime o valor e o endereo de memria de num. %u usado pois endereo visto como inteiro sem sinal. Ex. de sada: Valor=2, endereo = 1370 8.8.3 REVE DO A FORMATAO DE DADOS Conforme o item anterior a cada um dos 4 tipos de dados base corresponde um caractere de formatao especial para as instrues printf e scanf:

%d

ou %i

para int

%f para float %lf para double %e para double em notao cientfica %c para char %u para valor sem sinal %g para o compilador escolher a forma mais curta entre float e notao cientfica.

Exemplo: #include <stdio.h> int i; float x; double y; char c; void main(void){ i = 347; x = 3.558; y = 2.9E7; c = 'Z'; printf("valor de i = %d\n", i ); printf("valor de x = %f\n", x ); printf("valor de y = %lf\n", y ); printf("valor de c = %c\n", c ); }

68

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Ao ser executado, o programa vai mostra na tela o seguinte: valor de i = 347 valor de x = 3.558000 valor de y = 29000000.000000 valor de c = Z Para se alterar o nmero de casas decimais quando se pretende escrever uma varivel do tipo float ou double, deve acrescentar-se ao %f ou %e o nmero de preciso desejada precedido de ponto. Por exemplo, se no exemplo acima tivssemos escrito:
... printf("valor de x = %.2f\n", x ); ...

iria aparecer escrito:


valor de x = 3.56

Veja mais em Schildt, 1996, pgina 209. 8.8.4 LEITURA DE CADEIA DE CARACTERES (STRI G) No C uma string um vetor de caracteres terminado com um caractere nulo. O caracter nulo um caractere com valor inteiro igual a zero (cdigo ASCII igual a 0). Forma geral da declarao: char nome_da_string[tamanho]; Isto declara um vetor de caracteres (uma string) com nmero de posies igual a tamanho. Note que, como temos que reservar um caractere para ser o terminador nulo, temos que declarar o comprimento da string como sendo, no mnimo, um caractere maior que a maior string que pretendemos armazenar. Supondo a declarao de uma string de 7 posies e coloquemos a palavra Joo nela. Teremos: J o a o \0 Neste caso as duas clulas vazias tm valores indeterminados. Isto acontece porque o C no inicializa variveis, cabendo ao programador esta tarefa. Portanto as nicas clulas que so inicializadas so as que contm os caracteres 'J', 'o', 'a', 'o' e '\0' (este ltimo o caracter nulo). Se quisermos ler uma string fornecida pelo usurio podemos usar a funo gets(). Um exemplo do uso desta funo apresentado abaixo. A funo gets() coloca o terminador nulo na string, quando voc aperta a tecla "Enter".

69

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

#include <stdio.h> int main (void) { char string[100]; printf ("Digite uma string: "); gets (string); printf ("\n\nVoce digitou %s",string); return(0); } Neste exemplo o tamanho mximo que pode ser lido na string uma seqncia de 99 caracteres. Como as strings so vetores de caracteres, para se acessar um determinado caractere de uma string, basta "indexarmos", ou seja, usarmos um ndice para acessarmos o caractere desejado dentro da string. Supondo uma string chamada s que est armazenado Paula . Podemos acessar a segunda letra de s da seguinte forma: str[1] = 'a'; Na linguagem C, o ndice de um vetor comea em zero. Assim, a primeira letra da string sempre estar na posio 0. A segunda letra sempre estar na posio 1 e assim sucessivamente. Para ler uma string fornecida pelo usurio podemos usar a funo gets(). Um exemplo do uso desta funo apresentado abaixo. A funo gets() coloca o terminador nulo na string, quando voc aperta a tecla "Enter". #include <stdio.h> char string[100]; int main (void) { printf ("Digite uma string: "); gets (string); printf ("\n\nVoce digitou %s",string); } Neste programa, o tamanho mximo da string que voc pode entrar uma string de 99 caracteres.

70

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

8.9 COMA DOS CO DICIO AIS 8.9.1 COMA DO IF O comando IF especifica que um comando deve ser executado somente se o resultado de uma expresso lgica (boolean ) for verdadeira. Se for falsa, ento outro comando deve ser executado, ou nenhum comando da sua estrutura deve ser executado. Formas do comando IF: A) if (condio) instruo; A condio ser avaliada, se for zero (se for falsa) a instruo no ser executada. Se a condio for verdadeira (diferente de zero) a instruo ser realizada. Instruo pode ser um bloco de comandos, neste caso sero delimitados por chaves. Exemplo: #include <stdio.h> #include<conio.h> int num; int main(void) { printf ("Digite um numero: "); scanf ("%d",&num); if (num>10) printf ("\n\n O numero e maior que 10"); if (num==10) { printf ("\n\nVoce acertou!\n"); printf ("O numero e igual a 10."); } if (num<10) printf ("\n\nO numero e menor que 10"); } B) if (condio) comando1; else comando2;

71

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Neste caso, se a condio for verdadeira ser executado o comando 1. Caso a condio for falsa, ser executado o comando 2. Tanto o comando 1 como o comando 2 podem conter blocos. Exemplos: #include <stdio.h> int num; int main (void) { printf ("Digite um numero: "); scanf ("%d",&num); if (num==10) { printf ("\n\nVoce acertou!\n"); printf ("O numero e igual a 10.\n"); } else { printf ("\n\nVoce errou!\n"); printf ("O numero e diferente de 10.\n"); } } Exemplo para ifs aninhados: #include <stdio.h> int num; int main (void) { printf ("Digite um numero: "); scanf ("%d",&num); if (num==10) { printf ("\n\nVoce acertou!\n"); printf ("O numero e igual a 10.\n"); } else if (num>10) printf ("O numero e maior que 10."); else printf ("O numero e menor que 10."); }

72

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

8.10 COMA DO CO DICIO AL SWITCH O comando switch prprio para se testar uma varivel em relao a diversos valores pr-estabelecidos. basicamente usado na implementao de menus. Sua forma geral : switch (varivel) { case constante_1: declarao_1; break; case constante_2: declarao_2; break; . .. case constante_n: declarao_n; break; default declarao_default; } A estrutura switch no aceita condies, apenas constantes. O switch testa a varivel e executa a declarao cujo case corresponda ao valor atual da varivel. A declarao default opcional e ser executada apenas se a varivel, que est sendo testada, no for igual a nenhuma das constantes. No h necessidade de chaves envolvendo as instrues de cada case, pois estas instrues no so consideradas um bloco, mas deve haver um conjunto de chaves envolvendo todo o corpo de cases, incluindo default. O comando break, faz com que o switch seja interrompido assim que uma das declaraes seja executada. Mas ele no essencial ao comando switch. Se aps a execuo da declarao no houver um break, o programa continuar executando os cases do switch, na ordem seqencial, at o fim do switch.
#include <stdio.h> int num; int main (void) { printf ("Digite um numero: "); scanf ("%d",&num); switch (num) { case 9: printf ("\n\nO numero e igual a 9.\n"); break; case 10: printf ("\n\nO numero e igual a 10.\n");

73

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

break; case 11: printf ("\n\nO numero e igual a 11.\n"); break; default: printf ("\n\nO numero no e nem 9 nem 10 nem 11.\n"); } }

8.11 COMA DOS DE REPETIO 8.11.1 COMA DO FOR Forma geral: for (inicializao;teste;incremento) comando ou bloco; Havendo um bloco de comandos, este dever ser envolvido por chaves. Exemplo: #include <stdio.h> int count; int main (void) { for (count=1; count<=100; count++) printf ("%d ",count); } 8.11.2 COMA DO WHILE Forma Geral : while (condio) comando ou bloco; Exemplo: #include <stdio.h> int ch; void main(void) { ch= 0; while (ch >=0 scanf(%d,&ch); } 8.11.3 COMA DO DO-WHILE Forma geral:

74

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

do { instruo; } while (condio); Mesmo que a declarao seja apenas um comando uma boa prtica deixar as chaves. O ponto-e- vrgula final obrigatrio. A estrutura do-while executa a instruo, testa a condio e, se esta for verdadeira, volta para a instruo. Este comando, ao contrrio do for e do while, garante que a instruo ser executada pelo menos uma vez. 8.12 TIPO ESTRUTURADO HOMOG EO Forma Geral:
tipo_da_varivel nome_da_varivel [tamanho];

Cada elemento deste tipo distinguido pelo ndice que referencia sua posio dentro da estrutura. 8.12.1 VETOR: Estrutura unidimensional onde cada elemento referenciado por uma varivel com um nico ndice. Forma geral: tipo_da_varivel nome_da_varivel [tamanho]; Exemplo: int vet [10]; Na linguagem C o primeiro elemento est na posio zero. Isto significa que, no exemplo acima, os dados sero indexados de 0 a 9. Para acess-los vamos escrever: vet[0] vet[1] . . . vet[9]

75

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

A linguagem C, no entanto no vai impedi-lo de escrever: vet[10] O C no verifica se o ndice que voc usou est dentro dos limites vlidos, isto tarefa para o programador. Exemplo de utilizao de vetores: #include <stdio.h> int num[3]; /* Declara um vetor de inteiros de 3 posies */ int x=0; int totalnums; int main (void) { do { printf ("\nEntre com um numero (999 p/ terminar): "); scanf ("%d",&num[x]); x++; } while (num[x-1]!=999); totalnums=x-1; printf ("\n\n\n\t Os nmeros que voc digitou foram:\n\n"); for (x=0;x<totalnums;x++) printf (" %d",num[x]); } No exemplo acima, o inteiro x inicializado em . O programa pede pela entrada de nmeros at que o usurio entre com o flag 999. Os nmeros so armazenados no vetor num. A cada nmero armazenado, o contador do vetor incrementado para, na prxima iterao, armazenar na prxima posio do vetor. Quando o usurio digita o flag, o programa abandona o primeiro loop e armazena o total de nmeros gravados. Por fim, todos os nmeros so impressos. Se o usurio digitar mais de 3 nmeros, estes sero lidos normalmente, mas sero armazenados em uma parte no alocada de memria, pois o espao alocado foi para somente 3 inteiros. Isto pode resultar nos mais variados erros no instante da execuo do programa. 8.12.2 MATRIZ Estrutura bidimensional onde cada elemento referenciado por uma varivel com dois ndices. Forma geral: tipo_da_varivel nome_da_varivel [linhas][colunas]

76

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exemplo: int mat[10] [10]; A declarao acima armazena espao em memria para uma tabela com 10 linhas e 10 colunas. Como nos vetores os ndices variam de zero ao valor declarado, menos um porm o C no vai verificar isto para o usurio. Manter os ndices na faixa permitida tarefa do programador. Exemplo: #include <stdio.h> int mat [20][10]; int i,j,c; int main (void) { c=1; for (i=0;i<20;i++) for (j=0;j<10;j++) { mat[i][j]=c; c++; } } No exemplo acima, a matriz mat preenchida, sequencialmente por linhas, com os nmeros de 1 a 200. Bibliografia FARRER, Harry. Programao estruturada de computadores: Algoritmos Estruturados. Rio de Janeiro: Editora Guanabara Dois S.A, 1985. FORBELLONE, Andr L. V.. Lgica de Programao A construo de Algoritmos e Estruturas de Dados. So Paulo: Makron Books, 1993 GUIMARES, Angelo de Moura; LAGES, Newton A. De C.. Algoritmos e Estrutura de Dados. Rio de Janeiro: Ed.Livros Tcnicos e Cientficos Ltda, 1985. MANZANO, Jos Augusto N. G.. Estudo dirigido de Algoritmos So Paulo: rica, 1997. MANZANO, Jos Augusto N.G.. Algoritmos: lgica para desenvolvimento de programao. So Paulo: rica, 1996. MIZRAHI, Viviane Victorine. Treinamento em linguagem C. So paulo: McGraw-Hill, 1990. ORTH, Afonso Incio. Algoritmos e programao com resumo das linguagens Pascal e C. Porto Alegre: AIO, 2001.

77

Universidade de Santa Cruz do Sul Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

PINTO, Wilson Silva. Introduo ao desenvolvimento de algoritmos e estruturas de dados. So Paulo: rica, 1990. SCHILDT, Herbert. C completo e total. So Paulo: Makron Books, 1996.

78