Curso turbo pascal pdf
Tambin hay una forma de solucionarlo: cuando vamos a realizar varias operaciones sobre los campos de un mismo registro record , empleamos la orden with, with con la que el programa anterior quedara. En este caso tenemos un nuevo bloque en el cuerpo del programa, delimitado por el "begin" y el "end" situados ms a la derecha, y equivale a decir "en toda esta parte del programa me estoy refiriendo a la variable dato". As, podemos nombrar los campos que queremos modificar o escribir, sin necesidad de repetir a qu variable pertenecen.
Nota: aqu vuelve a aparecer la escritura indentada: indentada para conseguir una mayor legibilidad, escribimos un poco ms a la derecha todo lo que depende de la orden "with". No es algo obligatorio, pero s recomendable. Y aun hay ms sobre registros. Existe una posibilidad extra, conocida como "registros variantes", que veremos ms adelante. Estos tipos bsicos de datos se pueden "relacionar relacionar" relacionar entre s.
Por ejemplo, podemos usar un registro record para guardar los datos de cada uno de nuestros amigos, y guardarlos todos juntos en un array de registros.
Todo esto ya lo iremos viendo. Por cierto, si alguien ve un cierto parecido entre un string y un array, array tiene razn: un string no es ms que un "array de chars". De hecho, la definicin original de "string[x]" en Pascal estndar era algo as como "packed array [ Ejemplo 1: Cambiar el valor de una variable. Ejemplo 2: Sumar dos nmeros enteros. Ejemplo 3: Media de los elementos de un vector. Como todava llevamos pocos conocimientos acumulados, la cosa se queda aqu, pero con la siguiente leccin ya podremos realizar operaciones matemticas algo ms serias, y comparaciones lgicas.
Fcil, no? Pedimos dos nmeros, guardamos en una variable su suma, y finalmente mostramos el valor de esa suma. Este es un programa nada optimizado, para que se adapte a los conocimientos que tenemos por ahora y se vea cmo se manejan los Arrays. Admite muchas mejoras, que iremos viendo ms adelante. Por si alguien no ha trabajado con vectores, me salto las explicaciones matemticas serias: la idea es simplemente que vamos a hallar la media de una serie de nmeros. Como novedades sobre la leccin, incluye la forma de dejar una lnea de pantalla en blanco con writeln , o de definir de una sola vez varias variables.
Las operaciones matemticas se vern con ms detalle en la prxima leccin. Ya hemos visto por encima las dos formas ms habituales de mostrar datos en pantalla, con "write" o "writeln", y de aceptar la introduccin de datos por parte del usuario, con "readln" o "read", que no efecta un retorno de carro despus de leer los datos.
Veamos ahora su manejo y algunas de sus posibilidades con ms detalle:. Para mostrar datos, tanto en pantalla como en impresora, se emplean write y writeln. Ambas rdenes pueden escribir tipos casi de cualquier clase: cadenas de texto, nmeros enteros o reales, etc. No podremos escribir directamente arrays, records, ni muchos de los datos definidos por el usuario. Cuando se desee escribir varias cosas en la misma lnea, lnea todas ellas se indican entre un mismo parntesis, y separadas por comas.
Un comentario para quien ya haya programado en Basic: Basic en la mayora de las versiones de este lenguaje si separamos varios datos mediante comas en una sentencia PRINT, se vern separados en pantalla por un cierto nmero de.
En ese aspecto, la "," de Pascal recuerda ms al ";" de Basic, ya que escribe los datos uno a continuacin del otro. De hecho, si fueran nmeros, ni siquiera apareceran espacios entre ellos tambin al contrario que en la mayora de versiones de Basic :. Se puede especificar la anchura de lo escrito, mediante el smbolo de dos puntos : y la cifra que indique la anchura.
Como ejemplos:. Tu edad es: ',edad:2 ; end. En el caso de una cadena de texto, la anchura que se indica es la que se tomar como mnima: si el texto es mayor no se "parte", pero si es menor, se rellena con espacios por la izquierda hasta completar la anchura deseada.
Igual ocurre con los nmeros: si es ms grande que la anchura indicada, no se "parte", sino que se escribe completo. Si es menor, se rellena con espacios por la izquierda. Los decimales s que se redondean al nmero de posiciones indicado:. Si no indicamos formato, se usa notacin cientfica exponencial. Si la anchura es mayor, aade espacios por la izquierda. Si es menor, no se trunca el nmero. Si el nmero de decimales es mayor, se aaden ceros. Si ste es menor, se redondea. Si indicamos formato pero no decimales, sigue usando notacin exponencial, pero lo ms compacta que pueda, tratando de llegar al tamao que le indicamos.
En este programa ha aparecido tambin otra cosa nueva: los comentarios: comentarios. Un comentario es algo el compilador va a ignorar, como si no hubiramos escrito nada, y que nosotros incluimos dentro del programa para que nos resulte ms legible o para aclarar lo que hace una lnea o un conjunto de lneas. Como se ve en el ejemplo, los comentarios pueden ocupar ms de una lnea. A partir de ahora, yo emplear los comentarios para ayudar a que se entienda un poco ms el desarrollo del programa, y tambin para incluir una cabecera al principio, que indique el cometido del programa y los compiladores con los que ha sido comprobado.
En la prctica, es muy importante que un programa est bien documentado. Cuando se trabaja en grupo, la razn es evidente: a veces es la nica forma de que los dems entiendan nuestro trabajo. En estos casos, el tener que dar explicaciones "de palabra" es contraproducente: Se pierde tiempo, las cosas se olvidan Tampoco es cmodo distribuir las indicaciones en ficheros aparte, que se suelen extraviar en el momento ms inoportuno.
Lo ideal es que los comentarios aclaratorios estn siempre en el texto de nuestro programa. Pero es que cuando trabajamos solos tambin es importante, porque si releemos un programa un mes despus de haberlo escrito, lo habitual es que ya no nos acordemos de lo que haca la variable X, de por qu la habamos definido como "Record" y no como "Array", por qu dejbamos en blanco la primera ficha o por qu empezbamos a ordenar desde atrs.
Por cierto, que de ahora en adelante, como ya entendemos eso de los comentarios, los usar para indicar las versiones en las que est comprobado cada uno de los programas, y para explicar un poco lo que hace.
Una observacin: si queremos escribir las comillas o algn smbolo extrao que no aparezca en el teclado como parte de un texto, podemos hacerlo de varias formas. En Turbo Pascal existe tambin una notacin alternativa, que es usar en vez de CHR, de manera que podramos escribir write Y para el caso particular de las comillas, hay una posibilidad extra: si dentro de una orden write ponemos dos comillas seguidas, el compilador entender que queremos escribir una de ellas.
Ejercicio propuesto: Crea un programa que pida al usuario dos nmeros reales y muestre en pantalla el resultado de su divisin, con dos cifras decimales. Para tomar datos del usuario, usuario la forma ms directa es empleando readln, readln que toma un texto o un nmero y asigna este valor a una variable.
No avisa de lo que est haciendo, as que normalmente convendr escribir antes en pantalla un mensaje que indique al usuario qu esperamos que teclee: writeln 'Por favor, introduzca su nombre' ; readln nombre ;. Si queremos dar un valor a una variable numrica y pulsamos " 23" un espacio delante del nmero le dar un valor 0.
A pesar de estos inconvenientes, es la forma estndar de leer datos del teclado, as vamos a ver un ejemplo de cmo usarla:. Tu edad es:',edad:2 ; end. Ms adelante, veremos que existen formas mucho ms verstiles y cmodas de leer datos a travs del teclado, en el mismo tema en el que veamos cmo se maneja la pantalla en modo texto desde Pascal Ejercicio propuesto: Crea un programa que pida al usuario su nombre y su apellido y luego los escriba al revs, separados por una coma.
Por ejemplo si el usuario introduce Nacho como nombre y Cabanes como apellido, se escribir Cabanes, Nacho. En Pascal contamos con una serie de operadores para realizar sumas, restas, multiplicaciones y otras operaciones no tan habituales.
Algunos de ellos ya los habamos comentado. Vamos a verlos ahora con ms detalle. Son los siguientes:. Si 10 y 3 son nmeros enteros, qu ocurre con su divisin? En otros lenguajes como C, el resultado sera 3, la parte entera de la divisin. En Pascal no es as: el resultado sera 3. Si queremos la parte entera de la divisin, deberemos utilizar div.
El signo - se puede usar tambin para indicarnegacin negacin. Supongo que no habr ninguna duda. O:- De todos modos, experimentad. Y ojo con el formato de "mod", porque se parece bastante poco como se dira "el resto de dividir e1 entre e2" a la notacin "e1 mod e2".
Aun as, todo fcil, verdad? Ejercicio propuesto: Crea un programa que pida al usuario dos nmeros reales y muestre cuando es el resultado de su divisin slo la parte entera y el resto de la divisin. Por ejemplo, si se indican los nmeros 21 y 5, el programa debera responder que el resultado de la divisin es 4 y que el resto es 1. Esto lo veremos ms adelante, en el tema 9. Ejercicio propuesto: Crea un programa que pida al usuario su nombre y su apellido, cree una cadena formada por el apellido, una coma y el nombre por ejemplo si el usuario introduce Nacho como nombre y Cabanes como apellido, la cadena contendr "Cabanes, Nacho" , y finalmente escriba esa cadena.
En la prxima leccin veremos cmo hacer comparaciones del estilo de "si A es mayor que B y B es mayor que C", y empezaremos a utilizar variables de este tipo, pero vamos a mencionar ya eso del "y". Podremos encadenar proposiciones de ese tipo si A y B entonces C con: and y , or , not no y los operadores relacionales,que relacionales se usan para comparar y son los siguientes:. No haremos ejercicios todava sobre estos operadores, sino que los aplicaremos en el siguiente tema, cuando aprendamos a comprobar condiciones.
Los operadores "and", "or" y "not", junto con otros, se pueden utilizar tambin para operaciones entre bits de nmeros enteros:. Operador Operacin not Negacin and Producto lgico or Suma lgica xor Suma exclusiva shl Desplazamiento hacia la izquierda shr Desplazamiento a la derecha. Explicar para qu sirven estos operadores implica conocer qu es eso de los bits, cmo se pasa un nmero decimal a binario, etc. Supondr que se tienen las nociones bsicas, y pondr un ejemplo, cuyo resultado comentar despus:.
Y qu utilidades puede tener todo esto? Posiblemente, ms de las que parece a primera vista. Por ejemplo: desplazar a la izquierda es una forma muy rpida de multiplicar por potencias de dos; desplazar a la derecha es dividir por. Ejercicio propuesto: Crea un programa que pida al usuario un nmero entero, le aplique una operacin XOR 21 y muestre el resultado, aplique nuevamente una operacin XOR 21 sobre dicho resultado y muestre el valor final obtenido.
Para terminar este tema, debemos conocer la precedencia o prioridad prioridad de los operadores:. Y queda como ejercicio hallar y tratar de entender el resultado de este programita:.
Vamos a ver cmo podemos evaluar condiciones desde Pascal. La primera construccin que trataremos es if El formato es "if if condicion then sentencia". Todo claro, verdad? La "sentencia" se ejecutar si ese valor es "cierto" TRUE. Este valor puede ser tanto el resultado de una comparacin como hemos hecho en el ejemplo anterior , como una propia variable booleana forma que veremos a continuacin.
Ejercicio propuesto: Crea un programa que pida al usuario un nmero entero y diga si ha tecleado el nmero 5 o ha tecleado un nmero distinto. Ejercicio propuesto: Crea un programa que pida al usuario un nmero real y diga si es mayor de Ejercicio propuesto: Crea un programa que pida al usuario un nmero entero y diga si es par pista: habr que comprobar el resto de la divisin entre 2.
Cuando veamos en el prximo tema las rdenes para controlar el flujo del programa, seguiremos descubriendo aplicaciones de las variables booleanas, que muchas veces uno considera "poco tiles" cuando est aprendiendo.
La "sentencia" que sigue a "if.. Nota: nuevamente, hemos empleado la escritura indentada para intentar que el programa resulte ms legible: los pasos que se dan si se cumple la condicin aparecen ms a la derecha que el resto, para que resulten ms fciles de identificar. Ejercicio propuesto: Crea un programa que pida al usuario un su nombre. Slo si ese nombre es "Juan", deber entonces pedirle una contrasea, y en caso de que la contrasea sea "", le responder diciendo "Bienvenido!
Tambin podemos indicar lo que queremos que se haga si no se cumple la condicin. Un detalle importante que conviene tener en cuenta es que antes del "else" no debe haber un punto y coma, porque eso indicara el final de la sentencia "if Ejercicio propuesto: Crea un programa que pida al usuario un nmero real y diga si ha tecleado el nmero 5 o ha tecleado un nmero distinto, usando "else".
Ejercicio propuesto: Crea un programa que pida al usuario un nmero entero y diga si es par o es impar. Las sentencias "if Ejercicio propuesto: Crea un programa que pida al usuario un nmero entero y diga si es mayor de 10, es menor de 10 o es exactamente Ejercicio propuesto: Crea un programa que pida al usuario dos nmeros reales y que diga si son iguales, o, en caso contrario, diga cual es el mayor de los dos.
Si se deben cumplir varias condiciones a la vez, podemos enlazarlas con "and". Si se pueden cumplir varias, usaremos "or" o. Para negar, "not" no :. Ejercicio propuesto: Crea un programa que pida al usuario un nmero entero y diga si es par y a la vez mltiplo de 3.
Ejercicio propuesto: Crea un programa que pida al usuario dos nmeros reales y diga si ambos positivos. Pero cuando queremos comprobar entre varios posibles valores, valores sera muy pesado tener que hacerlo con muchos "if" seguidos o encadenar muchos con "and" u "or".. Hay una alternativa que resulta mucho ms cmoda: la orden case. Como ltimo comentario: la "expresin" debe pertenecer a un tipo de datos con un nmero finito de elementos, como "integer" o "char", pero no "real".
Y como se ve en el ejemplo, los "casos casos" casos posibles pueden ser valores nicos, varios valores separados por comas, o un rango de valores separados por.. Ejercicio Ejercicio propuesto: Crea un programa que pida al usuario un nmero entero del 1 al 3, y escriba en pantalla "Uno", "Dos", "Tres" o "Nmero incorrecto" segn corresponda. Vamos a ver cmo podemos crear bucles, bucles es decir, partes del programa que se repitan un cierto nmero de veces.
Segn cmo queramos que se controle ese bucle, tenemos tres posibilidades, posibilidades que vamos a comentar en primer lugar:. La diferencia entre estos dos ltimos es que "while" comprueba la condicin antes de repetir las dems sentencias, por lo que puede que estas sentencias ni siquiera se lleguen a ejecutar, si la condicin de entrada es falsa.
En "repeat", la condicin se comprueba al final, de modo que las sentencias intermedias se ejecutarn al menos una vez. Se podra traducir por algo como "desde que la variable valga ValorInicial hasta que valga ValorFinal" y en cada pasada, su valor aumentar en una unidad.
Ejercicio propuesto: Crea un programa que muestre los nmeros del 10 al 15, cada uno en una lnea. Ejercicio propuesto: Crea un programa que muestre los nmeros del 5 al 20, todos ellos en la misma lnea, separados por espacios en blanco.
Ejercicio propuesto: Crea un programa que escriba 10 veces "Hola" en la misma lnea. Los bucles "for" se pueden enlazar uno dentro de otro, de modo que podramos escribier las tablas de multiplicar del 1 al 5, dando 5 pasos, cada uno de los cuales incluye otros 10, as:. Ejercicio propuesto: Crea un programa que escriba tres veces seguidas los nmeros del 1 al 3. Ejercicio propuesto: Crea un programa que escriba 3 lneas, cada una de las cuales contendr 4 veces la palabra "Hola".
Hasta ahora hemos visto slo casos en los que despus de "for" haba un nica sentencia. Qu ocurre si queremos repetir ms de una orden? As, vamos a mejorar el ejemplo anterior haciendo que deje una lnea en blanco entre tabla y tabla:. Recordad, como vimos, que es muy conveniente usar laescritura escritura indentada, indentada que en este caso ayuda a ver dnde empieza y termina lo que hace cada "for" Una observacin: para "contar" no necesariamente hay que usar nmeros, nmeros tambin podemos contar con letras:.
Como ltimo comentario: con el bucle "for", tal y como lo hemos visto, slo se puede contar en forma creciente y de uno en uno. Para contar de forma decreciente, decreciente se usa "downto" en vez de "to".
Ejercicio propuesto: Crea un programa que escriba las letras de la B a la M. Ejercicio propuesto: Crea un programa que escriba las letras de la Z a la A de forma descendente. Ejercicio propuesto: Crea un programa que escriba los nmeros del 10 al 1 de forma descendente.
Para contar de dos en dos por ejemplo , hay que buscarse la vida: multiplicar por dos o sumar uno dentro del cuerpo del bucle, etc Ejercicio propuesto: Un programa que escriba la secuencia de nmeros 2, 4, 6, Ejercicio propuesto: Un programa que escriba la secuencia de nmeros 6, 5, 4, Ejercicio propuesto: Un programa que escriba la secuencia de nmeros 3, 5, 7, Ejercicio propuesto: Un programa que escriba la secuencia de nmeros 12, 10, 8, Ejercicio propuesto: Crea un programa que sume dos vectores, cuyos componentes indicar el usuario.
Por ejemplo, la suma de 1,2,3 y 7,11,-1 sera 8,13,2. Ejercicio propuesto: Crea un programa que halle el producto escalar dos vectores, cuyos componentes indicar el usuario.
Ejercicio propuesto: Crea un programa que multiplique dos matrices. Ejercicio propuesto: Para los ms osados y que conozcan el problema , un programa de resolucin de sistemas de ecuaciones por Gauss. Vimos como podamos crear estructuras repetitivas con la orden "for", y comentamos que se poda hacer tambin con "while..
Vamos a ver estas dos con ms detalle:. En el ejemplo anterior, slo se entra al bloque begin-end una sentencia compuesta si la primera palabra es correcta no es una lnea en blanco. Entonces escribe su longitud, pide la siguiente frase y vuelve a comprobar que es correcta.
Como comentario casi innecesario, length es una funcin que nos dice cuantos caracteres componen una cadena de texto. Si ya de principio la condicin es falsa, falsa entonces la sentencia no se ejecuta ninguna vez, como pasa en este ejemplo:. Ejercicio propuesto: Crea un programa vaya sumando los nmeros que el usuario introduzca, y mostrando dicha suma, hasta que introduzca el nmero 0, usando "while". Ejercicio propuesto: Crea un programa que pida al usuario su contrasea. Deber terminar cuando introduzca como contrasea la palabra "acceso", pero volvrsela a pedir tantas veces como sea necesario.
Ejercicio propuesto: Crea un programa que escriba en pantalla los nmeros del 1 al 10, usando "while". Ojo con eso: es un grupo de sentencias, sentencias no slo una, como ocurra en "while", de modo que ahora no necesitaremos "begin" y "end" para crear sentencias compuestas.
El conjunto de sentencias se ejecutar al menos una vez, vez porque la comprobacin se realiza al final. Como ltimo detalle, de menor importancia, no hace falta terminar con punto y coma la sentencia que va justo antes de "until", al igual que ocurre con "end".
Ejercicio propuesto: Crea un programa que pida nmeros positivos al usuario, y vaya calculando la suma de todos ellos terminar cuando se teclea un nmero negativo o cero , usando "repeat". Ejercicio propuesto: Crea un programa que escriba en pantalla los nmeros pares del 26 al 10 descen diendo , usando "repeat". Ejercicio propuesto: Crea un programa que pida al usuario su nombre de usuario y su contrasea, y no le permita seguir hasta que introduzca como nombre "yo" y como contrasea "acceso", usando "repeat".
Ejercicio propuesto: Mejorar el programa de la clave de acceso con "while" 6. Ejercicio propuesto: Mejorar el programa de la clave de acceso con "repeat" 6. Ejercicio propuesto: Mejorar ms todava el programa de la clave de acceso con "while", para que slo haya tres intentos. Por cierto, si alguien viene de Basic puede que se pregunte "Y mi goto? Ser un programa de adivinar nmeros: un primer usuario deber introducir un nmero que un segundo usuario deber adivinar. Tambin deber indicar cuantos intentos va a permitir que tenga.
Entonces se borra la pantalla, y se comienza a preguntar al segundo usuario qu nmero cree que es. Se le avisar si se pasa o se queda corto. El juego termina cuando el segundo usuario agote todos sus intentos o acierte el nmero propuesto. Ms adelante podrs encontrar un ejemplo ms desarrollado: el juego del ahorcado, como parte del tema Cuando desarrollamos un programa, nos podemos encontrar con que hay variables que realmente "no varan" a lo largo de la ejecucin de un programa, sino que su valor es constante.
Hay una manera especial de definirlas, que es con el especificador "const const", const que tiene el formato. Estas constantes se manejan igual que variables como las que habamos visto hasta hora, slo que no se puede cambiar su valor.
As, es valido hacer. Las constantes son mucho ms prcticas de lo que puede parecer a primera vista especialmente para quien venga de lenguajes como Basic, en el que no existen -en el Basic "de siempre", puede que s existan en los ltimas versiones del lenguaje-. Me explico con un ejemplillo:. Supongamos que estamos haciendo nuestra agenda en Pascal ya falta menos para que sea verdad , y estamos tan orgullosos de ella que queremos que en cada pantalla de cada parte del programa aparezca nuestro nombre, el del programa y la versin actual.
Si lo escribimos "de nuevas" cada vez, adems de perder tiempo tecleando ms, corremos el riesgo de que un da queramos cambiar el nombre ya no se llamar "Agenda" sino "SuperAgenda" ;- pero lo hagamos en unas partes s y en otras no, etc. O si queremos cambiar la anchura de cada dato que guardamos de nuestros amigos, porque el espacio para el nombre nos haba quedado demasiado escaso, tendramos que recorrer todo el programa de arriba a abajo, con los mismos problemas, pero esta vez ms graves an, porque puede que intentemos grabar una ficha con una tamao y leerla con otro distinto Pues definir todo ese tipo de datos como constantes al principio del programa, de modo que con un vistazo a esta zona podemos hacer cambios globales:.
Las declaraciones de las constantes se hacen antes del cuerpo del programa principal, y generalmente antes de las declaraciones de variables:. NumFichas ] of string; begin Ejercicio propuesto: Modificar el programa de adivinar nmeros apartado 6. El identificador "const" tiene tambin en Turbo Pascal otro uso menos habitual: definir lo que se suele llamar constantes con tipo, tipo que son variables normales y corrientes, pero a las que damos un valor inicial antes de que comience a ejecutarse el programa.
Se usa. As, volviendo al ejemplo de la clave de acceso, podamos tener una variables "intentos" que dijese el nmero de intentos. Hasta ahora habramos hecho. Pero si se nos da el caso de que vemos por el nombre que es alguien de confianza, que puede haber olvidado su clave de acceso, quiz nos interese permitirle 5 o ms intentos.
Qu hacemos? Ya no podemos usar "const" porque el valor puede variar, pero por otra parte, siempre comenzamos concediendo 3 intentos, hasta comprobar si es alguien de fiar. Conclusin: podemos hacer. Insisto: a efectos de manejo, una "constante con tipo" es exactamente igual que una variable, variable con las ventajas de que est ms fcil de localizar si queremos cambiar su valor inicial y de que el compilador optimiza un poco el cdigo, haciendo el programa unos bytes ms pequeo. El "tipo" de una variable es lo que determina qu clase de valores podremos guardar en ella.
Para nosotros, es lo que indicamos junto a su nombre cuando la declaramos. Por ejemplo,. Si queremos definir una de las fichas de lo que ser nuestra agenda, tambin haramos:. Tampoco hay ningn problema con esto, verdad?
Y si podemos utilizar variables creando los tipos "en el momento", como en el caso anterior, para qu necesitamos definir tipos? Vamos a verlo con un ejemplo.
Supongamos que vamos a tener ahora dos variables: una "ficha1" que contendr el dato de la ficha actual y otra "ficha2" en la que almacenaremos datos temporales. Veamos qu pasa Qu hara este programa? Es fcil de seguir: define dos variables que van a guardar la misma clase de datos. Da valores a cada uno de los datos que almacenar una de ellas.
Despus hacemos que la segunda valga lo mismo que la primera, e imprimimos el nombre de la segunda. Aparecer escrito "Pepe" en la pantalla, verdad? Pues no! Es decir: las hemos definido para que almacene la misma clase de valores, pero no son del mismo tipo. Pero surge un problema del que os iris dando cuenta a partir del prximo da, que empezaremos a crear funciones y procedimientos.
Qu ocurre si queremos usar en alguna parte del programa otras variables que tambin sean de ese tipo? Las definimos tambin a la vez? En muchas ocasiones no ser posible. As que tiene que haber una forma de indicar que todo eso que sigue a la palabra "record" es un tipo al que nosotros queremos acceder con la misma comodidad que si fuese "integer" o "boolean", queremos definir un tipo, no simplemente declararlo, como estbamos haciendo.
Ahora s que podremos asignar valores entre variables que hayamos definido en distintas partes del programa, podremos usar esos tipos para crear ficheros eso lo veremos en el tema 11 , etc, etc, etc Ejercicio propuesto: Crear un tipo de datos llamado "punto", que sea un registro formado por dos componentes, X e Y, nmeros reales. Pedir al usuario el valor de X e Y para dos puntos distintos y calcular la distancia entre esos dos puntos.
La programacin estructurada trata de dividir el programa el bloques ms pequeos, buscando una mayor legibilidad, y ms comodidad a la hora de corregir o ampliar. Por ejemplo, en el caso de nuestra maravillosa agenda, podemos empezar a teclear directamente y crear un programa de lneas que quizs incluso funcione, o dividirlo en partes, de modo que el cuerpo del programa sea.
En nuestro caso en el lenguaje Pascal , estos bloques sern de dos tipos: procedimientos procedure y funciones function. La diferencia entre ellos es que un procedimiento ejecuta una serie de acciones que estn relacionadas entre s, y no devuelve ningn valor, mientras que la funcin s que va a devolver valores.
Veamoslo con un par de ejemplos:. El cuerpo cuerpo de un procedimiento se encierra entre "begin" y "end", igual que las sentencias compuestas y que el propio cuerpo del programa. Un procedimiento puede tener sus propias variables, que llamaremos variables locales, locales frente a las del resto del programa, que son globales. La orden exit, exit que no habamos visto an, permite interrumpir la ejecucin del programa o de un procedimiento en un determinado momento. Ejercicio propuesto: Crear un procedimiento "LimpiarPantalla", que escriba 25 lneas en blanco en la pantalla, de modo que el texto que estaba escrito anteriormente en pantalla deje de estar visible en una pantalla de texto convencional de 80x25 caracteres.
Veamos el segundo ejemplo: una funcin que eleve un nmero a otro esa posibilidad no existe "de forma nativa" en Pascal , se podra hacer as, si ambos son enteros:. Esta funcin se llama "potencia". Tiene dos parmetros llamados "a" y "b" que son nmeros enteros valores que "se le pasan" a la funcin para que trabaje con ellos. El resultado va a ser tambin un nmero entero. Antes de salir es cuando asignamos a la funcin el que ser su valor definitivo. Ejercicio propuesto: Crear una funcin "triple", que reciba un nmero real como parmetro, y devuelva como resultado ese nmero multiplicado por tres.
Ejercicio propuesto: Crear una funcin "media", que reciba dos nmeros reales como parmetros, y devuelva como resultado su media artimtica. Nota: al final de este apartado tienes la lista de funciones matemticas y de manipulacin de cadenas que incluye Turbo Pascal.
En el prximo apartado veremos la diferencia entre pasar parmetros por valor lo que hemos estado haciendo y por referencia para poder modificarlos , y jugaremos un poco con la recursividad. Ejercicio propuesto: Crear una funcin "potenciaReal", que trabaje con nmeros reales, y permita clculos como 3. Ejercicio propuesto: Definir las funciones suma y producto de tres nmeros, y crear un programa que haga una operacin u otra segn le indiquemos empleando "case", etc. Ejercicio propuesto: Crea un programa que sume dos nmeros "grandes", de 30 cifras.
Esos nmeros deberemos leerlos como "string" y sumarlos "letra a letra". Para ello, debers crear una funcin "sumar", que reciba como parmetros dos "strings", y que devuelva su resultado en un nuevo "string".
Ejercicio propuesto: Crea un programa que multiplique dos nmeros "grandes", de entre 30 y cifras, por ejemplo. Para esos nmeros no nos basta con los tipos numricos que incorpora Pascal, sino que deberemos leerlos como "string" y pensar cmo multiplicar dos strings: ir cifra por cifra en cada uno de los factores y tener en cuenta lo que "me llevo" Ya habamos visto qu era eso de los procedimientos y las funciones, pero habamos dejado aparcados dos temas importantes: los tipos de parmetros y la recursividad.
Vamos con el primero. Ya habamos visto, sin entrar en detalles, qu es eso de los parmetros: parmetros una serie de datos extra que indicbamos entre parntesis en la cabecera de un procedimiento o funcin.
Es algo que estamos usando, sin saberlo, desde el primer da, cuando empezamos a usar "WriteLn":. Esta lnea es una llamada al procedimiento "WriteLn", y como parmetros le estamos indicando lo que queremos que escriba, en este caso, el texto "Hola". Declaramos el nombre del programa.
No hay problema. Usaremos la variable "dato", de tipo entero. El procedimiento "modifica" toma una variable de tipo entero, le asigna el valor 3 y la escribe. Lgicamente, siempre escribir 3. Empieza el cuerpo del programa: damos el valor 2 a "dato".
Escribimos el valor de "dato". Claramente, ser 2. Llamamos al procedimiento "modifica", que asigna el valor 3 a "dato" y lo escribe. Finalmente volvemos a escribir el valor de "dato" Escribe un 2. Lo que modificamos es la variable genrica que hemos llamado "variable", y que no existe fuera del procedimiento. Eso es pasar un parmetro por valor. Pero, cmo lo hacemos si realmente queremos modificar el parmetro. Pues nada ms que aadir la palabra "var" delante de cada parmetro que queremos permitir que se pueda modificar Esta vez la ltima lnea del programa s que escribe un 3 y no un 2, porque hemos permitido que los cambios hechos a la variable salgan del procedimiento para eso hemos aadido la palabra "var".
Esto es pasar un parmetro por referencia. El nombre "referencia referencia" referencia alude a que no se pasa realmente al procedimiento o funcin el valor de la variable, sino la direccin de memoria en la que se encuentra, algo que ms adelante llamaremos un "puntero". Una de las aplicaciones ms habituales de pasar parmetros por referencia es cuando una funcin debe devolver ms de un valor.
Ejercicio propuesto: Crear una funcin "intercambia", que intercambie el valor de los dos nmeros enteros que se le indiquen como parmetro. Ejercicio Ejercicio propuesto: Crear una funcin "iniciales", que reciba una cadena como "Nacho Cabanes" y devuelva las letras N y C primera letra, y letra situada tras el primer espacio , usando parmetros por referencia.
Y como ejercicio queda un caso un poco ms "enrevesado". Vamos al segundo apartado de hoy: qu es eso de la "recursividad recursividad". Y qu utilidad puede tener eso? Habr muchos problemas que son ms fciles de resolver si se descomponen en pasos cada vez ms sencillos. Se parecen mucho. Luego podemos escribir cada factorial en funcin del factorial del siguiente nmero:.
Acabamos de dar la definicin recursiva del factorial! As vamos "delegando" para que el problema lo resuelva el siguiente nmero, y este a su vez se lo pasa al siguiente, y este al otro, y as sucesivamente hasta llegar a algn caso que sea muy fcil. Atencin a la primera parte de la funcin recursiva: es muy importante comprobar que hay salida de la funcin, para que no se quede dando vueltas todo el tiempo y nos cuelgue el ordenador.
Normalmente, la condicin de salida ser que ya hallamos llegado al caso fcil en este ejemplo: el factorial de 1 es 1. No pongais nmeros demasiado grandes.
Qu es "demasiado grande"? Pues el factorial de 8 es cerca de Si este lmite del tamao de los enteros os parece preocupante, no le deis muchas vueltas, porque en la prxima leccin veremos que hay otros tipos de datos que almacenan nmeros ms grandes o que nos permiten realizar ciertas cosas con ms comodidad.
Ejercicio propuesto: Crear una funcin recursiva que halle el producto de dos nmeros enteros. Ejercicio propuesto: Crear otra funcin que halle la potencia a elevado a b , tambin recursiva. Ejercicio propuesto: Hacer un programa que halle de forma recursiva el factorial de cualquier nmero, por grande que sea.
Pista: habr que usar la rutina de multiplicar nmeros grandes, que se propuso como ejemplo en el apartado anterior Ejercicio propuesto: Crear un programa que emplee recursividad para calcular un nmero de la serie Fibonacci en la que los dos primeros elementos valen 1, y para los restantes, cada elemento es la suma de los dos anteriores.
Ejercicio propuesto: Crea un programa que emplee recursividad para calcular la suma de los elementos de un vector. La sentencia "forward" es necesaria slo en un caso muy concreto, y cada vez menos, gracias a la programacin modular, pero aun as vamos a comentar su uso, por si alguien llega a necesitarla:. Cuando desde un procedimiento A se llama a otro B, este otro procedimiento B debe haberse declarado antes, o el compilador "no lo conocer".
Esto nos supone llevar un poco de cuidado, pero no suele ser problemtico. Eso s, puede llegar a ocurrir aunque es muy poco probable que a su vez, el procedimiento B llame a A, de modo que A debera haberse declarado antes que B, o el compilador protestar porque "no conoce" a A.
En este poco habitual caso de que cada uno de los procedimientos exigira que el otro se hubiese detallado antes, la nica solucin es decirle que uno de los dos por ejemplo "A" ya lo detallaremos ms adelante, pero que existe. As ya podemos escribir "B" y despus dar los detalles sobre cmo es "A", as:.
Nota: en los Pascal actuales, ms modulares, si usamos "unidades" que veremos en el tema 12 se evita la necesidad de emplear "forward", porque primero se dan las "cabeceras" de todos los procedimientos lo que se conocer como "interface" y ms adelante los detalles de todos ellos lo que ser la "implementation".
La mayora de las que vamos a ver son funciones matemticas que estn ya predefinidas en Pascal. Muchas de ellas son muy evidentes, pero precisamente por eso no poda dejarlas sin mencionar al menos:.
Abs: Abs valor absoluto de un nmero. Sin: Sin seno de un cierto ngulo dado en radianes. Cos: Cos coseno, anlogo. ArcTan: ArcTan arco tangente.
Round: Round redondea un nmero real al entero ms cercano. Trunc: Trunc trunca los decimales de un nmero real para convertirlo en entero. Int: Int igual que trunc, pero el resultado sigue siendo un nmero real.
Sqr: Sqr eleva un nmero al cuadrado. Sqrt: Sqrt halla la raz cuadrada de un nmero. Exp: Exp exponencial en base e, es decir, eleva un nmero a e. Ln: Ln calcula el logaritmo neperiano base e de un nmero.
Potencias: Potencias no hay forma directa de elevar un nmero cualquiera a otro en pascal, pero podemos imitarlo con "exp" y "ln", as:. La deduccin de esta frmula es fcil, conociendo las propiedades de los logaritmos y las exponenciales. En Turbo Pascal tenemos facilidades para trabajar con cadenas de texto, y desde luego, con ms comodidad que desde otros lenguajes como C. What are you looking for Book " Complete Turbo Pascal "? Now the newest version with all its unique features will be summarized in O'Brien's one-stop Complete Reference.
This fully explains the fundamentals of Pascal programming, debugging techniques, graphics and sound, and advanced programming concepts. Las cadenas de caracteres son arrays especiales. Longitud fisica: corresponde al maximo numero de caracteres que puede almacenar. El acceso a los elementos de una cadena individualmente se hace como si fuera un array.
Donde x es una variable de tipo char. Convierte un valor numerico a la correspondiente cadena de caracteres que lo representa. VAL Val cad,variable,codigo Cad: la cadena a convertir en valor numerico.
Variable: el numero que se obtenga. Codigo: cero si se ha podido convertir. Para declarar una variable archivo es necesario definir previamente la naturaleza de sus registros. El procedimiento Rewrite abre un archivo para escritura destruyendo el contenido del arhivo si este ya existe. Este procedimiento se utiliza para introducir el contenido de un registro del archivo en una variable de memoria definida del READ mismo tipo de dato que el registro leido.
While not eof pruebas do Begin Read pruebas,info ; Write info ; End; El procedimiento write escribe en un registro del archivo el contenido de una variable de memoria definida del mismo tipo. Para que un archivo pueda ser tratado por posicionamiento o acceso directo debe residir obligatoriamente en un dispositivo de almacenamiento de este tipo. El contenido de un archivo directo se almacena en disco bajo forma binaria comprimida y no es visualizable directamente en pantalla, como los archivos de texto, con la orden TYPE de DOS o con editores.
Pudiendose realizar las siguientes operaciones con archivos y directorios:. Erase nomvararchivo Rename nomvararchivo,'nombrenuevoarchivo' Chdir directorio Mkdir directorio Rmdir directorio Getdir unidad,camino. Cerrar sugerencias Buscar Buscar. Saltar el carrusel. Carrusel anterior. Carrusel siguiente. Explora Audiolibros. Explora Revistas. Explora Podcasts Todos los podcasts.
Dificultad Principiante Intermedio Avanzado. Explora Documentos. Manual Turbo Pascal 7. Cargado por api Compartir este documento Compartir o incrustar documentos Opciones para compartir Compartir en Facebook, abre una nueva ventana Facebook. Denunciar este documento. Marcar por contenido inapropiado. Descargar ahora. Carrusel anterior Carrusel siguiente. Funciones, Procedimientos y Arrays en Turbo Pascal.
Buscar dentro del documento. Tipo Cadena String. Existen dos diferentes tipos de datos simples definidos por el usuario: enumerados y subrago.
Tipos subrango. Sentencias de salida o escritura.
0コメント