Sunteți pe pagina 1din 73

Manual bsico de Turbo Pascal 7.

0 Este manual est hecho con la intencin de que aprendas el lenguaje pascal sin complicaciones ni gastar dinero en ello despus de aprender este lenguaje podrs aprender cualquier otro con facilidad si eres alguien con conocimientos de programacin se te facilitara el manejo de el lenguaje te recomiendo que pongas todos los cdigos aqu mostrados y que realices los ejercicios recomendados por tu cuenta primera mente y despus ver las soluciones del manual si tu programa funciona bien pero es diferente al del manual no te preocupes es normal en la programacin cada quien usa su lgica mientras el programa realice lo solicitado esta perfecto as que podrs ser tan creativo(a) como quieras si no logras resolver el problema a la primera no te preocupes en la programacin la mayora de las veces no se logran las cosas a la primera as que se paciente y buena suerte si tienes alguna duda o mejora sobre el manual escribe al correo: Ozmar_11@hotmail.com.

Capitulo 1. 1. Reglas bsicas del lenguaje. 1.1 estructura de programas las estructuras de los programas.
Son muy importantes ya que sin ellas no funcionan en pascal la estructura bsica es: program nombre_del_programa; uses libreras; var variable:tipo; begin cdigo_fuente; end. El cdigo fuente siempre debe ir limitado por un begin y un end al inicio y fin respectivamente el end que limita el cdigo fuente deber tener un . Ms adelante se especificara el por que.

1.2 Comandos bsicos del programa.


Para compilar un programa como comn mente se le conoce hacer que corra presiona ctrl+f9. program esta instruccin se pone en la parte superior del programa antes que nada para poner el nombre del programa o su funcin en el nombre o funcin del programa no pueden ir espacios en blanco por que se recomiendo poner guiones bajos en lugar de ellos (espacios en blanco) ejemplo de uso: Program Perimetro_de_triangulos; Clrscr (clear screen limpiar pantalla en espaol) esta instruccin borra lo escrito en la pantalla cuando se ejecuta el programa y llega a esta lnea de instruccin ejemplo de uso: clrscr; write la instruccin write se usa para escribir en la pantalla algn mensaje o texto en especifico tambin se usa la variante writeln que da un salto de lnea antes de imprimir el texto se ponen un parntesis y comillas simples para indicar que ese texto no cambiara es algo diferente con variables ejemplos de uso: Bsico solo texto:

Writeln(hola mundo , 30); Con variables: Cant = 20; Writeln(hola grupo,cant); textcolor() la funcin textcolor sirve para poner el texto de un color especifico en una seccin del programa pueden ponerse los colores por su nombre o su equivalente numrico e pascal ejemplo: Textcolor(pink); textcolor(1); Distincin de letras: en turbo pascal es lo mismo las letras en maysculas que en minsculasejemplo PROGRAM=program=PrOgRam. textbackground() funciona igual que el textcolor solo que esta funcin cambia el color del fondo pero no el del texto.

1.3 variables, tipos de variables y su declaracin.


Qu son las variables? Son valores que pueden cambiar durante la ejecucin del programa. Tipos de variables: los tipos de variables son el tipo de valor que contendrn las variables a continuacin pongo una tabla de las variables y su tipo en pascal estas son las ms utilizadas: Tipo variable. Rango. Descripcin. Char Carcter del cdigo ascii Almacena solo 1 carcter. Byte 0 a 255 Almacena 1 numero. Integer -32,768 a 32,767 Solo nmeros enteros. Real 1E-38 a 1E+38 Usa notacin cientfica. Boolean True False Valores: V F. Shortint -128 a 127 Solo enteros. Word 0 a 65,535 Almacena 1 valor. -2,147,483,648 a 214,748,364 Longint Solo nmeros enteros. String Cadena de 255 caracteres Hasta 255 caracteres. Declaracin de variables las variables de declaran despus de las bibliotecas usando la palabra reservada var despus de esa palabra reservada se pueden declarar las variables se declaran poniendo el nombre(s) de la(s) variables seguido de dos puntos : y el tipo de variables despus del tipo de variables se pone un ; como a cada instruccin ejemplo: Var nombre:string(255);

1.4 Libreras en pascal.


Las libreras en pascal se usan para poder utilizar instrucciones o palabras reservadas en especifico por ejemplo: para usar la instruccin clrscr se debe declarar la librera crt las libreras se declaran debajo el ttulo del programa y

bajo la palabra reservada uses como lo indique en el subtema 1.1 cabe indicar que en un programa en pascal se pueden utilizar ms de 1 librera a la vez a usaremos algunas de estas libreras a lo largo del manual pero no todas despus de terminar el manual sern capaces de aprender y usar las dems libreras por su cuenta. A continuacin pongo una tabla con las libreras que se usan en pascal: Librera. Crt Dos Graph Objects Math Printer Strings Baseunix System Funciones que permite.
Pantalla y teclado del PASCAL de Turbo que maneja la unidad. Interface Turbo Pascal MS-DOS. Unidad para manipular los grficos de la pantalla compatible con TP(turbo pascal). Objetos bsicos compatible con TP(turbo pascal). Rutinas adicionales matemticas ejemplo: sqrt (raz cuadrada). Provee de acceso a la impresora. Rutinas para el manejo de cadenas. Funcionalidad Bsica de Linux. Funciones para la manipulacin de archivos en Pascal

1.5 Funciones aritmticas en pascal.


Las funciones aritmticas en pascal ayudan desempeando una determinada tarea a continuacin pondr una tabla que muestre las funciones y sus tareas: Funcin. Sintaxis o modo de uso. Tarea a desempear. Div 5 div 2=2 Regresa el entero de la /. Mod 5 mod 2=5 Regresa el residuo en entero. abs Abs(-5)=5 Obtiene valor absoluto. trunc Trunc(7.5)=7 Trunca la parte decimal round Round(8.6)=9 Redondea al nmero mas cercano. sqrt Sqrt(9)=3 Obtiene raz cuadrada. sin Sin(30)=0.5 Funcin trigonomtrica seno. cos Cos(30)=0.866025403784438 Funcin trig. Coseno. tan Tan(30)=0.5 Funcin trig. Tangente. cot Cot(30)= 1.73205 Funcin trig. Cotangente. sec Sec(30)= 1.1547 Funcin trig. Secante. csc Csc(30)=2 Funcin trig. Cosecante. random Random(10)=numero al azar Toma nmeros al azar. Nota: en la funcin random puede usarse la instruccin randomize para que no repita valores.

1.6 Ejemplos programas con los conocimientos vistos hasta ahora, ejercicios recomendados para probar sus avances y posibles soluciones.
1.6.1 Ejemplos de los programas con los conocimientos vistos hasta ahora. Primer ejemplo: programa que calcule el permetro de una figura. program perimetro_de_figuras; uses crt; var lado,num_lados,perimetro : integer; {al poner ms de una variable del} begin ,mismo tipo puedes poner , entreclrscr; ,ellas y poniendo ,- se ponen comolado :=20; {comentarios lo que escribas dentros el compilador} num_lados :=4; {no lo tomara en cuenta} perimetro := lado * num_lados; write('el perimetro de la figura es :',perimetro); readln; end. Segundo ejemplo: programa que imprima hola mundo con asteriscos a los lados. program hola_mundo; uses crt; begin clrscr; writeln('*********'); writeln('*hola mundo*'); write('*********'); readln; end.

1.6.2

Ejercicios recomendados para probar su avance de conocimientos.

Ejercicio 1: crear un programa que imprima en pantalla un triangulo de asteriscos. Ejercicio 2: crear un programa que imprima tu nombre(s), apellido paterno, apellido materno y escuela separados por un rengln. 1.6.3 Posibles soluciones. Ejercicio 1: program triangulo_de_asteriscos; uses crt; begin clrscr; writeln(*); writeln(**); writeln(***); readln;{se pone esta ultimalinea para que puedas ver el programa cuando oprimas enter se quitara} end. Ejercicio 2: program Ejercicio_2; uses crt; begin clrscr; writeln('tu(s) nombres'); writeln('apellido paterno'); writeln('apellido materno'); writeln('nombre de tu escuela'); readkey; end.

1.7 Uso de la instruccin read, la variante readln y la variante readkey.


La instruccin read y su variante readln se usan para entrada de datos pueden ser desde el teclado o de programa a archivo por ahora veremos la primera funcin (entrada de datos desde el teclado) ms adelante usaremos la segunda

(de programa a archivos) ya que es ms compleja y sera muy difcil entenderla por ahora para el uso de la instruccin read y su variante readln se necesitan variables que almacenen los datos a manejar en el programa la variante readkey se usa para el mismo propsito que las instrucciones readln y read solo que con readkey toma solo 1 carcter a la vez a continuacin pongo un ejemplo: program para_calcular_edad; uses crt; var a :integer; begin clrscr; write('cuantos aos tienes?-->'); readln(a); write ('tienes',a,'aos'); readkey; end.

1.7.1
1.7.1.1

Ejercicios recomendados y posibles soluciones.


Ejercicios recomendados. Ejercicio 1: hacer un programa que eleve al cubo un numero. Ejercicio 2: hacer un programa que sume, reste, multiplique, y divida 2 nmeros dados por el usuario. Nota: cabe mencionar que las funciones matematicas bsica en turbo pascal se hacen con sus respectivos simbolos(+,-,*,/) ejemplo: 5*5=10, 5/5=1, 5+5=10 y 5-5=0 Posibles soluciones. Ejercicio 1: program programa_que_eleva_al_cubo_un_numero;{este es el nombre del programa} uses crt; var {estas son las variables que se usaran en el programa y su tipo de variable} a,b : integer; begin {inicio del programa} clrscr;{limpia la pantalla al correr el programa}

1.7.1.2

write('escribe un numero');{escribe ese texto en la pantalla de programa} readln(a);{lee el numero que da el usuario (la variante a)} b:=a*a*a;{es la formula para tener el valor de b} writeln('el resultado es',a,'es',a*a*a);{escribe ese texto y el resultado de b} readln; end.{fin del programa} Ejercicio 2: program dado_2_numeros_sumarlos_restarlos_multiplicarlos_dividirlos; uses crt; var{estas son las variables que se usaran durante el programa y su tipo de variable} a,b,c,d,e,f : real; begin{inicio del programa} clrscr;{limpia la pamtalla} writeln('escribe un numero');{escribe es texto en el programa} readln(a);{lee el primer numero entregado por el usuario(variante a)} writeln('escribe otro numero');{escribe ese texto en el programa} readln(b);{lee la segunda variante entragada por el usuario} c:=a+b;{es la formula para sacar el resultado de c} writeln('el resultado de la suma es',c);{escribe ese texto en la pantalla y el resultado de c} d:=a-b;{es la formula para sacar el valor de d} writeln('el resultado de la resta es',d);{escribe ese texto en la pantalla y el resultado de d} e:=a*b;{es la formula de e} writeln('el resultado de la multiplicasion es',e);{escribe ese texto en la pantalla y el resultado de e} f:=a/b;{es la formula de f} writeln('el resultado de la division es',f);{escribe ese texto en la pantalla y el resultado de f} readln; end.{fin del programa}

