You are on page 1of 44

INTRODUCCIN A LA COMPUTACIN MAT 1104 .

41

CAPTULO VI

PROGRAMAS EN TURBO PASCAL

Para tener un mejor aprovechamiento de los programas se sugiere transcribirlos y ejecutarlos en


Turbo Pascal

6.1 PROGRAMAS BSICOS


1 MAYOR Programa que encuentra el mayor de tres nmeros enteros introducidos por teclado

INICIO

A,B,C

A>B A>C A ES MAYOR


si si
no no
C= C=

C ES MAYOR
B ES MAYOR B>C
si
no
C=

C ES MAYOR FIN
no

PROGRAM MAYOR;
VAR
A,B,C:INTEGER;
BEGIN
WRITE('A=');READLN(A);
WRITE('B=');READLN(B);
WRITE('C=');READLN(C);
IF A>B THEN IF A>C THEN WRITELN('A ES MAYOR')
ELSE WRITELN('C ES MAYOR')
ELSE IF B>C THEN WRITELN('B ES MAYOR')
ELSE WRITELN('C ES MAYOR');
READLN;
END.

2 SEGUGRAD Programa que encuentra las races reales de una ecuacin de segundo grado

program segundogrado;
var
A,B,C,X1,X2,D:REAL;{DECLARA X, Y, Z COMO VARIABLES REALES}
BEGIN
WRITELN;
42 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

WRITE('INTRODUZCA LA VARIABLE A = ');READLN(A);


WRITE('INTRODUZCA LA VARIABLE B = ');READLN(B);
WRITE('INTRODUZCA LA VARIABLE C = ');READLN(C);
D:=(B*B)-(4*A*C);
IF D>=0 THEN BEGIN
X1:=(-B+SQRT(D))/(2*A);
X2:=(-B-SQRT(D))/(2*A);
WRITE('X1=',X1:3:7);
WRITE(' X2=',X2:3:4);
END
ELSE WRITE('RAICES IMAGINARIAS');
READLN;
END.

INICIO

A,B,C

D = BB-4AC

