Você está na página 1de 121

REPÚBLICA BOLIVARIANA DE VENEZUELA

MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN


UNIVERSITARIA
COLEGIO UNIVERSITARIO DE CARACAS

GUÍA BÁSICA Y PRÁCTICA DE PROGRAMACIÓN EN EL LENGUAJE C++


PROPUESTA

Lic. Iris Consuelo Rangel Rosales


CI. 5412938

Caracas, octubre 2013

INTRODUCCION

“Para mí la educación significa formar creadores”.


J. Piaget
“La imaginación es más importante que los conocimientos”.
A. Einstein
La educación ocupa un lugar relevante en el proceso de transformación social,
política y económica que ha emprendido el país, a partir de la formulación y
desarrollo del Proyecto Nacional Simón Bolívar (PNSB) y expresado desde
nuestra constitución. Mediante el Decreto 6.650 del 24 de marzo de 2009
publicado en Gaceta Oficial Nº 39.148 del mismo año, el Ministerio del Poder
Popular para la Educación Universitaria (MPPEU), oficializa la creación de la
Misión Alma Mater. La cual se crea con el propósito de impulsar la
transformación de la Educación Universitaria Venezolana, propulsando la
articulación institucional y territorial, en función de las líneas estratégicas del
PNSB, garantizando el derecho de todas y todos a una Educación Universitaria
de calidad sin exclusiones.
La Misión Alma Mater se constituye como referencia de una nueva
institucionalidad, caracterizada por la cooperación solidaria, cuyo eje es la
generación, transformación y socialización del conocimiento pertinente a
nuestras realidades y retos culturales, ambientales, políticos, económicos y
sociales, en el marco de la transformación del país.
Siguiendo estos lineamientos, se esta trabajando para la construcción de la
“Nueva Universidad” partiendo de la experiencia acumulada por los Institutos
Universitarios de Tecnología, Colegios Universitarios e Instituciones
Universitarias, representando un desafió político y académico, con la intención
de servir a la formación de hombres y mujeres nuevos, comprometidos con la
sociedad socialista, con una formación integral, que en lo ontológico posean
profunda calidad humana, con moral y ética en cada una de sus aptitudes; con
amor a la patria y a todos los que viven en ella, en lo epistemológico adquirir un
nivel de competencias en el conocimiento universal, técnico, científico y
humanístico, que lo haga reflexionar como un ser de pensamiento libre y
crítico, en cualquier situación y donde quiera que se encuentre.
Las universidades están exigiendo nuevos enfoques educativos para la
formación de profesionales y especialistas. Las carreras de Ingeniería en
Sistemas y otras afines, no escapan a esta realidad. Sánchez y Almeida [1],
presentan una caracterización del estado de la educación actual; comentan
sobre las tendencias de la educación en el contexto de la globalización del
conocimiento, refiriéndose a un desarrollo continuo y muchas veces acelerado
de las áreas del conocimiento, en particular, las asociadas a las tecnologías de
punta, áreas de conocimientos cada vez más especializadas, programas
formales y de educación continua presenciales y a distancia y por último, las
tendencias de las tecnologías aplicadas a la educación, donde existe una gran
diversidad y heterogeneidad de los Sistemas de Gestión del Aprendizajes
(LMS, por las siglas en inglés Learning Management Systems).
Un ingeniero en informática debe saber diseñar la arquitectura y detallar las
especificaciones de funcionamiento de un sistema, conocer las posibilidades de
los distintos lenguajes de codificación, ser capaz de realizar la implementación
del producto mediante el uso de las diferentes metodologías y paradigmas de
desarrollo que estén a su alcance, ponerlo en funcionamiento y estar en
disposición de validar el producto para la aceptación del cliente.
Entre la multiplicidad de roles que deben cumplir el profesional de la informática
se encuentra la contribución a la construcción y o reconstruir de la sociedad a
la que pertenece, en consciencia plena de como el conocimiento tributa al
desarrollo para el bienestar social. En este sentido, el Programa Nacional de
Formación en Informática (PNFI), circunscribe su acción hacia una praxis del
formar para transformar, considerando el conocimiento como un bien colectivo
con un marco filosófico propio. Es por eso, que el PNFI se fundamenta en:
a. la construcción de conocimientos partiendo de los proyectos
sociotecnológicos;
b. la formación crítica en el ámbito histórico, social, político, económico y
cultural y en el trabajo en contextos reales con principios bioéticos que
permitan disfrutar de la vida en un ambiente seguro, sano y
ecológicamente equilibrado.
Es por esto que el PNFI, sumado al proceso de transformación universitaria,
establece en su documento base la formación de ciudadanos y ciudadanas de
acuerdo con los principios siguientes:

 Visión democrática, integridad social y solidaridad en la lucha por la


emancipación, el respeto al ambiente y bienestar de la humanidad.
 Habilidad para aplicar la técnica y desarrollar tecnología en el área
informática según sean las necesidades y la prestación de servicios,
enmarcados en la seguridad y soberanía tecnológica acorde a los planes y
las políticas del Estado venezolano.
 Organización, planificación, participación con honestidad y responsabilidad
en el ejercicio de la función pública hacia una cultura de calidad.
 Preparación para la incertidumbre, la inestabilidad y la transformación
permanente.
 Universalidad, inclusión, equidad y un profundo sentido de pertenencia a su
país.
Tales principios -si bien son generales en la educación universitaria bolivariana-
inciden en la particularidad de la formación de los nuevos profesionales de la
informática, donde la enseñanza-aprendizaje de la programación, es esencial,
por cuanto la programación constituye los procedimientos utilizados para el
desarrollo de software en el mundo, que avanza con gran rapidez hacia
enfoques más avanzados para la resolución de problemas complejos [2]. Por
esta razón, es fundamental que los estudiantes del trayecto I, obtengan la
máxima capacitación en programación y que sean capaces -en un primer
momento- de:
1. Conocer el proceso de evolución de los distintos paradigmas de
programación.
2. Aplicar los conceptos de programación estructurada, tipos de datos, pase
de parámetros, procedimientos, entre otras facilidades de la programación.
3. Realizar programas sencillos y estructurados que puedan ser leídos en
secuencia, de arriba hacia abajo, sin necesidad de estar saltando de un sitio
a otro en la lógica, lo cual es típico de otros estilos de programación.
4. Lograr una reducción del esfuerzo en las pruebas, el seguimiento de las
fallas o depuración.
5. Crear programas sencillos, rápidos y eficientes.
6. Construcción de programas de fácil comprensión.
7. Aplicar la reutilización y extensión del código.
8. Desarrollar una aproximación disciplinada a la especificación,
implementación, verificación y documentación de programas.
9. Apreciar el papel central que representa la abstracción en la tarea de
programar.
10. Resolver problemas mediante las técnicas de diseño de algoritmos y
aplicarlo a la codificación de programas.
11. Conocer y utilizar adecuadamente estructuras de datos básicas, algoritmos
y esquemas de uso general.
12. Aprender un lenguaje de programación de alto nivel estructurado, general y
extendido que use el paradigma de la programación.
13. Asuma los fundamentos teóricos y prácticos básicos para cursar posteriores
estudios en programación.
Dentro de la enseñanza de la programación, se puede observar que no existe
un método generalizado sobre la mejor estrategia para enseñarla. Existen
muchos factores que influyen en la forma en que se enseña la programación,
entre los cuales se pueden mencionar: planificación de actividades en aulas y/o
laboratorios con máquinas computadoras, uso de herramientas tecnológicas,
métodos de enseñanza aplicados, contenidos programáticos, estado de la
documentación y otros.
Cabe destacar que el estudiantado, presenta bajo rendimiento en la unidad
curricular algorítmica y programación, presentando deficiencias durante el
curso, relacionadas con aprendizajes previos de matemática y lógica que
dificultan la comprensión de los contenidos. Además, en general, se observan
pocos proyectos de investigación, encaminados a desarrollar el pensamiento
lógico y abstracto que requieren actividades intrínsecamente ligadas a la
programación, como por ejemplo: la modelación, la abstracción, la planificación
de procesos, la síntesis, la descomposición o fragmentación, el análisis de
alternativas, entre otros.
A partir de la problemática descrita se definió como problema: ¿Cómo
contribuir en el proceso de enseñanza–aprendizaje de la programación,
utilizando el lenguaje C++ en los estudiantes del trayecto I del CUC? Cuyo
objeto de estudio es el proceso de enseñanza-aprendizaje de la programación
utilizando el lenguaje C++. Inscrito en el campo de acción del proceso
enseñanza-aprendizaje de la programación en la unidad curricular algorítmica y
programación.
Para materializar la investigación fue indispensable dar respuesta a las
preguntas siguientes:
1. ¿Cuál es el estado actual del proceso enseñanza-aprendizaje de la
programación, utilizando el lenguaje C++ en los estudiantes del trayecto I
del CUC?
2. ¿Cuáles son las tecnologías, herramientas y metodologías más adecuadas
para la elaboración de la guía de estudio que pueda ser usada como
medios de enseñanza de la Programación?
3. ¿Cómo elaborar una guía de estudio de la programación, utilizando el
lenguaje C++?
4. ¿Qué elementos se deben considerar para valorar la pertinencia del uso de
la guía de estudio como medio de enseñanza para apoyar el estudio?
Para alcanzar el objetivo planteado se proponen los siguientes Objetivos
Específicos:
1) Diagnosticar el estado actual del proceso enseñanza-aprendizaje de la
programación, utilizando el lenguaje C++ en los estudiantes del trayecto
I del CUC.
2) Identificar las tecnologías, herramientas y metodologías más adecuadas
para la elaboración de la guía de estudio que pueda ser usada como
medios de enseñanza de la Programación.
3) Estructurar una guía de estudio de la programación, utilizando el
lenguaje C++.
4) Valorar la pertinencia del uso de la guía de estudio como medio de
enseñanza para apoyar el estudio independiente de los estudiantes que
cursan materias de Programación.
El presente trabajo, representa un valor agregado al proceso enseñanza-
aprendizaje, al proponer un medio de enseñanza que puede ser usado, como
apoyo a las actividades curriculares, para consolidar los aprendizajes de la
programación y ejercitar la aplicación de éstos.
Este trabajo constituye una novedad, en tanto ofrece una nueva herramienta
que constituye un medio de enseñanza como tal, a través de la cual, los
estudiantes pueden ejercer un aprendizaje activo de conceptos fundamentales
de la materia de programación y contar con cierto nivel de retroalimentación de
su aprendizaje.
El contenido de la investigación se plasma en el documento, estructurado en
tres espacios, el primero los constituye la presente introducción; el segundo
organiza el Capítulo I, donde se exponen los fundamentos teóricos, explicando
los conceptos y teorías que sustentan la investigación. En el Capítulo II se
exponen los resultados del diagnóstico, que se realizó en la población
estudiantil que cursa la unidad curricular Algorítmica y Programación en las
carreras de Ingeniería en Sistemas e Informática en el PNFI del CUC, se
estructura la propuesta de la Guía de Estudio. Finalmente se presentan las
conclusiones, las recomendaciones, las referencias bibliográficas y los anexos.
Capítulo 1: Bases que Sustentan la Propuesta

El presente capítulo expone los fundamentos básicos que sustenta la


propuesta, se hace un análisis que justifique el porque la guía propuesta
puede ser un instrumento de trabajo que ayude y mejore el aprendizaje de la
programación utilizando el lenguaje C/C++ a los estudiante del CUC que
cursan el trayecto I de la unidad curricular Algorítmica y Programación. También
se muestran los resultados del diagnóstico realizado con las encuestas a los
profesores y estudiante a través de análisis, tablas y gráficos.

1.1. Análisis que justifica la Propuesta

El objetivo de la propuesta es proporcionar a los estudiantes del CUC que


cursen el trayecto I de la Unidad Curricular Algorítmica y Programación, las
bases necesarias de la programación aplicando las técnicas del lenguaje C/C+
+, de manera que lo contextualicen, lo orienten y lo estimulen en sus primeros
pasos de la programación. La propuesta puede ser la puerta de entrada y por
esta razón, el contenido de la guía ofrece información sencilla, clara y precisa
buscando el interés del estudiante.
Se tomará la Unidad Curricular Algorítmica y Programación para el desarrollo y
ejecución del proyecto de la Guía Practica y Básica manera que el
estudiante pueda:

 Realizar análisis, construcción y diseño de programas.

 Aprender un medio de resolución de problemas mediante técnicas de


programación.

1. Programar en C++, porque en el CUC se definió como la


herramienta de programación para el trayecto I “ El Lenguaje C+
+” , algunas ventajas que justifican su uso: Por ser un lenguaje
poderoso y flexible, con órdenes, operaciones y funciones de
biblioteca que se pueden utilizar para escribir la mayoría de los
programas. Tiene una gran cantidad de ventajas sobre otros
lenguajes y constituye precisamente la razón fundamental de que
después de casi dos décadas de uso siga siendo uno de los
lenguajes más populares. Lenguaje muy didáctico, porque gracias
a él, se puede aprender otros lenguajes con gran facilidad.
Existen muchos tutoriales, libros, código fuente para que el
estudiante investigue y aprenda lo necesario y mucho más.

La Guía esta estructurada siguiendo el contenido programático de la Unidad


Curricular (ver anexo 1), tiene 14 unidades que deben ubicarse en los trimestre
1, 2 y 3 del trayecto I, y se consideró que esta guía va a contener dos
capítulos, donde cada capitulo representará un trimestre de la Unidad
Curricular del trayecto I.

A continuación se muestra una tabla especificando las unidades


correspondientes a cada capitulo propuesto en la guía de manera que el
estudiante pueda decidir la unidad que desea reforzar .

Capitulo I Unidad 1: Algoritmo y Programas


Unidad 2: Estándares de Calidad en el Diseño de Algoritmos y
Construcción de Programas

Unidad 3: Datos y Entidades Primitivas

Unidad 4: Programación Estructurada

Unidad 5: Programación Modular

Capitulo II Unidad 6: Arreglos y Matrices

Unidad 7: Tratamiento de Cadenas de Caracteres

Unidad 8: Estructuras de Registros

Unidad 9: Archivos
Tabla n° 4 Unidades correspondiente a cada capitulo propuesto en la guía Fuente: La Autora

En la siguiente tabla se muestran las actividades que el estudiante debe


desarrollar a través de cada unidad, los recursos que debe utilizar y los
resultados que debe obtener.

UNIDAD ACTIVIDAD RECURSOS Resultados

Construcción de Orientación del Desarrollar el análisis


algoritmos mediante profesor para la construcción
Algoritmo y Programas lenguaje natural, de algoritmos.
pseudocódigo o
diagramas de flujos.
Resolución de un Orientación del Aprender a:
profesor
problema aplicando el
Computador. Realizar análisis
análisis, diseño,
teniendo presente las
codificación, Lenguaje de
especificaciones del
depuración y Programación
usuario.
mantenimiento.
Escribir la solución en
Estándares de Calidad
la sintaxis de un
en el Diseño de
lenguaje.
Algoritmos y
Construcción de Ejecutar y eliminar los
Programas errores del programa.

Realizar
actualizaciones de
manera que se cumpla
todas las necesidades
de cambio de los
usuario.

Ejemplos de Explicación del Reforzar la utilidad de


Datos y Entidades operadores y tipo de profesor los operadores y
Primitivas datos reconocer los tipos de
datos.

Copiar los ejemplos Orientación del Aprender a:


profesor Capturar información
del nº 3 al nº 27 en
Computador. del usuario aplicando
cualquier compilador
utilizado por C/C+ Lenguaje de las entradas y salidas
+,compilar y ejecutar Programación mediante las
instrucciones cin y
cout.
Programación
Estructurada Conocer el
funcionamientos de
las instrucciones de
decisión (if, switch) y
de repetición (for,
while, do while)
Copiar los ejemplos Orientación del Estructurar un
profesor
del nº 28 al nº 29 en programa a través de
Computador.
cualquier compilador procedimientos.
Programación Modular utilizado por C/C+ Lenguaje de
Trabajar con Pase de
+,compilar y ejecutar Programación
parámetro.

Copiar los ejemplos Orientación del Aprender a trabajar


profesor
del nº 30 al nº 41 en con estructuras
Computador.
Arreglos y Matrices cualquier compilador definidas por el
utilizado por C/C+ Lenguaje de usuario (arreglos y
+,compilar y ejecutar Programación matrices)

Copiar los ejemplos Orientación del Aprender a utilizar las


profesor
Tratamiento de del nº 42 al nº 46 en funciones para la
Computador.
Cadenas de cualquier compilador manipulación de las
Caracteres utilizado por C/C+ Lenguaje de cadenas de datos.
+,compilar y ejecutar Programación

Copiar los ejemplos Orientación del Definir estructuras


profesor
del nº 47 al nº 48 en definidas por el
Estructuras de Computador.
cualquier compilador usuario, aprendiendo
Registros
utilizado por C/C+ Lenguaje de a agrupar diferentes
+,compilar y ejecutar Programación tipos de datos.

Copiar los ejemplos Orientación del Aprender a trabajar


profesor
del nº 49 al nº 56 en con archivos
Computador.
Archivos cualquier compilador secuenciales y
utilizado por C/C+ Lenguaje de aleatorios.
+,compilar y ejecutar Programación

El mejoramiento del aprendizaje en la programación en los estudiantes


del CUC, ayudará alcanzar el objetivo del PNFI, permitiendo consolidar la
formación crítica productiva de los estudiantes a un profesional con formación
integral que se debe desempeñar con idoneidad y ética profesional, en la
conceptualización y construcción de productos tecnológicos informáticos en
armonía con la preservación del ambiente y del progreso de su entorno,
preparado en los saberes para:
 Participar en la administración de proyectos informáticos bajo estándares de
calidad y pertinencia social.

 Auditar sistemas informáticos.


 Desarrollar e implantar software bajo estándares de calidad y pertinencia
social, priorizando el uso de plataformas libres.
 Integrar y optimizar sistemas informáticos.
 Diseñar, implementar y administrar bases de datos.
 Diseñar, implementar y administrar redes informáticas bajo estándares de
