Algoritmos y lenjuage de programacion

9
INSTITUTO TECNOLOGICO SUPERIOR DE GUASAVE ALGORITMOS YLENGUAJE PROGRAMACION ASESOR: CARLOS ALFREDO CERVANTES ALUMNO: RUIZ ALVAREZ ARAN ISAAC ING. INSDUTRIAL 4-4

Transcript of Algoritmos y lenjuage de programacion

Page 1: Algoritmos y  lenjuage de programacion

INSTITUTO TECNOLOGICO SUPERIOR DE GUASAVE

ALGORITMOS YLENGUAJE

PROGRAMACION

ASESOR:

CARLOS ALFREDO CERVANTES

ALUMNO:

RUIZ ALVAREZ ARAN ISAAC

ING. INSDUTRIAL 4-4

Page 2: Algoritmos y  lenjuage de programacion

FUNCION ESTANDAR

Se denomina una función estándar de C, es decir, una función que está

incluida con el compilador. Para poder usarla dentro de un programa hay que

decir en el mismo como es su forma: eso se hace incluyendo la línea #include

<stdio.h> al principio. De momento dejaremos esto así y lo explicaremos dentro

de más sobre printf.

Para poder trabajar o llamar a una función estándar hay que conocer que

necesita y qué hace. De la función printf hay que saber:

Su nombre cada vez que se coloca printf en un programa le estamos diciendo

al compilador de C que queremos usar esta función.

Lo que se quiere imprimir, que irá entre los paréntesis

En general, la expresión (números o texto) que va entre los paréntesis de una

función se llaman parámetros de la función. Por ejemplo, si en matemáticas se

quiere calcular el valor de

Fórmula

en MathML: Logaritmo de tres equis al cuadrado

, el parámetro de la función logaritmo sería

Fórmula

en MathML: Tres equis al cuadrado

. En lenguaje C, algunas funciones necesitan que le demos datos para poder

hacer su trabajo y otras no. Por ejemplo, printf necesita el texto que hay que

mostrar por pantalla (el cual se entrecomilla), pero para la función principal

main no es obligatorio.

Qué hace y cómo funciona

Page 3: Algoritmos y  lenjuage de programacion

printf() escribe texto en la pantalla del computador. Los detalles de

funcionamiento aparecen en el manual del compilador que se esté usando. El

manual nos dice, por ejemplo, que si colocamos el código \n dentro del

parámetro de printf(), se imprimirá un salto de línea.

Un compilador suele tener decenas de funciones estándar, aunque su número

exacto y los detalles concretos de funcionamiento de las funciones estándar de

C dependen de cada compilador.

Las variables nos permiten almacenar datos. Estos datos pueden ser de

distinto tipo o formato numérico y de distinto tamaño (en bits o bytes). Por

ejemplo, un dato numérico puede almacenarse en una variable de tipo entero o

en otra de coma flotante simple precisión. Recíprocamente, 32 bits (4 bytes) de

la memoria pueden servir para contener un número de coma flotante simple

precisión, o para 4 letras según el convenio ASCII. Es decir, que las variables

fijan una interpretación de los bits de memoria o datos de que disponemos en

el programa.

Las variables pueden ser manipulados usando expresiones de distinto

tipo. Una expresión es un conjunto de operaciones que realizan cálculos con

datos o con los datos contenidos en las variables. Por ejemplo, las expresiones

aritméticas son las más comunes.

2 ENTRADA Y SALIDAD DE DATOS

En un algoritmo, los datos de entrada son los que la computadora va a

procesar. Los datos de salida son datos derivados, es decir, obtenidos a partir

de los datos de entrada. Por esta razón, a los datos de salida se les considera

más significativos que a los datos de entrada. Sin embargo, en un sentido más

filosófico, a los datos de entrada se les considera la materia primade los datos

de salida, considerados estos como la verdadera información.

Entrada

Una instrucción de entrada (o simplemente entrada) consiste en asignar a una