X1 = (-B + SQRT(D))/2A
D >= 0
si X2 = (-B SQRT(D)/2A

no
C=

Raices Imaginarias RAICES X1, X2


MAYOR

FIN

3 MAYOR2 Programa que permite hallar el mayor de tres nmeros utilizando el operador AND
trabaja cuando los nmeros introducidos son iguales, asignando la condicin de mayor a todos los
mayores que son iguales

PROGRAM MAYOR2;
VAR
A,B,C:INTEGER;
BEGIN
WRITE('A='); READLN(A);
WRITE('B='); READLN(B);
WRITE('C='); READLN(C);
IF (A>=B) AND (A>=C) THEN WRITELN('A ES MAYOR');
IF (B>=A) AND (B>=C) THEN WRITELN('B ES MAYOR');
IF (C>=B) AND (C>=A) THEN WRITELN('C ES MAYOR');
READLN;
END.
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 43

INICIO

A,B,C

A>=B and A>=C A ES MAYOR


si

no

B>=A and B>=C B ES MAYOR


si

no
no
C>=B and C>=A C ES MAYOR
si

no

FIN

4 MEDIO Programa que permite encontrar el valor intermedio de tres nmeros enteros
introducidos por teclado, este programa se resuelve de manera ms elegante si no se utiliza el
operador AND.

PROGRAM MEDIO;
USES CRT;
VAR
A,B,C:INTEGER;
BEGIN
CLRSCR;
WRITELN('INTRODUZCA TRES ENTEROS DIFERENTES');
WRITE('A=');READLN(A);
WRITE('B=');READLN(B);
WRITE('C=');READLN(C);
IF (A>B) AND (B>C) THEN WRITELN('B ES EL INTERMEDIO');
IF (C>B) AND (B>A) THEN WRITELN('B ES EL INTERMEDIO');
IF (A>C) AND (C>B) THEN WRITELN('C ES EL INTERMEDIO');
IF (B>C) AND (C>A) THEN WRITELN('C ES EL INTERMEDIO');
IF (B>A) AND (A>C) THEN WRITELN('A ES EL INTERMEDIO');
IF (C>A) AND (A>B) THEN WRITELN('A ES EL INTERMEDIO');
READLN;
END.
44 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

INICIO

A,B,C

A>B and B< C B ES INTERME


si

no

C >B and B > A B ES INTERME


si

no
no
A > C and C > B C ES INTERME
si

no

B > C and C > A C ES INTERME


si

no

B >A and A > C A ES INTERME


si

no
no
C >A and A > B C ES MAYOR
si

no

FIN

6.2 PROGRAMAS CON SERIES


INICIO
5 SERIE1 Permite sumar una serie de N trminos, mltiplos de M
N, M
{SUMA N MULTIPLOS DE M}
PROGRAM SERIE1; I=1N
VAR
I,N,M:INTEGER;
S=S+M*I
S:LONGINT;
BEGIN
WRITE('INGRESE NUMERO DE TERMINOS=');READLN(N); I*M
WRITE('INGRESE MULTIPLO=');READLN(M);
FOR I:=1 TO N DO I
BEGIN
S:=S+I*M; S
WRITE(I*M,'+');
FIN
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 45

END;
WRITELN;
WRITELN('LA SUMA ES=',S);
READLN;
END.

6 SERIE2

{SUMA FRACCIONES DECIMALES ENTRE 0 Y 3}


PROGRAM SERIE2; INICIO
USES CRT;
VAR I = 1 30
I:INTEGER;
S,FD:REAL; S = S + I/10
BEGIN FD = I / 10
CLRSCR;
FOR I:=1 TO 30 DO
FD
BEGIN
S:=S+I/10;
FD:=I/10; I
WRITE(FD:1:1,'+');
END; S
WRITELN;
WRITELN('LA SUMA ES=',S:3:3); FIN
READLN;
END.

7 SERIE4 Permite sumar una serie de la forma

100 99 98 97
....... N
2 1 3 2 4 3 5 4
{SUMA SERIE(100/2-1)-(99/3+2)+..}
PROGRAM SERIE4;
VAR
A,B,C,SIG,N,I:INTEGER;
S:REAL;
BEGIN
A:=100; B:=2; C:=1; SIG:=-1;
WRITE('CUANTOS TERMINOS DESEA SUMAR ');READLN(N);
FOR I:=1 TO N DO
BEGIN
IF I MOD 2 <> 0 THEN WRITE('(',A,'/',B,'-',C,')-')
ELSE WRITE('(',A,'/',B,'+',C,')+');
S:=S+(-1)*SIG*(A/B+SIG*C);
A:=A-1; B:=B+1; C:=C+1; SIG:=SIG*(-1);
END;
WRITELN;WRITELN('SUMA=',S:4:4);
READLN;
END.
46 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

8 SERIE5 Este programa permite determinar cuantos nmeros de la siguiente serie


1 1 1
1 .........
2 3 4
deben sumarse para que dicha suma sea menor o igual a cuatro

PROGRAM SERIE5; INICIO


VAR
I:INTEGER; I=1
S:REAL;
BEGIN 1+
I:=1;WRITE('1+');
WHILE S<=4 DO
BEGIN I
S:=S+1/I;
IF S<=4 THEN WRITE('(1/',I,')+'); S = S + 1/I
I:=I+1;
END;
S >=4 I+
WRITELN;WRITELN('S=',S-(1/I):2:4); si
WRITELN('NUMERO DE TERMINOS=',I-1); no
READLN; S, I
END.
FIN

9 SERIE6 Este programa permite hallar la suma de n trminos de la serie

12 22 32
......... N
7 3 9 5 11 7
{SUMA LA SERIE (1/7-3)+(4/9+5)+..}
PROGRAM EXAMEN;
VAR
A,B,C,N,SIG:INTEGER;
S:REAL;
BEGIN
WRITE('NUMERO DE TERMINOS=');READLN(N);
B:=7;C:=3;SIG:=-1;
FOR A:=1 TO N DO
BEGIN
S:=S+(A*A)/(B+C*SIG);
IF SIG=-1 THEN WRITE(A*A,'/',B,SIG*C,' + ')
ELSE WRITE(A*A,'/',B,'+',C,' + ');
B:=B+2;C:=C+2;SIG:=SIG*(-1);
END;
WRITELN;
WRITELN('S=',S);
READLN;
END.
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 47

10 SERIE7 Permite hallar la suma de N trminos de la serie


1! 2! 3!
........ N
2 3 4
donde el numerador corresponde al factorial de cada uno de los nmeros
PROGRAM SERIE7;
VAR
N,D,NT,SIG,I:INTEGER;
S:REAL;
BEGIN
N:=1;D:=2;SIG:=1;
WRITE('NUMERO DE TERMINOS=');READLN(NT);
FOR I:=1 TO NT DO
BEGIN
S:= S+(SIG)*N/D;
WRITE(I,'!/',D);
IF I<>NT THEN
IF I/2<>INT(I/2)THEN WRITE('-') ELSE WRITE('+');
N:=N*(I+1);
D:=D+1;
SIG:=SIG*(-1);
END;
WRITELN('=',S:4:5);
READLN;
END.
11 SERIE8 Suma una variante de la serie de Fibbonacci de N trminos
1 1 1 3 5 9 17N
La serie tiene los 3 primeros valores igual a 1 y cada trmino siguiente se forma por la suma de
los tres anteriores
{SUMA SERIE VARIANTE DE LA SERIE DE FIBBONACCI}
PROGRAM SERIE8;
VAR
A,B,C,N,S,I,AUX:INTEGER;
BEGIN
A:=1;B:=1;C:=1;S:=3;
WRITE('NUMERO DE TERMINOS>=3 ');READLN(N);
WRITE('1 1 1');
FOR I:=4 TO N DO
BEGIN
AUX:=C;
C:=A+B+C;
S:=S+C;
A:=B;
B:=AUX;
WRITE(C:3);
END;
WRITELN(' SUMA DE ',N,' TERMINOS= ',S);
READLN;
END.
48 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

12 SERIE9 Suma la siguiente serie de N trminos


1 3 9 27
....... N
2 4 6 8

PROGRAM SERIE9;
VAR
I,N,D,NT:LONGINT;
S:REAL;
BEGIN
WRITE('NUMERO DE TERMINOS ');READLN(NT);
N:=1;D:=2;
FOR I :=1 TO NT DO
BEGIN
S:=S+(N/D);
WRITE (N,'/',D,' + ');
D:=D+2;
N:=N+N+N;
END;
WRITELN;WRITELN('SUMA=',S:5:4);
READLN;
END.

13 SERIEPRIMO Este programa muestra y cuenta los nmeros primos menores a 10000, el
algoritmo ha sido mejorado, admitiendo que un nmero es primo si no admite divisin entera
hasta que es dividido por su raz cuadrada, el programa, tambin elimina el anlisis de todos los
nmeros pares
PROGRAM SERIEPRIMO;
TYPE
VECTOR=ARRAY[1..5000]OF LONGINT;
VAR
A:VECTOR;
I,D,J,C,CP,DP:LONGINT;
BEGIN
FOR I:=1 TO 5000 DO
BEGIN
CP:=(I*2-1);
D:=TRUNC(SQRT(CP));
FOR J:=2 TO D DO
IF CP/J=INT(CP/J) THEN DP:=1;
IF DP=0 THEN BEGIN
C:=C+1;A[C]:=CP;WRITE(A[C]:6);
END
ELSE DP:=0;
END;
WRITELN;WRITELN(' EXISTEN ',C,' NUMEROS PRIMOS MENORES A 10000');
READLN;
END.
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 49

14 SERIEFIBBONACCI Este programa suma e imprime N trminos de la serie de Fibbonacci

{SUMA SERIE FIBBONACCI}


PROGRAM FIBBONACCI;
VAR
N,I,S,A,B,C:LONGINT;
BEGIN
WRITE('NUMERO DE TERMINOS ');READLN(N);
A:=1; B:=1;
FOR I:=1 TO N DO
BEGIN
IF I<>N THEN WRITE(A,'+')
ELSE WRITE(A);
S:=S+A;
C:=A+B; A:=B; B:=C;
END;
WRITELN('=',S);
READLN;
END.

La salida de este programa ser:


NUMERO DE TERMINOS 8
1 + 1 + 2 + 3 + 5 + 6 + 11 + 13 = 42

15 SERIE10 Imprime y suma N trminos de la serie


4 6 8 10
....... N
3 4 5 6
PROGRAM SUMA3;
VAR
A,B,SIG,N,I:LONGINT;
S:REAL;
BEGIN
A:=4;B:=3;SIG:=1;
WRITE('NUMERO DE TERMINOS A SUMAR=');READLN(N);
FOR I:=1 TO N DO
BEGIN
S:=S+SIG*A/B;
IF SIG=1 THEN WRITE('+',A,'/',B)
ELSE WRITE('-',A,'/',B);
A:=A+2;
B:=B+1;
SIG:=SIG*-1;
END;
WRITELN;
WRITELN('SUMA=',S:3:4);
READLN;
END.
50 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

6.3 PROGRAMAS CON CICLOS

16 ADIVIFOR Programa que permite al usuario adivinar un nmero aleatorio generado por el
computador comprendido entre 0 y 100, utiliza la sentencia for y el comando break

INICIO

k=random(100))

I=16

k < >n k<n


si no chico

no si
C=

C=I grande

k=n fallaste
no
si
acertaste

FIN

{permite adivinar un nmero en 6 oportunidades}


program adivine1;
uses crt; var c,i,n,k :integer;
begin
clrscr;
randomize;k:=random(100);
writeln (Adivine un entero entre 0 y 100, tienes 6 oportunidades);
for i:= 1 to 6 do
begin
read (n);
if k<>n then begin
if k<n then writeln (muy grande)
else writeln (muy chico)
end
else begin c:=i; break end
end;
writeln;
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 51

if k=n then writeln(Bien campeonazo, acertaste en ,c, intentos)


else writeln (Fallaste cabezn, el nmero era , k);

readln;readln; end.

17 ADIVIWHI Programa que permite al usuario adivinar un numero aleatorio generado por el
computador comprendido entre 0 y 100, utiliza la sentencia while
INICIO

K=random(100))

I=I+1

k < >n k<n


si no chico

no si
C=

acertaste grande

I=6

I=6
no

si

si
k <> n fallaste FIN

no
{permite adivinar un numero en 6 intentos}
program adivwhile;
uses crt;
var c,i,n,k :integer;
begin
clrscr;
randomize;k:=random(100);
writeln ('Adivine un entero entre 0 y 100, tienes 6 oportunidades');
WHILE I<6 DO
begin
I:=I+1;
read (n);
if k<>n then
begin
if k<n then writeln (' muy grande ',I,' INTENTO')
52 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

else writeln (' muy chico ',I,' INTENTO')


