Download informática - Informatica

Document related concepts
no text concepts found
Transcript
INFORMÁTICA
Curso 2.011 / 2.012
Bilbao, 27 de Junio de 2012
Tiempo: 2 h
Los divisores propios de un entero N son los divisores positivos menores que N. Un entero positivo
se dice que es un número Deficiente, Perfecto o Abundante si la suma de estos divisores propios
es menor que, igual a, o mayor que el número, respectivamente. Así:
8 es Deficiente porque sus divisores 1, 2, 4 verifican 1+ 2 + 4 < 8
6 es Perfecto porque sus divisores 1, 2, 3 verifican 1 + 2 + 3 = 6
12 es Abundante porque sus divisores 1, 2, 3, 4, 6 verifican 1 + 2 + 3 + 4 + 6 > 12
Se dispondrá de ficheros ya existentes, como por ejemplo el fichero NUMEROS.DAT, cuyos
elementos contienen la siguiente información:
Integer
ARRAY [1..50] OF Integer
Integer
STRING [15]
Numero
Divisores
NumDivisores
Clase
donde el campo NumDivisores está inicializado a cero y el campo Clase está inicializado
a la Cadena Vacía.
Ejemplo:
NUMEROS.DAT
18
8
…
0
6
…
0
12
…
0
…
0
PROGRAMA
El programa, en primer lugar, pedirá el nombre del fichero y, si no existe, tras mostrar un mensaje de
error finalizará su ejecución.
Si el fichero existe, continuará la ejecución del programa realizando las tareas que se describen a
continuación en el orden propuesto:
 Muestre el contenido del fichero *(ver nota final)
 Modifique correctamente el fichero
El programa deberá cambiar el contenido del fichero, modificando para ello los campos
Divisores, NumDivisores y Clase respectivamente según la definición de divisor
propio de un entero.
Informática
1/3
Ejemplo:
NUMEROS.DAT
18
1 2 3 6 9 …
5
8
1 2 4
3
Abundante
Deficiente
…
6
1 2 3 3
…
Perfecto
12
1 2 3 4 6 …
5
Abundante
 Vuelva a mostrar el contenido del fichero *(ver nota final)
 Organice la información del fichero
Deberá organizar la información para que aparezcan en el fichero primeramente los números
Deficientes a continuación los Perfectos y por último los Abundantes.
Dentro de cada clase, los elementos no tienen que guardar orden alguno.
Ejemplo:
NUMEROS.DAT
8
1 2 4
3
6
1 2 3 3
…
Deficiente
…
Perfecto
18
1 2 3 6 9 …
5
12
1 2 3 4 6 …
5
Abundante
Abundante
 Vuelva a mostrar el contenido del fichero *(ver nota final)
 Encuentre el menor número par Abundante