o más variables, uno o más valores recibidos desde el exterior. Normalmente,

Page 4: Algoritmos y  lenjuage de programacion

los datos son recogidos desde la entrada estándar (el teclado), pero, también

existen otros dispositivos de entrada (el ratón, el escáner,...).

En algoritmos la instruccion de entrada es:

leer( <nombre_de_la_variable_1>,

<nombre_de_la_variable_2>,

...,

<nombre_de_la_variable_n> )

También se puede escribir como:

leer( <lista_de_variables> )

Ejemplo : Partiendo de las variables

cadena: nombre, apellidos

entero: edad

para cada una de ellas se puede recoger un valor desde el

teclado, escribiendo:

leer( nombre )

leer( apellidos )

leer( edad )

Otra posibilidad es

leer( nombre, apellidos, edad )

Salida

Una instrucción de salida (o simplemente salida) consiste en llevar hacia el

exterior los valores obtenidos de la evaluación de una lista de expresiones.

Normalmente, los datos son enviados a la salida estándar (la pantalla), pero,

también existen otros dispositivos de salida (la impresora, el plotter,...).

En pseudocodigo, la sintaxis de una instruccion de salida es:

Page 5: Algoritmos y  lenjuage de programacion

escribir( <expresión_1>, ..., <expresión_n> )

También se puede escribir como:

escribir( <lista_de_expresiones> )

Ejemplo: Partiendo de las variables

cadena nombre = "Timoteo"

entero edad = 27, hijos = 2

al escribir

escribir ( nombre, " tiene ", edad, " años." )

Escribir ( nombre, " tiene ", hijos, " hijos." )

FFUUNNCCIIOONNEESS DDEEFFIINNIIDDAASS PPOORR EELL UUSSUUAARRIIOO.

Definición de Funciones

Las funciones definidas por el programador se escriben “fuera” de la función

main. Si se recuerda, uno de los objetivos del uso de las funciones es la

descomposición de problemas complejos y el trabajo en grupo. El siguiente es

un ejemplo de una definición de una función. Se utiliza antes de presentar la

sintaxis formal de modo que nos podamos familiarizar con la terminología:

double square(double numero)

{

double cuadrado;

cuadrado = numero * numero;

return cuadrado;

}

Esta definición de la función square consiste de:

1) El encabezado de la función double square(double numero)

Page 6: Algoritmos y  lenjuage de programacion

Observe que el encabezado no termina con punto y coma. Las partes del

encabezado de una función son los siguientes.

a) Una lista de los argumentos de la función entre paréntesis:

(double numero)

Si se considera a la función como un programa pequeño, la lista de argumentos

serían equivalentes a los datos que en un programa se introduciría a través de

la instrucción cin. Es importante que observe que en la lista de argumentos se

indican tanto la lista de los argumentos necesarios como el tipo de cada uno de

ellos.

b) El nombre de la función

square

que puede se cualquier identificador válido en C++.

c) El tipo de valor que regresa la función como resultado.

double

2) El cuerpo de la función

{

double cuadrado;

cuadrado = numero * numero;

return cuadrado;

}

El cuerpo de la función se encierra entre llaves y en él se escriben las

sentencias que se necesitan ejecutar para lograr el objetivo de la función.

Contiene al menos una sentencia return. La sentencia return va seguida del

nombre de una variable o de un valor constante.

return cuadrado;

El valor de dicha variable (o el valor de dicha constante) constituye el valor de

regreso de la función. El tipo del valor que regresa la función debe ser

consistente con el tipo del valor de regreso especificado en el encabezado de

la función. Observe que, en este ejemplo, el valor de regreso de la función (tipo

Page 7: Algoritmos y  lenjuage de programacion

de la variable llamada cuadrado) es double, al igual que el tipo de valor de

regreso especificado en el encabezado.

Llamado de Funciones

El llamado de las funciones definidas por el usuario se realiza de la misma