calidad, priorizando el uso de software libre.

1.2 Resultados del diagnóstico

Se encuestaron treinta (30) estudiantes del Programa Nacional de Formación


en Informática (PNFI) del Colegio Universitario de Caracas (CUC) y cinco (5)
profesores del CUC, para conocer sus carencias y potencialidades en la
programación del lenguaje C++. Se desarrolló dos tipos de encuestas, una para
estudiantes (Anexo 1) y otra para profesores (Anexo 2). En la encuesta al
estudiante, se quería conocer el nivel de conocimiento en programación y en
el lenguaje C++. En la encuesta a los profesores, se quería medir si el profesor
disponía de una guía para la enseñanza del lenguaje C++. A continuación se
muestran la tabulación de las encuestas de alumnos y el resultado para cada
pregunta.

NRO NRO
PREGUNTA
(SI) (NO)
1. ¿Sabes de Programación? 16 14
2. ¿Has Desarrollado un programa? 5 25
3. ¿Con que nociones cuentas acerca de la programación? ALTO MEDIO BAJO
8 11 11
4. ¿Has desarrollado un programa en lenguaje C++? 6 24
1. C 15
2. C++ 10
3. HTMLS 20
5. ¿Que lenguaje de programación 4. JAVA 3
5. JavaScript 9
has utilizado para desarrollar un
6. RUBY
programa ? (marcar varias opciones) 7. PYTHON
8. PASCAL
9. CLIPPER
10. NINGUNO 25
6. ¿De estos lenguaje de 1. C 25
2. C++ 25
programación cuales conoces?
3. HTMLS 30
(marcar varias opciones) 4. JAVA 3
5. JavaScript 15
6. RUBY
7. PYTHON
8. PASCAL
9. CLIPPER
10. NINGUNO
7 ¿Qué medios utiliza para estudiar 1. LIBROS 10
2. INTERNET 30
programación?
3. APUNTES 30
(marcar varias opciones) 4. EJERCICIOS 10
5. GUIAS 5
6. OTROS 6
Tabla n° 4 Tabulación de las encuestas de alumnos Fuente: La Autora

 Saber el dominio de la programación

PREGUNTA SI NO
¿Sabes de Programación? 16 14
¿Has desarrollado un programa? 5 25
¿Con qué nociones cuentas acerca de la programación? Alto Medio Bajo
8 11 11

¿SABES DE PROGRAMACIÓN?

NO
47% SI
53%
¿HAS DESARROLLADO UN PROGRAMA?

SI
17%

NO
83%

¿CON QUÉ NOCIONES CUENTAS ACERCA DE


LA PROGRAMACIÓN?

ALTO
MEDIO 27%
37%

BAJO
36%

A cerca del dominio de la programación, es posible concluir que la mayoría de


los encuestados dicen saber programar, sin embargo un 83% no ha
desarrollado un programa y el 27% dice tener nociones de programación.

 Desarrollo en lenguaje C++

PREGUNTA SI NO
¿Has desarrollado un programa en lenguaje C++? 6 24
¿HAS DESARROLLADO UN PROGRAMA EN
LENGUAJE C++?

SI
20%

NO
80%

Como puede verse en la gráfica, el porcentaje de estudiantes que no has


desarrollado un programa en el Lenguaje C++ es del 80 %, una cifra alta.

 Lenguajes de Programación Utilizados

PREGUNTA LENGUAJE CANTIDAD

¿Que lenguaje de programación 1. C 15


has utilizado para desarrollar un 2. C++ 10
programa ? (marcar varias 3. HTMLS 20
opciones) 4. JAVA 3
5. JavaScript 9
6. RUBY
7. PYTHON
8. PASCAL
9. CLIPPER
10. NINGUNO 25
LENGUAJES DE PROGRAMACIÓN UTILIZADOS

18%
1. C
31% 2. C++
3. HTMLS
4. JAVA
5. JavaScript
12%
6. RUBY
7. PYTHON
0%
8. PASCAL
0%
9. CLIPPER
0% 10. NINGUNO
4% 24%
0%

11%

Según las respuestas dadas en la encuesta, la mayoría de los estudiantes no


han utilizado ninguno de estos lenguajes (31%), sin embargo hay preferencia
por el lenguaje HTML, esto nos da una idea que los estudiantes les gusta
desarrollar pagina Web, en cuanto al lenguaje C/C++ han utilizado el lenguaje.

 Lenguajes de Programación Conocidos

PREGUNTA LENGUAJE CANTIDAD

¿De estos lenguaje de 1. C 25


programación cuales conoces? 2. C++ 25
(marcar varias opciones) 3. HTMLS 30
4. JAVA 3
5. JavaScript 15
6. RUBY
7. PYTHON
8. PASCAL
9. CLIPPER
10. NINGUNO
LENGUAJES DE PROGRAMCIÓN CONOCIDOS

0%
15%
1. C
26%
2. C++
3%
3. HTMLS
4. JAVA
5. JavaScript
6. RUBY
7. PYTHON
8. PASCAL
30%
9. CLIPPER
26% 10. NINGUNO

Un 30% de los encuestados respondió que conocía el lenguaje HTML, pero el


26% si conoce el lenguaje C/C++, los otros lenguajes son pocos conocidos.

 Medios de Estudios

PREGUNTA MEDIOS CANTIDAD

¿Qué medios utiliza para estudiar 1. LIBROS 10


programación? 2. INTERNET 30
(marcar varias opciones) 3. APUNTES 30
4. EJERCICIOS 10
5. GUIAS 5
6. OTROS 6
MEDIOS DE ESTUDIOS

7% 11%
5%

11% 1. LIBROS
2. INTERNET
3. APUNTES
4. EJERCICIOS
33%
5. GUIAS
6. OTROS

33%

Según los resultados obtenido en esta pregunta, la mayoría de los encuestados


estudian con los apuntes recibidos en clase y consultando Internet, se puede
observar que pocos utilizan libros y no realizan ejercicios, siendo este último un
factor importante para que los estudiantes aprendan y desarrollen la
programación utilizando un lenguaje. Esto apunta a una posible explicación de
la poca dedicación al estudio que entre otras cosas trae como consecuencia el
bajo nivel de preparación general y específicamente en programación.

 Saber la opinión del profesor

PREGUNTA SI NO
¿Cree que los estudiantes de programación del trayecto I 5 0
del CUC mejorarían su nivel de conocimiento utilizando una
guía de programación práctica y básica de lenguaje C++?
¿Dispone Ud. de una guía para impartir sus clases de 5 0
programación?
GUÍA DE PROGRAMACIÓN PRÁCTICA Y BÁSICA DE LENGUAJE C++

0%

100%

GUÍA DE LENGUAJE C++ PARA LAS CLASES

0%

100%

La totalidad de los profesores encuestados consideran que los estudiantes de


programación del trayecto I del CUC mejorarían su nivel de conocimiento
utilizando una guía de programación práctica y básica de lenguaje C++ y si
utilizarían una guía de lenguaje C++ para dar sus clases en los laboratorios .
Resumen de los resultados obtenidos:

 Pocos estudiantes del CUC, tienen bajo conocimiento en programación.


 Pocos estudiantes han trabajado con el Lenguaje C++.
 Los medios más usados por los estudiantes del CUC para estudiar
programación es los apuntes e Internet.
 A muchos estudiantes conocen el lenguaje HTML.
 Los estudiantes del CUC realizan pocos ejercicios y no se documentan con
bibliografías, siendo esto un indicador del por qué el nivel de conocimiento
en cuanto a la programación es bajo en el lenguaje C++.

1.3. Conclusiones.

A partir del estudio realizado en este capítulo se puede arribar a las siguientes
conclusiones:

 Mediante el desarrollo de este capítulo, se obtuvo la fundamentación


teórica que sustentará este trabajo de investigación.

 El resultado del diagnostico de las encuestas realizadas a los


estudiantes y a los profesores para conocer sus carencias y
potencialidades en la programación del lenguaje C++.
Capítulo 2: DESCRIPCIÓN DE LA PROPUESTA

Guía XXXXX: Propuesta

En el presente capítulo, se muestran los resultados del diagnóstico realizado


con las encuestas a través de análisis, tablas y gráficos. Se describe el
contenido de la Propuesta de la Guía Práctica y Básica para mejorar
el nivel de programación utilizando como herramienta el lenguaje C++
a los estudiante de la unidad curricular “Algorítmica y Programación”,
perteneciente al Trayecto I.

.2 La Propuesta
Objetivo de la propuesta

Esta Guía de C++, es una recopilación de conceptos teóricos y ejercicios


sobre C++ propios de la autora, tomados de Internet y en libros de
programación, que fueron actualizados y probados por la autora, utilizando
para las pruebas los compiladores de Dev-C++, Borland C ++ y Linux de
manera que el estudiante obtenga una formación completa en cuanto a
programación.

Dev-C++ entorno de desarrollo para C/C++. Consiste en un editor de múltiples


ventanas integrado con un compilador que nos permitirá una compilación, un
enlace y una ejecución de aplicaciones rápida y de Fácil uso.

Borland C + + es un C y C + + entorno de programación es decir, un entorno


de desarrollo integrado.

La Guía esta estructurada siguiendo el contenido programático de la Unidad


Curricular “Algorítmica y programación”. Unidad Curricular dictada en el CUC
para el Trayecto I, Trimestres 1,2, y 3. Compuesta por temas útiles que servirán
como referencia rápida en el aprendizaje del Lenguaje C++. Algunos de l os
temas a tratar en la guía son los siguientes: Introducción Al Lenguaje C++ ,
Tipos De Datos, Entrada y Salida Básica, Estructuras de Control, Funciones,
Arreglos, matrices y Cadenas, Apuntadores, Estructuras, Entrada y Salida por
Archivos y la Biblioteca Estándar De C++.
2.2.1 Estructura de la Guía

La Guía esta estructurada siguiendo el contenido programático de la Unidad


Curricular “Algorítmica y programación”. Esta Unidad Curricular (ver anexo 1)
tiene 14 unidades que deben ubicarse en los trimestre 1, 2 y 3 del trayecto I, y
se consideró que esta guía va a contener dos capítulos, donde cada capitulo
representará un trimestre de la Unidad Curricular del trayecto I. A continuación
se muestra una tabla especificando las unidades correspondiente a cada
capitulo propuesto en la guía.

Capitulo I Unidad 1: Algoritmo y Programas

Unidad 2: Estándares de Calidad en el Diseño de Algoritmos y


Construcción de Programas

Unidad 3: Datos y Entidades Primitivas

Unidad 4: Metodología para el Análisis y Planteamiento de Problemas

Unidad 5: Programación Estructurada

Unidad 6: Programación Modular

Capitulo II Unidad 7: Arreglos y Matrices

Unidad 8: Tratamiento de Cadenas de Caracteres

Unidad 9: Estructuras de Registros

Unidad 10: Archivos


Tabla n° 5 Unidades correspondiente a cada capitulo propuesto en la guía Fuente: La Autora

2.2.2 Estrategia
La documentación de esta está guía esta dirigida a cualquier persona que
quiera iniciarse y aprender los primeros pasos de la programación y en espacial
a los estudiantes del colegio Universitario de Caracas que cursen la Unidad
Curricular “Algorítmica y Programación”.
Esta Guía de C++, es una recopilación de conceptos teóricos y ejercicios
sobre C++ propios de la autora, tomados de Internet y en libros de
programación, que fueron actualizados y probados por la autora, utilizando
para las pruebas los compiladores de Dev-C++, Borland C ++ y Linux de
manera que el estudiante obtenga una formación completa en cuanto a
programación.

Se recomienda la instalación de los compiladores antes mencionados en la


computadora y una vez instalados, realizar copia de los ejercicios para que el
estudiante los compilen, los ejecuten y vean los resultados obtenidos en cada
ejercicio, este método es una de las tantas manera de aprender y el estudiante
obtener el conocimiento del funcionamiento de las instrucciones del lenguaje
C++.

La Unidad Curricular es la primera asignatura en la que el alumno aprecia el


papel central que representa la abstracción en la tarea de programar, a la vez
que conoce un lenguaje de programación de alto nivel para codificar los
programas. Es por tanto, imprescindible tanto en asignaturas específicas de
programación como en aquellas en las que se hace uso de un lenguaje de
programación los siguientes temas:

 Algoritmo y Programas
 Estándares de Calidad en el Diseño de Algoritmos y Construcción de
Programas

 Datos y Entidades Primitivas


 Metodología para el Análisis y Planteamiento de Problemas
 Programación Estructurada
 Programación Modular
 Arreglos y Matrices
 Tratamiento de Cadenas de Caracteres
 Estructuras de Registros
 Archivos
2.2.3 Requisitos

La funcionalidad de la guía ha sido pensada de manera tal que se imparta los


capítulos a los estudiantes del trayecto I siguiendo la lista de requisitos.

Capítulos Trimestres
1 Trimestre 1
2 Trimestre 2
Tabla n° 6 Listas de Requisitos Fuente: La Autora

Es necesario resaltar que el alcance de la guía no cubre el Trimestre 3 por


razón de tiempo y el estudiante debe estudiar la asignatura consultando la
bibliografía sugerida por los profesores y asistir con regularidad a las tutorías
de sus profesores. Debido al marcado carácter práctico de la asignatura, se
recomienda que el estudiante realice la mayor parte de los ejercicios
propuestos y los alumnos que cursen esta unidad curricular deberían :

 Saber leer, comprender y expresarse correctamente tanto de forma oral


como escrita.
 Tener conocimientos matemáticos a nivel de Bachillerato.
 Conocer el idioma inglés tanto a nivel escrito como oral (nivel medio).

2.2.4 Programación

A continuación se describe a través de la siguiente tabla la programación de las


actividades de cómo se deben aplicar a los estudiantes como sugerencia, los
temas y ejercicios propuestos para obtener un aprendizaje de calidad y
asegurar la formación en la programación.
Trimestr Tema % Actividades

e
Algoritmo y Programas 10  Clases magistrales donde se
Estándares de Calidad en 10 impartirá la base teórica y se
el Diseño de Algoritmos y expondrán ejemplos aclaratorios. Una
Construcción de vez finalizado un tema teórico se
Programas impartirán sesiones de problemas.
Datos y Entidades 10
1
Primitivas  La metodología usada será la
Metodología para el 10
exposición mediante el pizarrón,
Análisis y Planteamiento
retroproyector y computador.
de Problemas
Programación Estructurada 30
Programación Modular  El profesor podrá solicitar la
30
Arreglos y Matrices 25 participación activa del estudiante
Tratamiento de Cadenas 25 mediante preguntas rápidas, teniendo
de Caracteres en cuenta los estudiantes que más
Estructuras de Registros 10 participen a la hora de evaluar.
Archivos 40
 Prácticas en laboratorio con
resolución y entrega(diseño e
implementación de programas
escritos en C++).

 Las prácticas se realizará de forma


individual o en parejas.
2

 La asistencia a las sesiones de


laboratorio es obligatoria.

 Realización de pruebas parciales


evaluables a lo largo del trimestre

 nuevo.

Tabla n° 7 Programación Fuente: La Autora

2.2.5 Competencias a adquirir por los estudiantes.


Un ingeniero en sistemas debe saber diseñar la arquitectura y detallar las
especificaciones de funcionamiento de un sistema, conocer las posibilidades de
los distintos lenguajes de codificación, ser capaz de realizar la implementación
del producto mediante el uso de las diferentes metodologías y paradigmas de
desarrollo que estén a su alcance, ponerlo en explotación y estar en
disposición de validar el producto para la aceptación del cliente.

Por esta razón, es fundamental que los estudiantes del trayecto I, obtengan la
máxima capacitación en programación y que sea capaz en un primer momento
de:

1. Conocer y entender el proceso de evolución de los distintos paradigmas de


programación.
2. Aplicar los conceptos de programación estructurada, tipos de datos, pase
de parámetros, procedimientos, entre otras facilidades de la programación.
3. Realizar programas fáciles, estructurado que puedan ser leído en
secuencia, de arriba hacia abajo, sin necesidad de estar saltando de un sitio
a otro en la lógica, lo cual es típico de otros estilos de programación.
4. Lograr una reducción del esfuerzo en las pruebas, el seguimiento de las
fallas o depuración.
5. Crear programas sencillos , rápidos y eficientes.
6. Construcción de programas de fácil comprensión.
7. Aplicar la reutilización y extensión del código.
8. Desarrollar una aproximación disciplinada a la especificación,
implementación, verificación y documentación de programas.
9. Apreciar el papel central que representa la abstracción en la tarea de
programar
10. Desarrollar en el alumno la capacidad de resolución de problemas mediante
las técnicas de diseño de algoritmos y aplicarlo a la codificación de
programas
11. Conocer y utilizar adecuadamente estructuras de datos básicas, algoritmos
y esquemas de uso general
12. Aprender un lenguaje de programación de alto nivel estructurado, general y
extendido que use el paradigma de la programación.
13. Proporcionar los fundamentos teóricos y prácticos básicos para cursar
posteriores estudios en programación.

2.2.6 Diseño

La guía será diseñada de manera funcional y tendrá una organización en sus


temas propuestos, originalidad y sobre todo formación técnica y científica. El
diseño de la guía se realizará de la forma más homogénea posible,
presentando de la misma manera todo lo que tenga funciones similares,
ayudando así a que el estudiante se familiarice rápidamente con la
manipulación de la guía. Tiene un índice principal, él cual se despliega en
subíndices. Cada subíndice tiene sus propios temas, de tal manera que el
estudiante pueda desplazarse con facilidad entre los temas. Cada tema tiene
su explicación y ejercicios. Los ejercicios son programas codificados en el
lenguaje C++ indicando el objetivo de cada ejercicio.
En el Anexo 2 se muestra la Propuesta de la Guía Práctica y Básica de
Programación utilizando el Lenguaje C++. A través de la siguiente tabla se
mencionan las características mas resaltante de la guía:

Tabla 6 Características

Usabilidad El contenido de la guía contará con una diseño sencillo, que le


