32
FUNDAMENTOS DE PROGRAMACION 1° Semestre LENGUAJE DE PROGRAMACION Es un conjunto de símbolos, caracteres y reglas necesarias que permitan al ser humano comunicarse con la computadora. Cada lenguaje debe aceptar ciertos tipos de instrucciones escritas, que permitan a la computadora realizar un número de operaciones conocidas. Todo lenguaje de programación debe tener instrucciones comprendidas entre las siguientes categorías: Instrucciones de entrada / salida. Instrucciones de cálculo. Instrucciones de lógica / comparación e Instrucciones de almacenamiento / consulta y movimiento. Los niveles de lenguaje de programación son: Lenguajes de maquina. Lenguajes ensambladores y Lenguajes de alto nivel. LENGUAJES DE MAQUINA Son lenguajes que consisten de una cadena de números binarios y es lo único que el CPU entiende directamente. Cualquier programa esta formado de instrucción, las instrucciones tiene como mínimo las siguientes dos partes: El comando y El operando. El comando u operación le dice a la computadora cual es la función que realizara. El operando le dice a la computadora donde encontrar o almacenar los datos o instrucciones. LENGUAJES ENSAMBLADORES Utilizan códigos operativos mnemónicos y direccionamiento simbólico y además son diseñados para un modelo específico de computadora. Al igual que el lenguaje máquina, cada instrucción consta de un comando y un operando. La palabra mnemónico se refiere a una ayuda a la memoria humana para recordar con facilidad las operaciones o comandos, en lugar de un conjunto de ceros y unos, como en el lenguaje maquina. LENGUAJES DE ALTO NIVEL Se les llama lenguaje de alto nivel, porque son fáciles de entender, es decir, son de alto nivel de entendimiento humano, porque sus instrucciones son palabras o frases propias del lenguaje humano. Los lenguajes de alto nivel permiten resolver tanto problemas científicos como comerciales. Su principal ventaja es que su construcción gramatical (sintaxis) se basa en verbos y palabras del idioma ingles y en el uso de notaciones algebraicas lo cuales hace muy sencillos de escribir.

Fundamentos de Programacion Unidad II

Embed Size (px)

DESCRIPTION

practica c++

Citation preview

Page 1: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

LENGUAJE DE PROGRAMACION

Es un conjunto de símbolos, caracteres y reglas necesarias que permitan al ser humano comunicarse con la computadora.

Cada lenguaje debe aceptar ciertos tipos de instrucciones escritas, que permitan a la computadora realizar un número de operaciones conocidas.

Todo lenguaje de programación debe tener instrucciones comprendidas entre las siguientes categorías:

Instrucciones de entrada / salida. Instrucciones de cálculo. Instrucciones de lógica / comparación e Instrucciones de almacenamiento / consulta y movimiento.

Los niveles de lenguaje de programación son: Lenguajes de maquina. Lenguajes ensambladores y Lenguajes de alto nivel.

LENGUAJES DE MAQUINA

Son lenguajes que consisten de una cadena de números binarios y es lo único que el CPU entiende directamente.

Cualquier programa esta formado de instrucción, las instrucciones tiene como mínimo las siguientes dos partes:

El comando y El operando.

El comando u operación le dice a la computadora cual es la función que realizara.El operando le dice a la computadora donde encontrar o almacenar los datos o instrucciones.

LENGUAJES ENSAMBLADORES

Utilizan códigos operativos mnemónicos y direccionamiento simbólico y además son diseñados para un modelo específico de computadora.

Al igual que el lenguaje máquina, cada instrucción consta de un comando y un operando.La palabra mnemónico se refiere a una ayuda a la memoria humana para recordar con facilidad

las operaciones o comandos, en lugar de un conjunto de ceros y unos, como en el lenguaje maquina.

LENGUAJES DE ALTO NIVEL

Se les llama lenguaje de alto nivel, porque son fáciles de entender, es decir, son de alto nivel de entendimiento humano, porque sus instrucciones son palabras o frases propias del lenguaje humano.

Los lenguajes de alto nivel permiten resolver tanto problemas científicos como comerciales.Su principal ventaja es que su construcción gramatical (sintaxis) se basa en verbos y palabras

del idioma ingles y en el uso de notaciones algebraicas lo cuales hace muy sencillos de escribir.Un ejemplo de un programa de alto nivel es el siguiente:

/* Ejemplo de un programa en lenguaje C++ */

#include “stdio.h”#include “conio.h”

int main( ){ int base, altura; float area; printf (“teclee la base”); scanf (“%d”, &base); printf (“teclee la altura”); scanf (“%d”, &altura);

Page 2: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

rarea = base*altura/2; printf (“\n El area del triangulo es %f”, area); getch ( );}

Los lenguajes de alto nivel se clasifican en: Compiladores e Intérpretes.

COMPILADOR

Un compilador es un programa para generar programas ejecutables, a través de los siguientes tres pasos:

I.- Captura del programa fuente: En esta fase, a través de un editor de textos, captura las instrucciones que forman el programa fuente, colocando las instrucciones en forma lógica.

II.- Proceso de compilación: Una vez que ha terminado de capturar el programa fuente, puede iniciar el proceso de compilación, el cual consiste en tomar cada una de las instrucciones del programa fuente y generar sus correspondientes instrucciones pero en lenguaje máquina. Si en este proceso no se generaron errores, entonces se crea un programa con este código generado, dicho programa se le conoce como programa objeto.

III.- Proceso de liga (link): En este proceso se toma el programa objeto y se liga o se une a una estructura general para producir el programa ejecutable. Si el proceso de link termina en forma exitosa, entonces se genera finalmente el programa ejecutable.

LENGUAJE INTERPRETE

Este tipo de lenguaje en vez de traducir el programa fuente y almacenarlo permanentemente como un código objeto, que es producido durante una corrida de compilación, para su uso futuro en la producción, el programador simplemente carga el programa fuente en la computadora, y al invocar al lenguaje interprete, toma una instrucción del programa fuente y la convierte a lenguaje maquina y la ejecuta y antes de convertir una nueva instrucción, desecha este código de maquina de la instrucción anterior y así sucesivamente por cada instrucción, de tal forma que la siguiente vez que se utilice la instrucción, debe una vez mas ser interpretada y traducida al lenguaje maquina.

PROGRAMA FUENTE

Es la codificación (escritura) de un programa usando un lenguaje de programación, por ejemplo un lenguaje de programación de alto nivel.

PROGRAMA OBJETO

Es el resultado de la compilación de un programa fuente.

PROGRAMA EJECUTABLE

Es el resultado de tomar un programa objeto y ligarlo con las librerías del compilador en que fue codificado el programa fuente.

Para producir un programa ejecutable se requiere seguir los siguientes pasos:

1.- Teclear el programa fuente usando un editor de textos.2.- Compilar el programa fuente, de tal forma que si no hay errores se crea un programa

objeto.3.- Ligar (link) el programa objeto con las librerías del compilador y si no hay errores se crea el

programa ejecutable.

ANALISIS Y DISEÑO DE LA SOLUCION

Para resolver un problema, la primera fase es analizarlo, es decir, se debe examinar cuidadosamente el problema, con la finalidad de obtener una idea clara sobre lo que se esta requiriendo, así como los datos necesarios para conseguir la solución.

Page 3: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

