(* FOR_01.PAS Lazo for con variable de control de tipo char ...

var Car : char;. Col : integer;. Fila : integer; begin (* main *) clrscr; highvideo; Col:=20; Fila:=1; for Car:='A' to 'W' do writeln(Car:3,ord(Car):5); for Car:='a' to 'w' do ...
143KB Größe 8 Downloads 69 vistas
(* FOR_01.PAS Lazo for con variable de control de tipo char. Determinar los valores ASCII's de las letras mayusculas, de las letras minusculas y de los valores numeros y mostralos en pantalla. NOTA: Aqui se muestra que la variable de control puede muy bien ser utilizada en operacions de procesamiento, pero sin cambiarle nunca su valor intrinseco. ---------------------------------------------------------- *) uses crt; var Car Col Fila

: char; : integer; : integer;

begin (* main *) clrscr; highvideo; Col:=20; Fila:=1; for Car:='A' to 'W' do writeln(Car:3,ord(Car):5); for Car:='a' to 'w' do begin gotoxy(Col,Fila+(ord(Car)-ord('a'))); write(Car,ord(Car):5); end; Col:=Col+20; for Car:='0' to '9' do begin gotoxy(Col,Fila+(ord(Car)-ord('0'))); write(Car,ord(Car):5); end; readkey; end.

(* FOR_2.PAS Calcular y mostrar el seno de angulos comprendidos entre 1 y 90 grados pero con un paso de 5. NOTA: Esta es una forma de cambiar el paso de un lazo for mediante un artificio. --------------------------------------------------------------- *) uses crt; const Krad var Fi Alfa SenoAlfa

= : : :

PI/180; integer; integer; double;

begin (* m ain *) clrscr; highvideo; for Fi:=1 to 18 do begin if(Fi=0)then Alfa:=Fi else Alfa:=Fi*5; SenoAlfa:=sin(Alfa*Krad); writeln(Alfa:10,SenoAlfa:10:3); end; readkey; end.

(* FOR_03.PAS Tomar valores no convencionales para la variable de control de un lazo for. --------------------------------------------------------------- *) uses crt; var

i : integer; Linf : integer; Lsup : integer;

begin (* main *) clrscr; highvideo; Linf:=-10; Lsup:=10; for i:=Linf to Lsup do writeln(i:10); readkey; end.

(* CASE_01.PAS Desarrollar un codigo que permita ingresar un digito entre 0 y 9 y lo convierta en su equivalente literal. Por ejemplo: 2 --> DOS NOTA: Se anima a hacer modificaciones en el programa de manera que ahora tabaje con valores entre 0 y 100? --------------------------------------------------------------- *) uses crt; var

N : integer;

begin (* main *) clrscr; highvideo; N:=8; case N of 0 1 2 3 4 5 6 7 8 9

: : : : : : : : : :

writeln(' writeln(' writeln(' writeln(' writeln(' writeln(' writeln(' writeln(' writeln(' writeln('

end; readkey; end.

CERO'); UNO'); DOS'); TRES'); CUATRO'); CINCO'); SEIS'); SIETE'); OCHO'); NUEVE');

(* CASE_02.PAS Mejorar el programa anterior de manera que ahora pueda descomponer un numero entero de cualquier magnitud (longint). ---------------------------------------------------------------- *) uses crt; var N Naux Dig Fact Ndigs i

: : : : : :

longint; longint; integer; longint; integer; integer;

begin (* main *) clrscr; highvideo; N:=7354268; (* --- determina cantidad de digitos de N --- *) Naux:=N; Ndigs:=0; repeat Ndigs:=Ndigs+1; Naux:=Naux DIV 10; until(Naux0) do begin Dig:=N DIV Fact; case Dig of 0 : writeln(' CERO'); 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; N:=N-(N DIV Fact)*Fact; Fact:=Fact DIV 10; end; readkey; end.

(* CASE_03.PAS El siguiente programa ingresara por teclado 10 caracteres y detectara si son vocales, almacenando la cantidad de repeticiones con que salieron. Mostrar estos valores en pantalla. ---------------------------------------------------------------- *) uses crt; var Car Voc_A Voc_E Voc_I Voc_O Voc_U i

: : : : : : :

char; integer; integer; integer; integer; integer; integer;

begin (* main *) clrscr; highvideo; Voc_A:=0; Voc_E:=0; Voc_I:=0; Voc_O:=0; Voc_U:=0; for i:=1 to 10 do begin Car:=readkey; writeln(' ',Car); case Car of 'a','A' 'e','E' 'i','I' 'o','O' 'u','U'

: : : : :

Voc_A:=Voc_A+1; Voc_E:=Voc_E+1; Voc_I:=Voc_I+1; Voc_O:=Voc_O+1; Voc_U:=Voc_U+1;

end; end; writeln('-----------------'); writeln(' Voc_A : ',Voc_A); writeln(' Voc_E : ',Voc_E);

writeln(' Voc_I : ',Voc_I); writeln(' Voc_O : ',Voc_O); writeln(' Voc_U : ',Voc_U); readkey; end. (* CASE_04.PAS Ponderar una nota de examen segun la escala tradicional. Para ello generar 20 notas aleatorias entre 0 y 10. ------------------------------------------------------- *) uses crt; var Nota : integer; i : integer; begin (* main *) clrscr; highvideo; for i:=1 to 20 do begin Nota:=random(11); write(' ',Nota); case Nota of 0..3 4..5 6..7 8..9 10 end; end; readkey; end.

: : : : :

writeln(' writeln(' writeln(' writeln(' writeln('

APLAZADO'); SUFICIENTE'); BUENO'); DISTINGUIDO'); SOBRESALIENTE');

(* ---------------------------------------------------------------Este programa carga aleatoriamente un vector de enteros con valores comprendidos entre y 99 y lo muestra por pantalla. A continuacion lleva todos los pares al comienzo del vector y los impares al final. Vuelta a mostrarlo por pantalla. --------------------------------------------------------------- *) uses crt; const DIM = 20; type TVect = array[1..DIM]of integer; var

V i,j Aux

: TVect; : integer; : integer;

begin (* main *) clrscr; highvideo; randomize; for i:=1 to DIM do begin V[i]:=10+random(90); write(V[i]:3); end; writeln; i:=1; j:=2; repeat if(V[i] MOD 2=0)then begin i:=i+1; j:=i+1; end else if(V[j] MOD 2=0)then begin Aux:=V[i]; V[i]:=V[j]; V[j]:=Aux; i:=i+1; j:=i+1; end else j:=j+1; until ((i=DIM-1) OR (j=DIM)); for i:=1 to DIM do write(V[i]:3); readkey; end.

(* VECT_0.PAS Cargar aleatoriamente dos vectores de enteros con valores comprendidos entre 10 y 99 y mostrarlos por pantalla. A continuacion reemplazar (en la medidad de lo posible) los valores impares del primer vector con los pares del segundo. Mostrar nuevamente los vectores ya reacomodados. ------------------------------------------------------------- *) uses crt; const DIM = 10; type TVect = array[1..DIM]of integer; var V1,V2 : TVect; i,j : integer; Aux : integer; Col,Fila : integer; begin (* main *) clrscr; highvideo; randomize; Col:=20; Fila:=1; for i:=1 to DIM do begin V1[i]:=10+random(90); V2[i]:=10+random(90); writeln(V1[i]:5,V2[i]:5); end; i:=1; j:=1; writeln; repeat if(V1[i] MOD 2 =0)then begin i:=i+1; end else begin if(V2[j] MOD 2=0)then begin Aux:=V1[i]; V1[i]:=V2[j]; V2[j]:=Aux; i:=i+1; j:=j+1; end else j:=j+1; end; until ((i>DIM) OR (j>DIM)); for i:=1 to DIM do begin gotoxy(Col,Fila+i-1); writeln(V1[i],V2[i]:5); end; readkey; end.

(* VECT_3.PAS Declarar dos vectores de enteros, V1[ ] y V2[ ] de 20 dom. c/u Asignar el primero con valores aleatorios en el rango 10..99 y mostrar por pantalla. A medida que se vaya asignando detectar valores menores o iguales a 50 y replicarlos en el otro vector (V2) Fianalmente mostrar (a la par del primero) los valores almacenados en V2[ ]. ---------------------------------------------------------------- *) uses crt; const DIM = 20; type TVect = array[1..DIM]of integer; var

V1,V2 i,j Col Fila

: : : :

TVect; integer; integer; integer;

begin (* main *) clrscr; highvideo; randomize; j:=0; Col:=20; Fila:=1; for i:=1 to DIM do V2[i]:=0; for i:=1 to DIM do begin V1[i]:=10+random(90); writeln(V1[i]:10); if(V1[i]p)do begin Aux:=VD[p]; VD[p]:=VD[k]; VD[k]:=Aux; k:=k-1; p:=p+1; end; for p:=1 to i do write(VD[p]:3); readkey; end.

(* --- VECT_9.PAS Dado un entero N, invertirlo de manera que sus digitos queden exactamente al reves. ---------------------------------------------------------- *) uses crt; const DIM type TVect

= 12; = array[1..DIM]of integer;

var

: : : : : :

VD N NI Aux Pot i,p,k

TVect; longint; longint; longint; longint; integer;

(* --- numero invertido --- *)

begin (* main *) clrscr; highvideo; N:=47521896; i:=0; Pot:=1; NI:=0; writeln(' N =',N); while(N>0)do begin i:=i+1; VD[i]:=N MOD 10; N:=N DIV 10; end; for p:=i downto 1 do begin NI:=NI+VD[p]*Pot; Pot:=Pot*10; end; writeln(' NI=',NI); readkey; end.

(* VECT_10.PAS Dado una magnitud numerica en forma de un arreglo de char, convertirlo en su equivalente numerico. --------------------------------------------------------------- *) uses crt; const DIM = 12; type TVect = array[1..DIM]of char; var

NCh N Fact i,k

: : : :

TVect; longint; longint; integer;

begin (* main *) clrscr; highvideo; Fact:=1; N:=0; for i:=1 to DIM do NCh[i]:='-'; NCh[1]:='3'; NCh[2]:='1'; NCh[3]:='2'; NCh[4]:='4'; NCh[5]:='7'; NCh[6]:='6'; NCh[7]:='5'; k:=1; while(NCh[k]'-') do k:=k+1; k:=k-1; for i:=k downto 1 do begin N:=N+(ord(NCh[i])-ord('0'))*Fact; Fact:=Fact*10; end; writeln(' N = ',N); readkey; end.

(* VECT_11.PAS Una matriz de enteros de 10x15 debe ser asignada con valores aleatorios en el rango 10..99 y mostrada por pantalla. A continuacion debera extraer valores entre 10..30, y entre 60..90 y almacenarlos en sendos vectores. Tambien estos vectores seran mostrados un poco debajo de la matriz. ------------------------------------------------------------- *) uses crt; const DIM1 DIM2 DIM3 type TMat TVect var

= = = = =

10; 15; 50; array[1..DIM1,1..DIM2]of integer; array[1..DIM3]of integer;

M : TMat; V1,V2 : TVect; i,j,k,p : integer;

begin (* main *) clrscr; highvideo; randomize; for i:=1 to DIM3 do begin V1[i]:=0; V2[i]:=0; end; k:=0; p:=0; for i:=1 to DIM1 do begin for j:=1 to DIM2 do begin M[i,j]:=10+random(90); write(M[i,j]:3); if((M[i,j]>=10) AND (M[i,j]=60) AND (M[i,j]DIM)then i_act:=1; j_act:=j_act-1; if(j_actSumFilMax)then SumFilMax:=SumFil; end; writeln; writeln; writeln(' SumFilMax = ',SumFilMax); readkey; end.

(* MAT_05.PAS Dos matrices de enteros de 10x10 deben inicializarse con ceros. A continuacion se rellenaran solo la mitad de cada una (con coordenadas aleatorias) con valores tambien aleatorios en el rango 10..99. Ambas matrices deberan ser mostradas por pantalla. Luego se detectaran coincidencias de domicilios que simultaneamente (y en coordenadas homonimas) contenga un valor distinto de cero. Esos domiclios se indicaran en pantalla. ------------------------------------------------------------- *) uses crt; const DIM1 DIM2

= 10; = 10;

type

TMat

= array[1..DIM1,1..DIM2]of integer;

var

M1,M2 i,j,k Col1 Col2 Fila

: : : : :

TMat; integer; integer; integer; integer;

begin (* main *) clrscr; highvideo; randomize; textcolor(WHITE); Col1:=2; Col2:=40; Fila:=1; (* --- inicializa ambas matrices con ceros --- *) for i:=1 to DIM1 do for j:=1 to DIM2 do begin M1[i,j]:=0; M2[i,j]:=0; end; (* --- carga domicilios aleatorios en ambas matrices --- *) for k:=1 to DIM1*DIM2 DIV 2 do begin repeat i:=1+random(DIM1); j:=1+random(DIM2); until(M1[i,j]=0); M1[i,j]:=10+random(90);

repeat i:=1+random(DIM1); j:=1+random(DIM2); until(M2[i,j]=0); M2[i,j]:=10+random(90); end; (* --- muestra ambas matrices ---------------------------- *) for i:=1 to DIM1 do for j:=1 to DIM2 do begin gotoxy(Col1+(j-1)*3,Fila+i); if(M1[i,j]=0)then textcolor(LIGHTRED) else textcolor(WHITE); write(M1[i,j]); gotoxy(Col2+(j-1)*3,Fila+i); if(M2[i,j]=0)then textcolor(LIGHTRED) else textcolor(WHITE); write(M2[i,j]); end; writeln; writeln; textcolor(YELLOW); (* --- detecta coincidencias de valores de 0 --- *) for i:=1 to DIM1 do for j:=1 to DIM2 do if(M1[i,j]*M2[i,j]0)then begin writeln(' (',i,':',j,')'); if(readkey=chr(27))then halt; end; readkey; end.

(* MAT_06.PAS Una matriz de enteros de 5x8 debe ser asignada aleatoriamente con valores dentro del rango 10..99 y mostrada por pantalla. A continuacion dicha matriz debe ser linealizada a traves de un vector el cual sera mostrado por pantalla una vez cargado. -------------------------------------------------------------- *) uses crt; const DIM1 DIM2 DIM3

= 5; = 8; = DIM1*DIM2;

type

TMat = array[1..DIM1,1..DIM2]of integer; TVect = array[1..DIM3]of integer;

var

M : TMat; V : TVect; i,j,k : integer;

begin (* main *) clrscr; highvideo; randomize; k:=0; for i:=1 to DIM1 do begin for j:=1 to DIM2 do begin M[i,j]:=10+random(90); write(M[i,j]:3); end; writeln; end; writeln; writeln; for i:=1 to DIM1 do begin for j:=1 to DIM2 do begin k:=(i-1)*DIM2+j; V[k]:=M[i,j]; write(V[k]:3); end; end; readkey; end.