Você está na página 1de 1

Colegiado de Engenharia da Computação

Universidade Federal do Vale do São Francisco

CCMP0016 - Algoritmo e Programação


Aula de Laboratório 07

Tópicos:
1. Programação com uso de funções
2. Biblioteca Padrão C
3. Dicionário de dados
4. Plano de testes
5. Descrição linha a linha.
6. Relatório 7.
Livro Texto: Fundamentos da Programação de Computadores
Capítulo 8 – Sub-rotinas
Estudo de Casos

1. Crie uma função que receba três números inteiros como parâmetros, representando
horas (h), minutos (min) e segundos (s), e os converta em segundos. Exemplo: 2 h, 40 min e
10 s correspondem a 9.610 s.

Programa Fonte

#include <stdio.h>
#include <stdlib.h> // função exit - interrompe o programa e retorna código do erro
int Segundos( int x, int y, int z ); // protótipo da função
int main( void ){
int h, m, s, t;

printf( "Digite o valor das horas (0-23): " ); scanf( "%d", &h );
printf( "Digite o valor dos minutos (0-59): " ); scanf( "%d", &m );
printf( "Digite o valor dos segundos (0-59): " ); scanf( "%d", &s );

if( h < 0 || h > 23 ){ printf( "\n Horas inválidas" ); exit(1); }


if( m < 0 || m > 59 ){ printf( "\n Minutos inválidos" ); exit(2); }
if( s < 0 || s > 59 ){ printf( "\n Segundos inválidos" ); exit(3); }

t = Segundos(h,m,s);
printf("\n %02d:%02d:%02d = %d s", h, m, s, t );
return 0;
}
int Segundos( int h, int m, int s ){
return 60*60*h + 60*m + s;
}

Imagem da Execução do Programa Fonte

2. Faça uma função que receba um valor inteiro e positivo N, calcule e mostre os números
de Fibonacci de 1 até N, ambos incluídos.

Pensamento Computacional

Números de Fibonacci F(n):

