Programación básica

59
Guía del Módulo Programación Básica Modelo Académico de Calidad para la Competitividad Elaborado por: Ing. Feliciano Nevárez Raizola Programación básica Área(s): Tecnologías de la información y comunicación Carrera(s): Profesional Técnico Bachiller y Profesional Técnico Bachiller en Informática

Transcript of Programación básica

Page 1: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

Elaborado por: Ing. Feliciano Nevárez Raizola

Programación básica

Área(s):

Tecnologías de la información y comunicación

Carrera(s):

Profesional Técnico Bachiller y Profesional Técnico Bachiller en

Informática

Page 2: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

1. Manejo de los componentes del lenguaje C para el desarrollo de un programa...........1

1.1 Identifica los elementos y las características de un programa desarrollado en lenguaje C, de acuerdo con estándares internacionales. ................................................... 1

1.1.1. Desarrollo de programas en lenguaje C ............................................................... 1

1.2 Organiza y ordena bloques de código para resolver una situación dada mediante estructuras de control de flujo. ........................................................................................ 27

1.2.1 Desarrolla programas en lenguaje C que utilicen estructuras de decisión y de control de flujo. ............................................................................................................ 27

2. Administración de funciones desarrolladas en lenguaje C. ........................................ 33

2.1 Automatiza operaciones mediante la creación de funciones para la agilización de procesos. ........................................................................................................................... 33

2.1.1 Desarrolla programas en lenguaje C que utilicen funciones ............................... 33

2.2 Maneja memoria del equipo mediante la racionalización y reservación de la misma. .......................................................................................................................................... 37

2.2.1 Desarrolla programas en lenguaje C que utilicen arreglos de diferentes dimensiones y que manejen memoria dinámica mediante pilas, colas y listas. .......... 37

Prácticas para el laboratorio ......................................................................................... 48

Page 3: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 1/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Programación básica

1. Manejo de los componentes del lenguaje C para el desarrollo de un programa

1.1 Identifica los elementos y las características de un programa desarrollado en lenguaje C, de acuerdo con estándares internacionales.

1.1.1. Desarrollo de programas en lenguaje C

A. Desarrollo de rutinas de programación

• Análisis de requerimientos

El objetivo principal de esta fase es la consecución, comprensión y explicación de los diversos requisitos para la construcción del programa.

Los requisitos son, básicamente, todos los elementos y características que son requeridas, necesitadas o deseadas por el usuario. Existen dos tipos de requerimientos:

Requerimientos propios del problema

Requerimientos deseables para el programa

Dentro de la etapa de análisis, existen dos tipos diferentes de actividades:

1. Análisis del problema

Durante esta etapa, los analistas ocupan su tiempo en el entendimiento del espacio problema. En esta actividad, los analistas deben trabajar y entrevistarse con el personal con mayor conocimiento del problema, que les permita identificar todas las posibles necesidades y restricciones sobre la solución del problema. Al culminar esta etapa, los analistas deben poseer un completo entendimiento del problema a solucionar.

Algunos desarrollos de software pueden requerir de muy poco, o ningún, análisis del problema. En particular, el análisis del problema sólo es necesario para problemas nuevos, difíciles o aún no resueltos.

2. Descripción de la solución

En esta etapa, el trabajo de los analistas se centra en describir el comportamiento externo que se desea del sistema a construir. Este comportamiento debe resolver claramente el

Page 4: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 2/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

problema que se conoció adecuadamente en la etapa anterior. En este momento se deben resolver conflictos de visión, eliminar inconsistencias y ambigüedades.

El producto final es una descripción general del comportamiento del sistema ideal (posible de ser realizado) que satisfaga el problema. Edward Yourdon lo define como el "modelo de la tecnología perfecta".

A pesar que las dos etapas presentadas para el análisis de requerimientos poseen objetivos distintos, es muy poco probable que puedan efectuarse de manera secuencial en el tiempo. En muchas ocasiones las dos etapas se desarrollan en conjunto y se complementan unas a otras.

• Algoritmos

Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Un programa normalmente implementa (traduce a un lenguaje de programación concreto) un algoritmo. Puede haber programas que no se ajusten a un algoritmo (pueden no terminar nunca), en cuyo caso se denomina procedimiento a tal programa.

• Pseudocódigos

Un pseudocódigo o falso lenguaje, es una serie de normas léxicas y gramaticales parecidas a la mayoría de los lenguajes de programación, pero sin llegar a la rigidez de sintaxis de estos, pero sin la fluidez del lenguaje coloquial. Esto permite codificar un programa con mayor agilidad que en cualquier lenguaje de programación, con la misma validez semántica, normalmente se utiliza en las fases de análisis o diseño de Software, o en el estudio de un algoritmo. Forma parte de las distintas herramientas de la ingeniería de software.

El pseudocódigo describe un algoritmo utilizando una mezcla de frases en lenguaje común, instrucciones de programación y palabras clave que definen las estructuras básicas.

El objetivo del pseudocódigo es permitir que el programador se centre en los aspectos lógicos de la solución, evitando las reglas de sintaxis de los lenguajes de programación.

No siendo el pseudocódigo un lenguaje formal, los pseudocódigos varían de un programador a otro, es decir, no hay un pseudocódigo estándar.

Page 5: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 3/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

El pseudocódigo es una herramienta ágil para el estudio y diseño de aplicaciones, veamos un ejemplo de pseudocódigo, que podríamos definir como: lenguaje imperativo, de tercera generación, según el método de programación estructurada.

• Diagramas de flujo

Los diagramas de flujo representan la forma más tradicional para especificar los detalles algorítmicos de un proceso. Se utilizan principalmente en programación, economía y procesos industriales; estos diagramas utilizan una serie de símbolos con significados especiales. Son la representación gráfica de los pasos de un proceso, que se realiza para entender mejor al mismo. Son modelos tecnológicos utilizados para comprender los rudimentos de la programación lineal.

Otra definición del diagrama de flujo es la siguiente:

"Es un esquema para representar gráficamente un algoritmo. Se basan en la utilización de diversos símbolos para representar operaciones específicas. Se les llama diagramas de flujo porque los símbolos utilizados se conectan por medio de flechas para indicar la secuencia de operación. Para hacer comprensibles los diagramas a todas las personas, los símbolos se someten a una normalización; es decir, se hicieron símbolos casi universales, ya que, en un principio cada usuario podría tener sus propios símbolos para representar sus procesos en forma de Diagrama de Flujo. Esto trajo como consecuencia que sólo aquel que conocía sus símbolos, los podía interpretar. La simbología utilizada para la elaboración de diagramas de flujo es variable y debe ajustarse a un patrón definido previamente."

B. Identificación de elementos del lenguaje C

• ¿Qué es el lenguaje C?

EL lenguaje C es el resultado de un proceso de desarrollo que inició con un lenguaje denominado BCPL. Este influenció a otro llamado B (inventado por Ken Thompson). En los años 70; éste lenguaje llevó a la aparición del C.

Con la popularidad de las microcomputadoras muchas compañías comenzaron a implementar su propio C por lo cual surgieron discrepancias entre sí.

Por esta razón ANSI (American National Standards Institute, por sus siglas en inglés), estableció un comité en 1983 para crear una definición no ambigua del lenguaje Ce independiente de la máquina que pudiera utilizarse en todos los tipos de C.

Page 6: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 4/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Algunos de las C existentes son:

Quick C

C++

Turbo C

Turbo C ++

Borland C

Borland C++

Microsoft C

etc.

C es un lenguaje de programación de nivel medio ya que combina los elementos del lenguaje de alto nivel con la funcionalidad del ensamblador.

Su característica principal es ser portable, es decir, es posible adaptar los programas escritos para un tipo de computadora en otra.

Otra de sus características principales es el ser estructurado, es decir, el programa se divide en módulos (funciones) independientes entre sí.

El lenguaje C inicialmente fue creado para la programación de

Sistemas operativos

Intérpretes

Editores

Ensambladores

Compiladores

Administradores de bases de datos.

Actualmente, debido a sus características, puede ser utilizado para todo tipo de programas.

• ¿Qué es el ANSI C?

La primera estandarización del lenguaje C fue en ANSI, con el estándar X3.159-1989. El lenguaje que define este estándar fue conocido vulgarmente como ANSI C. Posteriormente, en 1990, fue ratificado como estándar ISO (ISO/IEC 9899:1990). La adopción de este estándar es muy amplia por lo que, si los programas creados lo siguen, el código es portátil entre plataformas y/o arquitecturas. En la práctica, los programadores suelen usar elementos no-portátiles dependientes del compilador o del sistema operativo.

Page 7: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 5/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

• ¿Cuál es la estructura general de un programa en C?

