Está en la página 1de 18

Cuaderno de prcticas

de Programacin
Grado en Fsica
Memoria 4
Alumno: Joaqun Montes Fernndez
DNI: 47500967X
ru!o: "#$
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
EJERCICIO DE LABORATORIO ! "#I$% &
' Enunciado(
#asndose en el !ro'rama real%zado en el la.orator%o) /amos a 0a&er un
estud%o de la !re&%s%(n* "ara ello) se !%de:
a* "rue.e a 1%2ar la !re&%s%(n de las /ar%a.les en 5 /alores d%st%ntos entre $00 +
3000* "ara &ada uno de esos /alores !rue.e 5 /alores d%st%ntos del n4mero de
%tera&%ones 5entre $00 + $0006*
.* 7se la 1un&%(n clock () !ara &ronometrar el t%em!o que se tarda en &al&ular la
solu&%(n en &ada &aso* "ara ello) de.e llamarla antes + des!u8s de llamar a
CalcularPI (), &al&ulando la d%1eren&%a de t%em!o entre am.as llamadas*
&* 9eal%&e una ta.la &on 4 &olumnas que %nd%que: la !re&%s%(n es&o'%da) el
n4mero de %tera&%ones real%zado) el t%em!o %n/ert%do en el &l&ulo + el n4mero
de de&%males &orre&tos o.ten%dos !ara "I* "ara &ada /alor de la !re&%s%(n)
se:ale la 1%la (!t%ma) es de&%r) la &orres!ond%ente al me2or resultado &on el
menor n4mero de %tera&%ones 5me2or n4mero de de&%males &orre&to &on el
menor n4mero de %tera&%ones6*
)' Cdigo *uente(
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <gmp.h>
#include <gmpxx.h>
mpf_class CalcularRaiz(mpf_class x, int n)
mpf_class Calcular!otencia(mpf_class x, int n)
mpf_class Calcular"tan(mpf_class x, int n)
mpf_class Calcular!i(int n)
using namespace std
##$uncion para clacular la raiz cuadrada de x usando el algoritmo
babilonico.
##Recibe el %alor de x & el numero de iteraciones a realizar
mpf_class CalcularRaiz(mpf_class x, int n)
'
int i
mpf_class r, t

r ( x
t ( )

for(i()i<ni**)
3
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
'
t ( r
r ( (x#r * r)#+
,
return r
,
##$uncion para calcular la potencia de un real, recibe la base real &
el exponente entero
mpf_class Calcular!otencia(mpf_class x, int n)
'
int i
mpf_class prod

prod ( -.)
for(i(-i<(ni**)
prod .( x

return prod
,
##$uncion para calcular el arcotangente de x usando la serie de
/regor&, recibe el %alor de x & el numero de iteraciones
mpf_class Calcular"tan(mpf_class x, int n)
'
int i, num
mpf_class suma
suma ( ).)
for(i(-i<(ni**)
'
num ( +.i0-
if(i1+ (( )) suma 0(Calcular!otencia(x,num)#num
else suma *(Calcular!otencia(x,num)#num
,
return suma
,
##$uncion para calcular el %alor de !2, recibe el numero de
iteraciones
mpf_class Calcular!2(int n)
'
return 3.Calcular"tan(-#CalcularRaiz(4,n),n)
,
int main(%oid)
'
int n
cloc5_t t-, t+
double numsecs

mpf_set_default_prec(6)))
mpf_class %alor

cout << 78umero de iteraciones9 7
;
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
cin >> n

t- ( cloc5()

%alor ( Calcular!2(n)

t+ ( cloc5()
numsecs ( (double)(t+0t-)#C:;C<=_!>R_=>C

cout.precision(+)))
cout << 7?alor de !2 calculado9 7 << %alor << endl
cout << 7@iempo9 7 << numsecs << 7 segundos7 << endl

s&stem(7pause7)
return )
,
+' Prue,as de- programa(
Banco de prue,as
PRECI.I$% %/ ITERACIO%E. TIEMPO 0.' DECIMALE. C1
400 300 0*$6 97
400 0*6; $34
600 $*<3 $34
<00 ;*<< $34
$000 5*4< $34
PRECI.I$% %/ ITERACIO%E. TIEMPO 0.' DECIMALE. C1
<00 300 0*55 97
400 3*03 $93
600 ;*45 340
<00 <*<< 340
$000 9*7< 340
4
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
PRECI.I$% %/ ITERACIO%E. TIEMPO 0.' DECIMALE. C1
$300 300 0*77 97
400 3*9 $93
600 7*04 3<7
<00 $$*9$ ;66
$000 $<*7 ;66
PRECI.I$% %/ ITERACIO%E. TIEMPO 0.' DECIMALE. C1
$600 300 $*3 97
400 4*<$ $93
600 $0*< 3<<
<00 $9*37 ;<;
$000 ;0 ;<;
PRECI.I$% %/ ITERACIO%E. TIEMPO 0.' DECIMALE. C1
3000 300 $*57 97
400 6*;5 $93
600 $4 3<<
<00 34*6 ;<;
$000 ;<*4; 479
5
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
Capturas de panta--a
6
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
EJERCICIO DE LABORATORIO )! "#I$%
' Enunciado(
Intente &al&ular un alto n4mero de de&%males de "I %n&rementando &omo est%me
ne&esar%o tanto la !re&%s%(n ut%l%zada &omo el n4mero de %tera&%ones*
Ind%que el /alor 1%nal &onse'u%do !ara "I) el n4mero de de&%males &orre&tos
o.ten%do) el n4mero de %tera&%ones ut%l%zado) el /alor de la !re&%s%(n ut%l%zada +
el t%em!o de &(m!uto que se 0a requer%do !ara &al&ularlo 5en &ursos anter%ores
los alumnos 0an o.ten%do entre 500 + 3000 de&%males &orre&tos6*
)' Prue,as de- programa(
Capturas de panta--a
"re&%s%(n: ;000
N4mero de de&%males &orre&tos: 905
7
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
EJERCICIO DE LABORATORIO +! "#I$% &
' Enunciado(
=a .%.l%ote&a M" tam.%8n !erm%te de&larar enteros &on un n4meros de &%1ras
ar.%trar%o 5t%!o de dato mpz_class6) lo que !erm%te tra.a2ar &on /alores enteros
tan altos &omo sea ne&esar%o* >n el &aso de estos t%!os enteros no 0a&e 1alta
%nd%&ar la !re&%s%(n) +a que se a2ustar automt%&amente se'4n las ne&es%dades
de los &l&ulos de 1orma d%nm%&a*
a* 9eal%&e una 1un&%(n !ara &al&ular el t8rm%no n?8s%mo de la su&es%(n de
F%.ona&&% de 1orma no re&urs%/a* =a 1un&%(n de.e de/ol/er un /alor entero*
9eal%&e una ta.la que muestre los resultados o.ten%dos !ara n4meros altos* >n
d%&0a ta.la de.e mostrar el /alor de n + el de F5n6*
.* @a&%endo uso de las 1un&%ones que se 0an %m!lementado en esta !r&t%&a
5usando M"6 real%&e una 1un&%(n !ara &al&ular el /alor n4mero de a4reo 5el
n4mero A6 a !art%r de la s%'u%ente eB!res%(n:
A C l%m5n?D%n16 F5nE$6FF5n6
donde F5n6 es el t8rm%no n?8s%mo de la su&es%(n de F%.ona&&%*
Ind%que en una ta.la el n4mero de de&%males &orre&tos en&ontrados !ara
d%st%nto n4mero de %tera&%ones) as &omo el t%em!o %n/ert%do en &ada &aso*
>l /alor del n4mero a4reo) &ons%derando los !r%meros 40 de&%males !ara que
!ueda &om!arar resultados) es:
AC$)6$<0;;9<<749<94<4<3045<6<;4;656;<$$7730;
)' Cdigo *uente(
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <gmp.h>
#include <gmpxx.h>
mpz_class $ib(int n)
mpf_class "ureo(int n)
using namespace std
int main(%oid)
'
<
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
int n, i
cloc5_t t-, t+

mpf_set_default_prec(6)))
mpf_class %alor

double numsecs

cout << 72ntroduzca n9 7
cin >> n

t- ( cloc5()

%alor ( "ureo(n)

t+ ( cloc5()

numsecs ( (double)(t+0t-)#C:;C<=_!>R_=>C

cout.precision(+)))
cout << 7?alor9 7 << %alor << endl
cout << 7@iempo9 7 << numsecs << 7 segundos7 << endl

s&stem(7pause7)
return )
,
mpz_class $ib(int n)
'
int 5

mpz_class i, A, t

i ( -
A ( )

for(5()5<(n0-5**)
'
t ( i * A
i ( A
A ( t
,
return A
,

mpf_class "ureo(int n)
'
mpf_set_default_prec(6)))
mpf_class p

p ( (mpf_class)$ib(n)#$ib(n0-)

return p
,
9
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores

+' Prue,as de- programa(
Banco de prue,as
PRECI.I$% %/ ITERACIO%E. TIEMPO 0.' DECIMALE. C1
400 $00000 3*$5 $35
$000 500000 53*3< ;56
3000 $000000 30<*66 65<
Capturas de panta--a
$0
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
$$
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
EJERCICIO DE LABORATORIO ! "#I$% 2
' Enunciado(
9eal%&e una 1un&%(n que lea todo el 1%&0ero palabras.dat + lo &o!%e en un /e&tor
de &adenas de &ara&teres*
)' Cdigo *uente(
%oid :eer:ista&pasara?ector(%oid)
'
ifstream archi%o

int i
archi%o.open(7palabras.txt7)
if(Barchi%o.is_open())
cout << 7>rror al abrir el fichero7

string palabra
i ( )
Chile(Barchi%o.eof())
'
archi%o >> palabra
%DiE ( palabra
i**
,

archi%o.close()
return
,
$3
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
EJERCICIO DE LABORATORIO )! "#I$% 2
' Enunciado(
9eal%&e una 1un&%(n que &o!%e el &onten%do de un /e&tor de &adenas de
&ara&teres so.re un 1%&0ero de teBto) es&r%.%endo &ada &adena en una lnea
d%st%nta*
)' Cdigo *uente(
%oid :eer?ector&pasara:ista(%oid)
'
ofstream archi%o

int i,A

archi%o.open(7palabras+.txt7)
if(Barchi%o.is_open())
cout << 7>rror al abrir el fichero7

i ( )
Chile(i<++F)))
'
archi%o << %DiE << endl
i**
,

archi%o.close()
return
,
$;
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
EJERCICIO DE LABORATORIO +! "#I$% 2
' Enunciado(
9eal%&e una 1un&%(n que ordene un /e&tor de &adenas de &ara&teres
atend%endo a la lon'%tud de d%&0as &adenas) de 1orma des&endente 5en !r%mer
lu'ar las de ma+or lon'%tud6* 7se el al'or%tmo de la .ur.u2a*
)' Cdigo *uente(
%oid ;rdena@amano(string %DE, int n)
'
int i,A
string aux

for(i(-i<ni**)
for (A(n0-A>(iA00)
if(%DAE.length()>%DA0-E.length())'
aux ( %DAE
%DAE ( %DA0-E
%DA0-E ( aux
,
return
,
$4
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
$5
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
+' Prue,as de- programa(
Banco de prue,as
EJERCICIO DE LABORATORIO 4! "#I$% 2
' Enunciado(
I'ual que el e2er&%&%o anter%or !ero %m!lementando el al'or%tmo de sele&&%(n*
)' Cdigo *uente(
%oid ;rdena@amano=eleccion(string %DE, int n)
'
int i,A,posmin
string aux

$6
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
for(i()i<(n0-)i**)
'
posmin ( i
for(A(i*-A<nA**)
if(%DAE.length()>%DposminE.length())'
posmin ( A
aux ( %DAE
%DAE ( %DA0-E
%DA0-E ( aux,

,

return
,
+' Prue,as de- programa(
Banco de prue,as
$7
Memor%a de !r&t%&as de "ro'rama&%(n) rado en Fs%&a) De!to* Arqu%te&tura + ,e&nolo'a de -om!utadores
$<

También podría gustarte