domingo, 24 de febrero de 2013

Práctica 7 de la Unidad 2


Práctica 6 de la Unidad 2

SECCIÓN A




SECCIÓN B





Funciones Básicas de Entrada Y Salida


INTRODUCCIÓN


La gran mayoría de los programas necesitan la interacción entre el usuario y la máquina. Desde la simple calculadora, hasta las complejas GUIs necesitan que el usuario introduzca datos. En este tutorial vamos a complicar un poco las cosas y vamos a construir un programa que no funcionará si no interactuas con él.

Primero vamos a estudiar un poco la función scanf. Ésta es el equivalente e inverso de la función printf, de hecho  también se incluye en la librería estándar de C (stdio.h). Funciona exactamente igual que printf, pero al inverso. Es decir en vez de "devolver" datos, "recibirá". No te costará aprenderla.


FUNCIONES BÁSICAS DE ENTRADA Y SALIDA


Hay varias maneras de usar entrada/salida en ensamblador, vamos a presentar la más sencilla, usando funciones de alto nivel del lenguaje de programación C. En C, las instrucciones básicas de entrada salida son printf y scanf, las cuales permiten respectivamente enviar (print, imprimir) o recibir (scan, leer) información.
La función printf permite escribir en la salida estándar (monitor), proporcionando un formato específico para los datos a escribir.
Esta función recibe una cantidad variable de argumentos, en los que solo uno de ellos es obligatorio: la cadena de formato. Este parámetro es una cadena que permite indicar el formato que tendrá la impresión que se quiere realizar, y en base a la cual se determina la cantidad y tipo de los parámetros restantes.
Dicha cadena puede contenter caracteres comunes y corrientes, los cuales se mostrarán en pantalla exactamente como se encuentran en la cadena, y un segundo tipo de caracteres conocidos como especificadores de formato, los cuales están formados por un símbolo de porcentaje (%) y un código de formato.
Además de la cadena de formato, deben existir tantos parámetros adicionales como especificadores de formato contenga la cadena, ya que cada uno de los mismos proporciona el valor por el cual será sustituido cada especificador al momento de mostrar la cadena por la pantalla. Dicho de otra manera, la cadena de formato puede ser vista como una plantilla, mientras que el resto de los parámetros son los valores que completan los campos vacíos de dicha plantilla.
La función scanf permite leer desde la entrada estándar, proporcionando un formato específico para los datos a recibir. De forma análoga a la función printf, esta función permite reconocer los tipos de datos especificados por el estándar ANSI de C tales como números, caracteres y cadenas.
Los argumentos recibidos por la función scanf son similares a los de la función printf, siendo de nuevo el primero de ellos la cadena de formato. Sin embargo en este caso la cadena de formato es utilizada para especificar una "plantilla" que deberá ser completada con la entrada proporcionada por el usuario.

En este caso, por cada especificador de formato que se encuentre en la cadena será necesario proporcionar un apuntador a la dirección de memoria en la que será almacenado el elemento reconocido. Los especificadores de formato compatibles con la función scanf son los mismos que para printf.


Una diferencia importante entre las funciones printf y scanf consiste en la manera en que se les pasan los argumentos. Todos los argumentos de una llamada a la función scanf (a excepción de la cadena de formato) son pasados por referencia, es decir, se proporciona la dirección de la variable y no su valor. Esto se debe a que la función utiliza estas variables para almacenar un valor leido de la entrada estándar y en consecuencia necesita saber la posición de memoria en la que el mismo será almacenado.
En contraparte, la función printf no necesita conocer la dirección de las variables, sino el valor que contienen para poder escribirlo en la salida estándar. Por esta razón, todos los tipos de dato simple (enteros, caracteres, etc.) son pasados por valor. Algunas otras variables como los arreglos y las estructuras (esto incluye las cadenas ya que son arreglos de caracteres) son pasados por referencia, pero esto se debe a limitaciones del pase de parámetros por valor (ya que los parámetros se almacenan en la pila, véase el capítulo de procedimientos) y no a que la función printf necesite conocer la dirección de dichos argumentos per se.
Para ilustrar la utilización de ambas funciones desde un programa en lenguaje ensamblador, se presentan dos ejemplos sencillos. Sin embargo es importante hacer una acotación en este punto. Cuando se hace una llamada a las funciones printf y scanf (o a cualquier otro procedimiento), el contenido de los registros %eax, %ecx y %edx corre el riesgo de ser modificado. El motivo de esto se explica en la parte de procedimientos, sin embargo, es importante tener en cuenta este hecho al momento de programar, tomando las precauciones necesarias para no perder información importante al llevar a cabo las operaciones de lectura o escritura.
Para terminar una línea de salida y hacer que el cursor pase a la línea siguiente se utiliza \n dentro del formato de salida.