2. La instruccin gettime.
2.1 La instruccin gettime se usa para obtener la fecha y hora del sistema por lo tanto la hora y fecha que se usen en el programa sern las mismas que tenga su equipo en ese momento para usarla se deben usar el tipo de variables

Word adems de la librera dos se deben usar 8 variables del tipo Word las cuales sean de preferencia h, m, s, cs, a, mes, d, ds que representan hora, minuto, segundo, centsima de segundo, ao, mes, da y da de la semana respectivamente ejemplo: program programa_que_obtiene_la_fecha_hora_del_sistema; uses dos, crt; var h,m,s,cs,a,mes,d,ds :word; begin clrscr; gettime(h,m,s,cs); getdate(a,mes,d,ds); writeln('la hora actual es: ',h,':',m,':',s,':',cs); writeln('la fecha actual es: ',a,' ',mes,' ',d,' ',ds); readln; end.

3. Sentencia decisiva if - then.


Esta sentencia se usa para tomar decisiones en un programa por ejemplo si quisiramos un programa para una discoteca que identificara si alguien puede pasar o no a la discoteca tendra que cumplir una condicin para hacerlo si no se tomara otra u otras acciones para usar la sentencia decisiva se tiene la siguiente estructura: If (condicion) then Begin Cdigo; End; Cabe notar que en el end de este caso se usa con ; porque eso indica que es el fin de la sentencia decisiva ms no el del programa aun que tambin esta la sentencia else esta sentencia se utiliza cuando no se cumple la condicin del if y queremos que se ejecute otra cosa cuando as sea usando el mismo ejemplo de la discoteca si el cliente fuera mayor de edad el programa lo dejara entrar pero si no lo es no lo dejara entrar cabe decir que si es solo una lnea de instruccin la que se pondr en el if pueden omitirse el begin y el end tambin los simbolos comparativos que se pueden usar en esta funcin son <(menor que),>(mayor que),<>(diferente) tambin se pueden utilizar las palabras reservadas and y or en las condiciones del if para usar ms de 1 condicin en 1 solo if se deben encerrar cada condicin en un parntesis y utilizar la palabra and u or segn se requiera si se requiere

mas de una lnea de cdigo en el if se debe poner el begin y end pero si se usara el end en ese caso no se le pondra ni ; ni . para que quede ms claro el tema del if pondr un ejemplo a continuacin: program decir_si_una_persona_es_menor_o_mayor_de_edad; uses crt; var edad : integer; begin clrscr; writeln('escribir la edad'); readln(edad); if edad>17 then writeln('es mayor de edad pasas') else writeln('es menor de edad'); readln; end.

3.1 if anidados.
Se le llama if anidados cuando en un cdigo se encuentran if dentro de otros, aun que tambin se pueden poner ifs dentro de un else ejemplo: program programa_que_mide_rangos;{NOMBRE DEL PROGRAMA} uses crt; var {ESTA ES LA VARIABLE Y SU TIPO} a : integer; begin {INICIO DEL PROGRAMA} clrscr; {LIMPAR PANTALLA} writeln('escribe un numero del uno al 100');{IMPRIMIR PANTALLA} readln(a); {LEER LA VARIABLE A} if a<20 then {SI A ES MENOR QUE 20 ENTONSES} begin writeln('es menor DE 20');{IMPRIMIR EN PANTALLA} end else {SI NO SE CUMPLE LA PRIMERA OPCION} if a>80 then {SI A ES MAYOR A 80 ENTONSES} begin writeln('es mayor que 80');{IMPRIMIR EN PANTALLA}

end; readln;{PRESIONARENTER PARA SALIR} end.{FIN DEL PROGRAMA}

3.2 Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que identifique si una persona es mayor o menor de edad y decida si puede entrar a un antro de adultos. Ejercicio 2: crear un programa que identifique entre 2 nmeros cual es mayor y cual es menor. Ejercicio 3: crear un programa que dados 2 nmeros siempre muestre el resultado de dividir el mayor entre el menor. Ejercicio 4: crear un programa que de 3 opciones al usuario (sumar, restar y multiplicar)

Posibles soluciones:
Ejercicio 1. program decir_si_una_persona_es_menor_o_mayor_de_edad; uses crt; var edad : integer; begin clrscr; writeln('escribir la edad'); readln(edad); if edad>17 then writeln('es mayor de edad pasas') else writeln('es menor de edad no pasas'); readln; end.

Ejercicio 2. program numeros_mayor_o_menor;{ESTE ES EL NOMBRE DEL PROGRAMA} uses crt; var {ESTAS SON LAS VARIABLES Y SU TIPO} a,b :integer; begin {INICIO DEL PROGRAMA}

clrscr; {LIMPIAR PANTALLA} writeln('escribe un numero');{IMPRIMIR EN PANTALLA} readln(a); {LEER LA VARIABLE A} writeln('escribe otro numero');{IMPRIMIR EN PANTALLA} readln(b); {LEER LA VARIEBLE B} if a>b then {LA PRIMERA OPCION DEL PROGRAMA (SI A ES MAYOR QUE B ENTONSES)} writeln('este numero es mayor',a){IMPRIR EN PANTALLA} else {SI NO SE CUMPLE LA PRIMERA OPCION ENTONSES} writeln('este numero es mayor',b); {IMPRIME EN LA PANTALLA} readln; {PRESIONE CUAL QUIER TECLA PARA SALIR} end. {FIN DEL PROGRAMA} Ejercicio 3. program dados_dos_numeros_dividir_siempre_el_mayor_entre_el_menor; uses crt; var a,b,c,d : real; begin clrscr; writeln('escribe el primer numero'); readln(a); writeln('escribe el segundo numero'); readln(b); c:=a/b; d:=b/a; if a>b then writeln('el resultado es',c) else writeln('el resltado es',d); readln; end. Ejercicio 4: program programa_de_confusion;{NOMBRE DEL PROGRAMA} uses crt;

var {ESTAS SON LAS VARIABLES Y SU TIPO} a,b,c,d,e,f : integer; begin {INICIO DEL PROGRAMA} clrscr; {LIMPIAR LA PANTALLA} writeln('que operacion quieres 1)multiplicar2)sumar 3)restar');{IMPRIMIR EN PANTALLA} readln(a); {LEER LA VARIABLE A} writeln('escribe el primer numero');{IMPRIMIR EN PANTALLA} readln(b); {LEER LA VARIABLE B} writeln('escribe el segundo numero');{IMPRIMIR EN PANTALLA} readln(c); {LEER LA VARIABLE C} begin if a=1 then{SI A ES IGUAL A 1 ENTONSES} d:=c*b;{FORMULA PARA SACAR EL VALOR DE D} writeln('el resultado de la multiplicasion es',d);{IMPRIMIR EN PANTALLA} end; begin if a=2 then{SI A ES IGUAL A 2 ENTONSES} e:=c+b;{FORMULA PARA SACAR EL VALOR DE E} writeln('el resultado de la suma es',e);{IMPRIMIR EN PANTALLA} end; begin if a=3 then{SI A ES IGUAL A 3 ENTONSES} f:=b-c;{FORMULA PARA SACAR EL VALOR DE F} writeln('el resultado de la resta es',f);{IMPRIMIR EN PANTALLA} end; readln;{PRESIONAR ENTER PARA SALIR} end.{FIN DEL PROGRAMA}

4. Sentencia decisiva case of.


Esta sentencia se utiliza cuando hay varias opciones ya que sera muy tedioso y confuso usar muchos if la sentencia case pose la siguiente estructura: Case (condicin) of Opciones: acciones; End; Para que quede ms claro el tema de la sentencia decisiva case dejo el siguiente ejemplo: program programa_que_dise_el_dia_de_la_semana;{NOMBRE DEL PROGRAMA}

uses {LA BIBLIOTECA} crt; var {LAS VARIABLES Y SU TIPO} dia_de_la_semana : char; begin {INICIO DEL PROGRAMA} clrscr; {LIMPIAR PANTALLA} writeln('escribe un numero del 1 al 7');{IMPRIMIR EN PANTALLA} readln(dia_de_la_semana); {LEER EL NUMERO ENTREGADO POR EL USUARIO} case dia_de_la_semana of {SENTENCIA CASE SE USA PARA QUE IMPRIMA EL RESULTADO SEGUN CORRESPONDA} '1' : writeln('hoy es lunes'); {IMPRIME EN LA PANTALLA EL RESULTADO QUE CORRESPONDE ALA TECLA QUE PRESIONO EL USUARIO} '2' : writeln('hoy es martes'); '3' : writeln('hoy es miercoles'); '4' : writeln('hoy es jueves'); '5' : writeln('hoy es viernes'); '6' : writeln('hoy es sabado'); '7' : writeln('hoy es domingo') end;{FIN DE LA SENTENCIA CASE} readln;{OPRIMIR CUALQUIER TECLA PARA SALIR} end.{FIN DEL PROGRAMA}

Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que cuando el usuario de un nmero entre 1 y 12 muestre el mes correspondiente a ese nmero. Ejercicio 2: crear un programa que dados 2 nmeros por el usuario le permita escoger si sern: sumados, restados, multiplicados divididos.

Posibles soluciones.
Ejercicio 1: program programa_que_dise_el_mes_del_ano;{NOMBRE DEL PROGRAMA} uses {LA BIBLIOTECA} crt; var {LAS VARIABLES Y SU TIPO} a : integer; begin {INICIO DEL PROGRAMA} clrscr; {LIMPIAR PANTALLA} writeln('escribe un numero del 1 al 12'); {IMPRIMIR EN PANTALLA} readln(a); {LEER LA VARIABLE ENTREGADA POR EL USUARIO}

case a of {INICIO DE LA SENTENCIA CASE QUE IMPRIME EL RESULTADO QUE CORRESPONDA} 1 : writeln('enero'); {ESTOS SON LOS RESULTADOS QUE SE LE ENTREGAN AL USUARIO SEGUN EL VALOR DE LA VARIABLE 2 : writeln('febrero'); QUE EL ENTREGO} 3 : writeln('marzo'); 4 : writeln('abril'); 5 : writeln('mayo'); 6 : writeln('junio'); 7 : writeln('julio'); 8 : writeln('agosto'); 9 : writeln('septiembre'); 10 : writeln('octubre'); 11 : writeln('noviembre'); 12 : writeln('diciembre'); end; {FIN DE LA SENTENCIA CASE} readln;{OPRIMIR CUALQUIER TECLA PARA SALIR} end.{FIN DEL PROGRAMA} Ejercicio 2: program programa_que_suma_resta_multiplica_y_divida;{NOMBRE DEL PROGRAMA} uses {LA BIBLIOTECA} crt; var {LA VARIABLES Y SU TIPO} a,b,c,d,e,f:integer; g :real; opc:integer; begin {INICIO DEL PROGRAMA} clrscr; writeln('elige una opcion 1)suma 2)resta 3)multiplica 4)divida');{IMPRIMIR EN PANTALLA} readln(opc); {LEER LA VARIABLE ENTREGADA POR EL USUARIO} writeln('escribe el primer numero'); {IMPRIMIR EN PANTALLA} readln(a); {LEER LA VARIABLE ENTREGADA POR EL USUARIO} writeln('escribre el segundo numero'); {IMPRIMIR EN PANTALLA} readln(b); {LEER LA VARIABLE ENTREGADA POR EL USUARIO} d:=a+b;{LA FORMULA PARA SACAR EL VALOR DE D}