end
else
BEGIN
writeln(' Bien campeonazo, acertaste en ',I,' intentos');
I:=6;
END;
end;
writeln;
if k<>n then writeln (' Fallaste cabezn, el nmero era ', k);
READKEY;{permite salir de la pantalla de ejecucin presionando una tecla}
end.
18 DETERMINANTE Permite hallar el determinante de una matriz cargada con numeros
aleatorios de dimensin 3 por 3
{permite hallar el determinante de una matriz aleatoria 3*3}
PROGRAM DETERMINANTE;
USES CRT; TYPE
MATRIZ=ARRAY[1..3,1..3] OF REAL;
VAR
I,J,N : INTEGER;
A : MATRIZ;
DET : REAL;
BEGIN randomize;CLRSCR;
WRITELN (MATRIZ A);
FOR I:=1 TO 3 DO
BEGIN
FOR J:=1 TO 3 DO
BEGIN A[I,J]:=RANDOM(5);WRITE(A[I,J]:4:0);END;
WRITELN;
END;
{CALCULO DEL DETERMINANTE}
DET:=A[1,1]*(A[2,2]*A[3,3]-A[2,3]*A[3,2])+A[1,2]* (A[2,3]*A[3,1]-A[2,1]*A[3,3]) + A[1,3]*
(A[2,1]*A[3,2]-A[2,2]*A[3,1]);
WRITELN(EL DETERMINANTE BUSCADO ES ,DET:8:2);
READLN;
END.

19 MULTIPLOS ENTRE A Y B Suma mltiplos de M comprendidos entre A y B sin


considerar los extremos del intervalo

PROGRAM MULTEAYB;
USES CRT;
VAR
IM,M,A,B,C:INTEGER;
S:LONGINT;
LTI
CLRSCR;
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 53

WRITE(SUMAREMOS MLTIPLOS DE: );READLN(M);


WRITE(DESDE A=);READLN(A);
WRITE(HASTA B=);READLN(B);
IM:=(A DIV M)*M+M;WRITE(IM);WRITELN;
WHILE IM<B DO
BEGIN
S:=S+IM;
WRITE(IM,+);
IM:=IM+M;
END;
WRITELN;
WRITELN(LA SUMA ES=,S);
READLN;
END.

6.4 PROGRAMAS SOBRE NMEROS PRIMOS


20 PRIMOS Este programa para encontrar un nmero primo procede a dividir el mismo entre
todos los enteros menores o iguales a l, el algoritmo considerado es lento comparado con el
del programa 13

INICIO

N = 1000

I=1 N

N N DP = DP + 1
INT
I I si
N>B
no

DP =2 CP = CP + 1
si

no N
N = N + 1 ; DP = 0

no
N>2000 CP
si FIN

{GENERA E IMPRIME N NUMEROS PRIMOS}


PROGRAM PRIMOS;
VAR
I,NP,P,N,DP:INTEGER;
BEGIN
54 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

WRITE(CUANTOS NUMEROS PRIMOS DESEA OBTENER ); READLN(N);


WRITE( 1); NP:=2; P:=1;
WHILE P<>N DO
BEGIN
FOR I:=1 TO NP DO
IF NP MOD I =0 THEN DP:=DP+1;
IF DP=2 THEN BEGIN WRITE(NP:6); P:=P+1; END;
DP:=0;
NP:=NP+1;
END;
READLN; WRITELN;
END.

21 CUENTA PRIMOS Cuenta y muestra los nmeros primos que existen entre 10000 y 20000

PROGRAM PRIMOS;
VAR
I,BP,DP,CP: INTEGER;
BEGIN
BP:=10000;
REPEAT
DP:=0;
FOR I:=1 TO BP DO
IF BP MOD I =0 THEN DP:=DP+1;
IF DP=2 THEN BEGIN WRITE(BP:6); CP:=CP+1; END;
BP:=BP+1;
UNTIL BP=20000;
WRITELN; WRITE(EXISTEN ,CP, NUMEROS PRIMOS);
END.

6.5 PROGRAMAS DE CAMBIOS DE BASE


22 EB10AB8 Transforma un entero de base 10 a base 8

PROGRAM B10AB8;
USES CRT;
VAR
B10,B8,C,N:LONGINT;
BEGIN
CLRSCR;
C:=1;
WRITE(INTRODUZCA UN ENTERO EN BASE 10 );READLN(B10);
N:=B10;
WHILE B10>=1 DO
BEGIN
B8:=B8+(B10 MOD 8)*C;
B10:=B10 DIV 8;
C:=C*10;
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 55

END;
WRITELN(N, EN BASE 10 ES IGUAL A ,B8, EN BASE 8);
READLN;
END.

23 B10ABN Transforma un entero de base 10 a base N, menor a 10

PROGRAM B10ABN;
USES CRT;
VAR
B10,B8,C,N,NB:LONGINT;
BEGIN
CLRSCR;
C:=1;
WRITE(INTRODUZCA UN ENTERO EN BASE 10 );READLN(B10);
WRITE(INTRODUZCA LA NUEVA BASE );READLN(NB);
N:=B10;
WHILE B10>=1 DO
BEGIN
B8:=B8+(B10 MOD NB)*C;
B10:=B10 DIV NB;
C:=C*10;
END;
WRITELN(N, EN BASE 10 ES IGUAL A ,B8, EN BASE ,NB);
READLN;
END.

24 EB8AB10 Transforma un entero de base 8 a base 10

PROGRAM EB8AB10;
USES CRT;
VAR
B10,B8,C,N,RE:LONGINT;
BEGIN
CLRSCR;
C:=1;
WRITE('INTRODUZCA UN ENTERO EN BASE 8 ');READLN(B8);
N:=B8;
WHILE B8>=1 DO
BEGIN
RE:=B8 MOD 10;
B10:=B10+RE*C;
B8:=B8 DIV 10;
C:=C*8;
END;
WRITELN(N,' EN BASE 8 ES IGUAL A ',B10,' EN BASE 10');
READLN;
END.
56 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

25 FRAC10A8 Permite transformar una fraccin de base 10 a base 8

PROGRAM FRAC10A8;
VAR
N,F8,DEN:REAL;
I:INTEGER;
BEGIN
WRITE('FRACCION EN BASE 10 = ');READLN(N);
DEN:=10;
FOR I:= 1 TO 5 DO
BEGIN
F8:=F8+(INT(N*8))/DEN;
N:=FRAC(N*8);
DEN:=DEN*10;
END;
WRITELN('LA FRACCION EN BASE 8 ES = ',F8:1:5);
READLN;
END.

26 F8AF10 Este programa efecta la transformacin de una fraccin de base 8 a base 10

{transforma una fraccin de base 8 a base 10}


PROGRAM F8AF10;
USES CRT;
VAR
F10,F8,N:REAL;
C,CF,I,RE:LONGINT;
BEGIN
CLRSCR;
C:=8;
WRITE('LA FRACCION EN BASE 8 ES = ');READLN(F8);
N:=F8;
FOR I:=1 TO 3 DO
BEGIN
RE:=TRUNC(F8*10);
F10:=F10+RE/C;
F8:=FRAC(F8*10);
C:=C*8;
END;
WRITELN(N:1:5,' EN BASE 8 ES IGUAL A ',F10:1:5,' EN BASE 10');
READLN;
END.
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 57

6.6 PROGRAMAS DIVERSOS


INICIO
27 VALORPI Para estimar el valor de Pi consideremos
el rea de un cuarto de crculo de radio 1 inscrito en I=1 10
un cuadrado de lado 1, como el siguiente:
J=1 100000

X = random(10000)/10000
Y = random(10000)/10000

