Archivo de Marzo 2009

ejercicio C en clase Sección 70)

Marzo 30, 2009

// Calcula la suma de los factores

#include <stdio.h>
#include <stdlib.h>

#define MAX 100

int leeCant(int a, int b) {
  // lee entero en [a,b]

  int n; // # a retornar

   printf(“# entero entre %d y %d: “, a, b);

     do
       scanf(“%d”, &n);
     while(n < a || n> b);

  return n;
}

void leeVal(int n[], int c)
   {
   // lee los c naturales y colocaca en n[]

   int p; //posición

      for (p = 0; p < c; p++)
        {
        printf(“valor # %d: “, p+1);
        scanf(“%d”, &n[p]);
     }
}

int suma(int x) {
   // suma de factores de x

   int s = 1, k; // suma, contador

      for (k = 2; k <= x/2; k++)
         if (x % k == 0) s+=k;

   return s;
}

void sumas(int s[], int n[], int c)
   {
   // Suma de los factores propios de c valores naturales en n[]

   int p; // posición

      for (p = 0; p < c; p++)
        s[p] = suma(n[p]);
}

void despliega(int s[], int c)
  {
   // despliega los c valores en s[]

   int p; // posición

      for(p = 0; p < c; p++)
        printf(“%d “, s[p]);
       
   printf(“\n\n”);   
}

int main(int argc, char *argv[])
   {
   int n; // # natural
   int cant, num[MAX], sum[MAX];

   printf(“Obtiene sumas de los factores propios.\n\n”);

   cant = leeCant(1, MAX);

   leeVal(num, cant);

   sumas(sum, num, cant);

   despliega(sum, cant);

   system(“PAUSE”);
   return 0;
}

descubre la matemática con tu micro (y C#)

Marzo 26, 2009

Los floreros de Salvador

Hace algún tiempo Salvador compró 100 floreros para verderlos en un mercadillo. La semana pasada, después de haber vendido algunos de ellos en los días anteriores, tenía los floreros ordenados en 6 filas, con el mismo número de unidades en cada una de ellas. En esa semana vendió 8 floreros y en la actualidad tiene los que le quedan, orednados en 11 filas, con el mismo número de floreros en cada una. ¿Cuántos floreros tiene Salvador para vender todavía?

El hecho de que Salvador empezó con 100 floreros, vendió x de ellos, y los que le quedaban la semana pasada los tenía dispuestos en 6 filas con y unidades en cada una, lo podemos resumir:

(1)  100 – x = 6y

Y el que luego vendió 8 floreros y los que le quedan los tiene dispuestos en 11 filas con z unidades en cada una se resume:

(2)  6y – 8 = 11z

Sustituyendo (1) en (2):

(3)  100-x – 8 = 11z

Despejando a z en (3):

z = (92 – x) / 11

Por lo que tenemos solución para todo x = 1, 2,  3, … 91,  que sea (92-x)  sea un múltiplo de 11. Por tanto, basta recorrer un ciclo que empezando en x =  1, incrementando en 1, hasta llegar a 91, y verificando que cada valor de (92 – x) sea múltiplo de 11.

Una función C# para esto podría ser:

private void florerosSalvador(int[] f, ref Int32 s)
{
// los floreros de Salvador. f[] contiene las soluciones y s el número de ellas

int x, ze; // contador de 1 a 91; parte entera de z
float z; // (92-x)/11

s = 0; // posición en f[] y cantidad de soluciones

for (x = 1; x < 92; x++)
{
z = (92 – x )/11;
ze = (int) z;
if (z – ze > 0) { f[s++] = x; tbxs.Text += Convert.ToString(x) + ” “; }
}
}

(3) 100- x = 11z

Y despejando a x en la ecuación (3):

(4)  x = 100 – 11z

Sustituyendo la ecuación (4) en la (1):

un alfabeto ideal

Marzo 26, 2009

Los idiomas como el español, inglées, portugués, afrancés, alemán, entre muchos otros, tiene lo que se llama un alfabeto, es decir, un conjunto de símbolos mediante los cuales se pueden escribir las distintas palabras que se usan en cada idioma.

Esto contrasta con idiomas, llamados monilábicos, como el chino y sus dialectos, en que cada palabra es prácticamente un dibujo, llamado idiograma, lo cual implicaba que una máquina de escribir en chino tenga un teclado enorme y que el mecanógrafo más rápido sólo puede escrbir algunas pocas palabras por minuto. En contraste, un mecanógrafo muy hábil, puede escribir decenas de palabras por minuto.

Algo similar ocurrió con los sistemas numéricos, pues los romanos escribían los números con un sistema no muy práctico. He aquí : I, II, III, Iv, V, VI, VII, VIII, IX, X, …

Práctica en clase (“comer aquí”)

Marzo 26, 2009

Práctica en clase:

0. Para cada enunciado, diseñe un programa C#, Windows Form Application, que lo resuelva:

1. Determinar si una fecha (d, m, a) es válida (use una función auxiliar para validar). [20%]

2. Obtenga todos los números naturales que tienen igual su primer y último dígitos en el intervalo. [a, b]. [30%]

3. Obtenga el número de días entre dos fechas dadas (d, m , a). No tome en cuenta los años bisiestos. [50%]

ecabrera, marzo 2009.

secuencias

Marzo 19, 2009

Consideremos algunas secuencias de números naturales, los cuales se pueden dividir en dos categorías: los pares y los impares. Los pares son los que treminan en 0, 2, 4, 6 u 8. Y los impares son los que terminan en 1, 3, 5, 7, o 9. E aquí los primeros pares:

0 2 4 6 8 10 12 14 16 18 20 22 24 …

Y los primeros impares:

1 3 5 7 9 11 13 15 17 19 21 23 25 27 …

Dicho sea de paso, los números pares dejan residuo cero cuando se dividen por dos, mientras que los impares dejan residuo uno.

ecabrera, marzo 2009.

naturales

Marzo 19, 2009

Los números naturales son los que usamos para representar cantidades, como la edad, la estatura, el peso, la fecha, la hora, entre otras muchas cosas.

Algunas de esas cantidades no admiten ser subdivididas, como ocurre cuando contamos el número de personas en un lugar, los días que han transcurrido a partir de una fecha, el número de dientes que le han salido a nuestro niño, las veces que se ha visistado una casa, y para tú de contar. A estos números les llamamos naturales.

El primero de los números naturales, históricamente, es el uno, pues se suele empezar a contar por uno, pero lógicamente hoy algunos piensan que el primer número natural es el cero, porque fue introducido para significar la uasencia de cantidad, la “nada” en un adeterminada cifra de un número escrito en un sistema numérico posicional. Por ejemplo, si el sistema es el decimal, los primeros diez números naturales son 1, 2, 3, 4, 5, 6, 7, 8 y 9.

Pero para continuar contando, sumándole uno a 9, no tenemos más símbolos, por lo que escribimos 10, indicando que la posición de las unidades está vacío (de ahí el cero) está ahora vacía y que hay una unidad en la pisición de las decenas.

Por tanto, el cero, aunque no surgió primero para empezar a contar en la historia, sino el uno, sí surgió de manera muy natural a la hora de crear un sistema numérico superior al de los romanos con su  I, II, III, IV, V, VI, VII, VIII, IX, X, … muy bueno para marcar las horas de los relojes, los años en el calendario, en fin, los ordinales de todo tipo, pero muy indadecuado para realizar operaciones aritméticas, incluyendo la suma.

Aquí, pues, asumiremos que el cero es el primer número natural es el cero, lo cual encaja perfectamente con una era digital, en que los primeros diez números enteros naturales se pueden escribir 0, 1, 10, 11, 100, 101, 110, 111, 1000,  y 1001 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9). En lo adelante, sin embargo, salvo que indique otra cosa, los números estarán siempre escritos en base diez, en el sistema decimal.

Los primeros números naturales son, pues:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 …

ecabrera, marzo 2009.

ula (un lenguaje algorítmico)

Marzo 19, 2009

Para la asignatura elementos de computación (ing-202) del intec necesitamos un lenguaje algorítmico de acuerdo con los cambios que hemos introducido en el programa. Me propongo aquí redactarlo, con la ayuda de ustedes.

ecabrera, marzo 2009.

Ejemplo de ‘Windows Form Application’

Marzo 11, 2009

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace perfectos {

public partial class Form1 : Form {

public Form1() {

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Int32 a, b, k, cp = 0; // extremo a, b, contador, cantidad de perfectos

a = Convert.ToInt32(tbxa.Text);

b = Convert.ToInt32(tbxb.Text);

tbxp.Text = “”;

for (k = a; k <= b; k++)

if (perfecto(k)) tbxp.Text += Convert.ToString(k) +” “; tbxa.Focus();

}

static bool perfecto(Int32 n) {

// determina si un número natural es perfecto (igual que la suma de sus factores propios)

bool s = false;

// si es, asume si

Int32 sum = 0, k;

// suma, contador

for (k = 1; k <= n / 2; k++)

if (n % k == 0) sum += k;

if (n == sum) s = true;

return s;

}

}

}

C#, empezando.

Marzo 11, 2009

C# es un lenguaje de programación procedural de referencia adoptado en el intec para la asigntura Elementos de Computación (ING-202), a partir del trimestre febrero-abril 2009.

Se inicia desarrolllando programas sencillos en la modalidad ‘Console Application’ en la primera semana, para crear la base de dominio de las estructuras secuenciales, selectivas y  repetitivas, y las estructuras de datos básicas, pero a partir de la sexta semana se pasa a “Windows Form Applications’ para aplicar lo aprendido a un entorno gráfico, más intitivo y amigable, y adquirir nuevas habilidades específicas de la programación orientada a objetos.

Para generar nuestra primera aplicación de consola C# se asegura que el lenguaje de programación elegido en  Visual Studio sea C# y una vez lanzada la aplicación, se pulsa el botón ‘New Project’ (Proyecto nuevo) bajo la línea de menú, o se elige la secuencia File->New-Project (archivo->Nuevo-Proyecto) del menú.

En la ventana que sale a la izquierda, ‘Project types’  (Tipos  de proyectos), se asegura que el lenguaje elegido sea C#, y en la de derecha, ‘Templates’ (plantillas) se asegura de seleccionar ‘Console Application’ (Aplicación de conosla) se asigna nombre al proyecto (Name), se especifica la carepeta (Location),   y se pulsa “Ok’. Entonces se genera el esqueleto de una aplicación de consola:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
}
}
}