/*Entrada y Salida: scanf*/

#include <stdio.h>

int main()
{
    float a;

    char b;

    printf("Introduce un numero: ");

    scanf("%f",&a);

    printf("Intrduciste el numero: %f\n",a);

    getchar();

    printf("Introduce una letra: ");

    scanf("%c",&b);

    printf("Introduciste la letra %c\n\n",b);

    printf("Presiona Enter pasa Salir");

    getchar();
    getchar();

    return 0;

}


Ahora:

    float a;
   
    char b;

Declaramos las variables, una de tipo float y una de tipo char.

     printf("Introduce un numero: ");

Mostramos por pantalla el mensaje entre comillas "".

     scanf("%f",&a);

    printf("Intrduciste el numero: %f\n",a);

Y aquí está scanf. Lo que hace está función es "escanear el teclado, en busca de una tecla activa". Ahora vamos a ver como se utiliza. Entre paréntesis tenemos un % y una letra, al igual que en printf usamos el % acompañado de una letra para indicar con qué tipo de dato estamos trabajando. En este caso estamos diciendo que el teclado escanee en busca de números flotantes. Al final de las comillas encontramos otro argumento &a esto hace que lo que se introduzca en el teclado, quede guardado en la variable a (declarada anteriormente y de tipo float) y termina la función con su ; obligatorio.

El número, entero (ej:2.00000) o decimal (ej:2.3456) quedó guardado en la variable a. Ahora, para comprobar si la función scanf funciona, vamos a pedir que el programa muestre la variable a en pantalla, esto ya lo conoces. ¡Sorpresa! En pantalla aparece el número que introducimos previamente. Así de simple operan y pueden coexistir las funciones más importantes de C.

En el mismo programa incluyo otro ejemplo similar, pero, trabajando con caracteres.

Antes de empezar con esta parte, quiero que se note el getchar() entre los dos "bloques". La máquina interpreta el código ya compilado en el orden en que fue escrito, sin ese getchar(), al imprimir en pantalla, se "brincaría" a la siguiente parte, llegando incluso a dar errores extraños, para mantener esto controlado, ponemos esta función, que espera a que se presione "Enter" para seguir.

Ahora sí:

    printf("Introduce una letra: ");

    scanf("%c",&b);

    printf("Introduciste la letra %c\n\n",b);

Imprimimos en pantalla el mensaje. Llamamos a scanf, pero fíjate que ahora usamos un %c, por lo tanto escaneará en busca de caracteres (Recuerda que char, también puede almacenar un entero, por lo tanto podrás introducir un número sin problemas) y almacenamos en b (Previamente declarada como tipo char).

Después imprimimos b en pantalla, el resultado es el mismo que introducimos previamente.

Finalmente, terminamos el programa con una frase "Presiona Enter para salir".
Quiero que se note que los signos guardan cierta congruencia; por ejemplo, a es tipo float, en él se almacena un número y al imprimirlo lo imprimimos como tipo float; b es del tipo char, va a almacenar un caracter t se imprime como tal. Tal vez te pueda parecer redundante, pero puede ser un error muy dificil de encontrar.


CONCLUSIONES



La E/S por consola se refiere a todas las operaciones que se producen en el teclado y la pantalla de la computadora.
En el lenguaje de programación C utilizamos las funciones de entrada y salida printf y scanf.

ANEXOS


Los especificadores de formato, más usados, compatibles con la función printf son los siguientes:

Especificador
Formato
%c
Caracter simple
%d
Entero con signo en base decimal
%s
Cadena de caracteres
%u
Entero sin signo en base decimal
%x
Entero con signo en base hexadecimal


TABLA 1 – Especificadores de formato



martes, 19 de febrero de 2013

Práctica 5 de la Unidad 2


Práctica 4 de la Unidad 2


Práctica 3 de la Unidad 2


Variables Y Constantes


INTRODUCCIÓN