Este análisis nos lleva al planteamiento de un algoritmo que nos conduce a la solución del problema. Todo algoritmo debe poderse representar en un diagrama de flujo.

ALGORITMO

Es la secuencia ordenada de una serie de pasos escritos, sin ambigüedades, que conducen a la solución de un problema.

Para establecer un buen algoritmo debe cumplir con las características siguientes: DEBE SER PRECISO: Es decir, debe de indicar claramente el orden de ejecución de cada uno

de los pasos. SIN AMBIGUEDAD: Si ejecuta varias veces los mismos pasos, proporcionando los mismos

datos, los resultados siempre deben ser los mismos. FINITO: Debe tener siempre un fin en un tiempo determinado, siempre debe ejecutarse un

número determinado de pasos.Todo algoritmo debe contener como mínimo tres partes: ENTRADA DE DATOS: Es la información que requiere el algoritmo. PROCESO DE LA INFORMACION: Son las operaciones necesarias para encontrar la solución al

problema. SALIDA DE RESULTADOS: Son las respuestas parciales o finales del problema.

Los pasos que se describen en cada algoritmo son exclusivos por programador, porque cada persona realiza su algoritmo dependiendo del grado de detalle descriptivo que cada uno le quiera poner. Esta es la razón por lo cual en programación, cada persona hace un programa diferente para resolver el mismo problema.

DIAGRAMA DE FLUJO

El diagrama de flujo es la forma mas tradicional para representar gráficamente los detalles algorítmicos de un proceso. El diagrama de flujo utiliza una serie de símbolos gráficos y cada uno de ellos tiene un significado especial.

El objetivo de un diagrama de flujo es facilitar la comprensión de un algoritmo o simplificar el análisis de un proceso.

SIMBOLOS:

INICIO: Este símbolo se utiliza para señalar el comienzo de un diagrama.Tiene una línea con flecha de salida.

FIN: Este símbolo se utiliza para señalar la terminación de un diagrama.Tiene una línea con fecha de entrada.

ENTRADA DE DATOS: Este símbolo se utiliza para indicar la entrada de datos al proceso. Los datos pueden ser introducidos, por ejemplo desde el teclado. Este símbolo debe tener al menos una conexión de entrada y una de salida.

PROCESO DE DATOS: Este símbolo se utiliza para señalar expresiones matemáticas o procesos específicos utilizando los datos obtenidos en pasos anteriores, dentro del cuadro se puede describir brevemente la operación o una expresión matemática. Este símbolo debe tener al menos una conexión de entrada y una de salida.DE DECISION: Este símbolo representa una decisión lógica. En el interior del símbolo se anota una pregunta que será evaluada como cierta o falsa y que va a determinar el sentido del flujo del programa.Este símbolo es el único que puede tener dos salidas, en cada salida se debe indicar con un letrero si es salida verdadera (SI), o si es una salida falsa (NO), indicando con esto cual de las salidas se tomara en base al

Page 4: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

resultado de evaluación de la expresión que se encuentra colocada dentro del símbolo de decisión.

DESPLEGADO DE INFORMACION: Este símbolo se utiliza para desplegar información ya sea en el monitor de la computadora o en papel vía impresora. Esta información puede ser el resultado parcial o final del problema que se esté resolviendo a través del diagrama de flujo. Dentro del interior del símbolo se anota la variable que contiene el resultado o el mensaje que representa el resultado. Este símbolo al menos debe tener una conexión de entrada y una de salida.

DE FLUJO: Son los símbolos que se representan con flechas, las que indican la dirección que debe seguir la computadora para ejecutar la secuencia de instrucciones de acuerdo a la lógica del programa.

CARÁCTER DE SALTO: Este símbolo representa un salto dentro del diagrama de flujo. La utilidad es para evitar los cruces de líneas a través del diagrama de flujo. Se utilizan dos conectores, uno representa la puerta de salida y el otro la puerta de entrada.

CONECTOR DE PÁGINA: Este conector es para indicar un salto de una página a otra. Utilizan letras para diferenciarse de los conectores anteriores que usan números.

Diagrama de flujo para calcular y mostrar el área del trapecio:

INICIO

B, b, h

A=((B+b)*h)/2

A

FIN

Diagrama de flujo que captura desde el teclado 3 números: x, y, z, distintos entres si y el resultado del diagrama de flujo debe decir cual es el mayor de los 3.

INICIO

X, Y, Z

NO NO SI NOZ>Y X>Y X>Y

SI SI

Page 5: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

Y ES MAYOR Z ES MAYOR X ES MAYOR Z ES MAYOR

FIN

Diagrama de flujo que acepta desde el teclado 3 números: a, b, c, los cuales corresponden a las medidas de los lados de un triangulo, determinar en base a los valores capturados si se trata de un triangulo equilátero, isósceles, o escaleno. Recordando que el triangulo equilátero tiene todos sus lados iguales, el isósceles tiene dos lados iguales y uno desigual y el escaleno tiene sus tres lados desiguales.

INICIO

A, B, C

NO A=B, NO A=B A=C, Y B=C B=C

SI SI

ESCALENO ISOSCELES EQUILATERO

FIN

ESTRUCTURA DE UN PROGRAMA EN “C”

/*Mi primer programa en C */ LINEA DE COMENTARIOS:Los comentarios empiezan con los simbolos /* y acaban con */. El compilador ignora todo lo escrito entre este par de simbolos.

#include “stdio.n”#include “conio.h” ARCHIVO DE CABECERA:

Le indica al compilador que traiga el código de programa almacenado en este archivo y lo una a nuestro código de nuestro programa.Aquí se declaran los archivos de cabecera, Los signos “ “, <>, Significa que los archivos de cabecera stdio.h y conio.h se encuentran almacenados en el subdirectorio \+C\include.

Int main ( ) FUNCION MAIN ( ) (ARCHIVO PRINCIPAL):Todo programa en “C” debe tener una llamada a main( ).La ejecución de un programa empieza con la función main ( ) y a veces termina con la función return ( ).

{ CUERPO DE LA FUNCION main ( ):Las llaves { } definen el cuerpo de una función o definen un bloque lógico de sentencias.La llave abierta { indica el inicio del bloque de sentencias.La llave cerrada } indica el fin del bloque de la sentencia.

Page 6: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

printf (“HOLA”);getch ( ); INSTRUCCIÓN DEL PROGRAMA:

printf (“HOLA”); es la única sentencia en el cuerpo del programa. Lo que indica, es que la frase entre comillas se imprima en la pantalla.

}

ESTRUCTURA GENERAL DE UN PROGRAMA EN “C”

El siguiente programa muestra la estructura den un programa en “C”. La explicación se centrara sobre la estructura del programa.

ARCHIVOS DE CABECERA

Los archivos de cabecera, son archivos fuentes en C/C++, que contienen grupos de funciones y datos, que definen operaciones básicas que requiere todo lenguaje de programación.

Cuando se realiza el proceso de instalación de DEV/C++, en forma automática se almacenan los archivos de cabecera en el disco duro, en el directorio include. Estos archivos de cabecera, siempre su nombre termina con la extensión “h”, que significa headers (encabezados).

DEV/C++, contiene todos los archivos de cabecera definidos por el estándar ANSI C (American National Standars Institute). Por lo que el transporte del código fuente a otros entornos esta asegurado.