permita al estudiante tener en todo momento el control de los
temas propuestos, permitiéndole ir de un punto a otro con gran
facilidad, mostrando todas las ejercicios disponibles para su
ejecución y prueba.
Apariencia Es una guía sencilla, con letra clara y ordenadas, donde los
ejercicios de ejemplos están bien escritos y fácil de visualizar.
Rendimiento

Portabilidad Los ejercicios de los ejemplos pueden ser ejecutado tanto en


Windows como en linus.
Confiabilidad Los ejercicios de los ejemplos presentados en la guía serán
probados en las diferentes plataformas para su ejecución de
manera tal que el estudiante a la hora de realizar las pruebas
no tendrán problemas para su ejecución.
Tabla n° 8 Características de la propuesta Fuente: La Autora

2.2.7 Conclusiones

Como conclusión, se puede decir que en este capítulo se lograron los objetivos
del mismo, se mostraron:

 Se realizó la guía propuesta para los estudiantes de programación del


trayecto I.

CONCLUSIONES

Con la investigación realizada se llegó a las siguientes conclusiones:


 Se logró el objetivo de la investigación, que fue la Propuesta de la Guía
Práctica y Básica de Programación en el Lenguaje C/C++ que pueda
ser usado como apoyo en el proceso enseñanza-aprendizaje en la
programación.

 Se realizó la validación de la propuesta a nivel de usuario (profesores y


alumnos) y de contenido (profesores expertos en el área de contenido);
donde la calificación estuvo entre alta y medio. Por lo tanto, se puede
decir que la propuesta cumple con los objetivos instruccionales
propuestos.
RECOMENDACIONES
REFERENCIAS BIBLIOGRÁFICAS
[1] Sanchez y Almeida, F

[2] Joyanes Aguilar, Luís. “Programación en C++ Algoritmos, estructuras de


datos y Objetos”. 2a edición, McGraw Hill, España-Madrid,2006.

[3] Lezcano, M y Zenaida García Valdivia. 1998. Algunas experiencias en la


utilización de sistemas de EAC para la enseñanza de la Inteligencia Artificial”.
Revista Divulgaciones Matemáticas, volumen 6 # 2. Zulia, Venezuela.

[4] Marqués, P...”La Informática como Medio Didáctico, Software Educativo,


posibilidades e Integración Curricular”. Universidad Autónoma de Barcelona.
España. (1999).

[5] Bezanilla, A y otros.”Bases técnico-pedagógicas para la elaboración de


software educativo”. Congreso Informática Educativa 96, Universidad Nacional
de Educación a Distancia, pp. 164-167. (1996)

[6] Urbina, S. (1999).”Informática y teorías del aprendizaje”. Pixel Bit. Revista


de Medios y Comunicación, 12, 87-100.

[7] Begoña, Gros(1997). “Diseños y Programas Educativos”. Editorial Ariel


Educación. España.

[8] Alfageme, G y otros.”Análisis Didáctico de dos Conceptos Tecnológicos:


Software y Software Educativo“.Universidad de Murcia. España. (2002).

[9] Careaga, C.”Currículo Cibernético: Enfoque Evaluativo e inserción la


Informática en Educación”. Santiago de Chile. (1999).

[10] Torres, Carolina y otros. “Construcciones de ayudas didácticas para la


enseñanza de programación orientada a objetos usando Java TM 5.0”. Trabajo
Especial de Grado para optar al título de Ingeniero en sistema. Universidad El
Bosque, Facultad de Ingeniería de Sistemas, Bogota. (2006).
[11] Almeida, F y otro.” EDApplets: Una Herramienta Web para la Enseñanza
de Estructuras de datos y Técnicas Algorítmicas”. Universidad de la Laguna.
Tenerife. España. (2003).

[12] Peter Class y otros.”Tutotial de C++ o el Diario de Peter Class”. 02-07-08.


Disponible en: http://www.infor.uva.es/~jadiego/files/doc-tutorial-c++.pdf.
BIBLIOGRAFÍA

Arnold, K. y otro “The Java Programming Language”. Addison-Wesley.(2002).

Ben-Ari, M. “Constructivism in Computer Science Education”. SIGSCE


98.Atlanta, GA., p.257-261, (1998).

Bronson, Gary. “C++ para ingeniería y ciencias”. 2ª Ed., Thomsonl, 2007.

Deitel, H. y otros. “C++, How to Program”. 4th edition.(2002).

Deitel, H.y otros. “C++, How to Program, 5th edition”. (2005).

Díaz, J. “Introducción a la programación usando C++”. Universidad de Oriente,


Cuba. (2002).

Gagné, R. (1975). “Principios básicos del aprendizaje para la instrucción”.


Editorial Diana. México.

Joyanes, L. y otros. “Java 2 Manual de Programación”. Ed., McGraw-Hill, 2003.

Joyanes, L. y otros. “Fundamentos de Programación. Algoritmos, Estructuras


de datos y Objetos”. Libro de problemas, 2ª Ed., McGraw-Hill, 2003.

Murillo T. y otros. “Software Educativo. Algunos criterios para su evaluación”.


Infodidac, 18, pp 8-12. (1992).

Presuman, Roger S. “Ingeniería del Software, Un enfoque práctico”. 5ta Ed.,


McGraw-Hill, 2002.

Rodríguez G. “Consideraciones en la Evaluación de Software Educativo.


Escuela de Nutrición y Dietética. Facultad de Medicina”. Universidad Central de
Venezuela escuela de nutrición y Dietética, Facultad de Medicina de la
Universidad Central de Venezuela; P.2.(1999).

Squires, d. y otros.”Como Elegir y Utilizar Software educativo”. Editorial Morota.

Villar, M. “Guía de evaluación de software educativo”. Grupo ORIXE. Euskadi.


(1998).
ANEXO 1.

Encuesta a los Estudiantes del Trayecto I en cuanto a


Conocimiento en el Lenguaje C++.
Este instrumento de medición tiene el objetivo de contribuir en el
mejoramiento del estudiante para el análisis, construcción y diseño de
programas a través de técnicas de programación utilizando el lenguaje de
programación C++. Tu contribución respondiendo a las preguntas indicadas
posibilitará el perfeccionamiento del proceso de enseñanza-aprendizaje. Todo
cuanto pueda decir será de mucha utilidad, se garantiza el anonimato y solo se
dará un tratamiento estadístico a los criterios que proporciones.

Marque con una X en el caso que se requiera:

1.- ¿Sabes de Programación?


Si____ No____
2.- ¿Has desarrollado un programa?
Si____ No____
3.- Con que nociones cuentas acerca de la programación:
Alto_____ Medio_____ Bajo ______
4.- ¿Has desarrollado un programa en el lenguaje C++?
Si____ No____
5.- ¿Qué lenguaje de programación has utilizado para desarrollar un programa?
(marcar varias opciones)

1 C
2 C++
3 HTML5
4 Java
5 JavaScript
6 Ruby
7 Python
8 Pascal
9 Clipper
10
Ninguno
6.- ¿De estos lenguaje de programación cuales conoces ?

(marcar varias opciones)

1 C
2
C++
3 HTML5
4 Java
5 JavaScript
6 Ruby
7 Pitón
8 Pascal
9 Clipper
10 Ninguno

7.- ¿Qué medios utilizas para estudiar la programación?

(marcar varias opciones)

1 Libros
2 Internet
3 Apuntes
4 Ejercicios
5 Guías
6 Otro

Si quedó algo importante que crees necesario incluir en esta encuesta, por
favor, se aceptan sugerencias.

Gracias por su tiempo.


ANEXO 2.

Encuesta a profesores de los cursos de lenguaje C++.


Este instrumento de medición tiene el objetivo de contribuir en el
mejoramiento del estudiante para el análisis, construcción y diseño de
programas a través de técnicas de programación utilizando el lenguaje de
programación C++. Tu contribución respondiendo a las preguntas indicadas
posibilitará el perfeccionamiento del proceso de enseñanza-aprendizaje. Todo
cuanto pueda decir será de mucha utilidad, se garantiza el anonimato y solo se
dará un tratamiento estadístico a los criterios que proporciones.

Marque con una X en el caso que se requiera:

1. ¿Cree que los estudiantes de programación del trayecto I del CUC


mejorarían su nivel de conocimiento utilizando una guía de programación
práctica y básica de lenguaje C++?

Si _____ No______

2. ¿Dispone ud. de una guía para impartir sus clases de programación?

Si_____ No______
ANEXO 2

PROPUESTA DE LA GUÍA PRÁCTICA Y BÁSICA DE PROGRAMACIÓN EN


EL LENGUAJE C/C++
INTRODUCCIÓN

Esta Guía de C/C++, es una recopilación de conceptos teóricos y ejercicios


propios de la autora, tomados de Internet y de libros de programación, que
fueron actualizados y probados por la autora, utilizando para las pruebas los
compiladores de Dev-C++, Borland C ++ y Linux de manera que el
estudiante obtenga una formación completa en cuanto a programación.

Dev-C++ entorno de desarrollo para C/C++, consiste en un editor de múltiples


ventanas integrado con un compilador que nos permitirá una compilación, un
enlace y una ejecución de aplicaciones rápida y de Fácil Uso.

Borland C ++ es un C y C ++ entorno de programación es decir, un entorno de


desarrollo integrado.

La Guía está estructurada siguiendo el contenido programático de la Unidad


Curricular “Algorítmica y programación”. Unidad Curricular dictada en el
Colegio Universitario de Caracas (CUC) para el Trayecto I, Trimestres 1,2, y 3.
Compuesta por temas útiles que servirán como referencia rápida en el
aprendizaje del Lenguaje C++. Algunos de los temas a tratar en la guía son los
siguientes: Introducción Al Lenguaje C++, Tipos De Datos, Entrada y Salida
Básica, Estructuras de Control, Funciones, Arreglos, matrices y Cadenas,
Apuntadores, Estructuras, Entrada y Salida por Archivos y la Biblioteca
Estándar de C++.

¿Por qué el lenguaje C++ y no otro?, porque es el lenguaje en el cual se han


basado para crear otros lenguajes como Java o C#, porque se pueden
encontrar muchas similitudes con otros lenguajes y además porque sigue
siendo vigente, podríamos señalar que la base del sistema operativo Linux esta
creado casi al 100% con éste lenguaje. Aunque una programación avanzada no
sea el objetivo de este manual, se tiene presente el incitar a que, después de
concluir el aprendizaje de éste, se tengan los conocimientos suficientes y los
deseos de investigar y aprender por su cuenta más sobre este u otro lenguaje
de programación.
1. INTRODUCCIÓN AL LENGUAJE C/C++

HISTORIA:

La historia del lenguaje de programación C++ comienza a principios de los


años 70, con un programador de nombre Dennis Ritchie que trabajaba en los
laboratorios de AT&T Bell.

Trabajando con un lenguaje llamado BCPL inventado por Martin Richards (que
luego influyó para crear el B de Ken Thompson), Dennis deseaba un lenguaje
que le permitiese manejar el hardware de la misma manera que el ensamblador
pero con algo de programación estructurada como los lenguajes de alto nivel.
Fue entonces que creó el C que primeramente corría en computadoras PDP-7
y PDP-11 con el sistema operativo UNIX. Pero los verdaderos alcances de lo
que sería éste, se verían poco tiempo después cuando Dennis volvió a escribir
el compilador C de UNIX en el mismo C, y luego Ken Thompson (diseñador del
sistema) escribió UNIX completamente en C y ya no en ensamblador.

Al momento de que AT&T cedió (a un precio bastante bajo) el sistema operativo


a varias universidades, el auge de C comenzaba. Cuando las computadoras
personales fueron comerciales, empezaron a diseñarse varias versiones de
compiladores C, éste se convirtió en el lenguaje favorito para crear
aplicaciones.

En 1983, el Instituto Americano de Normalización (ANSI) se dio a la tarea de


estandarizar el lenguaje C, aunque esta tarea tardó 6 años en completarse, y
además con la ayuda de la Organización Internacional de Normalización (ISO),
en el año de 1989 definió el C Estándar.

A partir de éste, se dio pie para evolucionar el lenguaje de programación C. Fue


en los mismos laboratorios de AT&T Bell, que Bjarnes Stroutstrup diseñó y
desarrolló C++, buscando un lenguaje con las opciones de programación
orientada a objetos. Ahora el desarrollo del estándar de C++ acaparaba la
atención de los diseñadores. En el año 1995, se incluyeron algunas bibliotecas
de funciones al lenguaje C. Y con base en ellas, se pudo en 1998 definir el
estándar de C++.

Algunas personas podrían pensar que entonces C++ desplazó a C, y en


algunos aspectos podría ser cierto, pero también es cierto que algunas
soluciones a problemas requieren de la estructura simple de C más que la de
C++. C generalmente es usado por comodidad para escribir controladores de
dispositivos y para programas de computadoras con recursos limitados.

La base del lenguaje fue creada por programadores y para programadores, a


diferencia de otros lenguajes como Basic o Cobol que fueron creados para que
los usuarios resolvieran pequeños problemas de sus ordenadores y el
segundo para que los no programadores pudiesen entender partes del
programa.

C++ es un lenguaje de nivel medio pero no porque sea menos potente que
otro, sino porque combina la programación estructurada de los lenguajes de
alto nivel con la flexibilidad del ensamblador.

2. ESTRUCTURA DE LA GUÍA

La Guía esta estructurada siguiendo el contenido programático de la Unidad


Curricular “Algorítmica y programación” del Programa Nacional de Formación
en Informática (PNFI) del Colegio Universitario de Caracas (CUC). Esta Unidad
Curricular (ver anexo xx) tiene 14 unidades que deben ubicarse en los
trimestre 1, 2 y 3 del trayecto I, y se consideró que esta guía sólo va a
contener las unidades del trimestre 1 y 2 del trayecto I donde cada capítulo
propuesto en la guía representará un trimestre de la Unidad Curricular.

A continuación se muestra la tabla Guía vs Unidad Curricular especificando las


unidades correspondiente a cada capitulo propuesto en la guía.
Capitulo I Unidad 1: Algoritmo y Programas

Unidad 2: Estándares de Calidad en el Diseño de Algoritmos y


Construcción de Programas

Unidad 3: Datos y Entidades Primitivas

Unidad 4: Metodología para el Análisis y Planteamiento de Problemas

Unidad 5: Programación Estructurada

Unidad 6: Programación Modular

Capitulo II Unidad 7: Arreglos y Matrices

Unidad 8: Tratamiento de Cadenas de Caracteres

Unidad 9: Estructuras de Registros

Unidad 10: Archivos


Tabla N°1 Guía vs Unidad Curricular Fuente;La Autora

3. ESTRATEGIA DE LA GUÍA

La documentación de esta está guía esta dirigida a cualquier persona que


quiera iniciarse y aprender los primeros pasos de la programación y en especial
a los del PNFI que cursen la Unidad Curricular “Algorítmica y Programación”
del Trayecto I del Programa .

Esta Guía de C/C++, es una recopilación de conceptos teóricos y ejercicios


propios de la autora, tomados de Internet y de libros de programación, que
fueron actualizados y probados por la autora, utilizando para las pruebas los
compiladores de Dev-C++, Borland C ++ y Linux de manera que el
estudiante obtenga una formación completa en cuanto a programación.

Se recomienda la instalación de los compiladores antes mencionados en la


computadora y una vez instalados, realizar copia de los ejercicios para que el
estudiante los compile, los ejecute y vea los resultados obtenidos en cada
ejercicio, este método es una de las tantas maneras de aprender y el
estudiante obtener el conocimiento del funcionamiento de las instrucciones del
lenguaje C++.

4. COMPILADORES DE C/C++

El lenguaje C/C++ utiliza un programa traductor que toma como entrada un


texto escrito en un lenguaje que es nuestro caso es el programa fuente (.cpp) y
da como salida otro texto en un lenguaje, denominado objeto. Al programa
traductor se le denomina compilador.

Para trabajar con el lenguaje C/C++ se utilizan los siguientes compiladores


(más importantes):
 Borland C++ 5.5.
 Dev-C++.
 MS Visual C++ de Visual Studio 2008.
 GNU gcc/c++ 3.4.2-20040916-1 (versión MinGW para Windows).
 GNU gcc/g++ 2.95.2 para Linux.

Algunos de estos compiladores pueden conseguirse gratuitamente en la Red,


al menos para uso didáctico y personal. Otros son productos comerciales que
tienen un precio en el mercado.

En la siguiente tabla se muestra las características de los compiladores mas


importantes utilizados por el lenguaje c/c++:
Dev-C++  Entorno integrado de desarrollo IDE .
 Distribuido con licencia GNU gcc/g++.
 Editor altamente configurable.
 Aplicaciones Windows (gráficas).
 Aplicaciones de consola (modo texto),
 construcción de librerías estáticas y dinámicas (DLLs).
 La versión para Windows incluye MinGW, un conjunto de
utilidades para desarrollar aplicaciones en Windows utilizando
una interfaz POSIX (Unix/Linux).
 Es una buena forma de utilizar C++ en Windows utilizando
herramientas de código abierto.
Borland C++  Lenguaje de programación derivado de C++. Desarrollado por la
5.5 compañía Borland Software Corporation.
 Fue uno de los mejores compiladores C++, si no el mejor.
 Versión Windows para ser utilizada mediante líneas de comandos
desde el Shell del sistema (una ventana DOS).
 Gratuita su descarga desde la Web. Sin embargo esta versión
sólo incluye el compilador, no tiene ni el IDE (entorno integrado
de desarrollo), ni los componentes visuales (VCL), ni acceso a
bases de datos.
 El paquete contiene todas las herramientas para desarrollar
aplicaciones C++, incluyendo la Librería Estándar de Plantillas
(STL).
MS Visual C++  Microsoft ha publicado una versión gratuita que se puede
de Visual Studio descargar desde la Web.
2008;
 Desarrollo para aplicaciones Windows.
 Documentación necesaria para desarrollar aplicaciones
Windows.
GNU gcc/c++ Licencia: Gratis (GPL)
3.4.2-
20040916-1 Idioma: Inglés
(versión
Sistema operativo: Windows 2000, Windows XP,Windows 2003,
MinGW para
Windows) Windows Vista.

