Estructuras iterativas

La condición que se desea que se cumpla, se escribe a la derecha del rectángulo

Pueden darse dos casos de iteración:

Ciclos repetitivos exactos

Dados los sueldos de N empleados, determinar el total a pagar

Tipo de ciclo = exacto N       datos = N, sdo                       resultado:   tot = tot + sdo





En seudo código sería:

Comienzo
Tot =0
Para I = 1 a 10
            Ingresar “ingrese el sdo del empleado, I”
            Ingresar sdo
            Tot = tot + sdo
Próximo
Imprimir “el total de sueldos es tot”
Fin

En lenguaje C sería

#include <stdio.h>
#include <conio.h>

void main()
{
int i;
float sdo,tot;
tot=0;
clrscr();
for(i=1;i<=10;i++)
{
printf("ingrese el sdo del empleado %d \n",i);
scanf("%f",&sdo);
tot =tot+sdo;
}
printf("el total de sueldos es %f",tot);
getch();
}



Ciclos repetitivos inexactos

Ingresar los sueldos de los empleados de una empresa hasta que el empleado sea igual a 0, calcular el total de sueldos a pagar

Tipo de ciclo = inexacto “hasta”       datos = Emp               resultado: tot = tot + sdo



En seudo código seria


Comienzo
Ingresar “ingrese el empleado y su sueldo”
Ingresar emp,sdo
Hacer mientras  emp <> 0
                        Tot = tot + sdo
                        Ingresar “ingrese el empleado y su sueldo”
Ingresar emp,sdo
Repetir
Imprimir “el monto total a pagar es tot”
fin


En lenguaje C sería

 

#include <stdio.h>
#include <conio.h>

void main()
{
int emp;
sloat  sdo,tot;
clrscr();
tot=0;
printf("ingrese el nro de empleado ");
scanf("%d",&emp);

while(emp!=0)
{
printf("ingrese el sueldo ");
scanf("%f",&sdo);

tot =tot+sdo;
printf("ingrese el nro de empleado ");
scanf("%d",&emp);

}
printf("el total de sueldos es %f",tot);
getch();
}

Estructuras condicionales

La condición que se desea comprobar  va adentro del  rectángulo

Puede darse tres  casos

1.condicionales con salida por el verdadero de la condición especificada

Ingrese dos lados de un triangulo, indique si son iguales y por lo tanto que el triangulo no puede ser escaleno

Datos : lado 1 , L1
            Lado 2 ; L2

Resultado : imprimir son iguales

Proceso :  comparar L1 si es = a L2




En seudo código sería


Comienzo
            Ingresar”ingrese el primer lado “
            Ingresar L1
            Ingresar “ingresar el segundo lado”
            Ingresar L2
Si  L1 = L2 entonces
                        Imprimir “son iguales”
                        Imprimir “triangulo no escaleno”
Fin si
fin

En lenguaje C sería


#include <stdio.h>
#include <conio.h>
void main()
{
int l1,l2;
clrscr();
printf("ingrese el primer lado  ");
scanf("%d",&l1);
printf("ingrese el segundo lado  ");
scanf("%d", &l2);
if(l1==l2)
            {
            printf("son iguales \n");
            printf("el triangulo no es escaleno");
            getch();
            }
}

Estructuras secuenciales

Dado el valor de la hora y la cantidad de horas trabajadas por un empleado, calcular su sueldo

Datos : valor de la hora, vh
 cantidad de horas trabajadas, ch

resultado :      sueldo, sdo

proceso :         sdo = ch* vh






En seudo código sería                


Comienzo
Ingresar “el nro de empleado”
Leer, emp
Ingresar “la cantidad de horas”
Leer,ch
Ingresar “el valor de la hora”
Leer vh
Sdo = ch * vh
Imprimir “el empleado, emp, cobra,  sdo,pesos”
fin

 

En lenguaje C sería


#include <stdio.h>
#include <conio.h>
void main()
{
int emp,ch,vh,sdo;
clrscr();
printf("ingrese el nro de empleado  ");
scanf("%d",& emp);
printf("ingrese la cantidad de horas  ");
scanf("%d",&ch);
printf("ingrese el valor de la hora  ");
scanf("%d",&vh);
sdo=ch*vh;
printf("el empleado %d, cobra %d pesos",emp,sdo);
getch();
}

Diagramación Jackson


Esta es una forma más de representar la lógica de programación.

Un proceso es una secuencia de instrucciones que ocupan una cantidad de recursos  del computador y permiten la solución de un problema, ya sea en función de un solo proceso o de varios subprocesos que al combinarse, correcta y lógicamente, generan la solución deseada.

La diagramación Jackson consiste en dibujar a todos sus elementos como rectángulos, que se encuentran ordenados en forma secuencial de izquierda a derecha y poseen distintos niveles entre sí.

