Listados de problemas

ver: demos hechos en clase 2005
                                              

Listado 1 última semana de Abril los problemas a) y d) del listado siguiente:
  a) Construir una función que reciba un entero como argumento y que retorne su factorial.
  b) Construir una función que calcule y retorne la hipotenusa de un triangulo rectangulo.
  c) Costruir una función que retorne un entero con el número de 1's binarios que hay en un entero.
       ayuda de operaciones binarias:
                      c = a | b; // or binario:  1+1=1, 1+0=1, 0+1=1, 0+0=0
                      c = a&b;// and binario: 1*1=1, 1*0=0, 0*1=0, 0+0=0
                      c = a^b; // xor binario:  1^1=0, 1^0=1, 0^1=1, 0+0=0
                      c = ~a;   // complemento a 1, es decir cambia los 1's por 0's y los 0's por 1's
                      c = c << n; // desplaza n veces los bits a la izquierda e inserta 0's a la derecha.
                                   ej.:        0xff<< 2  queda 0xfe (hexadecimal)
                      c = c >>n; //idem anterior pero a la derecha.              
  d) Graficar una función senoidal y los ejes correspondientes
       #include <math.h>
       double sin(double x);  //x está en radianes

e) Lo mismo de d) pero dibujar con un color el semiciclo positivo y con otro el negativo.  
 f) Dibujar cuadrados de 15x15 pixeles desde las cordenadas (0,0) hasta las coordenadas (300,300)
      y que el cuadrado siguiente tenga su esquina superior izquierda en el centro del anterior.
  g) Dibujar un círculo  cuyas coordenadas y radio se leen por teclado y se almacenan
       en las varibles globales enteras:     xx, yy, rr.
  h) Crear un programa que lea "n" enteros por teclado y entregue como salida el entero menor, el mayor y la suma (sólo main()).
  i)  Crear una función que determina si un entero es primo.
 j) Hacer un programa que lea un string por teclado y determine si se encuantra dentro de un diccionario de palabras almacenado en un arreglo de string.
  l) Crear un programa que lea un conjunto de "n" de caracteres por teclado y entregue como salida el número de veces que se ingresó cada caracter (ej: todas las minúsculas). Ayuda: declarar una variable para llevar la cuenta de cada símbolo del alfabeto.
  m) Lo mismo de l) pero contando las mayúsculas. las minúsculas y los dígitos. Ayuda: usar funciones isdigit(--), etc.
       de #include <ctype.h>
  n) Hacer un programa que imprima los números impares en un ciclo iterativo dentro de la función main().
  o) Lo mismo que n) pero que lo haga mediante una función recursiva.
  p) Hacer una función que, dado un número n, obtenga simultaneamente el cuadrado y el cubo del número de n. La función
      main() debe leer el número por teclado e imprimir el n, el n cuadrado y el n cubo que obtiene la función.
      La función debe retornar void y los resultados no quedan necesariamente en variables globales.
  q) Determine que hacen los programas siguientes:
main(){
int i,j,k;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
for(k=0;k<8;k++)printf("%01d%01d%01d\n",i,j,k);
}
 ------------------------
void f(int *);
int main(){
int x = 3;
f(&x);
printf("%d\n",x);
}

void f(int *y){
*y = *y + 5;
}

------------------

void f(int);
int main(){
int x = 3;
f(x);
printf("%d\n",x);
}


void f(int y){
y = y + 5;
}

------------------

void f(int *, int);
int main(){
int x = 3, y = 5;
f(&x, y);
printf("%d\t%d\n",x, y);
}

void f(int *y, int z){
*y = *y + 5;
z = z + 3;
}

------------------

int dato[2];
main(){
int x;
x = almacen(999);
printf("%d\n",x);
x = almacen(888);
printf("%d\n",x);
x = almacen(777);
printf("%d\n",x);
x = almacen(666);
printf("%d\n",x);
x = almacen(555);
printf("%d\n",x);
}
int almacen(int entrada){
int salida;
salida = dato[1];
dato[1] = dato[0];
dato[0] = entrada;
return salida;
}


 Listado 2:
a) Hacer una función que invierta un string. Se le debe pasar la referencia al string.
b) Hacer una función que devuelva un vector de índices que represente el ordenamiento de un arreglo de strings.
c) Hacer una función que reciba la referencia a un string con una expresión que contiene paréntesis y retorne "0" si los paréntesis
     están pareados y "1" si no lo están.
d) Dibujar una circunferencia con una línea de radio que vaya rotando.
e)  Lo mismo que d) pero que además la circunferencia vaya  rodando.
e) Crear una arreglo de estructuras cuyos elementos se puedan accesar también en forma encadenada.

 Listado 3:
f) Crear una función recursiva que devuelva la suma de los "n" primeros enteros
g) Hacer una función que reciba un puntero a una estructura y la inserte al comienzo de una fila. Debe ser una función recursiva.
i) Crear un programa que multiplique dos matrices.
j) Construya una función que rote circularmente el contenido de un arreglo.
k) Cosntruya un programa que rote circularmente el contenido de un archivo sin usar un arreglo igual al archivo. (probar ambos sentidos).



Tarea 2 (con nota):
 Mostrar graficamente el funcionamiento del algortimo de ordenamiento de la burbuja visto en clases.
   Algunas sugerencias de formas de representar los enteros graficamente:
    -  utilizar la funciones sprintf y  drawString para imprimir los valores.
    -  representar cada numero como una barra cuyo alto y/o ancho depende del valor del numero.
    -  lo mismo usando circulos.
    -  representar cada numero por un rectangulo y la coordenada x depende del valor del numero.
    -  mezclar algunas de las ideas anteriores.
Formas de ingreso valido de los numeros:
    - ingresarlos usando scanf antes de llamar a l ambiente grafico.
    - ingresarlos usando scanf durante el ambiente grafico
    - ingresarlos usando el mouse (mousePress).

    Tarea 2 (sin nota): Dibujar un cuadrado grande, dibujar un cuadrado más pqueño que se pueda mover con mouseDrag().
     En todo momento debe aparecer un texto que describa la relación espacial del cuadrado pequeño respecto del grande.