forma que el llamado a funciones predefinidas. Por ejemplo, si un programador

ha definido la función square de este ejemplo, los siguientes serían llamados

válidos a la función:

double x,y,z;

x=2.0;

y = square(10.0);

z = square(x+y);

Observe que los argumentos que se pasan a la función (10.0 en el primer caso

y x+y en el segundo caso) son del tipo double y coinciden con el tipo definido

para el argumento de la función. Asimismo, a la variable y se le asigna el valor

de regreso de la función square(10.0). Esto es correcto porque el valor de

regreso de la función es de tipo double y la variable y también es de tipo

double. Note que no es necesario que los argumentos con que la función es

llamada se nombren igual que los identificadores usados en el encabezado de

la función.

Paso por valor

El paso de parámetros por valor consiste en copiar el contenido de la variable

que queremos pasar en otra dentro del ámbito local de la subrutina, consiste

pues en copiar el contenido de la memoria del argumento que se quiere pasar

a otra dirección de memoria, correspondiente al argumento dentro del ámbito

de dicha subrutina. Se tendrán dos valores duplicados e independientes, con lo

que la modificación de uno no afecta al otro.

Paso por referencia

El paso de parámetros por referencia consiste en proporcionar a la subrutina a

la que se le quiere pasar el argumento la dirección de memoria del dato. En

Page 8: Algoritmos y  lenjuage de programacion

este caso se tiene un único valor referenciado (o apuntado) desde dos puntos

diferentes, el programa principal y la subrutina a la que se le pasa el

argumento, por lo que cualquier acción sobre el parámetro se realiza sobre la

misma posición de memoria.

Puntero

Un puntero o apuntador es una variable que da referencia a una región

de memoria; en otras palabras es una variable cuyo valor es una dirección de

memoria. Si se tiene una variable ' p ' de tipo puntero que contiene una

dirección de memoria en la que se encuentra almacenado un valor ' v ' se dice

que ' p ' apunta a ' v '. El programador utilizará punteros para guardar datos en

memoria en muchas ocasiones, de la forma que se describe a continuación.

Trabajar con punteros no implica la manipulación de los datos en sí, sino

manejar las direcciones de memoria en la cuales estos residenEl ejemplo que

sigue es propio del lenguaje C/C++ y no es de aplicación en otros lenguajes de

programación:

struct Elemento // Ejemplo de un nodo de lista doble enlazada

{

int dato;

struct Elemento *siguiente; // El '*' es el operador de indirección, y es el

usado para declarar punteros

struct Elemento *anterior;

};

Para acceder a los atributos como punteros de una estructura que va a ser

tratada como tal, se debe desreferenciar el puntero y acceder a sus miembros

como se haría con una variable normal, o usar directamente el operador: ->. De

tal modo que:

Elemento *elem;

Elemento sig1 = (*elem).siguiente;

Elemento sig2 = elem->siguiente;

/* Se cumple que: sig1==sig2 */

Page 9: Algoritmos y  lenjuage de programacion

Los paréntesis en este ejemplo son necesarios, pues el operador '*' es el que

menor prioridad de operaciones tiene asignada (por lo que se

haría *(elem.siguiente), lo que es incorrecto, pues trataría acceder a un campo

de una dirección de memoria, y no de una estructura. Esto es un error

sintáctico, en tiempo de compilación).

Otro ejemplo en C++: Se presenta una función que no devuelve ningún valor,

esta función llamada "swap" tiene como parámetros dos punteros del tipo int.

Así, cuando sea llamada desde alguna parte del programa, recibirá las

direcciones de dos variables; luego accederá a dichas variables gracias al

operador de indirección (* precediendo al identificador del puntero) y podrá

intercambiar sus valores residentes.

void swap(int *x, int *y)

{

int temp;

temp = *x; // copia el valor apuntado por x a temp

*x = *y; // copia el valor apuntado por y en la ubicación del puntero x

*y = temp; // copia el valor de temp en la ubicación apuntada por y

}