Ciclo de vida del software

El ciclo de vida de un sistema comienza cuando se detecta su necesidad y finaliza cuando se volvió obsoleto, ya sea por el tiempo, cambio de negocio u cualquier otra causa que nos indique que ya no es necesario.
Tenemos dentro de él varias etapas

1.      Análisis
2.      Diseño
3.      Implementación
4.      Depuración
5.      Mantenimiento

- Análisis


    Determina la definición del problema y especifica los requisitos que ha de tener por necesidad del usuario, quien deberá tener una participación activa en esta etapa a fin de modificar o corregir cualquier mala interpretación realizada por el analista.

- Diseño


    En esta etapa se definirá como el sistema lo hará para lograr las especificaciones solicitadas.

- Implementación


    Es la etapa en la cual se codifica a un lenguaje de programación los diseños efectuados anteriormente.
    Es conveniente para un mas fácil mantenimiento y lectura del programa la utilización de sangrías y comentarios de los distinto procedimientos que se codifican.

- Depuración


    En esta etapa se corrigen los distintos errores  de codificación, se realizan pruebas y se integra, siendo la fase de prueba algo muy difícil pues a lo sumo con los lotes de prueba que nosotros creamos, detectaremos que el programa no cometa un error, o sea que detectamos la presencia de un error y no su ausencia.
    Los lotes de prueba deben ser tan amplios, que alberguen dentro de sus valores, todas las posibles combinaciones a fin de detectar errores.
    Existen varios métodos, uno de ellos es la corrida en paralelo, del sistema para ver si da diferencia entre el nuevo y el anterior.
    Recordemos que un sistema no tiene porque haber existido anteriormente en modo computacional.

- Mantenimiento


Es la tarea mas ardua y quizás mas costosa, debemos hacerlo cuando se modifica el entorno de hardware o si cambian las necesidades del usuario, por ejemplo.


Factores en la calidad del software

          • Eficiencia
          • Transportabilidad
          • Verificabilidad
          • Integridad
          • Fácil de usar
          • Robustez
          • Extensibilidad
          • Reutilización
          • Compatibilidad

Fases de resolución de un problema con computadora

El proceso de resolución de un problema con una computadora conduce a la escritura de un programa y a su ejecución en la misma. Aunque el proceso de diseñar programas es “esencialmente”, un proceso creativo, se puede considerar una serie de fases o pasos comunes, que generalmente deben seguir todos los programadores.

Las fases de resolución de un problema con computadora son:

·         Análisis del problema: El problema se analiza teniendo presente la especificación de los requisitos dados por el cliente de la empresa o por otra persona que encarga el programa.
·         Diseño del algoritmo: una vez analizado el problema, se diseña una solución que conducirá a un algoritmo que resuelva el problema.
·         Codificación (implementación): la solución se escribe en la sintaxis del lenguaje de alto nivel (por ejemplo, C ) y se obtiene un programa.
·         Ejecución, verificación y depuración: el programa se ejecuta, se comprueba rigurosamente y se elimina todos los errores (denominados “bugs”, en inglés) que puedan aparecer.
·         Mantenimiento: El programa se actualiza y modifica, cada vez que sea necesario, de modo que se cumplan todas las necesidades de cambio de sus usuarios.
·         Documentación:   Escritura de las diferentes fases del ciclo de vida del software, esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y referencia, así como normas para el mantenimiento.

Las dos primeras fases conducen a un diseño detallado escrito en forma de algoritmo. Durante la tercera etapa (codificación) se implementa el algoritmo en un código escrito en un lenguaje de programación, reflejando las ideas desarrolladas en las fases de análisis y diseño.

     La fase de ejecución y compilación traduce y ejecuta el programa. En las fases de verificación y depuración el programador  busca errores de las etapas anteriores y los elimina. Comprobará que mientras más tiempo se gaste en la fase de análisis  y diseño, menos se gastara en la depuración  del programa. Por último, se debe realizar la documentación del programa.   

Un algoritmo es un método para resolver un problema mediante
una serie de pasos precisos, definidos y finitos.

Arrays en el Lenguaje C

Un array es una secuencia de datos del mismo tipo, os datos se llaman elementos de un array y se enumeran consecutivamente 0, 1, 2,... etc. el tipo del dato almacenado en un array pude ser de cualquier tipo de dato de C.

Otros nombres que reciben los arrays unidimensionales son tablas o vectores.

La numeración de los elementos se denomina índice o subíndice de un array y solo determina la posición del elemento dentro del array y no su valor o contenido.

Entonces dado el array denominado pp de 5 elementos

15
45
56
78
89
0
1
2
3
4

Tendríamos que  pp [ 1 ] = 45

O sea que el array llamado pp en la posición 1 tiene un elemento cuyo valor es 45

