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

1.

-Egitura errepikakorrak

PROGRAM Akten_Jasoketa;
USES CRT;
VAR
Izen : STRING[25];
I,L,J, N : INTEGER;
NOTA, SUMA, MEDIA,SUMAMEDIA, MEDIATALDE : REAL;
BEGIN (*PP*)
CLRSCR;
WRITELN ( ' KALIFIKAZIOEN ZERRENDA');
WRITELN( ' ______________________');
WRITELN;
WRITELN( 'IKASLEAREN IZENA NOTAS 1¦ 2¦ 3¦ 4¦ 5¦ 6¦ MED_IKAS
MED_TALD');

WRITELN( '_____________________________________________________________');
N := 0;
SUMAMEDIA := 0;
GOTOXY(1,6);WRITE('?');GOTOXY(1,6); READLN(Izen);
L:=LENGTH(Izen);
FOR I:=1 TO L DO
BEGIN
Izen[I]:=UPCASE(Izen[I]);
END;
N:=0;
WHILE Izen <> 'AMAIERA' DO
BEGIN (*1*)
SUMA :=0;
FOR I :=1 TO 6 DO
BEGIN (*2*)
J:=6;
GOTOXY(23+3*I,6+N);WRITE('?');
GOTOXY(23+3*I,6+N);READLN(NOTA);
SUMA := SUMA + NOTA
END; (*2*)
MEDIA := SUMA /6;
SUMAMEDIA := SUMAMEDIA + MEDIA;
GOTOXY(44,6+N);WRITE(MEDIA:4:1);
N:=N+1;
GOTOXY(1,6+N);write('?');
GOTOXY(1,6+N);READLN(Izen);
END; (*1*)
MEDIATALDE:=SUMAMEDIA/N;
WRITELN;
HIGHVIDEO;
GOTOXY(50+6+N,6+N);WRITELN(MEDIATALDE:4:1);
LOWVIDEO;
READLN;
END. (*PP*)

2.-Adarkatze egitura

PROGRAM Alfabeto_castellano;
(*Modificar el siguiente programa para ordenar cadenas de caracteres en
lugar de números *)
USES CRT;
TYPE

Alfa_Cast=(A,B,C,Ch,D,E,F,G,H,I,J,K,L,Ll,M,N,ENIE,O,P,Q,R,S,T,U,V,X,Y,Z);
VAR
Car:Alfa_Cast;
CONT:INTEGER;
BEGIN
CLRSCR;
WRITELN('Grado de dificultad:Medio n§6');
CONT:=ORD(Car);
FOR CONT:=0 TO 28 DO
BEGIN
CASE CONT OF
0:WRITE('A ');
1:WRITE('B ');
2:WRITE('C ');
3:WRITE('Ch ');
4:WRITE('D ');
5:WRITE('E ');
6:WRITE('F ');
7:WRITE('G ');
8:WRITE('H ');
9:WRITE('I ');
10:WRITE('J ');
11:WRITE('K ');
12:WRITE('L ');
13:WRITE('Ll ');
14:WRITE('M ');
15:WRITE('N ');
16:WRITE('Y ');
17:WRITE('O ');
18:WRITE('P ');
19:WRITE('Q ');
20:WRITE('R ');
21:WRITE('S ');
22:WRITE('T ');
23:WRITE('U ');
24:WRITE('V ');
25:WRITE('W ');
26:WRITE('X ');
27:WRITE('Y ');
28:WRITE('Z ');
ELSE
WRITE('Balio ez duen karakterea');
END;
END;
WRITELN;
FOR CONT:=0 TO 28 DO
BEGIN
CASE CONT OF
0:WRITE('a ');
1:WRITE('b ');
2:WRITE('c ');
3:WRITE('ch ');
4:WRITE('d ');
5:WRITE('e ');
6:WRITE('f ');
7:WRITE('g ');
8:WRITE('h ');
9:WRITE('i ');
10:WRITE('j ');
11:WRITE('k ');
12:WRITE('l ');
13:WRITE('ll ');
14:WRITE('m ');
15:WRITE('n ');
16:WRITE('¤ ');
17:WRITE('o ');
18:WRITE('p ');
19:WRITE('q ');
20:WRITE('r ');
21:WRITE('s ');
22:WRITE('t ');
23:WRITE('u ');
24:WRITE('v ');
25:WRITE('w ');
26:WRITE('x ');
27:WRITE('y ');
28:WRITE('z ');
ELSE
WRITE('Balio ez duen karakterea');
END;
END;
END.
4.- CASE
PROGRAM DNI_NIF;
(* Realizar un programa que permita calcular el NIF, conocido el DNI de
una *)
(* persona.
*)
(* El programa deber  leer, sobre un string, el n£mero del DNI del
interesa-*)
(* do. Seguidamente deber  averiguar si es un valor v lido (todos los
valores*)
(* num‚ricos y representando un valor entre 1000000 y 99999999). Si la
entra-*)
(* da es v lida se deber  calcular el NIF y sobre el string inicial se
deber n*)
(* insertar los puntos de los millares y millones en las posiciones
corres-*)
(* pondientes, as¡ como la letra del NIF, al final del string separada
por *)
(* un espacio en blanco. *)
(* C lculo de la letra del NIF:
*)
(* Se obtiene el resto de la divisi¢n del n£mero del DNI entre 273, y en
*)
(* funci¢n del resultado se asigna un car cter seg£n la siguiente tabla:
*)
(* 0='T' 7='F' 14='Z' 21='K'
1='R' 8='P' 15='S' 22='E'
2='W' 9='D' 16='Q'
3='A' 10='X' 17='V'
4='G' 11='B' 18='H'
5='M' 12='N' 19='L'
6='Y' 13='J' 20='C' *)
(* Datos de prueba: 14553284 B; 20186202 E; 16058833 A; 14543552 P*)
USES CRT;
VAR
Cad:STRING;
Num:LONGINT;
Cod,Clase:INTEGER;
BEGIN
CLRSCR;
REPEAT
WRITE('Introduzca el D.N.I. , por favor (FIN para acabar): ');
READLN(Cad);
IF Cad='FIN' THEN
HALT(1);
VAL(Cad,Num,Cod);
IF Cod <> 0 THEN
BEGIN
WRITELN('Introduzca de nuevo, por favor: ');
READLN(Cad);
END;
INSERT('.',Cad,3);
INSERT('.',Cad,7);
WRITE('D.N.I.: ',Cad);
Clase:=Num MOD 23;
(*writeln(Clase);*)
CASE Clase OF
0:INSERT(' T',Cad,11);
1:INSERT(' R',Cad,11);
2:INSERT(' W',Cad,11);
3:INSERT(' A',Cad,11);
4:INSERT(' G',Cad,11);
5:INSERT(' M',Cad,11);
6:INSERT(' Y',Cad,11);
7:INSERT(' F',Cad,11);
8:INSERT(' P',Cad,11);
9:INSERT(' D',Cad,11);
10:INSERT(' X',Cad,11);
11:INSERT(' B',Cad,11);
12:INSERT(' N',Cad,11);
13:INSERT(' J',Cad,11);
14:INSERT(' Z',Cad,11);
15:INSERT(' S',Cad,11);
16:INSERT(' Q',Cad,11);
17:INSERT(' V',Cad,11);
18:INSERT(' H',Cad,11);
19:INSERT(' L',Cad,11);
20:INSERT(' C',Cad,11);
21:INSERT(' K',Cad,11);
22:INSERT(' E',Cad,11);
23:INSERT(' J',Cad,11);
24:INSERT(' K',Cad,11);
25:INSERT(' L',Cad,11);
26:INSERT(' M',Cad,11);
end;
writeln;
WRITELN('N.I.F.: ',Cad);
UNTIL Cad='FIN';
END.

3.-Egitura errepikakorrak
PROGRAM ASCII;
USES CRT;
VAR
Zenb,Zutabe,Lerro: BYTE;
Karaktere: CHAR;
BEGIN
CLRSCR;
(* pantaila ezabatzea eta lehenengo zutabe eta lehenengo lerroan
kurtsorea ipini *)
Zutabe:=1;
Lerro:=1;
FOR Zenb:=1 TO 255 DO
BEGIN
GOTOXY (Zutabe,Lerro);
WRITELN (Zenb:3,' ',CHR(Zenb));
Lerro:=Lerro+1;
IF Lerro=25 THEN
BEGIN
Lerro:=1;
Zutabe:=Zutabe+7;
END;
END;
READ (Karaktere);
END.

4.-Matrizeak

PROGRAM Matizeen_Biderketa;
USES CRT;
LABEL
999; (* programaren amaieraren etiketa *)
CONST
Z=3; { Matrizeen dimentsioak }
TYPE
Matrize = ARRAY [1..Z,1..Z] OF 0..MAXINT;
VAR
A,B,C:Matrize;
Zut,Ler:BYTE;
PROCEDURE MatrizeIrakurri (VAR A:Matrize);
LABEL
9;
VAR
Datu,I,J:INTEGER;
BEGIN
WRITEln('Sar itzazu matrizearen elementuak ',Z,' lerroak x',Z,'
zutabeak: ');
WRITELN('Negatibo bat amaitzeko');
WRITELN;
FOR I:=1 TO Z DO
BEGIN
FOR J:= 1 TO Z DO
READ (A[I,J]);
IF A[I,J] < 0 THEN
BEGIN
WRITELN(#7,' Elementuak Faltatzen dira');
HALT(1);
GOTO 9;
END;
END;
READ(Datu);
IF Datu >= 0 THEN
BEGIN
WRITELN(#7,'Datuak soberan daude');
HALT;
END;
GOTO 9;
9:
END; (*MatrizeIrakurri-aren amaiera *)

PROCEDURE MatrizeBiderketa (A,B:Matrize; VAR C:Matrize);


VAR
I,J,K:INTEGER;
BEGIN
FOR I:= 1 TO Z DO
BEGIN
FOR K:=1 TO Z DO
BEGIN
C[I,K]:= 0;
FOR J:= 1 TO Z DO
C[I,K]:=C[I,K] + A[I,J]*B[J,K];
END
END
END;

PROCEDURE Idatzi (Zut,Ler:BYTE;A:Matrize);


VAR
I,J:INTEGER;

BEGIN
FOR I:=1 TO Z DO
BEGIN
FOR J:= 1 TO Z DO
BEGIN
GOTOXY(ZUT+2*J-1,Ler+I);
WRITE(A[I,J],' ');
END;
END;
WRITELN;
END;

BEGIN
CLRSCR;
MatrizeIrakurri (A);
MatrizeIrakurri (B);
MatrizeBiderketa (A,B,C);
Zut:=10;Ler:=14;
GOTOXY(10,14);WRITE('A Matrizea');
Ler:=Ler+1; { A matrizearen kokapena }
GOTOXY(Zut-1,Ler);WRITE(#218); GOTOXY(Zut+7,Ler);WRITE(#191);
GOTOXY(Zut-1,Ler+1);WRITE(#179);GOTOXY(Zut+7,Ler+1);WRITE(#179);
GOTOXY(Zut-1,Ler+2);WRITE(#179);GOTOXY(Zut+7,Ler+2);WRITE(#179);
GOTOXY(Zut-1,Ler+3);WRITE(#179);GOTOXY(Zut+7,Ler+3);WRITE(#179);
GOTOXY(Zut-1,Ler+4);WRITE(#192);GOTOXY(Zut+7,Ler+4);WRITE(#217);
{ A matrizearen kokapenaren amaiera }
Idatzi (Zut,Ler,A);GOTOXY(Zut+8,Ler+2);WRITE('x');
GOTOXY(20,14);WRITE('B Matrizea');
{ B matrizearen kokapena }
GOTOXY(Zut+9,Ler);WRITE(#218); GOTOXY(Zut+17,Ler);WRITE(#191);
GOTOXY(Zut+9,Ler+1);WRITE(#179);GOTOXY(Zut+17,Ler+1);WRITE(#179);
GOTOXY(Zut+9,Ler+2);WRITE(#179);GOTOXY(Zut+17,Ler+2);WRITE(#179);
GOTOXY(Zut+9,Ler+3);WRITE(#179);GOTOXY(Zut+17,Ler+3);WRITE(#179);
GOTOXY(Zut+9,Ler+4);WRITE(#192);GOTOXY(Zut+17,Ler+4);WRITE(#217);
{B matrizearen kokapenaren amaiera }
Idatzi (Zut+10,Ler,B);GOTOXY(Zut+18,Ler+2);WRITE('=');
GOTOXY(30,14);WRITE('C Matrizea');
{ Encuadre de la matriz C }
Zut:=Zut+19;
GOTOXY(Zut,Ler);WRITE(#218); GOTOXY(Zut+8,Ler);WRITE(#191);
GOTOXY(Zut,Ler+1);WRITE(#179);GOTOXY(Zut+8,Ler+1);WRITE(#179);
GOTOXY(Zut,Ler+2);WRITE(#179);GOTOXY(Zut+8,Ler+2);WRITE(#179);
GOTOXY(Zut,Ler+3);WRITE(#179);GOTOXY(Zut+8,Ler+3);WRITE(#179);
GOTOXY(Zut,Ler+4);WRITE(#192);GOTOXY(Zut+8,Ler+4);WRITE(#217);
{ Fin del encuadre de la matriz B }
Idatzi (Zut+1,Ler,C);
999:
END. (* Producto de Matrices *)

5.-ARRAY
PROGRAM Ekuazio_Linealen_Ebazpena;
USES CRT;
CONST
N=3;
TYPE
Matrize=ARRAY[1..N,1..N+1] OF INTEGER;
VAR
M:Matrize;
Det,Minorx,Minory,Zut,Ler:INTEGER;
BEGIN
CLRSCR;
Det:=0;
WRITELN('Sar ezazu matrizea lerroka, mezedez: ');
FOR Ler:=1 TO 2 DO
FOR Zut:=1 TO 3 DO
READ(M[Zut,Ler]);
FOR Ler:=1 TO 2 DO
FOR Zut:=1 TO 3 DO
begin
gotoxy(40+3*Zut,12+Ler);write(M[Zut,Ler]:3);
end;
writeln;
Det:=Det+M[1,1]* M[2,2]-M[2,1]*M[1,2];
writeln('Koefizienteen Matrizearen determinanteak ',Det,' balio du');
IF Det <> 0 THEN
BEGIN
writeln('Sistema bateragarria eta determinatua da. Ebazpen
bakarra.');
Minorx:=M[3,1]* M[2,2]-M[3,2]*M[2,1];
Minory:=M[1,1]* M[3,2]-M[1,2]*M[3,1];
WRITELN('x= ',Minorx/Det:3:1,' y= ',Minory/Det:3:1);
writeln('Lerro zuzenak hurrengo puntuan mozten dira:
(',Minorx/Det:3:1,',',Minory/Det:3:1,')');
END
ELSE
WRITE('El sistema no cumple la regla de Cramer.');
END.

6.-ERREGISTROAK
PROGRAM Data_Pertsonalak;
(* Molda ezazu programa hau erregistroak Zerrenda_Zenbaki, Deialdi_Zenbaki
osoko zenbakizko eremuak eduki ditzan, besteak dauden bezela utziz.
(* Programak IdatziDatuak prozedura soberako gidoiak kenduz datuak
idazteko eta pantailatik erregistroan dauden pertsonaren datuen arabera
data gaurkotu erabiliko du *)

USES CRT,DOS;

TYPE
Data= RECORD
Ee:1..31;
Ii:1..12;
U4:INTEGER;
END;
Datu_Per=RECORD
Zer_Zb:WORD;
D_Zb:WORD;
Izen_Osoa:STRING[30];
Jaiotze_Data:DATA;
END;

VAR
Datuak:Datu_Per;
Zer_Zb,Deialdi_Zb:WORD;
Urte,Ilabete,Egun,Aste:WORD;
Data1,Data2:Data;
Adin:INTEGER;

{ * Gidoiak Idatzi * }
PROCEDURE Idatzi_Gidoi(X,Y,Luzera:INTEGER);
VAR
Kont:INTEGER;
BEGIN
GOTOXY(X,Y);
FOR Kont:=X TO X+Luzera-1 DO
WRITE ('-');
END;

{ * IZENBURURUA * }
PROCEDURE Izenburu;
VAR
Ordu,Minutu,Segundu,Euneko:WORD;
Urte,Ilabete,Egun,Aste:WORD;
AstekoEguna:STRING[9];
BEGIN
GETTIME(Ordu,Minutu,Segundu,Euneko);
GETDATE(Urte,Ilabete,Egun,Aste);
CASE Aste OF
0: AstekoEguna:='Igandea';
1: AstekoEguna:='Astelehena';
2: AstekoEguna:='Asteartea';
3: AstekoEguna:='Asteazkena';
4: AstekoEguna:='Osteguna';
5: AstekoEguna:='Ostirala';
6: AstekoEguna:='Larunbata';
END;
CLRSCR;
GOTOXY(3,1);
WRITE('NAUTIKA ETA ITXASONTZIETAKO G.E.T.');
GOTOXY(40,1);
WRITE(Ordu,':',Minutu,':',Segundu,',',Euneko);
GOTOXY(55,1);
WRITE(AstekoEguna,', ',Urte,'/',Ilabete,'/',Egun);
END;

{ * DATUEN SARRERA * }
PROCEDURE Sarrera(Zer_Zb:WORD);
BEGIN
Zer_Zb:=0;
Zer_Zb:=Zer_Zb+1;
Datuak.Zer_Zb:=Zer_Zb;
GOTOXY(10,5); WRITE('Zerrenda §: ',Datuak.Zer_Zb);
GOTOXY(10,11); WRITE('Deiturak eta Izena:');
Idatzi_Gidoi(30,11,30);
GOTOXY(10,17);
WITH Datuak,Datuak.Jaiotze_Data DO
BEGIN
GOTOXY(30,11);READ(Izen_Osoa);
END; { RECORD Datuen Amaiera }
END; { Sarrera PROCEDURE-ren amaiera }

PROCEDURE Idatzi_Datuak(Zer_Zb:WORD);
BEGIN
Zer_Zb:=0;
Zer_Zb:=Zer_Zb+1;
Datuak.Zer_Zb:=Zer_Zb;
GOTOXY(10,5); WRITE('Zerrendaren Zb¦: ',Datuak.Zer_Zb);
GOTOXY(10,11); WRITE('Deiturak eta Izena:',Datuak.Izen_Osoa);
GOTOXY(38,11+LENGTH(Datuak.Izen_Osoa));
CLREOL;
END; { Idatzi_Datuak PROCEDURE-ren amaiera }

PROCEDURE IdatziAdina(Data1,Data2:Data;VAR Ad:INTEGER);


VAR
Urte,Ile,Egun,Aste:WORD;
Deitura,Azpi_kate1:STRING;
L1,Zb1:INTEGER;
BEGIN
GETDATE(Urte,Ilabete,Egun,Aste);
WITH Datuak DO
WITH Data1 DO
BEGIN
GOTOXY(10,12); WRITELN('Sar ezazu zure jaiotze-data, mezedez:
');
GOTOXY(10,13);WRITE('Urte: ');GOTOXY(16,13);Read(U4);
GOTOXY(22,13);WRITE('Ile: ');GOTOXY(27,13);Read(Ii);
GOTOXY(31,13);WRITE('Egun: ');GOTOXY(38,13);Read(Ee);
Azpi_Kate1:=' ';
L1:=LENGTH(Datuak.Izen_Osoa);
Zb1:=POS(Azpi_Kate1,Datuak.Izen_Osoa);
DELETE(Datuak.Izen_Osoa,Zb1,L1-Zb1+1);
CLREOL;
Ad:=Urte-U4;
IF (Urte >U4) THEN
IF (Ile >Ii) THEN
BEGIN
GOTOXY(10,20);
WRITE(Datuak.Izen_Osoa, ' jaunak jadanik bete dituzu ');
WRITE(Ad,' urte')
END
ELSE
IF (Ile = Ii) THEN
BEGIN
IF (Egun >= Ee) THEN
BEGIN
GOTOXY(10,20);
WRITE(Datuak.Izen_Osoa, ' jaunak jadanik bete
dituzu ');
WRITE(Ad,' urte');
END
ELSE
BEGIN
GOTOXY(10,20);
WRITE(Datuak.Izen_Osoa, 'jaunak jadanik bete
dituzu ');
WRITELN(Ad-1,' urte');
END
END
ELSE
BEGIN
GOTOXY(10,20);
WRITE(Datuak.Izen_Osoa, ' jaunak jadanik bete dituzu
');
WRITE(Ad-1,' urte');
END;
END;
END;
{ * * Programa Nagusia * * }
BEGIN
IzenBuru;
Sarrera(Zer_Zb);
Idatzi_Datuak(Zer_Zb);
IdatziAdina(Data1,Data2,Adin);
END.

PROGRAM Arabes_a_Romanos;
USES CRT;
(* Este programa lee valores enteros y los escribe como números romanos.*)
(* Se supone que hay un valor por línea, que no hay líneas en blanco *)
(* despues del último valor, y que los valores son mayores que cero y *)
(* menores de 4000. *)
(*Introducción a los ordenadores.Tema2.Estructura de datos y algoritmos *)
(* Página 26. ejemplo 2.21 *)
(* Planteamiento del problema
El primer paso a realizar es el planteamiento del problema. Hay un
único dato de entrada, que es un número entero positivo entre 1 y 3999.
Se debe dar un único resultado que es una cadena de caracteres formada por
las letras I,V,X,L,C,D y M. La cadena de salida se forma a partir del
entero del siguiente modo:
-Para numeros entre 1 y 10:
1->I,2->II,3->III,4->IV,6->VI,7->VII,8->VIII,9->IX
-Para números mayores que 10:
Se convierte dígito a dígito comenzando por lo más significativos.
Cada dígito se convierte del mismo modo que las unidades, pero
sustituyendo caracteres:
. en las decenas se usa X,L y C en lugar de I, V y X;
. en las centenas C,D y M en lugar de I,V y X;
. en millares M en lugar de I.

Una vez planteado el problema se debe buscar una representación para


los datos. Claramente, el dato de entrada es un entero y el dato de
salida, una cadena de caracteres. Además de éstos es interesante utilizar
estructuras de datos para almacenar la representación de los dígitos.
Para esto, se podrían pensar varios sistemas. Se puede llegar a una
representación concisa y eficiente teniendo en cuenta las reglas que
aparecen en la siguiente transformación, que indica cómo generar la
representación de unos números a partir de otros:
2=1+1 (II)
3=1+1+1 (III)
6=5+1 (VI)
7=5+1+1 (VII)
8=5+1+1+1 (VIII)
Bastaría, pues, con almacenar la representación de 1,4,5,9,10. La
transformación se podría hacer entonces del siguiente modo (para
números entre 1 y 9):
si N>=9 entonces
escribe <<IX>>
N=N-9
si N> 5 entonces
escribe <<V>>
N=N-5
si N>4 entonces
escribe <<IV>>
N=N-4
mientras N>1 repetir
escribe <<I>>
N=N-1
Para evitar la secuencia de decisiones se puede guardar la
representación de estos números en una matriz, de forma que esta secuencia
se pueda transformar en un ciclo. Esta idea se podría extender a decenas
y centenas. Se puede usar, por tanto, una matriz para almacenar las
cantidades no deducibles (1,4,...) y otra matriz de cadenas de
caracteres para almacenar su representación. Estas matrices tendrían los
siguientes valores (asignados inicialmente):
NUMEROS=1,4,5,9,10,40,50,90,100,400,500,1000
ROMANOS=I,IV,V,IX,X,XL,L,XC,C,CD,D,M
El algoritmo quedaría entonces así:
I=13 (* n£meros de elementos en las matrices anteriores *)
(*leer N
mientras I>0 entonces
mientras NUMEROS(I) < N repetir
N=N-NUMEROS(I)
escribe ROMANOS(I)
I=I-1
Fin
Datos usados: (adem s de NUMEROS y ROMANOS)
I:(entero) ¡ndice en las matrices
N:(entero) n£mero a convertir
Obs‚rvese que el resultado se genera directamente sobre la salida,
no necesit ndose una variable para almacenarlo.
*)
CONST
Enter=#13;
Salto_Linea=#10;
TYPE
Documento=TEXT;
VAR
Doc:Documento;
Car:CHAR;
Numero,Cod:INTEGER;
Cad:STRING;

PROCEDURE Cifra(Rango:INTEGER;Letra1,Letra5,Letra10:CHAR);
(* Este procedimiento imprime la combinacion de letras *)
(* correspondiente a una cifra de rango potencia de 10 y lo resta del
valor *)
(* dado. *)
BEGIN
REPEAT
Car:=READKEY;
IF Car<>^Z THEN
WRITE(Car);
Cad:='';
VAL(Car,Numero,Cod);
IF Cod=0 THEN
Cad:=Cad+ Car;
VAL(Cad,Numero,Cod);
IF Car=Enter THEN
WRITE(Salto_Linea);

CASE Numero DIV Rango OF


0:WRITE('');
1:WRITE(Letra1);
2:WRITE(Letra1,Letra1);
3:WRITE(Letra1,Letra1,Letra1);
4:WRITE(Letra1,Letra5);
5:WRITE(Letra5);
6:WRITE(Letra5,Letra1);
7:WRITE(Letra5,Letra1,Letra1);
8:WRITE(Letra5,Letra1,Letra1,Letra1);
9:WRITE(Letra1,Letra10);
END;
Numero:=Numero MOD Rango;
WRITE(Doc,Numero);
UNTIL Car=^Z;
END;

(*PROCEDURE Cifra(Rango:INTEGER;

BEGIN

END;*)
BEGIN (* Escribir n£mer romano *)
ASSIGN(Doc,'Ficherar.dat');
rewrite (doc);
WHILE NOT (EOF(Doc) = true) DO
BEGIN
WRITE('Introduzca un n£mero entre 1 y 3999: ');
READLN(Numero);
WRITE(Numero,' = ');
Cifra(1000,'M',' ',' ');
Cifra(100,'C','D','M');
Cifra(10,'X','L','C');
Cifra(1,'I','V','X');
WRITELN;
END;
END.

PROCEDURE Leer;
BEGIN
WHILE NOT EOF(Doc) DO
BEGIN
READ(Doc,Car);
IF Car=Enter THEN
WRITELN;
WRITE(Car);
END;
END;

BEGIN { PROGRAMA PRINCIPAL }


CLRSCR;
ASSIGN(Doc,'Texto.Doc');
WRITELN('* * * * * ESCRIBIENDO * * * * *');
REWRITE(Doc);
Escribir;
WRITELN;
WRITELN('* * * * * LEYENDO * * * * *');
RESET(Doc);
Leer;
CLOSE(Doc);
END.

PROGRAM ASCII;
USES CRT;
VAR
Zenb,Zutabe,Lerro: BYTE;
Karaktere: CHAR;
BEGIN
CLRSCR; (* pantaila ezabatzea eta lehenengo zutabe eta lehenengo
lerroan
kurtsorea ipini *)
Zutabe:=1;
Lerro:=1;
FOR Zenb:=1 TO 255 DO
BEGIN
GOTOXY (Zutabe,Lerro);
WRITELN (Zenb:3,' ',CHR(Zenb));
Lerro:=Lerro+1;
IF Lerro=25 THEN
BEGIN
Lerro:=1;
Zutabe:=Zutabe+7;
END;
END;
READ (Karaktere);
END.
PROGRAM Alumnos;
USES CRT,PRINTER;
TYPE
TAlumno=RECORD
NList:INTEGER;
Nom:STRING[30];
Calif:STRING[20];
Nota:INTEGER;
END;
VAR
F:FILE OF TAlumno;
Alum:TAlumno;
Res:CHAR;
PROCEDURE Abre;
VAR
Respuesta:CHAR;
BEGIN
ASSIGN(F,'Alumnos.dat');
REPEAT
WRITELN('¨Es la primera vez que trabaja con el fichero?(S/N)');
READLN(Respuesta);
Respuesta:=Upcase(Respuesta);
UNTIL (Respuesta='S') OR (Respuesta='N');
IF Respuesta = 'S' THEN
BEGIN
WRITELN('Peligro!.Si exist¡a alg£n dato en el fichero se
perder .');
WRITE(' Desea continuar?(S/N)');
READLN(Respuesta);
IF Respuesta ='S' THEN
REWRITE(F)
ELSE
Abre;
END
ELSE
RESET(F);
END;

PROCEDURE PideDatos;
BEGIN
CLRSCR;
SEEK(F,FileSize(F));
Alum.NList:=Filepos(F);
Write('Nombre: ');Readln(Alum.nom);
Write('Calificaci¢n: ');Readln(Alum.Calif);
Write('Nota: ');Readln(Alum.Nota);
Write(F,Alum);
END;

PROCEDURE Altas;
BEGIN
REPEAT
ClrScr;
Writeln('1.- Dar de alta a un nuevo cliente ');
Writeln('2.- Volver al men£ principal');
Writeln;
Write('Introduzca la opci¢n deseada: ');
Res:=ReadKey;
IF Res='1' THEN PideDatos;
UNTIL Res='2';
END;

PROCEDURE MuestraDatos;
BEGIN
ClrScr;
Write('N§ Lista: ');Writeln(Alum.NList);
Write('1. Nombre: ');Writeln(Alum.Nom);
Write('2. Calificaci¢n: ');Writeln(Alum.Calif);
Write('3. Nota: ');Writeln(Alum.Nota);
END;

PROCEDURE Bajas; (* bajas archivo clientes *)


VAR
NLista:INTEGER;
Contes:CHAR;
BEGIN
CLRSCR;
WRITE('¨Qu‚ c¢digo (negativo para acabar)? : ');
READLN(NLista);
WHILE NLista >=0 DO
BEGIN
IF NLista >=FileSize(F) THEN
WRITELN('N§ de Lista no existente')
ELSE
BEGIN
SEEK(F,NLista);
READ(F,Alum);
IF NLista <> Alum.NList THEN
WRITELN('N§ de lista no existente')
ELSE
BEGIN
MuestraDatos;
Write('¨Lo quiere borrar?(S/N)? ');
Readln(Contes);
Contes:=UpCase(Contes);
IF Contes='S' THEN
BEGIN
Alum.NList:=-1;
Seek(F,NLista);
Write(F,Alum);
END;
END;
END;
CLRScr;
WRITE('¨Qu‚ c¢digo? (negativo para acabar): ');
READLN(NLista);
END;
END;

PROCEDURE Consultas; (* consultas de archivo de alumnos *)


VAR
NLista:INTEGER;
BEGIN
CLRSCR;
WRITE('N§ del lista del alumno a consultar (negativo para acabar): ');
READLN(NLista);
WHILE NLista>=0 DO
BEGIN
IF NLista >= 0 THEN
BEGIN
IF NLista >= FileSize(F) THEN
WRITELN('N§ de lista inexistente')
ELSE
MuestraDatos;
END;
WRITE('N§ de lista del alumno a consultar: (negativo para
acabar)');
READLN(NLista);
END;
END;

PROCEDURE Lista; (* listado archivo alumnos *)


VAR
Nreg:INTEGER;
BEGIN
WRITELN('N§ de Lista Nombre Calificaci¢n Nota');
Writeln('-------------------------------------------------------');
FOR Nreg:= 0 TO FileSize(F)-1 DO
BEGIN
READ(F,Alum);
WITH Alum DO
BEGIN
IF NList = Nreg THEN
WRITELN(NList:6,Nom:31,Calif:21,Nota:4);
END;
END;
END;

PROCEDURE Modifica; (* modificaciones archivo alumnos *)


VAR
Ncam,NLista:INTEGER;
BEGIN
CLRSCR;
REPEAT
WRITE('¨Qu‚ c¢digo? (negativo para acabar): ');
READLN(NLista);
IF (NLista >= FileSize(F)) OR (NLista < 0) THEN
WRITELN('N§ de lista inexistente')
ELSE
BEGIN
SEEK(F,NLista);
READ(F,Alum);
IF NLista<> Alum.NList THEN
WRITE('N§ de lista inexistente')
ELSE
BEGIN
MuestraDatos;
WRITE('¨Campo a modificar? (1/2/3/0=fin: ');
Readln(NCam);
CASE Ncam OF
1:BEGIN
WRITE('Nombre: ');
READLN(Alum.Nom);
END;
2:BEGIN
WRITE('Calificaci¢n: ');
READLN(Alum.Calif);
END;
3:BEGIN
WRITE('Nota: ');
READ(Alum.Nota);
END;
END; (*del CASE *)
END;
END;
UNTIL (Ncam=0) OR (Ncam <0);
SEEK(F,Alum.NList);
WRITE(F,Alum);
END;

PROCEDURE MENU;
BEGIN
CLRSCR;
WRITELN('OPCIONES DISPONIBLES');
WRITELN('====================');
WRITELN;
WRITELN;
WRITElN('0. Acabar');
Writeln('1. Altas');
Writeln('2. Modificaciones');
Writeln('3. Consulta');
Writeln('4. Bajas');
Writeln('5. Listado por impresora: ');
END;

BEGIN (* DEL PROGRAMA PRINCIPAL*)


ClrScr;
Abre;
ClrScr;
REPEAT
Menu;
Res:=ReadKey;
CASE Res OF
'1':Altas;
'2':Modifica;
'3':Consultas;
'4':Bajas;
'5':Lista;
END;
UNTIL Res='0';
CLOSE(F);
END.

PROGRAM Conjuntos;
{ Dar la salida por pantalla del siguiente programa: }
USES CRT;
TYPE
Vocales= SET OF CHAR;
Voc=SET OF CHAR;
VAR
Voc1:VOC;
Voc2:SET OF CHAR;
BEGIN
CLRSCR;
Voc1:=['a','e','i','o','u'];
Voc2:=['a','e','i','o','u'];
IF (Voc1<=Voc2) AND (Voc1<=Voc2)THEN
WRITEln('Ambos conjuntos son iguales');
Voc2:=['a','e','i','o'];
IF Voc1 = Voc2 THEN
WRITEln('Ambos conjuntos son iguales')
ELSE
WRITELN('Los conjuntos no son iguales');
END.
PROGRAM Matizeen_Biderketa;
USES CRT;
LABEL
999; (* programaren amaieraren etiketa *)
CONST
Z=3; { Matrizeen dimentsioak }
TYPE
Matrize = ARRAY [1..Z,1..Z] OF 0..MAXINT;
VAR
A,B,C:Matrize;
Zut,Ler:BYTE;
PROCEDURE MatrizeIrakurri (VAR A:Matrize);
LABEL
9;
VAR
Datu,I,J:INTEGER;
BEGIN
WRITEln('Sar itzazu matrizearen elementuak ',Z,' lerroak x',Z,'
zutabeak: ');
WRITELN('Negatibo bat amaitzeko');
WRITELN;
FOR I:=1 TO Z DO
BEGIN
FOR J:= 1 TO Z DO
READ (A[I,J]);
IF A[I,J] < 0 THEN
BEGIN
WRITELN(#7,' Elementuak Faltatzen dira');
HALT(1);
GOTO 9;
END;
END;
READ(Datu);
IF Datu >= 0 THEN
BEGIN
WRITELN(#7,'Datuak soberan daude');
HALT;
END;
GOTO 9;
9:
END; (*MatrizeIrakurri-aren amaiera *)

PROCEDURE MatrizeBiderketa (A,B:Matrize; VAR C:Matrize);


VAR
I,J,K:INTEGER;
BEGIN
FOR I:= 1 TO Z DO
BEGIN
FOR K:=1 TO Z DO
BEGIN
C[I,K]:= 0;
FOR J:= 1 TO Z DO
C[I,K]:=C[I,K] + A[I,J]*B[J,K];
END
END
END;

PROCEDURE Idatzi (Zut,Ler:BYTE;A:Matrize);


VAR
I,J:INTEGER;

BEGIN
FOR I:=1 TO Z DO
BEGIN
FOR J:= 1 TO Z DO
BEGIN
GOTOXY(ZUT+2*J-1,Ler+I);
WRITE(A[I,J],' ');
END;
END;
WRITELN;
END;

BEGIN
CLRSCR;
MatrizeIrakurri (A);
MatrizeIrakurri (B);
MatrizeBiderketa (A,B,C);
Zut:=10;Ler:=14;
GOTOXY(10,14);WRITE('A Matrizea');
Ler:=Ler+1; { A matrizearen kokapena }
GOTOXY(Zut-1,Ler);WRITE(#218); GOTOXY(Zut+7,Ler);WRITE(#191);
GOTOXY(Zut-1,Ler+1);WRITE(#179);GOTOXY(Zut+7,Ler+1);WRITE(#179);
GOTOXY(Zut-1,Ler+2);WRITE(#179);GOTOXY(Zut+7,Ler+2);WRITE(#179);
GOTOXY(Zut-1,Ler+3);WRITE(#179);GOTOXY(Zut+7,Ler+3);WRITE(#179);
GOTOXY(Zut-1,Ler+4);WRITE(#192);GOTOXY(Zut+7,Ler+4);WRITE(#217);
{ A matrizearen kokapenaren amaiera }
Idatzi (Zut,Ler,A);GOTOXY(Zut+8,Ler+2);WRITE('x');
GOTOXY(20,14);WRITE('B Matrizea');
{ B matrizearen kokapena }
GOTOXY(Zut+9,Ler);WRITE(#218); GOTOXY(Zut+17,Ler);WRITE(#191);
GOTOXY(Zut+9,Ler+1);WRITE(#179);GOTOXY(Zut+17,Ler+1);WRITE(#179);
GOTOXY(Zut+9,Ler+2);WRITE(#179);GOTOXY(Zut+17,Ler+2);WRITE(#179);
GOTOXY(Zut+9,Ler+3);WRITE(#179);GOTOXY(Zut+17,Ler+3);WRITE(#179);
GOTOXY(Zut+9,Ler+4);WRITE(#192);GOTOXY(Zut+17,Ler+4);WRITE(#217);
{B matrizearen kokapenaren amaiera }
Idatzi (Zut+10,Ler,B);GOTOXY(Zut+18,Ler+2);WRITE('=');
GOTOXY(30,14);WRITE('C Matrizea');
{ Encuadre de la matriz C }
Zut:=Zut+19;
GOTOXY(Zut,Ler);WRITE(#218); GOTOXY(Zut+8,Ler);WRITE(#191);
GOTOXY(Zut,Ler+1);WRITE(#179);GOTOXY(Zut+8,Ler+1);WRITE(#179);
GOTOXY(Zut,Ler+2);WRITE(#179);GOTOXY(Zut+8,Ler+2);WRITE(#179);
GOTOXY(Zut,Ler+3);WRITE(#179);GOTOXY(Zut+8,Ler+3);WRITE(#179);
GOTOXY(Zut,Ler+4);WRITE(#192);GOTOXY(Zut+8,Ler+4);WRITE(#217);
{ Fin del encuadre de la matriz B }
Idatzi (Zut+1,Ler,C);
999:
END. (* Producto de Matrices *)

{--------------------------------------------------------------}
{ Zerrenda Kudeaketa }
{ }
{ posta elektronikoaren Zerrenda kudeatzeko Programa }
{ bilketa dinamikoa erabiliz (heap). }
{ }
{ Jeff Duntemann-ek egindakoa }
{ Turbo Pascal V5.0 }
{ Azken rebisioa 24/7/88 }
{ }
{--------------------------------------------------------------}

PROGRAM Zerrenda_Kudeaketa;
USES CRT;
TYPE
Kate30 = String[30]; { katezko motak erabiliz }
Kate15 = String[15]; { RegDat txikiago egiteko }
Kate3 = String[3];

DatuErakusle = ^DatuErregistro;
DatuErregistro = RECORD
Izen : Kate30;
Sail : Kate30;
Kurtso : Kate3;
Deialdi : Kate30;
Ema : Kate15;
Hurrengo : DatuErakusle { Zerrenda batean hurrengo
DatuErregistroari }
END; { apuntatzen du }

DatuFitxategi = FILE OF DatuErregistro;

VAR
Kar : CHAR;
Erro : DatuErakusle;
Bukatu,Ihesi : BOOLEAN;
{$I SI.SRC } { Si funtzioa barnean dauka }

PROCEDURE EzabatuLerro(Lehena,Azkena : INTEGER);

VAR
O : INTEGER;

BEGIN
FOR O := Lehena TO Azkena DO
BEGIN
GotoXY(1,O);
ClrEOL
END
END;

PROCEDURE ErakutsiErregistroa(LanekoErregistroa : DatuErregistro);

VAR
O : Integer;

BEGIN
EzabatuLerro(17,22); { Puntu horretik edozein gauza ezabatzen da }
GotoXY(1,17);
WITH LanekoErregistroa DO
BEGIN
WRITELN('DEITURAK ETA IZENA: ',Izen);
WRITELN('SAILA: ',Sail);
WRITELN('KURTSOA: ',Kurtso);
WRITELN('DEIALDIA: ',Deialdi);
WRITELN('EMAITZA: ',Ema)
END
END;

PROCEDURE BaieztatuEsp;

VAR
Espazio : INTEGER;
EspErreal : REAL;
EspErregistro : REAL;

BEGIN
Espazio := MemAvail; { MemAvail-ek ezezko osokoak itzultzen ditu }
{ 32,767 baino handiago espazioetarako . Balio
erreala, kasu honetan 65536 gehituz lortzen da }
IF Espazio < 0 THEN EspErreal := 65536.0 + Espazio ELSE EspErreal :=
Espazio;

EspErreal := EspErreal * 16; { Borrar esta l¡nea para versiones Z80 }


{ MemAvail devuelve para el 8086 valores }
{ de 16 bytes, no bytes. }

EspErregistro := EspErreal / SizeOf(DatuErregistro);


EzabatuLerro(2,3);
WRITELN(' Orain espazio dago ',EspErregistro:6:0,' erregistrotarako
zerrendan.');
END;

PROCEDURE EliminatuZerrenda(VAR Erro : DatuErakusle);

VAR
Bilketa :DatuErakusle;

BEGIN
GotoXY(27,10); WRITE('Segitu nahi duzu? (S/E): ');
IF SI THEN
IF Erro <> Nil THEN
REPEAT
Bilketa := Erro^.Hurrengo; { Hartu lehenik hurrengo
erregistroa... }
Dispose(Erro); { ...orduan lehenengoa
eliminatu ... }
Erro := Bilketa { ...eta hurengoa lehenengoa dela
egin ezazu }
UNTIL Erro = Nil;
EzabatuLerro(10,10);
BaieztatuEsp
END;

PROCEDURE SartuErregistroak(VAR Erro : DatuErakusle);

VAR
O : INTEGER;
Ihesi : BOOLEAN;
LanekoErregistroa: DatuErregistro;
Azken : DatuErakusle;
Oraingo : DatuErakusle;

BEGIN
GOTOXY(27,7); WRITE('--Erregistroak gehituz--');
REPEAT { Erabiltzaileak ezetz erantzun arte (EZ) }
EzabatuLerro(24,24);
FillChar(LanekoErregistroa,SizeOf(LanekoErregistroa),CHR(0));
{ Erregistroa zerora ipintzea. }
EzabatuLerro(9,15);
GOTOXY(1,9);
WITH LanekoErregistroa DO { Dagozkion datuak erregistroan zamatu }
BEGIN
WRITE('DEITURAK ETA IZENA: '); READLN(Izen);
WRITE('SAILA: '); READLN(Sail);
WRITE('KURTSOA: '); READLN(Kurtso);
WRITE('DEIALDIA: '); READLN(Deialdi);
Write('EMAITZA: '); READLN(Ema)
END;
Ihesi := False;
{ Bikoizketak bilatzen ari gara: }

IF Erro = Nil THEN { Zerrenda hutsik badago erregistroa Erroari


erakutsi. }
BEGIN
New(Erro);
LanekoErregistroa.Hurrengo := NIL; {Zerrenda amaitzen denaz zihur
egon }
Erro^ := LanekoErregistroa;
END
ELSE { ...zerrendan zerbait badago }
BEGIN
Oraingo := Erro; { Errotik ibilbidea hasi}
REPEAT
IF Oraingo^.Izen = LanekoErregistroa.Izen THEN
{ Bikoizketak aurkitzen badira }
BEGIN
ErakutsiErregistroa(Oraingo^);
GOTOXY(1,15);
WRITE('Izen bikoiztua hurrengo erregistroarekin.');
WRITELN('Sarrerarekin Segitu? (S/E): ');
IF Si THEN Ihesi := True ELSE Ihesi := False;
EzabatuLerro(15,22)
END;
Azken := Oraingo;
Oraingo:= Oraingo^.Hurrengo
UNTIL (Oraingo = NIL) OR Ihesi OR
(Oraingo^.Izen > LanekoErregistroa.Izen);

IF NOT Ihesi THEN { Zerrendari LanekoErregistroa gehitu}


IF Erro^.Izen > Lanekoerregistroa.Izen THEN { Erro berria }
BEGIN
New(Erro); { DatuErregistro berri bat egin }
Lanekoerregistroa.Hurrengo:= Azken;
{ Erro zaharrari erregistro berria erakutsi }
Erro^ := LanekoErregistroa
{ Erro berria LanekoErregistroari erakutsi }
END
ELSE
BEGIN
NEW(Azken^.Hurrengo); { DatuErregistro berri bat egin ,
}
LanekoErregistroa.Hurrengo := Oraingo;
{ bere Hurrengoa Oraingo-ari seinalatu eta LanekoErregistroa
esleitu }
Azken^.Hurrengo^ := LanekoErregistroa;
BaieztatuEsp { heap-ean libre geratzen den espazio
aurkeztu que queda }
END;
END;
GOTOXY(1,24);
WRITE('Zerrendari beste erregistro bat gehitzen Segitu ? (S/E): ');
UNTIL NOT Si;
END;

PROCEDURE ZamatuZerrenda(VAR Erro:DatuErakusle);


VAR
LanekoIzena : Kate30;
LanekoFitxategia: DatuFitxategi;
Oraingo :DatuErakusle;
O : INTEGER;
Ongi : BOOLEAN;

BEGIN
Bukatu := False;
REPEAT
EzabatuLerro(10,10);
Write('Zamatzeko fitxategiaren izena sar ezazu: ');
READLN(LanekoIzena);
IF Length(LanekoIzena) = 0 THEN
{ Enter bakarrik sakatu zama ebitatzeko}
BEGIN
EzabatuLerro(10,12);
Bukatu := True
END
ELSE
BEGIN
ASSIGN(LanekoFitxategia,LanekoIzena);
{$I-} RESET(LanekoFitxategia); {$I+}
IF IORESULT <> 0 THEN
{ 0 = Ongi;255 = Fitxategi ez aurkitua}
BEGIN
GOTOXY(1,12);
WRITE('Fitxategi hori ez dago. Sar ezazu beste bat .');
Ongi := False
END
ELSE
Ongi := True { Ongi-k fitxategia irekia dagoela esan nahi du
}
END
UNTIL Ongi OR Bukatu;
IF NOT Bukatu THEN
BEGIN
EzabatuLerro(10,12);
Oraingo := Erro;
IF Erro = NIL THEN { Zerrenda hutsik badago }
BEGIN
NEW(Erro); { Lehenengo erregistroa errotzat zamatzea }
Read(LanekoFitxategia,Erro^);
Oraingo := Erro
END { zerrenda hutsik ez badago: amaieraino bilatu: }
ELSE WHILE Oraingo^.Hurrengo <> NIL DO Oraingo :=
Oraingo^.Hurrengo;
IF Erro^.Hurrengo <> NIL THEN
{ fitxategia erregistro bat baino gehiago badauka }
REPEAT
NEW(Oraingo^.Hurrengo);
{ Erregistroak irakurri eta gehitu zerrendari }
Oraingo := Oraingo^.Hurrengo;
{ Nil-aren Hurrengoa eremu bat aurkitu
arte}
READ(LanekoFitxategia,Oraingo^)
UNTIL Oraingo^.Hurrengo = NIL;
BaieztatuEsp;
CLOSE(LanekoFitxategia)
END
END;

PROCEDURE IkusiZerrenda(Erro:DatuErakusle);
VAR
O : INTEGER;
LanekoFitxategia: DatuFitxategi;
Oraingo : DatuErakusle;

BEGIN
IF Erro = NIL THEN { zerrenda hutsik badago }
BEGIN
GOTOXY(27,18);
WRITELN('--Zerrenda hutsik dago.--');
GotoXY(26,20);
WRITE('Jarraitzeko sakatu Enter: ');
READLN
END
ELSE
BEGIN
GOTOXY(31,7); WRITE('--Erregistroak aurkezten.--');
Oraingo := Erro;
WHILE Oraingo <> NIL DO { bilatu eta aurkeztu NIL-eraino heldu
arte}
BEGIN
ErakutsiErregistroa(Oraingo^);
GOTOXY(1,23);
WRITE('Zerrendaren hurrengo erregistroari heltzeko sakatu
Enter');
READLN;
Oraingo := Oraingo^.Hurrengo
END;
EzabatuLerro(19,22)
END
END;

PROCEDURE GordeZerrenda(Erro : DatuErakusle);


VAR
LanekoIzena : Kate30;
LanekoFitxategia: DatuFitxategi;
Oraingo : DatuErakusle;
O : INTEGER;

BEGIN
GOTOXY(1,10);
WRITE('Zerrenda gordetzeko fitxategiaren izena sartu: ');
READLN(LanekoIzena);
ASSIGN(LanekoFitxategia,LanekoIzena); { Idazteko fitxategia ireki }
REWRITE(LanekoFitxategia);
Oraingo := Erro;
WHILE Oraingo <> NIL DO { Errekorritu eta idatzi }
BEGIN
WRITE(LanekoFitxategia,Oraingo^);
Oraingo := Oraingo^.Hurrengo
END;
CLOSE(LanekoFitxategia)
END;

BEGIN { Programa nagusia }


CLRSCR;
GOTOXY(18,1); WRITE('--Zerrenden egiketa tesna --');
BaieztatuEsp;
GOTOXY(17,8); WRITE('------------------------------------');
Erro := NIL; Bukatu := False;
REPEAT
EzabatuLerro(5,7);
EzabatuLerro(9,24);
GOTOXY(1,5);
WRITE
('[Z]matu,[S]artu erregistroa,[I]kusi,[G]orde,[E]zabatu zerrenda,edo
[B]ukatu: ');
READLN(Kar); { Komandoa aukeratu }
CASE Kar OF
'S','s' : SartuErregistroak(Erro); {Aztertu komandoa eta exekutatu }
'E','e' : EliminatuZerrenda(Erro);
'Z','z' : ZamatuZerrenda(Erro);
'G','g' : GordeZerrenda(Erro);
'I','i' : IkusiZerrenda(Erro);
'B','b' : Bukatu := True;
END; { CASE-ren amaiera }
UNTIL Bukatu
END.
PROGRAM Fichero_de_Texto;
(* Notaci¢n h£ngara *)
{ Escritura en un archivo de texto del nombre,calificaci¢n y nota de }
{ diferentes alumnos (los datos se leen por teclado). }
{ Finalmente se lee el contenido del archivo y se muestra por pantalla}
USES CRT;
TYPE
tsCadena30=String[30];
tsCadena15=STRING[15];
trgAlumno=RECORD
sNombre:tsCadena30;
sCalificacion:tsCadena15;
rNota:Real;
END;
tFichero=FILE OF trgAlumno;
VAR
cResp:Char;
sNomArchivo:tsCadena30; (* Declaraci¢n del archivo f¡sico *)
N_R:INTEGER;

PROCEDURE LeerDatosAlumno (VAR rgAlumno:trgAlumno);


BEGIN
WITH rgAlumno DO
BEGIN
N_R:=1;
GOTOXY(10,4);Write('Apellidos y Nombre ');
GOTOXY(10,4+N_R);Readln(sNombre);
GOTOXY(40,4);Write('Calificaci¢n ');
GOTOXY(40,4+N_R);Readln(sCalificacion);
GOTOXY(60,4);Write('Nota');
GOTOXY(60,4+N_R);Readln(rNota);
(* N_R:=N_R+1;*)
END;
END; (* LeerPersona () *)

PROCEDURE MostrarDatosAlumno(rgAlumno:trgAlumno);
VAR
cEspera:Char;
BEGIN
WITH rgAlumno DO
BEGIN
CLRSCR;
GOTOXY(5,4+N_R); WRITE(N_R);
GOTOXY(10,4);Write('APELLIDOS Y NOMBRE ');
GOTOXY(10,4+N_R);WRITELN(sNombre);
GOTOXY(40,4);Write(' CALIFICACIàN ');
GOTOXY(40,4+N_R);WRITELN(sCalificacion);
GOTOXY(70,4);WRITELN(' NOTA');
GOTOXY(70,4+N_R);WRITELN(rNota:5:2);
N_R:=N_R+1;
WRITELN('Nombre: ',sNombre);
WRITELN(' Calificaci¢n: ',sCalificacion);
WRITELN(' Nota: ',rNota:5:2);
WRITELN;
END;
cEspera:=Readkey;
END; (* LeerDatosPersona () *)

PROCEDURE Crear_Y_Escribir (sNomArchivo:tsCadena30);


VAR
cResp:Char;
rgAlumno:trgAlumno;
tfFichText:Text; (* Declaraci¢n del archivo de texto l¢gico *)

BEGIN
CLRSCR;
ASSIGN(tfFichText,sNomArchivo);
REWRITE(tfFichText); (* Crear el archivo o vaciarlo si existe *)
GOTOXY(10,22);WRITE('Introducir datos de alguna persona (S/N): ');
READLN(cResp);
WHILE UPCASE (cResp)='S' DO
BEGIN
(* Lectura de los datos relativos a una persona *)
LeerDatosAlumno (rgAlumno);
(* Escritura de los datos relativos a una persona *)
(* NOTA: Si se escriben en una l¡nea, se escribe la *)
(* variable de tipo string al final de la misma para *)
(* facilitar la lectura y se separa, con un car cter *)
(* espacio en blanco del n£mero anterior. *)
WITH rgAlumno DO
WRITELN(tfFichText,sCalificacion:15,rNota:5:2,' ',sNombre);
(*NOTA: Aunque no es necesario se escribir n los datos *)
(* con formato para que queden encolumnados en el *)
(* archivo de texto. *)
FLUSH (tfFichText);
WRITELN;
GOTOXY(10,22);WRITE('Introducir datos de otra persona (S/N):
');
READLN(cResp)
END;
(* Tras realizar la £ltima operaci¢n en el archivo, se cierra*)
CLOSE(tfFichText);
END; (* Crear_Y_Escribir () *)

PROCEDURE Aniadir (sNomArchivo:tsCadena30);


VAR
cResp:Char;
rgAlumno:trgAlumno;
tfFichText:TEXT; (* Declaraci¢n del archivo de texto l¢gico *)

BEGIN
ASSIGN(tfFichText,sNomArchivo);
(* Abrir archivo existente para escribir,conservando su contenido
actual.*)
(* Escribir al final del archivo. *)
APPEND(tfFichText);
REPEAT
(* Lectura de los datos relativo a una persona *)
LeerDatosAlumno(rgAlumno);
(* Escritura de los datos relativos a una persona *)
(* NOTA: Se escribe la variable de tipo string al final *)
(* para facilitar la lectura y se separa con un car cter *)
(* espacio en blanco, del n£mero anterior *)
WITH rgAlumno DO
WRITELN(tfFichText,sCalificacion:12,rNota:4:1,' ',sNombre);
FLUSH(tfFichText);
WRITELN;
WRITE('Introducir datos de otra persona (S/N): ');
READLN(cResp)
UNTIL UPCASE(cResp) <> 'S' ;
(* Tras realizar la £ltima operaci¢n en el archivo se cierra *)
CLOSE(tfFichText);
END; (* Aniadir () *)

PROCEDURE Leer_Y_MostrarContenido (sNomArchivo:tsCadena30);


VAR
rgAlumno:trgAlumno;
tfFichText:TEXT; (* Declaraci¢n del archivo de texto l¢gico *)
cAuxiliar:CHAR; (* Variable auxiliara para leer el car cter *)
(* el espacio en blanco que hay entre el £ltimo*)
(* n£mero y la cadena de caracteres. *)

BEGIN
ASSIGN(tfFichText, sNomArchivo);
RESET(tfFichText); (* Abrir el archivo existente para lectura *)
WHILE NOT EOF(tfFichText) DO
BEGIN
(* Lectura de los datos relativos a una persona *)
(* NOTA: se utiliza una variable auxiliar de tipo caracter
*)
(* para leer el car cter espacio en blanco que hay entre el *)
(* £ltimo n£mero y la cadena de caracteres *)
WITH rgAlumno DO
READLN(tfFichText,sCalificacion,rNota,cAuxiliar,sNombre);
(* Escritura de los datos relativos a una persona *)
MostrarDatosAlumno(rgAlumno);
END;
(* Tras realizar la £ltima operaci¢n en el archivo se cierra *)
CLOSE(tfFichText);
END; (* Leer_Y_MostrarContenido () *)

BEGIN (* Programa Principal *)


CLRSCR;
WRITELN;
WRITE('Nombre del archivo de texto donde guardar los datos: ');
READLN(sNomArchivo);
(* A¤adir datos a un archivo nuevo *)
Crear_Y_Escribir (sNomArchivo);
(* A¤adir datos a un archivo de texto existente *)
WRITELN;
GOTOXY(10,23);
WRITE('¨Quiere continuar escribiendo en el mismo archivo (S/N): ');
READLN(cResp);
IF UPCASE(cResp) = 'S' THEN
Aniadir (sNomArchivo);
(* Leer el contenido del archivo de texto *)
WRITELN;
WRITELN('Contenido del archivo: ',sNomArchivo);
WRITELN;
Leer_Y_MostrarContenido(sNomArchivo);
WRITELN;
WRITELN('Final del contenido del archivo');
WRITELN;
END. (* FIN DE FICHTEXT*)

PROGRAM Alumnos;
USES CRT,PRINTER;
TYPE
TAlumno=RECORD
NList:INTEGER;
Nom:STRING[30];
Calif:STRING[20];
Nota:INTEGER;
END;
VAR
F:FILE OF TAlumno;
Alum:TAlumno;
Res:CHAR;
PROCEDURE Abre;
VAR
Respuesta:CHAR;
BEGIN
ASSIGN(F,'Alumnos.dat');
REPEAT
WRITELN('¨Es la primera vez que trabaja con el fichero?(S/N)');
READLN(Respuesta);
Respuesta:=Upcase(Respuesta);
UNTIL (Respuesta='S') OR (Respuesta='N');
IF Respuesta = 'S' THEN
BEGIN
WRITELN('Peligro!.Si exist¡a alg£n dato en el fichero se
perder .');
WRITE(' Desea continuar?(S/N)');
READLN(Respuesta);
IF Respuesta ='S' THEN
REWRITE(F)
ELSE
Abre;
END
ELSE
RESET(F);
END;

PROCEDURE PideDatos;
BEGIN
CLRSCR;
SEEK(F,FileSize(F));
Alum.NList:=Filepos(F);
Write('Nombre: ');Readln(Alum.nom);
Write('Calificaci¢n: ');Readln(Alum.Calif);
Write('Nota: ');Readln(Alum.Nota);
Write(F,Alum);
END;

PROCEDURE Altas;
BEGIN
REPEAT
ClrScr;
Writeln('1.- Dar de alta a un nuevo cliente ');
Writeln('2.- Volver al men£ principal');
Writeln;
Write('Introduzca la opci¢n deseada: ');
Res:=ReadKey;
IF Res='1' THEN PideDatos;
UNTIL Res='2';
END;

PROCEDURE MuestraDatos;
BEGIN
ClrScr;
Write('N§ Lista: ');Writeln(Alum.NList);
Write('1. Nombre: ');Writeln(Alum.Nom);
Write('2. Calificaci¢n: ');Writeln(Alum.Calif);
Write('3. Nota: ');Writeln(Alum.Nota);
END;

PROCEDURE Bajas; (* bajas archivo clientes *)


VAR
NLista:INTEGER;
Contes:CHAR;
BEGIN
CLRSCR;
WRITE('¨Qu‚ c¢digo (negativo para acabar)? : ');
READLN(NLista);
WHILE NLista >=0 DO
BEGIN
IF NLista >=FileSize(F) THEN
WRITELN('N§ de Lista no existente')
ELSE
BEGIN
SEEK(F,NLista);
READ(F,Alum);
IF NLista <> Alum.NList THEN
WRITELN('N§ de lista no existente')
ELSE
BEGIN
MuestraDatos;
Write('¨Lo quiere borrar?(S/N)? ');
Readln(Contes);
Contes:=UpCase(Contes);
IF Contes='S' THEN
BEGIN
Alum.NList:=-1;
Seek(F,NLista);
Write(F,Alum);
END;
END;
END;
CLRScr;
WRITE('¨Qu‚ c¢digo? (negativo para acabar): ');
READLN(NLista);
END;
END;

PROCEDURE Consultas; (* consultas de archivo de alumnos *)


VAR
NLista:INTEGER;
BEGIN
CLRSCR;
WRITE('N§ del lista del alumno a consultar (negativo para acabar): ');
READLN(NLista);
WHILE NLista>=0 DO
BEGIN
IF NLista >= 0 THEN
BEGIN
IF NLista >= FileSize(F) THEN
WRITELN('N§ de lista inexistente')
ELSE
MuestraDatos;
END;
WRITE('N§ de lista del alumno a consultar: (negativo para
acabar)');
READLN(NLista);
END;
END;

PROCEDURE Lista; (* listado archivo alumnos *)


VAR
Nreg:INTEGER;
BEGIN
WRITELN('N§ de Lista Nombre Calificaci¢n Nota');
Writeln('-------------------------------------------------------');
FOR Nreg:= 0 TO FileSize(F)-1 DO
BEGIN
READ(F,Alum);
WITH Alum DO
BEGIN
IF NList = Nreg THEN
WRITELN(NList:6,Nom:31,Calif:21,Nota:4);
END;
END;
END;

PROCEDURE Modifica; (* modificaciones archivo alumnos *)


VAR
Ncam,NLista:INTEGER;
BEGIN
CLRSCR;
REPEAT
WRITE('¨Qu‚ c¢digo? (negativo para acabar): ');
READLN(NLista);
IF (NLista >= FileSize(F)) OR (NLista < 0) THEN
WRITELN('N§ de lista inexistente')
ELSE
BEGIN
SEEK(F,NLista);
READ(F,Alum);
IF NLista<> Alum.NList THEN
WRITE('N§ de lista inexistente')
ELSE
BEGIN
MuestraDatos;
WRITE('¨Campo a modificar? (1/2/3/0=fin: ');
Readln(NCam);
CASE Ncam OF
1:BEGIN
WRITE('Nombre: ');
READLN(Alum.Nom);
END;
2:BEGIN
WRITE('Calificaci¢n: ');
READLN(Alum.Calif);
END;
3:BEGIN
WRITE('Nota: ');
READ(Alum.Nota);
END;
END; (*del CASE *)
END;
END;
UNTIL (Ncam=0) OR (Ncam <0);
SEEK(F,Alum.NList);
WRITE(F,Alum);
END;
PROCEDURE MENU;
BEGIN
CLRSCR;
WRITELN('OPCIONES DISPONIBLES');
WRITELN('====================');
WRITELN;
WRITELN;
WRITElN('0. Acabar');
Writeln('1. Altas');
Writeln('2. Modificaciones');
Writeln('3. Consulta');
Writeln('4. Bajas');
Writeln('5. Listado por impresora: ');
END;

BEGIN (* DEL PROGRAMA PRINCIPAL*)


ClrScr;
Abre;
ClrScr;
REPEAT
Menu;
Res:=ReadKey;
CASE Res OF
'1':Altas;
'2':Modifica;
'3':Consultas;
'4':Bajas;
'5':Lista;
END;
UNTIL Res='0';
CLOSE(F);
END.

PROGRAM Matrize;
(* Eman ezazu pantailatik aterako dena: *)
USES CRT;
VAR
Taula:ARRAY [1..2,1..3] OF INTEGER;
I,J:INTEGER;
BEGIN
CLRSCR;
WRITELN('Sar itzazu matrizearen datuak (hiruz hiru, talde bi): ');
FOR I:=1 TO 2 DO
FOR J:= 1 TO 3 DO
READ(Taula[I,J]);
FOR I:=1 TO 2 DO
FOR J:= 1 TO 3 DO
BEGIN
GOTOXY(40+2*J,12+I);
WRITE(Taula[I,J]);
END;
END.
PROGRAM Zenbaki_baten_Faktorial;
(* Hacer un programa que calcule el factorial de un n£mero dado menor que
*)
(* 30
*)
(* 30 baino txikiago den emandako zenbaki baten faktoriala kalkulatzen
duen *)
(* programak egin ezazu.
CONST
Max = 29;
*)
VAR
Fakt:INTEGER;
Zenbaki,O:INTEGER;
BEGIN
WRITELN('Zenbaki baten faktoriala');
Zenbaki:=0;
WRITE('Sar ezazu zenbakia,mesedez: ');
REPEAT
READLN(Zenbaki);
UNTIL Zenbaki <29;
Fakt:=1; (* Fakt aldagaia hasieratu *)
FOR O:=1 TO Zenbaki DO
BEGIN
Fakt:=Fakt*Zenbaki;
END;
WRITE(Zenbaki,' = ',Fakt);
END.

PROGRAM Raiz_Cuadrada_1;
USES CRT;
VAR
Num:INTEGER;
BEGIN
CLRSCR;
WRITE ('Escribe un n£mero positivo: ');
READLN (Num);
IF Num >= 0 THEN
WRITELN (SQRT(Num))
ELSE
WRITELN('El n£mero debe ser positivo')
END.

PROGRAM Raiz_Cuadrada_2;
USES CRT;
VAR
Num:INTEGER;
BEGIN
CLRSCR;
WRITE ('Escribe un n£mero positivo: ');
READLN (Num);
IF Num >= 0 THEN
WRITELN (SQRT(Num))
ELSE
WRITELN ('Este n£mero es negativo');
END.

PROGRAM Menor_Mayor;
USES CRT;
VAR
Num1,Num2,NumI:INTEGER;
BEGIN
CLRSCR;
WRITE ('Escribe el número 1: ');
READLN (Num1);
WRITE ('Escribe el número 2: ');
READLN (Num2);
IF Num1>Num2 THEN
BEGIN
NumI:=Num1;
Num1:=Num2;
Num2:=NumI;
writeln('El contenido actual de la variable auxiliar es: ',NumI);
END
ELSE
BEGIN
clrscr;
WRITEln ('Los números ',Num1,' y ',Num2,' ya estaban ordenados');
END;
WRITELN ('El número menor es: ',Num1);
WRITELN ('El número mayor es: ',Num2);
END.

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