Es una colección de ficheros de cabecera y librerías que permiten

utilizar gcc y generar programas para Win32 (Windows 95, 98, ME,

2000, etc) que no necesitan librerías de ejecución externas.

GNU gcc/g++ El sistema GNU fue desarrollado para ser 100% software libre, libre
2.95.2 para en el sentido de que respeta la libertad del usuario.
Linux.
Casi todo GCC está escrito en C, aunque gran parte del front end de
Ada está escrito en Ada. El 30 de mayo de 2010 se anunció que se
comenzará a utilizar C++ en el desarrollo de GCC.
5. CAPÍTULO I

En este capitulo se hace énfasis en el análisis, construcción y diseño de


programas de manera que el estudiante adquiera una madurez en el
razonamiento de los planteamientos a los problemas para el desarrollo de sus
programas o proyectos a futuro a través del aprendizaje en cuanto a la calidad
de los diseños de los algoritmos, reconocimiento de los tipos de datos, la
aplicación de una metodología para el análisis y planteamiento de problemas,
aplicando la programación estructurada y modular.

5.1. UNIDAD 1: ALGORITMO Y PROGRAMAS

5.1.1. Concepto de Algoritmos y Programas.

Programación: proceso de analizar, diseñar, desarrollar e implantar los


programas para la solución de un problema.

Programa y Algoritmo: Conjunto finito (Inicio – Fin) de instrucciones


lógicas que una vez ejecutadas realizarán una o varias tareas para la
solución de un problema.

5.1.2 Estructura de un Programa en C++.

// La descripción General del Programa


// Todos los archivos de cabecera o librería necesaria para el
// funcionamiento del programa
#include <nombreArchivo>

// Declaración de todas las variables globales utilizadas en el


// programa
int Nombre _Variable;
char Nombre _ Variable;
float Nombre _ Variable;

// Declaración de las funciones, procedimientos o rutinas utilizadas


void Nombre _ Asignado( );
int Nombre _ Asignado( );
char Nombre _ Asignado( );
float Nombre _ Asignado( );

// Programa principal
void main( void )
{ // Empieza el bloque de la función principal
Instrucciones
} // Final del bloque de la función principal

// Implementación de las funciones, procedimientos o rutinas


// declaradas

void Nombre _ Asignado( )


{ // Breve descripción del funcionamiento del procedimiento
// Declaración de las variables locales
Instrucciones
} // Final del bloque

int Nombre _ Asignado( )


{ // Empieza el bloque
Instrucciones
} // Final del bloque

char Nombre _ Asignado( )


{ // Empieza el bloque
Instrucciones
} // Final del bloque

float Nombre _ Asignado( )


{ // Empieza el bloque
Instrucciones
} // Final del bloque
5.1.3 Características y Elementos para Construir un Algoritmo.

Características:

 El algoritmo debe ser sencillo. e indicar el orden de realización de cada


paso
 Debe ser preciso. e indicar el orden de realización de cada paso.
 Debe ser definido. Si se sigue un algoritmo dos veces, se debe obtener
el mismo resultado cada vez.

 Debe ser finito. Si se sigue un algoritmo, se debe terminar en algún


momento; o sea, debe tener un número finito de pasos.

 La definición de un algoritmo debe describir tres partes: Entrada,


Proceso y Salida.

Elementos para Construir un Algoritmo:

 Entrada: Datos necesarios que requiere el proceso para ofrecer los


resultados esperados.

 Proceso: Pasos necesarios para obtener la solución del problema o


la situación planteada.

 Salida: Resultados arrojados por el proceso como solución.

 Variables : Elementos que toman valores específicos de un tipo de


datos concreto.
 Estructuras secuenciales: Acción sigue a otra en secuencia. Las
operaciones se suceden de tal modo que la salida de una es la entrada
de la siguiente y así sucesivamente hasta el fin del proceso. La
asignación se puede clasificar de la siguiente forma:
◦ Simples: Consiste en pasar un valor constante a una variable (a =
15;)
◦ Contador: Consiste en usarla como un verificador del número de
veces que se realiza un proceso (a = a + 1;)
◦ Acumulador: Consiste en usarla como un sumador en un proceso (a
= a + b;)
◦ De trabajo: Donde puede recibir el resultado de una operación
matemática que involucre muchas variables (a = c + b*2/4;).

5.1.4 Formas de representar un algoritmo: Lenguaje Natural,


Pseudocódigo y Diagrama de Flujo.

Lenguaje Natural: Es aquél que describe los pasos a seguir en un algoritmo


utilizando un vocabulario cotidiano.

Pseudocódigo: Es una descripción de alto nivel de un algoritmo que emplea


una mezcla de lenguaje natural con algunas convenciones sintácticas propias
de lenguajes de programación, como asignaciones, ciclos y condicionales,
aunque no está regido por ningún estándar facilitando el entendimiento de un
algoritmo.

Diagrama de Flujo:

 Son descripciones gráficas de algoritmos;


 Usan símbolos conectados con flechas para indicar la secuencia de
instrucciones.

 Los diagramas de flujo son usados para representar algoritmos


pequeños.

 Por su facilidad de lectura son usados como introducción a los


algoritmos, descripción de un lenguaje y descripción de procesos a
personas ajenas a la computación.
5.1.5 Traza de un algoritmo (corrida en frío.)

La traza de un algoritmo o programa es la ejecución manual de una secuencia


de acciones en las instrucciones cuando se ejecutan, así como, el valor de las
variables definidas en el algoritmo después de cada ejecución de las
instrucciones. Veamos un ejemplo mediante un programa. Su función principal
es comprobar que éste funcione correctamente o para realizar la etapa de
depuración en la que se intenta corregir errores, simplificar el algoritmo al
máximo e incrementar su eficacia y velocidad.

5.2. UNIDAD 2: ESTÁNDARES DE CALIDAD EN EL DISEÑO DE ALGORITMOS


Y CONSTRUCCIÓN DE PROGRAMAS

5.2.1. Fases de resolución de un problema

El diseño de algoritmos y la construcción de programas debe de seguir los


pasos descriptos a continuación para asegurar un programa final de calidad y
eficiencia, según la petición del usuario.

1. Análisis del problema.

2. Diseño del algoritmo.

3. Codificación.

4. Compilación y ejecución.

5. Verificación.

6. Depuración.
7. Mantenimiento.

8. Documentación.

1. Análisis. El problema se analiza teniendo presente la especificación de los


requisitos dados por el cliente de la empresa o por la persona que se encarga
del programa.

2. Diseño. Una vez analizado el problema, se diseña una solución que


conduzca a un algoritmo que resuelva el problema utilizando los métodos para
representar un algoritmo.

3. Codificación (implementación). La solución se escribe en la sintaxis del


lenguaje de alto nivel (por ejemplo, C++) y se obtiene un programa.

4. Compilación, Ejecución y Verificación. El programa se ejecuta, se


comprueba rigurosamente y se eliminan todos los errores que puedan
aparecer.

5. Depuración y Mantenimiento. El programa se actualiza y modifica cada vez


que sea necesario, de modo que se cumplan todas las necesidades de cambio
de los usuarios.

6. Documentación. Escritura de las diferentes fases del ciclo de vida del


software, específicamente, el análisis, diseño y codificación, unidos a manuales
de usuario y de referencia, así como normas para el mantenimiento.

5.3. UNIDAD 3: DATOS Y ENTIDADES PRIMITIVAS

5.3.1 Variables: Clasificación de variables según sus contenidos (numéricos,


lógicos y alfanuméricos) y su uso (de trabajo, contador y acumulador).
5.3.2 Constantes: valor que no puede ser alterado durante la ejecución de un
programa.

5.3.3 Operadores: El lenguaje C++ soporta diferentes tipos de operadores:


aritméticos, lógicos y relacionales. Las siguientes tablas muestran los
operadores aritméticos, relacionales y lógicos tomado de libro [1 ].

OPERADOR SÍMBOLO EJEMPLO SIGNIFICADO


Suma + a+ b a más b
Resta - a- b a menos b
Multiplicación * a* b a por b
División / a/ b a dividido entre b
Residuo % a%b a residuo de b
Signo (negativo) - -a a negativo
Tabla N°2 Operadores Aritméticos

OPERADOR SÍMBOLO EJEMPLO SIGNIFICADO


Igual == x == y x es igual a y
Diferente != x != y x es diferente de y
Mayor que > x>y x es mayor que y
Mayor o igual que >= x >= y x es mayor o igual que y
Menor que < x<y x es menor que y
Menor o igual que <= x <= y x es menor o igual que y
Tabla N°3 Operadores Relacionales

OPERADOR SÍMBOLO EJEMPLO SIGNIFICADO


a es mayor que b y c es
Y (AND) && (a>b) && (c<d)
menor que d
a es mayor que b o c es
O (OR) || (a>b) || (c<d)
menor que d
NEGACION (NOT) ! !(a>b) a no es mayor que b
Tabla N°4 Operadores Lógicos
5.3.4 Expresión: Combinación de constantes, variables o funciones, que es
interpretada de acuerdo a las normas particulares de precedencia y asociación
para un lenguaje de programación en particular.

 Expresión aritmética: 3+2, x+1,...

 Expresión lógica: x OR y, NOT x,...

 Expresión con predicados: P(a) AND Q(b),...

5.3.5 Tipos de Datos en C/C++.

Conjunto de valores que puede tomar durante una variables en el


programa. A continuación se muestra la tabla Tipos de datos tomada del
libro de programación [1].

TIPO DATO Tipo ESPACIO RANGO


MEMORIA

unsigned char Caracter 8 bits 0 a 255

char Caracter 8 bits -128 a 127

short int Entero 16 bits -32,768 a 32,767

unsigned int Entero 32 bits 0 a 4,294,967,295

int Entero 32 bits -2,147,483,648 a 2,147,483,647

unsigned long Entero 32 bits 0 a 4,294,967,295

enum 16 bits -2,147,483,648 a 2,147,483,647

long Decimal 32 bits -2,147,483,648 a 2,147,483,647


float Decimal 32 bits 3.4 x 10-38 a 3.4 x 10+38(6 dec)

double Decimal 64 bits 1.7 x 10-308 a 1.7*10+308(15 dec)

long double Decimal 80 bits 3.4 x 10-4932 a 1.1 x 10+4932

void Nulo sin valor

Tabla N° 5 Tipos de Datos

5.5. UNIDAD 5: PROGRAMACIÓN ESTRUCTURADA

Existe un teorema debido a [C.Böhm, G.Jacopini, Comm. ACM vol.9, nº5, 366-
371,1966] (Teorema Fundamental de la programación estructurada) que
establece lo siguiente:
“Todo programa propio se puede escribir utilizando únicamente las estructuras
de control secuencial, condicional e iterativa”
Un programa propio es aquel que:

 Tiene un único punto de entrada y un único punto de salida.


 Existen caminos desde la entrada hasta la salida que pasan por todas
las partes del programa.
 Todas las instrucciones son ejecutables y no existen bucles sin fin.
Este teorema implica que la utilización de la sentencia GOTO es totalmente
innecesaria,
lo que permite eliminar esta sentencia. Un programa escrito con GOTO es más
difícil de
entender que un programa escrito con las estructuras mencionadas.

5.5.1 Estructuras de control.

Una estructura de control es simplemente un patrón para controlar el flujo de un


módulo de programa. Las tres estructuras de control fundamentales de un
lenguaje de programación estructurado son: Entrada/salida, selección o
decisión e iteración.
 Entrada/salida
Es una serie de instrucciones secuenciales paso a paso.
 Selección o decisión
Permiten modificar el flujo del programa, dependiendo de una o más
condiciones. Se destina a la toma de decisiones.

 Iteración
Es una estructura de control de ciclo.

5.5.1.1 Entrada / Salida.

La ENTRADA y SALIDA BÁSICA para un programa: en general la obtención


(entrada) de datos de entrada a los programas se conoce como Lectura (CIN)
para el lenguaje C++ y para el lenguaje C (SCAN) y la generación (salida) de
datos desde los programas se denomina Escritura (COUT) para el lenguaje
C++ y para el lenguaje C (PRINTF).
La mayoría de los programas en C++ incluyen el archivo de encabezado
<iostream.h> para C++ y para C <stdio.h>, el cual contiene la información
básica requerida para todas las operaciones de entrada y salida (E/S) de flujo
(Un flujo es simplemente una secuencia de bytes. En las operaciones de
entrada, los bytes fluyen desde un dispositivo).

INSTRUCCIÓN COUT.

Cout es un objeto de la clase ostream, y se dice que está enlazado al


dispositivo de salida estándar que normalmente es la pantalla. El operador de
inserción de flujo, como se utiliza en la siguiente instrucción, causa que al valor
de la variable entera calificación se le dé salida desde la memoria hacia el
dispositivo de salida estándar:

cout << calificación;


Sintaxis general para la instrucción cout:

cout << elemento1 << elemento2 << elemento 3 << ... << elementoN;

Ejemplo 2.

// Ejemplo2.cpp, muestra la salida de una cadena


#include <iostream.h> //Para cout
void main( )
{
cout << "¡Bienvenidos al COLEGIO UNIVERSITARIO DE CARACAS (CUC)!";
}//Fin de main( )

 Se observa que el programa Ejemplo2 cumple la estructura básica de un


programa en C++, siendo un ejemplo simple que no utiliza variables
globales ni procedimientos, por lo tanto, no hace falta colocar estas
instrucciones en este programa, siendo estas instrucciones opcionales.
 Se incluye la librería iostream.h para poder utilizar las instrucciones CIN
y COUT, de no colocarlo el programa dará un código de error.
 Dentro del void main( ), conocido como el programa principal que es
donde empieza la ejecución del programa, este viene encerrado entre
llaves ({ }).
 Se transmite el mensaje "¡Bienvenidos al COLEGIO UNIVERSITARIO
DE CARACAS (CUC)!" por pantalla al usuario utilizando la instrucción
cout.

A continuación se muestran los siguientes ejemplos:

Ejemplo 3.

// Ejemplo3.cpp, muestra la salida de una cadena


#include <iostream.h>
void main( void )
{
cout << "¡Bienvenidos a la ";
cout << " COLEGIO UNIVERSITARIO DE CARACAS (CUC)! ";
}//Fin de main( )
Ejemplo 4.

// Ejemplo4.cpp, ilustra el uso del operador de inserción << utilizado en forma de cascada.
#include <iostream.h>
void main( void )
{
cout << "15 más 27 es: " << ( 15 + 27 ) << endl;
}//Fin de main( )

Ejemplo 5.
// Ejemplo5.cpp, muestra como cout visualiza cadena de caracteres y números.
#include <iostream.h>
void main( void )
{
cout << "cout le permite visualizar cadenas de caracteres, números enteros\n";
cout << "y de punto flotante.\n\n";
cout << 1001;
cout << '\n';
cout << 1.2345;
} // Fin de main( )

Ejemplo 6.

/* Muestra como se puede utilizar un solo cout para escribir cadenas y números de diferentes
tipos.*/
#include <iostream.h>
void main( void )
{
cout << "cout visualiza cadenas " << "\n\n" << 1001 << '\n' << 1.2345;
} // Fin de main( )

INSTRUCCIÓN CIN.
Cin es un objeto de la clase istream, enlazado o conectado al dispositivo de
entrada estándar que normalmente es el teclado. El operador de Extracción de
flujo, como se utiliza en la siguiente instrucción, causa que un valor para la
variable entera calificación (suponiendo que calificación ha sido declarada
como int) se reciba desde CIN hacia la memoria:

cin >> calificación;

Sintaxis general para CIN:


cin >> variable;

El siguiente programa: Ejemplo7.cpp, calcula la suma de dos enteros


introducidos desde el teclado mediante la instrucción CIN.

Ejemplo 7.
// calcula la suma de dos enteros introducidos desde el teclado
#include <iostream.h> //Para cin y cout
void main( )
{
int x, y;
cout << “Introduzca dos números enteros: ”;
cin >> x >> y;
cout << “La suma de ” << x << “ y ” << y << “ es: ”
<< (x + y) << endl;
}//Fin de main( )

 Se observa que el programa Ejemplo7.cpp cumple la estructura básica


de un programa en C++, siendo un ejemplo simple que no utiliza
variables globales ni procedimientos, por lo tanto no hace falta colocar
estas instrucciones en este programa, siendo estas instrucciones
opcionales.
 Se incluye la librería iostream.h para poder utilizar las instrucciones CIN
y COUT, de no colocarlo el programa dará un código de error.
 Dentro del void main( ), conocido como el programa principal que es
donde empieza la ejecución del programa, este viene encerrado entre
llaves ({ }).
 Se declaran x, y como variables locales de tipo enteras.
 Se transmite el mensaje “Introduzca dos números enteros:” por
pantalla al usuario, indicándole que él debe escribir los valores para x e
y.
 A través de la instrucción cin capturamos los valores x e y dados por el
usuario.
 Se le muestra al usuario el resultado obtenido de la suma de los
números dados.

Ejemplo 8.
// Ejemplo8.cpp, asigna el número tecleado a la variable numero
#include <iostream.h>
void main(void)
{
int numero ; // El número leído desde el teclado
cout << "Digite su número ENTERO favorito y oprima INTRO: ";
cin >> numero;
cout << "Su número entero favorito es: " << numero << endl;
} //Fin de main()

Ejemplo 9.

// Ejemplo9.cpp, muestra el uso de la operación cin.


#include <iostream.h>
void main(void)
{
// Se definen las variables
int registro1 = 0;
float registro2 = 0.0;
// Pide y lee los datos del usuario
cout << "Escriba un número ENTERO : ";
cin >> registro1;
cout << "Escriba un número DECIMAL : ";
cin >> registro2;
cout << endl;
cout << "Los números escritos son :" << endl;
cout << registro1 << endl;
cout << registro2 << endl;
} //Fin de main()