Uno de los elementos fundamentales a la hora de diseñar programas, ya sea en el lenguaje Pascal o en cualquiera de los otros de los lenguajes de programación existentes, son las variables, de allí es su importancia en el aprendizaje de la programación. Así pues, veamos en primer lugar qué son las variables.
Básicamente, una variable es un espacio de memoria en donde podemos almacenar temporalmente datos de cualquier tipo de información que necesitemos para realizar un proceso, y tal como su nombre lo indica, las variables pueden cambiar su valor a lo largo de la ejecución de un programa.
Además de las variables, existe también lo que se denomina constantes, cuya función es similar a la de las variables ya que también permiten almacenar datos temporalmente en un espacio de memoria; pero a diferencia de éstas, los valores que las constantes almacenan se mantienen fijos durante la ejecución de un programa; de modo que, si durante la ejecución se intenta variar su valor se producirá un error. Al igual que a las variables, a las constantes también debemos darles un nombre para ser reconocidas dentro de un programa.


VARIABLES Y CONSTANTES


En programación, las variables son espacios reservados en la memoria que, como su nombre indica, pueden cambiar de contenido a lo largo de la ejecución de un programa. Una variable corresponde a un área reservada en la memoria principal del ordenador pudiendo ser de longitud:

Ø  Fija.- Cuando el tamaño de la misma no variará a lo largo de la ejecución del programa. Todas las variables, sean del tipo que sean tienen longitud fija, salvo algunas excepciones — como las colecciones de otras variables (arrays) o las cadenas.
Ø  Variable.- Cuando el tamaño de la misma puede variar a lo largo de la ejecución. Típicamente colecciones de datos.

Las variables se representan con identificadores que hacen referencia a un lugar de la memoria del programa en donde se almacena un dato. Una variable está asociada a un tipo de datos, el cual y en función del tamaño del mismo determina la cantidad de bytes que serán necesarios para almacenar la variable. En el caso de colecciones y al contrario que con el resto de tipo de datos, ya sean primitivos u objetos complejos, la memoria asignada a almacenar tales variables no se conoce de antemano, lo cual lleva a establecer políticas de reserva de memoria:

Ø  Reserva fija de memoria.- Implica predeterminar la cantidad de memoria que se asignará a la colección. Es una política extremadamente rígida, ya que llegados al final de la zona de memoria no se podrían almacenar nuevos elementos.
Ø  Reserva variable de memoria.- Se dedica una zona de memoria, pudiendo ser de un tamaño predeterminado o no, y en caso de sobrepasarse dicha zona de memoria se vuelve a asignar otra zona, contigua o no, para impedir la restricción mencionada arriba.



Por su contenido
®    Variables Numéricas: Son aquellas en las cuales se almacenan valores numéricos, positivos o negativos, es decir almacenan números del 0 al 9, signos (+ y -) y el punto decimal.
Ejemplo:  iva = 0.15 pi = 3.1416 costo = 2500
®    Variables Lógicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estos representan el resultado de una comparación entre otros datos.
®    Variables Alfanuméricas: Está formada por caracteres alfanuméricos (letras, números y caracteres especiales).
Ejemplo: letra = ’a’ apellido = ’lopez’ direccion = ’Av. Libertad #190’
Por su uso
®    Variables de Trabajo: Variables que reciben el resultado de una operación matemática completa y que se usan normalmente dentro de un programa.  Ejemplo:  Suma = a + b /c
®    Contadores: Se utilizan para llevar el control del número de ocasiones en que se realiza una operación o se cumple una condición. Con los incrementos generalmente de uno en uno.
®    Acumuladores: Forma que toma una variable y que sirve para llevar la suma acumulativa de una serie de valores que se van leyendo o calculando progresivamente.

En programación, una constante es un valor que no puede ser alterado durante la ejecución de un programa.
Una constante corresponde a una longitud fija de un área reservada en la memoria principal del ordenador, donde el programa almacena valores fijos.
Por ejemplo:
Ø  El valor de pi = 3.1416
Por conveniencia, el nombre de las constantes suele escribirse en mayúsculas en la mayoría de lenguajes.

En C las constantes se declaran con la directiva #define, esto significa que esa constante tendrá el mismo valor a lo largo de todo el programa. El identificador de una constante así definida será una cadena de caracteres que deberá cumplir los mismos requisitos que el de una variable (sin espacios en blanco, no empezar por un dígito numérico, etc).
Ejemplo:

  #include <stdio.h>
  #define PI  3.1415926

  int main()
  {
    printf("Pi vale %f", PI);
    return 0;
  }


Lo cual mostrará por pantalla:

  Pi vale 3.1415926