Aunque cada uno de los programas es distinto, todos tienen características comunes. Los elementos de un programa en C son los siguientes:

Comentarios Inclusión de archivos main() { variables locales flujo de sentencias } Definición de funciones creadas por el programador utilizadas en main()

Veamos en qué consiste cada uno:

Comentarios: Se identifican porque van entre diagonales y asterisco. Nos sirve para escribir información que nos referencie al programa pero que no forme parte de él. Por ejemplo especificar que hace el programa, quien lo elaboró, en qué fecha, que versión es, etc.

Inclusión de archivos: Consiste en mandar llamar a la o las bibliotecas donde se encuentran definidas las funciones de C (instrucciones) que estamos utilizando en el programa.

En realidad, la inclusión de archivos no forma parte de la estructura propia de un programa sino que pertenece al desarrollo integrado de C. Se incluye aquí para que el alumno no olvide que debe mandar llamar a los archivos donde se encuentran definidas las funciones estándar que va a utilizar.

main(): En C, todo está constituido a base de funciones. El programa principal no es la excepción. main() indica el comienzo de la función principal del programa la cual se

Variables locales: Antes de realizar alguna operación en el programa, se deben declarar la(s) variable(s) que se utilizarán en el programa.

Flujo de sentencias: Es la declaración de todas las instrucciones que conforman el programa.

Definición de funciones creadas por el programador utilizadas en main(): Finalmente, se procede a definir el contenido de las funciones utilizadas dentro de main(). Estas contienen los mismos elementos que la función principal.

Page 8: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 6/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

− Bibliotecas

El lenguaje C es muy simple. Carece de tipos y servicios que forman parte de otros lenguajes. No tiene tipo booleano, ni manejo de cadenas, ni manejo de memoria dinámica.

No obstante, el estándar de C define un conjunto de bibliotecas de funciones, que necesariamente vienen con todo entorno de compilación de C y que satisfacen estos servicios elementales.

Las interfaces de estos servicios vienen definidas en unos ficheros cabeceras (header files). El nombre de estos ficheros suele terminar en .h

Algunos de los servicios proporcionados por las bibliotecas estándares son:

entrada y salida de datos (stdio.h)

manejo de cadenas (string.h)

memoria dinámica (stdlib.h)

rutinas matemáticas (math.h)

− Declaración de funciones, variables, constantes y macros.

Las variables se utilizan para guardar datos dentro del programa.

Hay que declarar las variables antes de usarlas.

Cada variable tiene un tipo.

Declaración: tipo nombre;

Ejemplo: int pepe;

Las variables globales se declaran justo antes de main().

− Función main ()

En C, todo está constituido a base de funciones. El programa principal no es la excepción. main() indica el comienzo de la función principal del programa la cual se delimita con llaves.

Page 9: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 7/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

− Comentarios

En el C original, tienen la forma /* cualquier texto */

Los comentarios se pueden extender varias líneas

No se pueden anidar comentarios (comentarios dentro de otros)

En C++ se usan también comentarios de una sola línea. La sintaxis es

// cualquier texto

Todo lo que se escriba a partir de las dos barras es un comentario. El comentario termina con el final de la línea.

Ejemplos:

{ /* Esto es un comentario que ocupa varias líneas */ // esto es un comentario de C++ // y esto es otro comentario }

C. Reconocimiento del entorno de trabajo

• Editor de C.

Turbo C es un entorno de desarrollo integrado y compilador desarrollado por Borland para programar en lenguaje C.

Su primera versión es de 1987, a la que siguieron las versiones 1.5 y 2.0, de 1989

Page 10: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 8/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Fue el compilador más popular para desarrollar en C en entornos MS-DOS. Se le considera el primer IDE para C disponible para dicha plataforma.

Fue sustituido por Turbo C++ en 1990.

Éste lo fue, a su vez, por el Borland C++, disponible también para Windows. Tras el Borland C++ llegó el C++ Builder.

Tanto el Turbo C 2.0 como el Turbo C++ 1.0 pueden conseguirse gratuitamente en la web de Borland desde el año 2000.

En septiembre de 2006, Borland lanzó una versión recortada del C++Builder para Windows, con el nombre de Turbo C++ for Windows, recuperando así la clásica denominación. Dicho Turbo C++ estaba disponible en dos ediciones: una gratuita, Explorer, y otra de pago, la Pro.

Ambos productos, junto a los otros IDEs de Borland, pasaron a la nueva filial, CodeGear, al ser creada ésta, en noviembre de 2006.

Desde octubre de 2009 ya no es posible descargar Turbo C++ Explorer. Tampoco se puede sacar la licencia para usar la versión Pro.

• Compilador.

Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser simplemente texto. Este proceso de traducción se conoce como compilación.

Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a cómo piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.

D. Ejecución de pruebas del programa desarrollado

• ¿Qué es un debugger o depurador?

Un depurador (en inglés, debugger), es un programa que permite depurar o limpiar los errores de otro programa informático.

Page 11: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 9/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Al Iniciarse la depuración, el depurador lanza el programa a depurar. Éste se ejecuta normalmente hasta que el depurador detiene su ejecución, permitiendo al usuario examinar la situación.

El depurador permite detener el programa en:

Un punto determinado mediante un punto de ruptura.

Un punto determinado bajo ciertas condiciones mediante un punto de ruptura condicional.

Un momento determinado cuando se cumplan ciertas condiciones.

Un momento determinado a petición del usuario.

Durante esa interrupción, el usuario puede:

Examinar y modificar la memoria y las variables del programa.

Examinar el contenido de los registros del procesador.

Examinar la pila de llamadas que han desembocado en la situación actual.

Cambiar el punto de ejecución, de manera que el programa continúe su ejecución en un punto diferente al punto en el que fue detenido.

Ejecutar instrucción a instrucción.

Ejecutar partes determinadas del código, como el interior de una función, o el resto de código antes de salir de una función.

El depurador depende de la arquitectura y sistema en el que se ejecute, por lo que sus funcionalidades cambian de un sistema a otro. Aquí se han mostrado las más comunes.

E. Realiza operaciones de entrada y salida de datos.

Salida por pantalla: printf

La función printf se utiliza según este formato:

printf ( “cadena de formato”, arg1, arg2, ... argN );

En la cadena de formato aparecen:

el texto que se desea imprimir

caracteres especiales ⇒ secuencias de escape

indicaciones del formato de los argumentos

Los argumentos son expresiones cualesquiera.

Page 12: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 10/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Para usar printf, hay que escribir al principio del programa la directiva #include <stdio.h>

Formatos de printf (básico)

%d Entero decimal

%u Entero decimal con signo

%x Entero hexadecimal

%c Carácter

%f Coma flotante (float)

%lf Coma flotante (double)

Ejemplos:

int una = 1234; char otra = „h‟; main() { printf( “una vale %d; otra vale %c\n”, una, otra ); }

Secuencias de escape

\n Salto de línea

\t Tabulación

\a Sonido

Formatos de printf (avanzado)

Se puede modificar el formato de salida, indicando cuantos decimales llevará el número, si se rellena de ceros por la izquierda, etc.

La estructura (casi) completa de un formato de printf es

%0-dígitos.precisión tipo

Page 13: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 11/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Formato Significado

%5d Entero decimal alineado a la izquierda, ocupando cinco espacios

%04u Entero sin signo ocupando cuatro espacios, y rellenando de ceros a la izquierda si hace falta

%.2lf Número real (doble precisión) con dos y sólo dos decimales

%5.3d Entero ocupando cinco espacios; aparecen tres cifras como mínimo (se rellena de ceros)

Entrada de datos: scanf

Se pueden recoger datos desde el teclado con la función scanf.

Sintaxis:

scanf ( formato, & arg1, & arg2, ... );

En formato se especifica qué tipo de datos se quieren leer. Se utiliza la misma descripción de formato que en printf. También hay que incluir la cabecera <stdio.h>

Ejemplo:

int x,y; ... scanf ( “%d %d”, &x, &y );

Notas:

Si no se anteponen los ampersands (&), el resultado puede ser desastroso.

En scanf sólo van descripciones de formato, nunca texto normal. Si se quiere escribir antes un texto, hay que utilizar printf.

F. Realiza operaciones entre cadenas y valores numéricos.

• Tipos de datos.

Los datos en C han de tener un tipo. Las variables contienen datos, y se han de declarar del tipo adecuado a los valores que van a contener.

Page 14: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 12/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

El C dispone de estos tipos básicos:

− char

Un dato de tipo carácter (char en lenguaje C) es aquel que puede tomar por valor un carácter perteneciente al conjunto de los caracteres que puede representar el ordenador.

En lenguaje C, el valor de un dato de tipo carácter se debe representar entre comillas simples (').

Ejemplo: En un examen con preguntas en las que hay que seleccionar la respuesta correcta entre varias opciones dadas (a, b, c, d, e), la respuesta correcta de cada una de las preguntas es un dato de tipo carácter.

Respuesta correcta a la pregunta 3...: 'c'

El tipo char permite manejar caracteres (letras), aunque se trata de un tipo numérico.

Normalmente el rango de valores va de –128 a +127 (signed char), o bien de 0 a 255 (unsigned char).

Los literales de tipo carácter se pueden utilizar como números.

char caracter; int entero; main() { caracter = 65; // valdría como una „A‟ entero = „A‟; // valdría como un 65 }

− int

Un dato de tipo entero (int en lenguaje C) es aquel que puede tomar por valor un número perteneciente al conjunto de los números enteros (Z), el cual está formado por los números naturales, su opuesto (números negativos) y el cero.

Z = { ..., -3, -2, -1, 0, 1, 2, 3, ... }

Ejemplo: La edad de una persona y el año en que nació, son dos datos de tipo entero:

Edad...: 29 Año....: 1976

Z es un conjunto infinito de números enteros, y como el ordenador no puede representarlos todos, un dato de tipo entero sólo puede tomar por valor un número

Page 15: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 13/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

perteneciente a un subconjunto de Z. Los valores máximo y mínimo de dicho subconjunto varían según las características de cada ordenador y del compilador que se utilice.

Una variable entera acepta valores positivos y negativos dentro de un rango determinado, que depende de la plataforma y del compilador (en PCs bajo MS-DOS suele estar entre -32768 y 32767; en Linux son enteros de 32 bits).

Existen modificaciones para el tipo int, para alterar el rango de valores sobre el que trabaja:

Modificador Significado short entero corto (rango más pequeño) long entero largo (rango más amplio) unsigned entero sin signo (0..N) signed entero con signo (-N-1 ... +N)

La palabra int se puede omitir en la declaración de la variable.

Los modificadores de tamaño (short, long) y de signo (signed, unsigned) se pueden combinar.

Por omisión, un entero es signed (en la práctica, esta palabra reservada casi nunca se emplea).

Ejemplos:

unsigned sin_signo; /* entero sin signo */ long saldo_en_cuenta; /* entero largo con signo */ unsigned long telefono; /* entero largo sin signo */

− float o double

Un dato de tipo real (float o double en lenguaje C) es aquel que puede tomar por valor un número perteneciente al conjunto de los números reales (R), el cual está formado por los números racionales e irracionales.

Ejemplo: El peso de una persona (en kilogramos) y su altura (en centímetros), son datos que pueden considerarse de tipo real.

Peso.....: 75,3 Altura...: 172,7

R es un conjunto infinito de números reales, y como el ordenador no puede representarlos todos, un dato de tipo real sólo puede tomar por valor un número

Page 16: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 14/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

perteneciente a un subconjunto de R. Los valores de dicho subconjunto varían según las características de cada ordenador y del compilador que se utilice.

La diferencia principal entre float y double está en el hecho de que un dato de tipo double puede tomar por valor un número perteneciente a un subconjunto de R mayor que un dato de tipo float.

− Datos sin valor (void)

Un dato sin valor (void en lenguaje C) es un dato que no puede tomar por valor ningún valor, es decir, es un dato vacío (nulo). Más adelante estudiaremos su utilidad.

• Variables

Las variables se utilizan para guardar datos dentro del programa.

Un identificador es un nombre que define a una variable, una función o un tipo de datos.

Un identificador válido ha de empezar por una letra o por el carácter de subrayado _, seguido de cualquier cantidad de letras, dígitos o subrayados.

OJO: Se distinguen mayúsculas de minúsculas.

No se pueden utilizar palabras reservadas como int, char o while.

Muchos compiladores no permiten letras acentuadas o eñes.

Ejemplos válidos:

char letra; int Letra; float CHAR; int __variable__; int cantidad_envases; double precio123; int __;

Ejemplos no válidos:

int 123var; /* Empieza por dígitos */ char int; /* Palabra reservada */ int una sola; /* Contiene espacios */ int US$; /* Contiene $ */ int var.nueva; /* Contiene el punto / int eñe; /* Puede no funcionar */

Page 17: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 15/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

• Inicialización

La forma de dar valor a una variable es variable = expresión ;

Se le llama asignación.

También se puede dar valor a una variable en el mismo momento en que se declara (inicialización).

tipo variable = expresión ;

Una variable que se declara sin inicializar contiene un valor indeterminado.

Ejemplo:

int valor1 = 0; /* variable inicializada a cero */ int valor2; /* variable no inicializada */ main() { valor1 = 4 + 3; /* asignación */ valor2 = 5; /* otra asignación */ }

• Constantes

En lenguaje C, una constante puede ser de tipo entero, real, carácter, de cadena o enumerado. Las contantes de tipo enumerado se van a estudiar más adelante. En cuanto a las demás, se pueden expresar de dos formas diferentes:

1. Por su valor. 2. Con un nombre (identificador).

Ejemplo 1: Las siguientes contantes de tipo entero están expresadas por su valor:

-5 10

Para expresar una constante con un nombre, la constante debe ser declarada previamente. Las constantes que se declaran en un programa escrito en lenguaje C reciben un tratamiento diferente al de la mayoría de los lenguajes de programación. En C, para representar a las constantes, se utilizan constantes simbólicas. Una constante simbólica representa (sustituye) a una secuencia de caracteres, en vez de representar a un valor (dato almacenado en memoria).

Page 18: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 16/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Para declarar una constante simbólica, en lenguaje C, se utiliza una nueva directiva del preprocesador: #define <constante> <secuencia_de_caracteres>

La directiva #define indica al preprocesador que debe sustituir, en el código fuente del programa, todas las ocurrencias del <nombre_de_la_constante> por la <secuencia_de_caracteres>, antes de la compilación.

Ejemplo 2: Dos constantes muy habituales son:

#define PI 3.141592 #define NUMERO_E 2.718281

En programación es una buena práctica escribir los identificadores de las constantes en mayúsculas, de esta forma es más fácil localizarlos en el código de un programa. Nótese que, después de la declaración de una constante simbólica no se escribe un carácter punto y coma (;), cosa que sí se debe hacer al declarar una variable. Por otra parte, no se puede declarar más de una constante simbólica en una misma línea de código.

Ejemplo 3: Para declarar las constantes simbólicas PI y NUMERO_E, no se puede escribir: #define PI 3.141592, NUMERO_E 2.718281

Por otra parte, en C, es posible declarar una variable indicando que su valor es inalterable. Para ello, se utiliza el cualificador const.

Ejemplo 4: Uso de const: const int temperatura = -5;

En el ejemplo, se ha declarado la variable entera temperatura inicializada al valor -5 y, por medio de const, que es una palabra reservada, se ha indicado que su valor no puede cambiar durante la ejecución del programa. En cierta manera, la variable temperatura está simulando a una constante.

temperatura -5

Ya se sabe cómo escribir la declaración de una constante y de las variables que utilice un programa y, también, se conoce el lugar en que se tiene que escribir la directiva del preprocesador #define para declarar la constante.

Page 19: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 17/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

En cuanto a las variables que utiliza un programa, su declaración puede escribirse en varios lugares, pero, de momento las vamos a declarar inmediatamente después del carácter abrir llave ({) de la función main.

[ <directivas_del_preprocesador> ] int main() { [ <declaraciones_de_variables> ] <lista_de_instrucciones> }

Ejemplo 5: Si en un programa se quieren declarar dos variables (area y radio) y una constante (PI), se puede escribir:

#define PI 3.141592 int main() { float area, radio; ... }

• Enumeraciones

Con la construcción enum se pueden definir tipos de datos enteros que tengan un rango limitado de valores, y darle un nombre a cada uno de los posibles valores.

enum dia_de_la_semana { lunes, martes, miercoles, jueves, viernes, sabado, domingo }; ... enum dia_de_la_semana hoy; ... hoy = sabado;

Los valores definidos en enum son constantes enteras que se pueden usar en cualquier punto del programa, usando un operador de moldeo (ver ejemplo).

Se empiezan a numerar de cero en adelante (en el ejemplo, lunes vale cero, martes vale uno, etc.)

int dia = (int)sabado; /* dia = 5 */

Se puede dar un valor inicial a la lista de valores dados en enum:

enum dia {

Page 20: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 18/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

lunes=1, martes, miercoles, jueves, viernes, sabado, domingo };

En este caso los valores van del 1 al 7.

También se pueden dar valores individuales:

enum codigo_postal { LasPalmas=35, Madrid=28, Barcelona=8 };

• Operadores

En un programa, el tipo de un dato determina las operaciones que se pueden realizar con él. Por ejemplo, con los datos de tipo entero se pueden realizar operaciones aritméticas, tales como la suma, la resta o la multiplicación.

Ejemplo 1: Algunos ejemplos son:

111 + 6 (operación suma) 19 - 72 (operación resta) 24 * 3 (operación multiplicación)

Todas las operaciones del ejemplo constan de dos operandos (constantes enteras) y un operador. La mayoría de las veces es así, pero, también es posible realizar operaciones con distinto número de operadores y/u operandos.

Ejemplo 2: Por ejemplo:

111 + 6 - 8 (tres operandos y dos operadores) -( ( +19 ) + 72 ) (dos operandos y tres operadores) -( -72 ) (un operando y dos operadores)

En las operaciones del ejemplo se puede observar que los caracteres más (+) y menos (-) tienen dos usos:

1. Operadores suma y resta.

2. Signos de un número (también son operadores).

Los operadores de signo más (+) y menos (-) son operadores monarios, también llamados unarios, ya que, actúan, solamente, sobre un operando.

Page 21: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 19/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Los caracteres abrir paréntesis "(" y cerrar paréntesis ")" se utilizan para establecer la prioridad de los operadores, es decir, para establecer el orden en el que los operadores actúan sobre los operandos.

Un operador indica el tipo de operación a realizar sobre los operandos (datos) que actúa. Los operandos pueden ser:

Constantes (expresadas por su valor o con un nombre (identificador)).

Variables.

Llamadas a funciones.

Elementos de formaciones (arrays).

En este apartado se van a tratar operaciones en donde sólo aparecen constantes y variables. Cuando se combinan uno o más operadores con uno o más operandos se obtienen una expresión. De modo que, una expresión es una secuencia de operandos y operadores escrita bajo unas reglas de sintaxis.

Ejemplo 3: Dadas las siguientes declaraciones de constantes y variables:

#define PI 3.141592 int numero = 2; float radio_circulo = 3.2;

Algunos ejemplos de expresiones son:

2 * PI * radio_circulo ( PI * PI ) numero * 5

De sus evaluaciones se obtienen los valores:

20.106189 (valor real) ( 2 * 3.141592 * 3.2 ) 9.869600 (valor real) ( 3.141592 * 3.141592 ) 10 (valor entero) ( 2 * 5 )

Un operador siempre forma parte de una expresión, en la cual, el operador siempre actúa sobre al menos un operando. Por el contrario, un operando sí puede aparecer solo en una expresión.

En programación, de la evaluación de una expresión siempre se obtiene un valor. Dicho valor puede ser de tipo: entero, real, lógico, carácter o cadena. Por consiguiente, una expresión puede ser:

Aritmética (devuelve un número entero o real).

Page 22: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 20/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Lógica (devuelve un valor lógico: verdadero o falso)

De carácter (devuelve un carácter representable por el ordenador).

De cadena (devuelve una cadena).

− Aritméticos

De la evaluación de una expresión aritmética siempre se obtiene un valor de tipo entero o real. En lenguaje C existen algunos operadores que no se utilizan en pseudocódigo, y al revés. A continuación, se van a ver algunas similitudes y diferencias entre ambos lenguajes.

Operadores aritméticos:

Pseudocódigo: C:

+ Suma - Resta * * Multiplicación ** Potencia / / División div / División mod % Módulo (resto de la división entera)

+ + Signo más - - Signo menos

Figura. Comparación entre operadores aritméticos en pseudocódigo y en C.

Como se puede apreciar, existen tres diferencias importantes entre los operadores aritméticos en pseudocódigo y en lenguaje C:

1. El operador potencia (**) no existe en lenguaje C.

2. En lenguaje C, sólo existe un operador de división (/).

3. En lenguaje C, el operador módulo (mod) se escribe con el carácter porcentaje (%).

Ejemplo: A partir de las variables:

En pseudocódigo:

entero a = 4, b = 7, c = 2

Page 23: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 21/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

En lenguaje C:

int a = 4, b = 7, c = 2;

Podemos escribir, por ejemplo, la expresión:

En pseudocódigo:

-a * ( b mod c )

En lenguaje C:

-a * ( b % c )

De la evaluación de esta expresión se obtiene el valor

-4 (actúan en orden los operadores: (%), menos (-) y (*))

− De relación

Un operador relacional se utiliza para comparar los valores de dos expresiones. Éstas deben ser del mismo tipo (aritméticas, lógicas o de carácter).

En la siguiente figura se comparan los operadores relacionales en pseudocódigo y en lenguaje C:

Operadores relacionales:

Pseudocódigo: C:

< < Menor que <= <= Menor o igual que > > Mayor que >= >= Mayor o igual que

= == Igual que <> != Distinto que

Figura. Comparación entre operadores relacionales en pseudocódigo y en C.

Las diferencias son dos:

1. En C, el operador igual que (=) se escribe con los caracteres igual-igual (==).

Page 24: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 22/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

2. En C, el operador distinto que (<>) se escribe con los caracteres admiración-igual (!=).

Ejemplo: A partir de las variables:

En pseudocódigo:

entero p = 45, q = 186

En lenguaje C:

int p = 45, q = 186;

Podemos escribir la expresión:

En pseudocódigo:

p <> q

En lenguaje C:

p != q

De su evaluación se obtiene:

En pseudocódigo:

verdadero ( p es distinta de q )

En lenguaje C:

1 (C simula el valor lógico verdadero con el valor entero 1)

En lenguaje C, los datos de tipo lógico se simulan con datos de tipo entero, considerándose el valor 0 como falso, y cualquier otro valor entero como verdadero.

− Lógicos

Un operador lógico actúa, exclusivamente, sobre valores de expresiones lógicas.

Page 25: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 23/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

En la siguiente figura se comparan los operadores lógicos en pseudocódigo y en lenguaje C:

Operadores lógicos:

Pseudocódigo: C:

y && Conjunción o || Disyunción

no ! Negación

Figura. Comparación entre operadores lógicos en pseudocódigo y en C.

Ejemplo: Habiendo declarado las variables:

En pseudocódigo:

entero r = 2, s = 9, t = 8

En lenguaje C:

int r = 2, s = 9, t = 8;

Se puede escribir

En pseudocódigo:

no( r = s o r <= t )

En lenguaje C:

!( r == s || r <= t )

La expresión se evalúa a

En pseudocódigo:

falso (actúan en orden los operadores: (<=), (==), (||) y (!))

En lenguaje C:

0 (C simula el valor lógico falso con el valor entero 0)

Page 26: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 24/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

− De incremento y decremento

En lenguaje C, tanto el operador incremento (++) como el operador decremento (--) actúan siempre sobre un solo operando, normalmente una variable. Por tanto, son operadores monarios, y sirven para incrementar o decrementar en una unidad el valor de dicho operando.

Ejemplo 1: Declaradas las variables:

int r = 8, s = 3;

r 8

s 3

Se pueden escribir las instrucciones de expresión:

r++; s--;

Dichas instrucciones son equivalentes a:

r = r + 1; s = s - 1;

Y también se pueden escribir como:

++r; --s;

Tras su ejecución, el aspecto de la memoria será:

r 9

s 2

Page 27: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 25/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

En estas instrucciones, ambos operadores se pueden escribir, indistintamente, antes o después de los operandos sobre los que actúan. Pero, cuando en una expresión, además del operador incremento o decremento, también aparecen otros operadores, entonces sí que hay que tener en cuenta la diferencia que supone el escribirlos antes o después.

Ejemplo 2: A partir de las variables:

int i = 5, j, k = 5, m;

i 5

j

k 5

m

Si se ejecutan las instrucciones:

j = i++; m = ++k;

Los valores de las variables en memoria serán:

i 6

j 5

k 6

m 6

Obsérvese que, los valores de j y m son diferentes. Esto es debido a que, cuando se evalúa la expresión j = i++, en primer lugar, se le asigna a j el valor de i (es decir, un 5) y, a continuación, se incrementa el valor de la variable i. Por el contrario, cuando se evalúa la expresión m = ++k, primero, se incrementa el valor de k (de 5 pasa a ser 6) y, después, este nuevo valor de k se le asigna a m.

Page 28: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 26/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

En resumen, cuando en una expresión el operador incremento (++) o decremento (--) precede al operando sobre el que actúa (por ejemplo ++k), antes de utilizar el valor de dicho operando para otro propósito, este se incrementa. De ser al revés, es decir, si es el operando quien precede al operador (por ejemplo i++), el valor de dicho operando se incrementa después de ser utilizado para otro fin.

• Precedencia de operadores.

La prioridad de todos los operadores del lenguaje C estudiados hasta el momento es:

Operadores lógicos:

( ) [ ] Llamada a una función e índice de un array

+ - ++ -- ! (<tipo>) Signo más, signo menos, incremento, decremento, negación y conversión de tipo

* / % Multiplicación, división, módulo

+ - Suma y resta

< <= > >= Menor que, menor igual que, mayor que, mayor o igual que

== != Igual que y distinto que

&& Conjunción

|| Disyunción

= += -= *= /= %= Operadores de asignación

Figura. Prioridad de los operadores aritméticos, de índice de un array, de llamada a una función, relacionales, lógicos, de asignación y de conversión de tipo en C.

Obsérvese que, en lenguaje C, tanto los paréntesis "( )" que se utilizan para llamar a una función, como los corchetes "[ ]" que albergan el índice de un array, también son considerados operadores. Además, son los operadores más prioritarios y, en una expresión, se evalúan de izquierda a derecha.

Por otra parte, los operadores incremento (++), decremento (--) y conversión de tipo "(<tipo>)" entran dentro de la categoría de operadores monarios. De manera que, al igual que los operadores signo más (+), signo menos (-), negación (!) y de asignación, todos ellos se evalúan de derecha a izquierda en una expresión, al revés que todos los demás.

Page 29: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 27/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

1.2 Organiza y ordena bloques de código para resolver una situación dada mediante estructuras de control de flujo.

1.2.1 Desarrolla programas en lenguaje C que utilicen estructuras de decisión y de control de flujo.

A. Identificación de proposiciones y bloques de código

• ¿Qué es proposición o sentencia?

Una sentencia es un fragmento de código.

Una sentencia simple es una expresión terminada en punto y coma.

Una sentencia compuesta es una serie de sentencias entre llaves.

sentencia_simple;

Ejemplos:

/* sentencia simple */ x = y * 5 + sqrt(z);

• ¿Qué es un bloque de código o sentencia compuesta?

Una sentencia compuesta es una serie de sentencias entre llaves.

Ejemplos:

// sentencia compuesta: varias sentencias entre llaves. { sentencia sentencia ... }

Ejemplos:

/* sentencia compuesta con llaves */ { a = b; b = x + 1; printf ( “hay %d productos”, num_prod ); } /* sentencias compuestas dentro de otras */ { { x=1; y=2; } { z=0; printf(“hola\n”); } }

Page 30: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 28/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

B. Aplica estructuras de decisión para definir el orden de ejecución de bloques de código

• if – else

La construcción if sirve para ejecutar código sólo si una condición es cierta:

if ( condición ) sentencia

La condición es una expresión de cualquier clase.

Si el resultado de la expresión es CERO, se considera una condición FALSA.

Si el resultado de la expresión NO ES CERO, se considera una condición CIERTA.

Ejemplo:

int x = 1; main() { if ( x == 1 ) printf (“la variable x vale uno\n”); if ( x>=2 && x<=10 ) printf (“x está entre 2 y 10\n”); }

• else – if

Con la construcción else se pueden definir acciones para cuando la condición del if sea falsa.

La sintaxis es

if ( condición ) sentencia else sentencia

Ejemplo:

if ( x==1 ) printf (“la variable x vale uno\n”); else printf (“x es distinta de uno\n”);

• switch

Se utiliza para ejecutar acciones diferentes según el valor de una expresión.

Page 31: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 29/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Ejemplo de sintaxis:

switch ( expresión ) { case valor1: ... sentenciasA... break; case valor2: ... sentenciasB ... break; case valor3: case valor4: ... sentenciasC ... break; default: ... sentenciasD ... }

Las sentenciasA se ejecutarán si expresión adquiere el valor1.

Las sentenciasB se ejecutarán si adquiere el valor2.

Las sentenciasC se ejecutarán si adquiere el valor3 o el valor4, indistintamente.

Cualquier otro valor de expresión conduce a la ejecución de las sentenciasD; eso viene indicado por la palabra reservada default.

Ejemplo de switch:

int opcion; printf ( "Escriba 1 si desea continuar; 2 si desea terminar: " ); scanf ( "%d", &opcion ); switch ( opcion ) { case 1: printf ("Vale, continúo\n"); break; case 2: salir = 1; break; default: printf ("opción no reconocida\n"); }

Page 32: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 30/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

C. Aplica estructuras de ciclo para la ejecución continua y/o repetida de bloques de código.

• for

También se pueden ejecutar bucles con for, según esta sintaxis:

for ( expresión_inicial; condición; expresión_de_paso ) sentencia

La expresión_inicial se ejecuta antes de entrar en el bucle.

Si la condición es cierta, se ejecuta sentencia y después expresión_de_paso.

Luego se vuelve a evaluar la condición, y así se ejecuta la sentencia una y otra vez hasta que la condición sea falsa.

El bucle for es (casi) equivalente a

expresión_inicial; while ( condición ) { sentencia expresión_de_paso; }

Ejemplo típico de uso:

int i; ... for ( i=0; i<10; i++ ) printf (“%d “, i );

• while

Para ejecutar el mismo código varias veces, se puede utilizar:

while ( condición ) sentencia

La sentencia se ejecuta una y otra vez mientras la condición sea cierta.

Ejemplos:

main() { int x=1; while ( x < 100 ) {

Page 33: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 31/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

printf(“Línea número %d\n”,x); x++; } }

Ejemplo usando el operador de predecremento:

main() { int x=10; while ( --x ) { printf(“una línea\n”); } }

En cada iteración se decrementa la variable x y se comprueba el valor devuelto por --x. Cuando esta expresión devuelva un cero, se abandonará el bucle. Esto ocurre después de la iteración en la que x vale uno.

• do – while

Parecido al bucle while, pero iterando al menos una vez.

Sintaxis:

do { sentencia } while ( condición );

La sentencia se ejecuta al menos la primera vez; luego, mientras la condición sea cierta, se itera la sentencia.

Se recomienda no utilizar esta construcción, porque las construcciones while y for bastan para diseñar cualquier clase de bucles. Muy pocos programas hoy día usan esta construcción.

• goto y etiquetas

Sirve para saltar incondicionalmente a un punto cualquiera del programa. La sintaxis es

goto etiqueta;

etiqueta es un identificador que indica el punto al que queremos saltar. La etiqueta se define colocándola en el punto adecuado seguida de dos puntos.

Page 34: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 32/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Sólo se puede saltar a una etiqueta que se encuentre en la misma función donde se invoca a goto.

Ejemplo:

parriba: // declaración de etiqueta ... // salto directo a una etiqueta if (error) goto pabajo; ... if (repetir) goto parriba; pabajo: // declaración de etiqueta

• Ciclos infinitos.

Bucle for: omisión de expresiones

Las tres expresiones del bucle for se pueden omitir, con el siguiente resultado.

Se omite Resultado expresión_inicial no se hace nada antes del bucle condición la condición es siempre cierta (1) expresión_de_paso no se hace nada tras cada iteración

Ejemplos:

for ( ; resultado!=-1 ; ) { ... } for ( ; ; ) { /* Bucle infinito */ }

Precauciones con if y bucles

Asignaciones en los if y los bucles

Hemos visto que una asignación es una expresión. Por ello se puede colocar dentro de cualquier construcción if, while o similar:

if ( variable = valor ) { ... }

Este uso muchas veces es erróneo, porque casi siempre pretendemos escribir:

if ( variable == valor ) { ... }

Page 35: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 33/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Pero como es correcto, el compilador no abortará si se encuentra estas construcciones (de todas formas, muchos compiladores emiten una advertencia si encuentran asignaciones dentro de ifs).

Bucles for

Aunque el C lo permite, es conveniente no modificar la variable contadora dentro del bucle.

2. Administración de funciones desarrolladas en lenguaje C.

2.1 Automatiza operaciones mediante la creación de funciones para la agilización de procesos.

2.1.1 Desarrolla programas en lenguaje C que utilicen funciones

A. Identifica los componentes de una función

• ¿Qué es una función?

Las funciones son porciones de código que devuelven un valor.

Permiten descomponer el programa en módulos que se llaman entre ellos.

En C no existe diferencia entre funciones y procedimientos: a todas las subrutinas se las llama funciones.

La definición de una función específica lo siguiente:

nombre de la función

número de argumentos que lleva y tipo de cada uno de ellos

tipo de datos que devuelve

Cuerpo de la función (el código que ejecuta)

Sintaxis:

tipo nombre ( arg1, arg2, ... ) { ... cuerpo ... }

Page 36: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 34/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Cada argumento se especifica como en una declaración de variable.

El cuerpo de la función debería contener una sentencia donde se devuelve el resultado de la función, que se hace de esta forma:

return expresión;

La función devolverá el resultado de la expresión.

Ejemplo de función

Función que devuelve la suma de dos enteros.

int suma ( int a, int b ) { return a+b; }

Llamadas a función

Para llamar a una función, se escribe su nombre y entre paréntesis los valores que se deseen dar a los argumentos:

función ( expr1, expr2, ... )

Cada expresión se evalúa y su resultado se pasa como argumento a la función. Las expresiones han de tener el mismo tipo del argumento correspondiente, o al menos un tipo compatible.

x = suma ( 1, a+5 ); /* correcto */ y = suma ( “hola”, 5 ); /* arg. 1 incorrecto */

Una llamada a función es una expresión, con todo lo que ello implica.

No es necesario recoger en una variable el valor devuelto por la función.

(Por ejemplo, printf y scanf son funciones que devuelven un entero).

Funciones sin argumentos

Se declaran con void entre paréntesis (sólo en C).

int fecha (void) { ... }

Page 37: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 35/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Se las llama así:

dato = fecha();

…es decir, siempre hay que escribir los paréntesis aunque no haya argumentos.

En C++ se declaran sólo con los paréntesis, sin el void.

Funciones sin argumentos

Se declaran con void entre paréntesis (sólo en C).

int fecha (void) { ... }

Se las llama así:

dato = fecha();

…es decir, siempre hay que escribir los paréntesis aunque no haya argumentos.

En C++ se declaran sólo con los paréntesis, sin el void.

Argumentos de entrada/salida o paso por referencia

Una función en C no puede alterar las variables pasadas como parámetros. Los parámetros se pasan por valor.

#include <stdio.h> /* función inútil */ void incrementa ( int variable ) { variable ++; } main() { int x = 33; incrementa (x); /* x no resulta afectada, sigue valiendo 33 */ printf ( "la variable x vale ahora %d\n", x ); }

Page 38: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 36/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Para conseguir alterar una variable pasada como parámetro, hay que recurrir a los punteros. (Se verá más adelante).

Otras consideraciones

Funciones anidadas

En C no se pueden declarar funciones dentro de otras (funciones anidadas o locales). Todas las funciones son globales.

Recursividad

Se permite hacer llamadas recursivas:

float factorial (int n) { if (n<=1) return 1.0; else return n*factorial(n-1); }

• ¿Qué es una macro?

La directiva #define se usa para definir constantes o cualquier sustitución de macro. Su formato es el siguiente:

#define <nombre de macro> <nombre de reemplazo>

Por ejemplo:

#define FALSO 0 #define VERDADERO !FALSO

La directiva #define tiene otra poderosa característica: el nombre de macro puede tener argumentos. Cada vez que el compilador encuentra el nombre de macro, los argumentos reales encontrados en el programa reemplazan los argumentos asociados con el nombre de la macro. Por ejemplo:

#define MIN(a,b) (a < b) ? a : b main() { int x=10, y=20; printf("EL minimo es %d\n", MIN(x,y) ); }

Page 39: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 37/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Cuando se compila este programa, el compilador sustituirá la expresión definida por MIN(x,y), excepto que x e y serán usados como los operandos. Así después de que el compilador hace la sustitución, la sentencia printf será ésta:

printf("El minimo es %d\n", (x < y) ? x : y);

Como se puede observar donde se coloque MIN, el texto será reemplazado por la definición apropiada. Por lo tanto, si en el código se hubiera puesto algo como:

x = MIN(q+r,s+t);

…después del preprocesamiento, el código podría verse de la siguiente forma:

x = ( q+r < s+t ) ? q+r : s+t;

Otros ejemplos usando #define pueden ser:

#define Deg_a_Rad(X) (X*M_PI/180.0) /* Convierte grados sexagesimales a radianes, M_PI es el valor de pi */ /* y esta definida en la biblioteca math.h */ #define IZQ_DESP_8 <<8

La última macro IZQ_DESP_8 es solamente válida en tanto el reemplazo del contexto es válido, por ejemplo: x = y IZQ_DESP_8.

El uso de la sustitución de macros en el lugar de las funciones reales tiene un beneficio importante: incrementa la velocidad del código porque no se penaliza con una llamada de función. Sin embargo, se paga este incremento de velocidad con un incremento en el tamaño del programa porque se duplica el código.

2.2 Maneja memoria del equipo mediante la racionalización y reservación de la misma.

2.2.1 Desarrolla programas en lenguaje C que utilicen arreglos de diferentes dimensiones y que manejen memoria dinámica mediante pilas, colas y listas.

A. Manejo de apuntadores de memoria.

• ¿Qué es un apuntador?

El tipo de datos más característico del C son los punteros. Un puntero contiene un valor que es la dirección en memoria de un dato de cierto tipo. Los punteros se emplean en C

Page 40: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 38/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

para muchas cosas, por ejemplo recorrer vectores, manipular estructuras creadas dinámicamente, pasar parámetros por referencia a funciones, etc.

Cuando se declara una variable, se reserva un espacio en la memoria para almacenar el valor de la variable.

Ese espacio en memoria tiene una dirección.

Un puntero es una dirección dentro de la memoria, o sea, un apuntador a donde se encuentra una variable.

• ¿Cómo utilizar un apuntador?

Operaciones básicas

Declaración

Los punteros se declaran con un asterisco, de esta forma:

tipo * variable;

Por ejemplo:

int* puntero;

Se dice que la variable puntero es un puntero a enteros (apunta a un entero).

Asignación

El valor que puede adquirir un puntero es, por ejemplo, la dirección de una variable.

El operador & devuelve la dirección de una variable:

puntero = &variable;

Desreferencia de un puntero

Se puede alterar la variable a la que apunta un puntero.

Para ello se emplea el operador de desreferencia, que es el asterisco:

*puntero = 45;

Page 41: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 39/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

En este caso, se está introduciendo un 45 en la posición de memoria a la que apunta puntero.

Ejemplo de uso

{ int* puntero; int variable; puntero = &variable; *puntero = 33; /* mismo efecto que variable=33 */ }

Varios punteros pueden apuntar a la misma variable:

int* puntero1; int* puntero2; int var; puntero1 = &var; puntero2 = &var; *puntero1 = 50; /* mismo efecto que var=50 */ var = *puntero2 + 13; /* var=50+13 */

Otros usos

Declaración múltiple de punteros

Si en una misma declaración de variables aparecen varios punteros, hay que escribir el asterisco a la izquierda de cada uno de ellos:

int *puntero1, var, *puntero2;

Se declaran dos punteros a enteros (puntero1 y puntero2) y un entero (var).

El puntero nulo

El puntero nulo es un valor especial de puntero que no apunta a ninguna parte. Su valor es cero.

En <stdio.h> se define la constante NULL para representar el puntero nulo.

• Apuntadores en arreglos.

En C todos los parámetros se pasan por valor. Esto tiene en principio dos inconvenientes:

No se pueden modificar variables pasadas como argumentos

Page 42: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 40/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Si se pasa como parámetro una estructura, se realiza un duplicado de ella, con lo que se pierde tiempo y memoria

Sin embargo, se puede pasar un puntero como argumento a una función. El puntero no se puede alterar, pero sí el valor al que apunta:

void incrementa_variable (int* var) { (*var)++; } main() { int x = 1; incrementa_variable (&x); /* x pasa a valer 2 */ }

En el ejemplo anterior, había que poner paréntesis en (*var)++ porque el operador ++ tiene más precedencia que la desreferencia (el asterisco). Entonces *var++ sería como escribir *(var++), que no sería lo que queremos.

• Apuntadores en estructuras de datos.

Un puntero puede apuntar a una estructura y acceder a sus campos:

struct Dato { int campo1, campo2; char campo3 [30]; }; struct Dato x; struct Dato *ptr; ... ptr = &x; (*ptr).campo1 = 33; strcpy ( (*ptr).campo3, "hola" );

El operador ->

Para hacer menos incómodo el trabajo con punteros a estructuras, el C tiene el operador flecha -> que se utiliza de esta forma:

ptr->campo

…que es equivalente a escribir

(*ptr).campo

Así, el ejemplo anterior quedaría de esta forma:

Page 43: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 41/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

ptr = &x; ptr->campo1 = 33; strcpy ( ptr->campo3, "hola" );

B. Realiza operaciones en arreglos

• Búsqueda y edición de datos en arreglos unidimensionales

Búsqueda lineal = Búsqueda secuencial

// Búsqueda lineal de un elemento en un vector // - Devuelve la posición de “dato” en el vector // - Si “dato” no está en el vector, devuelve -1 int search (double vector[], int N, double dato) { int i; int pos = -1; for (i=0; i<N; i++) if (vector[i]==dato) pos = i; return pos; }

Versión mejorada

// Búsqueda lineal de un elemento en un vector // - Devuelve la posición de “dato” en el vector // - Si “dato” no está en el vector, devuelve -1 int search (double vector[], int N, double dato) { int i; int pos = -1; for (i=0; (i<N) && (pos==-1); i++) if (vector[i]==dato) pos = i; return pos;

Búsqueda binaria

Precondición

El vector ha de estar ordenado

Page 44: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 42/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Algoritmo

Se compara el dato buscado con el elemento en el centro del vector:

- Si coinciden, hemos encontrado el dato buscado.

- Si el dato es mayor que el elemento central del vector, tenemos que buscar el dato en segunda mitad del vector.

- Si el dato es menor que el elemento central del vector, tenemos que buscar el dato en la primera mitad del vector.

// Búsqueda binaria de un elemento en un vector // - Devuelve la posición de “dato” en el vector // - Si “dato” no está en el vector, devuelve -1 // Implementación recursiva // Uso: binSearch (vector, 0, N-1, dato)

Page 45: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 43/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

int binSearch ( double vector[], int izq, int der, double buscado) { int centro = (izq+der)/2; if (izq>der) return -1; else if (buscado==vector[centro]) return centro; else if (buscado<vector[centro]) return binSearch(vector, izq, centro-1, buscado); else return binSearch(vector, centro+1, der, buscado); } // Implementación iterativa // Uso: binSearch (vector, N, dato) int binSearch (double vector[], int N, double buscado) { int izq = 0; int der = N-1; int centro = (izq+der)/2; while ((izq<=der) && (vector[centro]!=buscado)) { if (buscado<vector[centro]) der = centro – 1; else izq = centro + 1; centro = (izq+der)/2; } if (izq>der) return -1; else return centro; }

C. Detección y corrección de los principales errores de programación.

• Prueba y depuración

En inglés, a un error de programa se le conoce como bug (insecto), y al proceso de eliminación de errores se le llama debugging, es decir, depuración. Existe una historia pintoresca sobre cómo es que este término comenzó a utilizarse. Ocurrió en los primeros días de las computadoras, cuando el hardware era extremadamente sensible. La Contralmirante Grace Murray Hopper (1906-1992) fue “la tercera programadora de la primera computadora digital de gran escala ene l mundo”. (Denise W. Gurer, “Mujer pionera en la ciencia de la computación” CACM 38(1):45-54, enero de 1995). Mientras Hopper trabajaba en la computadora Harvard Mark I, bajo la dirección del profesor de Harvard H. Aiken, una palomilla ocasionó que la transmisión fallará. Hopper y los otros

Page 46: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 44/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

programadores registraron la muerte de la palomilla en la bitácora, con la nota “Primer caso real de un bug (insecto) hallado”. La bitácora actualmente se encuentra en exhibición en el Museo Naval de Dahlgren, Virginia. En computación, este fue el primer bug documentado. El profesor Aiken entró a las instalaciones durante un descanso y pregunto si se habían encontrado algunos otros números, y los programadores respondieron que estaban depurando (debugging) la computadora. Para mayor información sobre el Contralmirante Hopper y otras personas de computación, vea Portraits in Silicon de Robert Slater, MIT Press, 1987. En la actualidad, en computación un bug es un error. En seguida describiremos los tres tipos principales de errores de programación y proporcionaremos algunos consejos para corregirlos.

Tipos de errores de programación

Error de sintaxis

El compilador atrapará cierto tipo de errores y enviará un mensaje de error cuando encuentre uno. Detectará lo que se conoce como errores de sintaxis porque son en gran medida violaciones de sintaxis (es decir, de reglas gramaticales) del lenguaje de programación, como por ejemplo, omitir un punto y coma.

Si el compilador descubre que su programa contiene un error de sintaxis, le indicará en dónde es probable que se encuentre dicho error y qué clase de error es. Si el compilador dice que su programa contiene un error de sintaxis, tenga por seguro que así es. Sin embargo, el compilador puede equivocarse con respecto a la ubicación o a la naturaleza de un error. Éste realiza un mejor trabajo cuando determina la ubicación de un error, entre una línea o dos, que cuando determina la fuente de dicho error. Esto se debe a que el compilador intenta interpretar lo que usted quiso escribir, y con facilidad puede equivocarse. Después de todo, el compilador no puede leer nuestra mente. Los mensajes de error subsiguientes al primero tienen una probabilidad mayor de estar incorrectos, ya sea con respecto a la ubicación o a la naturaleza del error. De nuevo, esto se debe a que el compilador trata de interpretar nuestra intención. Si la primera interpretación del compilador fue incorrecta, esto afectará el análisis de futuros error, ya que dicho análisis estará basado en una suposición incorrecta.

En programación, un error de sintaxis se produce al escribir, incorrectamente, alguna parte del código fuente de un programa. De forma que, dicho error impedirá, tanto al compilador como al intérprete, traducir dicha instrucción, ya que, ninguno de los dos entenderá qué le está diciendo el programador. Por ejemplo, si en lenguaje C, en vez de la instrucción printf( "\n Introduzca el primer numero (entero): " );

un programador escribe prrintf( "\n Introduzca el primer numero (entero): " );

Page 47: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 45/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

cuando el compilador o el intérprete lean esta línea de código, ninguno de los dos entenderá qué es prrintf y, por tanto, no sabrán traducir esta instrucción a código máquina, por lo que, ambos pararán la traducción y avisarán al programador con un mensaje de error.

Mensajes de error en comparación con los de advertencia

Si nuestro programa contiene algo que viola directamente las reglas de sintaxis del lenguaje de programación, el compilador enviará un mensaje de error. Sin embargo, algunas veces el compilador sólo genera un mensaje de advertencia, el cual indica que hemos hecho algo que no es, técnicamente hablando, una violación de las reglas de sintaxis del lenguaje de programación, pero que es lo suficientemente inusual para indicar un probable error. Cuando recibimos un mensaje de advertencia, lo que el compilador le dice es, “¿está seguro de que quiso decir esto?” En esta etapa de su desarrollo, debe tratar cualquier advertencia como un error, hasta que el maestro autorice que la ignore.

Errores en tiempo de ejecución

Existe cierto tipo de errores que los sistemas de cómputo sólo pueden detectar cuando se ejecuta el programa. Por ello, se les conoce como errores en tiempo de ejecución. La mayoría de los sistemas de cómputo detectará ciertos tipos de errores de este tipo, y desplegarán un mensaje de error adecuado. Muchos intenta dividir un número entre cero, ése normalmente es un error en tiempo de ejecución.

En programación, un error de ejecución se produce cuando el ordenador no puede ejecutar alguna instrucción de forma correcta. Por ejemplo, en lenguaje C, la instrucción c = 5 / 0;

es correcta sintácticamente y será traducida a código binario. Sin embargo, cuando la computadora intente realizar la división 5 / 0

se producirá un error de ejecución, ya que, matemáticamente, no se puede dividir entre cero.

Error lógico

El hecho de que el compilador apruebe el programa y éste se ejecute una vez sin mensajes de error en tiempo de ejecución, no garantiza que el programa sea correcto. Recordemos, el compilador sólo nos indica si hemos escrito un programa en C gramaticalmente correcto; no nos dice si el programa hace lo que queremos que haga. Los errores en el algoritmo subyacente o en la traducción del algoritmo hacia el lenguaje C se conocen

Page 48: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 46/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

como errores lógicos. Si el compilador aprobó nuestro programa y no hay errores en tiempo de ejecución, pero el programa no se comporta adecuadamente, entonces indudablemente contiene un error lógico. Los errores lógicos son más difíciles de diagnosticar, porque la computadora no le envía mensajes para ayudarle a encontrar el error. No es razonable esperar obtener mensajes de error pues la computadora no tiene forma de saber que lo que escribimos no es lo que realmente queríamos escribir.

En programación, los errores de lógica son los más difíciles de detectar. Cuando un programa no tiene errores de sintaxis ni de ejecución, pero, aún así, no funciona bien, esto es debido a la existencia de algún error lógico. De manera que, un error de lógica se produce cuando los resultados obtenidos no son los esperados. Por ejemplo, en lenguaje C, si en vez de la instrucción c = a + b;

un programador hubiera escrito c = a * b;

hasta que no se mostrase por pantalla el resultado de la operación, el programador no podría darse cuenta del error, siempre que ya supiese de antemano el resultado de la suma. En este caso, el programador podría percatarse del error fácilmente, pero, cuando las operaciones son más complejas, los errores de lógica pueden ser muy difíciles de detectar.

Los 25 errores de programación más peligrosos

Al ver que la mayoría de los agujeros de seguridad en el software es producida por errores de programación que podrían ser evitados si fuésemos más cautelosos, un grupo internacional de expertos crearon una lista con los 25 errores de programación más peligrosos. Para crear esta lista trabajó gente de empresas tales como Microsoft, CERT, Oracle Corporation, Tata Consultancy Services, RSA, Red Hat Inc. y varias más.

A continuación detallo una lista (en inglés) con estos errores:

Improper Input Validation

Improper Encoding or Escaping of Output

Failure to Preserve SQL Query Structure (aka ‘SQL Injection’)

Failure to Preserve Web Page Structure (aka ‘Cross-site Scripting’)

Failure to Preserve OS Command Structure (aka ‘OS Command Injection’)

Clear text Transmission of Sensitive Information

Cross-Site Request Forgery (CSRF)

Race Condition

Error Message Information Leak

Page 49: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 47/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Failure to Constrain Operations within the Bounds of a Memory Buffer

External Control of Critical State Data

External Control of File Name or Path

Untrusted Search Path

Failure to Control Generation of Code (aka ‘Code Injection’)

Download of Code Without Integrity Check

Improper Resource Shutdown or Release

Improper Initialization

Incorrect Calculation

Improper Access Control (Authorization)

Use of a Broken or Risky Cryptographic Algorithm

Hard-Coded Password

Insecure Permission Assignment for Critical Resource

Use of Insufficiently Random Values

Execution with Unnecessary Privileges

Client-Side Enforcement of Server-Side Security

Las páginas donde están publicados estos errores (que se actualizarán regularmente) junto con su detalle son www.sans.org/top25errors y cwe.mitre.org/top25, y en las mismas también hay enlaces a recursos para ayudar a eliminarlos.

Page 50: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 48/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

Prácticas para el laboratorio

PB001.c

PB001.c #include <stdio.h> main() { printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que muestra un mensaje <-\n\n"); printf("Hola Mundo!\n"); return 0; }

PB002.c

PB002.c #include <stdio.h> main() { char car; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que solicita un carácter para despues mostrarlo <-\n\n"); printf("Teclee un caracter..."); scanf("%c",&car); printf("El caracter es... %c\n",car); return 0; }

Page 51: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 49/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

PB003.c

PB003.c #include <stdio.h> main() { int a=0,b=0,c=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que suma dos numeros solicitados <-\n\n"); printf("Teclee un numero..."); scanf("%d",&a); printf("Teclee un numero..."); scanf("%d",&b); c=a+b; printf("La suma es... %d \n",c); return 0; }

PB004.c

PB004.c #include <stdio.h> main() { int a=0,b=0,c=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que resta dos numeros solicitados <-\n\n"); printf("Teclee un numero..."); scanf("%d",&a); printf("Teclee un numero..."); scanf("%d",&b); c=a-b; printf("La resta es... %d \n",c); return 0; }

Page 52: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 50/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

PB005.c

PB005.c #include <stdio.h> main() { int a=0,b=0,c=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que multiplica dos numeros solicitados <-\n\n"); printf("Teclee un numero..."); scanf("%d",&a); printf("Teclee un numero..."); scanf("%d",&b); c=a*b; printf("La multiplicacion es... %d \n",c); return 0; }

PB006.c

PB006.c #include <stdio.h> main() { int a=0,b=0,c=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que divide dos numeros solicitados <-\n\n"); printf("Teclee un numero..."); scanf("%d",&a); printf("Teclee un numero..."); scanf("%d",&b); c=a/b; printf("La division es... %d \n",c); return 0; }

Page 53: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 51/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

PB007.c

PB007.c #include <stdio.h> main() { int l=0,a=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que calcula el area de un cuadrado <-\n\n"); printf("Teclee el lado..."); scanf("%d",&l); a=l*l; printf("El area del cuadrado es... %d \n",a); return 0; }

PB008.c

PB008.c #include <stdio.h> main() { float b=0,h=0,a=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que calcula el area de un rectangulo <-\n\n"); printf("Teclee la base..."); scanf("%f",&b); printf("Teclee la altura..."); scanf("%f",&h); a=(b*h); printf("El area del rectangulo es... %.2f \n",a); return 0; }

Page 54: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 52/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

PB009.c

PB009.c #include <stdio.h> main() { float b=0,h=0,a=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que calcula el area de un triangulo <-\n\n"); printf("Teclee la base..."); scanf("%f",&b); printf("Teclee la altura..."); scanf("%f",&h); a=(b*h)/2; printf("El area del triangulo es... %.2f \n",a); return 0; }

PB010.c

PB010.c #include <stdio.h> main() { double pi=3.14159265,a=0; float r=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que calcula el area de un circulo <-\n\n"); printf("Teclee el radio..."); scanf("%f",&r); a=pi*r*r; printf("El area del circulo es... %.2lf \n",a); return 0; }

Page 55: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 53/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

PB011.c

PB011.c #include <stdio.h> main() { int c=0; double f=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que convierte grados celcius a fahrenheit <-\n\n"); printf("Teclee los grados C..."); scanf("%d",&c); f=(1.8*c)+32; printf("%3d grado(s) C son... %3.2lf grado(s) F \n",c,f); return 0; }

PB012.c

PB012.c #include <stdio.h> main() { int l=0, v=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que calcula el volumen de un cubo <-\n\n"); printf("Teclee el lado..."); scanf("%d",&l); v=l*l*l; printf("El volumen del cubo es... %d \n",v); return 0; }

Page 56: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 54/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

PB013.c

PB013.c #include <stdio.h> main() { int b=0, a=0, h=0,v=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que calcula el volumen de un prisma rectangular <-\n\n"); printf("Teclee la base..."); scanf("%d",&b); printf("Teclee el ancho..."); scanf("%d",&a); printf("Teclee la altura..."); scanf("%d",&h); v=b*a*h; printf("El volumen del prisma rectangular es... %d \n",v); return 0; }

PB014.c

PB014.c #include <stdio.h> main() { int b=0, a=0, h=0,v=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que calcula el volumen de una priamide rectangular <-\n\n"); printf("Teclee la base..."); scanf("%d",&b); printf("Teclee el ancho..."); scanf("%d",&a); printf("Teclee la altura..."); scanf("%d",&h); v=(b*a*h)/3; printf("El volumen de la piramide rectangular... %d \n",v); return 0; }

Page 57: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 55/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

PB015.c

PB015.c #include <stdio.h> main() { double pi=3.14159265, v=0; float r=0, h=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que calcula el volumen de un cilindro circular <-\n\n"); printf("Teclee el diametro..."); scanf("%f",&r); printf("Teclee la altura..."); scanf("%f",&h); v=(pi*r*r*h); printf("El volumen del cilindro circular es... %.2lf \n",v); return 0; }

PB016.c

PB016.c #include <stdio.h> main() { double pi=3.14159265, v=0; float r=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que calcula el volumen de unaa esfera <-\n\n"); printf("Teclee el radio..."); scanf("%f",&r); v=(4*pi*r*r*r)/3; printf("El volumen de la esfera es... %.2lf \n",v); return 0; }

Page 58: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 56/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

PB017.c

PB017.c #include <stdio.h> main() { float mil, met; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que convierte de millas nauticas a metros <-\n\n"); printf("Teclee las millas nauticas..."); scanf("%f",&mil); met=1852*mil; printf("%.2f millas nauticas es igual a %.2f metros\n", mil, met); return 0; }

PB018.c

PB018.c #include <stdio.h> main() { double in=0; float cm=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que convierte centimetros a pulgadas <-\n\n"); printf("Teclee los cm... "); scanf("%f",&cm); in=cm/2.54; printf("->%.2f cm. es igual a %.2lf in.\n",cm,in); return 0; }

Page 59: Programación básica

Guía del Módulo

Programación Básica

Modelo Académico de Calidad para la Competitividad

PBAS-00 57/59

Elaborado por: Reina Liliana López Reyes y Feliciano Nevárez Raizola

PB019.c

PB019.c #include <stdio.h> main() { double km=0, m=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que convierte kilometros a metros <-\n\n"); printf("Teclee los cm... "); scanf("%lf",&km); m=km*1000; printf("->%.2lf km. es igual a %.2lf m.\n",km,m); return 0; }

PB020.c

PB020.c #include <stdio.h> main() { double gb=0, kb=0; printf("Colegio de Educacion Profesional Tecnica del Estado de Nuevo Leon\n"); printf("Plantel: Ing. Adrian Sada Trevi¤o (Monterrey III)\n\n"); printf("Carrera: Profesional Tecnico Bachiller en Informatica\n"); printf("Modulo: Programacion Basica\n"); printf("Actividad de evaluacion: 1.1.1 - Desarrollo de programas en C\n\n"); printf("Alumno(a): \n"); printf("Matricula: \t Grupo: \n"); printf("PSP: \n\n"); printf(" -> Programa que convierte kilobytes a gigabytes <-\n\n"); printf("Teclee los kb... "); scanf("%lf",&kb); gb=kb/1000; printf("->%.2lf Kb es igual a %lf Gb.\n",kb,gb); return 0; }