Ejemplo 10.
// Ejemplo10.cpp, ilustra la lectura de datos de la clase caracter.
#include <iostream.h>
void main(void)
{
// Define las variables ingresadas y las inicializa con espacio en blanco.
char calificacion1 = ' ';
char calificacion2 = ' ';
char calificacion3 = ' ';
// Lectura/escritura de los datos del usuario
cout << "Introduzca una calificación (R,D,C,B,A): ";
cin >> calificacion1;
cout << "La calificación introducida fue: " << calificacion1 << endl << endl;
cout << "Introduzca una calificación (R,D,C,B,A): ";
cin >> calificacion2;
cout << "La calificación introducida fue: " << calificacion2 << endl << endl;
cout << "Introduzca una calificación (R,D,C,B,A): ";
cin >> calificacion3;
cout << "La calificación introducida fué: " << calificacion3 << endl << endl;
} //Fin de main()

5.5.2 Estructuras de decisión.

Son instrucciones del lenguaje que permiten al programa seleccionar el


resultado de una decisión mediante una expresión lógica obteniendo solo una
respuesta verdadera o falsa mediante las instrucciones IF y Swicht.

INSTRUCCIÓN IF

La instrucción IF es una instrucción básica que se aplica en casi todos los


desarrollos de los programas para toma de decisión de una interrogante, su
resultado siempre debe ser verdadero o falso.

Se puede notar que la expresión lógica debe ir encerrada entre paréntesis y si


el bloque de instrucciones sólo contiene una instrucción no hace falta colocar
las llaves. En la siguiente tabla de sintaxis de la instrucción, se muestran
diferentes ejemplos aplicados a los programas.

If (expresión de Lógica) If (expresión de Lógica)


{ {
Bloque de Instrucciones; Bloque de Instrucciones 1;
} // Fin de if }
Else
El bloque de instrucciones se ejecuta {
solamente cuando la expresión lógica es Bloque de Instrucciones 2;
verdadera. }// Fin de if

El bloque de instrucciones 1 se ejecuta


solamente cuando la expresión lógica es
verdadera y cuando es falsa se ejecuta el
bloque de instrucciones 2.

If (expresión de Lógica) If (expresión de Lógica && expresión


{ If (expresión de Lógica) Lógica)
{ Bloque de Instrucciones; {
} Bloque de Instrucciones 1;
else }
{ Bloque de Instrucciones; Else
}// Fin de if {
} Bloque de Instrucciones 2;
else }// Fin de if
{ Bloque de Instrucciones;
}// Fin de if Las expresiones lógicas también pueden
ser construidas utilizando los operadores
Nido de IF: podemos colocar varias lógicos.
instrucciones if anidadas con el fin de
realizar expresiones lógicas complejas.
Tabla N° 6 Tabla de Sintaxis Fuente: La Autora

Ejemplo 11.
En los siguientes ejemplos se muestra el funcionamiento de la instrucción IF

x = 2; if (x)
y = 3; cout << “El valor de x es diferente de cero.
if (x < y) ” << endl;
{
cout << “x = ” << x << endl;
cout << “y = ” << y << endl;
} // Fin del if

if (x < y) if ((x < y) && (y != 10))


{ {
temp = y; suma = x + y;
y = x; cout << “x = ” << x << endl;
x = temp; cout << “y = ” << y << endl;
cout << “x = ” << x << endl; cout << “Suma = ” << suma << endl;
cout << “y = ” << y << endl; } // Fin del if
} // Fin del if

if ((x > y) || (x – y < 0)) if (( x > y) || (x * y < 0))


{ {
++x; ++x;
--y; --y;
cout << “x = ” << x << endl; } // Fin del if
cout << “y = ” << y << endl; cout << “x = ” << x << endl;
} // Fin del if cout << “y = ” << y << endl;

if ((x % y) == 10)
cout << “x es divisible entre y.” << endl;
cout << “x no es divisible entre y.” <<
endl;

Tabla N° 6 Tabla de Sintaxis Fuente: La Autora

Ejemplo 12.

/* Comparar el valor de la variable calificación. Si calificación es mayor o


igual a 90, el programa visualiza un mensaje, en caso contrario simplemente
termina.*/

#include <iostream.h>
void main( )
{
int calificacion;
cout << “ Ingrese una calificación “<< endl;
cin>>calificación;
if (calificacion >= 90)
cout << "¡Felicidades, obtuviste una A!" << endl;
} // Fin de main()

Ejemplo 13.

/* Programa para visualizar mediante la instrucción if utilizando igualdad (==)


y diferente a (!=) */

#include <iostream.h>
void main ()
{
int edad = 21;
if (edad == 21)
cout << "La edad del usuario es de 21 años" << endl;
if (edad != 21)
cout << "La edad del usuario no es de 21 años" << endl;
} // Fin de main()

Ejemplo 14.

/* El siguiente programa: IFCIN.CPP, solicita un número de punto flotante. En


caso de ser distinto de cero, calcula el recíproco del mismo. */
#include <iostream.h>
void main( )
{
double x;
cout << "Introduzca un número distinto de cero: ";
cin >> x;
if (x != 0)
cout << "El recíproco de " << x<< " es " << (1 / x) << endl;
} // Fin de main()

Ejemplo 15.
/* Programa que utiliza un enunciado compuesto tanto para if como para else.
*/
#include <iostream.h>
void main( )
{
int calificacion;
cout << “ Ingrese una calificación “<< endl;
cin>>calificación;
if (calificacion >= 90)
{
cout << "¡Felicidades, obtuviste una A!" << endl;
cout << "Tu calificación fué de: " << calificacion << endl;
} //Fin de if
else
{
cout << "¡Tiene que trabajar duro!" << endl;
cout << "Perdiste: " << (100 - calificacion) << " puntos " << endl;
} //Fin de else
} //Fin de main()

Ejemplo 16.

/* Programa para visualizar el uso de los if anidados.

#include <iostream.h>
void main( )
{
//Definición de variable.
float temperatura = 0.0;
cout << "Este programa calculará una temperatura para ver si"<<endl<<
"produce hielo, agua o vapor." << endl << endl;
// Obtiene la temperatura dada por el usuario.
cout << "Escriba una temperatura en grados Celsius: ";
cin >> temperatura;
if (temperatura > 0)
{
if (temperatura >= 100)
cout << "VAPOR" << endl;
else
cout << "AGUA" << endl;
}
else
cout << "HIELO" << endl;
} // Fin de main()

INSTRUCCIÓN SWICHT

La instrucción switch() es una instrucción de decisión múltiple, donde el


compilador busca el valor en una variable contra una lista de casos (case),
cuando encuentra el valor de igualdad ejecuta el bloque de instrucciones
asociados a la lista, si no coincide con ningún caso entonces ejecuta un bloque
de instrucciones asociados a un default, aunque este ultimo es opcional.

SINTAXIS

switch (expresion)

case constante 1:

{ Bloque de Instrucciones;

Break;

case constante 2:

{ Bloque de Instrucciones;

Break;

case constante n:

{ Bloque de Instrucciones;

Break;

}
default :

{ Bloque de instrucciones;

}// fin de instrucción de switch

 break es una instrucción de salto usada para interrumpir (romper) la ejecución normal de

un bucle, es decir, la instrucción break finaliza (termina) la ejecución de un bucle y, por


tanto, el control del programa se transfiere (salta) a la primera instrucción después del
bucle y por esa razón se usa la instrucción, porque una vez que encuentra el caso, ejecuta
el bloque de instrucciones y salta al fin de la instrucción, sin tener que evaluar los otros
casos.
 Si la constante es de tipo char, debe ir encerrada entre apóstrofes.

Ejemplo 17.

/* Programa para visualizar el funcionamiento de la instrucción. */


#include <iostream.h>
void main( )
{
char c;
cout << "Introduzca un carácter: ";
cin >> c;
switch (c)
{
case 'A':
case 'B':
case 'C':
case 'D':
cout << "Introdujo una letra mayúscula" << endl;
break;
case 'a':
case 'b':
case 'c':
case 'd':
cout << "Introdujo una letra minúscula" << endl;
break;
case '0':
case '1':
case '2':
case '3':
cout << "Introduje un dígito" << endl;
break;
default:
cout << "Introdujo un carácter no alfanumérico" << endl;
break;
} //Fin de switch
} //Fin de main()

Ejemplo 18.

/* Programa que ejecuta un menú. */


#include <iostream.h>
#include <ctype.h> // Para utilizar la instrucción toupper()
#include <stdlib.h>
void main( )
{
char letra;
cout << "[A] Ejecuta el comando DIR" << endl;
cout << "[B] Ejecuta el comando CHKDSK" << endl;
cout << "[C] Ejecuta el comando DATE" << endl;
cout << "[S] Salir" << endl;
cout << "Debe seleccionar una opción: ";

cin >> letra;

letra = toupper(letra); // convierte un Tipo de dato carácter a mayúsculas


switch (letra)
{
case 'A':
{
system("DIR");
break;
}
case 'B':
{
system("CHKDSK ");
break;
}
case 'C':
{
system("DATE ");
break;
}
default: cout << “ Opcion Invalida”;
}// fin instrucción switch

}// fin del programa

5.5.3 Estructuras de control iterativas.

Las estructuras de control iterativas o de repetición, inician o repiten un bloque


de instrucciones si se cumple una condición o mientras se cumple una
condición. Entre ellas tenemos las instrucciones FOR, DO – WHILE Y DO
WHILE.

INSTRUCCIÓN FOR

La instrucción que se usa para repetir una secuencia de instrucciones, sobre


todo cuando se conoce la cantidad exacta de veces que se quiere que se
ejecute una instrucción simple o compuesta.

SINTAXIS

for (inicialización; condición; incremento)

Bloque de Instrucción(es);

};

Ejemplo 19.

/* Programa que utiliza el ciclo for para visualizar los valores del 1 al 100 en su
pantalla. */
#include <iostream.h>
void main( )
{
int contador;
for (contador = 1; contador <= 100; contador++)
cout << contador << ' ';
} // Fin de main()

Ejemplo 20.

/*Programa que despliega un mensaje preguntando por un número que indica


cuando debe terminar el ciclo. El programa muestra los números entre uno y
el valor tecleado. */

#include <iostream.h>
void main( )
{
int contador;
int valorFinal;
cout << "Indique el numero de repeticiones que desea ejecutar: ";
cin >> valorFinal;
for(contador = 1; contador <= valorFinal; contador++)
cout << contador << ' ';
} //Fin de main()

Ejemplo 21.

/* Programa para desplegar los números del 1 al 100 y al mismo tiempo


acumula el valor de los números mostrados. */

#include <iostream.h>
void main( )
{
int contador;
int total = 0;
for(contador = 1; contador <= 100; contador++)
{
cout << "Sumar " << contador << " a " << total;
total = total + contador;
cout << " da un gran total de " << total << endl;
}//Fin del for
} //Fin del main()

INSTRUCCIÓN WHILE

En este ciclo el bloque de instrucciones se ejecuta mientras una condición


permanezca como verdadera y en el momento en que la condición se convierte
en falsa el ciclo termina.

SINTAXIS

while (expresión de verificación)


{
enunciado 1;
enunciado 2;
....................
enunciado n;
} // Fin de while

Ejemplo 22.

/* El programa muestra las cuatro partes de un ciclo while. */

#include <iostream.h>
void main( )
{
int contador = 1; // Inicializa la variable de control
while (contador <= 100) // Prueba la condición
{
cout << contador << ' '; // Ejecuta los enunciados
contador++; // Modifica la variable de control
} // Fin de while
} // Fin de main()

Ejemplo 23.
/* El programa ejecuta un ciclo while, para leer caracteres desde el teclado
hasta que teclee S o N. */
#include <iostream.h>
void main( )
{
int hecho = 0; // Se pone en verdadero cuando se encuentra S o N
char letra;
while (!hecho)
{
cout << "\n Escriba S o N y oprima Enter para continuar: ";
cin >> letra;
if ((letra == 'S') || (letra == 's'))
hecho = 1;
else
if ((letra == 'N') || (letra == 'n'))
hecho = 1;
else
cout << '\a'; // Suena la campana para carácter inválido
} // Fin de while
cout << "La letra que tecleó fué: " << letra << endl;
} // Fin de main()

Ejemplo 24.

/* El programa, calcula la suma y el promedio de un rango de enteros usando


un bucle while. */

#include <iostream.h>
void main()
{
int contador = 0; // Variable para determinar el número de enteros sumados
double suma = 0.0; // Acumulador con la suma de todos los enteros del rango
int primero, ultimo, temporal; // Variable inicial y final del rango.
// temporal es una variable auxiliar, para intercambiar si es necesario los valores
// entre primero y ultimo.
cout << "Introduzca el primer entero: ";
cin >> primero;
cout << "Introduzca el segundo entero: ";
cin >> ultimo;
if (primero > ultimo)
{
temporal = primero;
primero = ultimo;
ultimo = temporal;
} // Fin del if
cout << "La suma de los enteros desde " << primero << " hasta " << ultimo << ": ";
while (primero <= ultimo)
{
contador++;
suma += (double) primero++;
} // Fin del while
cout << suma << endl;
cout << "El promedio es de: " << suma / contador << endl;
} // Fin del main()

INSTRUCCIÓN DO WHILE

Su ejecución es similar al ciclo WHILE y su diferencia básica, es que la prueba


de condición es hecha al finalizar el ciclo, es decir las instrucciones se ejecutan
cuando menos una vez porque primero ejecuta las instrucciones y al final
evalúa la condición;

SINTAXIS

do
{
enunciado 1;
enunciado 2;
....................
enunciado n;
} while (expresión de verificación);

Ejemplo 25.

/* El programa muestra las cuatro partes de un ciclo while. */

#include <iostream.h>
void main( )
{
int contador = 1; // Inicializa la variable de control
do
{
cout << contador << ' '; // Ejecuta los enunciados
contador++; // Modifica la variable de control
} while (contador >= 100) // Prueba la condición
} // Fin de main()

Ejemplo 26.

/* El programa ejecuta un ciclo while, para leer caracteres desde el teclado


hasta que teclee S o N. */

#include <iostream.h>
void main( )
{
int hecho = 0; // Se pone en verdadero cuando se encuentra S o N
char letra;
do
{
cout << "\n Escriba S o N y oprima Enter para continuar: ";
cin >> letra;
if ((letra == 'S') || (letra == 's'))
hecho = 1;
else
if ((letra == 'N') || (letra == 'n'))
hecho = 1;
else
cout << '\a'; // Suena la campana para carácter inválido
} while (hecho);
cout << "La letra que tecleó fué: " << letra << endl;
} // Fin de main()

Ejemplo 27.

/* El programa, calcula la suma y el promedio de un rango de enteros usando


un bucle while. */

#include <iostream.h>
void main()
{
int contador = 0; // Variable para determinar el número de enteros sumados
double suma = 0.0; // Acumulador con la suma de todos los enteros del rango
int primero, ultimo, temporal; // Variable inicial y final del rango.
// temporal es una variable auxiliar, para intercambiar si es necesario los valores
// entre primero y ultimo.
cout << "Introduzca el primer entero: ";
cin >> primero;
cout << "Introduzca el segundo entero: ";
cin >> ultimo;
if (primero > ultimo)
{
temporal = primero;
primero = ultimo;
ultimo = temporal;
} // Fin del if
cout << "La suma de los enteros desde " << primero << " hasta " << ultimo << ": ";
do
{
contador++;
suma += (double) primero++;
} while (primero >= ultimo)
cout << suma << endl;
cout << "El promedio es de: " << suma / contador << endl;
} // Fin del main()

5.6 UNIDAD 6: PROGRAMACIÓN MODULAR

5.6.1 Funciones y procedimientos.

Cuando los programas se vuelven más complejos, los programadores


descomponen el programa en pequeños subprogramas llamados funciones o
procedimientos. Cada función o procedimiento debe realizar una tarea
específica. Cuando el programa requiere de la tarea, llama a la función o al
procedimiento, proporcionándole toda la información que requiera para llevar
a cabo la tarea.