Y>=(1-x*x) C=C+1
si
no
Si generamos miles de puntos y contamos los que
se encuentren dentro el cuarto de circulo, la totalidad J
de los mismos en relacin al total representarn el
rea del cuarto de crculo, al multiplicar este valor C1=C1+(4*C/1000)
por cuatro se tiene el rea del circulo de radio uno
que es igual a Pi 4C/100000

{permite aproximar el valor de pi} C=0


{metodo de probabilidad}
C1/10 FIN
I
PROGRAM CIRCULO;
VAR
C,N,I,j:LONGINT;
Y,X,Z,C1:REAL;
BEGIN
RANDOMIZE;
for j:=1 to 10 do
begin
FOR I:= 1 TO 100000 DO
BEGIN
X:=RANDOM(10000)/10000;
Y:=RANDOM(10000)/10000;
IF Y<=sqrt(1-X*X) THEN C:=C+1;
END;
C1:=C1+(4*C/100000);
WRITELN(4*C/100000:3:4);C:=0;
end;
WRITELN(PROMEDIO=,C1/10:3:4); readln;
END.

28 IMPRESION
{imprime secuencia en forma de triangulo}
program impre1;
58 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

uses crt;
var
i,j,n:integer;
begin
clrscr; n:=10;
for j:=1 to n do
begin
for i:=1 to n do
write(i:3); writeln; n:=n-1; end;
readln; end.
Este programa muestra la siguiente salida o impresin
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
29 IMPGOTOXY Ubica la impresin en el punto deseado mediante gotoxy lo cual permite
ubicar el cabezal de impresin en la columna X fila Y

program impre2; uses crt;


var
i,j,n,k,l:integer;
begin
clrscr; n:=20; k:=5; l:=10;
for j:=1 to n do
begin
for i:=1 to n do
begin
gotoxy(l,k);
write(i*2); l:=l+3;
end;
writeln; n:=n-1; k:=k+1; l:=10;
end;
readln;
end.

El programa muestra la siguiente salida


INTRODUCCIN A LA COMPUTACIN MAT 1104 . 59

6.7 APLICACIONES DE CASE

30 LEEDIG Dado un dgito cualquiera, escribe el mismo literalmente

PROGRAM LEEDIG;
VAR
N:CHAR;
BEGIN
READ(N);
CASE N OF
O:WRITE( CERO);
1:WRITE( UNO);
2:WRITE( DOS);
3:WRITE( TRES);
4:WRITE( CUATRO);
5:WRITE( CINCO);
6:WRITE( SEIS);
7:WRITE( SIETE);
8:WRITE( OCHO);
9:WRITE( NUEVE)
ELSE
WRITE(ES OTRO CARACTER);
END;
READLN;READLN;
END.
60 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

INICIO

9 8 7 6 5 4 3 2 1 0 CERO
UNO
DOS
TRES
CUATRO
FIN
CINCO
SEIS
SIETE
OCHO
NUEVE

31 LEE99 Lee nmeros menores a 100}

program lee99;
var
n,digito,n1:integer;
begin
readln(n);
if n=0 then write(cero);
if (n<100) and (n>=20) then
begin
n1:=n div 10 ; n:=n mod 10;
case n1 of
2:write(veinte );
3:write(treinta );
4:write(cuarenta );
5:write(cincuenta );
6:write(sesenta );
7:write(setenta );
8:write(ochenta );
9:write(noventa );
end;
end;
if (n<>0) and (n1<>0) then write(y );
if (n>=0) and (n<10) then
case n of
1:writeln(uno);
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 61

2:writeln(dos);
3:writeln(tres);
4:writeln(cuatro);
5:writeln(cinco);
6:writeln(seis);
7:writeln(siete);
8:writeln(ocho);
9:writeln(nueve);
end;
if (n<20) and (n>=10) then
begin
n:=n mod 10;
case n of
0:writeln(diez);
1:writeln(once);
2:writeln(doce);
3:writeln(trece);
4:writeln(catorce);
5:writeln(quince);
6:writeln(diez y seis);
7:writeln(diez y siete);
8:writeln(diez y ocho);
9:writeln(diez y nueve);
end;
end;
readln;
end.

32 LEE999 Programa que lee nmeros enteros menores a 1000

program lee999;
var
n,digito,n1,n2:integer;
begin
readln(n);
if n=0 then write(cero);
if (n>=100) and (n<1000) then
begin
n2:=n div 100; n:=n mod 100;
case n2 of
0:write(cien );
1:write(ciento );
2:write(doscientos );
3:write(trescientos );
4:write(cuatrocientos );
5:write(quinientos );
6:write(seiscientos );
7:write(setecientos );
8:write(ochocientos );
62 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

9:write(novecientos );
end;
end;
if (n<100) and (n>=20) then
begin
n1:=n div 10 ; n:=n mod 10;
case n1 of
2:write(veinte );
3:write(treinta );
4:write(cuarenta );
5:write(cincuenta );
6:write(sesenta );
7:write(setenta );
8:write(ochenta );
9:write(noventa );
end;
end;
if (n<>0) and (n1<>0) then write(y );
if (n>=0) and (n<10) then
case n of
1:writeln(uno);
2:writeln(dos);
3:writeln(tres);
4:writeln(cuatro);
5:writeln(cinco);
6:writeln(seis);
7:writeln(siete);
8:writeln(ocho);
9:writeln(nueve);
end;
if (n<20) and (n>=10) then
begin
n:=n mod 10;
case n of
0:writeln(diez);
1:writeln(once);
2:writeln(doce);
3:writeln(trece);
4:writeln(catorce);
5:writeln(quince);
6:writeln(diez y seis);
7:writeln(diez y siete);
8:writeln(diez y ocho);
9:writeln(diez y nueve);
end;
end;
readln;
end.
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 63

5.8 PROGRAMAS DE ORDENACIN (VECTORES)


33 BURBUJA Ordena una lista en orden creciente (o decreciente) por el mtodo de la burbuja

PROGRAM BURBUJA;
USES CRT;
TYPE
VECTOR=ARRAY[1..1000]OF INTEGER;
VAR
I,J,N,AUX:INTEGER;
A:VECTOR;
BEGIN
CLRSCR; RANDOMIZE;
WRITE(NUMERO DE TERMINOS A ORDENAR );READLN(N);
WRITELN(LISTA ORIGINAL);
FOR I:=1 TO N DO
BEGIN A[I]:=RANDOM(100); WRITE(A[I]:4); END;
{ORDENACION POR BURBUJA}
WRITELN;
FOR I:=1 TO N-1 DO
FOR J:=I+1 TO N DO
IF A[I]<A[J] THEN BEGIN AUX:=A[I]; A[I]:=A[J];
A[J]:=AUX; END;
WRITELN(LISTA ORDENADA);
FOR I:=1 TO N DO
WRITE(A[I]:4);
READLN;
END.

34 SHELL Permite ordenar una lista aplicando el algoritmo de Shell

PROGRAM SHELL;
TYPE
VECTOR=ARRAY[1..1000]OF INTEGER;
VAR
I,J,AUX,N,F:INTEGER;
A:VECTOR;
BEGIN RANDOMIZE;
WRITE(CUANTOS TERMINOS DESEA ORDENAR );READLN(N);
WRITELN (LISTA ORIGINAL);
FOR I:= 1 TO N DO
BEGIN
A[I]:=RANDOM(100);WRITE(A[I]:4);
END;
{ORDENACION POR EL METODO DE SHELL}
F:=TRUNC(N/2);
WHILE F<>0 DO
BEGIN
FOR I:=1 TO N-F DO
64 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

