Вы находитесь на странице: 1из 5

INTRODUCCIÓN A LA PROGRAMACIÓN 1.

CURSO 2005/2006
PRIMER CONTROL- I.I. 1/12/2005

TEORÍA

Los conjuntos de números naturales se pueden implementar como una tabla de valores lógicos, con un valor cierto (C) en
la posición i si i está en el conjunto. De esta forma si A = {1,4,8,9} su representación como tabla sería
{C,F,F,C,F,F.F,C,C,F, ... ,F}.

Un algoritmo para encontrar los números primos menores de una constante dada N es conocido como la criba de
Eratóstenes y consiste en tachar repetidas veces de una lista, a partir del primer número sin tachar (pues p.e. los múltiplos
de 4 ya lo son de 2), todos los múltiplos de él. Los números que queden sin tachar son primos.

Ejemplo (para N=20):

Paso 1. Múltiplos de 2: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Paso 2. Múltiplos de 3: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Paso 3. Múltiplos de 5: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Y así sucesivamente.

Se pide implementar el procedimiento de Eratóstenes utilizando el tipo Tconjunto definido al principio para que devuelva
los números primos entre 2 y N. Supongamos N constante ya definida.
APELLIDOS NOMBRE GRUPO
mero

TEORÍA

cons
N : ....
tipos
Tconjunto : Tabla [N] de lógico

proc Eratostenes(sal tabprimos : Tconjunto)


var /*defina las variables enteras que estime conveniente */
________________
prin
___________________________
desde ______________________
si _______________
__________________________
otras:
_____________
fsi
findesde
fin

proc inicializa_conjunto(______________________)
var
_______________
prin
desde __________________________
______________________________
fdesde
fin

proc elimina_múltiplos (_____________________________)


var
_____________________________
prin
______________________
mientras ________________
_____________________
_____________________
fmientras
fin
INTRODUCCIÓN A LA PROGRAMACIÓN 1. CURSO 2005/2006
PRIMER CONTROL – I.I. 1/12/2005

APELLIDOS NOMBRE GRUPO


mero

PRÁCTICAS

Cuestión 1 (1 punto)
Dado el siguiente programa en C, indique cuál es la salida por pantalla:

#include <stdio.h>
void main(void)
{
int x,y;
x=6;
y=0;
if(x%3)
y=10/x;
else
y=50/x;
printf("y vale: %d\n",y);
}

Salida: ___________________________________________________________

Cuestión 2 (1,5 puntos)


Escriba qué mostraría por la salida estándar el siguiente programa:

#include <stdio.h>
void main (void)
{
int count = 10, sum = 0;
int *temp;

temp = &count;
*temp = 20;
temp = &sum;
*temp = count;
printf("count = %d, *temp = %d, sum = %d\n", count, *temp, sum );
}

Salida: ___________________________________________________________

Cuestión 3 (1 punto)
Sean las siguientes definiciones y declaraciones:

typedef int R1[20]; R2 r, *pr;
typedef enum {uno, dos, tres} R2 ; TR2 tr;
typedef R1 TR2[20]; float x;

Dada la invocación

hacer (*pr,&x, tr, tr[0]);

indique cuáles de los siguientes prototipos son o no correctos, justificando la respuesta.


a) void hacer (R2, float *, TR2, R1);
b) void hacer (R2 *, float *, R1 *, R1);
c) void hacer (R2 , float *, R1 *, R1);

Cuestión 4 (1,5 puntos)


1. Defina un tipo Ts para una tabla que permita almacenar 9x9 elementos de tipo entero. Declare una tabla s de tipo Ts
2. Escriba un bucle for que sume los elementos positivos de la columna i-ésima de la matriz s
3. Escriba una posible declaración de una función f que cuente el número de veces que se repite un valor dado en una
columna de una matriz de tipo Ts

Cuestión 5 (1 punto)
Considérese el siguiente trozo de programa

int i=1;
while (i<=n)
{
if ((i%n)==0)
i++;
}
printf(“%d\n”,i);

a) ¿Cuál es la salida si n es 0? _______________


b) ¿Cuál es la salida si n es 1? _______________
c) ¿Cuál es la salida si n es 3? _______________

Cuestión 6 (1,5 puntos)


Tres segmentos pueden formar un triángulo isósceles si dos de ellos tienen la misma longitud y la suma de ambos es
mayor que el tercero. Escriba una expresión lógica en C que devuelva cierto si tres segmentos de longitudes a, b y c
pueden formar un triángulo isósceles siguiendo el razonamiento anterior.
APELLIDOS NOMBRE GRUPO
mero

Cuestión 7 (2,5 puntos)


En matemáticas dada una matriz cuadrada 4 X 4 se define la diagonal principal como los valores de la matriz que ocupan
la misma fila y la misma columna. Y la diagonal secundaria se define por los elementos cuyo índice fila y columna suman
la dimensión + 1, en este caso 5. (En C la suma sería la dimensión – 1)

Por ejemplo dada la matriz

1 2 3 4
5 6 7 8
1 2 3 4
5 6 7 8

La diagonal principal está formada por los elementos {1,6,3,8} y la diagonal secundaria por {4,7,2,5}.

a) Completa el código que se da para imprimir la media de los valores por columna desde la primera fila hasta la diagonal
principal inclusive. Es decir, para la matriz anterior el programa debe imprimir

la media de la columna 0 es: 1.000000 1/1


la media de la columna 1 es: 4.000000 (2+6)/2
la media de la columna 2 es: 4.333333 (3+7+3)/3
la media de la columna 3 es: 6.000000 (4+8+4+8)/4

for _______________________________________
{
____________________________________

for________________________________________

__________________________________________

printf("________________________________________________
}

b) Completa el código que se da para imprimir la media de los valores por fila desde la diagonal secundaria inclusive
hasta la última columna. Es decir, para la matriz anterior el programa debe imprimir

la media de la fila 0 es: 4.000000 4/1


la media de la fila 1 es: 7.500000 (7+8)/2
la media de la fila 2 es: 3.000000 (2+3+4)/3
la media de la fila 3 es: 6.500000 (5+6+7+8)/4

for _______________________________________
{
____________________________________

for________________________________________

__________________________________________

printf("________________________________________________
}

Вам также может понравиться