Академический Документы
Профессиональный Документы
Культура Документы
-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 *)
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 }
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.
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);
(*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;
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 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;
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 *)
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 }
VAR
Kar : CHAR;
Erro : DatuErakusle;
Bukatu,Ihesi : BOOLEAN;
{$I SI.SRC } { Si funtzioa barnean dauka }
VAR
O : INTEGER;
BEGIN
FOR O := Lehena TO Azkena DO
BEGIN
GotoXY(1,O);
ClrEOL
END
END;
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;
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;
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: }
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;
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;
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 () *)
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 () *)
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 () *)
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 () *)
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;
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.