IF A[I+F]<A[I] THEN BEGIN AUX:=A[I]; A[I]:=A[I+F]; A[I+F]:=AUX; END;


F:=F-1;
END;
WRITELN;WRITELN(LISTA ORDENADA);
FOR I:= 1 TO N DO
WRITE(A[I]:4);
READLN;
END.

6.9 PROGRAMAS CON MATRICES

35 MATRIZ1 Carga e imprime una matriz 5 por 5 con los primeros mltiplos de cuatro por filas

{CARGA MATRIZ COM MULTIPLOS DE 4}


PROGRAM MATRIZ1; INICIO
TYPE
MATRIZ=ARRAY[1..100,1..100] OF INTEGER; M=4
VAR
I,J,M:INTEGER;
I=1 5
A:MATRIZ;
BEGIN M:=4;
J=1 5
FOR I:=1 TO 5 DO
BEGIN
FOR J:=1 TO 5 DO A[I,J] = M
4
BEGIN
A[I,J]:=M; WRITE(A[I,J]:4); M:=M+4; A[I,J]
END;
WRITELN; M=M+1
END;
READLN;
END. J

Este programa genera la siguiente impresin

4 8 12 16 20 J
24 28 32 36 40
44 48 52 56 60 FIN
64 68 72 76 80
84 88 92 96 100
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 65

36 MATONCOL Carga e imprime una matriz ondulada por columnas con nmeros naturales
INICIO

M=4

J=1 5

si no
J mod 2=0

I=5 1 J=1 5

A[I,J] = M A[I,J] = M
4 4

M=M+1 M=M+1

I I

I=1 5
J=1 5

A[I,J]
J J FIN

PROGRAM MATONDCOL;
TYPE
MATRIZ=ARRAY[1..20,1..20]OF INTEGER;
VAR
I,J,M:INTEGER;
A:MATRIZ;
BEGIN
{CARGADO DE LA MATRIZ} M:=1;
FOR J:=1 TO 5 DO
IF J MOD 2 = 0 THEN FOR I:=5 DOWNTO 1 DO
BEGIN
A[I,J]:=M;
M:=M+1;
END
ELSE FOR I:=1 TO 5 DO
BEGIN
A[I,J]:=M;
M:=M+1;
END;
{IMPRESION DE LA MATRIZ}
FOR I:=1 TO 5 DO
BEGIN
66 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

FOR J:=1 TO 5 DO
WRITE(A[I,J]:4);
WRITELN;
END;
READLN;
END.

37 MATONDFIL Carga e imprime una matriz ondulada por filas


PROGRAM MATRIZ1;
TYPE
MATRIZ=ARRAY[1..20,1..20]OF INTEGER;
VAR
I,J,M:INTEGER;
A:MATRIZ;
BEGIN
{CARGADO DE LA MATRIZ} M:=1;
FOR I:=1 TO 5 DO
IF I MOD 2 = 0 THEN FOR J:=5 DOWNTO 1 DO
BEGIN
A[I,J]:=M;
M:=M+1;
END
ELSE FOR J:=1 TO 5 DO
BEGIN
A[I,J]:=M;
M:=M+1;
END;
{IMPRESION DE LA MATRIZ}
FOR I:=1 TO 5 DO
BEGIN
FOR J:=1 TO 5 DO
WRITE(A[I,J]:4);
WRITELN;
END;
READLN;
END.

38 MAONCOAL Carga una matriz ondulada por columnas alternadas empezando por el ltimo
trmino.

PROGRAM MATRIZ4;
TYPE
MATRIZ=ARRAY[1..20,1..20] OF INTEGER;
VAR
I,J,K,C,V,SIG,N:INTEGER;
A:MATRIZ;
BEGIN
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 67

WRITE('DIMENSION=');READLN(N);
J:=N; C:=1; V:=N-1; SIG:=-1;
FOR K:=1 TO N DO
BEGIN
IF K MOD 2 <> 0 THEN
FOR I:=N DOWNTO 1 DO
BEGIN
A[I,J]:=C;
C:=C+1;
END
ELSE
FOR I:=1 TO N DO
BEGIN
A[I,J]:=C;
C:=C+1;
END;
J:=J+SIG*V;
SIG:=SIG*(-1); V:=V-1;
END;
FOR I:=1 TO N DO BEGIN FOR J:=1 TO N DO WRITE (A[I,J]:3);WRITELN; END;
READLN;
END.

Este programa produce la siguiente salida

39 MATDIAPS Carga una matriz 8 por 8 con ceros en la diagonal principal y secundaria y unos
en las dems posiciones}

PROGRAM MATRIZEX;
TYPE
MATRIZ=ARRAY[1..100,1..100] OF INTEGER;
68 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

VAR
I,J,M:INTEGER;
A:MATRIZ;
BEGIN
FOR I:=1 TO 8 DO
BEGIN
FOR J:=1 TO 8 DO
BEGIN
IF (I=J) OR (I+J=9) THEN A[I,J]:=0
ELSE A[I,J]:=1;
WRITE(A[I,J]:4);
END;
WRITELN;
END;
READLN;
END.

La matriz resultante es la siguiente

0 1 1 1 1 1 1 0
1 0 1 1 1 1 0 1
1 1 0 1 1 0 1 1
1 1 1 0 0 1 1 1
1 1 1 0 0 1 1 1
1 1 0 1 1 0 1 1
1 0 1 1 1 1 0 1
0 1 1 1 1 1 1 0

40 SUMMAT Suma dos matrices, la primera cargada con nmeros fijos y la segunda cargada
con nmeros aleatorios

PROGRAM SUMMAT;
TYPE
MATRIZ=ARRAY[1..100,1..100] OF INTEGER;
VAR
I,J:INTEGER;
A,B,S:MATRIZ;
BEGIN
RANDOMIZE;
WRITELN('MATRIZ A');
FOR I:=1 TO 3 DO
BEGIN
FOR J:=1 TO 4 DO
BEGIN
A[I,J]:=RANDOM(10);
WRITE(A[I,J]:4);
END;
WRITELN;
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 69

END;
WRITELN('MATRIZ B');
B[1,1]:=4; B[1,2]:=0; B[1,3]:=-1; B[1,4]:=10;
B[2,1]:=-6; B[2,2]:=7; B[2,3]:=-2; B[2,4]:=12;
B[3,1]:=2; B[3,2]:=9; B[3,3]:=8; B[3,4]:=16;
FOR I:=1 TO 3 DO
BEGIN
FOR J:=1 TO 4 DO
BEGIN
WRITE(B[I,J]:4);
END;
WRITELN;
END;
WRITELN('MATRIZ SUMA');
FOR I:=1 TO 3 DO
BEGIN
FOR J:=1 TO 4 DO
BEGIN
S[I,J]:=A[I,J]+B[I,J];
WRITE(S[I,J]:4);
END;
WRITELN;
END;
READLN;
END.

41 MATONDIA Carga e imprime una matriz de dimensin N por N ondulando en direccin de


la diagonal secundaria, de acuerdo al siguiente formato.

1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25

PROGRAM MATONDIA;
USES CRT;
TYPE MATRIZ=ARRAY[1..20,1..20]OF INTEGER;
VAR I,J,B,C,D,E,F,N,S,H:INTEGER;
A:MATRIZ;
BEGIN
CLRSCR; WRITE('DIMENSION=');READLN(N);
A[1,1]:=1;A[N,N]:=N*N;B:=2;C:=2;D:=2;E:=2;F:=N;
WHILE C<TRUNC(N*N/2) DO