e:=a-b;{LA FORMULA PARA SACAR EL VALOR DE E} f:=a*b;{LA FORMULA PARA SACAR EL VALOR DE F} g:=a/b;{LA FORMULA PARA SACAR EL VALOR DE G} case opc of {INICIO DE LA SENTENCIA CASE} 1: writeln('el resultado es ',d); {IMPRIMIR EN PANTALLA EL RESULTADO QUE CORRESPONDA ALA VARIABLE ENTREGADA POR EL USUARIO} 2: writeln('el resultado es ',e); 3: writeln('el resultado es ',f); 4: writeln('el resultado es ',g) end; {FIN DE LA SENTECIA CASE} readln; {OPRIMIR CUALQUIER TECLA PARA SALIR} end. {FIN DEL PROGRAMA} Nota: como ya habras notado no es lo mismo 1 que 1 ya que el compilador toma a 1 como el numero y a 1 como parte de un texto cuando pones las comillas indicas que es una cadena o carcter.

5. Sentencia repetitiva while do.


Una sentencia repetitiva tambin conocida como bucle ciclos son sentencias que sirven para repetir cierta cantidad de veces una o ms acciones en especfico esta es la primera de 3 sentencias repetitivas que veremos y su estructura es la sig.: While (condicin) do Begin Cdigo; End; Este ciclo continuara ejecutndose mientras la condicin que tiene sea verdadera cuando no lo sea dejara de ejecutarse y el programa pasara a la siguiente seccin del cdigo. Ejemplo: program programa_que_muestra_en_la_pantalla_la_numeracion_del_1_al_20;{NOMBRE DEL PROGRAMA} uses {LA BIBLIOTECA} crt; var {LAS VARIABLES Y SU TIPO} a: integer; b: integer; begin {INICIO DEL PROGRAMA} clrscr; {LIMPIAR PANTALLA} writeln('este programa muestra los numeros del 1 al 20'); {IMPRIMIR EN PANTALLA}

while b<20 do {INICIO DEL CICLO DE REPETICION Y SI CONDICION} begin b:=b+1; {FORMULA PARA SACAR EL VALOR DE B} writeln('el resultado es',b) {IMPRIMIR EN PANTALLA} end; {FIN DEL CICLO DE REPETICION} readln; {PRESIONAR ENTER PARA SALIR} end. {FIN DEL PROGRAMA}

Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que muestra la numeracin del 20 al 1. Ejercicio 2: crear un programa que dados n nmeros muestra su suma. Ejercicio 3: crear un programa que saque el factorial de un numero dado por el usuario el factorial es la suma de la multiplicacin de un numero por sus predecesores y se representa con un signo de exclamacin ejemplo: 5!= 5*4*3*2*1=120. Nota: cuando se te trabe el programa en una parte del ciclo o se repita muchas veces y no puedas controlarlo presiona ctrl+pausa.

Posibles soluciones.
Ejercicio 1: program DEL_20_AL_1; {NOMBRE DEL PROGRAMA} uses {BIBLIOTECA} crt; var {LAS VARIABLES Y SU TIPO} a : integer; b : integer; begin {INICIO DEL PROGRAMA} clrscr; {LIMPIAR PANTALLA} writeln('numeracion del 20 al 1 ');{IMPRIMIR EN PANTALLA} b:=21; {EL VALOR DE B} while b>1 do {INICIO DEL CICLO DE REPETICION Y SU CONDICION} begin b:=b-1; {FORMULA PARA OBTENER EL VALOR DE B DURANTE EL CICLO} writeln('resultado' ,b); {IMPRIMIR EN PANTALLA} end; {FIN DEL CICLO DE REPETICION} readln; {PRESIONAR CUALQUIER TECLA PARA SALIR} end. {FIN DEL PROGRAMA} Ejercicio 2: program programa_que_suma_hasta_n_numeros; {NOMBRE DEL PROGRAMA}

uses {LA BIBLIOTECA} crt; var {LAS VARIABLES Y SU TIPO} n,a,b,c : integer; begin {INICIO DEL PROGRAMA} clrscr; {LIMPIAR PANTALLA} writeln('cuantos numeros deseas sumar?'); {IMPRIMIR EN PANTALLA} readln(n); {LEER LA VARIABLE N} a:=0; {EL VAOR DE A} b:=0; {EL VALOR DE B} writeln('teclea los numeros que quieres sumar'); {IMPRIMIR EN PANTALLA} while a<n do {INICIO DEL CICLO DE REPETICION Y SU CONDICION} begin read(c); {LEER LA VARIABLE C} b:=b+c; {FORMULA PARA OBTENER EL VALOR DE B DURANTE EL CICLO} a:=a+1; {FORMULA PARA OBTENER EL VALOR DE A DURANTE EL CICLO} readln end; {FIN DEL CICLO DE REPECION} writeln('el resultado de la suma es ',b); {IMPRIMIR EN PANTALLA} readln; {PRESIONAR CUALQUIER TECLA PARA SALIR} end. {FIN DEL PROGRAMA} Ejercicio 3: program programa_que_da_el_factorial_de_un_numero; {NOMBRE DEL PROGRAMA} uses {LA BIBLIOTECA} crt; var {LAS VARIABLES Y SU TIPO} a,b,c,d:integer; begin {INICIO DEL PROGRAMA} clrscr; {LIMPIAR PANTALLA} writeln('este programa saca el factorial de un numero'); {IMPRIMIR EN PANTALLA} writeln('escribe el numero del que deseas obtener el factorial');{IMPRIMIR EN PANTALLA} readln(a); {LEER LA VARIABLE A} b:=1; {VALOR DE B} while a> 1 do {INICIO DEL CICLO REPETITIVO Y SU CONDICION} begin

b:=b*a;{FORMULA PARA OBTENER EL VALOR DE B DURANTE EN CICLO} a:=a-1; {FORMULA PARA OBTENER EL VALOR DE A DURANTE EL CICLO} writeln('el resultado es ',b);{IMPRIMIR EN PANTALLA} end;{FIN DEL CICLO REPETITIVO} readln; {PRESIONAR ENTER PARA SALIR} end. {FIN DEL PROGRAMA}

6. Sentencia repetitiva repeat.


La sentencia repetitiva o bucle repeat es muy similar al bucle while solo tienen la diferencia en que la condicin esta al final del ciclo y el ciclo repear no usa ni begin ni end por que su estructura no lo necesita ya que es esta: Repeat Cdigo Until (condicin); Para que quede ms claro este tema pondr un ejemplo: program programa_que_muestra_la_numerasion_del_1_al_20; uses crt; var a :integer; begin clrscr; writeln('este programa muestr la numeracion del 1 al 20'); a:=0; repeat a:=a+1; writeln('el rersultado es', a); until a=20; readln; end.

Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que haga la suma de n nmeros dados por el usuario. Ejercicio 2: crear un programa que muestra la tabla de multiplicar que el usuario quiera. Ejercicio 3: crear un programa que muestre la numeracin desde el 1 hasta n.

Posibles soluciones.
Ejercicio 1:

program la_suma_de_n_numeros; uses crt; var a,b,n,c:integer; begin clrscr; writeln('cuantos numeros deseas sumar?'); readln(n); a:=0; b:=0; writeln('teclea los numeros que quieres sumar'); repeat read(c); b:=b+c; a:=a+1; until a=n; writeln('el resultado de la suma es ',b); readln; readln; end. Ejercicio 2: program tablas; uses crt; var a,b,c : integer; begin clrscr; writeln('escribe que tabla de multiplicar quieres'); readln(c); writeln(''); repeat writeln(a); b:=b+1; a:=c*b; until

b=11; readln; end. Ejercicio 3: program programa_Que_muestra_la_numersion_de_1_hasta_n_numeros; uses crt; var n: integer; a : integer; begin clrscr; writeln('hasta que numero quieres llegar '); readln(n); repeat a:=a+1; writeln(a); until a=n; readln; end.

7. Sentencia repetitiva for to do.


La sentencia repetitiva for es la nica que es automtica ya que se especifica exactamente cuntas veces se repetir el ciclo auntomatica mente ira aumentando el contador en 1 y su estructura es esta: For (variable:=valor inicial)to (valor final)do Begin Cdigo; End; Ejemplo de uso del ciclo for: program programa_que_muestra_la_numeracion_del_1al_20; uses crt; var a,b,c:integer; begin for a:=1 to 20 do begin writeln('resultado',a) end; readln; end. Nota: es los ciclos se puede usar la funcin delay(parmetro); que hace que se realicen las instrucciones dentro del ciclo ms lento el parmetro son milsimas de segundo de retraso para el ciclo.

Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que muestre la suma de 1 hasta n. Ejercicio 2: crear un programa que haga la comparacin de n nmeros y muestre cual es el valor mayor.

Posibles soluciones.
program programa_que_muestra_la_suma_de_n_numeros_dados_por_el_ususario; uses crt; var a,b,c,n,e:integer; begin clrscr;

writeln('cuantos numeros deseas sumar?'); readln(n); writeln('escribe tus numeros'); a:=0; b:=0; e:=0; for a:=0 to n do readln(c); b:=b+c; a:=a+1; writeln('el resultado de la suma es ',b); readln; end. Ejercicio 2: program programa_que_calcula_cual_valor_es_menor; uses crt; var mayor,menor,contador,num,valor : integer; begin clrscr; writeln('cuantos numeros quieres comparar'); readln(num); contador:=1; mayor:=0; menor:=0; for contador:=num to num do clrscr; writeln('introduce el ',contador,' ,numero,:'); readln(valor); if valor>mayor then mayor := valor else menor:=valor; contador:=contador+1; writeln('el mayor es',mayor,'y el menor es', menor); readln;

end. Ejemplo extra este es un ejemplo de inter faz grafica en pascal: program pruebas; uses crt; var x,y:integer; a,b,c:real; z:char; begin textmode(co80); repeat textcolor(0);textbackground(green);clrscr; for x:=27 to 56 do begin for y:=2 to 6 do begin gotoxy(x,y);write(CHR(219)); end; end; textcolor(4); for x:=25 to 55 do begin for y:=1 to 5 do begin gotoxy(x,y);write(CHR(219)); end; end; textcolor(2);textbackground(4); gotoxy(31,2);write('Universidad de Colima'); gotoxy(28,3);write('Bachillerato Tcnico No. 16'); gotoxy(27,4);write('Tercer Semestre Programacin');textcolor(1); for x:=1 to 80 do begin gotoxy(x,25);write(CHR(219)); end; for x:=30 to 50 do begin