SINTAXIS
TipoRetorno nombreFuncion (listaParametros)
{
declaración Variables;
Bloque de Instrucciones;
return ;

Donde:

TipoRetorno: Especifica el tipo de dato devuelto (de retorno) por la


función.
 El TipoRetorno es opcional. Si lo omitimos la función por defecto
devuelve un entero.
 El tipo de dato devuelto debe ser uno de los tipo simples de C++, tales
como int, char o float. Ejemplo:

 int max (int x, int y): devuelve un tipo int

 double media (double x1, double x2): devuelve un tipo double

 float func0 () {…}: devuelve un float

 Se puede utilizar el tipo void, que se considera como un tipo de dato


especial.

 Muchas funciones no devuelven resultados. La razón es que se utilizan


como subrutinas para realizar una tarea concreta.

 Algunas declaraciones de funciones que devuelven distintos tipos de


resultados como: int calculo: kilometraje (int litros, int kilometros); En
este caso el resultado de la función Kilometraje es asignado a la variable
calculo.

NombreFuncion: Nombre asignado a la función o procedimiento.


ListaParametros: Es una lista de variables, separadas por comas, que
conforman los datos que se pasan a la función. La listaParametros es
opcional.
Return: Valor devuelto por una función y se devuelve mediante la sentencia:

return <expresión> ;

 C++ comprueba la compatibilidad de tipos, (no se puede devolver un


valor de tipo int, si el tipo de retorno es de tipo struct).

 Una vez que se ejecuta ésta sentencia, termina la ejecución de la


función.

 Una función puede tener cualquier número de sentencias return, pero al


menos debe haber una. Cuando se ejecuta return se sale de la función.

 El valor devuelto puede ser: una constante, variable o una expresión.

5.6.2 Variables Locales y Globales.

Variables Locales: es aquella cuyo ámbito se restringe a la función que la


ha declarado se dice entonces que la variable es local a esa función.
Implicando que esa variable sólo va a poder ser manipulada en esa
función, y no se podrá hacer referencia fuera de esa función. Cualquier
variable que se defina dentro de las llaves del cuerpo de una función se
interpreta como una variable local a esa función.

Variables Globales: Es aquella que se define fuera del cuerpo de cualquier


función, normalmente al principio del programa, después de la definición
de los archivos de biblioteca o cabeceras (#include), de la definición de
constantes simbólicas y antes de cualquier función. El ámbito de una
variable global son todas las funciones que componen el programa,
cualquier función puede acceder a dichas variables para leer y escribir
en ellas. Es decir, se puede hacer referencia a su dirección de memoria
en cualquier parte del programa.

5.6.3 Llamada de una Función y Pase de Parámetros.


Pase de Parámetros:

Existen dos formas de enviar parámetros a una función:

Por Valor:

Cualquier cambio que se realice dentro de la función con la lista de parámetros


enviada, NO afectará al valor original de las variables utilizadas en la llamada.
No es posible enviar por valor arreglos, se debe realizar por referencia.

Ejemplo 28.

/* Ejemplo utilizando pase de parámetros por valor */

#include <iostream.h>
void Ejemplo(int, float);
int main()
{
int pase1=22;
float pase2=33.3;
cout << "Antes de llamar a la función Ejemplo " << endl << " La variable
pase1 tiene el valor de:" << pase1 << endl << " La variable pase2 tiene el
valor de:" << pase2 << endl;
Ejemplo(pase1, pase2);
cout << "Después de volver de la función Ejemplo " << endl << " La variable
pase1 tiene el valor de:" << pase1 << endl << " La variable pase2 tiene el
valor de:" << pase2 << endl;
return 0;
}

void Ejemplo(int p, float q)


{
cout << "En la función Ejemplo " << endl << " La variable p tiene el valor
de:" << p << endl << " La variable q tiene el valor de:" << q << endl;
p = 7777;
q = 12345.67;
cout << "Modificando las variables p y q en la función Ejemplo " << endl <<
" La variable p tiene el valor de:" << p << endl << " La variable q tiene el valor de:"
<< q << endl;
return;
}

Se puede observar que los cambios efectuados en los parámetros formales p


y q (que son variables locales de la función Ejemplo()) no afectan a los
valores de los parámetros reales pase1 y pase 2, que son variables locales de
la función main(). Para ser exactos el parámetro entero pase1tiene el valor 22
y el parámetro real pase2 tiene el valor 33.3. Al efectuar la llamada a la
función, es como si se ejecutase el código siguiente:

p = pase1;

q = pase2;

donde p toma el valor 22 y q el valor 33.3.

Dentro de la función se ejecuta el código:

p = 7777;
q = 12345.67;

Según se comprueba mediante la sentencia cout que contiene la función


Ejemplo(). Pero al volver a la función main() y escribir de nuevo los valores
de las variables locales de main(), se observa que no han cambiado los
valores de pase1 y pase2. Se puede observar que el paso de parámetros está
construido de tal manera que la información enviada es unidireccional: la
información pasa de la función que hace la llamada a la función que recibe la
llamada pero no en el sentido inverso. Esto se denomina paso de parámetros
por valor.

Por referencia:
Cuando se envía la lista de parámetros, lo que hacemos es enviar a la función
la dirección de memoria donde se encuentra la variable o dato. Cualquier
modificación SI afectará a las variables utilizadas en la llamada.

Ejemplo 29.

/* Ejemplo utilizando pase de parámetros por valor */

#include <iostream.h>
void Ejemplo(int *, float *);

int main()
{
int pase1=22;
float pase2=33.3;
cout << "Antes de llamar a la función Ejemplo " << endl << " La variable
pase1 tiene el valor de:" << pase1 << endl << " La variable pase2 tiene el
valor de:" << pase2 << endl;
Ejemplo(&pase1, &pase2);
cout << "Después de volver de la función Ejemplo " << endl << " La variable
pase1 tiene el valor de:" << pase1 << endl << " La variable pase2 tiene el
valor de:" << pase2 << endl;
return 0;
}

void Ejemplo(int *p, float *q)


{
cout << "En la función Ejemplo " << endl << " La variable p tiene el valor
de:" << p << endl << " La variable q tiene el valor de:" << q << endl;
p = 7777;
q = 12345.67;
cout << "Modificando las variables p y q en la función Ejemplo " << endl <<
" La variable p tiene el valor de:" << p << endl << " La variable q tiene el valor de:"
<< q << endl;
return;
}

Como se puede observar, se han modificado los valores de las variables p y q


a través de un puntero( * ). Esto puede aplicarse al pasede parámetros: si en
lugar de pasar el valor de un parámetro real se pasa la dirección del parámetro
real en cuestión, entonces será posible modificar el valor del parámetro real.
(anteponiendo un asterisco al puntero) desde el interior de la función.

El programa del ejemplo 29 tiene un comportamiento sutilmente distinto del


programa del ejemplo 28. Al hacer la llamada a la función, se evalúan los
parámetros &pase1 y &pase2, respectivamente. Estos valores son las
direcciones de pase1 y pase2 y es como si se ejecutará se el siguiente código:

p = &pase1;
q = &pase2;

De tal manera que p pasa a contener la dirección de pase1 y q pasa a


contener la dirección de pase2 y en resumidas cuentas, al pasar como
parámetros punteros en lugar de valores, se pueden modificar los valores
señalados por los punteros (los parámetros reales). Esto se denomina paso por
referencia.

3. CAPITULO II

En este capitulo se mostrarán las técnicas y métodos para la aplicación de


arreglos, cadenas y archivos.

3.1 Unidad 7: Arreglos y Matrices.


Arreglos
Definición: Estructura de datos definida por el usuario que permite almacenar
una colección de elementos de manera continua y todos del mismo tipo. Se
puede observar en la figura siguiente la representación gráfica de un arreglo.

Nombre asignado por el usuario

0 1 2 3 4

DIMENSIÓN: NRO DE ELEMENTOS


INDICE (0,1,2,3,4)
CONTENIDO DEL ELEMENTO

ELEMENTO

Figura Nº 1 Representación Gráfica del Arreglo Fuente: La Autora

Declaración:

TIPO NOMBRE-ARREGLO[DIMENSION];

Donde:

 TIPO: Tipo de datos para la estructura( int, char, float, etc).

 NOMBRE-ARREGLO: Nombre asignado por el usuario.

 DIMENSION: Cantidad de elementos.

 Ejemplo:

 int alumno[10];

A continuación se mostrarán varios ejemplos.

Ejemplo 30.

/* inicializa con ceros los elementos de un arreglo de dimensión 10 e imprime


su contenido */

#include <iostream.h>
void main()
int i, arreglo[10];
for(i = 0; i < 10; i++)
arreglo[i] = 0;
for(i= 0; i < 10; i++)
cout << ” Elemento [“ << i << “ ]: ” << arreglo[i] << endl;

}//Fin de main()

Ejemplo 31.
/* inicializa los elementos de un arreglo mediante una declaración y muestra
su contenido */

#include <iostream.h> //Para cout y cin


void main()
{
int i, arreglo[10] = {32, 27, 64, 18, 95, 14, 90, 70, 60, 37};
for(int i = 0; i < 10; i++)
cout << ” Elemento [“ << i << “ ]: ” << arreglo[i] << endl;

}//Fin de main()

Ejemplo 32.

/* inicializa un arreglo de enteros pares comprendidos entre 2 y 20 inclusive. */

#include <iostream.h>
void main()
{
const int TAMANO_ARREGLO = 10;
int j, arreglo[TAMANO_ARREGLO];
for(j = 0; j < TAMANO_ARREGLO;j++)
arreglo[j] = 2 + 2 * j;
for(j = 0; j < TAMANO_ARREGLO; j++)
cout << ” Elemento [“ << i << “ ]: ” << arreglo[i] << endl;

}//Fin de main()

Ejemplo 33.

/* calcula el valor promedio de un arreglo */


#include <iostream.h>
const int TAMANO_ARREGLO = 10;
void main()
{
double arreglo[TAMANO_ARREGLO] = { 12.2, 45.4, 67.2, 12.2, 34.6, 87.4,
83.6, 12.3, 14.8, 55.5 };
double suma = 0;
for (int ix = 0; ix < TAMANO_ARREGLO; ++ix)
{
suma += arreglo[ix];
cout << "arreglo[" << ix << "]: " << arreglo[ix] << endl;
}//Fin de for
cout << endl << "Promedio: " << suma / TAMANO_ARREGLO << endl;
}//Fin de main()

Ejemplo 34.

/* calcula el valor promedio del arreglo que es inicializado desde el teclado */

#include <iostream.h> //Para cout y cin


const int TAMANO_ARREGLO = 30;
void main()
{
double arreglo[TAMANO_ARREGLO];
int numeroElementos;
do
{
cout << "Introduzca el número de elemento del arreglo [ "<<
TAMANO_ARREGLO << "]: ";
cin >> numeroElementos;
cout << endl;
} while (numeroElementos < 2 || numeroElementos > TAMANO_ARREGLO);
// Pide datos al usuario
for (int ix = 0; ix < numeroElementos; ix++)
{
cout << "arreglo[" << ix << "]: ";
cin >> arreglo[ix];
}//Fin de for
// Ahora obtiene el promedio
double suma = 0;
for (int ix = 0; ix < numeroElementos; ++ix)
suma += arreglo[ix];
cout << endl << "Promedio: " << suma / numeroElementos << endl;
}//Fin de main()

Ejemplo 35.
/* imprime un histograma. */

#include <iostream.h>
#include <iomanip.h>
void main()
{
const int TAMANO_ARREGLO = 10;
int arreglo[TAMANO_ARREGLO] = {19, 3, 15, 7, 11, 9, 13, 5, 17, 1};
cout << "Elemento" << setw(13) << "Valor"
<< setw(17) << "Histograma" << endl;
for(int i = 0; i < TAMANO_ARREGLO; i++)
{
cout << setw(7) << i << setw(13) << arreglo[i] << setw(9);
for(int j = 0; j < arreglo[i]; j++) //Imprime una barra
cout << '*';
cout << endl;
}//Fin del for
}//Fin de main()

Ejemplo 36.

/* ilustra como se pasa un arreglo a una función. */

#include<iostream.h>
const int TAMANO_ARREGLO = 3;
void raro(char arreglo[TAMANO_ARREGLO]);
void main()
{
char nombre[TAMANO_ARREGLO];
nombre[0] ='I';
nombre[1] ='B';
nombre[2] ='M';
cout << “El contenido de nombre[] antes de raro() es: ”;
for (int i = 0; i < TAMANO_ARREGLO; ++i)
cout << nombre[i];
//LLAMA A LA FUNCIÓN raro()
raro(nombre);
//MUESTRA EL ARREGLO nombre
cout << “\n\nEl contenido de nombre[] después de raro() es: ”;
for (int i = 0; i < TAMANO_ARREGLO; ++i)
cout << nombre[i];
} // Fin de main()

void raro(char arreglo[TAMANO_ARREGLO])


{
for (int i = 0; i < TAMANO_ARREGLO; ++i)
--arreglo[i];
} // Fin de raro()

Matrices.

Definición: Estructura de datos definida por el usuario que permite almacenar


una colección de elementos de manera continua y todos del mismo tipo. La
diferencia con los arreglos está en que, en las matrices, los elementos no están
organizados linealmente sino que su organización es bidimensional, es decir,
en filas y columnas. Se puede observar en la figura siguiente la representación
gráfica de una matriz.

Columnas
0 1 2 3 4 5 6
1
2
3

Filas Dimensión: Números de Filas * Número de Columnas.

Figura Nº 2 Representación Gráfica de la Matriz Fuente: La Autora

Declaración:

TIPO NOMBRE-MATRIZ[FILAS][COLUMNAS];

Donde:
 TIPO: Tipo de datos para la estructura( int, char, float, etc).

 NOMBRE-MATRIZ: Nombre asignado por el usuario.

 DIMENSION: NRO DE FILAS * NRO DE COLUMNAS.

 Ejemplo:

 int alumno[10][10];

 char nombre[20][10];

A continuación se mostrarán varios ejemplos.

Ejemplo 37.

/* visualiza los valores del arreglo */

#include <iostream.h>
void main(void)
{
int renglon, columna;
float tabla[3][5] = { {1.0, 2.0, 3.0, 4.0, 5.0},
{6.0, 7.0, 8.0, 9.0, 10.0},
{11.0, 12.0, 13.0, 14.0, 15.0}};
for (renglon = 0; renglon < 3; renglon++)
for (columna = 0; columna < 5; columna++)
cout << "tabla[" << renglon << "][" << columna << "] = "
<< tabla[renglon][columna] << endl;
}//Fin de main()

Ejemplo 38.

/* utiliza la función mostrarArreglo() para visualizar el contenido de varios


arreglos de dos dimensiones. */

#include <iostream.h>
void mostrarArreglo(int arreglo[][10], int renglones)
{
int i, j;
for (i = 0; i < renglones; i++)
for (j = 0; j < 10; j++)
cout << "arreglo[" << i << "][" << j << "] = " << arreglo[i][j]
<< endl;
}//Fin de mostrarArreglo()
void main(void)
{
int a[1][10] = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}};
int b[2][10] = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19, 20}};
int c[3][10] = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19, 20},
{21, 22, 23, 24, 25, 26, 27, 28, 29, 30}};
mostrarArreglo(a, 1);
cout << endl;
mostrarArreglo(b, 2);
cout << endl;
mostrarArreglo(c, 3);
cout << endl;
}//Fin de main()

Ejemplo 39.

/* regresa la suma de los valores de un arreglo bidimensional.*/

#include <iostream.h>
long sumarArreglo(int arreglo[], int elementos)
{
long suma = 0;
int i;
for (i = 0; i < elementos; i++)
suma += arreglo[i];
return(suma);
}//Fin de sumarArreglo()
void main(void)
{
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int b[2][10] = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19, 20}};
int c[3][10] = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19, 20},
{21, 22, 23, 24, 25, 26, 27, 28, 29, 30}};
cout << "La suma de los elementos del arreglo a[10] es = " <<
sumarArreglo(a, 10)<< endl;
cout << "La suma de los elementos del arreglo b[2][10] es = " <<
sumarArreglo((int *)b, 20)<< endl;
cout << "La suma de los elementos del arreglo c[3][10] es = " <<
sumarArreglo((int *)c, 30)<< endl;
}//Fin de

Ejemplo 41.

/* calcula el promedio de cada columna en una matriz bidimensional. */

#include <iostream.h>
const int COL_MAX = 3;
const int REN_MAX = 3;
void main(void)
{
double matriz[REN_MAX][COL_MAX] = { 1, 2, 3,
4, 5, 6,
7, 8, 9 };
double suma, promedio;
int renglones = REN_MAX, columnas = COL_MAX;
// Despliega los elementos de la matriz
cout << "La matriz es:" << endl;
for (int i = 0; i < renglones; i++)
{
for (int j = 0; j < columnas; j++)
{
cout.width(4);
cout.precision(1);
cout << matriz[i][j] << " ";
}//Fin del for interno
cout << endl;
}//Fin del for externo
cout << endl;
// Obtiene la suma de cada columna
for (int j = 0; j < columnas; j++)
{
suma = 0.0; // Inicializa suma
for (int i = 0; i < renglones; i++)
suma += matriz[i][j];
promedio = suma / renglones;
cout << "El promedio de la columna " << j
<< " = " << promedio << endl;
}//Fin del for
}//Fin de main()

6..2 Unidad 8: Cadenas de Caracteres.

Una cadena es una serie de caracteres que se trata como unidad. Una cadena
puede incluir letras, dígitos y diversos caracteres especiales, como +, -, *, /, $ y
otros. En C/C++ las literales de cadena o constantes de cadena se escriben
entre comillas, como sigue: “Iris Rangel” (un nombre), Una cadena en C/C++ es
un arreglo de caracteres que termina con el carácter nulo (‘ \0’).

La biblioteca de manejo de cadenas ofrece muchas funciones útiles para la


manipulación de cadenas de datos, la comparación de cadenas, la búsqueda
de caracteres y cadenas dentro de cadenas, la división de cadenas en tokens
(separación de cadenas en piezas lógicas) y la determinación de la longitud de
una cadena.

Se debe incluir la librería “string” en el programa para poder tener acceso a los
prototipos de funciones para el tratamiento de cadenas. La siguiente tabla
Funciones de la Librería string, contiene la descripción de las instrucciones
correspondiente a la librería string.
Utilizadas (explicar que contiene) (esta es la fuente Organízala) fue
tomada de la pagina de es.wikipedia.org/wiki/String.h.

NOMBRE DESCRIPCION
memcpy copia n bytes entre dos áreas de memoria que no deben
solaparse
memmove copia n bytes entre dos áreas de memoria; al contrario
que memcpy las áreas pueden solaparse
memchr busca un valor a partir de una dirección de memoria dada
y devuelve un puntero a la primera ocurrencia del valor
buscado o NULL si no se encuentra
memcmp compara los n primeros caracteres de dos áreas de
memoria
memsets sobre escribe un área de memoria con un patrón de
bytes dado
strcat añade una cadena al final de otra
strncat añade los n primeros caracteres de una cadena al final
de otra
strncat añade los n primeros caracteres de una cadena al final
de otra
strchr localiza un carácter en una cadena, buscando desde el
principio
strrchr localiza un carácter en una cadena, buscando desde el
final
strcmp compara dos cadenas alfabéticamente (‘a’!=’A’)
strncmp compara los n primeros caracteres de dos cadenas
numéricamente (‘a’!=’A’)
strcoll compara dos cadenas según la colación actual (‘a’==’A’)
strcpy copia una cadena en otra
strncpy copia los n primeros caracteres de una cadena en otra
strerror devuelve la cadena con el mensaje de error
correspondiente al número de error dado
strlen devuelve la longitud de una cadena
strspn devuelve la posición del primer carácter de una cadena
que no coincide con ninguno de los caracteres de otra
cadena dada
strcspn devuelve la posición del primer carácter que coincide con
alguno de los caracteres de otra cadena dada
strpbrk encuentra la primera ocurrencia de alguno de los
caracteres de una cadena dada en otra
strstr busca una cadena dentro de otra
strtok parte una cadena en una secuencia de tokens
strrev invierte una cadena
Tabla Nº 7 Funciones de la Librería string Fuente: es.wikipedia.org/wiki/String.h.

A continuación se muestran algunos ejemplos que utilizan las funciones de la


librería.

Ejemplo 42.