Es decir, PI es una constante a la que le hemos asignado el valor 3.1415926 mediante la directiva #define.
La directiva #define también se puede utilizar para definir expresiones más elaboradas con operadores (suma, resta, multiplicación etc) y otras constantes que hayan sido definidas previamente, por ejemplo:

  #define X  2.4
  #define Y  9.2
  #define Z  X + Y

En C++ el uso de #define está totalmente desaconsejado, para declarar una constante simbólica (equivalente a constante en C) se usa la palabra clave const seguido del tipo de dato que queramos incluir.



CONCLUSIONES



 Las constantes son un dato numérico o bien, alfanumérico fijo, que no cambia durante la ejecución de un programa. En el lenguaje de programación C, que es el programa que utilizamos en este curso de algoritmos y programación, las constantes se declaran con #define, quiere decir, que el valor de la constante será el mismo, o sea, tendrá el mismo valor.
Las variables son espacios reservados en la memoria del programa, estas variables pueden cambiar constantemente de valor a lo largo del programa. Pueden ser de longitud fija o variable. Ya que no conocemos el lugar en el que se almacenan estas variables, se establecen políticas de reserva de memoria, que son reserva fija de memoria y reserva variable de memoria.
Las variables se clasifican en:
v  Numéricas
v  Lógicas
v  Alfanuméricas
v  De trabajo
v  Contadores
v  Acumuladores

Elementos De Léxico Y Sintaxis


INTRODUCCIÓN


Todo ser humano para comunicarse necesita un lenguaje para poder entenderse, pues precisamente lo mismo ocurre dentro de un lenguaje de programación con la única diferencia de que para comprender dicho lenguaje, necesitamos de elementos y caracteres especiales que definan o le den sentido al mensaje que intentamos enviar, dichos elementos bien inmersos dentro de otros elementos, correspondientes al léxico y sintaxis de un programa.


ELEMENTOS DE LÉXICO Y SINTAXIS


Conjunto de símbolos que se pueden usar en un lenguaje.
 Estos símbolos o elementos básicos del lenguaje, podrán ser de los siguientes:

a.    Identificadores: nombres simbólicos que se darán a ciertos elementos de programación (p.e. nombres de variables, tipos, módulos, etc.).

b.    Constantes: datos que no cambiarán su valor a lo largo del programa.

c.    Operadores: símbolos que representarán operaciones entre variables y constantes.

d.    Instrucciones: símbolos especiales que representarán estructuras de procesamiento, y de definición de elementos de programación.

e.    Comentarios: texto que se usará para documentar los programas

Consta de unas definiciones, denominadas reglas sintácticas o producciones que especifican la secuencia de símbolos que forman una frase del lenguaje. Estas reglas dicen si una frase está bien escrita o no.
Las reglas sintácticas pueden contener dos tipos de elementos:
®    Elementos Terminales ( Vocabulario)
®    Elementos no Terminales, que son construcciones intermedias de la gramática.

Existen diversas formas de especificar las reglas, pero únicamente vamos a ver dos de ellas:
®    Notación BNF (Backus-Naur Form). Es de las primeras notaciones que se empezó a utilizar para especificar lenguajes de programación.
®    Notación BNF: <elemento no terminal>::= Definición1 | Definición2 | ...
Los elementos terminales, o sea, que pertenecen al vocabulario, se escriben tal cual.
Los elementos no terminales se escriben entre los símbolos <>.
Ejemplo: Descripción sintáctica de una expresión matemática en notación BNF:
 ---> 4*(3+1)
<expresión> ::= <numero> | (<expresión>) | <expresión><operador><expresión>
<operador> ::= + | - | * | /
<numero> ::= <digito> | <numero><digito>
<digito> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0
®    Diagramas sintácticos. Es una representación gráfica de la sintaxis. Tiene la ventaja de ser más intuitivo.
Los elementos terminales se inscriben en una elipse. Los elementos no terminales se escriben en un rectángulo.

CONCLUSIONES


El léxico, podríamos definirlo como la serie de símbolos básicos que se utilizan en el lenguaje de programación, estos símbolos o elementos son operadores, constantes, identificadores, instrucciones y comentarios.
Por otra parte, la sintaxis, consta de ciertas reglas que nos dicen el orden en el que los símbolos o elementos que forman frases en el lenguaje de programación, dichas reglas nos indican si la frase es correcta o no lo es.

Práctica 2 de la Unidad 2