Estos archivos de cabecera, se declaran usando directivas #include, que permite incluir en el mismo programa, archivos de cabecera.

El orden en que se escriban en el programa los archivos de cabecera, no importa, con tal de que se incluyan antes de que se utilicen las funciones que tienen definidas internamente.

Ejemplo: #include <stdio.h>

Archivos de Cabecera#include <conio.h>

int x;Zona de Declaraciones Globales para Variables y Funciones

int imprime ( );

main ( ) Nombre de la Función Principal{ int y; Zona de Declaración Local para Variables y Funciones

clrscr ( ); x = 7; y = 15; printf (“x = %d, y = %d”, x,y); Bloque de Sentencias imprime ( ); getch ( ); return ( 0 );}Int imprime ( ){ X = 38; Función Definida por el Usuario printf (“\n x = %d”, x);}

ZONA DE DECLARACIONES GLOBALES

Page 7: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

Las funciones propias del programador y las variables declaradas en esta zona, indican al compilador, que son comunes a todas las funciones del programa, por lo que, significa que cualquier función del programa, incluyendo main ( ), puede utilizar esta variable o función.

Las declaraciones de una función en esta zona, se denominan prototipos y dependiendo del tipo de función es la cantidad de parámetros que debe tener declarada la función.

Por ejemplo:

int potencia (int a, int b);

El prototipo de esta función dice:1.- Que el nombre de la función es potencia, y que regresa un valor entero.2.- Que esta función potencia tiene dos parámetros enteros (int a, int b).

Lo que quiere decir, que cuando se invoque (se llame) esta función potencia, desde cualquier punto del programa o cuando se construya la función potencia, debe cumplir con esta estructura que se ha declarado en esta zona de declaración global.

NOMBRE DE LA FUNCION PRINCIPAL main ( )

Cada programa en “C” debe tener un solo main ( ). Este es el punto de inicio del programa, por lo que, si se coloca mas de una función main ( ) en el programa se producirá un error, porque solo puede tener un único punto de entrada el programa.

BLOQUE DE SENTENCIAS { }

Las sentencias que se encuentran entre las llaves { … }, las llamaremos “bloque de sentencias”, o instrucciones dentro de un programa.

En un programa pequeño, por lo general, dentro de la función main ( ), se pueden colocar todas las sentencias, y se le puede dar seguimiento a la lógica del programa sin ningún problema.

Pero en un programa grande, las sentencias son demasiadas, como para colocarlas todas dentro de la función main ( ), además, darle seguimiento a la lógica del programa es muy complicado.

Por lo que, para los programas grandes en “C”, se recomienda construirlos en base ha llamado a funciones.

Además cada sentencia debe acabar con el carácter punto y coma ( ; ) de lo contrario el compilador marcara error.

ZONA DE DECLARACION LOCAL

Las variables y constantes que se declaren en esta zona, solo pueden ser reconocidas únicamente dentro de la función main ( ).

En general, las variables que se declaren dentro de una función cualquiera, solo son reconocidas por la función donde fueron declaradas, es decir, son variables locales de la función donde fueron declaradas. Las variables locales se pueden declarar en el cuerpo o bloque de la función principal, en cualquier punto, pero antes de ser utilizadas.

FUNCIONES DEFINIDAS POR EL USUARIO (HECHAS POR EL PROGRAMADOR)

Todo programa en “C” es un conjunto de funciones, que estructuradas en forma lógica construyen una aplicación. Cada vez que requiera hacer una tarea especifica dentro de un programa, es recomendable realizarla a través de una función. Toda función esta construida por una serie de sentencias estructuradas en forma lógica. Las funciones definidas por el usuario, se pueden declarar antes o después de la función principal main ( ). También se pueden colocar varias funciones en un archivo fuente tipo texto externo al archivo donde se encuentra el programa principal y únicamente desde el programa principal hacer el llamado de estas funciones.

Las funciones son llamadas a través de la invocación de su nombre, y si tienen variables asociadas, también es necesario colocarlas a la hora del llamado. El control de la ejecución se traslada a la función llamada, para ejecutar las sentencias agrupadas en dicha función llamada.

Page 8: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

Una vez que las sentencias de la función llamada terminaron de ejecutarse, el control de ejecución regresa automáticamente a la función llamadora.

A las funciones se les puede asignar cualquier nombre, así como, los parámetros opcionales que pueden tener. Se recomienda, que el nombre de la función y la de sus parámetros, se les asigne un nombre que describa el propósito de la tarea.

Ejemplo: El siguiente programa muestra el uso de llamada de una función que regresa un valor.

#include <stdio.h>#include <conio.h>int imprime ( );float calculo_iva (float importe); DECLARACION DE LA FUNCIONmain ( ){ int cantidad; float precio, importe, neto, iva; clrscr ( ); cantidad = 7; precio = 15.90; printf (“cantidad = %d”, cantidad); printf (“precio = %f”, \n”, precio); importe = cantidad * precio; iva = calculo_iva (importe); LLAMADO DE LA FUNCION neto = importe + iva; printf (“\n Importe = %f”, importe); printf (“\n IVA = %f”, iva); printf (“\n NETO = %f”, neto); getch ( ); return ( 0 );}float calculo_iva (float importe) PRINCIPIA LA FUNCION{ float w; w = 0.15 * importe; SENTENCIAS DE LA FUNCION Return ( w ); FIN DE LA FUNCION}

Toda función antes de usarse se requiere una declaración. Si la función no se declara, el compilador enviara un error. La declaración debe ir antes de usarse, es decir, la declaración debe ir antes de main ( ).

FUNDAMENTOS DE PROGRAMACIONUna de las partes básicas de la programación es saber como estructurar un programa, como

colocar comentarios en el programa, con la finalidad de documentarlo dentro del mismo código fuente, de tal manera que, sea más fácil entender que hace un programa.

También una de las partes básicas es como desplegar información en la pantalla, así como, pedir datos desde el teclado, para tales propósitos existen en “C” funciones estándares de Entrada/Salida, es decir, funciones que le dan al programador facilidades para pedir y escribir información a su gusto sobre la pantalla, de tal manera, que el programador pueda distribuir a lo largo y a lo ancho de la pantalla, tanto letreros como datos, así como usar colores para dar una mejor presentación a sus resultados.

Otro de los puntos básicos es saber que tipos de datos maneja “C”, por lo tanto, que tipos de variables existen, y sus capacidades de almacenamiento de información que tienen las variables de acuerdo a su tipo. Así como, el uso de las operaciones aritméticas básicas que se emplean entre variables.

Page 9: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

Iniciaremos con la explicación de los elementos básicos de programación, y que un programador debe tener presente al inicio.

#include “stdio.h”#include “conio.h”main ( ){ clrscr ( ); printf (“Bienvenidos a Programación”); getch ( );}

#include “stdio.h” e #include “conio.h”.- Es la declaración de los archivos de cabecera, los signos “ “ o < > significan que los archivos de cabecera stdio.h y conio.h se encuentran almacenados en el subdirectorio\tc\include.

main ( ).- Todo programa en “C”, debe empezar con esta función principal y significa el inicio del programa, solo debe de existir un llamado a main ( ).

{ .- La llave abierta indica el inicio del bloque de sentencias.

} .- La llave cerrada indica el fin del bloque de sentencias.