for y:=10 to 19 do begin gotoxy(x,y);write(CHR(219)); end; end; textcolor(14);textbackground(1); gotoxy(39,12);write('RAIZ'); gotoxy(37,15);write('CUADRADO'); gotoxy(35,18);write('Opcin..[ ]'); repeat gotoxy(44,18);z:=upcase(readkey); until ((z='R') or (z='C') or (z='S') or (z=CHR(27))); IF z='R' then begin gotoxy(7,12);write('RAIZ'); gotoxy(7,15);write('Ingrese nmero '); read(a); b:=SQRT(a); gotoxy(7,17);write('El resultado es ',b:6:3); readkey; end; IF Z='C' THEN BEGIN gotoxy(7,12);write('CUADRADO'); gotoxy(7,15);write('Ingrese nmero '); read(a); b:=SQR(a); gotoxy(7,17);write('El resultado es ',b:6:3); readkey; end; for x:=1 to 15 do begin gotoxy(x,y);write(CHR(219)); end; textcolor(14);textbackground(1); gotoxy(40,17);write('ozmar humberto ugarte saucedo'); gotoxy(42,19);write('ya esta'); gotoxy(35,18);write('Opcin..[ ]');

until ((z='S') or (z=CHR(27))); end.

8. Procedimientos.
Los procedimientos ayudan para dividir un gran problema en pequeos subproblemas usando la palabra procedure puedes crear un cdigo que contenga 1 o ms procedimientos separados del cdigo fuente y usar lo que se llaman variables locales(que funcionan solo dentro del procedimiento donde se usan) variables universales(funcionan en el cdigo fuente y en el procedimiento que sea) a continuacin les dejo un ejemplo de uso de procedimientos: program calcular_las_4_operaciones_basicas;{nombre del programa} uses crt; {la biblioteca} var{declaracion de variables} num1,num2,opc:integer; res:real; procedure suma;{sentencia procedure} begin{inicio de la sentencia procedure} writeln('escribe tu primer numero');{imprimir en pantalla} readln(num1);{leer la variable num1} writeln('escribe tu segundo numero');{imprimir en pantalla} readln(num2);{leer la variable num2} writeln('el resultado de la suma es',num1+num2);{imprimir en pantalla} end;{fin de la sentencia procedure} procedure resta;{sentencia procedure} begin{inicio de la sentencia procedure} writeln('escribe tu primer numero');{imprimir en pantalla} readln(num1);{leer num1} writeln('escribe tu segundo numero');{imprimir en pantalla} readln(num2);{leer num2} res:=num1-num2;{valor de res} writeln('el resultado de la resta es',res);{imprimir en pantalla} end;{fin de le sentencia procedure} procedure multiplicasion;{sentencia procedure} begin{inicio de la sentencia procedure} writeln('escribe tu primer numero');{imprimir en pantalla} readln(num1);{leer num1} writeln('escribe tu segundo numero');{imprimir en pantalla} readln(num2);{leer num2}

res:=num1*num2;{leer la variable res} writeln('el resultado de la multiplicasion es',res);{imprimir en pantalla} end;{fin de la sentencia procedure} procedure division;{inicio de la sentencia procedure} begin{inicio de la sentencia procedure} writeln('escribe tu primer numero');{imprimir en pantalla} readln(num1);{leer la variable num1} writeln('escribe tu segundo numero');{imprimir en pantalla} readln(num2);{leer num2} res:=num1/num2;{valor de res} writeln('el resultado de la divisu-ion es',res);{imprimir en pantalla} end;{fin de la sentencia procedure} begin{inicio del programa} clrscr;{limpiar pantalla} writeln('que quieres hacer 1)suma 2)resta 3)multioplicasion 4)division');{imprimir en pantalla} readln(opc);{leer opc} if opc=1 then{inicio de la sentencia if} begin{inicio de la sentecia if} suma;{procedure suma} end;{fin del if} if opc=2 then{condidcion del if} begin{inicio del if} resta;{procedure resta} end;{fin del if} if opc=3 then{condicion del if} begin{inicio del if} multiplicasion{procedure multiplicasion} end;{fin del if} if opc=4 then{condicion del if} begin{inicio de la sentencia if} division;{procedure division} end;{fin del if} readln;{pulsar enter para salir} end.{fin del programa}

Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que cambie el color de fondo a la eleccin del usuario dndole a escoger 3 colores distintos.

Posibles soluciones.
program cambio;{nombre del programa} uses{la biblioteca} crt; var{las variables y su tipo} color,x,y:integer; z:char; procedure color1;{sentencia procedure} begin{inicio del procedure} textbackground(green);clrscr;{cambiar color del fondo y limpiar pantalla} end;{fibn del procedure} procedure color2;{sentencia procedure} begin{inicio dela sentencia procedure} textbackground(red);clrscr;{cambiar el color de fonfo} end;{fin dela sentencia procedure} procedure color3;{sentencia procedure} begin{inicio del procedure} textbackground(blue);clrscr;{cambiar el color de fondo} end;{fin de la sentencia procedure} begin{inicio del programa} clrscr;{limpiar pantalla} writeln('que color deseas 1)verde 2)rojo 3)azul');{imprimir en pantalla} readln(color);{leer la variable color} if color=1 then{sentencia if} begin{inicio del if} color1;{procedure color 1} end;{fin del if} if color=2 then{sentencia if} begin{inicio de la sentencia if} color2;{procedure color 2} end;{fin del if} if color=3 then{sentencia if} begin{inicio del sentencia if} color3;{procedure 3} end;{fin del if}

readln;{presionar enter para salir} end.{fin del programa}

9. Funciones.
Las funciones son muy similares a los procedimientos salvo que en funciones se usa la recursividad como veremos ms adelante y en funciones se pueden enviar y recibir para metros ejemplo de uso de funciones: program factorial_de_un_numero; {nombre del programa} uses {la biblioeca} crt; var {declaracion de variables} i,num,fac:integer;{las variables y su tipo} function factorial(fac:integer):integer; {funcion} begin {inicio de funcion} clrscr; {limpiar pantalla} writeln('dame un numero'); {imprimir en pantalla} readln(num); {leer la variable num} fac:=1; {valor de fac} repeat {inicio del cilo repeat} i:=i+1; {valor de i} fac:=fac*i; {formula para obtener el valor de fac} until i=num; {fin de el ciclo repeat} writeln(fac); {imprimir en pantalla} end; {fin de funcion} begin {inicio del programa} writeln(factorial(num)); {imprimir en pantalla} readln;{preionar enter para salir} end. {fin del programa}

Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que dados los catetos de un triangulo rectngulo muestre la medida de la hipotenusa usando el teorema de Pitgoras c^2=a^2+b^2. Ejercicio 2: crear un programa que muestre la suma de 1 hasta n nmeros.

Posibles soluciones.
Ejercicio 1: program hipotenusa_de_un_triangulo;{nombre del programa} uses {la biblioteca} crt; var {declaracion de variables} d,c,b,a,c1,c2,h:real; {las variables y su tipo} function hipotenusa(d:real):real;{function} begin{inicio de function} clrscr;{limpiar pantalla} writeln('dame el cateto opuesto de tu triangulo');{imprimir en pantalla} readln(c1);{leer c1} writeln('dame el cateto adiasente de tu triangulo');{imprimir en pantalla} readln(c2);{leer c2} a:=sqr(c1);{valor de a} b:=sqr(c2);{valor de b} c:=a+b; {valor de c} d:=sqrt(c);{valor de d} writeln(d);{imprimir en pantalla} end;{fin de function} begin{inicio del programa} writeln(hipotenusa (d));{imprimir en pantalla} readln;{presionar enter para salir} end.{fin del programa} Ejercicio 2: program suma_de_1_hasta_n_numeros;{nombre del programa} uses {la biblioteca} crt; var {declaracion de variables} num,c,a,b:integer;{las variables y su tipo} function suma (a:integer):integer;{function} begin {inicio de function} clrscr;{limpiar pantalla} writeln('hasta que numero quiere llegar?');{imprimir pantalla} readln(num);{leer num} repeat{incio de el ciclo repeat} a:=b+1;{valor de a}

b:=a;{valor de b} c:=a+c;{valor de c} until a=num;{fin del cilo repeat} writeln(c);{imprimir c} end;{fin de function} begin{inicio del programa} writeln(suma(a));{imprimir en pantalla} readln;{resionar enter para salir} end.{fin del programa}

10.

Recursividad.

La recursividad en una herramienta muy til en la programacin que consiste en que entre 1 o ms funciones se llamen entre s simultneamente para realizar un tarea especfica la condicin en la recursividad es que las funciones solo se llamen mientras sea necesario ya que podran ciclarse un problema muy comn en la programacin que consiste en que ya sea en ciclos o en la recursividad se repitan infinitas veces ms de las necesarias la accin esperada dejare un ejemplo para quede ms claro el tema: PROCEDURE Infinito; Begin Writeln('a'); Infinito End; BEGIN Infinito; Writeln('FIN del programa') END. El programa no terminara hasta que llene la memoria por que no tiene ninguna condicin de detenerse. PROCEDURE Finito(c:integer); Begin Writeln(c); c=c+1; if c<=9 then Finito(c) End; BEGIN Finito(1); Writeln('FIN del programa');

END.

Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que calcule el factorial de un numero usando recursividad.

Posibles soluciones.
program PruebaDeFactorial; var numero: integer; function factorial( num : integer) : integer; begin if num = 1 thenfactorial := 1 (* Aseguramos que tenga salida siempre *) else factorial := num * factorial( num-1 ); (* Caso general *) end; begin writeln( 'Introduce un nmero entero (no muy grande) ;-)' ); readln(numero); writeln( 'Su factorial es ', factorial(numero) ); end.

11.

Vectores y matrices (vectores bidimensionales).

Hasta ahora se ha visto como manejar y guardar variables pero se deben declara una variables por valor pero habr ocasiones en las que se deban manejar muchas variables en un solo programa para eso existen los vectores son variables que pueden guardar hasta n valores y son muy fciles de manejar ya que se refiere con el mismo nombre solo se diferencia un valor de otro por un subndice sea: valor [1...10] (un vector de 10 espacios) donde 5 es el valor guardado en el tercer espacio nos referimos a l como valor *3+ sea en el vector valor en la posicin 3 claro que para seleccionar la posicin del vector deseada usaremos una variable y no subndices cabe decir que un vector solo puede almacenar valores de un solo tipo el tipo del que sea declarado el vector puedes imaginarte un vector como una lnea recta dividida en cuadro donde se guardan los valores tambin deben saber que cuando declaras un vector en pascal debes especificar cuantos espacios tendr el vector pondr un ejemplo para que este ms claro el tema as podrn ver como se declara un vector:

program programa_que_calcula_el_promedio_de_n_numeros;{nombre del programa} uses{la biblioteca} crt; type{declaracion del vector} vector=array[1..10]of integer; var{declaracion de variables} a,b,d,n,i,cantidad:integer;{las variables y su tipo} c:real; promedio:vector; begin{inicio del programa} clrscr;{limpiar pantalla} writeln('cuantos numero usaras?');{imprimir en pantalla} readln(cantidad);{leer la variable cantidad} repeat{inicio del ciclo repeat} writeln('dame un numero');{imprimir en pantalla} readln(n);{leer la variable n} clrscr;{limpiar pantalla} b:=b+n;{valor de b} i:=i+1;{valor de i} until i=cantidad;{fin del ciclo until} c:=b/i;{valor de la variable c} writeln('el promedio total es :',c);{imprimir en pantalla} readln;{presionar enter para salir} end.{fin del programa}

Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que dados n valores los invierta es decir que el primero sea el ultimo y el ultimo el primero, el segundo sea el penltimo y el penltimo el segundo as sucesiva mente. Ejercicio 2: crear un programa que dado un vector con n nmeros sume los valores del vector y muestre el resultado.

Posibles soluciones.
Ejercicio 1: program programa_que_invierte_los_valores_de_un_vector;{nombre del programa} uses crt; {la biblioteca} type

vector=array [1..100] of integer; {declaracion del vector} var{declaracion de variables} ronda:vector; cantidad,cont1,cont2,temp1,temp2,numero:integer;{declaracion de variables} begin{inicio del programa} clrscr;{limpiar pantalla} Write('Cantidad de numeros: ');{imprimir en pantalla} readln(cantidad);{leer la variable cantidad} for cont1:=1 to cantidad do{ciclo for} begin{inicio del ciclo for} Write('numero ',cont1,': ');{imprimir en pantalla} Readln(ronda[cont1]);{leer el vector ronda} end;{fin del ciclo for} write('numeros originales: ');{impimir en pantalla} for cont1:=1 to cantidad do{inicio del ciclo for} begin{iniciar ciclo for} if cont1=cantidad then{sentencia if} begin{inicio de la sentencia if} write(ronda[cont1],'.');{imprimir en pantalla} end{fin de la sentencia if} else{sentencia else} begin{inicio de la sentencia else} write(ronda[cont1],', ');{imprimir en pantalla} end;{fin de la sentencia else} end;{fin del ciclo for} write('numeros invertidos: ');{imprimir en pantalla} for cont1:=1 to cantidad do{ciclo for} begin{inicio del ciclo for} if cont1=cantidad then{sentencia if} begin{inicio de la sentencia if} ronda[cont1]:=ronda[cont1]*-1;{formula de ronda} write(ronda[cont1],'.');{imprimir ronda} end{fin del if} else{sentencia else} begin{inicio de la sentencia else} ronda[cont1]:=ronda[cont1]*-1;{formula para ronda} write(ronda[cont1],', ');{imprimir ronda} end;{fin de la sentencia else}

end;{fin del cilo for} readln;{presionar enter para salir} end.{fin del programa} Ejercicio 2: program programa_que_suma_2_vectores;{nombre del programa} uses{la biblioteca} crt; type{declaracion del vetor} vector1=array [1..100]of integer; vector2=array [1..100]of integer; var{declaracion de variables} a,b,c,d,e,i,f:integer;{las variables y su tipo} begin{inicio del programa} clrscr;{limpiar pantalla} writeln('cuantos numeros usaras en el primer vector');{imprimir en pantalla} readln(a);{leer la variable a} repeat{inicio del cilo repeat} writeln('dame el valor ',i,' del primer vector');{imprimir en pantalla} readln(b);{leer la variable b} c:=b+c;{valor de c} i:=i+1;{valor de i} until i=a;{fin del ciclo repeat} writeln('el resultado del primer vector es :',c);{imprimir en panatalla} writeln('cuantos numeros usaras en el segundo vector');{imprimir en pantalla} readln(d);{leer la variable d} repeat{ciclo repeat} writeln('dame el valor ',e,' del segundo vector');{imprimir el cilo repeat} readln(f);{leer la variable f} f:=f+f;{valor de f} e:=e+1;{valor de e} until e=d;{fin del ciclo repeat} writeln('el resultado del segundo vector es: ',f);{imprimir en pantalla} writeln('el resultado de la suma de los 2 vectores es',f+c);{imprimir en pantalla} readln;{presionar enter para salir} end.{fin del programa}

11.1 Vectores bidimensionales o matrices.


Los vectores bidimensionales o matrices son como los vectores normales salvo que estos son mucho ms grandes se usan para manejar cantidades de variables muy grandes puedes imaginarte un vector bidimensional como una cuadricula o una tabla de Excel se declaran algo diferentes a los vectores normales pero al igual que los vectores normales debes especificar cuantos espacios tendr pondr un ejemplo para que puedas entenderlo ms fcilmente: program matrizes; uses crt; type matriz=array[1..10,1..10]of integer; var pocicion:matriz; x,y,sumatotal:integer; begin for y:=1 to 10 do begin for x:=1 to 10 do begin pocicion[x,y]:=random(11); end; end; textcolor(green); for y:=1 to 10 do begin for x:=1 to 10 do begin sumatotal:=sumatotal+pocicion[x,y]; end; end; writeln('el resultado es:',sumatotal); readln; end.

Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que dada uno matriz con n elementos muestre cual es numero ms grande en la matriz. Ejercicio 2: crear un programa que creer valores al azar para llenar una matriz y haga la sumatoria de todos los valores de la matriz nota: la funcin que crea nmeros al azar es random(parmetro) donde el parmetro es el numero limite al que puede llegar la funcin es decir que usa nmeros desde 1 hasta el parmetro.

Posibles soluciones.
program matrizes2; uses crt; type matriz=array[1..10,1..10]of integer; var pocicion:matriz; x,y,mayor,actualx,actualy:integer; begin randomize; for y:=1 to 10 do begin for x:=1 to 10 do begin pocicion[x,y]:=random(12); end; end; for y:=1 to 10 do begin for x:=1 to 10 do begin if pocicion[x,y] > mayor then begin mayor:=pocicion[x,y]; actualx:=x; actualy:=y; end; end; end;

textcolor(red); writeln('el numero mayor de toda la matriz fue:',mayor); writeln('esta la pocicion',x,' ',y); readln; end. Ejercicio 2: program matrizes3; uses crt; type matriz=array[1..10,1..10]of integer; vector=array[1..100]of integer; var pocicion:matriz; avector:vector; x,y,contador:integer; begin for y:=1 to 10 do begin for x:=1 to 10 do begin contador:=contador+1; pocicion[x,y]:=random(101); avector[contador]:=pocicion[x,y]; end; end; textcolor(blue); for x:=1 to contador do begin writeln(avector[x]); end; readln; end.

12.

Cadenas.

En programacin se le conoce como cadenas a las palabras en las que se maneja un programa en pascal existe la variable string (cadena en ingles) que puede almacenar hasta 255 caracteres por variable se puede especificar cuantos caracteres usaremos por variable o solo declarar las variables como string y automticamente se podrn usar los 255 caracteres por defecto y tambin pueden ser tratadas como vectores en el sentido que para hacer referencia a un elemento de la cadena con un subndice a continuacin les dejo un ejemplo del uso de cadenas para que se aclare el tema: Program programa_que_calcula_la_cantidad_de_palabras_en_una_cadena; uses crt; {la biblioteca} var {la declaracion de variables} i,g:integer; {las variables y su tipo} a,b,c,d:string[255]; begin {inicio del programa} clrscr;{limpiar pantalla} writeln('escribe algo');{imprimir en pantalla} readln(a);{leer la variable a} for i:=1 to length(a) do{ciclo for} begin {inicio del ciclo for} if a[i]=' ' then{sentencia if} begin {inicio de la sentencia if} g:=g+1;{variable g} end;{fin del if} end;{fin del for} g:=g+1;{valor de g} writeln('el numero total de palabras es:',g);{imprimir en pantalla} readln;{presionar enter para salir} end.{fin del programa}

12.1 Funciones especiales de las cadenas.


Las cadenas tienen funciones especiales que solo funcionan en ellas por su naturaleza por ejemplo la funcin upcase que convierte las letras a maysculas y otras funciones que pondr a continuacin en la siguiente tabla: Funcin. Sintaxis. Explicacin. Length Length(cadena) Indica cuatos caracteres tiene la cadena. Operador + Cad1+cad2=cad3 Une las cadenas.

Concat. Copy. Insert. Delete. Upcase. Str. Val.

Cad=concat(c1,c2,c3,c4) C1=copy(cadena,inicio,cantidad); Insert(cad1,cad2,posicion) Delete(cad,inicio,cantidad) Upcase(cad1[n]) Str(valor,cadena) Val(cad,num,cdigo)

Une varias cadenas. Copea una parte de una cadena. Inserta una cadena en otra. Elimina una parte de la cadena. Convierte a mayscula una letra a la vez. Convierte un numero a cadena. Cadena contiene la cadena que ser procesada, Num es la variable de tipo numrico donde se guardar el valor de la cadena y Cdigo es una variable de tipo entero (Integer) que contendr el valor de 0 si no hubo errores y un valor diferente en caso de que no se haya podido convertir la cadena, el valor de Cdigo representa la posicin de la cadena donde ocurri el

error.

Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que muestre cuantas letras minsculas hay en una cadena de n caracteres. Ejercicio 2: crear un programa que muestre cuantos espacios en blanco hay en una cadena de n caracteres. Ejercicio 3: crear un programa que ponga todas las letras a maysculas en una cadena de n caracteres. Ejercicio 4: crear un programa que busque y remplace un carcter en una cadena de n caracteres las veces que el carcter mencionado se repita el carcter reemplazado y el carcter que reemplazara debern ser dados por el usuario.

Posibles soluciones.
Ejercicio 1: program programa_que_calcula_el_numero_de_letras_minusculas_en_una_cadena;{nomb re del programa} uses crt;{la biblioteca}

var{declaracion de variables} i,g:integer;{las variables y su tipo} a,b,c,d:string[255]; begin{inicio del programa} clrscr;{limpiar pantalla} writeln('escribe algo');{imprimir en pantalla} readln(a);{leer a} g:=1;{variable g} for i:=1 to length(a) do{ciclo for} begin{inicio del ciclo for} if a[i]>#99 then{sentencia if} begin{inicio de la sentencia if} if a[i]<#123 then{sentencia if} begin{inicio de la sentencia if} g:=g+1;{valor de g} end;{fin del if} end;{fin del if} end;{fin del ciclo for} writeln('el numero total de letras minusculas es:',g);{imprimir en pantalla} readln;{presionar enter para salir} end.{fin del programa} Ejercicio 2: program calcula_espacios_en_blanco;{nombre del programa} uses{la biblioteca} crt; var{declaracion de variables} i,g:integer;{las variables y su tipo} a,b,c,d:string; begin{incio del programa} clrscr;{limpiar pantalla} writeln('escribe algo');{imprimir en pantalla} readln(a);{leer a} b:=' ';{valor de b} for i:=1 to length(a) do{ciclo for} begin{inicio del ciclo for} if a[i]=b then{sentencia if} begin{inicio del ciclo if} g:=g+1;{valor de g}