{
0 , n=0
F (n)= 1 , n=1
F (n−1)+ F(n−2) , n>1

F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 ...
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 ...

F(0) = 0, primeiro valor da sequência – não é calculado, n = 0


F(1) = 1, segundo valor da sequência – não é calculado, n = 1

F(2) = F(0) + F(1) = 0 + 1 = 1, n = 2


F(3) = F(1) + F(2) = 1 + 1 = 2, n = 3
F(4) = F(2) + F(3) = 2 + 1 = 3, n = 4
F(5) = F(3) + F(4) = 3 + 2 = 5, n = 5

...

F(n) = F(n-1) + F(n-2), n > 1

Para calcular os números de Fibonacci, some o penúltimo com o último, a


partir de 2.

Programa Fonte

#include <stdio.h>

void Fibonacci( int );

int main( void ){


int N;
printf( " Digite o valor de N (N > 1): " ); scanf( "%d", &N );
Fibonacci(N);
return 0;
}
void Fibonacci( int N ){
int i, F, ultimo = 1, penultimo = 0;
printf("\n F(%d): 0, 1, ", N );
for( i = 2; i <= N-1; i++ ){
F = penultimo + ultimo;
printf( " %d ", F );
penultimo = ultimo;
ultimo = F;
}
}

Imagem da Execução do Programa Fonte

3. Escreva uma função para calcular a combinação de m por n (mn)=C m ,n =


m!
(m−n)! n !
Pensamento Computacional

Combinação de m, n a n:
m!
C (m ,n)= ,m≥n
(m−n)!n!

Dados os protótipos abaixo:

int f( int ); // protótipo do fatorial


int C( int, int ); // protótipo da combinacao

Sendo: C(m,n) = f(m) / ( f(m-n) * f(n) )

0! = 1 // convenção matemática
1! = 1
2! = 1x2=2
3! = 1x2x3=6
5! = 120
n! = 1 x 2 x 3 x 4 x … x n // for resolve

8! 8×7×6×5!
C (8,5)= = =8×7=56
(8−5)!5! 6×5 !

#include <stdio.h>

int f( int ); // protótipo


int C( int, int ); // protótipo

int main( void ){


int m, n;
printf( " Digite o valor de m (m > 0): " ); scanf( "%d", &m );
printf( " Digite o valor de n (n <= m): " ); scanf( "%d", &n );
printf( "\n C(%d,%d) = %d", m, n, C(m,n) );
return 0;
}
int f( int n){ // testada 22.01.2023 Correta
int i, ff = 1;
for( i = 2; i <= n; i++ ){
ff = ff * i;
}
return ff;
}
int C( int m, int n){ // testada 22.01.2023 Correta
return f(m)/( f(m-n)*f(n) );
}

Imagem da Execução do Programa Fonte

4. Programas C com funções listar primos entre de 1 e 100.


Pensamento Computacional

Um número inteiro é primo n, n > 0, se ele é divisível apenas por 1 e por si mesmo.

n = 0 não é primo, não é divisível por si mesmo


n = 2 é primo, n é divisível 1
n = 3 é primo, n é divisível 1, não é divisível por 2
n = 4 não é primo, n é divisível por 2
n = 5 é primo, n não é divisível por 2, 3, 4
n = 6 não é primo, n é divisível por 2
n = 7 é primo, n não é divisível por 2, 3, 4, 5, 6

Para saber se n é primo é preciso testar se:

n é divisível por 2, ou seja, n % 2


n é divisível por 3, ou seja, n % 3
n é divisível por 4, ou seja, n % 4
...
n é divisível por n-1, ou seja, n % (n-1)

Para saber se n é primo, fazer i = 2, 3, 4, …, n-1 e se algum n % i == 0


então n é divisível por i, logo n não é primo, neste caso n é dito número
composto.

Programa Fonte

#include <stdio.h>
#include <stdbool.h> // bool

bool primo( int );

int main( void ){


int n;
printf( " Digite o valor de n (n > 1): " ); scanf( "%d", &n );
if( primo(n) ) printf( " n = %d é um número primo", n );
else printf( " n = %d é um número composto", n );
return 0;
}
bool primo( int n ){
int i;
for( i = 2; i < n; i++ ){
if( n % i == 0 ) return false;
}
return true;
}

Imagem da Execução do Programa Fonte

5. Escreva uma função que receba um valor inteiro e o retorne invertido. Exemplo: a
entrada 123 produz a saída 321.
Solução 1

Pensamento Computacional 1

Decompor um número n, n > 0 utiliza-se a divisão inteira, que despreza a fracção.

Seja n = 568, para decompor n em centenas, dezenas e unidades, basta fazer a divisão
inteira de n por 10 e 100.

• para obter a centena c, c = n / 100 = 5


• para obter a dezena d, d = (n - c x 100) / 10 = 568 – 5 x 100 ) /10 = 68/10 = 6
• para obter a unidade u, u = (n - c x 100 – d x 10 ) = 568 – 5 x 100 – 6 x 10 = 8

Programa Fonte 1

#include <stdio.h>

int inverte( int );

int main( void ){


int n;
printf( " Digite o valor de n ( 99 < n < 1000): " ); scanf( "%d", &n );
printf( "\n %d invertido e %d", n, inverte(n) );
return 0;
}
int inverte( int n ){
int u, d, c, i;
c = n/100;
d = (n-c*100)/10:
u = (n-c*100-d*10);

printf( "\n u = %d", u ); // para conferir


printf( "\n d = %d", d ); // para conferir
printf( "\n c = %d", c ); // para conferir

i = 100*u + 10*d + c;

return i;
}

Imagem da Execução do Programa Fonte 1

Solução 2

Pensamento Computacional 2

Decompor um número n, n > 0 utiliza-se a divisão inteira, que despreza a fracção.

Seja n = 568, para decompor n em centenas, dezenas e unidades, basta fazer a divisão
inteira de n por 10 e 100.

• para obter a unidade u, u = n %10 = 568 % 10 = 8


• para obter a centena d, d = (n / 10) % 10 = (568 /10) % 10 = 56 % 10 = 6
• para obter a centena c, c = n / 100 = 568 / 100 = 5

Programa Fonte 2

#include <stdio.h>

int inverte( int );

