Академический Документы
Профессиональный Документы
Культура Документы
Funções
Declaração: Exemplo:
Funções
Declaração: Exemplo:
Funções
Funções
Exemplo de fragmentação de tarefas
Problema:
1. Ler quatro parâmetros numéricos inteiros: valor inicial, valor final, passo e
uma variável booleana.
2. Gerar uma lista de números inteiros do valor inicial ao final com intervalo
determinado pela variável passo.
3. Separar os números pares dos ı́mpares e mostrar na tela somente os selecio-
nados pela variável booleana, da seguinte maneira:
• 1: mostra os ı́mpares;
• 0: mostra os pares.
Funções
Exemplo de fragmentação de tarefas
Solução:
Funções
Exemplo de fragmentação de tarefas
Pseudo-algoritmo 1 - entrada de dados
Funções
Exemplo de fragmentação de tarefas
Pseudo-algoritmo 2 - geração de sequência numérica
Funções
Exemplo de fragmentação de tarefas
Pseudo-algoritmo 3 - testa se o número é par
Funções
Exemplo de fragmentação de tarefas
Pseudo-algoritmo 4 - saı́da de dados
Funções
Exemplo de fragmentação de tarefas
Protótipos das funções:
Funções
Exemplo de fragmentação de tarefas
Entrada de dados Função codificada
n = gera_lista(vi,vf,passo,lista);
saida(lista,n,sel);
return 0;
}
Funções
Exemplo de fragmentação de tarefas
Geração de sequência numérica
Função codificada
Funções
Exemplo de fragmentação de tarefas
Testa se o número é par
Função codificada
Funções
Exemplo de fragmentação de tarefas
Saı́da de dados Função codificada
1. Definição e declaração das variáveis: int saida(int *lista, int N, int sel)
i {
2. Percorre a lista de números int i;
3. SE número é par E sel == 0 for (i = 0; i < N; i++) {
• ENTÃO mostra lista[i] if (par(lista, i) && !sel)
• SENÃO não mostra nada printf("%d\n", lista[i]);
4. SE número é ı́mpar E sel == 1 if(!par(lista, i) && sel)
• ENTÃO mostra lista[i] printf("%d\n", lista[i]);
• SENÃO não mostra nada }
return 0;
}
Constantes em C
Diretiva de compilação #define
vi = atoi(argv[1]);
vf = atoi(argv[2]);
passo = atoi(argv[3]);
sel = atoi(argv[4]);
n = gera_lista(vi,vf,passo,lista);
saida(lista,n,sel);
return 0;
}
Constantes em C
Diretiva de compilação #define
Macros
#define IMPAR(x) (x % 2)
int saida(int *lista, int N, int sel)
{
int i;
for (i = 0; i < N; i++) {
if (IMPAR(lista[i]) && sel)
printf("%d\n", lista[i]);
if(!IMPAR(lista[i]) && !sel)
printf("%d\n", lista[i]);
}
return 0;
}
Constantes em C
Diretiva de compilação #define e #undefine
#define DIRETIVA_2
#undefine DIRETIVA_1
#ifdef DIRETIVA_1
código a ser compilado ser a diretiva 1 for
verdadeira
#endif
#ifdef DIRETIVA_2
código alternativo para o caso da diretiva 2 ser
verdadeira
#endif
Constantes em C
Diretiva de compilação: exemplo
Exemplo - função alternativa de saı́da de dados
#define IMPAR(x) (x % 2)
#ifdef MACRO_IMPAR
int saida(int *lista, int N, int sel)
{
int i;
for (i = 0; i < N; i++) {
if (IMPAR(lista[i]) && sel)
printf("%d\n", lista[i]);
if(!IMPAR(lista[i]) && !sel)
printf("%d\n", lista[i]);
}
return 0;
}
#endif
typedef
Exemplo de utilização
Exemplo - função para exibição de vetores numéricos. Nesse caso, o vetor pode
ser de inteiros ou ponto flutuante.
int mostra_vetor(tipo *vetor, int n)
#define TIPO_FLOAT {
int i;
#ifdef TIPO_INT for (i = 0; i < n; i++) {
typedef int tipo
#endif #ifdef TIPO_INT
#ifdef TIPO_FLOAT printf("%d\n", vetor[i]);
typedef float tipo #endif
#endif
#ifdef TIPO_DOUBLE #ifdef TIPO_FLOAT
typedef double tipo printf("%f\n", vetor[i]);
#endif #endif
#ifdef TIPO_DOUBLE
printf("%le\n", vetor[i]);
#endif
}
return 0;
}
Exercı́cio
Escreva um programa que calcule as amostras de uma função trigonométrica (seno ou cosseno)
a partir dos seguintes parâmetros de entrada:
1. amplitude;
2. perı́odo;
3. fase inicial;
4. fase incremental;
5. seleção: ciclos ou pontos;
6. número de ciclos/pontos.
Os parâmetros amplitude, perı́odo e fase inicial definem a função trigonométrica. fase incremental
determina o incremento de fase entre amostras sucessivas. O parâmetro seleç~ ao determina o sig-
nificado do parâmetro seguinte. Deve ser do tipo string de caracteres e pode conter um dos
seguintes valores:
• "ciclos": o parâmetro seguinte é um ponto flutuante e define quantos ciclos (ou frações de
ciclos) serão calculados;
• "pontos": o parâmetro seguinte é um inteiro contendo o total de amostras calculadas.
Qualquer outra valor deve ser entendido como erro e não deve permitir a continuação do programa.
Depois de calculadas as amostras, estas deverão ser impressas no terminal. A precisão do ponto
Exercı́cio - solução
Funções: Protótipos:
1. entrada de parâmetros;
typedef ... tipo;
2. seleção de ciclos/pontos;
3. cálculo das amostras; int main(int argc, char **argv);
4. exibição do vetor.
int selecao(char **argv, tipo df);
Execı́cio - solução
Entrada de parâmetros
Pseudo-algoritmo
Execı́cio - solução
Entrada de parâmetros
Pseudo-algoritmo Função codificada
return 0;
}
Execı́cio - solução
Seleção
Pseudo-algoritmo
Execı́cio - solução
Seleção
Pseudo-algoritmo Função codificada
Execı́cio - solução
Cálculo das amostras
Pseudo-algoritmo
Execı́cio - solução
Cálculo das amostras
Pseudo-algoritmo Função codificada
1. Definição e declaração das variáveis: int calculo(tipo *vetor, tipo a, tipo T,\
i, w tipo fi, tipo df, tipo n)
2. para i começando em 0 até n-1 {
w = 2π/T + f i + i ∗ df tipo w;
vetor[i] = A sin(w) int i;
3. Retorna 0
for (i = 0; i < n; i++) {
w = 2*M_PI/T + fi + i*df;
vetor[i] = sin(w);
}
return 0;
}
Execı́cio - solução
Exibição do vetor
Execı́cio - solução
Exibição do vetor
int mostra_vetor(tipo *vetor, int n)
{
int i;
for (i = 0; i < n; i++) {
#ifdef TIPO_INT
printf("%d\n", vetor[i]);
#endif
#ifdef TIPO_FLOAT
printf("%f\n", vetor[i]);
#endif
#ifdef TIPO_DOUBLE
printf("%le\n", vetor[i]);
#endif
}
return 0;
}