lunes, 10 de junio de 2013

Estructuras, unidad 8

INTRODUCCIÓN
Las estructuras (struct) son agrupaciones de una o más variables de tipos posiblemente diferentes, agrupadas bajo un solo nombre, que permite un manejo más cómodo de la agrupación de la información. Las struct son estructuras de datos similares a los registros (record) de Pascal. 
Una estructura es un tipo de dato compuesto que permite almacenar un conjunto de datos de diferente tipo. Los datos que contiene una estructura pueden ser de tipo simple (caracteres, números enteros o de coma flotante etc.) o a su vez de tipo compuesto (vectores, estructuras, listas, etc.). 
A cada uno de los datos o elementos almacenados dentro de una estructura se les denomina miembros de esa estructura y éstos pertenecerán a un tipo de dato determinado.












DEFINICIÓN DE ESTRUCTURAS
Se dispone de una forma de definir variables de esos grupos básicos, y los mecanismos de  acceso a las componentes: el discriminador del campo (un punto) para las estructuras; y los paréntesis cuadrados o corchetes para delimitar el índice de la componente del arreglo. Las operaciones que están definidas para estos grupos básicos son muy reducidas, el programador debe crear sus propias funciones o métodos para efectuar operaciones más complejas sobre estos grupos básicos. En el caso de strings existe una biblioteca estándar de funciones que los manipulan.
struct:  es una palabra reservada de C que indica que los elementos que vienen agrupados a continuación entre llaves componen una estructura.

nombre_estructura: identifica el tipo de dato que se describe y del cual se podrán declarar variables. Se especifica entre corchetes para indicar su opcionalidad.

miembro1, miembro2,...: Son los elementos que componen la estructura de datos, deben ser precedidos por el tipo_dato al cual pertenecen.

 
 Recordemos que una estructura define un tipo de dato, no una variable, lo que significa que no existe reserva de memoria cuando el compilador está analizando la estructura. Posteriormente habrá que declarar variables del tipo definido por la estructura para poder almacenar y manipular datos.
 
 La declaración de variables de un determinado tipo de estructura de datos se puede realizar de dos modos:
 Primera: Incluir en la propia definición de la estructura aquellas variables que se van a emplear en el programa. Esta declaración de variables  implica que el ámbito en el que éstas son reconocidas será el mismo que el de la declaración del tipo de dato estructura.
Ejemplo: estructura de una tarjeta bancaria, utilizando esta primera forma:
 

                        struct  {
          long_int  num_tarjeta;
  char tipo_cuenta; 
   char nombre [80]; 
float  saldo; 
} cliente1, cliente2; 
 
 
Segunda: Definir el tipo de dato estructura con un nombre determinado y declarar posteriormente las variables de ese tipo de dato. Para ello la estructura se identificará con un nombre de forma obligatoria. 
Ejemplo: estructura de una tarjeta bancaria, utilizando la segunda forma:
 

                  struct  {
         long_int  num_tarjeta;
  char tipo_cuenta; 
   char nombre [80]; 
float  saldo; 
                  } 
struct  tarjetas cli1, cli2; 







INICIALIZACIÓN DE ESTRUCTURAS
Las estructuras, al igual que las matrices, almacenan sus miembros de forma contigua, razón por la cual, como veremos más adelante, se les pueden aplicar punteros y una cierta aritmética. Por la misma razón, se pueden crear matrices de estructuras e incluso estructuras de matrices (sus miembros son matrices). Conceptualmente, estas últimas no se diferencian gran cosa de las matrices de matrices (a no ser en la notación de acceso a sus miembros). También se puede calcular su tamaño en bytes con la expresión sizeof, aunque a este respecto debe tenerse en cuenta algunas posibles discrepancias respecto a los valores "teóricos", debidas a las alineaciones internas realizadas por el compilador
Se ha señalado que, al igual que las matrices, las estructuras pueden iniciarse, incluso en el mismo punto de su declaración, con una lista de iniciadores entre corchetes { } separados por comas [1], uno para cada miembro de la estructura. Por ejemplo, la sentencia:
struct Cliente {int i; char str[20]; double d;} s = {33, "Pepe Lopez", 3.14 };
declara una estructura Cliente compuesta por un entero; un array de 20 caracteres, y un doble.También inicia una estructura s como perteneciente al tipo Cliente con valores concretos en cada campo.