int main( void ){


int n;
printf( " Digite o valor de n ( 99 < n < 1000): " ); scanf( "%d", &n );
printf( "\n %d invertido e %d", n, inverte(n) );
return 0;
}
int inverte( int n ){
int u, d, c, i;

u = n%10;
d = (n/10) % 10;
c = n/100;

printf( "\n u = %d", u ); // para conferir


printf( "\n d = %d", d ); // para conferir
printf( "\n c = %d", c ); // para conferir

i = 100*u + 10*d + c;

return i;
}

Imagem da Execução do Programa Fonte 2

Atividades 1
1. Reescreva os Estudo de Casos utilizando while.
2. Execute cada Estudo de Casos no GDB online.
3. Execute cada Estudo de Casos no C Tutor, faça as adaptações necessárias.
4. Faça o fluxograma de cada Estudo de Casos.
5. Identifique o tipo, parâmetros e retorno de cada função dos programas do Estudo de
Casos.
6. Identifique os argumentos da chamada de cada função dos programas do Estudo de
Casos.
7. Faça a descrição linha a linha de cada programa do Estudo de Casos.
Atividades 2

Estude as imagens abaixo sobre números primos

Atividades 3

Estude os exemplos dos links abaixo:

1. Functions Introduction
2. User-defined Function
3. Function Types
4. Scope of Variable
5. C Program to find factorial of number
6. C Program to print fibonacci series
7. C Program to find GCD of two numbers
8. C Program to find LCM of two numbers
9. C Program to calculate power of number
10. C Program to check whether given number if prime number or not
11. C Program to check whether given number is armstrong number or not
12. https://en.cppreference.com

Questões
1. O que é módulo?
2. O que é reutilização?
3. Como a modularização está relacionada com a reutilização?
4. O que é legibilidade?
5. Como a modularização está relacionada com a legibilidade?
6. O que é manutenção?
7. Como a modularização está relacionada com a manutenção?
8. O que é função?
9. O que é protótipo de função?
10. Compare função com protótipo de função.
11. Quando usar protótipo de função?
12. O que é parâmetro de função?
13. O que é argumento de função?
14. O que é tipo de retorno?
15. Como o tipo void está relacionado com função?
16. Qual é a sintaxe de função em C?
17. Qual é a sintaxe de protótipo de função C?
18. Explique o fluxo de controle de programas-fonte que contenham funções.
19. O que é chamada de função?
20. O que é passagem de argumentos?
21. O que é escopo de variável?
22. O que é variável local?
23. O que é variável global?
24. Explique detalhadamente a figura abaixo:

Capítulo 8 – Sub-rotinas
Capítulo 8 – Exercícios Resolvidos
Capítulo 8 – Exercícios Propostos (exceto vetores e matrizes)

Exercícios 1

Faça o relatório formatado com do programa C que resolve:

• dicionário de dados
• plano de teste
• programa-fonte
• descrição linha a linha
• saída formatada
• imagem da execução do programa1
• falta de indentação anula o exercício
• apenas soluções usando funções serão consideradas (main de tamanho
mínimo)
• apenas soluções gerais serão consideradas

