MAC2166 Introdução à Computação para a Engenharia
# include <stdio.h>
int main(){
int nusp, m, n, i, j, soma, cont;
printf ("Entre com seu no. USP: ");
/* na linha abaixo use o numero USP */
scanf ("%d", &nusp);
printf ("nusp = %d\n", nusp);
m = nusp % 3 + 2;
n = 6 - m;
printf("m = %d, n = %d\n", m, n);
soma = 0;
cont = 1;
i = 1;
j = 1;
while (i <= m){
if (j <= n && cont < 4){
cont = cont + 1;
soma = soma + i*n;
printf("i = %d, j = %d, soma = %d\n", i, j, soma);
j = j + 1;
}
else {
j = 1;
i = i + 1;
}
}
/* O ultimo valor a ser impresso e' o da variavel cont */
printf("i = %d, j = %d, cont = %d\n", i, j, cont);
return 0;
}
A resposta depende do resto da divisão do seu número USP por 3. Teste com o seu
no. USP e compare a resposta.
(0) nusp % 3 == 0. Veja os exemplos abaixo.
Entre com seu no. USP: 1234560
nusp = 1234560
m = 2, n = 4
i = 1, j = 1, soma = 4
i = 1, j = 2, soma = 8
i = 1, j = 3, soma = 12
i = 3, j = 1, cont = 4
Entre com seu no. USP: 12
nusp = 12
m = 2, n = 4
i = 1, j = 1, soma = 4
i = 1, j = 2, soma = 8
i = 1, j = 3, soma = 12
i = 3, j = 1, cont = 4
Entre com seu no. USP: 0
nusp = 0
m = 2, n = 4
i = 1, j = 1, soma = 4
i = 1, j = 2, soma = 8
i = 1, j = 3, soma = 12
i = 3, j = 1, cont = 4
(1) nusp % 3 == 1.
Entre com seu no. USP: 1234561
nusp = 1234561
m = 3, n = 3
i = 1, j = 1, soma = 3
i = 1, j = 2, soma = 6
i = 1, j = 3, soma = 9
i = 4, j = 1, cont = 4
Entre com seu no. USP: 13
nusp = 13
m = 3, n = 3
i = 1, j = 1, soma = 3
i = 1, j = 2, soma = 6
i = 1, j = 3, soma = 9
i = 4, j = 1, cont = 4
Entre com seu no. USP: 1
nusp = 1
m = 3, n = 3
i = 1, j = 1, soma = 3
i = 1, j = 2, soma = 6
i = 1, j = 3, soma = 9
i = 4, j = 1, cont = 4
(2) nusp % 3 == 2.
Entre com seu no. USP: 1234562
nusp = 1234562
m = 4, n = 2
i = 1, j = 1, soma = 2
i = 1, j = 2, soma = 4
i = 2, j = 1, soma = 8
i = 5, j = 1, cont = 4
Entre com seu no. USP: 14
nusp = 14
m = 4, n = 2
i = 1, j = 1, soma = 2
i = 1, j = 2, soma = 4
i = 2, j = 1, soma = 8
i = 5, j = 1, cont = 4
Entre com seu no. USP: 2
nusp = 2
m = 4, n = 2
i = 1, j = 1, soma = 2
i = 1, j = 2, soma = 4
i = 2, j = 1, soma = 8
i = 5, j = 1, cont = 4
Entre com um inteiro: 100
Quadrados pares:
4
16
36
64
100
/*
* Solucao 1: Eta solucao bonita, curta e simples.
*/
#include <stdio.h>
int main()
{
int n, k;
printf("Digite valor de n: ");
scanf("%d", &n);
printf("Quadrados pares:\n");
for (k = 2; k*k <= n; k=k+2)
printf("%d\n", k*k);
return 0;
}
/*
* Solucao 2: solucao 1 com while no lugar do for
*/
#include <stdio.h>
int main()
{
int n, k;
printf("Digite valor de n: ");
scanf("%d", &n);
printf("Quadrados pares:\n");
k = 2;
while (k*k <= n)
{
printf("%d\n", k*k);
k = k + 2;
}
return 0;
}
/*
* Solucao 3: solucao arroz com feijao
*
*/
#include <stdio.h>
int main()
{
int n, k;
printf("Digite valor de n: ");
scanf("%d", &n);
printf("Quadrados pares:\n");
k = 1;
while (k*k <= n)
{
if ((k*k)%2 == 0)
{
printf("%d\n", k*k);
}
k = k + 1;
}
return 0;
}
/*
* Solucao 4: identica a solucao 4, com uma variavel
* para guardar o candidato a quadrado par.
*/
#include <stdio.h>
int main(){
int n, k;
int quadrado; /* guarda k*k */
printf("Digite valor de n: ");
scanf("%d", &n);
printf("Quadrados pares:\n");
k = 1;
quadrado = 1;
while (quadrado <= n)
{
if (quadrado%2 == 0)
{
printf("%d\n", quadrado);
}
k = k + 1;
quadrado = k*k;
}
return 0;
}
/*
* Solucao 5: solucao com mais arroz e com mais feijao
*
*/
#include <stdio.h>
int main(){
int n, k;
int quadrado;
printf("Digite valor de n: ");
scanf("%d", &n);
printf("Quadrados pares:\n");
k = 1;
while (k <= n)
{
quadrado = k*k;
if (quadrado%2 == 0 && quadrado <= n)
{
printf("%d\n", quadrado);
}
k = k + 1;
}
return 0;
}
/*
* Solucao 6: identica a solucao 5, imprime uma
* mensagem apropriada se n<4.
*
*/
#include <stdio.h>
int main(){
int n, k;
int quadrado;
printf("Digite valor de n: ");
scanf("%d", &n);
if (n >= 4)
{
printf("Quadrados pares:\n");
k = 1;
while (k <= n)
{
quadrado = k*k;
if (quadrado%2 == 0 && quadrado <= n)
{
printf("%d\n", quadrado);
}
k = k + 1;
}
}
else
{
printf("Nao ha quadrados pares entre 1 e %d.\n",n);
}
return 0;
}
Entre com dois inteiros: 8 12
Fracao irredutivel: 2/3
Entre com dois inteiros: 21 7
Fracao irredutivel: 3/1
Entre com dois inteiros: 2 9
Fracao irredutivel: 2/9
Entre com dois inteiros: 3 3
Fracao irredutivel: 1/1
/*
* Solucao 1: Solucao curta e simples.
*
*/
#include <stdio.h>
int main(){
int m, n, k, mdc;
printf("Entre com dois inteiros: ");
scanf("%d %d", &m, &n);
/* calcule mdc(m,n) */
mdc = 1;
for (k = 2; k <= m; k++)
if (m % k == 0 && n % k == 0)
mdc = k;
printf("Fracao irredutivel: %d/%d\n", m/mdc, n/mdc);
return 0;
}
/*
* Solucao 2: identica a solucao 1, com while no lugar de
* for.
*/
#include <stdio.h>
int main()
{
int m, n, k, mdc;
printf("Entre com dois inteiros: ");
scanf("%d %d", &m, &n);
/* calcule mdc(m,n) */
mdc = 1;
k = 2;
while (k <= m)
{
if (m % k == 0 && n % k == 0)
mdc = k;
k++;
}
printf("Fracao irredutivel: %d/%d\n", m/mdc, n/mdc);
return 0;
}
/*
* Solucao 3: nesta solucao o calculo do mdc esta implicito.
*
*/
#include <stdio.h>
int main()
{
int m, n, k;
printf("Entre com dois inteiros: ");
scanf("%d %d", &m, &n);
k = 2;
while (k <= m && k <= n)
{
if (m % k == 0 && n % k == 0)
{
m = m / k;
n = n / k;
}
else
{
k++;
}
}
printf("Fracao irredutivel: %d/%d\n", m, n);
return 0;
}
/*
* Solucao 4: identica a solucao 3, um pouco mais eficiente.
*
*/
#include <stdio.h>
int main()
{
int m, n, k;
int min;
printf("Entre com dois inteiros: ");
scanf("%d %d", &m, &n);
if (m < n)
{
min = m;
}
else
{
min = n;
}
/* nao ha divisor de m e n maior que min */
k = 2;
while (k <= min)
{
if (m % k == 0 && n % k == 0)
{
m = m / k;
n = n / k;
}
else
{
k++;
}
}
printf("Fracao irredutivel: %d/%d\n", m, n);
return 0;
}
/*
* Solucao 5: identica a solucao 2. Usa o algoritmo de
* Euclides.
*/
#include <stdio.h>
int main()
{
int m, n, mdc;
int numerador, denominador, resto;
printf("Entre com dois inteiros: ");
scanf("%d %d", &m, &n);
/* calcule mdc(m,n) usando o algoritmo de Euclides */
numerador = m;
denominador = n;
resto = numerador % denominador;
while (resto != 0)
{
numerador = denominador;
denominador = resto;
resto = numerador % denominador;
}
mdc = denominador;
printf("Fracao irredutivel: %d/%d\n", m/mdc, n/mdc);
return 0;
}
/*
* Solucao 6: identica a solucao 5. Usa o do-while no
* lugar de while.
* OBS: muitas turmas nao viram o do-while:
*
* do
* {
* [...lista de comandos...];
* }
* while (condicao);
*
* e' equivalente a
*
* [...lista de comandos...];
* while (condicao)
* {
* [...lista de comandos...];
* }
*/
#include <stdio.h>
int main()
{
int m, n, mdc;
int numerador, denominador, resto;
printf("Entre com dois inteiros: ");
scanf("%d %d", &m, &n);
/* calcule mdc(m,n) usando o algoritmo de Euclides */
numerador = m;
denominador = n;
do
{
resto = numerador % denominador;
numerador = denominador;
denominador = resto;
}
while (resto != 0);
mdc = numerador;
printf("Fracao irredutivel: %d/%d\n", m/mdc, n/mdc);
return 0;
}