En estructuras o uniones con duración automática, el iniciador debe ser alguno de los siguientes:
·         Una lista de inicializadores constantes (también se permiten expresiones con sizeof) Ejemplo:
struct punto {int x; int y;} p1 = {1, 2};
·         Una sola expresión con una estructura de tipo compatible.  En este caso, el valor inicial del objeto es el de la expresión.  Ejemplo:
struct punto p2 = p1;
En este caso, (suponiendo los valores anteriores) sería: p2.x == 1 y p2.y == 2

Los miembros complejos de listas de iniciadores. Por ejemplo matrices, pueden inicializarse con expresiones adecuadas incluidas en bloques de corchetes anidados. Por ejemplo:
struct Pesadas {
   int tiket;
   int pesos[5];
} s = { 150, {10, 45, 0, 78, 20}};
Si la lista de inicializadores contenidos entre los corchetes { } es menor que los miembros de la estructura, el resto de los miembros es inicializado implícitamente siguiendo las mismas reglas que los objetos con duración estática.












UTILIZACIÓN DE ESTRUCTURAS CON FUNCIONES

Es posible pasar estructuras a las funciones como argumentos. En el siguiente ejemplo usaremos funciones, para ello escribiremos dos nuevas funciones, una de ellas leerá del teclado la información sobre un nuevo trabajador y la otra visualizará en pantalla la información de un trabajador.
#include<stedio.h>
#define LONGITUD 30
Struct trabajadores
{
    Char nombre [LONGITUD];
    Int num:
};
/****
La función nuevo_nombre lee la información de un nuevo trabajador y la función visualizar_datos visualiza la información de un trabajador
****/
Struct trabajadores nuevos_nombre(void) ;
Void visualizar_datos (struct trabajadores currela) ;
Void main(void main)
{
             Struct trabajadores tra_1;
             Struct trabajadores tra_2;
           Tra_1 = nuevo_nombre()
           Tra_2 = nuevo_nombre()
          Printf(“LISTA DE AGENTES SECRETOS :\n");”
          Visualizar_datos (tra_1);
          Visualizar_datos (tra_1);
}
/*
Como se puede apreciar esta función devuelve una estructura tipo trabajadores donde se almacena la información necesaria sobre cada trabajador, utilizando para ella la sentencia return.
*/
Struct trabajadores nuevo_nombre(void)
{
       Struct trabajadores currela;
       printf("\nDatos del agente.\introduce el nombre:");
       gets(currela.nombre) ;
      printf (“introduce el numero:");
     scantf (“%d”,& currela.num);
     fflush (stdin);

     return (currela);
}

Void visualizar_datos (struct trabajadores currela)
{
     Printf (“\n\n Agente secreto \n”);
     Printf (“\t nombre : %s \n” currela.nombre);
     Printf (“\t numero del agente %d\n”,currela.num);
}







CONCLUSIÓN

Cuando compilamos este programa el compilador puede dar un mensaje diciendo que la función visualizar_datos toma la estructura como valor y no como dirección, de seguro mucho de nosotros tenemos en mente la solución medante la utilización de punteros 

Prácticas Unidad 7




Cadenas, Unidad 7


En C, una cadena es un arreglo de caracteres, los cuales terminan con el carácter nulo ('\0'). Se accede a una cadena mediante un apuntador a su primer carácter. El valor de una cadena es la dirección del primer carácter. Así, en C, es apropiado decir que una cadena es un apuntador, de hecho, un apuntador al primer carácter de la cadena. En este sentido, las cadenas son como arreglos, debido a que un arreglo también es un apuntador al primer elemento.
Aunque C no incorpora en su definición operadores para el manejo de cadenas de caracteres, todo compilador de C proporciona una librera estándar (string.h) con funciones para facilitar su utilización.
Una cadena de caracteres se puede definir como una secuencia o un vector de caracteres, que están agrupados por un mismo nombre. Existen varias formas de manipular las cadenas de caracteres, por que vamos a definir primeramente el tipo de datos char, lo cual nos va a permitir comprender el resto de los tipos.










En el lenguaje C, una cadena de caracteres se representa con una matriz de caracteres. El valor de una cadena de caracteres se escribe entre comillas dobles, por ejemplo: “Hola”, que representa la siguiente cadena de caracteres: ‘H’ ‘o’ ‘l’ ‘a’ ‘\0’.
Por convención, todas las cadenas de caracteres en C finalizan con el carácter nulo (‘\0’). Este carácter indica el fin de una cadena de caracteres. Si la matriz no incluye este carácter al final no se considerará como una cadena de caracteres, sino como una simple matriz de caracteres.
La longitud de la cadena “Hola” es igual a 4 caracteres (no se incluye el carácter nulo), sin embargo la cadena ocupa en memoria el espacio de 5caracteres.
Los caracteres son bloques de construcción fundamentales para los programas fuente. Un programa puede contener constantes de carácter. Una constante de carácter es un valor int representado por un carácter entre comillas sencillas. El valor de una constante de carácter es el valor entero del carácter en el conjunto de caracteres de la máquina.
Por ejemplo, 'z' representa el valor entero de z, y '\n' representa el valor entero de una nueva línea.
Una cadena es un conjunto de caracteres tratados como una sola unidad. Una cadena puede incluir letras, dígitos y varios caracteres especiales como +, -, *, y $. En C, las literales de cadena, o constantes de cadena, se escriben dentro de comillas dobles de la siguiente manera:“Juan P. Pérez” (un nombre) “99999 de Eje Central” (la dirección de una calle).
Un arreglo de caracteres o una variable de tipo char * puede inicializarse con una cadena en la definición. Las definiciones
char color[] = “azul”;
const char *ptrColor = “azul”; inicializan una variable con la cadena “azul”. La primera definición crea un arreglo de 5 elementos, color, que contiene los caracteres 'a', 'z', 'u', 'l' y '\0'. La segunda variable crea una variable apuntador, ptrColor, que apunta a la cadena
“azul” en algún lugar de la memoria.
La definición del arreglo anterior también podría escribirse como char color[] = {'a', 'z', 'u', 'l', '\0'};
Cuando se define un arreglo para que contenga una cadena, éste debe ser lo suficiente grande para almacenar la cadena y su carácter de terminación nulo. La definición anterior determina automáticamente el tamaño del arreglo, basándose en el número de inicializaciones de la lista de inicialización ('a', 'z', 'u', 'l', '\0').
No almacenar suficiente espacio en un arreglo de caracteres para almacenar el carácter nulo que termina una cadena, es un error.
Si una cadena es más grande que el arreglo de caracteres en el cual se va a almacenar, los caracteres más allá del final del arreglo sobrescribirán los datos siguientes en la memoria del arreglo.
Una cadena puede almacenarse en un arreglo, por medio de scanf. Por ejemplo, la siguiente instrucción almacena el arreglo de caracteres palabra[20]: scanf( “%s”, palabra );
La cadena que introduce el usuario se almacena en palabra. Observe que palabra es un arreglo, el cual es, por supuesto, un apuntador, de modo que no necesitamos un & con el argumento palabra. La función scanf leerá caracteres hasta encontrar un espacio, un tabulador, un indicador de nueva línea o de fin de archivo. Observe que la cadena no debe ser mayor que 19 caracteres para dejar espacio suficiente para el carácter de terminación nulo. Para un arreglo de caracteres que se imprimirá como una cadena, el arreglo debe contener el carácter de terminación nulo.
La cadena de caracteres está definida como un arreglo de caracteres, debido a que el nombre de un arreglo es la dirección de memoria del primer elemento del arreglo, por lo que si se iguala el nombre del arreglo al nombre de un puntero, a este puntero se le puede aplicar aritmética de punteros (ver apunte Punteros) para poder desplazarse entre los datos del arreglo.

















Todas las funciones para manejo de cadenas tienen su prototipo en:
#include <string.h>
Las funciones más comunes son descritas a continuación:
∞char *strcpy(const char *dest, const char *orig) -- Copia la cadena de caracteres apuntada por orig (incluyendo el carácter terminador '\0') al vector apuntado por dest. Las cadenas no deben solaparse, y la de destino, debe ser suficientemente grande como para alojar la copia.
∞int strcmp(const char *s1, const char *s2) -- Compara las dos cadenas de caracteres s1 ys2. Devuelve un entero menor, igual o mayor que cero si se encuentra que s1 es, respectivamente, menor que, igual a, o mayor que s2.
∞char *strerror(int errnum) -- Devuelve un mensaje de error que corresponde a un número de error.
∞int strlen(const char *s) -- Calcula la longitud de la cadena de caracteres.
∞char *strncat(char *s1, const char *s2, size_t n) -- Agrega n caracteres de s2 a s1.
∞int strncmp(const char *s1, char *s2, size_t n) -- Compara los primeros n caracteres de dos cadenas.
∞char *strncpy(const char *s1, const char *s2, size_t n) -- Copia los primeros n caracteres de s2 a s1.
∞strcasecmp(const char *s1, const char *s2) -- versión que ignora si son mayúsculas o minúsculas de strcmp().
∞strncasecmp(const char *s1, const char *s2, size_t n) -- versión insensible a mayúsculas o minúsculas de strncmp() que compara los primeros n caracteres de s1.
El uso de muchas funciones es directo, por ejemplo:
char *s1 = "Hola";
char *s2;
int longitud;

longitud = strlen("Hola");    /* long = 4 */
(void) strcpy(s2,s1);
Observar que tanto strcat() y strcopy() regresan una copia de su primer argumento, el cual es el arreglo destino. Observar también que orden de los argumentos es arreglo destino seguido por arreglo fuente lo cual a veces es una situación para hacerlo incorrectamente.
La función strcmp() compara lexicográficamente las dos cadenas y regresa:
∞Menor que cero -- si s1 es léxicamente menor que s2;
∞Cero -- si s1 y s2 son léxicamente iguales;
∞Mayor que cero -- si s1 es léxicamente mayor que s2;
Las funciones de copiado strncat()strncmp() y strncpy() son versiones más restringidas que sus contrapartes más generales. Realizan una tarea similar, pero solamente para los primeros n caracteres. Observar que el caracter de terminación NULL podría ser violado cuando se usa estas funciones, por ejemplo:
char *s1 = "Hola";
char *s2 = 2;
int longitud = 2;

(void) strncpy(s2, s1, longitud); /* s2 = "Ho" */
donde s2 no tiene el terminador NULL.


Las cadenas de caracteres son un tipo particular de vectores, son de hecho vectores de char, con la particularidad que tienen una marca de fin, además el lenguaje nos permite escribirlas como texto dentro de comillas dobles. 

Práctica 1 - Unidad 6


miércoles, 29 de mayo de 2013

Prácticas Unidad 5





Unidad 5, Arreglos

INTRODUCCION


Un arreglo es una colección de datos (cada uno de los cuales es del mismo tipo). Cada pieza del arreglo se llama elemento. Para acceder a un elemento de un arreglo, utiliza el operador de corchetes ( [] ) y un índice entero que indica la ubicación del elemento en el arreglo.



5 – ARREGLOS


Un arreglo es una colección de datos del mismo tipo, que se almacenan en posiciones consecutivas de memoria y reciben un nombre común. Un arreglo puede tener una colección finita, homogénea y ordenada de elementos. Finita: Todo arreglo tiene un límite; es decir, debe determinarse cuál será el número máximo de elementos que podrán formar parte del arreglo. Homogénea: Todos los elementos del arreglo deben ser del mismo tipo. Ordenada: Se puede determinar cuál es el primer elemento, el segundo, el tercero,.... y el n-ésimo el elemento.

·         Los componentes: Hacen referencia a los elementos que forman el arreglo, es decir, a los valores que se almacenan en cada una de las casillas del mismo.
·         Los índices: Permiten hacer referencia a los componentes del arreglo en forma individual, especifican cuántos elementos tendrá el arreglo y además, de qué modo podrán accesarse esos componentes. Existen tres formas de indexar los elementos de una matriz:
1.       Indexación base-cero (0): En este modo el primer elemento del vector será la componente cero (0) del mismo, es decir, tendrá el índice '0'. En consecuencia, si el vector tiene 'n' componentes la última tendrá como índice el valor n-1. 
2.       Indexación base-uno (1): En esta forma de indexación, el primer elemento de la matriz tiene el índice '1' y el último tiene el índice 'n' (para una matriz de 'n' componentes).
3.       Indexación base-n (n): Este es un modo versátil de indexación en la que el índice del primer elemento puede ser elegido libremente, en algunos lenguajes de programación se permite que los índices puedan ser negativos e incluso de cualquier tipo escalar (también cadenas de caracteres).

Las operaciones que se pueden llegar a realizar con vectores o arreglos durante el proceso de resolución de un problema son las siguientes: 
·          Lectura (llenar el vector): El proceso de lectura de un arreglo consiste en leer y asignar un valor a cada uno de sus elementos. Normalmente se realizan con estructuras repetitivas, aunque pueden usarse estructuras selectivas.
·          Escritura (mostrar el vector): Es similar al caso de lectura, sólo que en vez de leer el componente del arreglo, lo escribimos.
·          Asignación (dar valor a una posición específica): No es posible asignar directamente un valor a todo el arreglo; sino que se debe asignar el valor deseado en cada componente. Con una estructura repetitiva se puede asignar un valor a todos los elementos del vector.
·         Actualización (dar valor a una posición específica): Incluye añadir (insertar), borrar o modificar algunos de los ya existentes. Se debe tener en cuenta si el arreglo está o no ordenado. Añadir datos a un vector consiste en agregar un nuevo elemento al final del vector, siempre que haya espacio en memoria.
·         Recorrido (acceso secuencial): El acceso a los elementos de un vector puede ser para leer en él o para escribir (visualizar su contenido). Recorrido del vector es la acción de efectuar una acción general sobre todos los elementos de ese vector.
·         Ordenación
·         Búsqueda.

5.1 INICIALIZACIÓN Y GENERACIÓN DE ARREGLOS


Un arreglo o tabla es una colección de datos del mismo tipo; estos datos se denominan elementos del arreglo.
Un arreglo es un espacio de memoria en la computadora que tiene nombre, al igual que una variable, pero a diferencia de una variable que solo puede guardar un dato, el arreglo está constituido por celdas donde podemos guardar datos del mismo tipo.
Al igual que otras variables, los arreglos se pueden inicializar al momento de declararse. Para hacer eso, es necesario enlistar los valores de cada uno de los elementos del arreglo entre llaves y separados por comas. Ejemplo:
Int b [3] = {2, 12, 1};
En casos como éste, cuando se escriben cada uno de los valores de los elementos del arreglo, algunos compiladores permiten omitir el tamaño del arreglo en la Declaración. Por ello, la declaración:
Int b [ ] = {2, 12, 1};
Sería equivalente a la anterior.

Antes de poder ser utilizado un arreglo para guardar datos, es necesario declararlo para que el compilador reserve el espacio solicitado. En la declaración del arreglo debe especificar las tres características de todo arreglo: tipo de dato, nombre y tamaño.
 sintaxis: Tipo Nombre [Tamaño];
Ejemplo:
In A [5]; //corresponde al arreglo en la representación gráfica.

El error más común en el manejo de arreglos es el tratar de usar un elemento del arreglo que no existe. Este error sólo es detectado por algunos de los compiladores de C++ y se muestra con un mensaje similar a: array índex out of range.

5.2 ARREGLOS MULTIDIMENSIONALES


Este también es un tipo de dato estructurado, que está compuesto por n dimensiones. Para hacer referencia a cada componente del arreglo es necesario utilizar n índices, uno para cada dimensión
Para determinar el número de elementos en este tipo de arreglos se usan las siguientes fórmulas:
RANGO (Ri) = lsi - (lii + 1)
No. TOTAL DE ELEMENTOS = R1 * R2* R3 * ...* Rn
donde:
i = 1 ... n
n = No. total de dimensiones
Para determinar la dirección de memoria se usa la siguiente formula:
LOC A[i1,i2,i3,...,in] = base(A) + [(i1-li1)*R3*R4*Rn + (i2-li2)*R3*R2*... (in - lin)*Rn]*w

A los arreglos de dos o más dimensiones se denominan también tablas o matrices, requieren dos índices, uno para el renglón y otro para la columna se declara así:
Sintaxis:
Tipo Nombre [No. De renglones] [No. De Columnas];
Ejemplo:
Flota ventas [4][3];

La inicializacion de los arreglos de dos dimenciones se hace de la siguente manera:


                                                                float ventas [4] [3] = { { 14.5, 26.7,65.1}, 
 { 3 1 .4, 1 5. 1 ,16.5 },
                                                                                       { 1 6.3, 1 4.5, 31.74 } };
{ 5.2, 1 .9, 21.6 },
Observe que los valores de cada renglón se ponen entre las llaves separados por comas, cada renglón separado por coma excepto el ultimo y todos los renglones entre llaves. La inicialización se puede escribir en un solo renglón pero se escribe como se muestra para que se vea en forma de matriz.

5.3 ARREGLOS DE CARACTERES


El uso más común de los arreglos unidimensionales es la implementación de una cadena (conjunto) de caracteres porque recuerde que en C no existe este tipo de datos. Por tanto, definimos una cadena en C como un arreglo de caracteres que al final tiene un carácter nulo ('\0'). Por esta razón es necesario que al declarar los arreglos estos sean de un carácter más que la cadena más larga que pueda contener.

Por ejemplo si deseamos crear un cadena que contenga 5 caracteres la declaración debe hacerse como sigue:
Carácter cadena [6] pseudocódigo
   char cadena[6]; en C
Esto es con el fin de dejar el último espacio para el carácter nulo.

5.4 UTILIZACIÓN DE ARREGLOS


En matlab existen muchas formas de crear arreglos.   Una forma útil es la de crear los elementos del arreglo con una sucesión de números.
Por ejemplo:
>> t = 1:6
t=
 1 2 3 4 5 6
También es posible dar la diferencia en el salto de los números de la sucesión
 > > t = 0:0.2:1
 t=
 0 0,2 0,4 0,8 1
Otra manera de crear arreglos es a través de las siguientes funciones:
zeros(m, n) crea una matriz mxn de ceros
ones(m, n) crea una matriz mxn de unos
eye(n) crea la matriz identidad nxn

Sea la matriz:
El modo general de referenciarían de los elementos de un arreglo es: A (f,c), donde f y c son los números de fila y columna respectivamente. Si uno de estos valores es un ’:’ entonces se asume la totalidad de los elementos en esa dimensión. En la matriz A anterior si uno imprime el valor A(3, 4) se mostrará el valor 12, pues 12 es el elemento de la fila 3 columna 4 del arreglo A. Si se desea utilizar la primera fila completa de la matriz A entonces puede referen- ciarse como A (1,:). Así por ejemplo si escribimos en Matlab:

> >A(1,:)

ans =

1 2 3 4

éste responderá imprimiendo la primera fila de A: 1 2 3 4

De la misma forma, para imprimir la columna cuarta, se hace así:

> >A(:, 4)

ans =

4
8
12
16

Notar que este último entrega los valores como una columna y no como una fila de elementos (horizontales). En muchos casos Matlab no trabaja con vectores columna sino con vectores fila y puede ser entonces necesario transformar este arreglo columna a su equivalente fila. Para esto se usa el comando reshape. Por ejemplo, para cambiar la columna cuarta (impresa en el ejemplo anterior) a su correspondiente vector fila (es decir un vector con elementos 4 8 12 16) se puede usar el siguiente comando:
> >n_vector = reshape( A(:, 4), 1, 4)
n_vector =
4 8 12 16
Como se puede apreciar n_vector es una nueva variable creada para almacenar la cuarta columna en forma de fila. Notar que en este caso reshape fue dado 3 argumentos: A(:, 4), 1 y 4. Esto quiere decir, que el vector columna A(:, 4) sea transformado en un vector de 1 fila y 4 columnas.
Este término se refiere a las operaciones de aritmética elemento por elemento, un punto (.) antes de un operador indica una operación de arreglos elementos por elemento por elemento.
Para suma y resta, las operaciones de arreglos y las operaciones de matrices son iguales.
El símbolo .* denota multiplicación de arreglos elemento por elemento.
Las expresiones A./B y A. \B dan los cocientes de los elementos individuales.
El símbolo .^ denota exponenciación elemento por elemento.

ANEXOS



CONCLUSIÓN


En la programación tradicional siempre se manejan dos tipos de arreglos los arreglos tipo listas, vectores o unidimensionales y los arreglos tipo tablas, cuadros, concentrados, matrices o bidimensionales en ambos casos son variables que permiten almacenar un conjunto de datos del mismo tipo a la vez, su diferencia es en la cantidad de columnas que cada uno de estos tipos contiene.
Para concluir en pocas palabras, un arreglo es la mejor solución a la hora de agrupar distintos datos que sean de un mismo tipo, estos datos se almacenan en la memoria y reciben un nombre común para todos.



Mapa Conceptual


Práctica 3 Unidad 4


Práctica 2 Unidad 4



Práctica 1 Unidad 4


miércoles, 15 de mayo de 2013

Síntesis Unidad 3


Introducción


En este curso de algoritmos y programación, en esta tercera unidad, hablamos sobre el control de flujo de programas.

Control De Flujo De Un Programa


Las estructuras de control nos permiten:
·         De acuerdo a una condición, ejecutar un grupo de sentencias.
·         Ejecutar un grupo de sentencias mientras exista una condición dada.
·         Ejecutar un grupo de sentencias hasta que exista una condición.
·         Ejecutar un grupo de sentencias un número determinado de veces.
Las estructuras de control tienen un único punto de entrada y un único punto de salida. Las clasificamos en secuenciales, selectivas y repetitivas. Por dichas razones permite que la programación se base en los principios de la programación estructurada.
Muchas sentencias en el lenguaje C o C++ se basan en una prueba condicional que determina si una acción de debe de llevar a cabo o no. En C o C++ cualquier valor distinto a cero es verdadero, hasta los negativos. El único faso es el cero.

Control Secuencial

Se define como una secuencia finita de acciones hasta llegar a un resultado. Su ejecución es realizada en el orden en el que se presentan las instrucciones desde el inicio hasta el fin del programa.

Control Selectivo

La estructura de selección altera la secuencia de un programa mediante una condición lógica, podemos expresar una condición lógica como una expresión relacional, donde cada operando puede ser una variable o una constante.
Sentencia if: Esta estructura evalúa una condición lógica y da como resultado un valor único, ya sea verdadero o falso. Si la condición lógica es verdadera ejecuta la secuencia_1 y luego la sentencia_2. Y si es falsa, sólo se ejecuta la secuencia_2.

Sentencia if-else: Aquí, si la condición lógica es verdadera, se ejecuta la secuancia_1, y, si es falsa la secuencia_2.
La condición lógica es una expresión que será evaluada como verdadera o falsa. La expresión puede ser simple o compuesta. Siempre se usa paréntesis encerrando a la condición a evaluarse, y puede existir un if dentro de otro.
Sentencia switch: Se utiliza para seleccionar una de varias alternativas. La usamos cuando la selección se base en el valor de una variable simple o de una expresión simple llamada selector, y su valor debe de ser entero.

Control Repetitivo

Corresponden a la ejecución repetida de una secuencia de sentencias un número determinado de veces, se denomina bucle. Y se llama interacción al hecho de repetir la ejecución de una secuencia de sentencias.
En el lenguaje C existen 3 tipos:
·         While
·         Do-while
·         For
While, nos permite evaluar una condición lógica y ejecuta el cuerpo del bucle si es verdadera. Y si es falsa no se ejecuta.
Do – While evalúa la condición lógica después de ejecutar el cuerpo del bucle do, y lo hará en secuencia repetitiva hasta que la condición tome un valor falso.
Esta es una instrucción para ejecutar un bloque de sentencias un número fijo de veces, y se coloca en la cabecera del estatuto. Si se requiere colocar más de una sentencia se deben de utilizar llaves, siempre en pares.


Conclusión


Existen tres tipos de estructuras de control de flujo de un programa:
®    Control Secuencial: Se define como una secuencia finita de acciones hasta llegar a un resultado. Su ejecución es realizada en el orden en el que se presentan las instrucciones desde el inicio hasta el fin del programa.
®    Control Selectivo: La estructura de selección altera la secuencia de un programa mediante una condición lógica, podemos expresar una condición lógica como una expresión relacional, donde cada operando puede ser una variable o una constante.
®    Control Repetitivo: Corresponden a la ejecución repetida de una secuencia de sentencias un número determinado de veces, se denomina bucle. Y se llama interacción al hecho de repetir la ejecución de una secuencia de sentencias.