clrscr ( ); .- Limpia la pantalla de resultados del programa y coloca el cursor en la parte superior izquierda de la pantalla.

printf ( ); .- Esta función despliega en la pantalla el letrero que se encuentra dentro de las comillas. Esta función esta definida en el archivo de cabecera stdio.h.

getch ( ); .- Función para detener el programa antes de que termine, y asi poder ver el resultado.

COMENTARIOS DENTRO DE UN PROGRAMA

Un comentario es un texto que se agrega al código fuente. El compilador ignora los comentarios, es decir, no realiza ninguna acción. El uso de comentarios es opcional, pero es muy recomendable colocar comentarios en el programa, ya que es mas fácil entender un programa que tiene comentarios.

En C++ los comentarios se pueden colocar de dos formas: Estilo Estándar o Estilo C++.

Si se está utilizando únicamente el compilador C++, puede utilizar el estilo C++, para colocar comentarios. Pero si su programa será compilado, además por otros compiladores C, se recomienda usar el estilo estándar para colocar comentarios.COMENTARIOS ESTILO C ESTÁNDAR

Los comentarios en C estándar inician con la secuencia de caracteres /* y termina el comentario con la secuencia */. El texto que se coloca dentro de estas dos secuencias de caracteres es ignorado por el compilador.

/* este es un comentario */

Es posible que el comentario contenga más de una línea de texto.

/* Primer ProgramaEn DevC++ */

También es posible colocar comentarios en una línea de sentencias.

ESPECIFICADORES DE FORMATO

Page 10: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

Los especificadores de formato de entrada se distinguen por el signo % y le dice a la función scanf ( ) que tipo de datos espera recibir.

Ejemplo:

Int main ( ){ Int i,j ; printf (“\n teclee dos números enteros separándolos”); printf (“\n con un espacio en blanco o capturar un numero”); printf (“\n pulsar la tecla <enter> y capturar el segundo”); scanf (“%d, %d”, &i, &j); printf (“\n el primer dato tecleado fue: %d”, i); printf (“\n el segundo dato tecleado fue: %d”, j); printf (“\n\n realice ambas capturas”); getch ( );}

CARÁCTER DE ESPACIO EN BLANCO

Un carácter de espacio en blanco en la cadena de control la dice a la función scanf ( ) que salte sobre uno o mas caracteres de espacio en blanco que recibe desde el teclado.

Los caracteres de espacio en blanco pueden ser: Un espacio en blanco. Un tabulador. Una nueva línea.

Lo anterior quiere decir, que un carácter de espacio en blanco en la cadena de control, hace que la función scanf ( ), lea pero no almacene cualquier numero de caracteres de espacio en blanco hasta el primer carácter de no espacio en blanco.

Ejemplo: Este programa muestra que la función scanf ( ), puede contener en su formato un carácter salto de línea ( \n ), por lo que, para pedir el segundo dato, primero se requiere pulsar la tecla <enter> y después teclear el segundo dato.

Int main ( ){ Int i,j ; printf (“\n\n CAPTURE DE LA FORMA SIGUIENTE”); printf (“\n teclee un numero entero”); printf (“\n pulse la tecla <enter> dos veces”); printf (“\n y teclee el segundo numero \n”); scanf (“%d\n\n%d”, &i, &j); printf (“\n el primer numero es: %d”, i); printf (“\n el segundo numero es: %d”, j); printf (“\n\n observe si existe alguna diferencia”); printf (“\n entre este programa y el anterior”); getch ( );}

CARÁCTER DE NO ESPACIO EN BLANCO

Son por ejemplo la coma o cualquier otro carácter que desee utilizar para separar sus datos al estar tecleándolos, y para que la función scanf ( ) lea y descarte un carácter especificado entre dato y dato.

Para que esto sea posible, es necesario codificarlo en la parte del formato, por ejemplo: %d, %d, lo que hace aquí la función scanf ( ) es, leer un entero, en seguida lee pero no almacena una coma y finalmente lee otro entero.

Nota importante: Si en los datos dados desde el teclado no se encuentra el carácter especificado en el formato, por ejemplo: la coma en este caso, la función scanf ( ) hasta ahí termina la asignación de datos a las variables.

Page 11: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

Ejemplo:

Int main ( ){ Int i,j ; printf (“\n teclee dos números enteros separados por coma:”); scanf (“%d, %d”, &i, &j); printf (“\n el primer numero tecleado es: %d”, i); printf (“\n el segundo numero tecleado es: %d”, j); getch ( );}

Como se observa, todas las variables usadas para recibir valores a través de scanf ( ) deben de codificarse con el carácter AMPERSAND ( & ), por la razón que deben pasarse los datos por su dirección, es decir, scanf ( ) es una función que pasa valores por “llamada de referencia”.

Ejemplo: Elaborar programa para calcular el perímetro de un circulo, dado un radio r.

/*Programa para calcular el perímetro de un circulo*/

#include “stdio.h”#include “conio.h”Int main ( ){ float p, r, pi=3.1416 ;/*variables*/ printf (“\n programa para calcular el perímetro de un circulo \ dado un radio r \n”); printf (“\n Introduzca el radio del circulo en cm: ”); scanf (“%f”, &r); /*captura desde el teclado el radio r*/ p=pi * r /*calculamos el perímetro*/ printf (“\n El perímetro del circulo de radio %f cm, es %f \ unidades \n”, r,p); getch ( );}

Una característica de la cadena de control, es que si colocamos un asterisco ( * ) entre el carácter % y el código de formato, la función scanf ( ) lee datos desde el teclado del tipo especificado en el formato, pero no realizara la asignación a la variable correspondiente.

Ejemplo:

Int main ( ){ int w, z ; char x ; printf (“\n teclee los siguientes datos tal como se lee”); printf (“\n indica 50 hola 100 ”); scanf (“%d%*c%d”, &w, &z); printf (“\n El primer valor tecleado es: %d”, w); printf (“\n El segundo valor tecleado es: %d”, z); getch ( );}

SALIDA:Teclee los siguientes datos tal como se leeIndica 50 hola 10050 hola 100El primer valor tecleado es: 50El segundo valor tecleado es: 100En la función scanf ( ), podemos indicar la longitud máxima del dato capturar, esto es posible,

si colocamos un numero entero que indicara la longitud de caracteres a capturar entre el % y el código de formato, además de que la variable donde se almacenaran los datos debe ser declarada como un arreglo de caracteres, por ejemplo: char [ x ], donde x es el numero de elementos del arreglo de caracteres a almacenar en la variable n. Hay que tomar en cuenta que en una cadena ( string ) el carácter espacio es delimitador de cadena.

Page 12: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

Ejemplo:

Int main ( ){ char [ 10 ] ; clrscr ( ) ; printf (“\n teclea mas de 10 caracteres”); scanf (“%10s”, &n); printf (“\n los caracteres almacenados son: %s”, n); getch ( );

/* has la prueba con los siguientes datos */Dato 1: 123456789012345Dato 2: EDGAR JAVIER}

SALIDA 1:Teclea más de 10 caracteres1234567890122345Los caracteres almacenados son: 1234567890

SALIDA 2:Teclea más de 10 caracteresEDGAR JAVIERLos caracteres almacenados son: EDGAR

Ejemplo:

Int main ( ){ char i[ 5 ], j [ 5 ], k [ 5 ] ; clrscr ( ) ; printf (“\n teclee lo siguiente: HOLA AMIGA MAGDALENA”); scanf (“%5s%5s%5s”, &i, &j, &k); printf (“\n el contenido de i es: %s”, i); printf (“\n el contenido de j es: %s”, j); printf (“\n el contenido de k es: %s”, k); getch ( );}

SALIDA:teclee lo siguiente: HOLA AMIGA MAGDALENAel contenido de i es: HOLAel contenido de j es: AMIGAel contenido de k es: MAGDA

NOTA: Observa que el programa únicamente termina si se teclean las tres cadenas, pero sise pulsa la tecla <enter>, sin dar las cadenas, el programa no termina, porque la función scanf() con el formato %s descarta los caracteres espacios y fines de línea <enter>.

Ahora bien, si la captura es de un único carácter ( %c ), los caracteres espacio y fin de línea si son almacenados, puesto que son considerados como simples caracteres.

Ejemplo:

Int main ( ){ char I, j, k, h ; clrscr ( ) ; printf (“\n teclee lo siguiente: a b,”); scanf (“%c%c%c%c”, &i, &j, &k, &h); printf (“\n el contenido de i es: %c”, i); printf (“\n el contenido de j es: %c”, j); printf (“\n el contenido de k es: %c”, k);

Page 13: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

printf (“\n el contenido de h es: %c”, h); getch ( );}

SALIDA:teclee lo siguiente: a b,el contenido de i es: ael contenido de j es:el contenido de k es: bel contenido de h es:

NOTA: Observa que el programa termina si pulsas 4 veces la tecla <enter> o 4 espacios y una vez la tecla <enter>.

OPERADORES Y EXPRESIONES

Los operadores son símbolos que indican en una expresión como deben ser manejados los datos que contienen los operandos que forman la expresión, por ejemplo: en la expresión “a+b”, los operandos son “a” y “b” unidos por el operador matemático suma +.

Los operadores se clasifican en: Operadores de Asignación, Operadores Aritméticos, Operadores de Relación y Operadores Lógicos.

Las expresiones son una secuencia de operandos y operadores, que especifican un valor, por ejemplo: en la expresión, 7 + 2, esta expresión utiliza el operador suma sobre dos operandos, que son dos constantes enteras, 7 y 2, por lo que la expresión 7 +2 tendrá el valor de 9.

Las expresiones son combinaciones de constantes, variables, operadores y llamadas a función, por ejemplo:

a + b7 + 2

6.5 * x – 8.675523.1416 + sin (2.5 * x -5.233)

i = 4

Esta ultima es una expresión de asignación, ya que el signo de igualdad ( = ), es el operador básico que se usa en una expresión de asignación.

Entonces cuando la expresión lleva enseguida un punto y coma, se convierte en una Sentencia.

OPERADOR DE ASIGNACION

Page 14: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

La sentencia de asignación simple tiene la forma siguiente:

VARIABLE = EXPRESION;

SIGNO DE ASIGNACION

Entonces se calcula el valor de la expresión que esta a la derecha del signo de asignación ( = ) y el resultado obtenido del calculo de la expresión, se le asigna a la variable que esta a la izquierda del signo de asignación.

PROGRAMA No.

/* Operador de Asignación*/#include “stdio.h”#include “conio.h”Int main( ){ Int a, b, c; clrscr ( ); a=2, b=5; c=a+b; /*asignación*/ printf (“\n valor de la variable a = %d”, a); printf (“\n valor de la variable b = %d”, b); printf (“\n valor de la variable c = %d”, c); getch ( );}

SALIDA: Valor de la variable a = 2 Valor de la variable b = 5 Valor de la variable c = 7Se declara que las variables a, b y c son del tipo Int ( enteras ), también se le asigna el valor de

2 a la variable a y el valor de 5 a la variable b. El resultado de la expresión a + b se le asigna a la variable c, por lo que, el valor de la variable c debe ser 7.

NOTA IMPORTANTE:No se debe confundir las sentencias de asignación con las ecuaciones matematicas, ya que son

dos conceptos diferentes, por ejemplo:

x + 8 = 10

ERROR DE ASIGNACION, por que el lado izquierdo del signo de asignación ( = ) es una expresión y debe ser una variable, por lo que, a una expresión no se le puede asignar ningún valor.

En cambio, es valido establecer una asignación de la forma siguiente:

x = x + 1

Esta sentencia de asignación indica que primero debe ejecutar la suma que esta a la derecha del signo de asignación, es decir, el valor que tenga la variable x, se suma con el valor uno y el resultado se deposita en la misma variable x.

En lenguaje de programación “C”, la operación de asignación es la principal forma para cambiar el valor de una variable.

El operador de asignación se puede cambiar para formar sentencias de asignación compuestas como:

a = b= c= 0

Esta expresión se evalúa de derecha a izquierda, es decir, se asigna o a la variable c, en seguida se asigna el valor de la variable c, que es cero, a la variable b y así hasta terminar.

Page 15: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

También es posible utilizar el signo de asignación en el momento de la declaración de una variable, con el objeto de asignar un valor inicial a una variable dada en el momento en que se declara, por ejemplo:

float pi = 3.1416;

Aquí se esta definiendo a la variable pi como float y con un valor inicial de 3.1416.

PROGRAMA No.

/* Operador de Asignación*/#include “stdio.h”#include “conio.h”Int main( ){ float pi = 3.1416; /* la variable toma un valor inicial */ float = x; int a, b, c; a = b= c= 10; /* las tres variables toman el mismo valor */ a = pi; /* se pierde la fracción */ x = b; /* se agrega la parte decimal como ceros */ clrscr ( ); printf (“\n valor de la variable pi = %f”, pi); printf (“\n valor de la variable a = %d”, a); printf (“\n valor de la variable b = %d”, b); printf (“\n valor de la variable c = %d”, c); printf (“\n valor de la variable x = %f”, x); getch ( );}SALIDA: Valor de la variable pi = 3.1416 Valor de la variable a = 3 Valor de la variable b = 10 Valor de la variable c = 10 Valor de la variable x = 10.0000

Los operadores de asignación son los siguientes:

( = ) Asignación simple int z = 1, x =20, i = 1( ++ ) Incremento x++ incrementa el valor de x en 1( -- ) Decremento x-- decrementa el valor de x en 1( *= ) Multiplicación mas asignación z* = x – 5; realiza la operación z = z * ( x – 5 )( /= ) División mas asignación z/ = x – 5; realiza la operación z = z / ( x – 5 )( %= ) Modulo mas asignación z = x % 5; asigna el modulo de x entre 5( + = ) Suma mas asignación i+ = 4; realiza la operación i = i + 4( - = ) Resta mas asignación i- = 4; realiza la operación i = i – 4( <<= )Desplazamiento a izquierda mas asignación z<<=1 realiza la operación

z=z<<1, lo cual des-plaza el contenido de zun bit a la izquierda

( >>= )Desplazamiento a derecha mas asignación z>>=1 realiza la operaciónz=z>>1, lo cual des-plaza el contenido de zun bit a la derecha

OPERADOR DE INCREMENTO Y DECREMENTO CON DATOS ENTEROS ( int )