Declaración de un array


Un array se declara de la misma forma que cualquier otra variable, solo que debemos indicarle al compilador su tamaño.

Tipo   nombre del array   [ tamaño]

Int   pp[5];

El subíndice puede ser referenciado de distintas maneras para cargar o recuperar el valor almacenado en esa posición, por ejemplo

Edad[4];
Ventas[mes+1];
Bonos[mes];
Salario[mes[i]+1];

C  no comprueba que los índices del array estén dentro del rango definido, o sea si deseo leer la posición 8 de pp, no dará error de lectura pero si luego indicara una falla en el programa.

El operador sizeof devuelve el numero de bytes necesarios para contener su argumento, es así que podemos usarlo para conocer el tamaño de un array.

Si tenemos   int a[100] y le aplicamos la función sizeof[a] devolverá un valor de 200.

Formas de inicializar un array

Si se deben asignar valores iniciales a un array podemos emplear distintos métodos

pp[0] = 15;
pp[1] = 45;
pp[2] = 56;
pp[3] = 78;
pp[4] = 89;

También podríamos escribir lo siguiente, determinando automáticamente el tamaño del array

int pp[5]  = { 15, 45, 56, 78, 89 };
char ww[ ] = { ´a´, ´s´, ´I´ };
int pp[] = { 15, 45, 56, 78, 89 };

En C los arrays de caracteres, las cadenas, se caracterizan por tener un elemento nulo final, que indica el fin de la cadena.

Otra manera de inicializar, escribir y leer arrays de gran tamaño, es mediante un ciclo for.

También se pueden asignar variables simbólicas

# define ene 31
# define feb 28
# define mar 31

int meses[12] = { ene, feb, mar,...............};

 

Arrays de caracteres y cadenas


Una cadena es un conjunto de caracteres, tal como << abcdef.>> las cadenas contienen un elemento final nulo que indican fin de la cadena.

char cadena[ ] = “ abcdef ”;

Las cadenas se deben almacenar en un array de caracteres, pero no todos los arrays de caracteres contiene cadenas.

Para copiar una cadena a otra variable cadena se debe utilizar la función strcpy( ), donde si quiero copiar “hola” a la variable saludos seria:

Strcpy( saludos,“hola” );

Para evitar un error debemos tener en cuenta que el tamaño del receptor sea de igual o mayor tamaño que la cadena que vamos a mover.

Arrays multidimensionales


Estos arrays contienen  mas de una dimensión, los mas conocidos son llamados matrices.
Por lo tanto estos arrays tiene mas de un subíndice.
Su declaración será pues:

tipo  nombre [numero de filas] [numero de columnas];
int matriz [5] [6];

En realidad un array de dos dimensiones es un array de arrays  que para representarlo en una forma mas cómoda se lo hace por medio de una matriz.

La inicialización de las matrices puede ser de la misma forma que los vectores, teniendo en cuenta por ejemplo

 Int matriz [3] [4] = { {10,20,30,110},
                                   {40,50,60,101},
                                   {70,80,90,100}  }

El acceso a las matrices para su escritura o lectura será similar a los vectores, teniendo en cuenta la necesidad de al menos dos ciclos for, uno para las filas y otro para las columnas en el caso de una matriz bidimensional.

Utilización de arrays como parámetros


En C todos los arrays se pasan por referencia, o sea que se pasa la dirección del mismo y es posible de modificar su contenido en la función llamada y que al regresar a la función llamadora mantenga este valor modificado.

Otras funciones en el Lenguaje C

Funciones aleatorias

El archivo de cabecera  < stdlib.h > agrupa a estas funciones.

Función
Operación que realiza
rand(void)
Genera un numero aleatorio
Randomize(void)
Inicializa al generador de rand ( ) llamando a la función time por lo cual hay que incluir:  <time.h>
srand (semilla)
Inicializa al generador de rand ( ) desde el valor semilla
Random (num)
Genera un numero aleatorio entre 0 y num


Funciones de fecha y hora


El archivo de cabecera  < time.h > agrupa a estas funciones, la fecha se guarda con el formato del calendario gregoriano

Función
Operación que realiza
Clock(void)
Determina el tiempo transcurrido desde el principio de la ejecución del programa
time(hora)
Determina la hora actual
Localtime(hora)
Convierte la fecha y hora en una estructura de tipo tm
Mktime((t)
Convierte la fecha en formato de calendario


Funciones de utilidad

El archivo de cabecera  <stdlib.h> agrupa a estas funciones.

Función
Operación que realiza
abs(n)
Devuelve el valor absoluto de n
labs(n)
Devuelve el valor absoluto de n en long
div(num,denom)
Calcula el cociente y el resto de num/denom, dejándolos en las variables quot y en rem
ldiv(num,denom)
Idem anterior pero con variables tipo long