/* muestra el uso de strcpy() y strncpy(). */


#include <iostream.h>
#include <string.h>
void main ()
{
char x[] = "Feliz Cumpleaños a Ti";
char y[25], z[15];
cout << "La cadena de caracteres en el arreglo x es: " << x
<< "\nLa cadena de caracteres en el arreglo y es: " << strcpy(y, x)
<< '\n';
strncpy(z, x, 16); //No copia el caracter nulo
z[16] = '\0';
cout << "La cadena de caracteres en el arreglo z es: " << z << endl;
}//Fin de main()

Ejemplo 43.

/* muestra el uso de las funciones strcat() y strncat(). */

#include <iostream.h>
#include <string.h>
void main()
{
char s1[20] = "Feliz ";
char s2[] = "Año Nuevo ";
char s3[40] = "";
cout << "s1 = " << s1 << "\ns2 = " << s2;
cout << "\nstrcat(s1, s2) = " << strcat(s1, s2);
cout << "\nstrncat(s3, s1, 6) = " << strncat(s3, s1, 6);
cout << "\nstrcat(s3, s1) = " << strcat(s3, s1) << endl;
}//Fin de main()

Ejemplo 44.

/* muestra el uso de las funciones strcmp() y strncmp(). */

#include <iostream.h> //Para cout y cin


#include <iomanip.h> //Para setw()
#include <string.h> //Para strcmp() y strncmp()
void main()
{
char *s1 = "Feliz Año Nuevo";
char *s2 = "Feliz Año Nuevo";
char *s3 = "Feliz Vacación";
cout << "s1 = " << s1 << "\ns2 = " << s2
<< "\ns3 = " << s3 << "\n\nstrcmp(s1, s2) = "
<< setw(2) << strcmp(s1, s2)
<< "\nstrcmp(s1, s3) = " << setw(2)
<< strcmp(s1, s3) << "\nstrcmp(s3, s1) = "
<< setw(2) << strcmp(s3, s1);
cout << "\n\nstrncmp(s1, s3, 6) = " << setw(2)
<< strncmp(s1, s3, 6) << "\nstrncmp(s1, s3, 7) = "
<< setw(2) << strncmp(s1, s3, 7)
<< "\nstrncmp(s3, s1, 7) = "
<< setw(2) << strncmp(s3, s1, 7) << endl;
}//Fin de main()

Ejemplo 45.

/* muestra el uso de la función strtok(). */

#include <iostream.h> //Para cout y cin


#include <string.h> //Para strtok()
void main(void)
{
char cadena[] = "Esta es una oración con 7 tokens";
char *tokenPtr;
cout << "La cadena a dividirse en tokens es:\n" << cadena
<< "\n\nLos tokens son:\n";
tokenPtr = strtok(cadena, " ");
while(tokenPtr != NULL)
{
cout << tokenPtr << '\n';
tokenPtr = strtok(NULL, " ");
}//Fin de while
}//Fin de main()
Ejemplo 46.

/* muestra el empleo de la función strlen(). */

#include <iostream.h> //Para cout y cin


#include <string.h> //Para strlen()
void main(void)
{
char *cadena1 = "abcdefghijklmnopqrstuvwxyz";
char *cadena2 = "cinco";
char *cadena3 = "México";
cout << "La longitud de \"" << cadena1
<< "\" es " << strlen(cadena1)
<< "\nLa longitud de \"" << cadena2
<< "\" es " << strlen(cadena2)
<< "\nLa longitud de \"" << cadena3
<< "\" es " << strlen(cadena3) << endl;
}//Fin de main()

6.3 UNIDAD 9: ESTRUCTURAS DE REGISTROS.

Definición:

Son estructuras definidas por el usuario que permiten agrupar varios datos, que
mantengan algún tipo de relación, aunque sean de distinto tipo, permitiendo
manipularlos todos juntos, usando un mismo identificador, o cada uno por
separado. Son llamadas también muy a menudo registros, o en inglés records.
Tienen muchos aspectos en común con los registros usados en bases de
datos. Y siguiendo la misma analogía, cada objeto de una estructura se
denomina a menudo campo, o field.

Declaración:

struct nombre
{
tipo nombre_miembro_1;
tipo nombre_miembro_2;

} Registro;

Donde:

1. struct: En C++ la palabra struct es opcional en la declaración de objetos, al


contrario de lo que sucede en C, en el que es obligatorio usarla.

2. nombre: Nombre opcional para referirse a la estructura

3. tipo: Tipo de dato de cada campo.

4. nombre_miembro: Campos de la estructura.

5. Registro: Objeto de la estructura.

Ejemplo:

struct Persona
{
char Nombre[15];
char Direccion[65];
int AnyoNacimiento;
} Fulanito;

Este ejemplo define la estructura Persona y declara a Fulanito como un objeto


de ese tipo. Para acceder al nombre de Fulanito, por ejemplo para visualizarlo,
usaremos la forma:

cout << Fulanito.Nombre;

Ejemplo 47.

/* ilustra el uso de una estructura. */

#include <iostream.h> //Para cout y cin


#include <string.h> //Para strcpy()
void main(void)
{
struct empleado
{
char nombre[64];
long id_empleado;
float salario;
char telefono[10];
int numero_oficina;
} trabajador;
// Copia un nombre a la cadena
strcpy(trabajador.nombre, “Juan Pérez Martínez”);
trabajador.id_empleado = 12345;
trabajador.salario = 25000.00;
trabajador.numero_oficina = 102;
// Copia un número telefónico a la cadena
strcpy(trabajador.telefono, “555-1212”);
cout << “Empleado: ” << trabajador.nombre << endl;
cout << “Teléfono: ” << trabajador.telefono << endl;
cout << “Id empleado: ” << trabajador.id_empleado << endl;
cout << “Salario: ” << trabajador.salario << endl;
cout << “Oficina: ” << trabajador.numero_oficina << endl;
}//Fin de main()

Ejemplo 48.

/* pide dos juegos de coordenadas de un rectángulo y calcula su área.*/

#include <iostream.h> //Para cout y cin


#include <math.h> //Para fabs()
struct point
{
double x;
double y;
};
struct rect
{
point esi; // esquina superior izquierda
point eid; // esquina superior derecha
double area;
};
void main(void)
{
rect r;
double largo, ancho;
cin >> r.esi.x >> r.esi.y;
cout << "Introduzca las coordenadas (X Y) para eid del rectángulo: ";
cin >> r.eid.x >> r.eid.y;
largo = fabs(r.esi.x - r.eid.x);
ancho = fabs(r.esi.y - r.eid.y);
r.area = largo * ancho;
cout << "El área del rectángulo es de: " << r.area << endl;
}//Fin de main()

3.2 Unidad 10: Archivos.

Antes de comenzar a hablar de lo que es la unidad 10: archivos sería


conveniente aclarar que es un archivo y cuáles son sus objetivos. Cuando se
habla de archivos, habitualmente se utilizan cuatro términos: Campo, Registro,
Archivo y Base de datos. Se puede decir que estos términos forman una
estructura de datos agrupados y relacionados de alguna manera en particular
donde uno contiene al otro y que nos facilitan la manera de almacenarlos y
recuperarlos la información. Un Campo es el elemento de datos básico, como
ejemplo: un campo individual contiene un valor único, como el apellido de un
empleado, una fecha o un valor leído por un sensor. Lo más importante de un
campo es su longitud (que puede ser fija o variable) y el tipo de datos que
contenga(ya sea una cadena ASCII o un dígito decimal). Un Registro es un
conjunto de campos relacionados que pueden tratarse como una unidad por
algunos programas de aplicación. Por ejemplo: un registro de nombre
“empleado” contendría campos tales como nombre, nro de cédula, fecha de
contratación, etc. Un registro puede ser de longitud variable en el caso de que
el número de campos pueda variar, esto dependerá de su diseño. Un Archivo
es un conjunto de registros similares. Los usuarios y las aplicaciones se
refieren a él por un nombre que es único y que puede crearse y borrarse. Las
restricciones al control de acceso suelen aplicarse a los archivos. Es decir en
un sistema compartido, el acceso de los usuarios y los programas se garantiza
o deniega a archivos completos, en otros casos se aplica a los registros e
incluso a los campos. Una Base de datos es un conjunto de datos
relacionados. El aspecto fundamental es que está diseñada para ser usada por
varias aplicaciones diferentes. Puede contener toda la información relativa a
una organización o proyecto. En cuanto a los objetivos de manera general se
tiene que:

 Cumplir con los requerimientos del usuario.


 Garantizar que los datos en los archivos sean válidos.
 Optimizar el rendimiento en términos de productividad y tiempo de respuesta.
 Minimizar o eliminar la posibilidad de pérdida o destrucción de datos.

Estos objetivos deben tenerse en cuenta en todo nuestro estudio de los sistemas de
gestión de archivos.

6.4.1 Concepto.

Es un conjunto de registros similares. Los usuarios y las aplicaciones se refieren a él por


un nombre que es único y que puede crearse y borrarse. Las restricciones al control de
acceso suelen aplicarse a los archivos. Es decir en un sistema compartido, el acceso de
los usuarios y los programas se garantiza o deniega a archivos completos, en otros casos
se aplica a los registros e incluso a los campos.

6.4.2 Estructura y acceso.


6.4.3 Tipos de archivo.
La mayor parte de las estructuras de organizaciones alternativas de archivos se
encuentran dentro de estas categorías:

Tipo de Contenido

Archivos de texto.
Son aquellos que pueden contener cualquier clase de datos y de tal manera
que son “entendibles” por la gente. Los datos en un archivo de texto se
almacenan usando el código ASCII, en el cual cada carácter es representado
por un simple byte. Debido a que los archivos de texto utilizan el código ASCII,
se pueden desplegar o imprimir. En este tipo de archivos, todos sus datos se
almacenan como cadenas de caracteres, es decir, los números se almacenan
con su representación ASCII y no su representación numérica, por lo tanto no
se pueden realizar operaciones matemáticas directamente con ellos.

Archivos binarios.

Almacenan los datos numéricos con su representación binaria. Pueden ser archivos que
contienen instrucciones en lenguaje de máquina listas para ser ejecutadas. Por ejemplo,
cuando se escribe un programa en el lenguaje C/C++, las instrucciones almacenadas en
un archivo de texto llamado programa fuente y una vez que pasa al proceso de
compilación y ejecución, el programa se convierte en un programa ejecutable (en
lenguaje de máquina), que es directamente entendido por la computadora y se crea un
archivo binario. En este tipo de archivos también se pueden almacenar diferentes tipos
de datos incluyendo datos numéricos; sin embargo, cabe destacar que los datos
numéricos se graban con su representación binaria (no con su representación ASCII),
por tal razón, cuando se despliegan con un editor de textos, aparecen caracteres que no
se pueden interpretar.

Tipos de Acceso

Archivos secuenciales
 Es la forma más común de estructura de archivos.
 Se emplea un formato fijo para los registros, son de la misma longitud y constan del
mismo número de campos de tamaño fijo con un orden determinado.
 Se necesita almacenar los valores de cada campo; el nombre del campo y la longitud
de cada uno son atributos de la estructura del archivo. Cada registro tiene un campo
clave que lo identifica (generalmente es el primero de cada registro). Los registros se
almacenan en secuencia por la clave.
 Para las aplicaciones interactivas que incluyen peticiones o actualizaciones de
registros individuales, los archivos secuenciales no son óptimos. El acceso requiere una
búsqueda secuencial de correspondencias con la clave. Si el archivo entero o gran parte
de él pueden traerse a la memoria principal de una sola vez, se podrán aplicar técnicas
de búsquedas más eficientes. Al acceder un registro de un archivo secuencial grande, se
produce un procesamiento extra y un retardo considerable.

Archivos secuenciales indexados:

 Los registros se organizan en una secuencia basada en un campo


clave presentando dos características, un índice del archivo para soportar los
accesos aleatorios y un archivo de desbordamiento. El índice proporciona una
capacidad de búsqueda para llagar rápidamente al registro deseado y el
archivo de desbordamiento es similar al archivo de registros usado en un
archivo secuencial, pero está integrado de forma que los archivos de
desbordamiento se ubiquen siguiendo un puntero desde su registro predecesor.

 La estructura más simple tiene como índice un archivo secuencial


simple, cada registro del archivo índice tiene dos campos, un campo clave igual
al del archivo principal y un puntero al archivo principal. Para encontrar un
campo especifico se busca en el índice hasta encontrar el valor mayor de la
clave que es iguale o precede al valor deseado de la clave, la búsqueda
continua en el archivo principal a partir de la posición que indique el puntero.

 Cada registro del archivo principal tiene un campo adicional que


es un puntero al archivo de desbordamiento. Cuando se inserta un nuevo
registro al archivo, también se añade al archivo de desbordamiento. El registro
del archivo principal que precede inmediatamente al nuevo registro según la
secuencia lógica se actualiza con un puntero del registro nuevo en el archivo
de desbordamiento, si el registro inmediatamente anterior está también en el
archivo de desbordamiento se actualizará el puntero en el registro.
 Para procesar secuencialmente un archivo completo los registros
del archivo principal se procesarán en secuencia hasta encontrar un puntero al
archivo de desbordamiento, el acceso continua en el archivo de
desbordamiento hasta que encuentra un puntero nulo, entonces renueva el
acceso donde se abandonó en el archivo principal.

Archivos indexados:

 A los registros se accede solo a través de sus índices. No hay restricción en


la ubicación de los registros, al menos un índice contiene un puntero a cada
registro y pueden emplearse registros de longitud variable.

 Se suelen utilizar dos tipos de índices, uno exhaustivo que contiene una
entrada para cada registro del archivo principal y se organiza como un archivo
secuencial para facilitar la búsqueda, el otro índice es parcial que contiene
entrada a los registros donde esté el campo de interés.

 Con registro de longitud variable, algunos registros no contendrán todos los


campos y cuando se añade un registro al archivo principal, todos los archivos
de índices deben actualizarse.

Archivos directos:

 Explotan la capacidad de los discos para acceder directamente a cualquier


bloque de dirección conocida.

 Se requiere un campo clave en cada registro.

 Los archivos directos son muy usados donde se necesita un acceso muy
rápido, donde se usan registros de longitud fija y donde siempre se accede a
los registros de una vez.
6.4.4 Métodos para realizar la gestión de archivos.

Operaciones de E/S.

La biblioteca estándar de C++ define una jerarquía de clases para el


tratamiento de E/S, tanto estándar como de archivos, como flujo (file stream) de
bytes donde se encuentran todas las funciones necesarias para abrir y cerrar
archivos, así como para realizar las operaciones de lectura y escritura de datos
en archivos. # include <fstream.h>.

Parte de esta jerarquía es:


ios_base

istream ostream

ifstream ofstream fstream

fstream

fstream.h define las clases ifstream, iostream y ofstream. La primera está


orientada a ficheros de entrada, la segunda a ficheros de salida, y la tercera
puede manejar cualquiera de los dos tipos o ficheros de entrada y salida. A
continuación se muestra la tabla1 de funciones de archivo, la cual contiene los
métodos mas utilizados para el desarrollo de programas.

Tabla 1 funciones de archivo


MÉTODO DESCRIPCIÓN
Open abrir archivo
open(const char *name, int mode,int prot=filebuf::openprot);
Close cierra el archivo
close();
Operador >> El operador de flujo de salida >> se puede usar con streams de salida
cuando se trabaja con texto.
Operador << El operador de flujo de entrada << se puede usar con streams de entrada
cuando se trabaja con texto.
put Sirve para cualquier stream de salida, e inserta un carácter en el stream.

ostream& put(char ch);


Get istream& get(char*, int len, char = '\n');
Lee caracteres y los almacena en el buffer indicado en el primer parámetro
hasta que se leen "len" caracteres o hasta que se encuentra el carácter
indicado en el tercer parámetro, que por defecto es el retorno de línea.
istream& get(char&);
Extrae un único carácter en la referencia a char proporcionada.
getline istream& getline(char*, int, char = '\n');
Extrae caracteres hasta que se encuentra el delimitador y los coloca en el
buffer, elimina el delimitador del stream de entrada y no lo añade al
buffer
eof eof();
Verifica si se ha alcanzado el final del archivo, devuelve un valor nulo si no
es así.
Clear void clear(iostate state=0);
Cuando se produzca una condición de error en un stream es necesario
eliminarla, ya que en caso contrario ninguna operación que se realice sobre
él tendrá éxito. El resultado se definen en un enumerado:
enum io_state ;
goodbit: indica que el estado es correcto.
eofbit: indica que se ha detectado fin de archivo.
failbit: indica que una operación sobre el stream ha fallado.
badbit: se activa si falla una operación de escritura de buffers.
bad int bad();
Devuelve el estado del bit "badbit".

fail int fail();


Devuelve el estado del bit "failbit".

is_open: int is_open();


Devuelve un valor no nulo si el fichero está abierto.

flush ostream& flush();


Realiza las operaciones de escritura pendientes que aún se han realizado
sólo en el buffer.
MÉTODOS RELACIONADOS CON ACCESO ALEATORIO.
enum seek_dir enum seek_dir ;
beg: relativo al principio del fichero.
cur: relativo a la posición actual del cursor dentro del fichero.
end: relativo al final del fichero
seekg: istream& seekg(streampos pos);
cambiar la posición de modo absoluto.
istream& seekg(streamoff offset, seek_dir dir);Para cambios relativos, en la
que se indica el salto en el primer parámetro y el punto de partida
en el segundo, que puede ser cualquiera de los indicados
anteriormente: ios::beg, ios::cur o ios::end.
seekp: Cambia la posición del cursor en streams de salida.

ostream& seekp(streampos pos);


ostream& seekp(streamoff offset, seek_dir);
Lo mismo que seekg, pero aplicado a estream de salida.
tellg: streampos tellg();
Devuelve la posición actual del cursor dentro de un stream de entrada.

tellp: streampos tellp();


Devuelve la posición actual del cursor dentro de un stream de salida.

read: istream& read(char*, int);


