Hola Mundo 01

download Hola Mundo 01

of 16

Transcript of Hola Mundo 01

  • 7/24/2019 Hola Mundo 01

    1/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html

    .java.c.pas

    2 4 D E A G O S T O D E 2 0 0 8

    Captulo 1

    .Introduccin

    Comenzaremos por dar algunas definiciones bsicas que nos ayudarn a comprender el alcance

    de este trabajo.

    Problema Situacin planteada que queremos resolver.

    Algoritmo Secuencia finita de acciones con las que podemos resolver el problema.

    Segn el Teorema de la Programacin Estructuradatodo problema computacional puede

    resolverse mediante la aplicacin de tres tipos de acciones fundamentales que llamaremos

    "Estructuras de Control de Flujo de Datos".

    Estas acciones son las siguientes:

    Ejecutar una accin, luego otra, luego otra,... (lo llamamos accin simple)

    Decidir entre ejecutar una u otra accin en funcin de que se cumpla o no u na

    determinada condicin (lo llamamos accin condicional)

    Ejecutar repetidas veces la misma accin mientras se cumpla una determinada

    condicin ( lo llamamos accin iterativa).

    Estructuras de Control de Flujo de Datos

    Accin Simple

    Esta es la ms bsica de las estructuras. Se considera accin simplea las acc iones de leer

    (por teclado o desde un archivo), escribir (por pantalla, impresora o en un archivo) y asignar.

    Graficamente lo representamos de la siguiente manera:

    Lectura (o entrada) Leemos (por teclado) un valor y lo almacenamos en la variable a.

    Asignacin Asignamos el valor de la variable aa la variableb.

    Escritura (o salida) Mostramos (por pantalla o impresora) la frase Hola Mundo seguida del

    valor que contenga la variable b.

    Publicaciones del Autor

    >> Click para Ms Informacin

  • 7/24/2019 Hola Mundo 01

    2/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 2

    Variables y Tipos de Datos

    Una variable representa un espacio de memoria (RAM) en el cual podemos almacenar

    temporalmente valores.

    Podemos tener valores numricos, alfanumricos, lgicos y definidos por el programador. Es

    decir: valores de diferentes tipos (de datos).

    Si hablamos del valor 123estamos hablando de un valor numrico entero. Podemos decir

    entonces que 123es un entero. En cambio, si hablamos del valor 12.3estamos hablando de

    un valor numrico real.

    Tambin podemos hablar del valor Hola Mundo. En este caso estamos hablando de un valor

    alfanumrico. Decimos que este valor es una cadena de caractereso simplemente una

    cadena.

    Otro valor alfanumrico podra ser "123 Hola Mundo 456" que contiene caracteres letras y

    nmeros. Es alfanumrico.

    Obviamente no es lo mismo el valor 123 que 123. El primero es un valor alfanumrico

    (est encerrado entre comillas) mientras que el segundo es un entero.

    Otro t ipo de datos es el dato lgico o booleano. Los datos booleanos solo pueden contener

    valores lgicos: verdadero o falso (true o false).

    Resumiendo lo anterior diremos que podemos tener variables de diferentes tipos de datos. Los

    tipos de datos pueden ser numricos, alfanumricos, booleanos o definidos por el

    programador(pero esto lo veremos ms adelante).

    Las variables se identifican con un nombre (o identificador). El nombre de la variable debe

    comenzar con una letra. No puede tener espacios ni caracteres especiales.

    Nombres vlidos son:

    fechaNac

    fecNac

    f

    iFechaNac

    Nombres incorrectos son:

    fecha nacimiento// no puede haber un espacio

    fechanacimiento// el caracter "" se utiliza para restar

    12fecha// debe comenzar con una letra

    fecha+nacimiento// el caracter "+ " se utiliza para sumar

    Comenzando a Programar

    Con lo estudiado hasta aqu estamos en condiciones de resolver el siguiente problema.

    Problema 1.0

    Se requiere un programa que permita ingresar el nombre de una persona y que luego escriba la

    leyenda Hola Mundo seguida del nombre ingresado.

    Acerca del Autor

    Ing. Pablo A. Sznajdleder

    Agradecimientos

    No al blog de Java

    Super Baterista

    Sitios Relacionados

    PascAlgo (por Lic. Hugo Cuello)Algoritmia.net

    Java Algorithm Framework

    http://www.jaframework.com/http://www.algoritmia.net/http://pascalgo.blogspot.com/https://www.youtube.com/watch?v=UNSzfuZgNHAhttp://holamundopascal.blogspot.com/2009/04/agradecimientos.htmlhttp://www.pablosz.com/cvhttp://holamundopascal.blogspot.com/2007/08/capitulo-6.html#registroshttp://bp2.blogger.com/_X1IHMrfIpE8/RqSsumgqvMI/AAAAAAAAAzY/6Gbawr-CVE4/s1600-h/salida_.jpg
  • 7/24/2019 Hola Mundo 01

    3/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 3

    Anlisis

    Primero emitimos un mensaje indicando al usuario que debe ingresar su nombre (utilizamos la

    accin simple escritura). Para leer el nombre utilizamos la accin simple de lectura. El

    usuario ingresa por teclado su nombre, lo leemos y lo almacenamos en la variable nom. Luego

    utilizamos la acc in simple de escritura para mostrar la cadena Hola Mundo seguida del

    valor que contiene la variable nom. Las letras Cy Fencerradas en un crculo indican donde

    comienza y donde finaliza el programa.

    Codificacin del Algoritmo

    El grf ico que acabamos de analizar representa el algoritmo que resuelve el problema

    planteado.

    Para que una computadora pueda interpretar y ejecutar este algoritmo debemos codificarlo en

    algn lenguaje de programacin. En este apunte utilizaremos el lenguaje de programacin

    Pascal.

    Para programar en Pascal tenemos que escribir el cdigo fuente (sentencias e instrucciones

    que veremos a continuacin) en un archivo de texto con extensin .pas.

    problema1.0.pas

    1:

    2: var nom:string[20];

    3:begin

    4: // escribe este mensaje por pantalla

    5: write('Ingrese su nombre: ');

    6:

    7: // lee un valor y lo guarda en la variable nom

    8: // (el usuario debe escribir su nombre por teclado)

    9: readln(nom);

    10:

    11: // escribe (en pantalla) la cadena 'Hola Mundo'

    12: // seguida del valor que contiene la variable nom

    13: writeln('Hola Mundo ',nom);

    14: end.

    15:

    El cdigo comienza con la definicin de la variable nom. Pascal es un leguaje fuertemente

    tipadopor lo que todos los recursos que vayamos a utilizar en el programa (variables,

    funciones, etc) deben ser previamente especificados, indicando explicitamente su tipo de

    datos. En el caso de la variable nom su tipo de datos es string (alfanumrico, cadena de

    caracteres). En particular lo definimos como string[20](arbitrareamente) por lo tanto en la

    variable nompodremos almacenar cadenas de a lo sumo 20 caracteres.

    Luego, podemos ver que el programa est encerrado entre las palabras begin y end. Se dice

    que beginend encierran un bloque de cdigo. Cada sentencia termina con punto y coma

    salvo el end final que termina con punto.

    http://bp1.blogger.com/_X1IHMrfIpE8/Rq4XA2gqwdI/AAAAAAAAA-c/DYdO66OtIo0/s1600-h/holamundo.jpg
  • 7/24/2019 Hola Mundo 01

    4/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 4

    Dentro del cdigo podemos escribir comentarios para ayudarnos a comprender mejor el

    programa. Los comentarios deben comenzar con doble barra.

    No es una buena prctica utilizar caracteres especiales dentro de un archivo de cdigo. Es

    decir: no debemos usar acentos ni "ees" en los comentarios ni en ninguna parte del cdigo

    fuente.

    Nota: el cdigo anterior es compatible con Free Pascal(http://www.freepascal.org/).

    Difiere en algunos detalles con Borland Turbo Pascal. En este apunte utilizaremos Free

    Pascal.

    Para editar y compilar el programa vamos a necesitar utilizar una herramienta de desarrollo:

    Una IDE("Entorno Integrado de Desarrollo"). Utilizaremos EditPad PRO + FreePascal.

    Accin Condicional o Estructura de Decisin

    La estructura de decisin permite decidirentre ejecutar un conjunto de acciones u otro en

    funcin una expresin lgica. Es decir: una expresin que tenga valor de verdad.

    Representamos la accin condicional de la siguiente manera:

    Cuando el algoritmo (o programa) llega a una accin condicional debe evaluar la expresin

    lgica (ubicada en la parte superior). Si esta tiene valor de verdad true (verdadero) entonces

    se ejecutan las acciones que se encuentran en la parte izquierda de la estructura. Si la

    expresin resulta false (falsa) entonces se ejecutan las acc iones ubicadas a la derecha.

    Problema 1.1

    Leer un valor e indicar si el valor ingresado es mayor que 10.

    Anlisis

    Leemos el valor en la variable v. Luego con una accin condicional evaluamos si el valor de v

    http://bp1.blogger.com/_X1IHMrfIpE8/Rq4XT2gqweI/AAAAAAAAA-k/h4AgpFbR4BM/s1600-h/Problema1.1__.jpghttp://bp3.blogger.com/_X1IHMrfIpE8/RqUFXmgqvnI/AAAAAAAAA2w/nE5t4ltZ9Mc/s1600-h/if_.jpghttp://holamundopascal.blogspot.com/2007/08/editpad-pro-freepascal.htmlhttp://www.freepascal.org/
  • 7/24/2019 Hola Mundo 01

    5/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 5

    es mayor que 10. Si resulta verdadero (esto depende de lo que ingrese el usuario) entonces se

    ejecuta la parte izquierda de la estructura y se muestra un mensaje indicando que el valor

    ingresado es mayor que 10.

    Si la condicin resulta falsa entonces podemos asegurar que el valor NOes mayor que 10. Pero

    no sabemos si es menor o igual. Esto lo estudiaremos en el prximo problema.

    problema1.1.pas

    1:

    2: var v:integer;

    3:begin

    4: // leemos un valor por teclado

    5: writeln('Ingrese un valor: ');

    6: readln(v);

    7:

    8: // si v (el valor leido) es mayor que 10 entonces

    9: if( v>10)thenbegin

    10: writeln('El valor mayor que 10');

    11: endelsebegin// si v no es mayor que 10...

    12: writeln('El valor NO es mayor que 10');

    13: end;

    14: end.

    15:

    La accin condicional se codifica con la sentencia if(ver lnea 9). Esta sentencia evala la

    expresin lgica ubicada dentro de los parntesis y decide (en funcin de que resulte trueo

    false) que bloque de cdigo ejecutar. S i la expresin v>10resulta verdadera entonces seejecuta la lnea 10, si no (else) se ejecuta la lnea 12.

    Notemos que tanto la lnea 10 como la lnea 12 estn encerradas en bloques beginend. Por

    eso hablamos de "bloques de cdigo". Dentro un bloque de cdigo puede haber ms de una

    instruccin como veremos en los prximos ejemplos.

    Problema 1.2

    Idem anterior pero indicar si el valor ingresado es mayor, menor o igual que 10.

    Anlisis

    Para resolver este problema leemos vy preguntamos si es mayor que 10. Si resulta verdadero

    entonces podemos mostrar ese resultado. Si no es mayor entonces puede ser igual o menor.

    Tenemos que preguntar por alguna de estas posibilidades. Preguntamos si v=10. Si es

    verdadero entonces ya sabemos que se ingres el valor 10. Si es falso entonces (como no es

    mayor ni es igual) resulta que ves menor que 10.

    Utilizamos estructuras de desicin anidadas (o "ifes" anidados).

    http://bp0.blogger.com/_X1IHMrfIpE8/SD2pj27ufeI/AAAAAAAAB78/-G8SDToXArA/s1600-h/Problema%2B1.2_.jpg
  • 7/24/2019 Hola Mundo 01

    6/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 6

    problema1.2.pas

    1:

    2: var v:integer;

    3:begin

    4: write('Ingrese un valor: ');

    5: readln(v);

    6: if( v>10)thenbegin// es mayor

    7: writeln('El valor mayor que 10');

    8: endelsebegin// es igual

    9: if( v=10)thenbegin

    10: writeln('Es igual a 10');

    11: endelsebegin// es menor

    12: writeln('Es menor que 10');

    13: end;

    14: end;

    15: end.

    16:

    En este problema vemos estructuras de desicin anidadas (o "ifes anidados") pero an as los

    bloques de cdigo encerrados en los ifelse tienen una nica accin. El ifde la lnea 6 encierra

    una nica accin writeln. Su elseencierra una nica accin ifque a su vez encierra una nica

    accin, tanto por verdadero (lnea 10) como por falso (lnea 12).

    Problema 1.3

    Leer tres valores numricos. Indicar cual es mayor, medio y menor.

    Nota: se asume que los tres valores sern diferentes.

    Anlisis

    Leemos los tres valores y comenzamos a comparar. Preguntamos si a>b. Si esto se verifica

    entonces preguntamos si a>c. Si esto tambin se verifica resulta quea>by a>c. No hay dudas

    de queaes el mayor. Luego tenemos que comparar by c para ver cual esta en segundo y en

    tercer lugar.

    Si resulta que a>bpero no se verifica que a>c (o sea que ces mayor que a) ser cel mayor, ael medio y bel menor.

    Por otro lado, si no se verif ica que a>bpreguntamos si b>c. Si esto es as entonces el mayor

    ser b(ya que bes mayor que ay bes mayor que c). Preguntamos si a>cy ya podremos

    deducir cual est en segundo y tercer lugar.

    Para finalizar, si es falso que b>centonces el mayor ser c, medio by menor a.

    problema1.3.pas

    1:

    2: var a,b,c:integer;

    3:begin

    4: write('Ingrese tres valores: ');

    http://bp0.blogger.com/_X1IHMrfIpE8/RqUA22gqvWI/AAAAAAAAA0o/i44mY5yJXtA/s1600-h/Problema1.3_.jpg
  • 7/24/2019 Hola Mundo 01

    7/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 7

    5:

    6: // lee los 3 valores numericos

    7: // separados por espacio en blanco

    8: readln(a,b,c);

    9:

    10: if( a>b )thenbegin

    11: if( a>c )thenbegin

    12: writeln('Mayor:',a);

    13: if( b>c )thenbegin

    14: writeln('Medio:',b);

    15: writeln('Menor:',c);

    16: endelsebegin

    17: writeln('Medio:',c);

    18: writeln('Menor:',b); 19: end;

    20: endelsebegin

    21: writeln('Mayor:',c);

    22: writeln('Medio:',a);

    23: writeln('Menor:',b);

    24: end;

    25: endelsebegin

    26: if( b>c )thenbegin

    27: writeln('Mayor:',b);

    28: if( a>c )thenbegin

    29: writeln('Medio:',a);

    30: writeln('Menor:',c);

    31: endelsebegin

    32: writeln('Medio:',c);

    33: writeln('Menor:',a);

    34: end;

    35: endelsebegin 36: writeln('Mayor:',c);

    37: writeln('Medio:',b);

    38: writeln('Menor:',a);

    39: end;

    40: end;

    41: end.

    42:

    En este cdigo vemos bloques ifelse con ms de una instruccin. El ifde la lnea 10 tiene una

    nica instruccin (un ifque comienza en la lnea 11 y finaliza en la lnea 24). El ifde la lnea

    11 tiene dos instrucciones: un writelny un ifque a su vez tiene dos instrucciones por

    verdadero (lneas 14 y 15) y otras dos por falso (lneas 17 y 18).

    Operadores Lgicos

    Una proposicin es una expresin que tiene valor de verdad ( true o false). Es decir: puede

    verificarse o no.

    Los siguientes ejemplos son proposiciones y por lo tanto tienen valor de verdad.

    Una semana tiene 7 das (true)

    7 es nmero primo (true)

    2 es mayor que 5 (false)

    4 = 2+3 (false)

    Podemos utilizar operadores lgicos para realizar operaciones entre proposiciones y as

    obtener nuevas proposiciones con sus correspondientes valores de verdad.

    Los operadores lgicos son: AND, ORy NOT.

    Las siguientes tablas muestran el valor de verdad de la proposicin que resulta luego de operar

    dos proposiciones py qcon los diferentes operadores lgicos.

    http://bp2.blogger.com/_X1IHMrfIpE8/Rq3WIWgqwTI/AAAAAAAAA9M/fdB-OPs1AAU/s1600-h/operadoresLogicos.jpg
  • 7/24/2019 Hola Mundo 01

    8/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 8

    Veamos otra solucin para el problema 1.3 (versin 2)

    Anlisis

    La solucin es similar: varios if anidados,pero en este caso utilizamos operadores lgicos

    para evaluar ms de una condicin en un mismo if.

    Comenzamos preguntando si a>b AND a>cpara asegurarnos de que aes el mayor valor.

    Teniendo esto seguro (entramos por la parte izquierda de la estructura) tenemos que ver cual

    es el valor medio y cual es el menor.

    Si ano es el mayor (ingresamos por la parte derecha de la estructura) preguntamos si bes el

    mayor (b>a AND b>c). Si esto es as entonces comparamos acon cpara ver quien est en

    segundo y tercer lugar. Si no (si bno es el mayor) entonces por descarte el mayor ser c.

    Luego tambin comparamos ay bpara ver quien es medio y menor.

    Otra diferencia con la solucin anterior es que en este caso estamos utilizando tres variables

    temporales: mayor, medio y menor para asignar los valores a medida que podemos deducir

    que posicin tienen. Luego simplemente mostramos el valor de estas variables para informar

    los resultados.

    problema1.3v2.pas

    1:

    2: var a,b,c,mayor,medio,menor:integer;

    3:begin

    4: write('Ingrese tres valores: ');

    5: readln(a,b,c);

    6:

    7: // pregunto si a es el mayor

    8: if((a>b)AND(a>c))thenbegin 9: mayor:=a;

    10: // como a es el mayor, comparo b con c

    11: if( b>c )thenbegin

    12: medio:=b;

    13: menor:=c;

    14: endelsebegin

    15: medio:=c;

    16: menor:=b;

    17: end;

    18: endelsebegin

    19: // a no es el mayor, pregunto si el mayor es b

    20: if((b>a)AND(b>c))thenbegin

    21: mayor:=b;

    22: // el mayor es b, comparo a con c

    23: if( a>c )thenbegin

    24: medio:=a;

    http://bp3.blogger.com/_X1IHMrfIpE8/RqjAI2gqv9I/AAAAAAAAA6c/kwcEXHegl9g/s1600-h/Problema+1.3.jpg
  • 7/24/2019 Hola Mundo 01

    9/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 9

    25: menor:=c;

    26: endelsebegin

    27: medio:=c;

    28: menor:=a;

    29: end;

    30: endelsebegin

    31: // el mayor no es a ni es b. Entonces es c

    32: mayor:=c;

    33: // solo queda comparar a con b

    34: if( a>b )thenbegin

    35: medio:=a;

    36: menor:=b;

    37: endelsebegin

    38: medio:=b; 39: menor:=a;

    40: end;

    41: end;

    42: end;

    43:

    44: // muestro los resultados obtenidos

    45: writeln('Mayor: ', mayor);

    46: writeln('Medio: ', medio);

    47: writeln('Menor: ', menor);

    48: end.

    49:

    Accin iterativa o Estructura de Repeticin

    La tercer y ltima estructura de control de flujo de datos es la estructura de repeticin (o

    iterativa). Existen tres estructuras interativas: while, repeatuntily for.

    El while, lo representamos de la siguiente manera:

    Decimos que mientras se verifique la condicinindicada en la parte superior de la estructura

    se repetirn las acciones que se encuentran dentro del cuerpo principal de la misma

    (secuencialmente).

    Como existe la posibilidad de que la condicin no se cumpla al momento de llegar al while y

    que no se ingrese al ciclo ni siquiera la primera vez se dice que el while es una estructura

    repetitiva de 0n(cero a ene) ya que puede iterar desde cero hasta nveces.

    Problema 1.4

    Imprimir por pantalla los primeros nnmeros positivos (el valor nse ingresa por teclado).

    http://bp3.blogger.com/_X1IHMrfIpE8/RqUCQmgqvdI/AAAAAAAAA1g/L_Ns-FRA9t4/s1600-h/while_.jpg
  • 7/24/2019 Hola Mundo 01

    10/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 10

    Anlisis

    La estrategia para solucionar este problema consiste utilizar una variable icon el valor inicial

    1(primer nmero positivo) e ir mostrando e incrementando su valor mientraseste sea menor

    o igual al valor ingresado por el usuario (n).

    Supongamos que el usuario ingresa un valor n=3. Al llegar al ciclo de repeticin la condicin "i

    es menor o igual a n" resultar verdadera ya que ivale 1 (dado que lo asignamos antes de

    ingresar al ciclo) y nvale 3 (es lo que estamos asumiendo). Entonces el programa ingresa al

    ciclo y muestra el valor de la variable i. A continuacin vemos la asignacin i

  • 7/24/2019 Hola Mundo 01

    11/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 1

    El ciclo repeatuntiles un ciclo de 1 an. Para ingresar al ciclo no hay condicin por lo tanto

    las acciones que se encuentran dentro del ciclo se realizarn al menos una vez. Luego de la

    ltima accin (en este caso accin3) se evala la condicin que se encuentra en la parte

    posterior de la estructura.

    El ciclo iterar hasta que se verifique la condicin("repeatuntil" significa "repetirhasta").

    Tenemos que tener clara la diferencia entre el cic lo while y el ciclo repeatuntil. El primero

    repite mientras, en cambio el segundo repite hastaque se cumpla la condicin.

    Veamos como podemos resolver el problema 1.4 utili zando un ciclo repeatuntilen lugar de

    un ciclo while.

    Basicamente la diferencia est en la condicin del ciclo. Antes iteraba "mientras que isea

    menor o igual que n". Ahora itera "hasta que isea mayor que n".

    problema1.4v2.pas

    1:

    2: var i,n:integer;

    3:begin

    4: write('Ingrese un valor: ');

    5: readln(n);

    6: i:=1;

    7:

    8: repeat

    9: writeln(i);

    10: i:=i+1;

    11: until( i>n );

    12: end.

    13:

    http://bp3.blogger.com/_X1IHMrfIpE8/Rq4YZWgqwgI/AAAAAAAAA-0/FyRGnZC3kDw/s1600-h/1.4repeat.jpghttp://bp2.blogger.com/_X1IHMrfIpE8/RqUDmWgqvgI/AAAAAAAAA14/d10MF0q9rCI/s1600-h/repeat_.jpg
  • 7/24/2019 Hola Mundo 01

    12/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 12

    Ciclo for.

    Este es otro ciclo iterativo de 0aniteraciones. Se representa as:

    El ciclo for funciona con una variable de control (en el grfico es la variable i) que toma un

    valor inicial (h) y un valor final (t). La variable de control se incrementa automaticamente

    en cada iteracin tomando el valor hen la primer iteracin, h+1en la segunda y ten la

    ltima. As, el ciclo dar exactamente th+1iteraciones.

    Como vemos en el grfico tenemos dos opciones para representarlo. Podemos utilizar

    cualquiera de las dos.

    Veamos como lo aplicamos en el problema 1.4

    Vemos que en este caso el uso de un ciclo for simplifica la solucin del problema. S implemente

    leemos el valor ny luego entramos en un ciclo for con la variable iincrementndose desde 1

    hasta n.

    Dentro del ciclo solo tenemos que mostrar el valor de i. Ya no es necesario incrementarla

    porque el mismo ciclo la incrementa automaticamente.

    problema1.4v3.pas

    1:

    2: var i,n:integer;

    3:begin

    4 : write('Ingrese un valor: ');

    5: readln(n);

    6: for i:=1to n dobegin

    7: writeln(i);

    8: end;

    http://bp3.blogger.com/_X1IHMrfIpE8/Rq4YZWgqwhI/AAAAAAAAA-8/EmOkf9JpAlQ/s1600-h/1.4for.jpghttp://bp1.blogger.com/_X1IHMrfIpE8/SD7Lf27ufhI/AAAAAAAAB8U/J9qdjtI6rLk/s1600-h/for.jpg
  • 7/24/2019 Hola Mundo 01

    13/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 13

    9: end.

    10:

    Contadores y Acumuladores

    Para explicar estos temas analizaremos el siguiente problema.

    Problema 1.5

    Leer un conjunto de valores que corresponden a las edades de un grupo de personas, indicar:

    a Cuantas personas (sus edades) se ingresaron.

    b Cuantas son mayores de edad (21 aos o ms).

    c Edad promedio de las personas.

    El conjunto de valores finaliza cuando se ingresa una edad menor que cero.

    Anlisis

    http://bp2.blogger.com/_X1IHMrfIpE8/SD27AW7ufgI/AAAAAAAAB8M/RlAR-kfyGFw/s1600-h/p15b.jpghttp://bp1.blogger.com/_X1IHMrfIpE8/SD27AG7uffI/AAAAAAAAB8E/3V9WcWIrW2A/s1600-h/p15a.jpg
  • 7/24/2019 Hola Mundo 01

    14/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 14

    La estructura principal de este algoritmo consiste en un ciclo repetitivo que itera mientras la

    edad leida (e) sea mayor o igual que cero (ya que se ingresar un valor negativo para indicar

    el fin de datos). Se lee la edad antes de ingresar al while y antes de cerrarlo.

    Para calcular cuantas personas se ingresaron (puntoa) utilizamos la variable cantPersonas.

    Esta variable se inicializa con cero (cantPersonas:=0) antes de ingresar al while,y dentro

    del while (por cada iteracin) la incrementamos asignndole el valor que tena ms 1.

    (cantPersonas:=cantPersonas+1).

    La variable cantPersonas incrementa su valor en 1 por cada iteracin del while. A su vez, el

    while itera tantas veces como edades vlidas de personas se ingresen. Decimos entonces que

    cantPersonas es un contadorque cuenta (en este caso) la cantidad de personas cuyas edadesse ingresaron. O bien: cantPersonas es el contador de personas.

    Es muy importante notar que el contador debe inicializarse en ceroya que para incrementar

    su valor hacemos referencia al valor que tena ms 1. En el momento inicial (primera

    iteracin) debe valer cero.

    Para calcular cuantas personas son mayores de 21 aos (punto b) utilizamos otro contador

    (mayores) solo que antes de incrementarlo preguntamos si la edad leida es mayor o igual que

    21.

    Para calcular el promedio de las edades grupo (punto c) necesitamos dos datos: la cantidad de

    edades ingresadas y la sumatoria de las edades. La cantidad de edades ingresadas ya la

    tenemos en la variable cantPersonas. Por lo tanto necesitamos obtener la sumatoria de las

    edades. Para esto utilizamos un acumulador.

    A la variable sumEdades (que inicializamos en cero) le incrementamos su valor en cada

    iteracin del while. Pero no lo incrementamos en 1. Le asignamos lo que tena ms el valor de

    la variable e(la edad).

    Decimos entonces que sumEdades es un acumulador que acumula (en este caso) las edades

    leidas. O simplemente: sumEdades es el acumulador de edades.

    Al finalizar el while tenemos en cantPersonas la cantidad de personas del conjunto, en

    mayores la cantidad de personas mayores de 21. Luego a edadProm le asignamos

    sumEdades/cantPersonaspara calcular la edad promedio del conjunto.

    problema1.5.pas

    1: 2: var e,mayores,cantPersonas, sumEdades:integer;

    3: edadProm:real;

    4:begin

    5: mayores:=0;

    6: cantPersonas:=0;

    7: sumEdades:=0;

    8:

    9: write('Ingrese Edad:');

    10: readln(e);

    11:

    12: while( e >=0)dobegin

    13: // contador de edades ingresadas

    14: cantPersonas:=cantPersonas+1;

    15:

    16: // acumulador de edades

    17: sumEdades:=sumEdades+e;

    18: 19: if( e >=21)thenbegin

    20: mayores:=mayores+1;

    21: end;

    22:

    23: write('Ingrese Edad:');

    24: readln(e);

    25: end;

    26:

    27: edadProm:=sumEdades/cantPersonas;

    28: writeln('Cantidad de Personas: ',cantPersonas);

    29: writeln('Mayores de 21: ',mayores);

    30: writeln('Edad Promedio: ',edadProm);

    31: end.

    32:

  • 7/24/2019 Hola Mundo 01

    15/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    http://holamundopascal.blogspot.mx/2007/08/capitulo-1_9518.html 15

    Resumiendo, decimos que una variable es un contador cuando incrementamos su valor en una

    unidad.

    cont:=cont+1

    Decimos que una variable es un acumulador cuando incrementamos su valor en una cantidad

    variable.

    acum:=acum+n

    donde nes una variable cuyo valor puede variar.

    Nomenclatura

    Pascal es un lenguaje de programacin "insensible" a las maysculas y minsculas por lo tanto

    podemos escribir cdigo Pascal en mayscula, en minscula o con combinaciones de

    maysculas y minsculas.

    Las variables (o identificadores) tambin son "insensibles" por lo que la var iable a es la misma

    que la variable A. La variable fechanacimientoes la misma que FECHANACIMIENTOy la

    misma que fechaNacimiento.

    Sin embargo en este trabajo utilizaremos la siguiente convensin de nomenclatura:

    Todas las palabras reservadas de Pascal (while, for, repeatuntil, if, etc) las escribiremos en

    minscula.

    Todos los nombres de variables deben comenzar con minscula. Si el nombre de la variable

    est compuesto por ms de una palabra entonces la primer inicial ir en minscula pero las

    iniciales s iguientes deben ir en mayscula.

    Por ejemplo:

    fechaNacimiento

    fecNac

    nomPersona

    edad

    legajo

    legajoEmpleado

    .

    Algoritmos y Estructuras de Datos UTN UBA.

    Publicado por PabloSZ

    8 comentarios:

    Ricardo Garciadijo...

    Hola me llamo ricardo

    bueno escribo solo para darte las gracias por tu publicacion, me a servido de alluda

    con unos problemas que tenia para que me corriera un programa, a sido muy

    ilustrativo. (claro que no es era para programar en pascal si no en c :S) pero me a

    servido gracias.

    05 mayo, 2008 17:25

    Annimo dijo...

    Curs algoritmos con vos hace un tiempo. Ahora estoy pronto a dar el f inal y sigo

    utilizando este blog para resolver dudas.

    Una vez mas gracias!

    22 julio, 2008 03:13

    https://www.blogger.com/profile/11731415287444125674http://holamundopascal.blogspot.com/2007/08/capitulo-1_9518.html?showComment=1216707180000#c8527669585905042959http://holamundopascal.blogspot.com/2007/08/capitulo-1_9518.html?showComment=1210019100000#c4149265499740207468https://www.blogger.com/profile/11731415287444125674
  • 7/24/2019 Hola Mundo 01

    16/16

    15/10/2015 HolaMundo.pascal (online): Captulo 1

    Entrada ms reciente Entrada antigua

    Publicar un comentario en la entrada

    Pgina principal

    Suscribirse a: Enviar comentarios (Atom)

    Todos los Derechos Reservados Propiedad Intelectual Nro. 591212

    Anonimodijo...

    Hola, en la parte de operadores logicos, si bien lo entiendo, no entiendo la parte q

    dice que tengo que agregar 3 variables mas, osea, no entienod bien para uqe me sive

    eso, puedo hacer el programa sin tener que poner esas variables (medio,

    menor,mayor)?

    19 agosto, 2008 11:13

    Annimo dijo...

    Hola. Muy buena la publicacin... es brbaro que gente con tanta facilidad para

    explicar determinados temas se tome el trabajo de publicarlos de esta manera. Ayuda

    mucho a quienes cursan la materia con algn profesor que no es del todo prctico a lahora de explicar, o bien, no es muy capaz de hacerce entender de temas que,

    seguramente, el domina pero que los alumnos no conocen y necesitan ser introducidos

    de una maera prctica y clara para lograr entenderlos. Gracias!

    21 octubre, 2008 10:06

    Annimo dijo...

    Hola, me parece muy bueno este blog para aprender pascal ya que soy novato en esto;

    te queria hacer una consulta, en la parte "Veamos otra solucin para el problema 1.3

    (versin 2) " en el diagrama, cuando ya se asigno a "b" como mayor y comparas "a>c" no

    tendria que asignar medio y menor a "a" y "c" en vez de "a" y "b".

    24 diciembre, 2008 00:16

    Diego dijo...

    Gracias Pablo, es buenisimo el Blog.

    Hoy compre la edicin impresa en la facu, que me enter que existia gracias al Blog...

    Me parece genial la seccin donde te tomaste el trabajo de hacer una transicin de

    Pascal a C para poder iniciarse en este lenguaje. Cuando termine la cursada (y

    apruebe algoritmos=) espero poder empezar a sacarle provecho.

    Saludos!

    Diego.

    04 mayo, 2009 15:49

    Annimo dijo...

    Hola! muy bueno el blog... es la primera vez que entro y me parecio de mucha ayuda.

    estoy cursando progrmamacion, al principio no casaba una. ahora soy toda una

    experta gracias a este apunte ! gracias

    04 junio, 2009 18:36

    Annimo dijo...

    Hola:

    queria saber como hacer para en el ejercicio problema1.5.pas

    poder salir sin usar un numero negativo sino usar la tecla "Esc" o alguna en especial.

    Muchas gracias. Muy bueno elblog

    01 septiembre, 2009 19:29

    https://www.blogger.com/profile/05934515129725368840http://holamundopascal.blogspot.com/2007/08/capitulo-1_9518.html?showComment=1251844179619#c4447515693857660516http://holamundopascal.blogspot.com/2007/08/capitulo-1_9518.html?showComment=1244151417909#c4905491723290592956http://holamundopascal.blogspot.com/2007/08/capitulo-1_9518.html?showComment=1241462940000#c7773962447253275773http://holamundopascal.blogspot.com/2007/08/capitulo-1_9518.html?showComment=1230084960000#c6711300700070853906http://holamundopascal.blogspot.com/2007/08/capitulo-1_9518.html?showComment=1224590760000#c9218375347198277092http://holamundopascal.blogspot.com/2007/08/capitulo-1_9518.html?showComment=1219155180000#c5468141145736624513https://www.blogger.com/profile/05934515129725368840http://holamundopascal.blogspot.com/feeds/2559949985685658000/comments/defaulthttp://holamundopascal.blogspot.mx/https://www.blogger.com/comment.g?blogID=994832637513226408&postID=2559949985685658000&isPopup=truehttp://holamundopascal.blogspot.mx/2008/05/tp-compresor-huffman.htmlhttp://holamundopascal.blogspot.mx/2011/11/algoritmos-en-youtube.html