end;{fin del if} end;{fin del ciclo for} writeln('el total de espacios en blanco es:',g);{imprimir en pantalla} readln;{presionar enter para salir} end.{fin del programa} Ejercicio 3: program cadenamayuscula;{nombre del programa} uses{la biblioteca} crt; var{declaracion de variables} i:integer;{las variables y su tipo} a,b,c,d:string[255]; begin{inicio del programa} clrscr;{limpiar pantalla} writeln('escribe algo');{imprimir en pantalla} readln(a);{leer la variable a} for i:=1 to length(a) do{ciclo for} begin{inicio del ciclo for} a[i]:=upcase(a[i]);{comvierte los caracteres de a a mayusculas} end;{fin del ciclo for} writeln(a);{imprimir a} readln;{presionar enter para salir} end.{fin del programa} Ejercicio 4: program programa_que_busca_y_remplasa_un_caracter;{nombre del programa} uses{la biblioteca} crt; var{declaracion de variables} i:integer;{las variables y su tipo} a,b,c,d:string; begin{inicio del programa} clrscr;{limpiar pantalla} writeln('escribe algo');{imprimir en pantalla} readln(a);{leer la varible a} writeln('dame un caracter para eliminar de la primera cadena que me diste');{imprimir en pantalla}

readln(b);{leer b} writeln('dame un caracter para reemplasar el valor eliminado');{imprimir en pantalla} readln(c);{leer la variable c} for i:=1 to length(a) do{ciclo for} begin{inicio del ciclo for} if a[i]=b then{sentencia if} begin{inicio de la sentencia if} delete(a,i,1);{fucion delete} insert(c,a,i);{funcion insert} end;{fin de la sentenci if} end;{fin del ciclo for} writeln(a);{imprimir en pantalla} readln;{presionar enter para salir} end.{fin del programa}

13.

Pilas.

Hasta ahora se ha mostrado mtodos para el almacenamiento de datos pero ahora utilizaremos el manejo de datos las pilas utilizan el mtodo F.I.L.O. (First In Last Out) el primero en entrar el ltimo en salir este tema no es complicado por lo que pondr un ejemplo y recomiendo ustedes traten de hacer el mismo ejemplo con sus propios medios. program menu_pop_push_salir;{nombre del programa} uses crt; {la biblioteca} type vector=array[1..100]of longint; {declaracion del vector} var{declaracion de variables } a,b,c,d,i,tope,max,dato:integer;{las variables y su tipo} casilla:vector; begin{inicio del programa} clrscr;{limpiar pantalla} repeat{inicio del ciclo repeat} writeln('1)push 2)pop 3)salir');{imprimir pantalla} readln(a);{leer a} if a=3 then{sentencia if} begin{inicio de la sentencia if} writeln('presiona un caracter no numerico para salir');{imprimir en pantalla} end;{fin de la senencia if} writeln('cuantos numeros usaras');{imprimir en pantalla} readln(max);{leer la variable max} for tope:=1 to max do{ciclo for} begin{inicio del ciclo for} writeln('dame un numero');{imprimir en pantalla} readln(casilla[tope]);{leer vector} end;{fin del ciclo for} if a=1 then{sentencia if} begin{inicio de la sentenci if} writeln('que numero deseas insertar');{imprimir en pantalla} readln(casilla[tope]);{leer vector} tope:=tope+1;{valor de tope} for tope:=1 to tope do{ciclo for} begin{inicio del ciclo for} writeln(casilla[tope]);{imprimir vector}

end;{fin del ciclo for} end;{fin de la sentencia if} if a=2 then{sentencia if} begin{inicio de la sentecia if} d:=casilla[tope];{valor de d} tope:=tope-1;{valor de tope} for tope:=1 to tope do{ciclo for} begin{inicio del ciclo for} writeln(casilla[tope]);{imprimir vector} end;{fin del ciclo for} end;{fin de la sentencia if} until a=3;{fin del ciclo repeat} readln;{presionar enter para salir} end.{fin del programa}

14.

Colas.

Este temas es tambin un mtodo de tratamiento de datos colas usa el mtodo F.I.F.O. (First In First Out) el primero en entrar el primero en salir este tema es igualmente fcil que el anterior recomiendo igualmente observar el ejemplo y tratar de hacerlo por sus propios medios. program menu_colas;{nombre del programa} uses crt;{la biblioteca} type{declaracion del vector} casilla=array[1..100] of longint;{la variable vector declarado} var{declaracion de variables} a,b,c,final,max,frente:longint;{las variables y su tipo} vector:casilla; begin{inicio del programa} clrscr;{limpiar pantalla} repeat{inicio del ciclo repeat} writeln('que deseas hacer? 1)insertar 2)eliminar 3)salir');{imprimir en panatalla} readln(a);{leer a} writeln('cuantos numeros usaras?');{imprimir en pantalla} readln(max);{leer max} for b:=1 to max do{declaracion del ciclo for} begin {inicio del ciclo for} writeln('dame el numero');{imprimir en pantalla}

readln(vector[b]);{leer el vector} end;{fin del ciclo for} if a=1 then{sentencia if} begin{inicio de la sentencia if} writeln('que valor deseas agregar?');{imprimir en pantalla} readln(vector[b]);{leer el vector} b:=b+1;{valor de b} for b:=1 to b do{ciclo for} begin{inicio del ciclo for} writeln(vector[b]);{imprimir en pantalla} end;{fin del ciclo for} end;{fin del ciclo repeat} if a=2 then{sentencia if} begin{inicio de la sentencia if} for b:=2 to max do{ciclo for} begin{inicio del ciclo for} writeln(vector[b]);{imprimir en pantalla} end;{fin del ciclo for} end;{fin de la sentenci if} if a=3 then{sentencia if} begin{inicio de la sentenci if} writeln('escribe un caracter no numerico para salir men');{imprimir en pantalla} readln(c);{leer c} end;{fin del if} until a=3;{fin del ciclo repeat} readln;{presionar enter para salir} end.{fin del programa}

15.

Mtodos de ordenamiento Bubble sort.

El mtodo de ordenamiento bubble sort sirve para acomodar datos ya sea de mayor a menor o al revs siendo este mtodo de ordenamiento el mas simple y tardado a continuacin les pongo un ejemplo de uso del bubble sort: program ordena_un_vector_por_ordenacion_de_la_burbuja;{nomvre del programa} uses crt,dos;{las bibliotecas} type vector=array[1..100]of integer;{declaracion del vector} var lista:vector; i,f,auxiliar:integer; h,m,s,cs:word; begin{inicio del programa principal} clrscr;{limpiar pantalla} randomize; gettime(h,m,s,cs); writeln('la hora actual es :',h,':',m,':',s); for i:=1 to 100 do begin lista[i]:=random(100);{se crean numeros al azar entre 100 y 1} end; for i:=2 to 100 do{inicio del bubble sort} begin for f:=100 downto i do begin if lista[f-1] > lista[f] then begin auxiliar:=lista[f-1]; lista[f-1]:=lista[f]; lista[f]:=auxiliar; end; end; end;{fin del bubble sort} for i:=1 to 100 do begin writeln('el numero en al posicion ',i,' es: ',lista[i]);

delay(100); end; getTime(h,m,s,cs); writeln('la hora es:',h,m,s,cs); readln; end.{fin del programa}

16.

Quick sort.

El quick sort o el mtodo de ordenamiento rpido es el ms rpido de todos y lo que hace es tomar un valor al azar y pone los valores menores a, el de un lado y los mayores de otro y los junta al final a continuacin un ejemplo de su uso: program ordena_un_vector_por_quickshort;{inicio del programa} uses crt,dos;{las bibliotecas} type vector=array[1..100] of integer; mayor=array[1..100] of integer; menor=array[1..100] of integer;{declaracion de vectores} var pilamayor:mayor; pilamenor:menor;{declaracion de variables} i,top,izquierda,derecha,auxiliar,ini,fin,pos:integer; h,m,s,cs:word; band:boolean; lista:vector; procedure reduceinterativo(ini,fin,pos:integer);{procedimiento para ordenar el vector} begin izquierda:=ini; derecha:=fin; pos:=ini; band:=true; while band=true do begin while (lista[pos]<=lista[derecha]) and (pos<>derecha) do begin derecha:=derecha-1; end;

if pos=derecha then begin band:=false; end else begin auxiliar:=lista[pos]; lista[pos]:=lista[derecha]; lista[derecha]:=auxiliar; pos:=derecha; while (lista[pos] >= lista[izquierda]) and (pos<>izquierda) do begin izquierda:=izquierda+1; end; if pos=izquierda then begin band:=false; end else begin auxiliar:=lista[pos]; lista[pos]:=lista[izquierda]; lista[izquierda]:=auxiliar; pos:=izquierda; end; end; end; end;{fin del procedure} procedure interativo;{procedure para acomodar los numeros} begin top:=1; while top>0 do begin ini:=pilamenor[top]; fin:=pilamayor[top]; top:=top-1; reduceinterativo(ini,fin,pos);

if ini<(pos-1) then begin top:=top+1; pilamenor[top]:=ini; pilamayor[top]:=pos-1; end; if fin>(pos+1) then begin top:=top+1; pilamenor[top]:=pos+1; pilamayor[top]:=fin; end; end; end;{fin del procedure}

begin{inicio del programa principal} clrscr; randomize; gettime(h,m,s,cs); writeln('la hora actual es :',h,':',m,':',s,':',cs); for i:=1 to 100 do begin lista[i]:=random(100); end; interativo; for i:=1 to 100 do begin writeln(lista[i]); end; gettime(h,m,s,cs); writeln('la hora actual es:',h,':',m,':',s,':',cs); readln; end.{fin del programa principal}

17.

Registros.

Hasta ahora se ha visto como manejar gran cantidad de datos y como ordenarlos para este tema veremos otras instrucciones nuevas como la instruccin record donde pondremos variables del tipo y nombre que necesitemos pero haremos referencias a ellas mediante propiedades ejemplo: program menu_contactos;{nombre del programa} uses crt;{la libreria} type{declaracion del registro y las variables dentro de el} contacto=record nombre:string[100]; direccion:string[255]; cel:string[255]; end;{fin de la declaracion de el registro} contactos=array [1..100] of contacto;{vector} var{declracion de variables} a:char; lista:contactos; i,cuantos,b,c,d,e:integer;{las variables y su tipo} begin{inicio del programa} repeat{ciclo repeat} clrscr;{limpiar pantalla} writeln('que desehas hacer?');{imprimir en pantalla las opciones que tiene el usuario} writeln('1)agregar contacto 2)buscar contacto 3)eliminar contacto 4)reportes 5)salir'); readln(a);{le la opcion que escogio el usuario} if a='1' then{procedimiento en caso que el usuario eliga la primera opcion} begin writeln('cuantos contactos usaras'); readln(cuantos); for i:=1 to cuantos do{solicita al usuario los datos y los guarda en un vector} begin writeln('dame el nombre del contacto',i); readln(lista[i].nombre); writeln('dame la direccion del contacto',i); readln(lista[i].direccion); writeln('dame el numero de celular del contacto',i);