1. Faça uma função que receba um número inteiro e positivo N como parâmetro e
retorne a soma dos números inteiros existentes entre o número 1 e N (inclusive).
2. Faça uma função que receba um valor inteiro e verifique se ele é positivo ou negativo.
3. Crie uma função que receba como argumento a altura (h) e o sexo de uma pessoa e
retorne seu peso ideal. Para homens, deverá calcular o peso ideal usando a fórmula:
peso ideal = 72.7 h - 58; para mulheres: peso ideal = 62.1 h - 44.7.
4. Elabore uma função que leia um número não determinado de valores positivos e
retorne a média aritmética desses valores. Terminar a entrada de dados com o valor
zero.
5. Elabore uma função que receba como parâmetro um valor n (inteiro e maior ou igual a
1 1 1 1
1) e determine o valor da soma S=1+ + + +⋯+ .
2 3 4 n
6. Faça uma função que receba como parâmetro um valor inteiro e positivo n, indicando
1 1 1 1 1 1 1
a quantidade de parcelas, e retorne S=1+ + + + + + +⋯+ .
3 5 7 9 11 13 2n+ 1
7. A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando dados
sobre o salário e o número de filhos. Faça uma única função que leia esses dados para
um número não determinado de pessoas e imprima a média de salário da população,
a média do número de filhos, o maior salário e o percentual de pessoas com salário
inferior a $ 1.302,00.
8. Crie um programa que receba três valores (obrigatoriamente maiores que zero),
representando as medidas dos três lados de um triângulo. Todas as mensagens
deverão ser mostradas em main. Elabore funções para: a) determinar se esses lados
formam um triângulo (sabe–se que, para ser triângulo, a medida de um lado qualquer
deve ser inferior ou igual à soma das medidas dos outros dois); b) determinar e
mostrar o tipo de triângulo (equilátero, isósceles ou escaleno), caso as medidas
formem um triângulo.
9. Calcule e imprima o valor de n tal n! < 10000. Resolva usando função.
10. Calcule e imprima o valor de n tal F(n) < 100000, F de Fibonacci. Resolva usando
função.
11. Elabore e teste uma função que retorna o número de segundos de x horas.
12. Elabore e teste uma função para verificar se um ano é bissexto.
13. Elabore e teste uma função que retorna o número de dias um dado mês.
1 2 3 4 20
14. Elabore e teste uma função para calcular S= + + + +⋯+ .
1 3 5 7 39
15. Escreva uma função para somar os números de primos menores do que 1000.
m!
16. Escreva uma função para calcular o arranjo de m por n A m , n=
(m−n)!
17. Escreva uma função para calcular a potenciação x =
n 1
x⋅xn −1
se n=0
se n>0 {
18. Escreva uma função para calcular o fatorial x !=
1 se x≤1
x⋅(x−1)! se x >1 {
19. Escreva uma função para calcular a soma dos n primeiros números primos.
20. Faça uma função que receba um número inteiro e positivo N como parâmetro e
retorne a soma dos números inteiros existentes entre o número 1 e N (inclusive).
21. Faça uma função que receba um valor inteiro e verifique se ele é positivo ou negativo.
22. Crie uma função que receba como argumento a altura (h) e o sexo de uma pessoa e
retorne seu peso ideal. Para homens, deverá calcular o peso ideal usando a fórmula:
peso ideal = 72.7 h - 58; para mulheres: peso ideal = 62.1 h - 44.7.
23. Elabore uma função que leia um número não determinado de valores positivos e
retorne a média aritmética desses valores. Terminar a entrada de dados com o valor
zero.
24. Elabore uma função que receba como parâmetro um valor n (inteiro e maior ou igual a
1 1 1 1
1) e determine o valor da soma S=1+ + + +⋯+ .
2 3 4 n
25. Faça uma função que receba como parâmetro um valor inteiro e positivo n, indicando
1 1 1 1 1 1 1
a quantidade de parcelas de uma soma, e retorne S=1+ + + + + + +⋯+ .
3 5 7 9 11 13 2n+ 1
26. A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando dados
sobre o salário e o número de filhos. Faça uma única função que leia esses dados para
um número não determinado de pessoas e imprima a média de salário da população,
a média do número de filhos, o maior salário e o percentual de pessoas com salário
inferior a $ 1.302,00.
27. Crie um programa que receba três valores (obrigatoriamente maiores que zero),
representando as medidas dos três lados de um triângulo. Todas as mensagens
deverão ser mostradas em main. Elabore funções para: a) determinar se esses lados
formam um triângulo (sabe–se que, para ser triângulo, a medida de um lado qualquer
deve ser inferior ou igual à soma das medidas dos outros dois); b) determinar e
mostrar o tipo de triângulo (equilátero, isósceles ou escaleno), caso as medidas
formem um triângulo.
28. Calcule e imprima o valor de n tal n! < 10000. Resolva usando função.
29. Calcule e imprima o valor de n tal F(n) < 100000, F de Fibonacci. Resolva usando
função.
30. Elabore e teste uma função que retorna o número de segundos de x horas.
31. Elabore e teste uma função para verificar se um ano é bissexto.
32. Elabore e teste uma função que retorna o número de dias um dado mês.
1 2 3 4 20
33. Elabore e teste uma função para calcular S= + + + +⋯+ .
1 3 5 7 39
34. Escreva uma função para somar os números de primos menores do que 1000.
m!
35. Escreva uma função para calcular o arranjo de m por n A m , n=
(m−n)!
36. Escreva uma função para calcular a potenciação x =
n 1
x⋅xn −1
se n=0
se n>0 {
37. Escreva uma função para calcular o fatorial x !=
1 se x≤1
x⋅(x−1)! se x >1 {
Exemplos

Estude os exemplos dos links abaixo:

1. Functions Introduction
2. User-defined Function
3. Function Types
4. Scope of Variable
5. C Program to find factorial of number
6. C Program to print fibonacci series
7. C Program to find GCD of two numbers
8. C Program to find LCM of two numbers
9. C Program to calculate power of number
10. C Program to check whether given number if prime number or not
11. C Program to check whether given number is armstrong number or not
12. https://en.cppreference.com

Desafio
Elabore uma sub-rotina que calcule o máximo divisor comum (MDC) de dois números
recebidos como parâmetros.
Relatório

Faça o relatório formatado dos itens a e b:

a = 1 + (p1 % N), p1 = 7*(7+M+N) + N*D*(D+M)


b = 1 + (p2 % N), p2 = D*(M+7 ) + N*(M+D)

Sendo D e M o dia e o mês do seu aniversário, respectivamente; e N o número de questões


da lista do correspondente Exercício 1.

Entrega via AVA nos formatos odt e pdf.


LibreOffice 7.6 ou superior.

Relatório 1 2 3 4 5 6 7 8 9 10 11 12 13
Valor 10 10 10 10 10 10 10 10 10 10 10 10 10
Peso 1 2 2 2 3 3 3 4 4 4 5 5 5

Relatório 1 2 3 4 5 6 7 8 9 10 11 12 13
Valor 10 10 10 10 10 10 10 10 10 10 10 10 10
Peso 1 2 2 2 3 3 3 4 4 4 5 5 5

Tire suas Dúvidas


Informe sua dúvida para:

E-mail: ccmp0016.0@gmail.com
Assunto: [AP Dúvida]
Envie Sugestões
Envie sugestões para:

E-mail: ccmp0016.0@gmail.com
Assunto: [AP Sugestão]

Estude
Capítulo 1 – Conceitos Básicos
Capítulo 2 – Paradigma de programação
Capítulo 3 – Estrutura sequencial
Capítulo 4 – Estrutura condicional
Capítulo 5 – Estrutura de repetição
Capítulo 6 – Vetor
Capítulo 7 – Matriz
Capítulo 8 – Sub-rotinas
Capítulo 9 – Manipulando cadeias de caracteres
Capítulo 13 – Desafios

Capítulo 1 – Linguagem de Programação C – LPC


Capítulo 2 – Tipos de Dados Básicos
Capítulo 3 – Identificadores, Contantes e Variáveis
Capítulo 4 – Operações de Entrada e Saída (E/S)
Capítulo 5 – Operadores e Expressões
Capítulo 6 – Funções C
Capítulo 7 – Estruturas
Capítulo 8 – Tipos de Dados Derivados
Capítulo 9 – Resolvendo Problemas Usando Computadores
Capítulo 10 – Anexos

Capítulo 1 – Uma Visão Geral de C


Capítulo 2 – Expressões em C
Capítulo 3 – Comandos de Controle do Programa
Capítulo 4 – Matrizes e Strings
Capítulo 6 – Funções
Capítulo 8 – E/S pelo Console
Capítulo 10 – O Pré-processador de C e Comentários
Capítulo 13 – Funções de String e de Caracteres
Capítulo 14 – Funções Matemáticas
Capítulo 19 – Ordenação e Pesquisa

Capítulo 1 – Introdução à Lógica de Programação


Capítulo 2 – Tópicos Preliminares
Capítulo 3 – Estruturas de Controle
Capítulo 4 – Estruturas de Dados
Capítulo 4 – Modularizando Algoritmos

Capítulo 1 – Introdução
Capítulo 2 – Fundamentos
Capítulo 3 – Comandos de Condição
Capítulo 6 – Recursividade
Capítulo 7 – Vetores
Capítulo 4 – Comandos de Repetição

1 imagem da execução do programa exibe o plano de testes formatado

Relatório individual.

Você também pode gostar