Los operadores de incremento ++ y de decremento - - es una notación concisa para incrementar o decrementar en uno el valor de una variable, por lo que se le conoce como valores unarios.

Page 16: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

El operador de incremento y decremento se pueden utilizar como prefijo, por ejemplo: z++ o z- -. También estos operadores se pueden utilizar como sufijos, por ejemplo: ++z o --z.

Las expresiones z++ o ++z provocan que z se incremente en uno, y también z- -o - -z, provocan que z se decremente su valor en uno.

Pero en una expresión el efecto que causa z++ o ++z no es el mismo, porque al usar ++z en una expresión, el valor de z se aumenta antes de evaluar la expresión, mientras que en z++, la expresión se evalúa con el valor actual de z, incrementado el valor de z, después de evaluar la expresión.

Por lo que, si el operador se utiliza como prefijo, es decir, precede al operando, por ejemplo ++z o - -z, el valor del operando se modifica antes de utilizarlo, también se les conoce como predecremento o preincremento.

Si el operador se utiliza como sufijo, es decir, esta después del operando, por ejemplo: z++ o z- -, el valor del operando se modifica después de utilizarlo, también se les conoce como postincremento y postdecremento.

PROGRAMA No.

/* Incremento y Decremento*/#include “stdio.h”#include “conio.h”Int main( ){ int x, y, z; clrscr ( ); x = y = z 0; x = ++y + ++z; printf (“\n x = %d y = %d z = %d”, x, y, z); x = y++ + z++; printf (“\n x = %d y = %d z = %d”, x, y z); x = ++y + z++; printf (“\n x = %d y = %d z = %d”, x, y z); x = y-- + --z; printf (“\n x = %d y = %d z = %d”, x, y z); getch ( );}

SALIDA:x = 2 y = 1 z = 1x = 2 y = 2 z = 2x = 5 y = 3 z = 3x = 5 y = 2 z = 2

PROGRAMA No.

/* PostIncremento y PreIncremento*/#include “stdio.h”#include “conio.h”Int main( ){ int x = 1; clrscr ( ); printf (“\n x = %d”, x); printf (“\n x = %d”, ++x); /*incrementa y después imprime*/ printf (“\n x = %d”, x++); /*imprime y después incrementa*/ printf (“\n x = %d”, x); getch ( );}

SALIDA:

Page 17: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

x = 1x = 2x = 2x = 3

Los operadores de incremento y decremento es una forma abreviada de expresar la suma o resta de la unidad a la misma variable, como se muestra en las siguientes dos operaciones.

Sentencia de asignación Forma abreviada ( Incremento / Decremento )

x = x + 1 x++x = x – 1 x--

En operaciones sencillas, las operaciones usando ++ o – se consideran como operaciones muy practicas y concisas. Pero se debe tener cuidado y no abusar de estas anotaciones, porque pueden confundir el calculo del resultado en expresiones que contengan notaciones de incremento y decremento, por ejemplo:

Si asignamos a las variables k, w, x, y, z, los valores siguientes:k = 0;w = 25;x = 5;y = 21;z = 10; en donde:

k = ( (--y – z)/2) * ( w – x ++ );

Como se podrá dar cuenta no es tan fácil deducir cual seria el resultado. Es por eso que se recomienda no abusar de este tipo de notaciones.

Se debe de tomar en cuenta al evaluar una expresión, que los operadores de incremento y decremento tienen más prioridad que los operadores aritméticos y se evalúan en las expresiones de derecha a izquierda.

PROGRAMA No.

/* Abuso de Operadores ++ y - -*/#include “stdio.h”#include “conio.h”Int main( ){ float k, w, x, y, z; clrscr ( ); k = 0; w = 25; x = 5; y = 21; z = 10; k = ( ( - - y – z) / 2 ) * ( w – x ++); printf (“\n k = %f \n y = %f \n x = %f”, k, y, x); getch ( );}

SALIDA:k = 100.0000y = 20.0000x = 6.0000

Se recomienda de que si es posible, es mejor usar las notaciones de incremento y decremento fuera de las expresiones, ya que la lectura del código de un programa se puede simplificar, por ejemplo: el programa anterior se puede codificar de la forma siguiente, con la finalidad de que pueda ser mas fácil de deducir el resultado.

PROGRAMA No.

/* Uso Adecuado de Operadores ++ y - -*/#include “stdio.h”#include “conio.h”

Page 18: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

Int main( ){ float k, w, x, y, z; clrscr ( ); k = 0; w = 25; x = 5; y = 21; z = 10; y - -; /* o bien - - y */ k = ( (y – z) / 2 ) * ( w – x ); x ++; printf (“\n k = %f \n y = %f \n x = %f”, k, y, x); getch ( );}

SALIDA:k = 100.0000y = 20.0000x = 6.0000

OPERADORES ARITMETICOS

El nombre de operadores aritméticos binarios, es porque cada operador requiere dos operandos para realizar su función, por ejemplo x + y.

Los operadores aritméticos binarios son:Operador Función

+ Suma - Resta * Multiplicación / División % Modulo ( residuo de la división )

Estos operadores aritméticos son los correspondientes a las operaciones matemáticas de Suma, Resta, Multiplicación y División.

Además de estos operadores binarios “C” tiene también el operador unitario -, para indicar el signo de su operando, por ejemplo: -5, indica que el valor 5 tiene signo negativo, otro ejemplo: -x, indica que el contenido de la variable x, se toma con signo negativo. La expresión –x, es similar si escribimos -1*x.

Este operador unitario, se debe de aplicar a un solo operando, por lo que, si codificamos en un programa –x, estamos indicando que cambie de signo el contenido del valor de la variable x. Lo que hace “C”, es calcular el complemento a dos, es decir, el complemento a 1 más 1. Una forma de usarlo es por ejemplo: x = -z, donde x tomara el valor de z pero con signo negativo.

Hay que tomar en cuenta que NO hay un operador unitario “mas”.

Los operandos de los operadores aritméticos binarios suma, resta, multiplicación y división, pueden se cualquier expresión, cuyo valor puede ser entero o real (con punto decimal).

Los operandos del operador módulo requiere que los dos operendos sean enteros. El signo del resultado es del primer operando (dividendo).

Consideraciones que se deben tomar en cuenta al hacer uso de los operadores aritméticos.

1.- Cuando el operador de la división se aplica sobre números enteros, el resultado obtenido es otro numero entero, es decir, se trunca el resultado, por ejemplo: 7 entre 2, el resultado es 3, y la parte de la fracción ( .5 ) se pierde.

2.- Para la división o módulo, toda la división entre cero, el resultado es una indefinición, por ejemplo: x entre w o z % w, si el valor de w es cero, la operación es una indefinición.

Page 19: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

3.- En una suma, por ejemplo: x + z, donde x es del tipo float y z es del tipo int. El valor del entero z es convertido a float, del mismo tipo de x. No se modifica z, si no que su valor es convertido a float solo para realizar la suma.

4.- En una división, por ejemplo: c = x / w donde x y w son float y c es int, el resultado de la división es float, pero el resultado al ser asignado a c, solo se almacenará la parte entera, por lo que se pierde la parte fraccionaria. Por lo general los compiladores mandan un aviso al programador, que habrá una perdida de precisión al pasar de float a int, por si el programador no lo había notado.