BEGIN
FOR I:=1 TO B DO
IF S MOD 2 = 0 THEN
BEGIN
70 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

A[I,D]:=C;C:=C+1;D:=D-1;
END
ELSE
BEGIN
A[D,I]:=C;C:=C+1;D:=D-1;
END;
B:=B+1; D:=B; S:=S+1
END;

WHILE C<N*N DO
BEGIN
FOR I:=E TO N DO
IF S MOD 2 = 0 THEN
BEGIN
A[I,F]:=C;C:=C+1;F:=F-1;
END
ELSE
BEGIN
A[F,I]:=C;C:=C+1;F:=F-1;
END;
E:=E+1; F:=N; S:=S+1;
END;

{IMPRESION DE LA MATRIZ RESULTANTE}


FOR I:=1 TO N DO
BEGIN
FOR J:= 1 TO N DO
WRITE(A[I,J]:4);
WRITELN;
END;
READLN;
END.

6.10 PROGRAMAS CON PROCEDIMIENTOS

42 MATESPIRAL Carga e imprime la matriz espiral de dimensin N por N con los primeros
nmeros naturales

PROGRAM ESPIRAL;
TYPE
MATRIZ=ARRAY[1..20,1..20]OF INTEGER;
VAR
A:MATRIZ;
I,J,B,C,D,E,F,G,H,K,L,FI,N:INTEGER;
PROCEDURE FILA;
BEGIN
I:=FI;FI:=FI+1;
FOR J:=B TO D DO
BEGIN C:=C+1;A[I,J]:=C;END;
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 71

END;
PROCEDURE COLUMNA;
BEGIN
FOR I:=E TO F DO
BEGIN C:=C+1;A[I,J]:=C;END;
END;
PROCEDURE ALIF;
BEGIN
FOR J:=G DOWNTO H DO
BEGIN C:=C+1;A[I,J]:=C;END;
END;
PROCEDURE ANMULOC;
BEGIN
FOR I:=K DOWNTO L DO
BEGIN C:=C+1;A[I,J]:=C;END;
END;
PROCEDURE IMPRESION;
BEGIN FOR I:=1 TO N DO
BEGIN FOR J:=1 TO N DO
WRITE(A[I,J]:4);
WRITELN; END;
END;

BEGIN
WRITE('DIMENSION DE LA MATRIZ = ');READLN(N);
B:=1; D:=N; E:=2; F:=N; G:=N-1; H:=1; K:=N-1; L:=2; FI:=1;
WHILE C<(N*N) DO
BEGIN
FILA; COLUMNA; ALIF; ANMULOC;
B:=B+1; D:=D-1; E:=E+1; F:=F-1; G:=G-1; H:=H+1; K:=K-1; L:=L+1;
END;
IMPRESION; READLN;
END.

43 MATPROPA Multiplica matrices cargadas con nmeros aleatorios, el programa utiliza


procedimientos con parmetros.

PROGRAM MATPROPA;
USES CRT;
TYPE
MATRIZ=ARRAY[1..20,1..20] OF INTEGER;
VAR
I,J,K,F,CF,C: INTEGER;
A,B,P : MATRIZ;
procedure matrizab(fil,col:INTEGER;var mat:MATRIZ);
begin
FOR I:=1 TO FIL DO
FOR J:=1 TO COL DO
72 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

MAT[I,J]:=RANDOM(16)-8; end;
procedure producto;
begin
FOR K:=1 TO F DO
FOR I:=1 TO C DO
FOR J:=1 TO C DO
P[K,I] := P[K,I] + A[K,J]*B[J,I];
END;
procedure IMP (fila,columna:integer;mat:matriz);
begin
for I:= 1 to fila do
begin
for j:= 1 to columna do
write (mat[i,j]:6); writeln; end;
end;
begin
clrscr; randomize;
WRITE(FILAS DE A = );READLN(F);
WRITE(COLUMNAS DE A = FILAS DE B = );READLN(CF);
WRITE(COLUMNAS DE B = );READLN;
WRITELN(MATRIZ A);MATRIZAB(F,CF,A);IMP(F,CF,A);
WRITELN(MATRIZ B);MATRIZAB(CF,C,B);IMP(CF,C,B);
WRITELN(MATRIZ PRODUCTO);PRODUCTO;IMP(F,C,P);
READLN;
END.

44 MATAUMEN Genera una matriz N por N cargada con nmeros aleatorios y aumenta la
matriz identidad duplicando el nmero de columnas. Utiliza procedimientos.

PROGRAM MATAUMEN;
USES CRT;
TYPE
MATRIZ=ARRAY[1..100,1..100] OF REAL;
VAR
I,J,N: INTEGER;
A : MATRIZ;

procedure CARGAR;
begin
FOR I:=1 TO N DO
FOR J:=1 TO N DO
A[I,J]:=RANDOM(10);
end;

procedure AUMENTAR;
begin
FOR I:=1 TO N DO
FOR J:=1 TO N DO
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 73

IF I=J THEN A[I,J+N]:=1


ELSE A[I,J+N]:=0;
END;

procedure IMP(F,C:INTEGER);
begin
for I:= 1 to F do
begin
for j:= 1 to C do
write (' ',A[i,j]:4:4);
writeln;
end;
end;
begin
clrscr; randomize;
WRITE('DIMENSION DE LA MATRIZ = ');READLN(N);
WRITELN('MATRIZ ORIGINAL');CARGAR;IMP(N,N);
WRITELN('MATRIZ AUMENTADA');AUMENTAR;IMP(N,2*N);
READLN;
END.

Este programa produce la siguiente salida

45 SISTECUA

{RESUELVE SISTEMAS DE 3 ECUACIONES CON 3 INCOGNITAS}


USES CRT;
TYPE MATRIZ=ARRAY[1..20,1..20] OF REAL;
VAR
I,J,K,M,L,U,N,COL,SOL : INTEGER;
A :MATRIZ ;
B,C,AUX,AUX1,X,Y,Z : REAL;
PROCEDURE CARGARIMPRIMIR;
BEGIN
74 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

randomize;CLRSCR;
writeln ( Dimension de la matriz);readln(n);
WRITELN ( MATRIZ A);
FOR I:=1 TO N DO
BEGIN
FOR J:=1 TO N+1 DO
BEGIN
A[I,J]:=(RANDOM(10));WRITE(A[I,J]:4:0);
END;
WRITELN;
END;
END;
PROCEDURE PIVOTE;
BEGIN
WRITELN(PIVOTE);
COL:=COL+1; SOL:=SOL+1;K:=K+1;
WHILE (A[K,COL]<>1) AND (SOL<>n+1) DO
BEGIN
IF A[K,COL]<>0 THEN BEGIN
{PIVOTE UNITARIO}
AUX:=A[COL,COL];
FOR J:=1 TO N+1 DO
A[COL,J]:=A[COL,J]/AUX;
END ELSE BEGIN {CAMBIO DE FILAS DE LA MATRIZ} SOL:=SOL+1;
FOR J:= 1 TO N+1 DO
BEGIN
AUX1:=A[COL,J];
A[COL,J]:=A[SOL+1,J];
A[SOL+1,J]:=AUX1;
END;
END;
END;
END;
PROCEDURE IMPRESION;
BEGIN
FOR I:=1 TO N DO
BEGIN
FOR J:=1 TO N+1 DO
WRITE(A[I,J]:3:2, );
WRITELN;
END;
END;
PROCEDURE CEROS;
BEGIN
WRITELN(CEROS);
L:=L+1;
FOR I:=L+1 TO N DO BEGIN C:=A[I,L];
FOR J:=1 TO N+1 DO A[I,J]:=A[L,J]*C-A[I,J];
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 75

