Archivos de la categoría ‘código’

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;
}

convierte (ejemplo)

Diciembre 10, 2008

/* spoj429.c, simple numbers conversion
epimente, septiembre 2008 */

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

long potencia(long b, int e) {
// eleva b a la e (enteros positivos)
long p = 1; /* potencia */
while (e–) p *= b;
return p;
}

long aBase10(char n[], int b) {
/* convierte n, dado en base b, a base 10 */
long d = 0; /* n en base 10 */
int i , j, e, ln = strlen(n), p = ln-1; /* posicion en n, j, encontrado, longitud, potencia */
char c[] = “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”; /* caracteres */
for (i = 0; i < ln; i++) {
e = 1;
for (j = 0; e && j < 36; j++)
if (n[i] == c[j]) e = 0;
d += potencia(b, p–)*–j;
}
return d;
}

void aBaseB(char c[], long n, int b) {
/* convierte n a base b, resultado en c */
char d[] = “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”; /* caracteres */
int i = 0; /* posicion en c */
while (n > 0) {
c[i++] = d[n%b];
n /= b;
}
c[i++] = ”;
}

void voltea(char c[]) {
/* voltea cadena c*/
int s, b = strlen(c)-1, n = (b+1)/2; /* sube, baja, # de pasos */
char t; /* temporal */
for (s = 0; s < n; s++) {
t = c[s]; c[s] = c[b]; c[b--] = t;
}
}

int main() {
char num[] = “XYZ”, con[100];
long lon;
lon = aBase10(num, 36);
printf(“%ld\n”, lon);
aBaseB(con, lon, 2);
voltea(con);
printf(“%s\n\n”, con);
system(“pause”);
return 0;
}

primeros t primos

Diciembre 3, 2008

Obtiene entero a partir de los digitos ordenados de otro

Diciembre 3, 2008

a little asembly required

Noviembre 19, 2008

Math.Sqrt() y tbxNom.Focus(), en C#

Noviembre 18, 2008

Para ilustrar el uso de funciones matemáticas y asignar el foco a un componente en C#, ver el siguiente ejemplo:

private void button1_Click(object sender, EventArgs e)
{
double n, r; // numero, raiz cuadrada
n = Convert.ToDouble(tbxnum.Text);
r = Math.Sqrt(n);
tbxraz.Text = Convert.ToString(r);
tbxnum.Focus();
}

ecabrera, noviembre 2008.

Traxar línea en c#

Octubre 6, 2008

System.Drawing.Pen myPen;
myPen = new System.Drawing.Pen(System.Drawing.Color.Red);
System.Drawing.Graphics formGraphics = this.CreateGraphics();

formGraphics.DrawLine(myPen, 0, 0, 100, 100);

myPen.Dispose();
formGraphics.Dispose();

primer triangular de n dígitos

Septiembre 11, 2008

1. Obtenga el primer número triangular que tiene n dígitos.
Los números triangulares se obtienen mediante la fórmula
t = n(n+1)/2. Los primeros 10 números triangulares son
1, 3, 6, 10, 15, 21, 28, 36, 45, 55. Note que el primer
número triangular de dos dígitos es 10.

int priTriNDig(int n) {
/* retorna el primer numero triangular de n digitos */
int nt, cp, nd = 0, k = 1;
while (nd < n) {
nt = k*(k+1)/2;
cp = nt;
nd = 1;
while (cp > 9) {
cp /= 10;
nd++;
}
k++;
}
return nt;
}

longitud cadena

Septiembre 11, 2008

0. Obtenga la longitud de la cadena de números que empieza con un número entero positivo dado y se va sustituyendo por el triple del número más uno (n <– 3*n+1) si es impar, o por la mitad (n <– n/2) si es par. Si la cadena comienza con 13, se obtiene 13 -> 40 -> 20 -> 10-> 5 -> 16 -> 8 -> 4 -> 2 -> 1, por lo que la longitud es 10.

int lonCad(int n) {
int c = 1; //  longitud  cadena (incluye al numero)
while (n != 1)   {
if (n%2)
n = 3*n + 1;
else
n /= 2;
c++;
}
return c;
}

cabrera’s c code collection corner, 12, dayBefore

Septiembre 4, 2008