5.- Cuando en una operación aritmética de división, si los dos operandos son enteros, el resultado será entero, aunque el resultado sea asignado a una variable float.

6.- Si en una división, el resultado es real y es redondeado, como se observa en la ultima línea del programa # xx, donde el resultado es 0.666666, pero es redondeado a 0.666667, porque la cifra suprimida es 6, es decir, cuando la cifra a suprimir es 5 o mayor, la ultima cifra que se mantiene antes del redondeo se debe incrementar una unidad.

PROGRAMA No.

/* Operaciones Aritméticas Básicas*/#include “stdio.h”#include “conio.h”Int main( ){ int x, y, z; clrscr ( ); y = 7; z = 2;

x = y + z; printf (“\n %d + %d = %d”, y, z, x); x = y – z; printf (“\n %d - %d = %d”, y, z, x); x = y * z; printf (“\n %d * %d = %d”, y, z, x); x = y / z; printf (“\n %d / %d = %d”, y, z, x); x = y % z; printf (“\n %d %% %d = %d”, y, z, x); getch ( );}

SALIDA:7 + 2 = 97 – 2 = 57 * 2 = 147 / 2 = 37 / 2 = 1

PROGRAMA No.

/* Operadores con Operandos de Diferentes Tipos*/#include “stdio.h”#include “conio.h”Int main( ){ float w, x, y, p, q; int a, b, c; clrscr ( ); a = 9; b = 2; x = 4.5; w = 2.5; p = 2; q = 3; y = x + b;

Page 20: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

printf (“\n %f + %d = %f”, x, b, y); y = a / w; printf (“\n %d / %f = %f”, a, w, y); y = w / b; printf (“\n %f * %d = %f”, y, w, b); c = a / w; printf (“\n %d / %f = %d”, c, a, w); c = w / b; printf (“\n %f / %d = %d”, w, b, c); y = a / b; printf (“\n %d / %d = %f”, y, a, b); y = p / q; printf (“\n %f / %f = %f”, p, q, y); getch ( );}

SALIDA:4.500 + 2 = 6.5000009 / 2.500000 = 3.6000002.500000 / 2 = 1.2500009 / 2.500000 = 32.500000 / 2 = 19 / 2 = 4.0000002.000000 / 3.000000 = 0.666667

OPERADORES ARITMETICOS SOBRE DATOS TIPO char

Los datos tipo char se consideran como enteros, y el valor corresponde con el código ASCII del carácter que representan. Para asignar un valor a una variable tipo char, es de la forma siguiente:

PROGRAMA No.

/* Operadores Aritméticos con Operandos Tipo Char */#include “stdio.h”#include “conio.h”Int main( ){ char a, b c, x; clrscr ( ); c = ‘A’; printf (“\n c=%c c=%d”, c, c); x = 66; printf (“\n x=%c x=%d”, x, x); b = x + 1; printf (“\n b=%c b=%d”, b, b); a = c - 1; printf (“\n a=%c a=%d”, a, a); getch ( );}

SALIDA:c = A c = 65x = B x = 66b = C b = 67a = @ a = 64

SENTENCIAS DE CONTROL

Las sentencias de control de un programa, son las que definen el orden de ejecución de las sentencias (instrucciones) dentro de un programa.

Page 21: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

Cuando los problemas a resolver son sencillos, es posible crear programas donde el orden de ejecución de las sentencias sea secuencial, es decir, la ejecución comienza en la primera sentencia hasta llegar a la última, ejecutándose una tras otra, donde cada una de las sentencias se ejecuta una sola vez.

Por lo general los problemas a resolver a través de programas no son sencillos, por lo que se requiere tener la capacidad de controlar el orden de ejecución de las sentencias, así como de cuantas veces se requiere que una o un grupo de sentencias debe ejecutarse.

Para controlar el orden de la ejecución de las sentencias o un bloque de sentencias, se requiere del uso de las estructuras de control en un programa.

Las estructuras de control de programación, además de controlar la secuencia o flujo de ejecución de las sentencias, dan la facilidad de agrupar las sentencias individuales en una simple unidad lógica con un punto de entrada y un punto de salida.

Las estructuras de control de programación, se dividen en tres tipos:

A.- ESTRUCTURA DE PROGRAMACION DE EJECUCION SECUENCIAL: En un flujo de ejecución secuencial, las instrucciones o sentencias se ejecutan una tras otra de acuerdo al orden en que fueron escritas. Si se requiere formar secuencias de más de una sentencia, es necesario crear bloques de sentencias. Los bloques de sentencias también se conocen como sentencias compuestas.

BLOQUES DE SENTENCIAS

Los bloques de sentencias deben empezar con el delimitador { y terminar con el delimitador }, por ejemplo:

{ int x, z; clrscr ( ); x = 5; z = 7; printf (“\n x & z = %d”, x & z); printf (“\n x && z = %d”, x && z); getch ( );}

Recordar que una sentencia o instrucción en “C” debe finalizar con ; , por ejemplo: x = 5;

BLOQUES VACIO

Es posible hacer bloques sin ninguna instrucción, es decir, una secuencias de instrucciones vacias, por ejemplo:

{

}

Este tipo de bloque vacio de instrucciones, es útil cuando se esta resolviendo un problema, y la sintaxis de una instrucción que se esta usando, requiere de un bloque, pero en ese bloque no se requiere de ninguna acción, esto sucede por lo general cuando se usan las instrucciones if, for, switch, while.

Nota: Un bloque de sentencias puede estar formado por una sola sentencia, en este caso, no es necesario iniciar y terminar el bloque con delimitadores { }.

Page 22: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

BLOQUES PARALELOS

Esto es cuando dos bloques aparecen uno después del otro en el mismo nivel, cuando esto sucede y existen variables declaradas en los bloques, el segundo bloque no reconoce las variables declaradas en el primer bloque.

PROGRAMA No.

/* Bloques Paralelos */#include “stdio.h”#include “conio.h”Int main( ){ clrscr ( ); int z; { int x = 6, w = 2;

Bloque 1 Interno z = x * w; printf (“\n z=%d”, z); } { int a = 4, b = 8;

Bloque Externo Bloque 2 Interno z = a * b; printf (“\n z=%d”, z); } { int k; k = 3;

Bloque 3 Interno z = k * x; z = k * b; } getch ( );}

Nota 1: Los bloques internos 1, 2 y 3, son bloques paralelos porque los tres bloques están al mismo nivel.

Nota 2: El bloque 2 interno, desconoce las variables x, w, que fueron declaradas en el bloque 1 interno.

Nota 3: El bloque 3 interno, desconoce las variables x, w, a, b, que fueron declaradas en el bloque 1 y 2. Por lo que, en este bloque 3 hay DOS ERRORES, porque las variables x y b que se están usando en este bloque 3, no son reconocidas.

Nota 4: La variable z, esta declarada en el bloque mas externo, por lo que dicha variable z, si es reconocida por los tres bloques internos.

BLOQUES ANIDADOS O BLOQUE EXTERNO

Esto es cuando un bloque contiene otros bloques. El bloque que contiene otros bloques se le llama bloque externo. Las variables que se declaren en el bloque externo, serán reconocidas por los bloques internos. Como el ejemplo anterior, donde la variable z es reconocida por los bloques internos 1, 2 y 3.

Page 23: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

