22.10.2014 Views

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

com a utilização apenas de lápis e papel.<br />

Trata-se de um programa para determinar a quantidade de múltiplos de um inteiro dado k<br />

compreendidos (estritamente) entre dois inteiros x e y dados. Por ex<strong>em</strong>plo, se a entrada for k = 7, x = 10 e y =<br />

42, o programa deve retornar a mensag<strong>em</strong> a quantidade de múltiplos de 7 compreendidos entre 10 e 42 é 4<br />

(que são 14, 21, 28, 35).<br />

Uma solução “na mão” desta questão utiliza progressões aritméticas, assunto da Mat<strong>em</strong>ática que é<br />

estudada no Ensino Médio. Uma progressão aritmética de primeiro termo a 1 e razão r é uma sequência de<br />

números a 1 , a 2 , ..., a n cuja diferença entre dois termos consecutivos é constante e igual a r. É fácil provar que<br />

a n = a 1 + (n – 1)r.<br />

Na nossa questão, a 1 é o menor múltiplo de k maior que x (ex<strong>em</strong>plo anterior), a n é o maior múltiplo de<br />

k menor que y e r é igual a k. É fácil ver que o maior múltiplo de k menor que y é dado por (y – 1) – (y – 1) %<br />

k, sendo y – 1 utilizado para gerenciar o caso <strong>em</strong> que y é múltiplo de k, já que quer<strong>em</strong>os múltiplos de k<br />

menor que y.<br />

/*Programa que determina o número de múltiplos de um inteiro k situados entre dois inteiros x e y*/<br />

#include <br />

main()<br />

{<br />

int i, x, y, a, k, NumMultiplos = 0;<br />

printf("Digite os inteiros x e y (y > x)");<br />

scanf("%d %d", &x, &y);<br />

a = y - 1;<br />

printf("Digite o inteiro k \n");<br />

scanf("%d", &k);<br />

NumMultiplos = (a - a % k - x + x % k)/k;<br />

printf("O número de multiplos de %d compreendidos entre %d e %d e' %d \n", k, x, y,<br />

NumMultiplos);<br />

}<br />

6. O programa a seguir, além de ser muito interessante no sentido do desenvolvimento da lógica de<br />

programação, será utilizado (a sequência de comandos da função main()) <strong>em</strong> outros programas. Seu objetivo<br />

é permutar os conteúdos de duas variáveis. Ou seja, suponhamos que, através de comandos de entrada o<br />

programa armazenou nas variáveis x e y os valores 7 e 18 e pretendamos que o programa faça com que o<br />

conteúdo de x passe a ser 18 e o de y passe a ser igual a 7. À primeira vista, bastaria a sequência de<br />

comandos<br />

x = y;<br />

y = x;<br />

Ocorre que, quando o segundo comando fosse executado, o primeiro já teria sido e o conteúdo de x<br />

não seria mais o original. No nosso ex<strong>em</strong>plo, teríamos a seguinte situação<br />

x y<br />

17 8<br />

8<br />

8<br />

e a permuta não teria sido feita, além do fato de que o conteúdo original de x teria sido perdido. Uma<br />

alternativa é considerar uma variável auxiliar que "guarde" o conteúdo de x antes que este seja substituído<br />

pelo conteúdo de y. Teríamos assim o seguinte programa.<br />

/* Programa que permuta os conteúdos de duas variáveis */<br />

#include <br />

main()<br />

{<br />

float x, y, Aux;<br />

printf("Digite os dois numeros ");<br />

scanf("%f %f", &x, &y);<br />

printf("Entrada x = %0.1f, y = %0.1f \n", x, y);<br />

Aux = x;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!