Práctica 1 de la Unidad 2


martes, 12 de febrero de 2013

Puntos Importantes De La Unidad 1

A mi criterio, los puntos más importantes en esta unidad, fueron los siguientes:

Lo que significa un lenguaje de programación; es un lenguaje diseñado para describir el conjunto de acciones consecutivas que un equipo debe ejecutar. Por lo tanto, un lenguaje de programación es un modo práctico para que los seres humanos puedan dar instrucciones a un equipo.
Los tipos de lenguaje de programación que podemos encontrar, como son los lenguajes de bajo nivel, de medio nivel (entre ellos el lenguaje C, que es el lenguaje que manejaremos) y de alto nivel. También la historia y desarrollo de dicho lenguaje C.
Al igual que el manejo de memoria del lenguaje C, donde encontramos la memoria dinámica, que es aquella que se reserva en tiempo de ejecución, su tamaño puede variar durante la ejecución del programa; y también encontramos la memoria estática, que es el espacio de memoria que se crea al declarar variables de cualquier tipo de dato. En esta memoria podemos ver funciones como: malloc, calloc, realloc, free, sizeof.
Las palabras reservadas de igual manera son un punto muy importante, estas palabras se utilizan como identificadores internos clave, para sus tipos de datos, estructuras de control, sus instrucciones y características propias del lenguaje. 
La realización de la práctica en el programa Borland C++, ya que nos sirvió para entender mejor las tareas de investigación antes elaboradas.
La elaboración de diagramas de flujo, el como elaborar dichos diagramas.
Y por supuesto, el concepto básico de pseudocódigo y el ver algunos ejemplos para comprender de una forma más completa dicho concepto.

Pseudocódigos




Se denomina pseudocódigo a un lenguaje basado en normas léxicas y gramaticales similares a las utilizadas por los lenguajes de programación. El pseudocódigo combina  lenguaje coloquial con las normas gramaticales de los lenguajes de programación. Es una herramienta útil en las fases de análisis y diseño de software.
El pseudocódigo permite diseñar algoritmos utilizando frases en lenguaje común, instrucciones de programación y palabras clave para definir las estructuras básicas de control. Los algoritmos escritos en pseudocódigo se puede convertir fácilmente a cualquier lenguaje de programación.

Ejemplos de Pseudocódigo

Ejemplo: Realizar el pseudocódigo de un programa que permita calcular el área de un rectángulo. Se debe introducir la base y la altura para poder realizar el cálculo..
Programa; área
Entorno: BASE, ALTURA, AREA son número enteros
Algoritmo:
            escribir “Introduzca la base y la altura”
            leer BASE, ALTURA
            calcular AREA = BASE * ALTURA
            escribir “El área del rectángulo es “AREA
Finprograma
Ejemplo: Realizar el pseudocódigo que permita al usuario introducir por teclado dos notas, calculando la suma y el producto de las notas.
Programa: SumaProducto
Entorno: NOTA1,NOTA2,SUMA,PRODUCTO son números enteros
Algoritmo:
escribir “Introduzca las notas”
leer NOTA1,NOTA2
calcular SUMA = NOTA1 + NOTA2
calcular PRODUCTO = NOTA1 * NOTA2
escribir “La suma de las dos notas es:” SUMA
escribir “El producto de las dos notas es :”PRODUCTO
Finprograma

Ejemplo: Realizar el pseudocódigo de un programa que permita saber si un número es mayor, menor o igual a cero.
    Programa: ComparaNúmeros
       Entorno: NUMERO es un número entero
Algoritmo:
Escribir “Introduzca un número “
leer NUMERO
SI NUMERO>0  ENTONCES
          escribir “El número introducido es positivo”
SI NO
          SI NUMERO<0 ENTONCES
                 escribir “El número introducido es negativo”
          SI NO
                 escribir “El número es cero”
          FINSI
FINSI
Finprograma

Diagramas De Flujo


Mapa Conceptual

MAPA CONCEPTUAL 







Práctica 1


PRÁCTICA #1
Objetivo: Identificar los principales elementos del entorno de programación.
Instrucciones:
1)      Abrir el programa “Borland C++”.
2)      Elaborar una lista de elementos en el menú:

®    cortar
®    pegar
®    bordes de página
®    fuentes
®    temas
®    gráfico
®    encabezado
®    wordArt
®    símbolo
®    ortografía

3)      Dibujar las diferentes partes del entorno.
4)      Escribir códigos.