foo
abaixo em assembly
e escreva uma função main
em C para testá-la.
Lembre de testar diferentes valores de entrada!
double foo (double a, int b) { return a * (-b); }
pack
abaixo, e escreva uma
função main
em C para testá-la (note que a função foo
,
chamada por pack
, já foi testada no exercício anterior!).
Para o teste de pack
utilize uma lista de estruturas com pelo menos
três elementos.
struct X { int vi; double vd; struct X *next; }; double pack (struct X *px) { double acc = 0; while (px != NULL) { acc += foo(px->vd, px->vi); px = px->next; } return acc; }
arq1.h
:
extern double last; void func(double x);
arq2.h
:
extern int s; double transf(double d);
arq1.c
:
#include <math.h> #include "arq1.h" #include "arq2.h" static double min = INFINITY; double last = NAN; void func(double x) { double y; if (s) { last = x; y = pow(x, transf(x)); if (y < min) min = y; } }
arq1.o
, ou seja,
o que seria listado na saída do programa nm como
D (símbolos da área de dados exportados),
T (símbolos da área de texto/código exportados)
e U (símbolos indefinidos/importados).
Para conferir sua resposta, gere o arquivo objeto arq1.o
compilando arq1.c
com o comando
gcc -c arq1.ce execute o programa nm para inspecionar a tabela de símbolos de
arq1.o
.
pack1
abaixo, e escreva uma
função main
em C para testá-la. A função foo
,
chamada por pack1
, é a mesma do exercício 1.
struct X1 { int vi; float vf; }; double pack1 (struct X1 *px, int n) { double acc = 0; int i; for (i=0;i<n;i++) acc += foo(px[i].vf, px[i].vi); } return acc; }