END;
END;
BEGIN
CARGARIMPRIMIR;
PIVOTE;CEROS;IMPRESION;
PIVOTE;CEROS;IMPRESION;
PIVOTE;CEROS;IMPRESION;
Z:=A[3,4]; WRITELN(Z=,Z:4:2);
Y:=A[2,4]-Z*A[2,3];WRITELN(Y=,Y:4:2);
X:=A[1,4]-Z*A[1,3]-Y*A[1,2]; WRITELN(X=,X:4:2);
READLN;
END. end.

46 MATTRISUP
{CONVIERTE LA MATRIZ AUMENTADA EN TRIANGULAR SUPERIOR}
PROGRAM TRIANGULARSUPERIOR;
USES CRT;
TYPE
MATRIZ=ARRAY[1..100,1..100] OF REAL;
VAR
DI,I,J,N,K,C,L: INTEGER;
A : MATRIZ;
AUX,D,B:REAL;
procedure CARGAR;
begin
FOR I:=1 TO N DO
FOR J:=1 TO N DO
A[I,J]:=RANDOM(10); end;
procedure AUMENTAR;
begin
FOR I:=1 TO N DO
FOR J:=1 TO N DO
IF I=J THEN A[I,J+N]:=1
ELSE A[I,J+N]:=0;
END;
PROCEDURE PIVOTE(I:INTEGER);
{BUSCA EL PIVOTE UNITARIO}
BEGIN
DI:=0; C:=1;
WHILE DI<N DO
BEGIN
IF A[I,I]=0 THEN BEGIN {CAMBIO DE FILAS}
FOR J:=1 TO 2*N DO
BEGIN AUX:=A[I,J]; A[I,J]:=A[I+C,J];A[I+C,J]:=AUX; END;
C:=C+1;DI:=DI+1;
76 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

END
ELSE BEGIN {FILA ENTRE A[I,I]}
D:=A[I,I];
FOR J:=1 TO 2*N DO A[I,J]:=A[I,J]/D;
DI:=N;
END;
END;
IF C>N THEN WRITELN(NO EXISTE INVERSA);
END;
PROCEDURE CERO(I:INTEGER);
{HALLA CEROS DEBAJO DELPIVOTE}
BEGIN
FOR K:=I+1 TO N DO
BEGIN
B:=A[K,I];
FOR J:=1 TO 2*N DO
A[K,J]:=A[I,J]*(-B)+A[K,J];
END;
END;
procedure IMP;
{IMPRIME LA MATRIZ AUMENTADA}
begin
for I:= 1 to N do
begin
for j:= 1 to 2*N do
write ( ,A[i,j]:4:4); writeln; end;
end;
begin
clrscr; randomize;
WRITE(DIMENSION DE LA MATRIZ = );READLN(N);
WRITELN(MATRIZ ORIGINAL);CARGAR;{A[1,1]:=0;A[2,1]:=0;A[3,1]:=0};IMP;
WRITELN(MATRIZ AUMENTADA);AUMENTAR;IMP;
FOR L:=1 TO N DO
BEGIN
WRITELN(PIVOTE);PIVOTE(L);IMP;
WRITELN(CERO);CERO(L);IMP;
END;
READLN;
END.

47 MATCEROS
{VUELVE CEROS LOS ELEMENTOS DE LA PRIMERA COLUMNA DE UNA MATRIZ}
{EL ELEMENTO PIVOTE SE CONVIERTE EN UNO} PROGRAM CEROS;
USES CRT;
TYPE
MATRIZ=ARRAY[1..100,1..100] OF REAL;
VAR
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 77

DI,I,J,K,N,C: INTEGER;
A : MATRIZ;
AUX,D,B:REAL;
procedure CARGAR;
begin
FOR I:=1 TO N DO
FOR J:=1 TO N DO
A[I,J]:=RANDOM(10); end;
procedure AUMENTAR;
begin
FOR I:=1 TO N DO
FOR J:=1 TO N DO
IF I=J THEN A[I,J+N]:=1
ELSE A[I,J+N]:=0;
END;
PROCEDURE PIVOTE;
BEGIN
DI:=0; C:=1; I:=1;
WHILE DI<N DO
BEGIN
IF A[I,I]=0 THEN BEGIN {CAMBIO DE FILAS}
FOR J:=1 TO 2*N DO
BEGIN AUX:=A[I,J]; A[I,J]:=A[I+C,J];A[I+C,J]:=AUX; END;
C:=C+1;DI:=DI+1;
END
ELSE BEGIN {FILA ENTRE A[I,I]}
D:=A[I,I];
FOR J:=1 TO 2*N DO A[I,J]:=A[I,J]/D;
DI:=N;
END;
END;
IF C>N THEN WRITELN(NO EXISTE INVERSA);
END;
PROCEDURE CERO;
BEGIN I:=1;
FOR K:=2 TO N DO
FOR J:=1 TO 2*N DO
BEGIN
B:=A[K,J];
A[K,J]:=A[I,J]*(-B)+A[K,J];
END;
END;
procedure IMP;
begin
for I:= 1 to N do
begin
for j:= 1 to 2*N do
78 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

write ( ,A[i,j]:4:4); writeln; end;


end;
begin
clrscr; randomize;
WRITE(DIMENSION DE LA MATRIZ = );READLN(N);
WRITELN(MATRIZ ORIGINAL);CARGAR;{A[1,1]:=0;A[2,1]:=0;A[3,1]:=0};IMP;
WRITELN(MATRIZ AUMENTADA);AUMENTAR;IMP;
WRITELN(PIVOTE);PIVOTE;IMP;
WRITELN(CERO);CERO;IMP;
READLN;
END.

48 MATPIVOTE Busca el pivote unitario en una matriz

PROGRAM PIVOTEAR;
USES CRT;
TYPE
MATRIZ=ARRAY[1..100,1..100] OF REAL;
VAR
DI,I,J,N,K,C,F: INTEGER;
A: MATRIZ;
AUX,D,B:REAL;
procedure CARGAR;
begin
FOR I:=1 TO N DO
FOR J:=1 TO N DO
A[I,J]:=RANDOM(10); end;

procedure AUMENTAR;
begin
FOR I:=1 TO N DO
FOR J:=1 TO N DO
IF I=J THEN A[I,J+N]:=1
ELSE A[I,J+N]:=0;
END;
PROCEDURE PIVOTE;
BEGIN
DI:=0; C:=1;
WHILE DI<N DO
BEGIN
IF A[F,F]=0 THEN BEGIN {CAMBIO DE FILAS}
FOR J:=1 TO 2*N DO
BEGIN AUX:=A[F,J]; A[F,J]:=A[F+C,J];A[F+C,J]:=AUX; END;
C:=C+1;DI:=DI+1;
END
ELSE BEGIN {FILA ENTRE A[F,F]}
D:=A[F,F];
FOR J:=1 TO 2*N DO A[F,J]:=A[F,J]/D;
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 79

