miércoles, 29 de mayo de 2013

Arreglos (Unidad 5)

INTRODUCCIÓN


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.




UNIDAD 5  ARREGLOS

5.1 INICIALIZACIÓN Y GENERALIZACIÓN


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.
El primer elemento en un arreglo tiene un índice 0, el segundo tiene un índice 1 y así sucesivamente. Por lo tanto, los índices en un arreglo de n elementos estarán en el rango de 0 a n - 1. Los elementos del arreglo son almacenados contiguamente en memoria.
Un arreglo es declarado especificando el tipo de sus elementos, seguido por corchetes. Considera la siguiente declaración:
int[  ]  ages;
El tipo de los elementos del arreglo es int, mientras que el tipo del arreglo en sí es int[ ].  El nombre del arreglo es el identificador ages. El identificador ages es una variable de referencia y sus valores son null inicialmente.
Cuando se crea un nuevo objeto arreglo, sus elementos son inicializados a sus valores predeterminados Para crear un objeto arreglo, utiliza el operador new, seguido por el tipo de los elementos y el tamaño del arreglo deseado. El tamaño del arreglo no debe ser negativo.
ages = new  int[5];

names = new String[3];

 Existe otra forma de crear un objeto arreglo: la declaración del arreglo puede incluir un inicializador, el cual es una lista separada por comas de los elementos iniciales entre corchetes. Un inicializador puede ser utilizado solamente en la instrucción de declaración.
int[  ]  ages = {21, 19, 35, 27, 55};

String[  ] names = {"Bob", "Achebe", null};

5.2 ARREGLOS MULTIDIMENSIONALES


La inicialización de arreglos multidimensionales es muy similar a la que se describió para arreglos de un solo índice. Otra vez es necesario enlistar los valores de cada uno de los elementos del arreglo entre llaves y separados por comas. La diferencia sin embargo, es que es necesario tener más de un grupo de valores encerrados entre llaves. Por ejemplo:
int x[2][3]={{1,2,3},{4,5,6}};
Observe que tenemos un conjunto de llaves que encierra a otros grupos de números también encerrados entre llaves y separados por comas. ¿Cuántos grupos de números se tienen encerrados por las llaves de los extremos?, porque la dimensión del primer índice es. ¿Cuántos números se tienen en cada uno de los grupos? , por el tamaño correspondiente al segundo índice es 3.
El ejemplo equivaldría a tener el siguiente arreglo de números. El primer índice representaría al renglón y el segundo índice a la columna:
1 2 3
x[0][0] x[0][1] x[0][2]
4 5 6
x[1][0] x[1][1] x[1][2]7

5.3 ARREGLOS DE CARÁCTERES


A diferencia de otros lenguajes de programación que emplean un tipo denominado cadena string para manipular un conjunto de simbolos, en C, se debe simular mediante un arreglo de caracteres, en donde la terminación de la cadena se debe indicar con nulo. Un nulo se especifica como '\0'. Por lo anterior, cuando se declare un arreglo de caracteres se debe considerar un carácter adicional a la cadena más larga que se vaya a guardar. Por ejemplo, si se quiere declarar un arreglo cadena que guarde una cadena de diez caracteres, se hará como:
char cadena[11];

Se pueden hacer también inicializaciones de arreglos de caracteres en donde automáticamente C asigna el caracter nulo al final de la cadena, de la siguiente forma:
char nombre_arr[ tam ]="cadena";

Por ejemplo, el siguiente fragmento inicializa cadena con ``hola'':
char cadena[5]="hola";
El código anterior es equivalente a:
char cadena[5]={'h','o','l','a','\0'};

5.4 UTILIZACIÓN DE ARREGLOS


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.
El primer elemento en un arreglo tiene un índice 0, el segundo tiene un índice 1 y así sucesivamente. Por lo tanto, los índices en un arreglo de n elementos estarán en el rango de 0 a n - 1. Los elementos del arreglo son almacenados contiguamente en memoria.



CONCLUSIÓN



Uno de los problemas más comunes en los diversos sistemas de información es el tratamiento o procesamiento de un gran volumen de datos o de información. Pero para resolver dichos problemas se emplea el método del arreglo, que nos sirve para Ordenar y estructurar datos que responden a una misma realidad o entidad, pero donde cada uno hace referencia a una instancia y De este modo nos evitamos tener n variables de un mismo tipo.