Continuará…

ecabrera, marzo 2009.

“Foro” Laboratorio Elementos de Computación (secciones 74, 75, 79 y 81)

Marzo 10, 2009

Nología: Dícese del arte y ciencia de decir NO.

Muchas personas se meten en tamaños problemas por no saber decir que no, de manera simple y tranquila, sin resabios ni contienda, sin mala conciencia ni culpa. Sencillamente no saben decir no.

Más aún, se aconseja a los padres no decir mucho que no a los hijos, para no frustarlos, para no bajar su autoestima, para no hacerlos personas apocadas.

Recientemente pasaron en el cine la película “Sí, Señor”, muy interesante, con un bonito mensaje, protagonizada por Jim Carrey, entre otros, y resalta la importancia, la necesidad de decir Sí a la vida, a las oportunidades.

Pero mirando el mundo en que vivimos, en que la gente le dice sí a tantas cosas que la dañan, entendemos que conviene desarrollar el arte y ciencia de decir No. Y creemos que es todo un arte y ciencia porque implica discernir claramente cuándo decir NO, para no hacerlo cuando deberíamos decir Sí.

Coloque aquí un comentario sobre este tema de nos más de 100 palabras.

ecabrera, marzo 2009.

Retro:

Muy interesantes los comentarios, pero insisto, ¿se justifica una ciencia y arte del decir NO?