La estructura de control secuencial de programación se puede representar de la forma siguiente.

Sentencia 1;Bloque 1 Sentencia 2;

Sentencia N:

Sentencia 1;Bloque 2 Sentencia 2;

Sentencia N;

Bloque MEstructura Secuencial

NOTA: Un bloque de sentencias puede estar formado por una sola sentencia.Cuando un bloque de sentencias esta formado por una sola sentencia NO es necesario

escribir los delimitadores { }.

B.- ESTRUCTURA DE PROGRAMACION DE EJECUCION DE DECISION: En un flujo de ejecución de decisión, esta basado sobre una sentencia de decisión, la cual su resultado es verdadero o falso, por lo tanto, dependiendo de este resultado se ejecutará uno u otro bloque de instrucciones.

La representación grafica es la siguiente:

falso verdaderoSentencia

De Decisión

Sentencia 1; Sentencia 1;Sentencia 2; Sentencia 2;

Sentencia N; Sentencia N;

Estructura de Decisión

C.- ESTRUCTURA DE PROGRAMACION DE EJECUCION DE REPETICION: En un flujo de ejecución de repetición, esta basado sobre una sentencia de decisión, la cual tiene solo dos resultados, ya sea verdadero o falso. El bloque de instrucciones se ejecutara en forma repetida, siempre y cuando el resultado de la decisión sea verdadero, en el momento en que el resultado de la decisión sea falso la repetición termina.

falsoSentencia

De Decisión

verdadero

Page 24: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

Sentencia 1;Sentencia 2;

Sentencia N;

Estructura de Decisión

Las sentencias (instrucciones) de control son las que distinguen de un lenguaje a otro, ya que determinan el flujo de ejecución de las instrucciones de un programa. En el lenguaje “C” las sentencias de control son muy poderosas, por lo que es una razón de la popularidad del lenguaje.

Las sentencias del tipo selectivas o condicionales o de decisión son: if y switch.

Las sentencias del tipo repetición o de control de bucle son: for, while y do-while.

Las sentencias de bifurcación de control son: goto, break y continue.

Estas instrucciones de flujo de control determinan el orden en que se deben de ejecutar las instrucciones de un programa. Por lo general, el flujo de ejecución de las instrucciones en un programa es secuencial, es decir, una tras otra, tal como se escribieron, a menos que se efectué un cambio explicito de la secuencia, a través de una instrucción de control.

Los problemas en la vida real en su mayoría no se resuelven con programas donde las instrucciones se ejecutan secuencialmente, ya que los datos y cálculos que intervienen en el problema requieren y producen diferentes caminos de acción.

SENTENCIA switch ( )

La sentencia switch permite seleccionar una opción de entre múltiples opciones.La aplicación típica de switch es para resolver problemas donde exista un menú de opciones y

se requiera seleccionar una opción de entre muchas.

Sintaxis:

Switch (expresión) { case const1: sentencia_1.1

sentencia_1.2 ….. break;

case const2: sentencia_2.1 sentencia_2.2 ….. break;

default: sentencia_d.1sentencia_d.2 ….. break;

Donde:Expresión: Es una variable tipo int, char o una expresión tipo boolena, pero no puede ser

float o string.

const1:const2: Es un valor único y constante, por lo que deben ser diferentes entre ellos.

sentencia_1.1sentencia_1.2 Sentencias que se ejecutan, cuando el valor de la expresión es igual a la

const1.

sentencia_2.1

Page 25: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

sentencia_2.2 Sentencias que se ejecutan, cuando el valor de la expresión es igual a la const2.

sentencia_d.1sentencia_d.2 Sentencias que se ejecutan, cuando el valor de la expresión no es igual a

ninguno de las constantes const1, const2, etc.

break: Esta sentencia termina la ejecución de la sentencia switch.FUNCIONAMIENTO

El valor de la expresión que esta en el switch, se compara con las constantes const1 y const2, etc, de cada uno de los case. Si el valor de la expresión es igual a alguna constante (const1, const2, …….), de alguna case, entonces inicia la ejecución delas sentencias que estén asociadas a este case, hasta encontrar una sentencia break (romper, quebrantar), o hasta que se encuentre el final del switch.

Si el valor de la expresión no es igual a alguna constante (const1, const2, …..), de alguna case, entonces se ejecutan las sentencias que se encuentran en el default.

RECOMENDACIONES PARA EL USO DEL SWITCH

1.- El tipo de cada constante (const1, const2, …..) debe ser igual al tipo de la expresión.2.- Aunque la etiqueta default es opcional, se recomienda su uso, al menos de que este

totalmente seguro de que todos los valores posibles de la expresión están listados en los case.Porque si omite el default, y si en algún momento la expresión toma un valor que no esta en

algún case, el switch no va a hacer nada, pero no hay error, y cuando esto sucede, por lo general es un error lógico difícil de localizar en los programas.

3.- No olvidar escribir un break: Cada bloque de sentencias de cada case debe terminar con un break. Si en algún case se omite poner la sentencia break, no hay error de programa, pero la ejecución continua con las sentencias del siguiente case, y asi sucesivamente hasta que encuentre un break o llegue al final del switch.

DIAGRAMA DE FLUJO DE LA SENTENCIA switch

switch ( expresión ) {

case const1: NO

Sentencia 1.1 SISentencia 1.2 Expresión = const1…..break

case const2: NO

Sentencia 2.1 SISentencia 2.2 Expresión = const2…..break

case const n: NO

Sentencia n1 SISentencia n2 Expresión = constn…..break

Page 26: Fundamentos de Programacion Unidad II

FUNDAMENTOS DE PROGRAMACION 1° Semestre

SENTENCIAS DE CONTROL DE BUCLES: while, do-while y for ( )

El lenguaje “C” proporciona sentencias de control de tareas repetitivas, a continuación seestablecen algunos conceptos:

BUCLE, LOOP O CICLO: Es repetir una sentencia o grupos de sentencias un numero de veces hasta que se cumpla cierta condición.

CUERPO DEL BUCLE: Es la sentencia o grupo de sentencias que se repiten.

ITERACION O REPETICION: Es cada repetición del cuerpo del bucle.

SENTENCIAS DE CONTROL DE BUCLES: while, do-while y for.

CICLOS, BUCLES Y LOOP’S: Durante la explicación de las sentencias de control de bucles, continuamente se utilizaran estos tres nombres, pero realmente se habla de lo mismo. La intención de usar diferentes términos para decir lo mismo, es con la intención de que se familiaricen con la terminología comúnmente usada en programación.

CUANDO USAR UN BUCLE: Se debe usar una tarea de repetición cuando se tenga una gran cantidad de datos a los cuales se le tenga que aplicar el mismo mecanismo de procesamiento.

EJEMPLO DE UN BUCLE: Imagina la rutina que hace el sistema de una caja registradora en un centro comercial para elaborar cada uno de los tickets de compra. Por cada ticket que elabore la caja registradora, tiene que capturar uno por uno los productos del cliente y hasta que el cajero indica que ha finalizado la captura, con esa condición pasa a imprimir el total del ticket e inicia un nuevo ciclo de captura de otro ticket y así sucesivamente.

BUCLES INFINITOS: Los bucles son de mucha utilidad, pero también pueden peligrosos porque se puede caer en un bucle infinito. Se puede caer en un bucle infinito