miércoles, 15 de mayo de 2013

Mapa Conceptual

Funciones Definidas Por El Usuario Y Funciones Definidas Por El Lenguaje En Programación C


INTRODUCCIÓN


Las funciones que se han utilizado hasta ahora son funciones que el lenguaje de programación ha predefinido en sus bibliotecas o librerías. Sin embargo, también es posible que el programador defina y utilice sus propias funciones.

FUNCIONES DEFINIDAS POR EL USUARIO Y FUNCIONES DEFINIDAS POR EL LENGUAJE EN PROGRAMACIÓN C


Una función, como ya se ha dicho, es un bloque de código dentro del programa que se encarga de realizar una tarea determinada. Por lo tanto un programa en c debe constar de una o más funciones, y por supuesto no puede faltar la función principal main().
Si un programa, está constituido por más de una función, las llamadas a la misma, pueden realizarse desde cualquier parte del programa, y la definición de ellas debe ser independiente unas de otras.
Por lo tanto sería un grave error el tratar de definir una función dentro de otra.
Una función puede ser llamada desde cualquier parte del programa no sólo una vez, y cuando es llamada, empieza a ejecutar las acciones que están escritas en código. Para mayor comodidad del lector vamos a ver varios ejemplos, del uso de funciones y a medida que vayamos avanzando se volverán más complejos.
El orden será el siguiente:
1.    Funciones que no devuelven ningún valor
2.    Funciones que devuelven un valor entero
3.    Funciones que devuelven un valor Real
4.    Funciones combinadas
5.    Funciones en las que usamos Menú.

Funciones que no devuelven ningún valor

Cómo se ha dicho las funciones pueden o no devolver algún valor, para mi parecer, este tipo de funciones son las más sencillas, ya que cuando se llama la función, esta realiza lecturas, asignaciones, cálculos o impresiones, finaliza la ejecución de la función y el programa continúa normalmente.

Ejemplo 1

Diseñe un programa que dados dos números enteros determine la suma y cual de ellos es mayor, usando dos funciones diferentes.
#include <stdio.h>
#include <conio.h>

void suma (int a, int b); /*Declaración de la función*/
void mayor (int a, int b); /*Tipo de dato, nombre de la función y el tipo y nombre de los argumentos*/
main()
{
int a, b;
printf("Ingrese el valor de a:\n");
scanf("%d", &a);
printf("Ingrese el valor de b:\n");
scanf("%d", &b);
suma(a,b); /*Llamado de la funci¢n*/
mayor(a,b); /*Unicamente el nombre de la funci¢n y de los par metros*/
getch();
return 0;
}
void suma(int a, int b) /*Definición de la función*/
{ /*Abrimos llaves al inicio de la definición*/
int sum; /*Declaración de las variables locales*/
sum=a+b;
printf("El valor de la suma es %d:\n\n", sum);
} /*Fin de la función suma*/
void mayor(int a, int b)
{
if(a==b)

printf("Son iguales\n\n");
else
{
if(a>b)
printf("El valor de a es mayor que el de b\n\n");
else
printf("El valor de b es mayor que el de a\n\n");
}
}

Definición de la Función

La función ha sido declarada, ha sido llamada y por lo tanto deber haber sido definida. Lo cual consta de dos partes, las cuales son:
Que como su nombre lo indica, es la primera línea de la definición de la función y con ella le indicamos al compilador que está en presencia de una función. Su formato es el siguiente:
Tipo_de_dato nombre_de_la_función (tipo y nombre de los argumentos)
·         La Primera Línea
·         Cuerpo de la función
Se inicia con una llave "{", y en ella, se pueden realizar asignaciones, cálculos, impresiones, así como la declaración de las variables locales. Puede estar constituidas por estructuras secuenciales, selectivas, iterativas, anidamientos, se pueden llamar otras funciones, etc; finaliza con "}". Puede devolver uno o ningún valor.
Las funciones que devuelven algún valor, se les llama PROTOTIPOS DE FUNCIONES:
Antes de usar una función C debe tener conocimiento acerca del tipo de dato que regresara y el tipo de los parámetros que la función espera.