readln(lista[i].cel); end; end; if a='4' then{procedimiento en caso de que el usuario eliga la opcion 4} begin for i:=1 to cuantos do begin{imprime todos los datos dados por el usuario} writeln('el nombre del contacto ',i,' es:',lista[i].nombre); writeln('la direccion del contacto ',i,' es:',lista[i].direccion); writeln('el numero de cel del contacto ',i,' es',lista[i].cel); readln; end; end; if a='3' then{procedimiento en caso de que el usuario eliga la opcion 3} begin writeln('dame el nombre del contacto que deseas eliminar'); readln(b); c:=b+1; d:=b-1; for i:=1 to d do{imprime todos los contactos menos el eliminado} begin writeln('el nombre del contacto ',i,' es;',lista[i].nombre); writeln('la direccion del contacto ',i,' es:',lista[i].direccion); writeln('el numero de cel del contacto ',i,' es',lista[i].cel); end; for i:=c to cuantos do begin writeln('el nombre del contacto ',i,' es;',lista[i].nombre); writeln('la direccion del contacto ',i,' es:',lista[i].direccion); writeln('el numero de cel del contacto ',i,' es',lista[i].cel); readln; end; end; if a='2' then{procedimiento en caso de que el usuario eliga la opcion 2} begin writeln('dame el numero del usuario que deseas buscar'); readln(b); for i:=b to b do{busca entre todos los contactos al solicitado}

begin writeln('el nombre del contacto ',i,' es: ',lista[i].nombre); writeln('la direccion del contacto ',i,' es: ',lista[i].direccion); writeln('el celular del contacto ',i,' es: ',lista[i].cel); readln; end; end; until a='5';{fin del ciclo repeat} readln;{presionar enter para salir} end.{fin del programa} donde la variable contacto = a un registro donde tenemos variables de diferentes tipos y hacemos referencia a ellas por medio de propiedades como contacto.nombre donde contacto es registro y nombre una de sus propiedades y variables.

18.

Archivos secuenciales.

En este tema veremos como guardar los datos utilizados en un archivo .txt o un .dat o como usar los datos que estn dentro de una de ellos para manjar los con nuestro cdigo fuente ejemplo: program menu_contactos;{nombre del programa} uses crt;{la libreria} type{declaracion del registro y las variables dentro de el} contacto=record nombre:string[100]; direccion:string[255]; cel:string[255]; end;{fin de la declaracion de el registro} contactos=array [1..100] of contacto;{vector} var{declracion de variables} a:char; lista:contactos; i,cuantos,b,c,d,e:integer;{las variables y su tipo} begin{inicio del programa} repeat{ciclo repeat} clrscr;{limpiar pantalla} writeln('que desehas hacer?');{imprimir en pantalla las opciones que tiene el usuario}

writeln('1)agregar contacto 2)buscar contacto 3)eliminar contacto 4)reportes 5)salir'); readln(a);{le la opcion que escogio el usuario} if a='1' then{procedimiento en caso que el usuario eliga la primera opcion} begin writeln('cuantos contactos usaras'); readln(cuantos); for i:=1 to cuantos do{solicita al usuario los datos y los guarda en un vector} begin writeln('dame el nombre del contacto',i); readln(lista[i].nombre); writeln('dame la direccion del contacto',i); readln(lista[i].direccion); writeln('dame el numero de celular del contacto',i); readln(lista[i].cel); end; end; if a='4' then{procedimiento en caso de que el usuario eliga la opcion 4} begin for i:=1 to cuantos do begin{imprime todos los datos dados por el usuario} writeln('el nombre del contacto ',i,' es:',lista[i].nombre); writeln('la direccion del contacto ',i,' es:',lista[i].direccion); writeln('el numero de cel del contacto ',i,' es',lista[i].cel); readln; end; end; if a='3' then{procedimiento en caso de que el usuario eliga la opcion 3} begin writeln('dame el nombre del contacto que deseas eliminar'); readln(b); c:=b+1; d:=b-1; for i:=1 to d do{imprime todos los contactos menos el eliminado} begin writeln('el nombre del contacto ',i,' es;',lista[i].nombre); writeln('la direccion del contacto ',i,' es:',lista[i].direccion);

writeln('el numero de cel del contacto ',i,' es',lista[i].cel); end; for i:=c to cuantos do begin writeln('el nombre del contacto ',i,' es;',lista[i].nombre); writeln('la direccion del contacto ',i,' es:',lista[i].direccion); writeln('el numero de cel del contacto ',i,' es',lista[i].cel); readln; end; end; if a='2' then{procedimiento en caso de que el usuario eliga la opcion 2} begin writeln('dame el numero del usuario que deseas buscar'); readln(b); for i:=b to b do{busca entre todos los contactos al solicitado} begin writeln('el nombre del contacto ',i,' es: ',lista[i].nombre); writeln('la direccion del contacto ',i,' es: ',lista[i].direccion); writeln('el celular del contacto ',i,' es: ',lista[i].cel); readln; end; end; until a='5';{fin del ciclo repeat} readln;{presionar enter para salir} end.{fin del programa} como habrs notado use una sentencia que no se ha utilizado antes que es reset() la cual sirve para abrir un archivo externo sin borrar su contenido existen ms sentencias similares las pondr a continuacin en una tabla: Sentencia. Sintaxis. Efecto. Reset. Reset(archivo) Abre un archivo externo ya sea .txt .dat sin borrar su contenido pero si este archivo no existe no funcionara. Rewrite. Rewrite(archivo) Funciona para crear o usar un archivo externo ya sea .txt .dat si el archivo no existe lo crea pero si existe

borra el contenido que tiene. Assing. Assing(registro,archivo) Asigna los datos de un registro a un archivo ya sea .txt .dat para su so. Appened. Appened(archivo) Abre un archivo para agregarle datos Close. Close(archivo) Cierra un archivo externo ya sea .txt .dat es importante cerrar los archivos antes de terminar el cdigo. Nota: en este tema usare instrucciones como eof eoln como condiciones en los ciclos estas instrucciones quieren decir end of file y end of line tambin se puede usar un not antes de las instrucciones mencionadas ejemplo: while not eof do para que el ciclo se ejecute mientras no sea el fin del archivo mientras no sea el fin de la lnea puedes decidir entre un archivo .txt y un .dat cambiando la extencion .txt por un .dat.

Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que muestre cuantas veces se repite cada carcter del cdigo ASCII los caracteres deben ser ingresados por medio de un archivo .txt. Ejercicio 2: crear un programa que lea la frase hola de un archivo .txt y lo guarde en otro. Ejercicio 3: crear un programa que lea carcter por carcter de un archivo .txt y los muestre mientras corre el programa. Ejercicio 4: crear un programa que lea el contenido de un archivo .txt y los pase a otro en maysculas.

Posibles soluciones.
Ejercicio 1: program ultimo;{nombre del programa} uses crt;{la libreria} type{declaracion del vector} contador = array [1..257] of integer;

var{declaracion de variables} frase:text; palabra:char; c1:contador; i,f:longint; begin{inicio del programa} for i:=1 to 256 do begin c1[i]:=0; end; clrscr;{limpiar pantalla} assign(frase,'ec.txt');{assingo el archivo externo a una variable para manegarlo} reset(frase);{abre el archivo externo} while not eof(frase) do{mientras no sea el fin del archivo hacer} begin read(frase,palabra); i:= ord(palabra); c1[i]:=c1[i]+1;{lee letra por letra lo que hay en el archivo externo} write(palabra); end; close(frase);{cierra el archivo externo} for i:=1 to 225 do begin delay(100); {reinicia los valores del vector}

writeln('el caracter ',chr(i),' se repite: ',c1[i], 'veces');{este ciclo for muestra cuantas veces se repitieron los caracteres} end; readln; end.{fin del programa}

Ejercicio 2: program hola;{NOMBRE DEL PROGRAMA} uses crt; var {DECLARACION DE VARIABLES} frase,frase2:text; letra:char; begin{INICIO DEL PROGRAMA} clrscr;{LIMPIAR PANTALLA} assign(frase,'FRASE.txt');{ASIGNA EL ARCHIVO EXTERNO A UNA VARIABLE} assign(frase2,'salida.txt');{ASIGNA EL ARCHIVO EXTERNO A UNA VARIABLE} reset(frase);{ABRE EL ARCHIVO EXTERNO} rewrite(frase2);{ABRE EL ARCHIVO EXTERNO} while not eof(frase) do{MIENTRAS NO SEA EL FIN DEL ARCHIVO} begin while not eoln(frase) do{MIENTRAS NO SEA EL FIN DEL RENGLON} begin read(frase,letra);{LEER EL ARCHIVO EXTERNO LETRA POR LETRA} write(frase2,letra);{LO ESCRIBE EN EL OTRO ARCHIVO LETRA POR LETRA}

end;{FIN DEL PRIMER CICLO} readln(frase);{LEE EL PRIMER ARCHIVO} writeln(frase2);{LO ESCRIBE EN EL OTRO} end;{FIN} close(frase);{CIERRA EL ARCHIVO} close(frase2);{CIERRA EL ARCHIVO} readln;{PRESIONA ENTER PARA SALIR} end.{FIN DEL PROGRAMA}

Ejercicio 3: program leer_un_archivo_caracter_por_caracter;{NOMBRE DEL PROGRAMA} uses crt;{LA LIBRERIA} var{DECLARACION DE VARIABLES} palabraa:text; letra:char; i:longint; begin{INICIO DEL PROGRAMA} clrscr;{LIMPIAR PANTALLA} assign(palabraa,'palabra.txt');{ASIGNA EL ARCHIVO EXTERNO A UNA VARIABLE} reset(palabraa);{ABRE EL ARCHIVO EXTERNO} while not eof(palabraa) do{MIENTRAS NO SEA EL FIN DEL ARCHIVO HACER} begin{INICIO} read(palabraa,letra);{LEE EL ARCHIVO EXTERNO CARACTER POR CARACTER}

writeln(letra);{IMPRE EN LA PANTALLA CARCTER POR CARACTER} end;{FIN DEL CICLO} close(palabraa);{CIERRA EL ARCHIVO EXTERNO} readln;{PRESIONAR ENTER PARA SALIR} end.{FIN DEL PROGRAMA}

Ejercicio 4: program programa_que_copea_el_contenido_de_un_texto_a_otro_en_mayusculas;{NOMBRE DEL PROGRAMA} uses crt;{LA BIBLIOTECA} var{DECLARACION DE VARIABLES} frase,frase2:text; letra, a:char; begin{INICIO DEL PROGRAMA} clrscr;{LIMPIAR PANTALLA} assign(frase,'cuarto.txt');{ASIGNA EL ARCHIVO EXTERNO A UNA VARIABLE} assign(frase2,'s.txt');{ASIGNA EL ARCHIVO EXTERNO A UNA VARIBLE} reset(frase);{ABRIR EL PROGRAMA} rewrite(frase2);{ABRIR EL PROGRAMA} while not eof(frase) do{MIENTAS NO SEA EL FIN DEL ARCHIVO HACER} begin while not eoln(frase) do begin

