Upload
others
View
13
Download
1
Embed Size (px)
Citation preview
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 41
CAPÍTULO VI
PROGRAMAS EN TURBO PASCAL
Para tener un mejor aprovechamiento de los programas se sugiere transcribirlos y ejecutarlos en
Turbo Pascal
6.1 PROGRAMAS BÁSICOS
1 MAYOR Programa que encuentra el mayor de tres números enteros introducidos por teclado
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 raíces reales de una ecuación de segundo grado
program segundogrado;
var
A,B,C,X1,X2,D:REAL;{DECLARA X, Y, Z COMO VARIABLES REALES}
BEGIN
WRITELN;
INICIO
si
no C=
A > B
no
A ES MAYOR
FIN
A,B,C
si
no C=
A > C
C ES MAYOR
si
no C=
B > C
C ES MAYOR
B ES MAYOR
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 42
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.
3 MAYOR2 Programa que permite hallar el mayor de tres números utilizando el operador AND
trabaja cuando los números introducidos son iguales, asignando la condición 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.
INICIO
A,B,C
si
no C=
D >= 0
RAICES X1, X2
MAYOR
FIN
Raices Imaginarias
D = BB-4AC
X1 = (-B + SQRT(D))/2A
X2 = (-B – SQRT(D)/2A
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 43
4 MEDIO Programa que permite encontrar el valor intermedio de tres números enteros
introducidos por teclado, este programa se resuelve de manera más 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.
INICIO
si
no
A>=B and A>=C
no
A ES MAYOR
FIN
A,B,C
si
no
B>=A and B>=C B ES MAYOR
si
no
C>=B and C>=A C ES MAYOR
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 44
INICIO
I = 1 → N
I*M
I
FIN
S
N, M
S = S + M * I
6.2 PROGRAMAS CON SERIES
5 SERIE1 Permite sumar una serie de N términos, múltiplos de M
{SUMA N MULTIPLOS DE M}
PROGRAM SERIE1;
VAR
I,N,M:INTEGER;
S:LONGINT;
BEGIN
WRITE('INGRESE NUMERO DE TERMINOS=');READLN(N);
WRITE('INGRESE MULTIPLO=');READLN(M);
FOR I:=1 TO N DO
BEGIN
S:=S+I*M;
WRITE(I*M,'+');
si
no
C >A and A > B
INICIO
FIN
A,B,C
si
no
A > C and C > B
si
no
A>B and B< C
no
B ES INTERME
si
no
C >B and B > A B ES INTERME
C ES INTERME
si
no
B > C and C > A
no
C ES INTERME
si
no
B >A and A > C A ES INTERME
C ES MAYOR
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 45
END;
WRITELN;
WRITELN('LA SUMA ES=',S);
READLN;
END.
6 SERIE2
{SUMA FRACCIONES DECIMALES ENTRE 0 Y 3}
PROGRAM SERIE2;
USES CRT;
VAR
I:INTEGER;
S,FD:REAL;
BEGIN
CLRSCR;
FOR I:=1 TO 30 DO
BEGIN
S:=S+I/10;
FD:=I/10;
WRITE(FD:1:1,'+');
END;
WRITELN;
WRITELN('LA SUMA ES=',S:3:3);
READLN;
END.
7 SERIE4 Permite sumar una serie de la forma
N.......45
97
34
98
23
99
12
100
{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.
INICIO
I = 1 → 30
FD
I
FIN
S
S = S + I/10
FD = I / 10
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 46
8 SERIE5 Este programa permite determinar cuantos números de la siguiente serie
.........4
1
3
1
2
11
deben sumarse para que dicha suma sea menor o igual a cuatro
PROGRAM SERIE5;
VAR
I:INTEGER;
S:REAL;
BEGIN
I:=1;WRITE('1+');
WHILE S<=4 DO
BEGIN
S:=S+1/I;
IF S<=4 THEN WRITE('(1/',I,')+');
I:=I+1;
END;
WRITELN;WRITELN('S=',S-(1/I):2:4);
WRITELN('NUMERO DE TERMINOS=',I-1);
READLN;
END.
9 SERIE6 Este programa permite hallar la suma de n términos de la serie
N.........711
3
59
2
37
1 222
{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.
INICIO
‘1+’
I
FIN
no
si S >=4
S = S + 1/I
I = 1
I +
S, I
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 47
10 SERIE7 Permite hallar la suma de N términos de la serie
N........4
!3
3
!2
2
!1
donde el numerador corresponde al factorial de cada uno de los números
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 términos
1 1 1 3 5 9 17………N
La serie tiene los 3 primeros valores igual a 1 y cada término 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.
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 48
12 SERIE9 Suma la siguiente serie de N términos
N.......8
27
6
9
4
3
2
1
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 números primos menores a 10000, el
algoritmo ha sido mejorado, admitiendo que un número es primo si no admite división entera
hasta que es dividido por su raíz cuadrada, el programa, también elimina el análisis de todos los
números 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.
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 49
14 SERIEFIBBONACCI Este programa suma e imprime N términos 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 términos de la serie
N.......6
10
5
8
4
6
3
4
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.
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 50
6.3 PROGRAMAS CON CICLOS
16 ADIVIFOR Programa que permite al usuario adivinar un número aleatorio generado por el
computador comprendido entre 0 y 100, utiliza la sentencia for y el comando break
{permite adivinar un número 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;
si
no C=
k < >n
grande
no
si
k < n chico
I = 1 → 6
I
no
si
k = n fallaste
acertaste
FIN
INICIO
N
C=I
k=random(100))
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 51
if k=n then writeln(‘Bien campeonazo, acertaste en ‘,c,’ intentos’)
else writeln (‘Fallaste cabezón, el número 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
{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')
no
INICIO
K=random(100))
I
si
no C=
k < >n
grande
no
si
k < n chico
si k <> n fallaste
acertaste
FIN
N
no
si
I = 6
I = I + 1
I = 6
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 52
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 cabezón, el número era ', k);
READKEY;{permite salir de la pantalla de ejecución presionando una tecla}
end.
18 DETERMINANTE Permite hallar el determinante de una matriz cargada con numeros
aleatorios de dimensión 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 múltiplos 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;
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 53
WRITE(‘SUMAREMOS MÚLTIPLOS 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 NÚMEROS PRIMOS
20 PRIMOS Este programa para encontrar un número 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
{GENERA E IMPRIME N NUMEROS PRIMOS}
PROGRAM PRIMOS;
VAR
I,NP,P,N,DP:INTEGER;
BEGIN
INICIO
N = 1000
si
no
I
NINT
I
N
N > B
DP = DP + 1
I
I=1 → N
si
no
DP =2 CP = CP + 1
si
no N>2000
FIN
N = N + 1 ; DP = 0
CP
N
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 54
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 números 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;
INTRODUCCIÓN A LA COMPUTACIÓN 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.
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 56
25 FRAC10A8 Permite transformar una fracción 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 efectúa la transformación de una fracción de base 8 a base 10
{transforma una fracción 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.
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 57
6.6 PROGRAMAS DIVERSOS
27 VALORPI Para estimar el valor de Pi consideremos
el área de un cuarto de círculo de radio 1 inscrito en
un cuadrado de lado 1, como el siguiente:
Si generamos miles de puntos y contamos los que
se encuentren dentro el cuarto de circulo, la totalidad
de los mismos en relación al total representarán el
área del cuarto de círculo, al multiplicar este valor
por cuatro se tiene el área del circulo de radio uno
que es igual a Pi
{permite aproximar el valor de pi}
{metodo de probabilidad}
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;
INICIO
I=1 → 10
4C/100000
J
C1/10
J=1 → 100000
X = random(10000)/10000
Y = random(10000)/10000
no
si Y>=√(1-x*x)
C1=C1+(4*C/1000)
C=C+1
C = 0
I FIN
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 58
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 impresión
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 impresión en el punto deseado mediante gotoxy lo cual permite
ubicar el cabezal de impresión 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
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 59
6.7 APLICACIONES DE CASE
30 LEEDIG Dado un dígito 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.
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 60
31 LEE99 Lee números 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’);
INICIO
N
N
9 8 7 6 5 4 3 2 1 0 CERO
UNO
DOS
TRES
CUATRO
CINCO
SEIS
SIETE
OCHO
NUEVE
FIN
INTRODUCCIÓN A LA COMPUTACIÓN 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 números 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 ‘);
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 62
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.
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 63
5.8 PROGRAMAS DE ORDENACIÓN (VECTORES)
33 BURBUJA Ordena una lista en orden creciente (o decreciente) por el método 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
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 64
INICIO
I=1 → 5
A[I,J]
J
FIN
J=1 → 5
M = 4
A[I,J] = M
4
M = M + 1
J
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 múltiplos de cuatro por filas
{CARGA MATRIZ COM MULTIPLOS DE 4}
PROGRAM MATRIZ1;
TYPE
MATRIZ=ARRAY[1..100,1..100] OF INTEGER;
VAR
I,J,M:INTEGER;
A:MATRIZ;
BEGIN M:=4;
FOR I:=1 TO 5 DO
BEGIN
FOR J:=1 TO 5 DO
BEGIN
A[I,J]:=M; WRITE(A[I,J]:4); M:=M+4;
END;
WRITELN;
END;
READLN;
END.
Este programa genera la siguiente impresión
4 8 12 16 20
24 28 32 36 40
44 48 52 56 60
64 68 72 76 80
84 88 92 96 100
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 65
36 MATONCOL Carga e imprime una matriz ondulada por columnas con números naturales
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
INICIO
J=1 → 5
FIN
M = 4
I
I=5 → 1
A[I,J] = M
4
M = M + 1
J
I
J=1 → 5
A[I,J] = M
4
M = M + 1
no si J mod 2=0
J=1 → 5
I=1 → 5
A[I,J] J
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 66
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
término.
PROGRAM MATRIZ4;
TYPE
MATRIZ=ARRAY[1..20,1..20] OF INTEGER;
VAR
I,J,K,C,V,SIG,N:INTEGER;
A:MATRIZ;
BEGIN
INTRODUCCIÓN A LA COMPUTACIÓN 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 demás posiciones}
PROGRAM MATRIZEX;
TYPE
MATRIZ=ARRAY[1..100,1..100] OF INTEGER;
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 68
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 números fijos y la segunda cargada
con números 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;
INTRODUCCIÓN A LA COMPUTACIÓN 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 dimensión N por N ondulando en dirección 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
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 70
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 dimensión N por N con los primeros
números 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;
INTRODUCCIÓN A LA COMPUTACIÓN 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 números aleatorios, el programa utiliza
procedimientos con parámetros.
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
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 72
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 números aleatorios y aumenta la
matriz identidad duplicando el número 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
INTRODUCCIÓN A LA COMPUTACIÓN 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
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 74
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];
INTRODUCCIÓN A LA COMPUTACIÓN 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;
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 76
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
INTRODUCCIÓN A LA COMPUTACIÓN 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
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 78
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;
INTRODUCCIÓN A LA COMPUTACIÓN 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;
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 80
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
INTRODUCCIÓN A LA COMPUTACIÓN 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 números 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;
procedure CARGAR;
begin
FOR I:=1 TO N DO
FOR J:=1 TO N DO
BEGIN
A[I,J]:=RANDOM(10);M[I,J]:=A[I,J];
END;
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;
CARGAR
R
I=1 → N
J
FIN
J=1 → N
A[I,J] = RANDOM(10)
M[I,J] = A[I,J]
I
PIVOTE
DI=L ; C=1 ; I=L
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 82
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];
AUMENTAR
I=1 → N
J
FIN
J=1 → N
A[I,J+N] = 1
I
no
si
I = J A[I,J+N] = 0
CERO
K=L+1 → N
I = L
INTRODUCCIÓN A LA COMPUTACIÓN 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
A[I,J]:=A[I,J]+(-B)*A[N1,J];
END;
N1:=N1-1
END;
PROCEDURE INVERSA;
BEGIN
FOR I:=1 TO N DO
FOR J:=1 TO N DO
Y[I,J]:=A[I,J+N];
END;
PROCEDURE VERIFICACION;
BEGIN
FOR K:=1 TO N DO
FOR I:=1 TO N DO
FOR J:=1 TO N DO
P[K,I]:= P[K,I]+M[K,J]*Y[J,I];
END;
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;
CEROSARRIBA
I=N1-1 → 1
J
FIN
J=1 → 2 N
B=A[I,N1]
I
NI = N1-1
A[I,J]=A[I,J]*(-B)+A[N1,J]
INTRODUCCIÓN A LA COMPUTACIÓN MAT 1104 . 84
N1:=N;
FOR L:=1 TO N-1 DO
CEROSARRIBA;
WRITELN('MATRIZ INVERSA');INVERSA;IMP(Y);
WRITELN('VERIFICACION');VERIFICACION;IMP(P);
READLN;
END.
INVERSA
I=1 → N
J
FIN
J=1 → N
Y[I,J] = A[I,J+N]
I
VERIFICACION
I=1 → N
J
FIN
J=1 → N
P[K,I]:= P[K,I]+M[K,J]*Y[J,I];
I
K=1 → N
K
FIN
L=1 → N-1
INICIO
L=1 → N
L
CARGAR
IMP
AUMENTAR
L
N
PIVOTE
CERO
N1 = N
CEROSARRIBA INVERSA;IMP
VERIFICACION; IMP