El estándar ANSI de C introdujo una nueva (mejor) forma de hacer lo anterior respecto a las versiones previas de C.
La importancia de usar prototipos de funciones es la siguiente:
Se hace el código más estructurado y por lo tanto, más fácil de leer.
Se permite al compilador de C revisar la sintaxis de las funciones llamadas.
Lo anterior es hecho, dependiendo del alcance de la función. Básicamente si una función ha sido definida antes de que sea usada (o llamada), entonces se puede usar la función sin problemas.
Si no es así, entonces la función se debe declarar. La declaración simplemente maneja el tipo de dato que la función regresa y el tipo de parámetros usados por la función.
Es una práctica usual y conveniente escribir el prototipo de todas las funciones al principio del programa, sin embargo esto no es estrictamente necesario.
Para declarar un prototipo de una función se indicara el tipo de dato que regresará la función, el nombre de la función y entre paréntesis la lista del tipo de los parámetros de acuerdo al orden que aparecen en la definición de la función. Por ejemplo:
int longcad(int n); Lo anterior declara una función llamada longcad que regresa un valor entero y acepta otro valor entero como parámetro.
Este método es un poco complejo y puede realizarse de manera más fácil, haciendo uso de las funciones predefinidas en C, de las cuales hablaremos a continuación.
·         Funciones que devuelven un valor entero
·         Funciones que Devuelven un Valor Real
Antes que nada, trataremos las funciones predefinidas en C. Ya que C, posee ciertas funciones que nos ayudan hacer nuestros programas más fáciles y utilizar menos código.
El lenguaje c, cuenta con una serie de funciones de bibliotecas que realizan operaciones y cálculos de uso frecuente.

Para acceder a una función, se realiza mediante el nombre seguido de los argumentos que le servirán a la función a realizar la tarea específica. Podemos realizar muchas otras combinaciones de funciones, según necesitemos y lo solicite nuestro programa.
·         Funciones Combinadas
·         Funciones en las que usamos Menú
En la práctica, muchas veces debemos diseñar programas, que nos permitan elegir la acción o acciones a realizar, es decir haciendo uso de un menú. El cual, no es más ni menos que la aplicación de un selector múltiple. Un switch.

CONCLUSIÓN


El uso de las funciones en C sirve muchas ventajas:

1.            Facilita la programación modular de arriba hacia abajo. En este estilo de programación, el alto nivel del problema general se resuelve primero.

2.            La longitud de un programa de origen se puede reducir mediante el uso de las funciones en un lugar adecuado.

3.            Es fácil de localizar y aislar una función defectuosa de nuevas investigaciones.

4.            Una función puede ser utilizada por muchos otros programas. Esto significa que un programador de C se puede construir sobre lo que otros ya lo han hecho, en lugar de empezar desde cero.



Práctica 6 - Unidad 4


Práctica 5 - Unidad 4


Práctica 4 - Unidad 4


Práctica 3 - Unidad 4


Práctica 2 - Unidad 4



Práctica 1 - Unidad 4


Síntesis - Unidad 3


INTRODUCCIÓN


Las estructuras de control son utilizadas para modificar el flujo de la ejecución de las instrucciones que damos a un programa.
Todas las estructuras de control tienen un único punto de entrada y salida.
Las estructuras de control de clasifican en: control secuencial, control repetitivo y control selectivo.

CONTROL DE FLUJO DE PROGRAMA


Utilizamos la estructura de control para modificar el flujo de ejecución de las instrucciones de un programa.
Con las estructuras de control podemos: de acuerdo a una condición dada, ejecutar un grupo de sentencias (if, then, else); ejecutar un grupo de sentencias mientras exista una condición (do-while); ejecutar un grupo de sentencias hasta que exista una condición (do-until); ejecutar un grupo de sentencias un número determinado de veces (for-netx), entre otros.
Todas las estructuras de control tienen un único punto de entrada y salida. Podemos clasificar las estructuras de control en:
®    Control Secuencial
®    Control Selectivo
®    Control Repetitivo
Los puntos anteriores permiten que la programación se rija por los principios de la programación estructurada. Los lenguajes de programación que utilizamos actualmente tienen estructuras de control muy parecidas.
Muchas sentencias en lenguaje C y C++ se basan en ciertas condiciones para que una instrucción se ejecute. Aquí, cualquier valor distinto a cero es verdadero, incluyendo números negativos, entonces, el cero es el único valor falso.
Podemos decir, que el control secuencial es así como una secuencia finita de acciones, hasta que obtengamos un resultado. Se realiza en el orden en el que presentamos las instrucciones desde el inicio hasta el final del programa. Existen tres tipos de sentencias secuenciales:
®    Sentencia de entrada
®    Sentencia de salida
®    Sentencia de asignación