Lee el número de caracteres indicado en el segundo parámetro dentro del
buffer suministrado por el primero.
gcount: int gcount();
Devuelve el número de caracteres sin formato de la última lectura. Las
lecturas sin formato son las realizadas mediante las funciones get,
getline y read.
write: ostream& write(const char*, int);
Escribe el número de caracteres indicado en el segundo parámetro desde el
buffer suministrado por el primero.

Ejemplo 49.

/* Declaración de las clases para trabajar con archivo.*/

#include <fstream>
int main()
{
ifstream lectura; // para leer un archivo
ofstream escritura; // para escribir un archivo
fstream lecturaEscritura; // para leer y escribir un archivo
}
Modos de apertura de archivo.
En la tabla 2 se muestra el modo de apertura de archivos.

Tabla 2 Tabla de modo de apertura de


archivos
MODE DESCRIPCIÒN
Modo de entrada.
In
Out Modo de salida.
Ate Abre el archivo y sitúa el cursor al final.
App Modo append, parecido al anterior, pero las operaciones de escritura siempre
se hacen al final del archivo.
Trunc Si se aplica a archivos de salida, se creará el archivo si no existe previamente,
o se truncará con un tamaño de 0 bytes, si existe.
Nocreate Impide crear un archivo si no existe, en ese caso, la función falla.
Binary Abre el archivo en modo binario.
Cada uno de los valores se pueden combinar usando el operador de bits OR (|).

A continuación se muestran ejemplos de ejercicios sobre archivos secuenciales


y directos.

Ejemplo 50.

/* Creación de archivos tipo texto (Secuencial).*/

#include <fstream>
int main()
{
ifstream lectura; // para leer un archivo físico
ofstream escritura; // para escribir un archivo físico
fstream lecturaEscritura; // para leer y escribir un archivo
// Archivo lógico lectura que lea del archivo de disco ejemplo1.txt.
lectura.open("ejemplo1.txt");
// Archivo lógico escritura que escribe al archivo de disco ejemplo2.txt.
escritura.open("ejemplo2.txt");
// Archivo logico lescturaEscritura que lea y escriba el archivo ejemplo3.txt.
lecturaEscritura.open("ejemplo3.txt", ios::in | ios::out);
}

Ejemplo 51.
/* Después de crear los objetos y abrirlos, se recomienda verificar si la
operación tuvo éxito a través del operador sobrecargado ! de ios, retornando
true si la operación falla. Algunos posibles errores son: intentar abrir un archivo
que no existe en modo lectura, abrir un archivo de lectura sin permiso y abrir un
archivo para escritura si no hay espacio en disco. */

#include <iostream>
#include <fstream>
int main()
{
ifstream lectura; // para leer un archivo
ofstream escritura; // para escribir un archivo
fstream lecturaEscritura; // para leer y escribir un archivo
lectura.open("ejemplo1.txt");
escritura.open("ejemplo2.txt");
lecturaEscritura.open("ejemplo3.txt", ios::in | ios::out);
if (!lectura)
cout << "No se puede abrir el archivo lectura --> ejemplo1.txt" << endl;
if (!escritura)
cout << "No se puede abrir el archivo escritura --< ejemplo2.txt" << endl;
if (!lecturaEscritura)
cout << "No se puede abrir el archivo lecturaEscritura --> ejemplo3.txt" << endl;
}

Ejemplo 52.

/* El siguiente programa genera un archivo de texto donde cada línea contiene


un número de línea correspondiente al valor inicial del número de líneas
solicitado al usuario */

#include <iostream>
#include <fstream>
int main()
{
int numl,i;
ofstream salida; // flujo de salida
// Apertura del archivo, crear y abrir un nuevo archivo
salida.open("ejemplo-escribir.txt");
// Verificando la operacion -- si el archivo existe o no
if (!salida)
cout<<"No se puede abrir el archivo\n";
else
{
cout<<"Suministre el total de lineas del archivo: ";
cin>>numl;
for (i=0;i<numl;i++)
{ //Escritura de un archivo de texto
salida << i+1 <<"\n";
}
}
salida.close(); //Cierre del archivo
cout<<"****** Archivo Procesado ******\n";
}

Ejemplo 53.

/*Lee el archivo ejemplo-escribir.txt línea a línea y lo muestra por pantalla. */

#include <iostream>
#include <fstream>
#include <string>
int main()
{
string i;
ifstream entrada; // flujo de entrada
// Apertura del archivo: abrir un nuevo existente)
entrada.open("ejemplo-escribir.txt");
// Verificando la operacion -- si el archivo existe o no
if (!entrada)
cout<<"No se puede abrir el archivo\n";
else
{
do
{ //Lectura de un archivo de texto
entrada >> i;
cout << i << endl; // muestra lo pantalla
} while (entrada);
}
entrada.close(); //Cierre del archivo
cout<<"****** Archivo Procesado ******\n";
}

Ejemplo 54.

/* Cuando se tienen archivos de textos estructurados, es decir con más de un valor por
línea y de tamaño fijo el número de campos. Se puede escribir con el operador << y
agregar el separador que se necesite. Para leer de debe usar el operador >> tantas
veces como valores están separados por un espacio en blanco o fin de línea. */

#include <iostream>
#include <fstream>
int main()
{
int numl,i,j;
ofstream salida; // flujo de salida
salida.open("ejemplo-escribir2.txt",ios::out);
if (!salida)
cout<<"No se puede abrir el archivo\n";
else
{
cout<<"Suministre el total de lineas del archivo: ";
cin>>numl;
for (i=0;i<numl;i++)
//Escritura de un archivo de texto
salida << i+1 << " " << numl+i <<"\n";
}
salida.close(); //Cierre del archivo
cout<<"****** Archivo de salida Procesado ******\n";
ifstream entrada; // flujo de entrada
entrada.open("ejemplo-escribir2.txt");
if (!entrada)
cout<<"No se puede abrir el archivo\n";
else
{
do
{ //Lectura de un archivo de texto
entrada >> i >> j;
cout << i << " " << j << endl; // muestra lo pantalla
} while (entrada);
}
entrada.close(); //Cierre del archivo
cout<<"****** Archivo de entrada Procesado ******\n";
}

Ejemplo 55.

/* Este programa genera dos archivos: datos.txt y datos.dat. */

#include <iostream>
#include <fstream>

void main()
{
double val;
int num;
cout << "Num datos a generar:"; cin >> num;
fstream foutT("datos.txt",ios::out); //fichero Texto
fstream foutB("datos.dat",ios::out|ios::binary); //fiche. Binario
if (!foutT | !foutB) { cerr << "Error..." << endl; return; }
// generar datos de forma aleatoria y grabarlos en los 2 formatos
foutT.precision(15);
foutT.setf(ios::fixed);
srand(time(NULL));
for (int i=0;i<num;i++)
{
val = (double)rand()*100/RAND_MAX; //entre 0 y 100
foutB.write((char*)&val,sizeof(double));
foutT << val << endl;
}
foutB.close(); //cierra fichero Binario
foutT.close(); //cierra fichero Texto
}

Ejemplo 56.
En el ejemplo 56, ejercicio completo sobre archivo aleatorio y es la automatización de
una agenda, utilizando la siguiente información (nombre, edad, teléfono y dirección. El
programa esta desarrollado en programación estructurada, contiene un menú donde el
usuario podrá seleccionar una opción para:
 Crear Archivo
 Agregar un registro en la agenda.
 Eliminar un registro en la agenda.
 Listar el contenido de todos los registros.
 Buscar un registro en particular.
 Eliminar un registro en particular.

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <fstream>

struct reg
{
char nom[25];
int edad;
char tel[15];
char dir[35];
}; reg regage;

/*Funciones */
void Crear();
void Listar();
void Agregar();
void Modificar();
void Borrar();
void Encontrar();
fstream ficha;
void main() // programa principal
{
int opc;
fstream ficha("agenda.dat", ios::in | ios::out | ios::trunc | ios::binary);
if(!ficha)
cout <<" Error: Problema con el archivo agenda.dat"<<endl;
else
{
do
{
clrscr();
cout <<"1. Crear Archivo"<<endl;
cout <<"2. Agregar"<<endl;
cout <<"3. Eliminar"<<endl;
cout <<"4. Listar"<<endl;
cout <<"5. Buscar"<<endl;
cout <<"6. Modificar"<<endl;
cout <<"7. Salir"<<endl;
cout <<"Opcion"<<endl;
cin >> opc;
switch(opc)
{
case 1: Crear();
break;
case 2: Agregar();
break;
case 3: Borrar();
break;
case 4: Listar();
break;
case 5: Encontrar();
break;
case 6: Modificar();
break;
}
}while(opc!=7);
}
}// fin de main (Programa Principal)

//Funcion que sirve para crear el Archivo Binario


void Crear()
{
cout <<"\n Creando el archivo binario agenda.dat\n";
fstream ficha("agenda.dat", ios::in | ios::out | ios::trunc | ios::binary);
if(!ficha)
cout <<" Error: Problema con el archivo agenda.dat"<<endl;
else
cout <<"\n Archivo binario agenda.dat creado \n";
cin.get();
cin.get();
}// fin de Crear

/* Funcion que sirve para imprimir todos los un registros del Archivo Binario*/
void Listar()
{
int i=1;
ficha.open ("agenda.dat",ios::in | ios::binary);
if(!ficha)
cout << "\n Error de apuertura del archivo agenda.dat\n";
else
{
cout <<"\n U S U A R I O S E N L A A G E N D A\n";
cout <<"---------------------------------------------------------------\n";
while ((ficha.read((char*) &regage, sizeof(reg))!=0))
{
cout <<"=> Datos del Amigo "<<i << endl;
cout <<"Nombre:" << regage.nom << endl;
cout <<"Edad:" << regage.edad << endl;
cout <<"Telefono:" <<regage.tel <<endl;
cout <<"Direccion:" <<regage.dir<< endl;
i++;
}
cout <<"---------------------------------------------------------------\n";
ficha.close();
}
cin.get();
cin.get();
}
// Funcion que sirve para agregar un registro dentro del Archivo Binario
void Agregar()
{
cout <<"\n Agregando un registro al archivo binario agenda.dat\n";
ficha.open ("agenda.dat",ios::in | ios::binary);
if(!ficha)
cout << "\n Error de apuertura del archivo agenda.dat\n";
else
{
/*Introduciendo los Datos DE LA AGENDA*/
cout <<"Nombre: "<< endl;
cin>>regage.nom;
cout <<"Edad: "<<endl;
cin>>regage.edad;
cout << "Telefono: "<<endl;
cin>>regage.tel;
cout <<"Direccion: " << endl;
cin>>regage.dir;
ficha.write((char*) &regage, sizeof(reg));
cout << "\n Registro Agregado\n";
ficha.close();
}
cin.get();
cin.get();
}// fin de Agregar

// Funcion que sirve para Modificar un registro dentro del Archivo Binario*/
void Modificar()
{
char nombre[25];
char cadena[25],cad[2];
int n;
cout <<"\n Modificando un registro del archivo binario agenda.dat\n";
ficha.open("agenda.dat",ios::in | ios::binary);
if(!ficha)
cout << "\n Error de apuertura del archivo agenda.dat\n";
else
{
cout << "Nombre: ";
cin >>nombre;
/*Buscando nombre dentro del Archivo*/
while (n=ficha.read((char*) &regage, sizeof(reg))!=0 && stricmp(regage.nom,cadena)!
=0);
if (n==0)
cout <<"No existe el registro en la agenda"<<cadena;
else
{
cout << "\n Amigo encontrado....!!!\n";
cout << "Nombre: "<<regage.nom;
cout << "Edad: "<<regage.edad;
cout << "Telefono "<<regage.tel;
cout << "Direccion: \n"<<regage.dir;
cout << "\n CAMBIANDO VALORES \n";
cout << "Dame el nombre nuevo del Amigo: ";
cin>>regage.nom;
cout << "Dame la nueva Edad del Amigo: ";
cin>>regage.edad;
cout << "Dame el nuevo telefono del Amigo: ";
cin>>regage.tel;
cout << "Dame la nueva direccion del Amigo: ";
cin>>regage.dir;
cout << "\n GRABANDO Y CERRANDO ARCHIVO \n";
ficha.seekg((n-1)*sizeof(regage),ios::cur);
ficha.write((char *) &regage, sizeof( regage));
}
ficha.close(); //Cerramos el archivo
}
}

// Funcion que sirve para borrar un registro dentro del Archivo Binario*/
void Borrar()
{
int encontrado=0;
char cadena[25];

cout << "Introduce el nombre del Amigo a borrar: ";


cin >>cadena;

cout << "\n BORRANDO REGISTROS \n";


ficha.open("agenda.dat",ios::in | ios::binary);
if(!ficha)
cout << "\n Error de apuertura del archivo agenda.dat\n";
else
{
ficha.open("agendaAux.dat",ios::in | ios::binary);
if(!ficha)
cout << "\n Error de apuertura del archivo agenda.dat auxiliar\n";
else
{
while (ficha.read((char*) &regage, sizeof(regage))!=0);
if(stricmp(regage.nom,cadena)!=0)
ficha.read((char*) &regage, sizeof(regage));
else
encontrado=1;
ficha.close();
}
ficha.close();
if(encontrado)
{
system("del agenda.dat");
system("ren paso.$$$ agenda.dat");
cout <<"\n Registro BORRADO con Exito!!!\n";
}
else{
system("del paso.$$$");
cout <<"\n El Registro NO SE ENCONTRO, no fue borrado!!!";
}
}
}

// Funcion para Encontrar un Amigo e imprimir sus datos*/


void Encontrar()
{
int n;
char cadena[25];

cout <<"Introduce el nomrbre del Amigo que buscas: ";


cin >>cadena;

cout <<"\n Buscando a un Amigo \n";


ficha.open("agenda.dat",ios::in | ios::binary);
if(!ficha)
cout << "\n Error de apuertura del archivo agenda.dat\n";
else
{
while (n=ficha.read((char*) &regage, sizeof(reg))!=0 && stricmp(regage.nom,cadena)!
=0);
if (n==0)
cout<< "No existe el amigo llamado:"<<cadena;
else{
cout <<"\n Amigo encontrado....!!!\n";
cout <<"Nombre:" << regage.nom;
cout <<"Edad:" << regage.edad;
cout <<"Telefono: \n"<<regage.tel;
cout<<"Direccion: \n"<< regage.dir;

/* getch();*/

}
}

}
RECOMENDACIONES Y/O SUGERENCIAS

Se recomienda que, con el interés de aprender el lenguaje de programación


C++, siga esta guía de principio a fin, tal y como si se tratara de un tutorial. Por
supuesto, para su mejor aprovechamiento se sugiere consultar otras
bibliografías, así como la ayuda proporcionada por el compilador que utilice
para hacer los ejemplos.

Al finalizar la lectura y estudio de esta guía contará con los elementos


necesarios para
Desarrollar programas estructurados. La principal característica de C++ es que
es un lenguaje orientado a objetos, es por eso que, si se tiene el interés de
tener un mejor nivel de programación y hacer cosas mejores, es necesario que
se estudie la programación orientada a objetos.

El lenguaje C++ ha sido una base para otros lenguajes de programación, es


por ello que encontramos varias similitudes con otros. Y, siendo un lenguaje
vigente para el desarrollo de aplicaciones, resulta muy útil aprenderlo. Sin
embargo, la autora considera que no es absolutamente necesario aprender a
programar con objetos en C++ antes que encualquier otro lenguaje, de hecho,
personalmente recomiendo adentrarse desde ahora en el lenguaje Java, con el
cual, además de que proporciona varias ventajas que en otros lenguajes
difícilmente tenemos (como que los punteros no existen), se ha convertido en
uno de los lenguajes con más amplia “cobertura”, refiriéndome con esto a que
las implementaciones de este lenguaje prácticamente no tienen límites,
pudiendo encontrar aplicaciones desarrolladas con él en cualquier lado.

CONCLUSIONES

La implementación de esta guía de estudio, ayudará a los estudiantes del


PNFI del trayecto I, a fortalecer el nivel de programación desarrollando el
pensamiento lógico y abstracto que requieren actividades ligadas a la
programación como por ejemplo la modelación, la abstracción, la planificación
de procesos, la síntesis, entre otros, contribuyendo a :

 El Desarrollo en los estudiantes sus posibilidades, aptitudes, intereses y


necesidades educativas.
 El aumento de sus conocimientos tanto educativos como profesionales.
 Ayudo a muchos estudiantes en el desarrollo de sus habilidades en la
programación.
 Proporciono información útil, tanto a profesores como a estudiantes.
 Fundamentalmente contribuyó en darme mayores destrezas en las
distintas áreas de mis funciones docentes y de investigación.

Los resultados obtenidos luego de la culminación de este proyecto fue exitoso


porque:
 Los profesores participantes se integraron a las clases ofreciendo ideas
y sugerencias.
 Durante las clase se creo un ambiente de interés y muy participativo.
 El profesor actuó solo como un ayudante encargado principalmente de
coordinar las actividades de aprendizaje propuesto en la guía.
 Los estudiantes aprenderán a su propio ritmo.

Puedo argumentar que el desarrollo de este proyecto ha dado paso a la


participación y colaboración de todos los estudiantes y profesores, con
posibilidad de creación de otros proyectos que ayuden a la transformación en
cualquier área. Esto nos demuestra que la unión hace la fuerza, que no son
acciones aisladas de una persona, de un grupo, sino que es la fuerza de todos
la que hace posible que se produzcan cambios significativos y se vaya
transformando poco a poco la realidad del nuevo modelo de sociedad socialista
de igualdad, equidad y justicia social.
BIBLIOGRAFÍA
USAR FRANCESA y normas de bibliografía

Deitel, Harvey M.; Deitel, Paul J. C++, cómo programar. Edit. Pearson
Educación.
4ª ed., 2003. 1320 pp

Gary J. Bronson. C++ Para Ingenería y Ciencias. Segunda Edición. Edit


Thomson

Schildt, Herbert. C, Manual de referencia.Edit. Osborne McGraw-Hill. 4ª ed.,


2000. 709 pp.

Toledo Martínez, Miguel Á.

http://www.zator.com/compiladoresC.htm

Você também pode gostar