Si existe se visualizará en pantalla el menor número par y Abundante almacenado en el
fichero. En caso contrario, se visualizará el mensaje de error No hay ningún numero
par Abundante.
En el ejemplo, mostraría el número 12.
Se exige:
Estructurar correctamente el programa según las normas de programación estructurada. Para ello,
además de un subprograma por cada tarea descrita, utilizar como mínimo los siguientes
subprogramas:
CalcularDivisores: Recibe un número y devuelve la lista de sus Divisores.
ModificarElemento: Recibe un registro y retorna el registro modificado
Ejemplo:
recibe
y retorna
18
…
0
18
1 2 3 6 9 …
5
Abundante
* NOTA: Mostrar el contenido del fichero
Mostrará todos los números (Numero) contenidos en el fichero, junto su Clase (sólo si
se ha calculado) y con la lista de sus Divisores (sólo si se han calculado).
Informática
2/3
Procedimientos y funciones utilizados a lo largo del curso (además de ReadLn y WriteLn):
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
ABS (
SQR (
SQRT (
SQRT (
EXP (
LN
(
SIN (
COS (
ARCTAN
ROUND
TRUNC
FRAC (
INT (
CHR (
ORD (
PRED (
SUCC (
PROCEDURE DEC
PROCEDURE
FUNCTION
FUNCTION
FUNCTION
PROCEDURE
FUNCTION
FUNCTION
PROCEDURE
FUNCTION
FUNCTION
FUNCTION
FUNCTION
FUNCTION
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
FUNCTION
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
FUNCTION
FUNCTION
FUNCTION
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
Numero : Integer | Real ) : Integer
Numero : Integer | Real ) : Integer
Numero : Integer | Real ) : Real ;
Numero : Integer | Real ) : Real ;
Numero : Real ) : Real ;
Numero : Real ) : Real ;
Angulo : Real ) : Real ;
Angulo : Real ) : Real ;
( Tangente : Real ) : Real ;
( Numero : Real ) : Integer ;
( Numero : Real ) : Integer ;
Numero : Real ) : Real ;
Numero : Real ) : Real ;
Numero : Integer ) : Char ;
Variable_Ordinal : Tipo_Ordinal ) :
Variable_Ordinal : Tipo_Ordinal ) :
Variable_Ordinal : Tipo_Ordinal ) :
| Real ;
| Real ;
Integer ;
Tipo_Ordinal ;
Tipo_Ordinal ;
(VAR Variable_Ordinal : Tipo_Ordinal [ , Numero : Integer  ) ;
INC (VAR Variable_Ordinal : Tipo_Ordinal [ , Numero : Integer  ) ;
UPCASE
( Variable : Char | STRING ) : Char | STRING ;
LOWERCASE ( Variable : Char | STRING ) : Char | STRING ;
READKEY : Char ;
RANDOMIZE ;
RANDOM ( Numero : Integer ) : Integer ;
RANDOM : Real ;
CLRSCR ;
SIZEOF ( Tipo_Variable | Identificador_Variable ) : Integer ;
LENGTH ( Cadena : STRING ) : Byte ;
COPY
( Cadena: STRING ; PosicionInicial, Cantidad : Byte ) : STRING ;
CONCAT ( Cadena : STRING [ ; Cadena : STRING ] ) : STRING ;
POS
( CadenaABuscar, CadenaDondeBuscar : STRING ) : Byte ;
DELETE ( VAR Cadena : STRING; PosicionInicial, Cantidad : Byte ) ;
INSERT ( Cadena: STRING ; VAR Cadena: STRING; Posicion : Byte ) ;
STR
( Numero : Integer | Real [ : Formato ]; VAR Cadena : STRING ) ;
VAL
( Cadena : STRING ; VAR Numero : Integer | Real ; VAR Error: Byte ) ;
FILEEXISTS ( Nombre: STRING ) : Boolean ;
ASSIGN
( VAR Fichero_Logico : TipoFichero ; Nombre: STRING ) ;
RESET
( VAR Fichero_Logico : TipoFichero ) ;
REWRITE ( VAR Fichero_Logico : TipoFichero ) ;
CLOSE
( VAR Fichero_Logico : TipoFichero ) ;
WRITE
( [ VAR Fichero_Logico : TipoFichero ]
[; VAR Variable : TipoBaseFich ] …[ ; VAR Variable : TipoBaseFich ] );
READ
( [ VAR Fichero_Logico : TipoFichero ]
[; VAR Variable : TipoBaseFich ] …[ ; VAR Variable : TipoBaseFich ] );
EOF
( VAR Fichero_Logico : TipoFichero ) : Boolean ;
FILESIZE ( VAR Fichero_Logico : TipoFichero ) : Integer ;
FILEPOS ( VAR Fichero_Logico : TipoFichero ) : Integer ;
SEEK
( VAR Fichero_Logico : TipoFichero ; Posicion : Integer ) ;
ERASE
( VAR Fichero_Logico : TipoFichero ) ;
TRUNCATE ( VAR Fichero_Logico : TipoFichero ) ;
RENAME
( VAR Fichero_Logico : TipoFichero ; NuevoNombre : STRING ) ;
Informática
3/3