Esta estructura se utiliza para alterar de cierta forma el flujo de control secuencial de un programa mediante la evaluación de una condición lógica. Podemos expresar una condición lógica como una expresión racional, donde cada operando puede ser una variable o una constante y los operadores relacionados deben de ser uno de los de la siguiente tabla:


®    ESTRUCTURA SELECTIVA SIMPLE: Sentencia if
Esta sentencia evalúa una condición lógica. La evaluación de la condición lógica da como resultado un solo valor, puede ser verdadero o falso; sí es verdadera se ejecuta la sentencia_1 y luego la sentencia_2, y,  sí al evaluar al evaluar la condición lógica es falsa solo se ejecuta la sentencia_2.
®    ESTRUCTURA SELECTIVA DOBLE: Sentencia if-else.
Esta sentencia evalúa la condición lógica sí, dicha condición es verdadera se ejecuta la secuencia_1, y, si la condición es evaluada como falsa, entonces, se ejecuta la secuencia_2.


®    ESTRUCTURA SELECTIVA MÚLTIPLE: Sentencia switch
Esta sentencia se utiliza para seleccionar una de varias alternativas. La sentencia switch se suele utilizar cuando la selección se base en el valor de una variable simple o una expresión simple denominada expresión de control o selector, y su valor debe de ser entero.
Este control corresponde a la ejecución repetida de una secuencia de sentencias, mientras cumpla cierta condición. Poseen una sola entrada y salida. Las estructuras que repiten una secuencia de sentencias de un número determinado de veces se le llaman bucle o lazo y se llama interacción al hecho de repetir la ejecución de una secuencia de sentencias. En el lenguaje C existen sólo tres tipos: while, do-while y for.
La sentencia while nos permite evaluar una condición lógica, y ejecuta el cuerpo del bucle si es verdadera.
La sentencia do-while evalúa la condición lógica después de ejecutar el cuerpo del bucle do, que se ejecutara hasta que tome un valor falso.
El cuerpo del bucle se ejecuta por lo menos una vez.
Esta es una instrucción para que se lleve a cabo un bloque de sentencias un número fijo de veces. Si es necesario utilizar más de una sentencia se deben de colocar llaves ({ }).
El ciclo for ejecuta las sentencias de inicialización, evalúa la condición y si es verdadera entra al ciclo, ejecuta el resto de las sentencias, incrementa o decrementa la sentencia de inicialización y regresa al segundo paso. Si no colocamos la inicialización o la condición, la condición y el incremento o decremento deben de ir. Si la primera vez que colocamos la condición es falsa no se ejecuta ninguna sentencia y se cierra el ciclo for, y si se pone más de una inicialización deben de separarse con un punto y coma (;). Podemos declarar una variable en la selección de una inicialización sólo tenemos que checar que ésta variable sea reconocida dentro del ciclo.

CONCLUSIÓN


 En esta unidad, hemos utilizado los tres tipos de estructuras de control (control selectivo, control secuencial y control repetitivo) en las prácticas que elaboramos.
El control secuencial es una secuencia finita de acciones hasta obtener el resultado esperado. Se realiza en un debido orden.
El control selectivo altera el control secuencial mediante la evaluación de una condición lógica.
Y, el control repetitivo ejecuta repetidamente una secuencia de sentencias.

Práctica 16 - Unidad 3


Práctica 15 - Unidad 3




Práctica 14 - Unidad 3



Práctica 13 - Unidad 3


Práctica 12 - Unidad 3


Práctica 11 - Unidad 3






Práctica 10 - Unidad 3


Práctica 9 - Unidad 3


Práctica 8 - Unidad 3



Práctica 7 - Unidad 3



Práctica 6 - Unidad 3



Práctica 5 - Unidad 3




Práctica 4 - Unidad 3



Práctica 3 - Unidad 3


Práctica 2 - Unidad 3



Práctica 1 - Unidad 3