Diferencia entre revisiones de «2010 Ejercicios 5: Programación»
De Software Libre para la Enseñanza y el Aprendizaje de las Matemáticas (2010-11)
 (Página creada con '== Ejercicio 1 ==  === Ejercicio 1.1. === Definir la función tangente tal que tangente(f,a) es la ecuación de la tangente a la función f en el punto de abscisa a. Por ejemplo…')  | 
				m (Ejercicios 5: Programación trasladada a 2010 Ejercicios 5: Programación)  | 
				||
| (No se muestran 17 ediciones intermedias de 2 usuarios) | |||
| Línea 5: | Línea 5: | ||
    (%i1) (f(x):=x^3, tangente(f,2));  |     (%i1) (f(x):=x^3, tangente(f,2));  | ||
    (%o1) y=12*(x-2)+8  |     (%o1) y=12*(x-2)+8  | ||
| + | |||
| + | == Solución ==  | ||
| + | |||
| + |      (%i1)tangente(f,a):=  | ||
| + |           (define(D(x),diff(f(x),x)),    | ||
| + |            y=ratsimp(f(a)+D(a)*(x-a)))$  | ||
| + |      (%i2) f(x):=x^3$  | ||
| + |      (%i3) tangente(f,2);  | ||
| + |      (%o3) y=12*x-16  | ||
=== Ejercicio 1.2. ===  | === Ejercicio 1.2. ===  | ||
Calcular la tangente a f(x)=ln(tan(|x|) en el punto de abscisa -pi/12.  | Calcular la tangente a f(x)=ln(tan(|x|) en el punto de abscisa -pi/12.  | ||
| + | |||
| + | == Solución ==  | ||
| + | |||
| + |    (%i1) f(x):=log(tan(abs(x)))$  | ||
| + |    (%i2) tangente(f,-%pi/12);  | ||
| + |    (%o2) y=(18*%pi^2*x+%pi^3)/864  | ||
== Ejercicio 2 ==  | == Ejercicio 2 ==  | ||
| Línea 26: | Línea 41: | ||
    (%o6) [[[-inf,inf],-]]  |     (%o6) [[[-inf,inf],-]]  | ||
Se supone que a es distinto de cero.  | Se supone que a es distinto de cero.  | ||
| + | |||
| + | == Solución ==  | ||
| + | |||
| + |    (%i1)signosTrinomio(a,b,c):=block([S,td,td2],  | ||
| + |     S:realroots(a*x^2+b*x+c),  | ||
| + |     if length(S)=0 then   | ||
| + |         if a>0 then "[[-inf,+inf],+]"  | ||
| + |         else "[[-inf,+inf],-]"  | ||
| + |     elseif length(S)=1 then  | ||
| + |         (td:rhs(first(S)),  | ||
| + |         if a>0 then  | ||
| + |            [[["-inf",td],"+"],[td,0],[[td,"+inf"],"+"]]  | ||
| + |         else   | ||
| + |            [[["-inf",td],"-"],[td,0],[[td,"+inf"],"-"]])  | ||
| + |     else  | ||
| + |         (td:rhs(first(S)),  | ||
| + |         td2:rhs(second(S)),  | ||
| + |         if a>0 then [[["-inf",td],"+"],[td,0],[[td,td2],"-"],[td2,0],[[td2,"+inf"],"+"]]  | ||
| + |         else [[["-inf",td],"-"],[td,0],[[td,td2],"+"],[td2,0],[[td2,"+inf"],"-"]]))$  | ||
=== Ejercicio 2.2. ===  | === Ejercicio 2.2. ===  | ||
Calcular la tabla de la variación de los signos del trinomio -6x^2-3x+14/3  | Calcular la tabla de la variación de los signos del trinomio -6x^2-3x+14/3  | ||
| + | |||
| + | == Solución ==  | ||
| + | |||
| + |    (%i1) float(signosTrinomio(-6,-3,14/3));  | ||
| + |    (%o1) [[[-inf,-1.166666656732559],-],[-1.166666656732559,0.0],[[-1.166666656732559,0.66666665673256],+],[  | ||
| + |          0.66666665673256,0.0],[[0.66666665673256,+inf],-]]  | ||
== Ejercicio 3 ==  | == Ejercicio 3 ==  | ||
| Línea 58: | Línea 98: | ||
    (%o1) [3,17]  |     (%o1) [3,17]  | ||
Indicación: Iterar los primos desde x=2 hasta n/1 hasta que n-x sea primo.  | Indicación: Iterar los primos desde x=2 hasta n/1 hasta que n-x sea primo.  | ||
| + | |||
| + | |||
| + |   (%i1)goldbach(n):=block([lista,k],  | ||
| + |    lista : [],  | ||
| + |    for k from 2 thru n do  | ||
| + |       (if primep(k) and primep(n-k) then  | ||
| + |                                         (if k>=n-k then lista  | ||
| + |                                         else lista : cons([k,n-k],lista))),  | ||
| + |    first(reverse(lista)))$  | ||
=== Ejercicio 4.2. ===  | === Ejercicio 4.2. ===  | ||
Descomponer 2010 como suma de dos primos.  | Descomponer 2010 como suma de dos primos.  | ||
| + | |||
| + | |||
| + |   (%i2)goldbach(2010);  | ||
| + |   (%02)[7,2003]  | ||
=== Ejercicio 4.3. ===  | === Ejercicio 4.3. ===  | ||
| Línea 66: | Línea 119: | ||
    (%i1) goldbachTodas(20);  |     (%i1) goldbachTodas(20);  | ||
    (%o1) [[7,13],[3,17]]  |     (%o1) [[7,13],[3,17]]  | ||
| + | |||
| + |   (%i1)goldbachTodas(n):=block([lista,k],  | ||
| + |    lista : [],  | ||
| + |    for k from 2 thru n do  | ||
| + |       (if primep(k) and primep(n-k) then  | ||
| + |                                         (if member([n-k,k],lista) then lista  | ||
| + |                                         else lista : cons([k,n-k],lista))),  | ||
| + |    reverse(lista))$  | ||
| + | |||
| + |    %Otra forma  | ||
| + |    (%i1)goldbachTodas(n):=block([lista,k],  | ||
| + |    lista : [],  | ||
| + |    for k from 2 thru n do  | ||
| + |       (if primep(k) and primep(n-k) then  | ||
| + |                                         (if k>=n-k then lista  | ||
| + |                                         else lista : cons([k,n-k],lista))),  | ||
| + |    reverse(lista))$  | ||
=== Ejercicio 4.4. ===  | === Ejercicio 4.4. ===  | ||
Calcular el número de descomposiciones de 2010 como suma de dos primos.  | Calcular el número de descomposiciones de 2010 como suma de dos primos.  | ||
| + | |||
| + |   (%i1)goldbachTodas(2010);  | ||
| + |   (%01)[[7,2003],[11,1999],[13,1997],[17,1993],[23,1987],[31,1979],[37,1973],  | ||
| + |        [59,1951],[61,1949],[79,1931],[97,1913],[103,1907],[109,1901],[131,1879],  | ||
| + |        [137,1873],[139,1871],[149,1861],[163,1847],[179,1831],[199,1811],[223,1787],  | ||
| + |        [227,1783],[233,1777],[251,1759],[257,1753],[263,1747],[269,1741],[277,1733],  | ||
| + |        [311,1699],[313,1697],[317,1693],[347,1663],[353,1657],[373,1637],[383,1627],  | ||
| + |        [389,1621],[397,1613],[401,1609],[409,1601],[431,1579],[439,1571],[443,1567],  | ||
| + |        [457,1553],[461,1549],[467,1543],[479,1531],[487,1523],[499,1511],[521,1489],  | ||
| + |        [523,1487],[557,1453],[563,1447],[571,1439],[577,1433],[587,1423],[601,1409],  | ||
| + |        [643,1367],[683,1327],[691,1319],[709,1301],[719,1291],[727,1283],[733,1277],  | ||
| + |        [751,1259],[761,1249],[773,1237],[787,1223],[797,1213],[809,1201],[823,1187],  | ||
| + |        [829,1181],[839,1171],[857,1153],[859,1151],[881,1129],[887,1123],[907,1103],  | ||
| + |        [919,1091],[941,1069],[947,1063],[971,1039],[977,1033],[991,1019],[997,1013]]  | ||
Revisión actual del 10:34 8 mar 2011
Sumario
Ejercicio 1
Ejercicio 1.1.
Definir la función tangente tal que tangente(f,a) es la ecuación de la tangente a la función f en el punto de abscisa a. Por ejemplo,
(%i1) (f(x):=x^3, tangente(f,2)); (%o1) y=12*(x-2)+8
Solución
    (%i1)tangente(f,a):=
         (define(D(x),diff(f(x),x)),  
          y=ratsimp(f(a)+D(a)*(x-a)))$
    (%i2) f(x):=x^3$
    (%i3) tangente(f,2);
    (%o3) y=12*x-16
Ejercicio 1.2.
Calcular la tangente a f(x)=ln(tan(|x|) en el punto de abscisa -pi/12.
Solución
(%i1) f(x):=log(tan(abs(x)))$ (%i2) tangente(f,-%pi/12); (%o2) y=(18*%pi^2*x+%pi^3)/864
Ejercicio 2
Ejercicio 2.1.
Definir el procedimiento signosTrinomio tal que signosTrinomio(a,b,c) es la tabla de la variación de los signos del trinomio ax^2+bx+c. Por ejemplo,
(%i1) signosTrinomio(1,-2,1); (%o1) [[[-inf,1],+],[1,0],[[1,inf],+]] (%i2) signosTrinomio(-1,2,-1); (%o2) [[[-inf,1],-],[1,0],[[1,inf],-]] (%i3) signosTrinomio(1,-3,2); (%o3) [[[-inf,1],+],[1,0],[[1,2],-],[2,0],[[2,inf],+]] (%i4) signosTrinomio(-1,3,-2); (%o4) [[[-inf,2],-],[2,0],[[2,1],+],[1,0],[[1,inf],-]] (%i5) signosTrinomio(1,0,1); (%o5) [[[-inf,inf],+]] (%i6) signosTrinomio(-1,0,-1); (%o6) [[[-inf,inf],-]]
Se supone que a es distinto de cero.
Solución
  (%i1)signosTrinomio(a,b,c):=block([S,td,td2],
   S:realroots(a*x^2+b*x+c),
   if length(S)=0 then 
       if a>0 then "[[-inf,+inf],+]"
       else "[[-inf,+inf],-]"
   elseif length(S)=1 then
       (td:rhs(first(S)),
       if a>0 then
          [[["-inf",td],"+"],[td,0],[[td,"+inf"],"+"]]
       else 
          [[["-inf",td],"-"],[td,0],[[td,"+inf"],"-"]])
   else
       (td:rhs(first(S)),
       td2:rhs(second(S)),
       if a>0 then [[["-inf",td],"+"],[td,0],[[td,td2],"-"],[td2,0],[[td2,"+inf"],"+"]]
       else [[["-inf",td],"-"],[td,0],[[td,td2],"+"],[td2,0],[[td2,"+inf"],"-"]]))$
Ejercicio 2.2.
Calcular la tabla de la variación de los signos del trinomio -6x^2-3x+14/3
Solución
  (%i1) float(signosTrinomio(-6,-3,14/3));
  (%o1) [[[-inf,-1.166666656732559],-],[-1.166666656732559,0.0],[[-1.166666656732559,0.66666665673256],+],[
        0.66666665673256,0.0],[[0.66666665673256,+inf],-]]
Ejercicio 3
Se lanza un dado cúbico equilibrado hasta que se obtiene la cara 6 por primera vez. Se designa por X la variable aleatorio que cuenta el número de lanzamientos efectuados. Se dice que X es el tiempo de espera del primer 6.
Ejercicio 3.1.
Definir el procedimiento X() que simule una serie de lanzamientos del dado y devuelva el número de lanzamientos realizados para obtener el 6 por primera vez.
Ejercicio 3.2.
Con la ayuda del bucle for, definir el procedimiento simulacion(n) que simule una serie de n lanzamientos y devuelva la lista de frecuencia de los eventos [X=i] para 1 <= i <= 60. Por ejemplo,
  (%i1) simulacion(1000);
  (%o1) [0,145,115,104,88,61,65,53,51,50,40,28,30,29,27,13,21,18,10,6,8,4,9,3,
         5,1,2,4,3,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
         0,0,0]
Ejercicio 3.3.
Definir la función media tal que media(n) es el valor medio de X en n lanzamientos. Calcular tres veces media(1000).
Ejercicio 4
La conjetura de Goldbach afirma que todo número natural par mayor que 3 se puede escribir como la suma de dos números primos. Por ejemplo,
- 4 = 2 + 2, 20 = 3 + 17, 50 = 3 + 47
 
Ejercicio 4.1.
Definir la función goldbach tal que goldbach(n) es una descomposición de n como suma de dos números primos. Por ejemplo,
(%i1) goldbach(20); (%o1) [3,17]
Indicación: Iterar los primos desde x=2 hasta n/1 hasta que n-x sea primo.
 (%i1)goldbach(n):=block([lista,k],
  lista : [],
  for k from 2 thru n do
     (if primep(k) and primep(n-k) then
                                       (if k>=n-k then lista
                                       else lista : cons([k,n-k],lista))),
  first(reverse(lista)))$
Ejercicio 4.2.
Descomponer 2010 como suma de dos primos.
(%i2)goldbach(2010); (%02)[7,2003]
Ejercicio 4.3.
Definir la función goldbachTodas tal que goldbachTodas(n) es la lista de todas las descomposiciones de n como suma de dos números primos x e y con x<=y. Por ejemplo,
(%i1) goldbachTodas(20); (%o1) [[7,13],[3,17]]
 (%i1)goldbachTodas(n):=block([lista,k],
  lista : [],
  for k from 2 thru n do
     (if primep(k) and primep(n-k) then
                                       (if member([n-k,k],lista) then lista
                                       else lista : cons([k,n-k],lista))),
  reverse(lista))$
  %Otra forma
  (%i1)goldbachTodas(n):=block([lista,k],
  lista : [],
  for k from 2 thru n do
     (if primep(k) and primep(n-k) then
                                       (if k>=n-k then lista
                                       else lista : cons([k,n-k],lista))),
  reverse(lista))$
Ejercicio 4.4.
Calcular el número de descomposiciones de 2010 como suma de dos primos.
 (%i1)goldbachTodas(2010);
 (%01)[[7,2003],[11,1999],[13,1997],[17,1993],[23,1987],[31,1979],[37,1973],
      [59,1951],[61,1949],[79,1931],[97,1913],[103,1907],[109,1901],[131,1879],
      [137,1873],[139,1871],[149,1861],[163,1847],[179,1831],[199,1811],[223,1787],
      [227,1783],[233,1777],[251,1759],[257,1753],[263,1747],[269,1741],[277,1733],
      [311,1699],[313,1697],[317,1693],[347,1663],[353,1657],[373,1637],[383,1627],
      [389,1621],[397,1613],[401,1609],[409,1601],[431,1579],[439,1571],[443,1567],
      [457,1553],[461,1549],[467,1543],[479,1531],[487,1523],[499,1511],[521,1489],
      [523,1487],[557,1453],[563,1447],[571,1439],[577,1433],[587,1423],[601,1409],
      [643,1367],[683,1327],[691,1319],[709,1301],[719,1291],[727,1283],[733,1277],
      [751,1259],[761,1249],[773,1237],[787,1223],[797,1213],[809,1201],[823,1187],
      [829,1181],[839,1171],[857,1153],[859,1151],[881,1129],[887,1123],[907,1103],
      [919,1091],[941,1069],[947,1063],[971,1039],[977,1033],[991,1019],[997,1013]]