read(frase,letra); letra:=UpCase(letra);{LEE , PASA A MAYUSCULA Y ESCRIBE EL TEXTO EN OTRO ARCHIVO} write(frase2,letra); end; readln(frase); writeln(frase2); end; close(frase);{CIERRA EL ARCHIVO EXTERNO} close(frase2);{CIERRA EL ARCHIVO EXTERNO} readln;{PRESIONAR ENTER PARA SALIR} end.{FIN DEL PROGRAMA}

19.

Archivos aleatorios.

Se les llama archivos aleatorios por que a diferencia del tema anterior en este podramos usar los datos del archivo de manera aleatoria por ejemplo si creamos una agenda con la funcin de buscar buscaremos lo que el usuario nos indique y podra no ser el primer contacto ejemplo: program agenda; uses crt; type contactos=record nombre:string[100]; direccion:string[255]; cel:string[255]; end; lista = array [1..100] of contactos; var texto:char; archivo:text; i,f,c,d,e:integer; decicion:char;

contacto:lista; begin assign(archivo,'hhh.txt'); append(archivo); repeat clrscr; writeln('que deseas hacer?'); writeln('1)agregar contactos 2)reporte 3)buscar 4)eliminar 5)salir'); readln(decicion); if decicion='1' then begin writeln('cuantos contactos usaras?'); readln(c); for i:=1 to c do begin writeln('escribe el nombre del contacto ',i); readln(contacto[i].nombre); writeln('escribe la direccion ',i); readln(contacto[i].direccion); writeln('escribe el numero de celular ',i); readln(contacto[i].cel); end; for i:=1 to c do begin writeln(archivo,contacto[i].nombre); writeln(archivo,contacto[i].direccion); writeln(archivo,contacto[i].cel); end; end; if decicion='2' then begin for i:=1 to c do begin writeln('el nombre del contacto ',i,' es ',contacto[i].nombre); writeln('la direccion del contacto ',i,' es ',contacto[i].direccion);

writeln('el celular del contacto ',i,' es ',contacto[i].cel); readln; end; end; if decicion='3' then begin writeln('dame el numero del contacto que deseas buscar'); readln(f); for i:=f to f do begin writeln(contacto[i].nombre); writeln(contacto[i].direccion); writeln(contacto[i].cel); readln; end; end; if decicion='4' then begin writeln('dame el numero del contacto que deseas eliminar'); readln(f); d:=f-1; e:=f+1; for i:=1 to d do begin writeln(contacto[i].nombre); writeln(contacto[i].direccion); writeln(contacto[i].cel); end; for i:=e to c do begin writeln(contacto[i].nombre); writeln(contacto[i].direccion); writeln(contacto[i].cel); readln; end; end;

until decicion='5'; close(archivo); readln; end.

Ejercicios recomendados y posibles soluciones.


Ejercicio 1: crear un programa que almacene los datos de una tienda departamental.

Posibles soluciones.
program tienda;{titulo del programa} uses crt; {la biblioteca} type articulo = record {declaracion del registro} na:string [50]; pa:real; cae:integer; end; articulos =array[1..100] of articulo;{un vector del registro} var{declaracion de variables} lista:articulos; letra,opc:char; {las variables y su tipo} i,f,c,d,e:integer; archivo:text; begin{inicio del programa} assign(archivo,'listado.txt');{asigno el archivo externo a una variable} textbackground(red); textcolor(green); repeat{inicio del ciclo repeat} clrscr;{limpiar pantalla} writeln('que deseas hacer?'); writeln('1)agregar articulo 2)reporte de articulos 3)buscar un articulo 4)eliminar 5)salir'); readln(opc); {solicito la decicion del usuario} if opc='1' then begin append(archivo); writeln('cuantos articulos agregaras?'); readln(c);

for i:=1 to c do begin writeln('escribe el nombre del articulo'); readln(lista[i].na); {se agregan articulos al vector y al archivo externo} writeln(archivo,lista[i].na); writeln('escribe el precio del articulo'); readln(lista[i].pa); writeln(archivo,lista[i].pa); writeln('escribe la cantidad de existencia del articulo'); readln(lista[i].cae); writeln(archivo,lista[i].cae); end; close(archivo); end; if opc='2' then begin for i:=1 to c do begin writeln('el nombre del articulo ',i,' es ',lista[i].na); {muestra el reporte de todos los articulos} writeln('el nprecio del articulo es ',i,' es ',lista[i].pa); writeln('la cantidad de ese articulo en la tienda es ',lista[i].cae); readln; end; end; if opc='3' then begin writeln('dame el numero del articulo que deseas buscar'); readln(e); for i:=e to e do begin writeln('el nombre del articulo ',i,' es ',lista[i].na); writeln('el precion del articulo ',i,' es ',lista[i].pa); writeln('la cantidad de existencia de ese producto es ',lista[i].cae); readln; end; end; {busca el archivo que quiere el usuario}

if opc='4' then begin writeln('dame el numero del articulo que deseas eliminar'); readln(f); e:=f-1; d:=f+1; rewrite(archivo); for i:=1 to e do begin writeln('el nombre del articulo ',i,' es ',lista[i].na); writeln(archivo,lista[i].na); writeln('el precion del articulo ',i,' es ',lista[i].pa); writeln(archivo,lista[i].pa); writeln('la cantidad de existencia de ese producto es ',lista[i].cae); writeln(archivo,lista[i].cae); readln; end; {elimina una articulo del vector y del archivo} for i:=d to c do begin writeln('el nombre del articulo ',i,' es ',lista[i].na); writeln(archivo,lista[i].na); writeln('el precion del articulo ',i,' es ',lista[i].pa); writeln(archivo,lista[i].pa); writeln('la cantidad de existencia de ese producto es ',lista[i].cae); writeln(archivo,lista[i].cae); readln; end; close(archivo); end; until opc='5'; {fin del ciclo repeat} readln;{presionar enter para salir} end.{fin del programa}

20.

Bsqueda de archivos (secuenciales).

En este tema veremos cmo buscar datos en archivos externos por mtodo secuencial sea recorriendo todos los datos hasta encontrar el deseado a continuacin muestro un ejemplo: program programa_que_busca_secuensial_mente;{NOMBRE DEL PROGRAMA} uses crt; {LA BIBLIOTECA} type vector=array[1..20]of integer; {DECLARACION DEL VECTOR} var lista:vector; i,f,auxiliar,buscado:integer;{DECLARACION DE VARIABLES} opc:char; begin{INICIO DEL PROGRAMA} writeln('deseas dar los 20 datos o lo creo aleatoriamente? 1)si 2)no'); readln(opc); if opc='1' then{DECIDE SI ES USUSRI QUIERE DAR LOS NUMEROS SE CREAN AL AZAR} begin for i:=1 to 20 do begin readln(lista[i]); end; end; if opc='2'then begin for i:=1 to 20 do{SE CREAN LOS NUMEROS AL SI EL USUARIO LO ELIJE ASI} begin lista[i]:=random(100); end; end; for i:=2 to 20 do begin for f:=20 downto i do begin if lista[f-1] > lista[f] then{SE ORDENAN LOS VALORES POR EL METODO DE LA BURBUJA} begin

auxiliar:=lista[f-1]; lista[f-1]:=lista[f]; lista[f]:=auxiliar; end; end; end; writeln('los valores estan acomodados que numero deseas buscar'); {LEE EL VALOR A BUSCAR} readln(buscado); for i:=1 to 20 do{BUSCA EL VALOR INDICADO POR EL USUARIO EN TODO EL VECTOR} begin if lista[i]=buscado then begin writeln('el valor fue encontrado en la posicion:',i); end; end; readln; end.{FIN DEL PRIGRAMA}

21.

Bsqueda de archivos (binaria).

En este tema mostrare como hacer bsquedas en archivos por el mtodo binario en este mtodo se separan los datos en 2 partes y se busca hacia arriba o abajo segn se necesite ejemplo: program busqueda_binaria;{NOMBRE DEL PROGRAMA} uses crt;{LA BIBLIOTECA} type vector=array[1..100]of integer;{DECLARACION DEL VECTOR} var lista:vector; central,i,f,primero,ultimo,auxiliar:integer;{DECLARACION DE VARIABLES} opc:char; encontrado:boolean; begin{INICIO DEL PROGRAMA} clrscr; randomize;

writeln('deseas darme los 20 valores o los creo al azar? 1)deseo agregarlos 2)crealos al azar'); readln(opc);{SOLICITO AL USUARIO SI QUIERE ESCRIBIR LOS NUMEROS O LOS CREO ALEATORIA MENTE} if opc='2' then begin for i:=1 to 20 do begin lista[i]:=random(100); end; end; if opc='1' then begin for i:=1 to 20 do begin readln(lista[i]); end; end; for i:=2 to 20 do{ORDENO LOS VALORES POR EL METODO DE LA BURBUJA} begin for f:=20 downto i do begin if lista[f-1] > lista[f] then begin auxiliar:=lista[f-1]; lista[f-1]:=lista[f]; lista[f]:=auxiliar; end; end; end; writeln('los valores ahora estan acomodados que valor deseas buscar?'); readln(f);{SOLICITO EL VALOR A BUSCAR} primero:=1; ultimo:=20;encontrado:=false; while (primero<=ultimo) or (encontrado=false) do{CICLO QUE HACE LA BUSQUEDA BINARIA} begin central:=(primero+ultimo) div 2; if f = lista[central] then

begin encontrado:=true; end else if f > lista[central] then begin primero:=central+1; end else begin primero:=central-1; end; end; if encontrado=true then begin writeln('el elemento buscado se encontro en la posicion:',central); end else begin writeln('el elemento no se encontro'); end; readln; end.{FIN DEL PROGRAMA}

Ejercicio recomendado final y posible solucion.


Ejercicio: crear un programa que lea nmeros de 1 ms cifras de un archivo .txt y los escriba en otro archivo .txt en orden ascendente.

Posible solucin.
program examen; uses crt; type vector=array[1..100]of integer; var vec:vector; i,j,aux,f,d:integer; entrada,salida:text; frase,temporal:string; begin clrscr; assign(entrada,'num.txt'); assign(salida,'ohus.txt'); reset(entrada); rewrite(salida); d:=1; while not eof(entrada) do begin read(entrada,frase); end; for i:=1 to length(frase) do begin if frase[i]=' 'then begin j:=j+1; temporal:=copy(frase,d,i-d); val(temporal,vec[j],aux); d:=i; end; end; j:=j+1; temporal:=copy(frase,d,length(frase)-d+1);

val(temporal,vec[j],aux); for i:=2 to j do begin for f:=j downto i do begin if vec[f-1]>vec[f] then begin aux:=vec[f-1]; vec[f-1]:=vec[f]; vec[f]:=aux; end; end; end; for i:=1 to j do begin write(salida,vec[i]); write(salida,' '); end; close(entrada); close(salida); end.

Comentarios finales.
Espero te haya sido de ayuda este manual de turbo pascal si tienes alguna duda puedes escribir a mi correo: Ozmar_11@hotmail.com o comentar en el blog tambin puedes poner un comentario de agradecimiento en el blog: http://turbopasc.blogspot.mx sin ms que decir buena suerte.

S-ar putea să vă placă și