DI:=N;
END;
END;
IF C>N THEN WRITELN(NO EXISTE INVERSA);
END;
PROCEDURE CERO;
BEGIN
FOR K:=F+1 TO N DO
BEGIN
B:=A[K,F];
FOR J:=1 TO 2*N DO
A[K,J]:=A[F,J]*(-B)+A[K,J];
END;
END;
procedure IMP;
begin
for I:= 1 to N do
begin
for j:= 1 to 2*N do
write ( ,A[i,j]:4:4); writeln; end;
end;
begin
clrscr; randomize;
WRITE(DIMENSION DE LA MATRIZ = );READLN(N);
WRITELN(MATRIZ ORIGINAL);CARGAR;{A[1,1]:=0;A[2,1]:=0;A[3,1]:=0};IMP;
WRITELN(MATRIZ AUMENTADA);AUMENTAR;IMP;
FOR F:=1 TO N-1 DO
BEGIN
WRITELN(PIVOTE);PIVOTE;IMP;
WRITELN(CERO);CERO;IMP;
END;
{F:=F+1;
WRITELN} READLN;
END.

49 MATINTERIOR Posibilita imprimir una matriz cuyos valores se incrementan hacia la parte
interna de la matriz

{imprime matriz con valores crecientes hacia el centro}


program matcrein;
uses crt;
type
matriz=array[1..20,1..20]of integer;
var
i,j,n,c:integer;
a:matriz;
begin
clrscr;
80 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

write('dimension menor a 7 = ');readln(n);


for i:=1 to n do
begin
for j:=1 to n do
begin
if (i=1)or(i=n)or(j=1)or(j=n)
then begin
a[i,j]:=1;write(a[i,j]:3)
end
else
if(i=2)or(i=n-1)or(j=2)or(j=n-1)
then begin
a[i,j]:=2;write(a[i,j]:3);
end
else
begin
a[i,j]:=3;write(a[i,j]:3);
end;
end;
writeln;
end;
readln;
end.

50 SUMMATDI

{CARGA Y SUMA MATRICES DIAGONALES}


PROGRAM SUMADIAG;
TYPE
MATRIZ=ARRAY[1..20,1..20] OF INTEGER;
VAR
I,J,N:INTEGER;
A,B,S:MATRIZ;
PROCEDURE CARGAR;
BEGIN
FOR I:=1 TO N DO
FOR J:=1 TO N DO
BEGIN
IF I=J THEN A[I,J]:=1
ELSE A[I,J]:=0;
IF I+J=N+1 THEN B[I,J]:=1
ELSE B[I,J]:=0;
END;
END;
PROCEDURE IMPRIMIR(MAT:MATRIZ);
BEGIN
FOR I:=1 TO N DO
BEGIN
FOR J:=1 TO N DO
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 81

WRITE(MAT[I,J]:2);
WRITELN;
END;
END;
PROCEDURE SUMA;
BEGIN
FOR I:=1 TO N DO
FOR J:=1 TO N DO
S[I,J]:=A[I,J]+B[I,J];
END;
BEGIN
WRITE(DIMENSION DE LA MATRIZ=);READLN(N);
CARGAR;
IMPRIMIR(A);WRITELN;
IMPRIMIR(B);WRITELN;
SUMA;IMPRIMIR(S);
READLN;
END.

51 MATRIZ INVERSA Halla la inversa de una matriz cargada con nmeros aleatorios y
verifica el resultado mediante el producto de la matriz original por la inversa.

{ENCUENTRA LA MATRIZ INVERSA}


PROGRAM INVERSA;
USES CRT;
TYPE
MATRIZ=ARRAY[1..20,1..20] OF REAL;
VAR
DI,I,J,K,N,C,L,N1: INTEGER;
A,Y,P,M:MATRIZ;
AUX,D,B:REAL; CARGAR
R
procedure CARGAR; I=1 N
begin
FOR I:=1 TO N DO
J=1 N
FOR J:=1 TO N DO
BEGIN
A[I,J] = RANDOM(10)
A[I,J]:=RANDOM(10);M[I,J]:=A[I,J]; M[I,J] = A[I,J]
END;
end;
J
procedure AUMENTAR;
begin
I
FOR I:=1 TO N DO
FOR J:=1 TO N DO
IF I=J THEN A[I,J+N]:=1 FIN
ELSE A[I,J+N]:=0;
END;
PIVOTE

DI=L ; C=1 ; I=L


82 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

AUMENTAR

I=1 N

J=1 N

I=J A[I,J+N] = 0
no
si
A[I,J+N] = 1

FIN

PROCEDURE PIVOTE;
BEGIN
DI:=L-1; C:=1; I:=L;
WHILE DI<N DO
BEGIN
IF A[I,I]=0 THEN BEGIN {CAMBIO DE FILAS}
FOR J:=1 TO 2*N DO
BEGIN AUX:=A[I,J];
A[I,J]:=A[I+C,J];
A[I+C,J]:=AUX;
END;
C:=C+1; DI:=DI+1;
END

ELSE BEGIN {FILA ENTRE A[I,I]}


D:=A[I,I];
FOR J:=1 TO 2*N DO
A[I,J]:=A[I,J]/D;
DI:=N;
END;
END;
IF DI>N THEN WRITELN('NO EXISTE INVERSA');
END;

PROCEDURE CERO;
BEGIN
I:=L;
FOR K:=L+1 TO N DO
BEGIN
B:=A[K,L]; CERO

I=L

K=L+1 N
INTRODUCCIN A LA COMPUTACIN MAT 1104 . 83

FOR J:=1 TO 2*N DO


A[K,J]:=A[I,J]*(-B)+A[K,J];
END;
END;

procedure IMP(MAT:MATRIZ);
begin
for I:= 1 to N do
begin
for j:= 1 to N do
write (' ',MAT[i,j]:4:3);
writeln;
end;
end;

PROCEDURE CEROSARRIBA;
BEGIN
FOR I:=N1-1 DOWNTO 1 DO
BEGIN
B:=A[I,N1];
FOR J:=1 TO 2*N DO CEROSARRIBA
A[I,J]:=A[I,J]+(-B)*A[N1,J];
END;
N1:=N1-1 I=N1-1 1

END;
B=A[I,N1]
PROCEDURE INVERSA;
BEGIN J=1 2 N
FOR I:=1 TO N DO
FOR J:=1 TO N DO A[I,J]=A[I,J]*(-B)+A[N1,J]
Y[I,J]:=A[I,J+N];
END;
J
PROCEDURE VERIFICACION;
BEGIN
FOR K:=1 TO N DO NI = N1-1
FOR I:=1 TO N DO
FOR J:=1 TO N DO I
P[K,I]:= P[K,I]+M[K,J]*Y[J,I];
END; FIN
begin
clrscr; randomize;
WRITE('DIMENSION DE LA MATRIZ = ');READLN(N);
WRITELN('MATRIZ ORIGINAL');CARGAR;IMP(A);{A[1,1]:=0;A[2,1]:=0;A[3,1]:=0;}
AUMENTAR;
FOR L:=1 TO N DO
BEGIN
PIVOTE;
CERO;
END;
84 INTRODUCCIN A LA COMPUTACIN MAT 1104 .

N1:=N;
FOR L:=1 TO N-1 DO
CEROSARRIBA;
WRITELN('MATRIZ INVERSA');INVERSA;IMP(Y);
WRITELN('VERIFICACION');VERIFICACION;IMP(P);
READLN; VERIFICACION
END.
K=1 N
INVERSA
I=1 N
I=1 N
J=1 N
J=1 N
P[K,I]:= P[K,I]+M[K,J]*Y[J,I];
Y[I,J] = A[I,J+N]

J
J INICIO
I
I N
K
FIN CARGAR
IMP FIN
AUMENTAR

L=1 N

PIVOTE
CERO

N1 = N

L=1 N-1

CEROSARRIBA
INVERSA;IMP
VERIFICACION; IMP FIN
L

You might also like